PHP& gettext:无法显示我的翻译

时间:2014-01-30 06:27:30

标签: php localization gettext

所以,我有一个简单的php网站。每一段代码都通过网站根目录中的index.php,根据我得到的参数,我为每个页面包含不同的PHP文件。我控制了config.php文件中的大部分设置。这是当前的目录结构,减少对这种情况不重要的文件:

/
/inc/
/inc/config.php
/inc/header.php
/inc/footer.php
/locales/en_US/LC_MESSAGES/messages.po
/locales/en_US/LC_MESSAGES/messages.mo
/index.php

这是config.php的相关部分:

$getlang = $_GET["lang"];

if(isset($getlang)) { $lang = $_GET["lang"]; }

$default_lang = "en_US";
if(!isset($lang)) {
      $lang = $default_lang;
}

$language = explode('/', $_SERVER["REQUEST_URI"]);

putenv("LANG={$lang}");
setlocale(LC_ALL, $lang);

// Set the text domain as 'messages'
$domain = 'messages';
bindtextdomain($domain, "/var/www/montkucesrbija.com/locales");
bind_textdomain_codeset($domain, 'UTF-8');
textdomain($domain);

所以,我希望能够通过URL发送GET参数(例如:foobar.com/en_US/mypage),并以给定的语言获取该页面。无论如何,我现在所拥有的不起作用。

1 个答案:

答案 0 :(得分:2)

你说你想要使用GET变量,但是在你的脚本中你创建了一个$ language变量,它试图解析URI,然后在你的解释中你表明你想从路径中获取语言环境,比如foobar的.com / EN_US /我的空间

我会假设您确实想要在上面的网址中提取en_US。

$locale = array_shift(
array_filter(
        explode('/', $_SERVER["REQUEST_URI"])
    )
);

putenv('LANG=' . $locale); // for Apache
putenv('LANGUAGE=' . $locale); // for CLI
setlocale(LC_ALL, $locale . '.utf8');

$domain = 'example';

bindtextdomain($domain, __DIR__ . '/locale');
bind_textdomain_codeset($domain, 'UTF-8');
textdomain($domain);
print _('Hello world');

在Linux中使用setlocale()时,需要指明.utf8,还需要在机器上安装语言环境才能使其正常工作。

您可以使用以下命令知道bash中可用的语言环境: locale -a

然后你的po文件的路径是: ./locale/fr_FR/LC_MESSAGES/example.po

它也是: ./locale/fr_FR.utf8/LC_MESSAGES/example.po

但是路径中没有utf8对我有效。

请记住,每次编译.mo文件时,都需要重新启动apache才能将更新的字符串考虑在内。