通过Locale :: Maketext ::: Simple进行的本地化始终退回到默认值,而不是.po条目

时间:2019-06-11 13:16:01

标签: perl localization locale po

在perl模块中,我想使用https://metacpan.org/pod/Locale::Maketext::Simple将字符串转换为不同的语言。

我的.po文件位于/opt/x/languages下,例如/opt/x/languages/en.po

在我的模块中,我使用以下标题:

use Locale::Maketext::Simple (
    Path => '/opt/x/languages',
    Style => 'maketext'
);
loc_lang('en');

.po文件中的条目如下所示:

msgid "string [_1] to be converted"
msgstr "string [_1] is converted"

并且到目前为止,通过控制台进行msgfmt -c en.po的检查不会引发任何错误。

但是,当我像loc()那样用loc("string [_1] to be converted", "xy")转换字符串时,它给我的输出是“要转换的字符串xy”,而不是我所期望的“字符串xy被转换”。在我看来,.po文件未正确加载。

如何检查在maketext实例化期间找到了哪些.po文件?还是我把事情弄混了,有一个普遍的错误?


修改1: 感谢您的评论,但仍然无法正常工作。

我已经使用https://poedit.net/检查了文件,并使用此工具也创建了相应的.mo文件(当前用于de和en)。它们位于.po文件旁边(在/ opt / x / languages中)。

为完整起见,我的标题如下:

# MY OWN LANGUAGE FILE (DE)
# 06-2019 by me
#
msgid ""
msgstr ""
"Project-Id-Version: 1.0.0\n"
"POT-Creation-Date: 2019-06-01 00:00+0100\n"
"PO-Revision-Date: 2019-06-02 00:00+0100\n"
"Last-Translator: thatsme <me@me.de>\n"
"Language-Team: unknown\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2.3\n"

msgid "string [_1] to be converted"
msgstr "string [_1] is converted"

1 个答案:

答案 0 :(得分:1)

经过更多的挖掘和测试之后,我终于找到了此行为的问题,因此,这是到目前为止的解决方案。希望这对其他人有帮助,因为您很少找到有关此主题的任何文档:

添加库

我如上所述添加了库https://metacpan.org/pod/Locale::Maketext::Simple,但是忘记添加https://metacpan.org/pod/Locale::Maketext::Lexicon

这花了我很长时间才能看到,因为没有抛出任何异常或错误,只是……什么都没有。

在Maketext :: Simple文档中,它说

  

如果不存在Locale :: Maketext :: Lexicon,则它只需将第一个参数的[_1]插值,第二个参数的[_2]等,插值即可实现最小化的定位功能。

乍看之下,加载.po文件时不使用Maketext :: Lexikon,但是它只是替换了占位符。

其他问题:

然后,我发现所有字符串都被翻译了,除了带有[_1]等占位符的字符串。我找不到原因,但是我搬到了

Style => 'gettext'

,并将所有[_1][_2] ...替换为%1%2 ...-就像一个咒语。