我正在开发一个大型多语言网站,我正在考虑使用不同的方法使其多语言。我能想到的可能替代方案是:
据我所知,Gettext 函数应该是最有效的,但我的要求是应该可以更改原始引用语言(英语)中的文本字符串,而该字符串的其他翻译不会自动恢复为英语,仅仅因为几个字变了。这可以用 Gettext 实现吗?
资源要求最低的解决方案是什么?
使用带有数组的 Gettext 函数或 PHP 文件或多或少对资源的要求相同吗?
对于更有效的解决方案,还有其他建议吗?
最佳答案
几点考虑:
1. 翻译
谁来做翻译?也连接到该站点的人?翻译公司?使用 Gettext 时,您将使用“pot”(.po) 文件。这些文件包含消息 ID 和消息字符串(翻译)。例子:
msgid "A string to be translated would go here"
msgstr ""
现在,对于需要翻译它的人来说,这看起来很好并且可以理解。但是当你使用关键字而不是完整的句子时会发生什么,就像迈克建议的那样?如果有人需要翻译名为“address_home”的 msgid,他或她不知道这应该是标题“家庭地址”还是一个完整的句子。在这种情况下,请确保在调用 gettext 函数之前向文件添加注释,如下所示:
/// This is a comment that will be included in the pot file for the translators
gettext("ready_for_lost_episode");
使用
xgettext --add-comments=///
创建 .po 文件时将添加这些注释。但是,我不认为 Gettext 应该以这种方式使用。此外,如果您需要为要显示的每个文本添加注释,您将 a) 可能在某个时候出错,b) 无论如何,您的整个脚本都将填充文本,仅以注释形式,c)注释需要直接放在 Gettext 函数上方,这并不总是很方便,具体取决于函数在代码中的位置。2.维护
一旦您的网站增长(甚至进一步)和您的语言文件,以这种方式维护所有不同的翻译可能会变得非常困难。每次添加文本时,您都需要创建新文件,将文件发送给翻译人员,将文件接收回来,确保结构仍然完整(热心的翻译人员也总是乐于翻译语法,从而使整个文件无法使用 :)),并完成导入新翻译。这是可行的,当然,但要注意大型站点和许多不同语言在这方面可能存在的问题。
另一种选择:结合您的第二个和第三个选择:
就个人而言,我发现使用(简单)CMS 管理翻译更有用,将变量和翻译保存在数据库中,然后自己将相关文本导出到语言文件:
text('var');
或者像 __('faq','register','lost_password_text');
第 3 点可以很简单,只需从数据库中选择所有相关变量和翻译,将它们放入数组并将序列化数组写入文件。
好处:
总而言之,我认为您会发现您可以通过这种方式对翻译进行更多控制,尤其是从长远来看。与 native gettext 函数相比,我无法告诉您有关此方法的速度或效率的任何信息。但是,根据语言文件的大小,我认为这不会有很大的不同。如果按页面或部分对变量进行分组,则始终可以只包含所需的部分。
关于php - 多语言 PHP 网站的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2806886/