创建水平扩展 adding/removing 列的 MySQL 多语言词典 table

Creating a MySQL multilingual dictionary table that expands horizontally adding/removing columns

目标是创建一个多语言词典MySQL table 的单词,它使用任何所需语言的键 => 值结构。 Whosebug 上的当前解决方案(和线程)指的是将新的键 => 值对添加为 到现有的 table.

问题在于为每种可用语言同步密钥。我的应用程序使用占位符 %{example} 来引用字典中的特定键。当用户切换到另一种语言时,占位符需要出现在字典中。

建议的解决方案:

不是为每种语言添加键 => 值对作为行,而是为每种语言添加一列并将每一行用作唯一键。

key (pk) en_EN se_SE
apple apple apple
fish fish fisk

现在我们添加一种新语言 nl_NL 作为列,自动创建值为 NULL 的每个必需键。

key (pk) en_EN se_SE nl_NL
apple apple apple NULL
fish fish fisk NULL

检索特定语言的整个词典非常简单:


SELECT en_EN FROM <table>

由于这种方法感觉有点不寻常,即动态 adding/removing 列而不是行,我想知道我是否遗漏了什么或者是否有更好的方法。你有什么想法?

使用联接是一种更好的方法。

使用所有 keys/terms 创建一个 table 个“术语”,然后使用术语、语言环境和翻译创建另一个 table 个“翻译”。

要获得所有英文翻译使用

select term, translation
  from terms
  join translations using (term)
 where locale = "en_US"

如果需要,您可以使用左连接来查找空元素。