如何为Web应用程序添加国际化(i18n)功能是最佳方式?

3

我想国际化一个Web应用程序。该网站将不断变化:文本将被重写,添加新内容等。Web应用程序使用PHP编写,但对于任何语言都适用。

我需要的是:

1)可读性好且易于维护的代码 2)当新增英文内容或更改英文时,向翻译者发送电子邮件 3)知道某些内容是否是最新的。 4)翻译人员能够在线更新内容

我想最佳方法是将所有内容存储在数据库中并通过这种方式处理,而不是使用PO文件和gettext。但是,什么是最佳方法:

$lang('contactus') 的缺点是不可读(从代码方面来说),开发速度较慢(因为所有英文都需要赋予唯一的键并存储在数据库中)

$lang('Please contact us for more information') 容易阅读和更快,但如果英文更改(打字错误、语法编辑、更新),则翻译会完全消失。

其他应用程序/框架如何处理此问题?

3个回答

2
避免在数据库中存储需要翻译的字符串。我曾经这样做过,但后悔了。使用外部文件并将其发送给翻译人员。使用您所选语言中的字符串作为键。因此,对于您的示例,$lang('请联系我们获取更多信息')是正确的方法。英语中的文本更改可能意味着相应的翻译更改,因此这是一个维护上的头痛。
除了字符串翻译之外,还有货币符号和格式、数字格式(小数、数字分组符号、符号出现位置)、日期格式等。姓名格式 - 在某些地区,人们通常有中间名,而在其他地区则通常没有。左到右或右到左的文本阅读也很重要。
对于 Web 应用程序来说,有时将网页分成语言区域目录并以这种方式处理会更简单。您的业务逻辑与视图代码分离了吗?这就是直接在 HTML 中嵌入业务逻辑(PHP 典型方法)真正开始带来麻烦的地方。

你能否澄清一下为什么你后悔使用数据库?对我来说,这个项目需要翻译人员(实际上是我们地区办事处的工作人员)定期(每周)提供翻译和更新。通过我们的网站让他们更新内容非常重要,而不是采用一个流程,其中二十个没有专业软件的未经培训的人每5天就会收到PO文件,然后我们会逐渐收到它们。 - Apemantus
我知道我仍然可以通过Web UI让他们编辑文件,但还有其他好处,比如修改日期等。 - Apemantus

1

创建一些易于输入名称的翻译函数,例如t($key),或使用现有解决方案(例如Zend_Translate)或PHP gettext,提供_($key)函数。

您的翻译文件格式不应该太重要-选择适合翻译流程的任何形式即可。

使用您的原始语言,例如英语,作为键值。对于较长的字符串,有时候创造人造键值是有意义的,例如“introduction_text_1”。


1

永远不要使用常量或任何缩写的翻译键,不要使用数据库,避免仅使用数组进行翻译。处理翻译的唯一专业方式是使用gettext(类似)函数。

你应该只使用_("原始英文文本查询"),这样至少默认语言文本仍然可用,如果翻译数据/文件无法访问。
不要担心文本字符串的更改。实际上这很少见。如果您使用gettext语法,则甚至有工具可以自动适应语言文件。不多,要注意的是。但比自制翻译方法的工具更多,并且完成工作。如果您的PHP解释器不支持本机gettext,请搜索“php-gettext”仿真或“upgradephp”。


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