【问题标题】:PHP gettext Simplified Chinese support?PHP gettext 支持简体中文吗?
【发布时间】:2014-01-10 07:37:48
【问题描述】:

我正在尝试在我的一个 PHP 项目中支持繁体中文,但我无法让它显示任何中文字符。这是我的 gettext 设置:

putenv("LC_ALL=zh_CN.utf8");
setlocale(LC_ALL, "zh_CN.utf8");
bindtextdomain("wpsmessages", dirname(__FILE__) . "/locale");
bind_textdomain_codeset("wpsmessages", 'UTF-8');
textdomain("wpsmessages");

之前我通过键入以下内容在 SSH 中创建了语言环境:

sudo locale-gen zh_CN.utf8

然后返回:

Generating locales...
zh_CN.UTF-8... done

在输入 locale -a 后,我在列表中得到以下信息(以及其他):

zh_CN
zh_CN.utf8

但是,它仍然没有显示任何中文字符。我在这里做错了什么?

【问题讨论】:

  • 不太确定我是否理解您的示例。您正在尝试让 PHP 获取文本以支持中文,但您的所有示例都显示了系统级配置。失败的 PHP 代码在哪里?它是从数据库中提取数据吗?数据库和 PHP 脚本是否支持 UTF8?
  • 对不起,我不太清楚这一点。所以我基本上有一个调用__('This is some text') 的gettext 就绪PHP 项目,从位于/locale/ 文件夹中的.mo 和.po 文件中获取文本。 gettext 适用于语言环境 de_DE.utf8、nl_NL.utf8、pt_BR.utf8 等,但我无法让它打印简体中文的字符串。相反,它会打印英文默认字符串。
  • 好的,现在我似乎明白了。但更大的问题是您似乎正在使用 WordPress,因为您说您是通过__() 调用的,对吗?将其添加为标签并更改了标题。应该有助于让更多人关注这个问题。另外,看看这个额外的问题:stackoverflow.com/questions/5257519/…
  • 该死,很抱歉浪费了您的时间,但问题是文件名约定问题。 wpsmessages-zh_CN.mo 应该被命名为 wpsmessages.mo,但你不知道。请删除这个话题,烧它,烧我,随便你。 :) 这很尴尬。

标签: php gettext chinese-locale php-gettext


【解决方案1】:

有点尴尬,但解决方案只是按照我自己的文件名约定将文件 wpsmessages-zh_CN.mo 重命名为 wpsmessages.mo

我使用gettext的PHP项目的结构基本上是这样的:

/locale/pt_BR.utf8/LC_MESSAGES/wpsmessages.mo
/locale/zh_CN.utf8/LC_MESSAGES/wpsmessages.mo
...

因此,使用bindtextdomain("wpsmessages", dirname(__FILE__) . "/locale"); 会为setlocale() 指定的语言环境获取正确的.mo 文件,但由于文件名错误而无法找到该文件。

希望这可以帮助像我一样愚蠢的人。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-29
    • 2019-02-09
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多