2009-12-08 34 views
3

于是我开始用gettext瞎搞,但我仍然疑惑某些事情,将是巨大的,如果有人可以帮助我,并为我填补空白。国际化/ gettext的:配置的setlocale在Web应用

  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. 我在某处读到localei18n文件夹的常见结构如下所示。

    是否结构真的重要吗?好像所有发生的事情是,当你做bindtextdomain('messages', 'locale')它递归搜索,对于messages.mo目录,我可能不会注意到,但它可能会采取的目录进去。

我应该对结构有多严格?

locale 
    en_US 
     LC_MESSAGES 
     messages.po 
    es_ES 
     LC_MESSAGES 
     messages.po 


    6.  我应该甚至试图测试系统是否真正支持的语言环境或不这么做呢?因为例如,如果服务器没有语言环境,我试图用setlocale设置不会报错了什么的,那就只是默默的让它过去。

回答

3

这是不是对您的问题有一个合格的答案,我并不是说使用gettext是坏的 - 我从来没有用它做过足够的评论 - 但我决定单独离开gettext,因为在具有不同语言环境的不同平台上其复杂性和巨大的不可预测性。我发布了一个问题寻找替代品here,虽然没有太多的东西,Zend_translate包似乎值得一看。我自己还没有做到。

如果您有gettext的工作,一定要检查出PHP Manual User Contributed Notes on Gettext

+0

我其实*计划使用'Zend_Translate',但我认为我应该至少弄清楚低级别的东西,以便对它的工作方式有一个基本的了解(就像在使用jQuery之前学习Javascript一样),谢谢虽然你的建议。 Zend_Translate如何为你工作? – 2009-12-08 22:34:51

+0

现在还没有,我没有时间去处理它。不过,我计划尽快在现有的CMS上使用UTF-8,并计划尝试一下。我自己很担心,因为似乎没有任何其他值得使用PHP进行国际化的东西! – 2009-12-08 22:38:29