【问题标题】:Trying to use gettext without country code ('es' instead 'es_ES')尝试使用没有国家代码的 gettext('es' 而不是 'es_ES')
【发布时间】:2013-10-17 12:40:45
【问题描述】:

我的 php 项目中有下一个文件:

libraries/locale/es_ES/LC_MESSAGES/messages.po
libraries/locale/es_ES/LC_MESSAGES/messages.mo
libraries/locale/es/LC_MESSAGES/messages.po
libraries/locale/es/LC_MESSAGES/messages.mo

两者都是用 PoEdit 编辑的同一个文件,只是目录->属性->语言(分别为 es 和 es_ES)不同

并将这段代码放到localization.php文件中

$language = "es_ES.UTF-8";
putenv("LANG=$language");
setlocale(LC_ALL, $language);
bindtextdomain(STRING_DOMAIN, LOCALE_PATH);
textdomain(STRING_DOMAIN);

echo "Test translation: "._('string to translate');

此代码工作正常,“要翻译的字符串”显示正确。但是,如果我尝试使用通用的“es”代码:

$language = "es.UTF-8";

...字符串未翻译。似乎与我的 ubuntu 中安装的语言环境有关(es_ES.utf8 存在但不存在 es.utf8)

我可以强制 gettext 使用 es.UTF-8 文件吗?

【问题讨论】:

    标签: php internationalization gettext php-gettext


    【解决方案1】:

    作为一种解决方法,您始终可以使用localedef 在现有语言环境的基础上编译新语言环境。基于es_ES.UTF-8创建es

     localedef -i es_ES -f UTF-8 es.UTF8
    

    但是这里有一些重要的问题,涉及的领域不仅仅是简单的翻译文件加载。由于您的特定于语言环境的信息(如日期和时间格式、度量等)取决于已安装的语言环境,因此制定有关使用语言环境的计划总是一个好主意。假设您使用es_ES 表示西班牙语(西班牙),那么es 是什么?它是针对特定风味的西班牙语(例如 es_IC(加那利群岛))还是某些拉丁美洲风味?

    这是一个清晰的例子;如果我想设计一个定制的语言环境来涵盖各种西班牙风格,我会这样做;首先,我添加了那些易于使用locale-gen 安装的语言环境:

      locale-gen es_ES.UTF-8 es_MX.UTF-8 es_AR.UTF-8
    

    然后我想拥有基于es_MXes_US 和基于es_ARes_419(419 是拉丁美洲的地理区号):

      localedef -i es_MX -f UTF-8 es_US.UTF-8
      localedef -i es_AR -f UTF-8 es_419.UTF-8
    

    【讨论】:

      猜你喜欢
      • 2015-02-10
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多