我必须从数据库中抓取i18n文本.默认语言是英文,它包含所有内容的文字.但非英语语言并不一定具有所需的所有翻译.如果某个实体/键的非英语翻译在数据库中不可用,那么我想让它返回英文文本.所以,英语是这里的后备语言.
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 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 | +-----+---------------------------+
有问题的DB是Postgresql,但与RDMBS无关的方式会很好.
解决方法
尝试这样的东西:
SELECT e.key,COALESCE(o.value,e.value) FROM Translation e LEFT OUTER JOIN Translation o ON e.key=o.key and o.language_code='nl' WHERE e.language_code='en'
原文地址:https://www.jb51.cc/mssql/75212.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。