无法使用 po 文件获取翻译

Can't get translation using po files

我的项目中有一个翻译库,我正在尝试显示一些翻译,但我似乎无法使用 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";

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

环境变量 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