所以,我有一个简单的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),并以给定的语言获取该页面。无论如何,我现在所拥有的不起作用。
答案 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才能将更新的字符串考虑在内。