使用后备语言检索 i18n 数据

2023-11-22

我必须从数据库中获取 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 无关的方式会很好。


尝试这样的事情:

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'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用后备语言检索 i18n 数据 的相关文章

随机推荐

  • Magento - 如何将分层导航添加到高级搜索?

    如何将分层导航添加到高级搜索结果页面 Magento 版本 1 7 下面的补丁将在高级搜索结果中显示分层导航 并且可以与分层导航配合良好 分层导航和搜索结果基于两个单独的产品集合显示 其中一个由目录搜索 模型 Layer php另一个由目录
  • 如何在 Libgdx 中跟踪多个触摸事件?

    我正在使用 Libgdx 制作赛车游戏 我想触摸屏幕的右侧一半来加速 同时在不删除先前触摸点的情况下再次触摸屏幕左侧的另一个触摸点来射击 我无法检测到后来的接触点 我已经搜索并得到Gdx input isTouched int index
  • Windows 视觉主题:零件和状态库?

    Microsoft Windows 允许程序员使用当前主题的外观和感觉 使用诸如DrawThemeBackground and DrawThemeText 这些元素由类 零件和状态指定 如零件和状态MSDN 页面 不幸的是 该页面的信息并不
  • Spring配置@ResponseBody JSON格式

    想象一下我在 Spring 3 Controller 中有这个带注释的方法 RequestMapping public ResponseBody MyObject index RequestBody OtherObject obj MyOb
  • 如何在IntelliJ IDEA中查看JavaDoc? [复制]

    这个问题在这里已经有答案了 I just switched from Eclipse to IntelliJ IntelliJ lacks one feature from Eclipse when you put your mouse o
  • 如何在 Java 中将整数转换为本地化的月份名称?

    我得到一个整数 我需要转换为各种语言环境中的月份名称 区域设置 en us 的示例 1 gt 一月2 gt 二月 区域设置 es mx 的示例 1 gt 埃内罗2 gt 费布雷罗 import java text DateFormatSym
  • Jmeter 的 WebSocket 插件 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有人可以与我分享 JMeter Websocket 协议插件采样器的链接吗 我尝试从下面的链接安装 https github com kawasim
  • 错误:管道损坏/MySQL 服务器已消失

    MySQL 抛出 Broken Pipe 和 MySQL Server has gone gone 错误 我的数据库表包含文本字段 我每隔 1 小时定期在其中插入大型 HTML 我应该考虑设置哪个 MySQL 变量 这是当前配置 mysql
  • C语言的unicode你好世界?

    我正在尝试从 C 输出 蠀 等内容 include
  • 启动和停止来自广播接收器的通知

    我正在尝试从广播接收器启动状态栏通知 然后从另一个广播接收器停止它 但我遇到了问题 我想在 USB 连接时在状态栏中启动通知 然后在 USB 断开连接时我想停止它 我设置了两个接收器并正在工作 只是在从接收器启动和停止一个接收器方面遇到困难
  • 如何从 DatePickerDialog 获取 DatePicker?

    我有一个活动弹出 android app DatePickerDialog DatePickerDialog dialog new DatePickerDialog this startDateSetListener start cal g
  • 固定页眉

    我以前从未处理过 CSS 但现在我必须处理 我正在开发一些 HTML 代码 一个网站的草图 并且有 CSS 问题 我希望我的标题位于固定位置 我的意思是它始终应该位于网站的顶部 即使有太多内容以至于网站必须滚动才能看到所有内容 我尝试过一些
  • 删除控制器/类中的 HttpServletRequest 参数的最佳方法?

    我有一个情况 我需要将 HTTP 请求对象重定向到其他控制器 类以进行进一步处理 问题是 在某些控制器中 我想更好地控制我转发到下一个类的参数 修改 编辑 删除它们 所以 我想知道是否有一个好的实践 模式来实现对 HTTP 请求参数的基本控
  • Android 4 ICS 上带有 SSL 客户端证书的 WebView

    我对 Android 上的本机 WebView 有问题 我需要使用 SSL 客户端证书对站点进行身份验证 Android WebView 似乎不支持这个 作为解决方法 我使用了 WebView 的修改版本 https github com
  • java中String转int数组

    我有一根绳子 String arr 1 2 ie 1 2 就像一个单一的字符串 我该如何转换这个arrjava中的int数组 String arr 1 2 String items arr replaceAll replaceAll rep
  • JavaScript 中的数字是不可变的吗? [复制]

    这个问题在这里已经有答案了 可能的重复 javascript 数字 不可变 我读了道格拉斯 克罗克福德 Douglas Crockford 的书 JavaScript the Good Parts 它说 JavaScript 中的数字是不可
  • 如何在不输入任何内容的情况下触发角度解析器

    正如主题所述 我如何触发在一个内部发生的动作 modelController parsers 没有用户输入 我能想到的唯一方法是将它们包装在函数中并调用它 但是有没有更好的方法来触发 pseudo modelController trigg
  • 对齐属性 已弃用

    不久前我发现中心标签已被弃用 这是可以理解的 因为 HTML 是用来构建内容的 而不是用来格式化的 但为什么对齐属性也被弃用了呢 属性可用于格式化 我明白CSS可以用 但并不是每个人都懂CSS 更糟糕的是 文本对齐 居中 and 左边距 自
  • 源代码不可用时的访问者模式实现

    考虑的原因之一访客模式 这种分离的实际结果是能够向现有对象结构添加新操作 而无需修改这些结构 假设您没有第三方库的源代码 并且您已经添加了对相关对象的一项操作 由于您没有对象 因此无法修改您的元素 第三方类 来添加访问者 在这种情况下 双重
  • 使用后备语言检索 i18n 数据

    我必须从数据库中获取 i18n 文本 默认语言为英语 其文本为一切 但非英语语言不一定具有所有所需的翻译 如果某个实体 键的非英语翻译在数据库中不可用 那么我希望它返回英语文本 所以 英语是fallback这里的语言 i18n 文本表如下所