我在我参与过的许多项目中都成功地使用了 GNU Gettext,但在我最近的工作中,我突然发现自己被迫使用一个非常尴尬的本地化系统。
当前系统将翻译存储在数据库中,添加新翻译的过程如下:
- 将带有翻译键的函数调用添加到源代码,例如
print translate('foo');
translations.sql
向文件中添加一些 SQL INSERT 语句。- 用名字创建文件
(current revision nr + 1).sql
- 在数据库中执行 .sql 文件。
- 提交您的更改(在其他人设法提交和更改当前修订号之前)。
所有这些过程都是完全手动的,即使您需要修复一个小错字,您也必须重复几乎所有的过程。不支持复数形式。整个翻译数据库非常混乱,因为翻译几乎从未被删除 - 只是添加和更新。
我尝试了几种论点来说服其他开发人员(尤其是一个特定的开发人员):
- 我已经谈到 Gettext 正在成为标准,并且有许多工具可用于处理 PO 文件。
- 我试图解释在数据库中存储翻译与将它们存储到文本文件相比没有任何好处——我们只是通过密钥从数据库中检索翻译,仅此而已。
- 另一位开发人员正在开发我们应用程序的 PHP 部分,PHP 内置了 Gettext。我在 JavaScript 方面工作,它不支持 Gettext,但我过去已经为它构建了自己的工具。
- 我们的应用程序不是很大,即使手动完成从旧系统转换到 Gettext 也需要很长时间,我很确定它可以很容易地自动化。
- 我什至成功地将 Gettext 用于我们公司的一个较小的应用程序。
但人们仍然不相信。我可能做错了什么?
编辑:
在发布这个问题几个月后,我们现在终于过渡到 Gettext。当我们需要支持两种以上的语言时,我们当前系统的缺点对那些迄今为止抵制它的人来说更加明显。