数据库级国际化

时间:2009-11-16 11:51:47

标签: database language-agnostic internationalization

有人能指出一些解决数据库级别任务国际化的模式吗?

最简单的方法是为每个文本列添加每种语言的文本列,但这有点臭 - 我真的希望能够动态添加支持的语言。

我要解决的解决方案是保存在模型中的一种主要语言和一个字典实体,可以查询翻译和保存的翻译。

我想要的只是听取其他人的意见。

1 个答案:

答案 0 :(得分:1)

您可以创建一个包含三列的表:target language code,原始字符串,已翻译的字符串。表上的索引将位于前两列,但我不会将此表绑定到具有外键的其他表。您需要为运行的每个查询中需要翻译的每个术语添加一个连接(可能是左连接到缺少的翻译帐户)。但是,这会使您的所有查询都变得非常毛茸茸,并且可能会破坏性能。

您需要注意的另一件事是实际翻译术语并维护最新的翻译表。这对于直接针对数据库非常不方便,并且通常由非技术人员完成。

通常在本地化应用程序时,您会使用gettext之类的内容。这套工具背后的想法是解析可以解析源代码以提取字符串进行翻译,然后从中创建翻译文件。由于这个套件已经存在了很长时间,因此有很多基于它的不同实用程序可以帮助完成翻译任务,其中一个是Poedit,一个很好的GUI编辑器,用于将字符串翻译成不同的语言。生成唯一的术语列表可能更简单,因为它们以gettext可以解析的格式出现在数据库中,并在应用程序代码中进行转换。这样,您就可以使用相同的技术翻译应用程序中的硬编码字符串和数据库值。