我有一个网站。我正努力让gettext工作,以便我的英语,瑞典和挪威站点可以出现。我无法让它发挥作用。我做错了什么?
这是我的配置代码:
// define constants ( defualt - danish )
$lang = 'da_DA';
$lang_short = '';
$lang_prefix = 'da';
if ( isset( $_GET['lang'] ) )
{
switch( $_GET['lang'] )
{
case 'en':
$lang = 'en_EN';
$lang_short = 'en/';
$lang_prefix = 'en';
break;
case 'se':
$lang = 'se_SE';
$lang_short = 'se/';
$lang_prefix = 'se';
break;
case 'no':
$lang = 'no_NO';
$lang_short = 'no/';
$lang_prefix = 'no';
break;
}
}
define( 'LANG', $lang_short );
define( 'LANG_PREFIX', $lang_prefix );
putenv("LC_ALL=". $lang );
bindtextdomain('messages', ROOT .'lang/');
我的路径是/var/www/rssbot.dk/lang/
。我应该让chmod正确,还是......?
答案 0 :(得分:4)
我发现一些gettext安装需要为你想要使用的每个语言环境运行locale-gen
。我发现这尤其适用于Ubuntu。运行locale-gen
后,您可能需要重新启动PHP(apache)。
sudo locale-gen se_SE
sudo locale-gen no_NO
我有一个test setup(包含有效的语言环境文件),可以确定你的文本设置是否正常工作。
<?php
//Depending on your OS, putenv/setlocale/both will set your language.
putenv('LC_ALL=es_MX');
setlocale(LC_ALL, 'es_MX');
bindtextdomain( "su", "./locale" ); //set the locale folder for a textdomain
bind_textdomain_codeset( "su", "UTF-8" ); //set the codeset for a textdomain
textdomain( "su" ); //choose a textdomain
if( gettext("Hello World!") === "Hola a todos!" ) {
print "We translated it correctly";
} else {
print "Gettext setup isn't working";
}
?>
答案 1 :(得分:0)
有些事情可能会出错。
1-为了适应大多数系统,您需要以下几行:
<?php
$newlocale = setlocale(LC_MESSAGES, "sv_SE");
putenv("LANG=$newlocale");
?>
2-在Linux上,当使用带有 LC_ALL 的setlocale而不是 LC_MESSAGES 时,您需要在服务器上安装区域设置!
它可以使用像这样的命令安装(对于Ubuntu)
aptitude install language-pack-sv
或者只是使用像这样的命令重新配置
sudo locale-gen sv_SE
3-指定.mo文件和区域设置目录的名称
<?php
// Use default.mo located at ./locale/LC_MESSAGES/default.mo
bindtextdomain( "domain", "./locale" );
?>
4-在使用gettext()或_()混合单引号和双引号时,您需要使用两个bindtextdomain!
<?php
// Double quote _("Hello world") is matched
bindtextdomain( "domain", "./locale" );
// Single quote _('Hello world') is matched
bindtextdomain( 'domain', "./locale" );
?>
5-编码在许多地方可能是个问题。如果您的.mo文件与PHP脚本的编码不同(例如utf-8),则可能不匹配!