将i18n添加到Web应用程序的最佳方法是什么?

时间:2010-06-03 15:56:19

标签: php internationalization

我希望i18n-ize一个网络应用程序。该网站将不断变化:文本将被重写,新的东西被添加等。网络应用程序是用PHP编写的,但同样适用于任何语言。

基本上我想要:

1)代码易于阅读和维护 2)当用英语添加新内容或更改英语时,将向翻译员发送电子邮件 3)了解某些东西是否是最新的。 4)译员能够在线更新内容

我想最好的想法是将所有内容存储在数据库中,并处理比PO文件和gettext更多的内容。但最好的方法是什么:

$ lang('contactus')的缺点是不可读(代码方面),开发速度较慢(因为所有英语都需要获得一个唯一的密钥并存储在数据库中)

$ lang('请联系我们以获取更多信息')可读性更快,但如果英语发生变化(错字,语法编辑,更新),则翻译将完全消失。

其他应用程序/框架如何处理它?<​​/ p>

3 个答案:

答案 0 :(得分:2)

避免存储需要在数据库中翻译的字符串。那是我自己而后悔的。使用可以发送给翻译人员的外部文件。使用首选语言的字符串作为键。至于你的例子$ lang('请联系我们获取更多信息')是要走的路。英语中的文本更改可能意味着翻译中的相应更改,因此这是一个维护问题。

此外,还有更多内容,而不仅仅是字符串翻译。有货币符号和格式,数字格式(十进制,数字分组符号,符号出现的位置),日期格式。名称格式 - 在某些语言环境中,人们通常在其他人中通常使用中间名。文本从左到右与从右到左阅读。啊。

对于Web应用程序,将网页分成语言区域设置目录并以这种方式处理它有时简单得多。您是否拥有与视图代码分开的所有业务逻辑?这是将业务逻辑直接嵌入到html中的地方,典型的PHP方法确实开始受到伤害。

答案 1 :(得分:1)

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

您的翻译文件格式无关紧要 - 无论您的翻译流程最适合哪种方式。

使用原始语言(例如英语)作为密钥。对于更长的字符串,有时候发明人工密钥是有意义的,例如“introduction_text_1”

答案 2 :(得分:0)

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

您应该只使用_(“原始英文文本查询”)。这具有以下优点:如果翻译数据/文件不可访问,则至少默认语言文本仍然可用 不要担心文本字符串的变化。实际上这很少见。如果使用gettext语法,那么甚至可以使用工具自动调整语言文件。请注意,并不是很多好工具。但不仅仅是自制翻译方法,它还可以完成工作。如果您的PHP解释器不支持本机gettext,请搜索“php-gettext”仿真或“upgradephp”。