Windows 7 Home和PHP 7.0.8的国际化失败



在工作中,我们决定将我们的网站转换为另外3种语言,我一直在研究如何做到这一点。我花了一天的大部分时间在搜索Google和Stackoverflow,尝试所有不同的解决方案,但我无法正常工作。

我开始担心在Windows 7 Home Edition(我的开发机器)中不可能做。

// C:Apache24htdocslocaleen_GBLC_MESSAGESmessages.mo
// C:Apache24htdocslocaleen_GBLC_MESSAGESmessages.po
msgid ""
msgstr ""
"Project-Id-Version: iArbete 1.0.0n"
"Report-Msgid-Bugs-To: ******** n"
"Last-Translator: ********n"
"Language: en_GBn"
"MIME-Version: 1.0n"
"Content-Type: text/plain; charset=UTF-8n"
"Content-Transfer-Encoding: 8bitn"
msgid "iArbete"
msgstr "workIng"

// C:Apache24htdocsindex.php
if(isset($_GET["locale"]))
{
    $locale = $_GET["locale"];
}
else
{
    $locale = 'en_GB';
}
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
echo getenv("LC_ALL");
$domain = 'messages';
bindtextdomain($domain, './locale');
textdomain($domain);
bind_textdomain_codeset($domain, 'UTF-8');
echo _("iArbete");

echo _("iArbete");应该转化为"工作",但事实并非如此。还是我没有得到这个概念?

---更多信息---------------------------------------------------------------------------------------------------------------------------------------------------------------------

我已经进行了一些更改并重新编译了MO文件,这就是现在的外观。

// C:Apache24htdocslocaleen_GBLC_MESSAGESmessages.mo
// C:Apache24htdocslocaleen_GBLC_MESSAGESmessages.po
msgid ""
msgstr ""
"Project-Id-Version: iArbete 1.0.0n"
"Report-Msgid-Bugs-To: ******** n"
"Last-Translator: ********n"
"Language: en_GBn"
"MIME-Version: 1.0n"
"Content-Type: text/plain; charset=UTF-8n"
"Content-Transfer-Encoding: 8bitn"
msgid "workIng"
msgstr "iArbete"
msgid "Menu"
msgstr "Meny"

// C:Apache24htdocsindex.php
if(isset($_GET["locale"]))
{
    $locale = $_GET["locale"];
}
else
{
    $locale = 'sv_SE';
    $locale = 'en_GB';
//  $locale = 'ar_AE';
}
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
//  echo getenv("LC_ALL");
$domain = 'messages';
bindtextdomain($domain, './locale');
textdomain($domain);
bind_textdomain_codeset($domain, 'UTF-8');
echo _("workIng");
echo _("Menu");

msgid "workIng"被翻译成" iarbete" msgid "Menu"未翻译为" Meny"

发生了什么事?感觉很奇怪,只有第一个单词才能翻译。因此,我重新排列了PO中的单词并重新编译,但仍然"工作"是唯一翻译的单词?

如果有人愿意,我已经将文件上传到这里的Google Drive。

您需要使用msgfmt

将PO文件转换为MO文件

" .po"文件中的字母po是指便携式对象,以区分 它来自" .mo"文件,其中Mo代表机器对象。 [...]

po文件旨在由人类阅读和编辑 给定软件包的每个原始的,可翻译的字符串 用特定目标语言翻译。 [...]

mo文件旨在通过程序读取,并且本质上是二进制文件。 [...]

PO文件完成且可靠后," MSGFMT"程序为 用于将PO文件转换为面向机器的格式,可能 通过计划有效地检索翻译 包装,每当运行时需要时(请参阅MO文件)。请参阅MSGFMT 调用,有关有关所有执行模式的更多信息 " MSGFMT"程序。

- gnu getText手册,第1.4和1.5节

最新更新