GNU gettext PO (переносимый объект)

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

Контекстная информация, хранящаяся в файле, поддерживается настройкой его заголовков или его привязкой к соответствующим исходным файлам.

Отображение изменения исходной строки

Weblate может извлекать предыдущие исходные строки из PO-файлов, если они присутствуют, и показывать разницу строк для строк, требующих редактирования, на основе этого. Чтобы включить их, msgmerge должен быть выполнен с параметром --previous, и тогда результирующий PO-файл будет содержать строки, подобные следующим:

#, fuzzy
#| msgid "previous-untranslated-string"
msgid "untranslated-string"
msgstr "translated-string"

Это управляется параметром po_keep_previous Параметры формата файла. Это не влияет на устаревшие записи, отмеченные #~.

Устаревшие строки

msgmerge по умолчанию сохраняет строки, удалённые из POT-файла, как устаревшие записи #~. Включите параметр po_remove_obsolete Параметры формата файла, чтобы удалять устаревшие записи при сохранении PO-файлов Weblate.

Заголовок PO-файла

Заголовок PO-файла автоматически поддерживается Weblate. Его можно настроить на включение заголовков Language-Team, Last-Translator, X-Generator и Report-Msgid-Bugs-To с помощью Параметры формата файла.

Contributor comments

Use the po_contributor_comments Параметры формата файла parameter to add contributor names and years to PO header comments. Choose gettext for traditional comments or spdx for SPDX copyright entries. The default, none, disables contributor updates without removing existing comments. This setting works independently of the Last-Translator header setting.

With gettext, contributor comments look like this:

# Jane Doe <jane@example.com>, 2024, 2026.

With spdx, the same entry becomes:

# SPDX-FileCopyrightText: 2024, 2026 Jane Doe <jane@example.com>

On the next commit by an eligible contributor, SPDX mode converts all recognized contributor comments, preserves historical contribution years, and adds the current year for that contributor. Anonymous Weblate authors are skipped. Unrelated comments and copyright notices are preserved. Weblate does not infer copyright claims from translated credit strings or add project-specific notices or license identifiers; handle these in custom tooling.

Перенос строк

Перенос строк в основном соответствует поведению GNU gettext. Как алгоритм переноса в GNU gettext, так и данные Юникода, на которых основан перенос, развиваются, что может вызывать различия в некоторых граничных случаях.

Ширину переноса можно настроить с помощью параметра po_line_wrap, см. Параметры формата файла.

Создание соответствующих MO-файлов

Если MO-файлы хранятся в репозитории вместе с PO-файлами, можно использовать Создание MO-файлов, чтобы поддерживать их в актуальном состоянии в соответствии с PO-файлами.

Обновление PO-файлов из POT-файла

Обновлять PO-файлы до соответствия POT (msgmerge) можно использовать для обновления PO-файлов из POT-файла, см. Обновление файлов языка перевода.

Одноязычный gettext

Некоторые проекты решают использовать gettext в качестве одноязычного формата — в их исходном коде присутствуют только идентификаторы и строка должна быть переведена на все языки, в том числе и на английский. Такая конфигурация поддерживается, хотя для этого и надо явно выбирать этот формат файлов при импорте компонентов в Weblate.

Файлы примеров

Двуязычный PO-файл gettext обычно выглядит следующим образом:

#: weblate/media/js/bootstrap-datepicker.js:1421
msgid "Monday"
msgstr "Pondělí"

#: weblate/media/js/bootstrap-datepicker.js:1421
msgid "Tuesday"
msgstr "Úterý"

#: weblate/accounts/avatar.py:163
msgctxt "No known user"
msgid "None"
msgstr "Žádný"

Одноязычный PO-файл gettext обычно выглядит следующим образом:

#: weblate/media/js/bootstrap-datepicker.js:1421
msgid "day-monday"
msgstr "Pondělí"

#: weblate/media/js/bootstrap-datepicker.js:1421
msgid "day-tuesday"
msgstr "Úterý"

#: weblate/accounts/avatar.py:163
msgid "none-user"
msgstr "Žádný"

А базовый языковой файл — вот таким образом:

#: weblate/media/js/bootstrap-datepicker.js:1421
msgid "day-monday"
msgstr "Monday"

#: weblate/media/js/bootstrap-datepicker.js:1421
msgid "day-tuesday"
msgstr "Tuesday"

#: weblate/accounts/avatar.py:163
msgid "none-user"
msgstr "None"
Поддерживаемые функции

Расширения файлов

.po, .pot

Языковость

Одноязычный

Поддерживает множественное число

Yes

Поддерживает описания

Yes

Поддерживает пояснения

No

Поддерживает контекст

Yes

Поддерживает расположение

Yes

Поддерживает флаги

Yes

Дополнительные состояния

Needs editing

Идентификатор API

po-mono

Поддерживает строки только для чтения

No

Поддерживает удаление устаревших строк

Yes

Поддерживаемые функции

Расширения файлов

.po, .pot

Языковость

Двуязычный

Поддерживает множественное число

Yes

Поддерживает описания

Yes

Поддерживает пояснения

No

Поддерживает контекст

Yes

Поддерживает расположение

Yes

Поддерживает флаги

Yes

Дополнительные состояния

Needs editing

Идентификатор API

po

Поддерживает строки только для чтения

No

Поддерживает удаление устаревших строк

Yes

Настройка Weblate

Типичный Настройки компонента Weblate для двуязычного gettext

Маска файла

po/*.po

Одноязычный базовый файл

Пусто

Шаблон для новых переводов

po/messages.pot

Формат файла

PO-файл gettext

Типичный Настройки компонента Weblate для одноязычного gettext

Маска файла

po/*.po

Одноязычный базовый файл

po/en.po

Шаблон для новых переводов

po/messages.pot

Формат файла

PO-файл gettext (одноязычный)

Параметры формата файла

Параметры формата файла с шаблоном po_* можно использовать для настройки поведения формата gettext.