无法使用 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
个文件中读取的。您必须使用程序 msgfmt
将 ja.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
我的项目中有一个翻译库,我正在尝试显示一些翻译,但我似乎无法使用 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
个文件中读取的。您必须使用程序msgfmt
将ja.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