PHP bindtextdomain 失败
PHP bindtextdomain fails
我正在尝试在 CentOS 服务器 PHP 中设置国际化 运行 PHP 7.1
这是我的目录结构:
/home/project/public_html/locale/japanese/LC_MESSAGES/messages.po
/home/project/public_html/locale/japanese/LC_MESSAGES/messages.mo
/home/project/public_html/index.php
messages.po 包含以下行(除其他外):
"Language: japanese\n"
"Content-Type: text/plain; charset=UTF-8\n"
我有以下代码:
$check_putenv = putenv("LC_ALL=japanese");
if (!$check_putenv) {
echo "Warning: putenv LC_ALL failed!\n";
}
$check_putenv2 = putenv("LANGUAGE=japanese");
if (!$check_putenv2) {
echo "Warning: putenv LANGUAGE failed!\n";
}
$check_locale = setlocale(LC_MESSAGES, 'japanese');
if (!$check_locale) {
echo "Warning: Failed to set locale japanese!\n";
}
$check_bind = bindtextdomain("messages", "/home/project/public_html/locale");
if (!$check_bind) {
echo "Warning: Failed to bind text domain!\n";
}
$check_textdomain = textdomain("messages");
if ($check_textdomain !== "messages") {
echo "Warning: Failed to set text domain!\n";
}
输出是
Warning: Failed to bind text domain!
locale -a returns(以及其他)
ja_JP
ja_JP.utf8
japanese
知道哪里出了问题吗?
如评论中所述,gettext 扩展依赖于包含语言和区域代码的标准区域设置说明符,即 ja_JP
用于 "Japanese in Japan" 或使用指定的编码 ja_JP.utf-8
。即使有像 japanese
这样的别名,gettext 的 PHP 实现也不接受这个。请注意,必须在您的系统上安装和配置语言环境。
可以在 IANA language-subtag-registry
中找到语言和区域说明符
此代码已经适用于日语:
$dir = $_SERVER['DOCUMENT_ROOT'] . '/locale';
$domain = 'messages';
$locale = 'ja_JP.utf8';
$codeset = 'UTF-8';
setlocale( LC_MESSAGES, $locale);
bindtextdomain($domain, $dir);
textdomain($domain);
bind_textdomain_codeset($domain, $codeset);
记得也将您的目录重命名为 locale/ja_JP.utf8
。确保您的 .po 文件以正确的编码存储,即本例中的 UTF-8
,并包含行
"Content-Type: text/plain; charset=UTF-8\n"
(正如您已经完成的那样)。
我正在尝试在 CentOS 服务器 PHP 中设置国际化 运行 PHP 7.1
这是我的目录结构:
/home/project/public_html/locale/japanese/LC_MESSAGES/messages.po
/home/project/public_html/locale/japanese/LC_MESSAGES/messages.mo
/home/project/public_html/index.php
messages.po 包含以下行(除其他外):
"Language: japanese\n"
"Content-Type: text/plain; charset=UTF-8\n"
我有以下代码:
$check_putenv = putenv("LC_ALL=japanese");
if (!$check_putenv) {
echo "Warning: putenv LC_ALL failed!\n";
}
$check_putenv2 = putenv("LANGUAGE=japanese");
if (!$check_putenv2) {
echo "Warning: putenv LANGUAGE failed!\n";
}
$check_locale = setlocale(LC_MESSAGES, 'japanese');
if (!$check_locale) {
echo "Warning: Failed to set locale japanese!\n";
}
$check_bind = bindtextdomain("messages", "/home/project/public_html/locale");
if (!$check_bind) {
echo "Warning: Failed to bind text domain!\n";
}
$check_textdomain = textdomain("messages");
if ($check_textdomain !== "messages") {
echo "Warning: Failed to set text domain!\n";
}
输出是
Warning: Failed to bind text domain!
locale -a returns(以及其他)
ja_JP
ja_JP.utf8
japanese
知道哪里出了问题吗?
如评论中所述,gettext 扩展依赖于包含语言和区域代码的标准区域设置说明符,即 ja_JP
用于 "Japanese in Japan" 或使用指定的编码 ja_JP.utf-8
。即使有像 japanese
这样的别名,gettext 的 PHP 实现也不接受这个。请注意,必须在您的系统上安装和配置语言环境。
可以在 IANA language-subtag-registry
中找到语言和区域说明符此代码已经适用于日语:
$dir = $_SERVER['DOCUMENT_ROOT'] . '/locale';
$domain = 'messages';
$locale = 'ja_JP.utf8';
$codeset = 'UTF-8';
setlocale( LC_MESSAGES, $locale);
bindtextdomain($domain, $dir);
textdomain($domain);
bind_textdomain_codeset($domain, $codeset);
记得也将您的目录重命名为 locale/ja_JP.utf8
。确保您的 .po 文件以正确的编码存储,即本例中的 UTF-8
,并包含行
"Content-Type: text/plain; charset=UTF-8\n"
(正如您已经完成的那样)。