这是多语言系统文本的优秀设计,以支持x个langs?

Mar*_*kus 3 database multilingual

这种实现是否很好地扩展:

要求是:

  1. 系统必须支持x种语言; 其中x将=与业务可翻译的语言一样多

  2. 所有系统维护的值(页面内容,电子邮件内容,存储在面向用户的数百个查找表中的值)需要支持多语言.

我的实施:

表:(使用的样本名称)

local_text_table  
language_lookup_table   

Content_table_1   
Content_table_2   
Content_table_3    
Content_table_4   
....
Run Code Online (Sandbox Code Playgroud)

计划:

language_lookup_table包含所有可能语言的列表

lang_id   lang_name
Run Code Online (Sandbox Code Playgroud)

local_text_table包含系统上使用的所有可能文本的列表(电子邮件,页面内容,菜单标签,页脚文本等)以及系统将支持的每种语言的1个colunm - FK到language_lookup_table.

text_id
eng_text
spanish_text
arabic_text
...

这样,所有翻译都存储在整个系统的1个表中.我可以在一步中启用/禁用/更新/编辑/添加/删除翻译.在代码中,所有文本都存储为引用(text_id)的关键字.系统会检测用户会话正在运行的语言,并相应地从该关键字的列中提取文本.如果特定行为NULL(未翻译),则默认为英文文本列.

这个好吗?

当然,这对于存储在数百个表中的查找值不起作用,因为除了为每个表提供每个语言自己的colunms之外,我还没有任何计划.然后我还有用户内容,允许用户翻译他们的用户帖子,如我没有计划的博客,评论等.但我想首先关注系统文本并最终确定.

Phi*_*ler 5

您的设计存在缺陷,因为如果不向local_text_table添加列,您将无法添加新语言.

该表的更好设计是:

text_id
lang_id (foreign key to language_lookup_table)
translated_text
Run Code Online (Sandbox Code Playgroud)

现在,您可以向language_lookup_table添加语言,然后开始将翻译添加到local_text_table,而无需对关系模型进行任何更改.如果您可以通过UI(甚至直接在数据库中)输入此数据,则应该能够直接在生产中添加新语言.