【问题标题】:PHP: Gettext problemsPHP:获取文本问题
【发布时间】:2009-11-21 17:54:47
【问题描述】:

我似乎无法让 gettext 工作,在这里。

我正在使用 MAMP Pro,phpinfo(); 说 gettext 已启用。

我遵循了这个教程:http://zez.org/article/articleview/42/1/

  1. 我在我的代码中声明了我的字符串,如下所示:_('test string');
  2. 然后我运行xgettest -L PHP test.php,它生成了我的messages.po 文件。
  3. 我在poedit 中打开了这个文件并翻译了我的字符串,然后保存了文件,生成了一个messages.mo 文件。
  4. 我将.po.mo 文件都移到了[webroot]/locale/es/LC_MESSAGES/(在这种情况下,我的翻译是西班牙语)
  5. 在我的代码中,我设置了以下内容:

    $lang = $_SESSION['lang']; // available to all views that include this file

    putenv('LC_ALL='.$lang);

    bindtextdomain('messages','./locale');

    textdomain('messages');

    ...$_SESSION['lang'] 我可以在enes 之间轻松切换。

  6. 我重新加载我的页面,然后单击切换到es 的链接,但我的字符串仍然显示为英文版本而不是西班牙文版本。切换回en 显示没有变化;它总是英文版本。

我在任何地方都没有收到错误消息,所以我有点不知道为什么会出现这个问题。谁能给我一些指导/帮助?我错过了什么吗?

【问题讨论】:

  • 尝试硬编码“es”,然后我们就会知道这是 i18n 的问题或只是会话混乱。
  • 或者尝试修改英文翻译。
  • "es" 硬编码效果没有变化。
  • 好的,我在修改英文翻译时确实看到了变化。现在呢?
  • @neezer:所以,您使用了其中一种翻译(英文),但您在代码中混淆了 smg。

标签: php locale gettext


【解决方案1】:

您还需要在您的服务器上安装相应的语言文件:

cat /usr/share/i18n/SUPPORTED |grep -i "es_ES" > /var/lib/locales/supported.d/es
cat /usr/share/i18n/SUPPORTED |grep -i "nl_NL" > /var/lib/locales/supported.d/nl
cat /usr/share/i18n/SUPPORTED |grep -i "de_DE" > /var/lib/locales/supported.d/de

现在您安装了西班牙语、荷兰语和德语。完成后,运行 dpkg-reconfigure locales 就完成了。 =)

【讨论】:

  • OP 使用的是 MAMP PRO,所以在 OS X 上也是如此。dpkg-reconfigure 不会在那里工作。
  • 你使用不区分大小写的开关来grep一个大小写完整的搜索字符串,这很可爱。
【解决方案2】:

似乎问题可能出在 poedit 上。最初,我所有的西班牙语翻译都标记为“模糊”。如果我从它们中删除“模糊”,它们就会像应有的那样显示在我的网页上。

我不认为这是正常的行为,但是嘿,至少它有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多