php - 尝试使用没有国家代码 ('es' 的 gettext 代替 'es_ES' )

标签 php internationalization gettext php-gettext

我的 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 文件吗?

最佳答案

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

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

但是这里出现了一些重要的问题,这些问题涵盖了简单加载翻译文件之外的领域。由于日期和时间格式、度量等特定于区域设置的信息取决于安装的区域设置,因此制定有关区域设置的使用计划始终是一个好主意。假设您正在使用 es_ES对于西类牙语(西类牙),什么是 es ?它是否适用于特定 flavor 的西类牙语,例如 es_IC (加那利群岛)或一些拉丁美洲 flavor ?

这是一个说明性的例子;如果我想设计一个定制的语言环境轨道以涵盖各种西类牙 flavor ,我会这样做;首先,我添加了那些易于安装的语言环境 locale-gen :
  locale-gen es_ES.UTF-8 es_MX.UTF-8 es_AR.UTF-8

那我要es_US基于 es_MXes_419 (419 是拉丁美洲的地理区号)基于 es_AR :
  localedef -i es_MX -f UTF-8 es_US.UTF-8
  localedef -i es_AR -f UTF-8 es_419.UTF-8

关于php - 尝试使用没有国家代码 ('es' 的 gettext 代替 'es_ES' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19427030/

相关文章:

php - TCPDF:Pdf 顶部始终有一个 hr 行

Django makemessages 来获取自定义的可翻译字符串

java - 与网页元素相关的innerText 是什么?

c# - 使用 ISO 4217 代码格式化货币

javascript - Js 文件 RAILS 中的翻译

python - 找不到 msguniq。确保安装了 GNU gettext 工具 0.15 或更新版本。 (Django 1.8 和 OSX ElCapitan)

带变量的 PHP MySQL 查询

php - 使用 array_intersect 将数组与重复值进行比较?

javascript - 未捕获 : Bootstrap's JavaScript requires jQuery

python - Django 中 ugettext_noop 的用途是什么?