PHP 未获取 gettext 翻译
PHP gettext translations not getting picked up
所以我用类似的问题搜索了 Whosebug 并检查了所有内容。我只是无法让 t运行slations 与 gettext
.
一起工作
我有以下文件结构
locale/
en_US/
LC_MESSAGES/
messages.mo
messages.po
test.php
messages.po 包含多条消息,但只有一条是 t运行 预定的。我 运行 msgfmt
从 .po 文件生成 .mo 文件。
#: test.php:43
msgid "Olen omena"
msgstr "I am an apple"
正在尝试 运行 test.php 使用以下代码:
<?php
$locale = "en_US";
$results = putenv("LANG=" . $locale);
if (!$results) {
exit ('putenv LANG failed');
}
$results = putenv("LANGUAGE=" . $locale);
if (!$results) {
exit ('putenv LANGUAGE failed');
}
$results = setlocale(LC_MESSAGES, $locale);
if (!$results) {
exit ('setlocale failed');
}
echo "Locale set to: $locale<br>";
$domain = 'localhost';
$results = bindtextdomain($domain, "locale/");
if (!$results) {
exit ('bindtextdomain failed');
}
$results = bind_textdomain_codeset($domain, "ISO-8859-1");
if (!$results) {
exit ('bind_textdomain_codeset failed');
}
$results = textdomain($domain);
if (!$results) {
exit ('textdomain failed');
}
echo _("Olen omena");
并打印
Locale set to: en_US
Olen omena
Apache 和 PHP 运行 在 Docker 容器中,我用 locale -a
检查了 en_US 存在。
...
en_US
en_US.iso885915
en_US.utf8
尝试了所有 en_US 选项。尝试了 LC_ALL 和 LC_MESSAGES。尝试了不同的域...在这里不知所措。到底哪里出了问题?
好的!我通过查看 PHP.net 示例弄明白了!域必须与文件名相同!如果域设置为 'localhost' 文件必须命名为 'localhost.mo'!
Edit 但是我确实观察到了奇怪的行为。
无论出于何种原因,PHP 每 7 次刷新一次都会重置翻译,并弹出原始文本。观察chrome中的网络选项卡初始页面加载在400 B以上,第二个是399,直到第7个是395:
是否 PHP 每 7 次重新加载都会重置一些缓存?
所以我用类似的问题搜索了 Whosebug 并检查了所有内容。我只是无法让 t运行slations 与 gettext
.
我有以下文件结构
locale/
en_US/
LC_MESSAGES/
messages.mo
messages.po
test.php
messages.po 包含多条消息,但只有一条是 t运行 预定的。我 运行 msgfmt
从 .po 文件生成 .mo 文件。
#: test.php:43
msgid "Olen omena"
msgstr "I am an apple"
正在尝试 运行 test.php 使用以下代码:
<?php
$locale = "en_US";
$results = putenv("LANG=" . $locale);
if (!$results) {
exit ('putenv LANG failed');
}
$results = putenv("LANGUAGE=" . $locale);
if (!$results) {
exit ('putenv LANGUAGE failed');
}
$results = setlocale(LC_MESSAGES, $locale);
if (!$results) {
exit ('setlocale failed');
}
echo "Locale set to: $locale<br>";
$domain = 'localhost';
$results = bindtextdomain($domain, "locale/");
if (!$results) {
exit ('bindtextdomain failed');
}
$results = bind_textdomain_codeset($domain, "ISO-8859-1");
if (!$results) {
exit ('bind_textdomain_codeset failed');
}
$results = textdomain($domain);
if (!$results) {
exit ('textdomain failed');
}
echo _("Olen omena");
并打印
Locale set to: en_US
Olen omena
Apache 和 PHP 运行 在 Docker 容器中,我用 locale -a
检查了 en_US 存在。
...
en_US
en_US.iso885915
en_US.utf8
尝试了所有 en_US 选项。尝试了 LC_ALL 和 LC_MESSAGES。尝试了不同的域...在这里不知所措。到底哪里出了问题?
好的!我通过查看 PHP.net 示例弄明白了!域必须与文件名相同!如果域设置为 'localhost' 文件必须命名为 'localhost.mo'!
Edit 但是我确实观察到了奇怪的行为。 无论出于何种原因,PHP 每 7 次刷新一次都会重置翻译,并弹出原始文本。观察chrome中的网络选项卡初始页面加载在400 B以上,第二个是399,直到第7个是395:
是否 PHP 每 7 次重新加载都会重置一些缓存?