我正在使用Django在基于Web的应用程序上执行一些i18n,它使用gettext作为其i18n基础。似乎应该将翻译存储在数据库中,这并不难,但是文件系统上的po文件仍在使用中,这似乎是一个显而易见的想法。为什么是这样?
我目前的怀疑是,开发getdb作为后备的软件包,其可靠性/熟悉程度根本无法胜过开发db backaged的好处。还有其他重要原因可以继续将翻译存储在文件系统上吗?
最佳答案
性能是主要原因。 Gettext没有使用数据库,因为数据库总是比文件慢得多。字典的加载时间非常重要,因此几乎每个人都为此使用文件。
此外,已编译的gettext文件(.mo
)已优化为加载到内存中,因此,它们比纯文本文件(如未编译的.po
文件)更合适。
您可以始终使用翻译平台(可能使用数据库后端)来进行的翻译并将结果导出到文本文件。示例:Pootle,Narro,Launchpad Rosetta,Transifex (hosted only)。
不要将您的应用程序语言文件与本地化数据库混淆。您的应用程序应使用快速加载的基于文件的词典,并且本地化系统可能必须使用数据库,并且在逻辑上能够将数据导出到文件中。
顺便说一句,使用gettext
可能是您可能对本地化做出的最佳技术决策。我从未见过任何商业解决方案或内部开发能够在功能,工具甚至支持上与之竞争的解决方案。
关于django - 为什么gettext没有数据库存储选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3437105/