1

设置多语言网站我现在需要决定我需要为网站上的静态文本使用哪个选项。让我解释一下我的站点设置,然后您是否可以帮助我决定使用哪种解决方案。

该站点是一个 CMS 系统,它允许多个域指向同一个目录并根据域名提供内容。所以所有域共享相同的代码。在该站点上,我创建了代码块,称为模块,它们执行特定的工作。所以我可能有一个模块,它所做的只是显示来自数据库的最新消息。然后我可以决定该模块可以显示在哪个页面上以及它将显示在哪个站点上。所以我的问题是,gettext 是否适用于可能在不同页面上显示不同模块的多个域?或者我应该为每个模块创建一个语言文件,其中包含一个数组,该数组具有该特定模块的语言对话?所以如果我有 10 个模块,每个模块都有自己的语言文件,每个模块显示的任何页面都只是引用该模块的语言文件中的数组来决定显示什么文本?希望这是有道理的,我阅读了很多关于 gettext 和使用数组版本的内容,但无法确定哪一个更适合这种类型的站点设置。

4

5 回答 5

3

在我看来 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 缓存,并且在您重新启动网络服务器之前,.mo 文件中的更改不存在。在开发时拔掉头发我遇到了这个非常有用的解决方案:http: //blog.ghost3k.net/articles/php/11/gettext-caching-in-php

整个 gettext 事情花了我一段时间来解决,但这是值得的。一旦到位,它为我节省了大量时间,并允许我的客户自己为他们的项目进行翻译。

如果您想激活社区来翻译您的项目,请查看基于 Web 的翻译工具Pootle

于 2012-05-15T23:01:29.530 回答
2

很多 CMS 使用数组版本。我也见过 GetText 用于可扩展的应用程序。数组版本更简单,尤其是当您想从 Web 界面管理翻译时。

这当然是一个偏好问题。

于 2012-05-15T21:07:47.477 回答
2

以我的经验,原始 gettext 不太适合内容随时间而变化并且通常在正式发布周期之外的网站环境。

我建议你看看Zend_Translate(和Zend_Locale,如果你想本地化日期、数字等)。Zend_Translate 是一个更高级别的库,它具有适用于各种底层方法(包括 gettext 和数组)的适配器。

它有很好的文档记录,可以用作独立组件。

于 2012-05-15T21:19:33.437 回答
2

事实上,我发现gettext更容易:

  1. 您可以echo / print _("your text");稍后再翻译
  2. 使用 getext 编辑器很容易获得帮助
  3. 要生成 boostrap po 文件(iirc,/source/ 文件),您可以使用etags来在您的文件上生成一种 gr​​ep。所以你以后只需要翻译标记。

所以基本上,从项目开始就一切正常,然后更容易开始,更方便高档。

于 2012-05-15T21:23:50.193 回答
0

我会推荐使用gettext。这是一套完善的工具。有一个工具可以自动从您的源代码中提取文本字符串 (xgettext),还有其他工具可以帮助您翻译本地化文件,例如 poedit ( http://www.poedit.net/ )。

如果您正在运行 PHP 5.3 和/或安装了 intl 扩展,还有另一个选项:messageformatter:

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

这是非常强大的,但它缺乏 - 在我看来 - 一点文档,并且对于您的目的来说可能是矫枉过正。您可以在 ICU 项目的页面上找到有关此的更多信息:

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

于 2012-05-15T21:14:46.167 回答