Локализация через Locale :: Maketext :: Simple всегда возвращается к значению по умолчанию вместо записи .po - PullRequest
2 голосов
/ 11 июня 2019

В модуле 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 файлы загружены неправильно.

Как я могу проверить, какие файлы .po найдены при создании экземпляра maketext? Или я что-то путаю и есть общая ошибка?


Редактировать 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 Ответ

1 голос
/ 14 июня 2019

После еще нескольких копаний и испытаний я, наконец, нашел проблему для такого поведения, так что вот мое решение до сих пор. Надеюсь, что это может помочь другим, потому что вы редко найдете хорошую документацию по этой теме:

Добавление библиотек

Я добавил библиотеку https://metacpan.org/pod/Locale::Maketext::Simple, как указано выше, но забыл добавить https://metacpan.org/pod/Locale::Maketext::Lexicon.

Это заняло у меня довольно много времени, потому что не было никаких исключений или ошибок, просто ... ничего.

В Maketext :: Простая документация гласит

Если Locale :: Maketext :: Lexicon отсутствует, он реализует минимальную функцию локализации, просто интерполируя [_1] с первым аргументом, [_2] со вторым и т. Д.

На первый взгляд видно, что файлы .po загружаются без Maketext :: Lexikon, но просто заменяет заполнители.

Другие вопросы:

Затем я обнаружил, что все строки переведены, за исключением строк с заполнителями, такими как [_1]. Я не мог найти причину для этого, но я перешел на

Style => 'gettext'

и заменил все [_1], [_2] ... на %1, %2 ... - это работает как брелок.

...