创建水平扩展 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"
如果需要,您可以使用左连接来查找空元素。
目标是创建一个多语言词典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"
如果需要,您可以使用左连接来查找空元素。