perl - 通过 Locale::Maketext::Simple 进行本地化总是回退到默认值而不是 .po 条目

标签 perl localization locale po

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

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

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

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 conversion", "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 <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0e636b4e636b206a6b" rel="noreferrer noopener nofollow">[email protected]</a>>\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"

最佳答案

经过更多的挖掘和测试,我终于发现了这种行为的问题,所以这是迄今为止我的解决方案。希望这可以帮助其他人,因为您很少找到关于此主题的任何好的文档:

添加库

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

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

在 Maketext::Simple 文档中它说

If Locale::Maketext::Lexicon is not present, it implements a minimal localization function by simply interpolating [_1] with the first argument, [_2] with the second, etc.

乍一看,.po 文件是在没有 Maketext::Lexikon 的情况下加载的,但它只是替换了占位符。

其他问题:

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

Style => 'gettext'

并将所有 [_1][_2]... 替换为 %1%2 ... - 这就像一个魅力。

关于perl - 通过 Locale::Maketext::Simple 进行本地化总是回退到默认值而不是 .po 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56544626/

相关文章:

java - 如何扩展可用 Java 语言环境列表

php - 需要每2分钟ping 1000个url

perl - 执行以下代码片段时。我可以看到错误“全局符号 "$colors"需要显式包名称”。必须打印键和值

perl - 有没有办法在 vim 中为 Perl 启用代码完成?

Android 应用程序不再回退到默认值/strings.xml

wpf - .net wpf4 应用程序的 Locbaml 本地化

perl - 为什么 Net::SSH2::File 只允许写入 32500 字节?

javascript - 检测数字格式文化设置

c++ - 有效的语言环境名称

c# - .NET 中的系统区域设置