11
我必須從數據庫中獲取i18n文本。默認語言是英文,它的文字爲,全部爲。但非英語語言不一定具有所有期望的翻譯。如果某個實體/密鑰的非英文翻譯在數據庫中不可用,那麼我想讓它返回英文文本。所以,英文是fallback這裏的語言。使用備用語言檢索i18n數據
的國際化文本表看起來像這樣(PostgreSQL的方言):
CREATE TABLE translation (
id SERIAL PRIMARY KEY,
language_code CHAR(2) NOT NULL,
key VARCHAR(20) NOT NULL,
value TEXT NOT NULL,
CONSTRAINT translation_unique UNIQUE (language_code, key)
)
的數據是這樣的:
INSERT INTO translation
(language_code, key, value)
VALUES
('en', 'foo', 'foo in English'),
('nl', 'foo', 'foo in Nederlands (Dutch)'),
('en', 'bar', 'bar in English')
我想基本上做下面的僞SQL查詢:
SELECT key, value
FROM translation
WHERE (language_code = 'nl' OR IF value IS NULL THEN language_code = 'en')
(實際上,'nl'
值將被參數化)
因此,它返回下列信息:
+-----+---------------------------+ | key | value | +-----+---------------------------+ | foo | foo in Nederlands (Dutch) | | bar | bar in English | +-----+---------------------------+
我怎樣才能在一個SQL查詢實現這一目標?
有問題的數據庫是PostgreSQL,但RDMBS不可知論的方式會很好。
作品中預言過。謝謝! – 2012-08-27 08:39:21