哪个更好:
- 获取文本
- 自定义基于 MySQL+缓存的功能
Gettext 是一种内置功能,因此我认为它已针对性能进行了调整。使用 poedit 很痛苦,不可能向任何客户展示。
自定义功能允许简单的翻译界面。但可能对 php/db 的使用很重。
我想,你什么时候会用哪一个?
哪个更好:
Gettext 是一种内置功能,因此我认为它已针对性能进行了调整。使用 poedit 很痛苦,不可能向任何客户展示。
自定义功能允许简单的翻译界面。但可能对 php/db 的使用很重。
我想,你什么时候会用哪一个?
本地化很困难。这真的很难。不仅仅是"pairs of words" => "Wortpaare"
,它比这复杂得多。大多数人在看到 gettext 并感到“呃,丑陋”时忘记的是,本地化过程比实现的技术细节重要得多。那是因为实际的翻译人员通常不是程序员,甚至可能不是内部人员。这导致的头痛比你想象的要多得多。gettext 真的很老了,经过实战考验,背后有一个巨大的工具链,经过调整以支持这个过程。如果你想正确地做 i18n 和 l10n,你需要一个强大的系统。gettext 就是这样,并且得到了广泛工具的支持。您的 Homebrewed Translation System™ 不会。
首先,您需要一个强大的系统来提取可翻译的字符串。由于无法自动且可重复地从源代码中提取可翻译字符串,您需要为每个要翻译的新字符串做大量工作。在 gettext 中,xgettext
这样做。
接下来,您需要一个工具来将提取的字符串与已经存在的翻译同步,这样就不会丢失任何翻译,并且如果可能的话,只保留稍微更改的翻译。在 gettext 中,msgmerge
这样做。
接下来,您需要一种向字符串添加额外信息的方法。您希望能够按类别、“域”和上下文对它们进行分组,您可能希望为翻译者添加对源代码的注释,并且您可能希望翻译者能够向翻译添加注释。gettext 支持所有这些。
接下来,您需要一种能够从各种工具中获得良好支持的文件格式,因为您可能会将文件发送到中国以便在那里进行翻译。您可能将它们发送给外部翻译的原因也是您需要一个好的同步工具来合并更改的原因,因为这可能是一个非常异步的过程。PO 文件得到很好的支持,因为 gettext 太老了。根据您的具体需求,有许多开源和商业工具在多个层面支持本地化过程。
不要低估本地化的任务,选择一个非常适合该过程的工具并学习它。gettext 是一个很棒的工具,虽然它不是最适合初学者的。
值得一提的是,这是我的 Twig 的 gettext 扩展,它使 PHP 的 gettext 变得更好。
也许您应该研究一下可以与 MySQL 结合使用的Memcached 。它对于获取不经常更改的数据(例如翻译)非常有用。
Gettext 是一种非常古老的格式。它使用文件来存储翻译。它很笨拙,尤其是当您有成千上万的翻译时,可以说是 20,000。管理包含 20,000 个翻译字符串的 PO 文件是一场噩梦,跨 50 种语言是不可能的。然后你必须在 MO 文件中实际编译它。不,谢谢。这在 1990 年可能是有意义的,而不是现在。
相反,数据库功能强大。就像真的很强大。说出你需要的东西,你就能得到它。他们可以在一秒钟内准确地告诉你: