Gettext或数据库翻译

5

哪个更好:

  1. gettext
  2. 自定义基于MySQL +缓存的功能

Gettext是一种内置功能,因此我认为它已经针对性能进行了调整。使用poedit很麻烦,而且无法向任何客户展示。

自定义功能允许简单的翻译界面。但可能会在php/db使用方面较重。

我想知道,在什么情况下你会使用哪一个?

3个回答

17

本地化是困难的。真的很困难。它不仅仅是将“单词对”翻译为“Wortpaare”,它比这更复杂。当人们看到gettext并感到“丑陋”时,他们大多数人都忘了本地化“过程”比实现的技术细节更重要。因为实际的翻译者通常不是程序员,可能甚至不在公司内部。这会引起比你想象的头痛更多。gettext非常古老,经过战斗考验,并拥有庞大的工具链来支持这个过程。如果您想正确进行i18n和l10n,您需要一个强大的系统。gettext就是这样,并得到了广泛工具的支持。自己酿造的翻译系统TM没有。

首先,您需要一个强大的系统来提取可翻译字符串。如果不能从源代码自动可重复提取可翻译字符串,每个新字符串要翻译都需要大量工作。在gettext中,xgettext就可以做到这一点。

接下来,您需要一个工具以一种不会丢失任何翻译并尽可能保留稍微更改的翻译的方式来同步提取的字符串与已有的翻译。在gettext中,msgmerge就可以做到这一点。

接下来,您需要一种添加额外信息到字符串的方法。您需要能够按类别,“域”和上下文对其进行分组,可能需要在源代码中为翻译者添加注释,还可以让翻译者为翻译添加注释。gettext支持所有这些。

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

不要低估本地化的任务,选择一个适合这个过程并且熟悉的工具。gettext是一个很棒的工具,但可能不太适合初学者。

值得一提的是,这里有我的Twig gettext扩展,可以使PHP的gettext功能更加完善。


4
非常好的回答 - 谢谢你指出自制解决方案可能出现的小问题。虽然一个定制解决方案最初可以适用于大多数情况,但是随着项目复杂度/支持语言数量的增加,听起来自制方案最终会被放弃而采用完整的gettext实现。 - rinogo

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

2

Gettext是一种非常古老的格式,它使用文件来存储翻译。当你有数千个翻译时(比如20,000个),它就显得笨拙了。管理一个包含20,000个翻译字符串的PO文件是一场噩梦,在50种语言中更是不可能的。然后你还必须将其编译成MO文件。不用了,这在1990年也许有意义,但现在不行了。

相反,数据库非常强大。真的非常强大。你需要什么,它都能给你。它可以在一秒钟内准确告诉你以下信息:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接