【问题标题】:What locale setting to use with gettext?与 gettext 一起使用的语言环境设置是什么?
【发布时间】:2023-02-10 22:59:09
【问题描述】:

我使用了两个单独的教程并仔细阅读了它们(thisthis),但我仍然无法使用 gettext 来翻译任何内容。我在带有 PHP 8.2.1 的托管 linux 网络服务器上,并且在 phpinfo 中启用了 gettext。

我不知道出了什么问题。还是 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

感谢有关如何让它工作的提示。已经尝试并在网上搜索了好几天。 奇怪的是它不起作用,这是我遵循的基本教程。

【问题讨论】:

  • 尝试添加您缺少的第一个示例的这一行:bind_textdomain_codeset($domain, 'UTF-8');。如果这也不起作用,请尝试从语言中删除 .utf8-部分,将其保留为 en_US

标签: php gettext


【解决方案1】:

翻译是从.mo 文件而不是.po 文件中读取的。 .po 文件只是二进制.mo 文件的源文件。

您链接的教程解释了如何从 .po 文件创建 .mo 文件。

【讨论】:

    猜你喜欢
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 2011-09-22
    • 1970-01-01
    • 2012-03-05
    相关资源
    最近更新 更多