PHP 和 Gettext 在我的服务器上不起作用
我有一个网站。我正在尝试让 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,还是......?
I have a website. I'm trying to get gettext to work so that my English, Sweden and Norway sites can come up. I can't get it to work. What have I done wrong?
This is my config code:
// 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/');
And my path is /var/www/rssbot.dk/lang/
. Should I make chmod right, or...?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我发现某些 gettext 安装需要为您要使用的每个区域设置运行
locale-gen
。我发现对于 Ubuntu 尤其如此。运行locale-gen
后,您可能需要重新启动 PHP (apache)。我有一个 测试设置(带有工作区域设置文件),可以确定是否你得到的文本设置正在工作。
I've found that some gettext installs need to have
locale-gen
run for each locale you want to use. I found this to be true for Ubuntu in particular. You might need to restart PHP (apache) after runninglocale-gen
.I've have a test setup (with working locale files) that can determine if you gettext setup is working.
有一些事情可能会出错。
1- 要适应大多数系统,您需要以下行:
2- 在 Linux 上,当使用 setlocale 与 LC_ALL 而不是 LC_MESSAGES 时,您需要将区域设置安装在服务器!
可以使用这样的命令进行安装(对于 Ubuntu)
或者只是使用这样的命令重新配置
3- 指定 .mo 文件的名称和区域设置目录
4- 在使用 gettext() 或 _() 时混合单引号和双引号时,您将需要使用两个绑定文本域!
5- 编码在很多地方可能是一个问题。如果您的 .mo 文件与 PHP 脚本的编码不同(例如 utf-8),则它可能不匹配!
There are a few things that might go wrong.
1- To accomodate most systems, you need the following lines:
2- On Linux, when using setlocale with LC_ALL instead of LC_MESSAGES, you will need to have the locale installed on the server!
It can be installed with a command like this one (for Ubuntu)
Or just re-configured with a command like this one
3- Specify the name of .mo files and locale directory
4- When mixing single and double quotes while using gettext() or _(), your will need to use two bindtextdomain!
5- Encoding might be an issue in many places. If your .mo file is not in the same encoding (utf-8 for example) than your PHP script, it might not match!