加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 使用后备语言检索i18n数据

发布时间:2020-12-12 08:50:37 所属栏目:MsSql教程 来源:网络整理
导读:我必须从数据库中抓取i18n文本.默认语言是英文,它包含所有内容的文字.但非英语语言并不一定具有所需的所有翻译.如果某个实体/键的非英语翻译在数据库中不可用,那么我想让它返回英文文本.所以,英语是这里的后备语言. i18n文本表格如下(PostgreSQL方言): CREAT
我必须从数据库中抓取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            |
+-----+---------------------------+

如何在一个单一的SQL查询中实现这一点?

有问题的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'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读