我希望i18n-ize一个网络应用程序。该网站将不断变化:文本将被重写,新的东西被添加等。网络应用程序是用PHP编写的,但同样适用于任何语言。
基本上我想要:
1)代码易于阅读和维护 2)当用英语添加新内容或更改英语时,将向翻译员发送电子邮件 3)了解某些东西是否是最新的。 4)译员能够在线更新内容
我想最好的想法是将所有内容存储在数据库中,并处理比PO文件和gettext更多的内容。但最好的方法是什么:
$ lang('contactus')的缺点是不可读(代码方面),开发速度较慢(因为所有英语都需要获得一个唯一的密钥并存储在数据库中)
$ lang('请联系我们以获取更多信息')可读性更快,但如果英语发生变化(错字,语法编辑,更新),则翻译将完全消失。
其他应用程序/框架如何处理它?</ p>
答案 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”。