在过去的几天里,我一直在努力学习php,gettext,并将我的,很快成为新网站从丹麦语翻译成英语。
我的.po和.mo文件的目录设置如下:
/locale/en_US/LC_MESSAGES/
根据本教程:Localizing PHP web sites using gettext我添加了这个:
$locale = "en_US";
if (isSet($_GET["locale"])) $locale = $_GET["locale"];
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("messages", "./locale");
textdomain("messages");
我在我的页面上添加了五个内容:
echo _('Overskrift 1')
但是当我在我的服务器上查看页面时,启用了PHP 5.4的Debian框并启用了gettext支持,没有任何内容被翻译。
我不知道我做错了什么。我确定它很小,但我看不到它。也许你们有一些指示?
我的.po文件:
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: Portfolio\n"
"Language: en\n"
#:
msgid "Overskrift 1"
msgstr "Headline 1"
#:
msgid "Overskrift 2"
msgstr "Headline 2"
#:
msgid "Overskrift 3"
msgstr "Headline 3"
#:
msgid "Overskrift 4"
msgstr "Headline 4"
#:
msgid "Overskrift 5"
msgstr "Headline 5"
答案 0 :(得分:7)
最典型的问题是您的系统没有安装您正在设置的区域设置。 gettext深深地集成到系统的语言环境系统中。您使用setlocale
设置的区域设置实际上需要安装和/或别名为您提供的名称。例如,在大多数系统中,没有区域设置ja_JP
,而是区域设置ja_JP.UTF8
和/或ja_JP.eucJP
。在这种情况下,您需要setlocale(LC_ALL, 'ja_JP.UTF8')
,ja
或ja_JP
不会。{/ p>
要检查安装了哪些语言环境,请在命令行上运行locale -a
。如果您要查找的区域设置不存在,则需要安装它。在Ubuntu和类似系统上,这就像运行sudo locale-gen ja_JP.UTF8
一样简单。
替代解决方案
某些罕见的语言环境可能不容易找到,因此您可能无法安装所需的内容。在这种情况下,您可以找到最接近的区域设置。例如,如果您托管应用的服务器上没有ku_IQ
但ku_TR
,则可以使用后者。确保将目录重命名为您实际设置的目录。您的文本仍会正常翻译,但您的区域格式(如日期,时间和数字)将无法正确显示。你将不得不忍受这一点。