PHP本地化 - gettext的或阵?(PHP Localization - gettext o

2019-10-16 17:24发布

建立多语言网站我现在需要决定我需要使用该网站上的静态文本的选项。 让我解释一下我的站点设置,然后如果你能帮助我决定使用哪种解决方案。

该网站是一个CMS系统,允许多个域指向同一个目录,供应基于域名的内容。 因此,所有域共享相同的代码。 在该网站上,我创建的代码块,称为模块,该做的具体工作。 所以,我可能有一个模块,它的作用是显示从数据库中的最新消息。 然后,我可以决定什么页面,模块可以显示哪些网站会显示上。 所以我的问题是,将gettext的多个领域的工作,可能有不同的模块显示在不同的页面呢? 或者我应该创建为含有对特定模块的语言交谈的阵列中的每个模块语言文件? 所以,如果我有10个模块,每个模块将有自己的语言文件和任何网页的每个模块显示了它只是指的是语言文件数组该模块来决定要显示什么样的文字? 希望这是有道理的,我读了很多关于gettext和使用数组版本,但不能决定哪一个是这种类型的站点设置的更好。

Answer 1:

很多CMS的使用数组版本。 我见过的getText以及可扩展的应用程序。 尤其是当你想从管理web界面翻译数组版本更简单。

这当然是偏好的问题。



Answer 2:

在我看来PHP的gettext是要走的路。 在我所有的项目中,我使用WordPress的风格转换。 http://codex.wordpress.org/Translating_WordPress并使用相同的功能命名约定:

__('message') // Return the translation
_e('message') // echo's the translation
_n('singular_message', 'plural_message', count ) // return singular or plural

我使用poEdit的http://www.poedit.net/从PHP源提取翻译字符串,并把它们翻译成其他语言。 存储和编译这样在需要PHP的gettext目录结构中的文件:

en_US/LC_MESSAGES/default.mo
nl_NL/LC_MESSAGES/default.mo
de_DE/LC_MESSAGES/default.mo

注意的.mo文件是由PHP缓存,直到重新启动Web服务器在你的.mo文件的变化是不存在的。 拉我的头发,而我开发过这个非常有益的解决方案来: http://blog.ghost3k.net/articles/php/11/gettext-caching-in-php

整个gettext的东西花了我一段时间才能出来,但还是值得的。 一旦到位它救了我的大量时间,并允许我的客户做翻译为他们的项目本身。

如果要激活一个社区翻译项目看看基于Web的翻译工具Pootle 。



Answer 3:

其实,我觉得gettext更容易:

  1. 你可以只echo / print _("your text"); 后来翻译
  2. 这是很容易与getext编辑得到帮助
  3. 要生成的自举PO文件(IIRC,在/源/文件),您可以使用ETag的 ,这将成为一种的grep上的文件。 所以,你只需要后翻译令牌。

所以基本上,一切自项目开始运作,它是那么容易启动,并于高档更方便。



Answer 4:

根据我的经验,原gettext的是不是非常适合于网站方面,其中内容随时间的变化,通常外界正式发布周期。

我建议你看一看了Zend_Framework (和从Zend_Locale ,如果要本地化日期,数字等)。 一个Zend_Translate是具有关于各种底层方法(包括gettext和阵列)适配器更高级别的库。

这是相当有据可查的,并且可以作为一个独立的组件。



Answer 5:

我会建议使用gettext的。 这是一个行之有效的一套工具。 有一个工具,从你的源代码(了xgettext)自动提取文本字符串还有其他的工具,可以帮助您与您的翻译本地化文件,例如,poEdit的( http://www.poedit.net/ )。

如果您正在运行PHP 5.3和/或安装了国际扩展,还有另一种选择,也:messageformatter:

http://php.net/manual/en/class.messageformatter.php

这是非常强大的,但它缺乏 - 在我看来 - 文件一点点,可能是矫枉过正你的目的。 你可以找到在ICU项目的页面这个一些更多的信息:

http://userguide.icu-project.org/formatparse/messages



文章来源: PHP Localization - gettext or array?