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

时间:2010-11-27 02:50:59

标签: database multilingual

此实施是否可以很好地扩展:

要求是:

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

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

  3. 我的实施:

    表:(使用的样本名称)

    local_text_table  
    language_lookup_table   
    
    Content_table_1   
    Content_table_2   
    Content_table_3    
    Content_table_4   
    ....
    

    计划:

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

    lang_id   lang_name
    

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

    text_id
    eng_text
    spanish_text
    arabic_text
    ......

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

    这样好吗?

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

2 个答案:

答案 0 :(得分:5)

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

该表的更好设计是:

text_id
lang_id (foreign key to language_lookup_table)
translated_text

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

答案 1 :(得分:0)

显然,您需要在多语言和语言表中支持的每个表之间的交集。另外,我建议在语言表中使用带有“已安装语言”含义的标志,这意味着在特定实现中只能使用一些有用的语言。此标志将帮助您在列表中仅显示兴趣语言,而不是全部。此外,您可以在Microsoft论坛中找到所有LCID代码的语言表,该代码已经使用了LCID代码并且很常见。