2013-12-09 67 views
0

在过去的几天里,我一直在努力使用php,gettext,并且很快将我的新网站从丹麦语翻译成英语。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"); 

我加了五个entires在我的页面上:

echo _('Overskrift 1') 

但是,当我查看我的服务器上的页面,PHP的Debian框5.4和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

尝试在echo中使用双引号,按照您的教程? – Jeppe

+0

不幸的是,没有改变任何东西。 –

+0

你得到了什么输出var_dump(setlocale(LC_ALL,'en_US'));'? – bitWorking

回答

7

最典型的问题是,你的系统没有安装区域要设置。 gettext深深融入系统的语言环境系统。您使用setlocale设置的区域设置实际上需要根据您提供的名称进行安装和/或别名。在大多数系统中,例如,没有区域ja_JP,但区域设置ja_JP.UTF8和/或ja_JP.eucJP。在这种情况下你需要setlocale(LC_ALL, 'ja_JP.UTF8'),只是jaja_JP不会。

要检查安装了哪些语言环境,请在命令行上运行locale -a。如果您正在寻找的语言环境不存在,则需要安装它。在Ubuntu和类似系统上,这与运行sudo locale-gen ja_JP.UTF8一样简单。

替代解决方案

一些稀有的语言环境可能不容易找到,因此你可能无法安装你想要什么。在这种情况下,您可以找到最接近的语言环境。例如,如果没有ku_IQ,但​​存在于您托管应用的服务器上,则可以使用后者。确保您将目录重命名为您实际设置的区域设置。您的文字仍然会正常翻译,但您的区域格式(如日期,时间和数字)将无法正确显示。你将不得不忍受这一点。

+0

那怎么样。我可以让SWORN知道我昨天做了那件事,并找到了我需要的。 今天又做了 - en_US.UTF-8修复了它。我很困惑,但感谢提醒。 –

+2

发生在最好的情况下,尤其是因为这种依赖关系不是很明显,gettext对于抱怨什么是错误感到很害羞。 ;) – deceze

+0

您也可以在您的系统上添加不存在的语言环境:https://askubuntu.com/questions/76013/how-do-i-add-locale-to-ubuntu-server –