在工作中,我們決定將我們的網站翻譯成3種其他語言,我一直在研究如何做到這一點。我花了一整天的時間搜索谷歌和stackoverflow,嘗試每一個不同的解決方案,但我不能讓它工作。在Windows 7 Home和PHP 7.0.8上使用gettext進行國際化
我開始害怕在Windows 7 Home Edition(我的開發機器)中無法做到這一點。
// C:\Apache24\htdocs\locale\en_GB\LC_MESSAGES\messages.mo
// C:\Apache24\htdocs\locale\en_GB\LC_MESSAGES\messages.po
msgid ""
msgstr ""
"Project-Id-Version: iArbete 1.0.0\n"
"Report-Msgid-Bugs-To: ******** \n"
"Last-Translator: ********\n"
"Language: en_GB\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "iArbete"
msgstr "workIng"
// C:\Apache24\htdocs\index.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:\Apache24\htdocs\locale\en_GB\LC_MESSAGES\messages.mo
// C:\Apache24\htdocs\locale\en_GB\LC_MESSAGES\messages.po
msgid ""
msgstr ""
"Project-Id-Version: iArbete 1.0.0\n"
"Report-Msgid-Bugs-To: ******** \n"
"Last-Translator: ********\n"
"Language: en_GB\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "workIng"
msgstr "iArbete"
msgid "Menu"
msgstr "Meny"
// C:\Apache24\htdocs\index.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");
被翻譯成 「iArbete」 msgid "Menu"
沒有被翻譯爲 「MENY」
這是怎麼回事?這感覺很奇怪,只有第一個字被翻譯。所以我重新排列了po中的單詞並重新編譯,但仍然「workIng」是唯一被翻譯的單詞。
我已經把我的文件上傳到谷歌驅動器here如果有人想看看。
什麼是你的問題? – Juned
爲什麼它不起作用? – Cirshiss
如果你在'bindtextdomain'之前做了'var_dump(__ DIR __)',它是否顯示包含'locale'子目錄的目錄?你的'messages.mo'文件的完整路徑是什麼? – lxg