我使用了两个独立的教程,并仔细遵循它们(this和this),但我仍然不能让gettext翻译任何东西。我在一个托管的Linux Web服务器上使用PHP 8.2.1,gettext在phpinfo中启用。
**我不知道哪里出了问题。**或者gettext()对于多语言站点来说不是一个好的解决方案?
po文件是这样的
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2014-03-22 14:45+0100\n"
"PO-Revision-Date: 2023-01-28 12:39+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
"X-Poedit-Basepath: .\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Generator: Poedit 3.2.2\n"
# Test 1
msgid "SCHOOL"
msgstr "School"
PHP看起来像这样:
$language = "en_US.utf8";
putenv("LANG=".$language);
setlocale(LC_ALL, $language);
$domain = "messages";
bindtextdomain($domain, "Locale");
textdomain($domain);
if (!function_exists("gettext")){echo "gettext is not installed<br>";}
echo gettext("SCHOOL") . " (Works if small letters)<br>";
echo "<br><br>";
echo "Current locale: " . setlocale(LC_ALL, 0);
echo "<br><br>";
var_dump(system('locale -a'));
输出如下:
SCHOOL (Works if small letters)
Current locale: en_US.utf8
C C.UTF-8 en_AG en_AG.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IL en_IL.utf8 en_IN en_IN.utf8 en_NG en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 en_ZA.utf8 en_ZM en_ZM.utf8 en_ZW.utf8 POSIX sv_SE.utf8 string(10) "sv_SE.utf8"
我使用PoEdit创建了message.po文件,并将其放在en_US/LC_MESSAGES/message.po
中
很棒的提示如何让它工作。我已经尝试和搜索了几天的网络。奇怪的是它不工作,这是一个基本的教程,我遵循。
1条答案
按热度按时间2o7dmzc51#
翻译是从
.mo
文件而不是.po
文件读取的。.po
文件只是二进制.mo
文件的源文件。您链接的教程说明了如何从
.po
文件创建.mo
文件。