3

所以我开始胡闹,gettext但我仍然对某些事情感到困惑,如果有人能帮助我并为我填补空白,那就太好了。

  1. 通常大多数实现只是setlocale基于语言参数调用。有没有我需要使用putenv的情况,也许是 Windows 设置的边缘情况?

  2. 我的 php 框架的默认语言是英语,UTF-8 - 所以我设置LC_ALLen_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, and LC_MESSAGES- 我是否必须更新任何脚本,例如,生成时间或类似的东西?

  4. 假设一个新配置的服务器没有es_ES.utf-8配置语言环境,我知道如何生成语言环境,但如果它不可用,那么我应该在阵列中提供备份吗?如果有人可以提供一个实际示例,那就太好了,例如:

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

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

  5. 我在某处读到localeori18n文件夹的通常结构如下所示。

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

我应该对结构有多严格?

locale
  en_US
      LC_MESSAGES
         messages.po
  es_ES
      LC_MESSAGES
         messages.po


   6. 我是否应该尝试测试系统是否真的支持语言环境?因为例如,如果服务器没有语言环境并且我尝试对其进行设置,setlocale它不会出错或其他任何东西,它只会默默地让它过去。

4

1 回答 1

3

不是对您的问题的合格答案,我并不是说使用 gettext 不好 - 我从来没有足够的使用它来对它有一个非常深刻的意见 - 但我决定不理会 gettext 因为它的复杂性和巨大的不可预测性在具有不同语言环境的不同平台上。我在这里发布了一个寻找替代方案的问题,虽然周围并没有太多,但 Zend_translate 包似乎值得一看。我自己还没有搞定。

如果您使用 gettext,请务必查看Gettext 上的 PHP Manual User Contributed Notes

于 2009-12-08T22:32:25.447 回答