网站需要利用gettext实现国际化,碰到一个问题,请教大家:
开发环境是RedHat9+apache2+mysql5+php5 test1.php以utf-8编码保存,在浏览器中打开可以正确显示中文,内容如下:
<?php
echo "中文";
?>
test2.php也是以utf-8编码保存,内容如下:
<?php
putenv("LANG=zh_CN");
setlocale('LC_ALL', "zh_CN");
bindtextdomain("test2", "./locale/");
textdomain("test2");
echo gettext("chinese");
?>
我用xgettext生成了test2.po文件,使用的命令如下:
xgettext -C -d test2 test2.php
然后我用编辑器打开test2.po,把里面的charset设置为utf-8,然后把“chinese”对应的msgstr改为“中文”,保存(utf-8格式)。内容摘抄如下:
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: test2.php:2
msgid "chinese"
msgstr "中文"
然后用msgfmt生成了test2.mo文件,使用的命令如下:
msgfmt -o test2.mo test.po
最后把test2.po和test.mo复制到./locale/zh_CN/LC_MESSAGES/目录下,重启apache服务器。
在浏览器中打开test2.php,显示乱码。
当在test2.php中加入:<meta content="text/html; charset="gb2312"/>后,能够正确显示中文,此时的test2.php内容如下:
<meta content="text/html; charset="gb2312"/>
<?php
putenv("LANG=zh_CN");
setlocale('LC_ALL', "zh_CN");
bindtextdomain("test2", "./locale/");
textdomain("test2");
echo gettext("chinese");
?>
可是我并不想使用gb2312编码(否则很不利于国际化),而且奇怪的是,我每个地方都是使用的utf-8编码,为什么到了mo文件里面还是gb2312的编码呢?
有什么办法可以让我每个网页都使用utf-8编码,又能使用gettext显示中文?
开发环境是RedHat9+apache2+mysql5+php5 test1.php以utf-8编码保存,在浏览器中打开可以正确显示中文,内容如下:
<?php
echo "中文";
?>
test2.php也是以utf-8编码保存,内容如下:
<?php
putenv("LANG=zh_CN");
setlocale('LC_ALL', "zh_CN");
bindtextdomain("test2", "./locale/");
textdomain("test2");
echo gettext("chinese");
?>
我用xgettext生成了test2.po文件,使用的命令如下:
xgettext -C -d test2 test2.php
然后我用编辑器打开test2.po,把里面的charset设置为utf-8,然后把“chinese”对应的msgstr改为“中文”,保存(utf-8格式)。内容摘抄如下:
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: test2.php:2
msgid "chinese"
msgstr "中文"
然后用msgfmt生成了test2.mo文件,使用的命令如下:
msgfmt -o test2.mo test.po
最后把test2.po和test.mo复制到./locale/zh_CN/LC_MESSAGES/目录下,重启apache服务器。
在浏览器中打开test2.php,显示乱码。
当在test2.php中加入:<meta content="text/html; charset="gb2312"/>后,能够正确显示中文,此时的test2.php内容如下:
<meta content="text/html; charset="gb2312"/>
<?php
putenv("LANG=zh_CN");
setlocale('LC_ALL', "zh_CN");
bindtextdomain("test2", "./locale/");
textdomain("test2");
echo gettext("chinese");
?>
可是我并不想使用gb2312编码(否则很不利于国际化),而且奇怪的是,我每个地方都是使用的utf-8编码,为什么到了mo文件里面还是gb2312的编码呢?
有什么办法可以让我每个网页都使用utf-8编码,又能使用gettext显示中文?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货