i18n/gettext:在Web应用程序中设置本地化配置

3

我开始尝试使用gettext,但仍有一些问题困扰着我。如果有人能帮助我解决并填补这些空白就太好了。

  1. 通常,大多数实现都是根据语言参数调用setlocale。是否存在需要使用putenv的情况,例如在Windows设置的边缘情况下?

  2. 我的php框架的默认语言是英语,UTF-8格式。因此,我将把LC_ALL设置为en_US.utf-8,因为en_US是ISO-8859-1/Latin1格式,显然不如UTF-8支持得好?

  3. 在调用setlocale(LC_ALL, 'en_US.utf-8')后,是否有任何需要注意的地方?由于它会更改所有这些:LC_COLLATE,LC_CTYPE,LC_MONETARY,LC_NUMERIC,LC_TIME和LC_MESSAGES - 我是否需要更新生成时间等脚本的任何脚本?

  4. 假设例如刚刚配置过的服务器没有配置es_ES.utf-8区域设置,我知道如何生成区域设置,但如果没有,则应该在数组中提供备选项吗?如果有人能提供一个实际的示例,那就太好了,例如:

    setlocale( LC_ALL, array('es_ES.UTF-8', 'es_ES', 'es') )

    是否有提供此类示例的网站,或者人们通常自己想出优先级顺序?

  5. 我在某个地方读到过localei18n文件夹的常见结构如下。

    结构真的很重要吗?似乎所有正在发生的事情都是当您执行bindtextdomain('messages','locale')时,它会递归搜索messages.mo的目录。我可能没有注意到,但它可能会考虑目录。

我对结构应该有多严格?

locale
  en_US
      LC_MESSAGES
         messages.po
  es_ES
      LC_MESSAGES
         messages.po


6. 我应该尝试测试系统是否支持所需的语言环境吗?例如,如果服务器没有所需的语言环境,我使用 setlocale 设置时不会出现错误提示,而是默默地忽略它。

1个回答

3
这不是对你问题的一个合格回答,我并不是说使用gettext是不好的——我从来没有足够的机会去深入了解它——但是我决定放弃使用gettext,因为它过于复杂,在不同平台和不同区域设置下表现极不可预测。我在这里发布了一个寻找替代方案的问题(链接),虽然没有太多选择,但Zend_translate包似乎值得一看。我自己还没有尝试过。
如果你使用gettext,请务必查看PHP手册用户对Gettext的贡献注释

我确实打算使用Zend_Translate,但想先尝试一下底层的东西,以便基本了解它们的工作原理(就像在使用jQuery之前学习JavaScript一样)。谢谢你的建议。不过,Zend_Translate对你来说效果如何? - meder omuraliev
还没有,我还没有时间去处理它。不过,我计划很快将现有的CMS转换为UTF-8,并在那时尝试一下。我自己也很着急,因为似乎没有其他值得使用的PHP国际化工具! - Pekka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接