我已经使用PHP和gettext本地化了一个从俄语到英语的网站,只需将所有字符串包装到 __($string)
函数中 .
有用 .
这是要点:https://gist.github.com/Grawl/ba8f39b8398791c6a67e
但它不适用于中文翻译 . 我刚刚编译 .mo
(和源 .po
)到 locale/zh_CN/LC_MESSAGES/
,访问 /index.php?locale=zh_CN
并且根本看不到它被翻译 .
中国人怎么了?
我是否要使用其他语言代码?
我使用 zh_CN
来映射中文,就像在WordPress中一样 .
我无法理解 why .
Update:
问题出在HTML <meta>
标签和charset从服务器 Windows-1251
. Chop俄罗斯PHP服务器 .
在 <meta charset="GBK">
中设置 <meta charset="GBK">
并关闭 AddDefaultCharset
之后,中文本地化终于开始起作用了 .
毕竟,我添加了这些修改:
.htaccess
:
- AddDefaultCharset UTF-8
+ AddDefaultCharset off
+ RewriteRule ^cn index.php?locale=zh_CN&charset=GBK [L]
functions.php
,包含在 <!DOCTYPE html>
之前:
+ $charset=$_GET["charset"];
+ if(!isset($charset)) {
+ $charset="UTF-8";
+ }
head.php
, <head>
标签内容:
+ <meta charset="<?=$charset?>">
因此,如果我没有将charset设置为get request,它将变为UTF-8,否则它将来自get request . 对于Chiense我把它设置为 GBK
,就像在淘宝网上一样,浏览器设置了正确的字符集 .
But after all I just has cyrillic characters encoded in Chinese glyphs, character by character.
像这样: Сервис и услуги
成为这个: 褋械褉胁懈褋 懈 褍褋谢褍谐懈
如果将这些中文字符粘贴到decoder app中,选择左侧的GB2312(中文字符集中的一个)和右侧的UTF-8,则会有 ?е?ви? и ??л?ги
- 某些西里尔字符已损坏,但这显然是原始字符串,因为在翻译中我有更多缩短 服务
这句话 .
Help me please.
Update 2
我忘记将 bind_textdomain_codeset();
设置为 $domain
,它是 messages
.
所有的工作都在unicode charset上 . 一切正常 .
1 回答
摘要
我能够在不改变
<meta charset="...">
值的情况下完成这项工作 . 您还应该能够从.htaccess
中删除AddDefaultCharset
规则,并从RewriteRule
中删除&charset=GBK
. 您需要确保正确格式化和编译.po
文件,并确保服务器可以找到它 .说明/示例
设置
<meta charset="...">
标记只会告诉 browser 页面上正在使用什么字符编码 . PHP仍然需要知道要选择哪个文件来替换字符串 . 无论如何,虽然this documentation suggests otherwise,我认为你仍然可以使用UTF-8
进行中文本地化 . 这是我在我的系统上设置的一个简单的工作示例:我的
.po
文件位于./locale/zh_CN/LC_MESSAGES/bridges.po
,如下所示:根据comment on the gettext() documentation,您应该将字符编码和其他相关标头放在
.po
文件中,例如您可以通过从终端运行命令
msgfmt -c bridges.po -o bridges.mo
来检查.po
文件的语法 . 如果您认为.po
文件有任何问题,它会发出警告 . 正如评论者所说,我认为你不需要安装中文系统库 .附:我不知道这些中文翻译是否正确 . 这正是谷歌翻译给我的! :)