【问题标题】:Can't get translation using po files无法使用 po 文件进行翻译
【发布时间】:2021-01-13 00:24:55
【问题描述】:

我的项目中有一个翻译库,我正在尝试显示一些翻译,但我似乎无法让 gettext 工作。

当前结构如下所示:

Project
   test.php
   translations
      iso-3166-1
         ja.po

所以在 Project/translations/iso-3166-1 中存储了所有 .po 文件。

在 test.php 我有:

<?php

$locale = "ja";
$dir = "translations";

putenv("LANGUAGE=$locale");
bindtextdomain("iso-3166-1", $dir);
textdomain("iso-3166-1");

echo gettext("Australia")."\n";

但无论我尝试什么,它似乎都没有显示任何翻译。使用这种方法应该不能在我提供的路径中查找翻译。我已经浏览了几次文档,但似乎找不到任何修复方法。

【问题讨论】:

    标签: php gettext po


    【解决方案1】:

    环境变量LANGUAGE 可以保存语言的优先级列表,例如ja:fr:es,但您仍然必须将环境变量LANG 设置为主要语言,在您的情况下为ja

    但您的其他设置看起来也有问题:

    • 缺少两个目录级别。您的语言环境文件应位于 translations/ja/LC_MESSAGES
    • 翻译是从.mo 文件中读取的。您必须使用程序msgfmtja.po 编译成ja.mo 并(!)将其安装为translations/ja/LC_MESSAGES/iso-3166-1.mo
    • 您错过了对setlocale(LC_ALL, 'ja') 的呼叫。你也不需要修改环境变量。

    本教程可能会帮助您入门:https://www.codeandweb.com/babeledit/tutorials/translation-with-gettext-and-php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 2014-07-14
      • 2010-10-16
      • 1970-01-01
      相关资源
      最近更新 更多