【问题标题】:Localization via Locale::Maketext::Simple always falls back to default instead of .po entry通过 Locale::Maketext::Simple 进行本地化总是回退到默认值而不是 .po 条目
【发布时间】:2019-10-25 22:20:00
【问题描述】:

在 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: 感谢 cmets,但它仍然无法正常工作。

我已经使用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"

【问题讨论】:

  • 你也有 .mo 文件吗?
  • 另外,您的 .po 文件的标题是否完整?我记得有一些元字段是必需的。

标签: perl localization locale po


【解决方案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... - 这就像一个魅力。

【讨论】:

    猜你喜欢
    • 2020-05-06
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多