【问题标题】:Why doesn't gettext have a db storage option?为什么 gettext 没有 db 存储选项?
【发布时间】:2011-03-27 02:40:43
【问题描述】:

我正在使用 Django 在基于 Web 的应用程序上做一些 i18n,它使用 gettext 作为其 i18n 基础。翻译应该存储在数据库中似乎是一个显而易见的想法,而且不难做到,但文件系统上的 po 文件仍在使用中。这是为什么呢?

我目前的怀疑是,开发备份数据库的好处完全被 gettext 作为一个完善的包的可靠性/熟悉度所抵消。是否还有其他重要原因需要继续将翻译存储在文件系统上?

【问题讨论】:

    标签: django web-applications internationalization gettext


    【解决方案1】:

    性能是主要原因。 Gettext 没有使用数据库,因为数据库总是比文件慢得多。字典的加载时间非常重要,因此几乎每个人都为此使用文件。

    此外,已编译的 gettext 文件 (.mo) 针对加载到内存中进行了优化,因此它们比纯文本文件(如未编译的 .po 文件)更合适。

    您始终可以使用翻译平台(可能使用数据库后端)进行翻译并将结果导出到文本文件。示例:PootleNarroLaunchpad RosettaTransifex (hosted only)

    不要将您的应用程序语言文件与本地化数据库混淆。您的应用程序应该使用加载速度快的基于文件的字典,并且您的本地化系统可能必须使用数据库并且能够从逻辑上将数据导出到文件中。

    顺便说一句,使用gettext 可能是您在本地化方面能够做出的最佳技术决策。我从未见过任何商业解决方案或内部开发能够在功能、工具甚至支持方面与其竞争。

    【讨论】:

    • “数据库总是比文件慢很多” [需要引用] - 尤其是。对于内存表和 IO 繁忙的磁盘,这往往是错误的。
    • 你忘了考虑这个文件也可以加载到内存中。而.mo 文件特别好,因为它已经包含哈希表,因此您甚至不必在加载时对字符串进行哈希处理。
    【解决方案2】:

    这是一种非常常见的翻译方式,已经存在了很长时间,可以解决多年来的任何问题。我想写一些像 gettext 这样的东西很容易对语言的工作方式做出不正确的概括。既然已经在一个久经考验的系统中完成了 Django 开发团队,为什么还要花时间研究和开发它呢?此外,专业翻译人员可能知道如何处理 PO 文件,因为自制翻译数据库可能会阻止他们以他们习惯的方式工作。

    为什么您更喜欢数据库中的翻译?我想您可能更喜欢它,因为您可以为数据库制作翻译接口。如果是这种情况,请查看Pootle,它是一个强大的基于 Web 的翻译界面,可直接处理 PO 文件,甚至可以与常见的版本控制系统集成。添加一些 post-commit 钩子,您就可以拥有这样一个系统,只需很少的工作,而无需翻译数据库的开销。

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      这似乎是一个显而易见的想法对你来说,我认为不是每个人都会同意。 AFAIK django 使用 .po 文件的原因如下:

      • 版本控制 - 您必须创建额外的“.po 到数据库”工具,因为您仍然需要维护不同的人员进行翻译工作,而且您无法摆脱为此目的而拥有 .po 文件
      • gettext 是在 .nix 世界中进行翻译的一种标准方式,有很多工具可以使用它,而且它很容易编辑、比较等。
      • 如果您需要翻译任何内容,无需访问数据库。有些视图可以在没有任何数据库请求的情况下工作,因此无需将它们绑定到数据库只是为了进行翻译。 (我可能是错的,但在 mod_wsgi 的情况下 - 翻译将被加载一次并存储在每个线程的内存中)。

      顺便说一句,如果您需要对字段进行不同的翻译,这是一个有点不同的问题,您应该检查 http://www.muhuk.com/2010/01/dynamic-translation-apps-for-django/ 并选择最适合您需求的应用程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-29
        相关资源
        最近更新 更多