【问题标题】:Gettext or database translation获取文本或数据库翻译
【发布时间】:2013-03-11 14:45:37
【问题描述】:

哪个更好:

  1. 获取文本
  2. 基于自定义 MySQL+缓存的功能

Gettext 是一种内置功能,因此我认为它已针对性能进行了调整。使用 poedit 很痛苦,不可能向任何客户展示。

自定义功能允许简单的翻译界面。但可能对 php/db 的使用量很大。

我想,你什么时候会用哪一个?

【问题讨论】:

    标签: php mysql translation gettext


    【解决方案1】:

    本地化很困难。这真的很难。不仅仅是"pairs of words" => "Wortpaare",它比这复杂得多。大多数人在看到 gettext 并说“呃,丑陋”时忘记的是,本地化过程比实现的技术细节重要得多。这是因为实际的翻译人员通常不是程序员,甚至可能不是内部人员。这导致的头痛比你想象的要多得多。 gettext 真的很老了,经过实战考验,背后有一个巨大的工具链,经过调整以支持这个过程。如果你想正确地做 i18n 和 l10n,你需要一个强大的系统。 gettext 就是这样,并且得到了广泛工具的支持。您的 Homebrewed Translation System™ 不会。

    首先,您需要一个强大的系统来提取可翻译的字符串。由于无法从源代码中自动且可重复地提取可翻译字符串,您需要为每个要翻译的新字符串做大量工作。在 gettext 中,xgettext 会这样做。

    接下来,您需要一个工具来将提取的字符串与现有的翻译同步,这样就不会丢失任何翻译,并且如果可能的话,只保留稍微更改的翻译。在 gettext 中,msgmerge 会这样做。

    接下来,您需要一种向字符串添加额外信息的方法。您希望能够按类别、“域”和上下文对它们进行分组,您可能希望将翻译人员的 cmets 添加到源代码中,并且您可能希望翻译人员能够将 cmets 添加到翻译中。 gettext 支持所有这些。

    接下来,您需要一种能够得到多种工具良好支持的文件格式,因为您可能会将文件发送到中国以便在那里进行翻译。您可能将它们发送给外部翻译的原因也是您需要一个好的同步工具来合并更改的原因,因为这可能是一个非常异步的过程。 PO 文件得到很好的支持,因为 gettext 太老了。根据您的具体需求,有许多开源和商业工具在多个层面支持本地化流程。

    不要低估本地化的任务,选择一个非常适合该过程的工具并学习它。 gettext 是一个很棒的工具,虽然它不是最适合初学者的。

    对于它的价值,这里是my gettext extension for Twig,它使 PHP 的 gettext 变得更好。

    【讨论】:

    • 很好的答案 - 感谢您指出本土解决方案出现的小问题。虽然自定义解决方案最初适用于大多数人,但随着项目的复杂性/支持的语言数量的增加,听起来自定义解决方案最终会被放弃,转而支持完整的 gettext 实现。
    【解决方案2】:

    也许您应该研究一下Memcached,您可以将它与 MySQL 结合使用。 它对于获取不经常更改的数据(例如翻译)非常有用。

    【讨论】:

      【解决方案3】:

      Gettext 是一种非常古老的格式。它使用文件来存储翻译。它很笨拙,尤其是当您有成千上万的翻译时,可以说是 20,000。管理包含 20,000 个翻译字符串的 PO 文件是一场噩梦,跨 50 种语言是不可能的。然后你必须在 MO 文件中实际编译它。不,谢谢。这在 1990 年可能是有意义的,而不是现在。

      相反,数据库功能强大。就像真的很强大。说出你需要的东西,你就能得到它。他们马上就能准确地告诉你:

      • 哪些翻译字符串没有翻译成哪种语言
      • 最初创建翻译的时间和作者
      • 最后一次更新翻译的时间以及由谁更新
      • 每次翻译的完整历史记录与完成更改的人
      • 您可以在物化视图中预翻译所有文本,并通过一个 select 语句获取它们
      • 按字母顺序排列翻译字符串,逐页查看和编辑
      • 设置哪些用户可以准确更新哪些翻译
      • 使用一些简单的 HTML Web 表单,世界上任何地方的任何人都可以在几秒钟内实时翻译您的应用程序,并且具有完整的历史记录、评论每个翻译对、接收和阅读回复、标记待办事项的翻译等等等
      • 在几秒钟内分析谁在过去的一天、一周、一个月、一年中完成了多少翻译 - 这样您就可以给予奖励
      • 还需要 PO 文件吗?您可以按照您需要的时间表让您的数据库创建它们
      • 缺少翻译?您的数据库可以自动向负责该语言的翻译人员发送电子邮件、短信。
      • 翻译已更新翻译?现在数据库可以向负责的审阅者发送电子邮件以进行批准
      • 需要快速翻译?您的数据库可以立即调用 API 进行翻译,然后发送电子邮件给负责人进行审核

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-30
        • 2011-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多