Java 数据库模型国际化播放框架
我想用play!编写一个多语言应用程序!。我以前从来没有这样做过,所以我想从一开始就给你一些建议 任务: 假设我有一个带有问题和答案的简单应用程序。把它想象成一个调查。根据用户选择的语言,问题和答案以正确的语言显示。 为了更好地解列,模型如下所示: 问题:id,questionString 回答:id,fk_问题id,回答字符串,isRightBool 正如你看到的,通常是1:n关系。但是现在如何实现多语言支持呢Java 数据库模型国际化播放框架,java,database-design,jpa,playframework,Java,Database Design,Jpa,Playframework,我想用play!编写一个多语言应用程序!。我以前从来没有这样做过,所以我想从一开始就给你一些建议 任务: 假设我有一个带有问题和答案的简单应用程序。把它想象成一个调查。根据用户选择的语言,问题和答案以正确的语言显示。 为了更好地解列,模型如下所示: 问题:id,questionString 回答:id,fk_问题id,回答字符串,isRightBool 正如你看到的,通常是1:n关系。但是现在如何实现多语言支持呢 一个想法是复制整个数据库…这个想法看起来简单但丑陋,因为以后的更改会增加额外的开销
提前谢谢 我确实做过一次 我的解决方案是使用三个表: 表1:questionId(qid,其他字段) 表2:问题(qqid、fk_qid、问题、语言集、其他字段) 表3:答案(id、fk_qqid、答案、其他字段)
这样,您就可以拥有任意多的语言。每个语言问题将被视为一个独立的记录。要获得同一问题的所有翻译,questionId的qid将帮助您获得该集。我实际上已经完成了一次 我的解决方案是使用三个表: 表1:questionId(qid,其他字段) 表2:问题(qqid、fk_qid、问题、语言集、其他字段) 表3:答案(id、fk_qqid、答案、其他字段)
这样,您就可以拥有任意多的语言。每个语言问题将被视为一个独立的记录。要获得同一问题的所有翻译,questionId的qid将帮助您获得该集。我个人有以下几点:
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(键)之间左右为难-Id可能在性能方面略有益处,但使用有意义的唯一键会使开发更容易(例如将某个设置为WelcomeText
,让系统查找翻译比将其设置为16
)干净得多
此外,如果要添加/删除/复制翻译,尤其是跨多个数据库实例(不同环境)添加/删除/复制翻译,则密钥的可移植性更高
针对您对另一个答案的评论,例如,如果未选择任何语言,您可以在语言
表本身中添加权重,或者将语言ID
与用户帐户关联。你也可以(如果你想聪明的话)尝试根据用户的位置来猜测(但是ofc你应该总是给他们改变的选项——没有什么比你在西班牙时被重定向到google.es
更烦人的了)
在任何情况下,你的翻译方法都应该为你做到这一点-例如你的应用程序只需要做一个
GetTranslation('WelcomeText')
-你的GetTranslation()
方法就可以查到要使用的适当语言,并得到正确的字符串,我个人有以下几点:
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(键)之间左右为难-Id可能在性能方面略有益处,但使用有意义的唯一键会使开发更容易(例如将某个设置为WelcomeText
,让系统查找翻译比将其设置为16
)干净得多
此外,如果要添加/删除/复制翻译,尤其是跨多个数据库实例(不同环境)添加/删除/复制翻译,则密钥的可移植性更高
针对您对另一个答案的评论,例如,如果未选择任何语言,您可以在语言
表本身中添加权重,或者将语言ID
与用户帐户关联。你也可以(如果你想聪明的话)尝试根据用户的位置来猜测(但是ofc你应该总是给他们改变的选项——没有什么比你在西班牙时被重定向到google.es
更烦人的了)
在任何情况下,你的翻译方法都应该为你做到这一点-例如你的应用程序只需要做一个GetTranslation('WelcomeText')
-然后你的GetTranslation()
方法就可以查找要使用的适当语言,并获得正确的字符串Thx来获得答案。在我看来,你只是在问题和答案之间加了一层。事情是在一个更复杂的结构中,这将导致许多“层对象/数据集”。每个答案都有一个额外的对象/集合。如果答案中没有与语言相关的字段,该怎么办?像个砝码。你有重复的条目,对吗?还在考虑你的想法:)那样的话,你的体重就在普通桌子上了。很像面向对象的概念。您需要另一个表table4(id、fk_qqid、common_字段……)。对吗?谢谢你的回答。在我看来,你只是在问题和答案之间加了一层。事情是在一个更复杂的结构中,这将导致许多“层对象/数据集”。每个答案都有一个额外的对象/集合。如果答案中没有与语言相关的字段,该怎么办?像个砝码。你有重复的条目,对吗?还在考虑你的想法:)那样的话,你的体重就在普通桌子上了。很像面向对象的概念。您需要另一个表table4(id、fk_qqid、common_字段……)。正确的?