数据库模型国际化游戏框架

时间:2012-02-24 01:27:43

标签: java database-design jpa playframework

我喜欢用Play编程多语言应用程序!我从来没有这样做过,所以我正在寻找一些建议如何在第一时间做到这一点。

任务: 我假设我有一个简单的应用程序与问题和答案。想象它就像一项调查。根据用户选择语言的语言,答案以正确的语言显示。 为了更好的不合格,模型看起来像:

问题:id,questionString

回答:id,fk_questionId,answerString,isRightBool

正如你所见,通常的1:n关系。但现在如何处理多语言支持?

  1. 一个想法是复制整个数据库...这个想法看似简单但丑陋,因为以后的更改会带来额外的开销......我猜是一场噩梦。
  2. 其他字段,例如questionStringGerman,questionStringEnglish。不喜欢这个想法......
  3. 每个具有1:n关系的modelclass的附加表。像question_lang和answer_lang。 Colums是语言。似乎更容易处理。
  4. 所有翻译的一张表。 Colums是语言。似乎最简单但很难处理纠正。
  5. 哪种方法最适合动态翻译。也许我想念一些东西。如果有人能告诉我解决这个问题的方法是什么,我会很高兴的。

    提前谢谢!

2 个答案:

答案 0 :(得分:1)

我实际做过一次。

我的解决方案是使用三个表:

table1:questionId(qid,其他字段) table2:问题(qqid,fk_qid,question,languageSet,其他字段) table3:答案(id,fk_qqid,答案,其他字段)

通过这种方式,您可以拥有任意数量的语言。每个语言问题将被视为独立记录。为了获得相同问题的所有翻译,questionId的qid将帮助您获得该设置。

答案 1 :(得分:0)

我个人如下:

Table: Language
Id, Name

Table: Translation
Id, UniqueName(IdxUnique), LanguageId(FK), TranslationText

Table: Question
Id, TranslationUniqueName(FK)

Table: Answer
Id, QuestionId(FK), IsRight, TranslationUniqueName(FK)

我在使用翻译ID和UniqueName(Key)之间徘徊 - Id在性能方面可能略微有益但使用有意义的唯一键使开发更容易(例如设置一些东西)到WelcomeText并让系统查找翻译比将其设置为16更清晰

此外,如果您正在添加/删除/复制翻译,则密钥更具可移植性,尤其是跨多个数据库实例(不同环境)。

在回答您对其他答案的评论时,对于未选择任何语言的情况,您可以在Language表格本身中添加权重,或将LanguageId与用户帐户相关联。你也可以(如果你想要聪明)尝试根据用户的位置进行猜测(但是你应该总是给他们改变的选项 - 没有比你被google.es重定向更令人讨厌的了。在西班牙)。

在任何情况下,您进行翻译的方法都应该为您执行此操作 - 例如,您的应用只需GetTranslation('WelcomeText') - 您的GetTranslation()方法可以查找要使用的相应语言并获取纠正string