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

Всё про PO‑файлы

Термины

Впервые видите .po? Начните со Словаря: ../glossary.md#po-portable-object

Коротко о том, что такое .po, зачем RimLoc его использует и как удобно редактировать.

Что такое PO?

PO (Portable Object) — текстовый формат из экосистемы GNU gettext. Каждая запись включает:

#: <ссылка на исходный файл>
msgctxt "<опциональный контекст>"
msgid "<исходный текст>"
msgstr "<перевод>"

RimLoc добавляет комментарий #: path:line и уникальный msgctxt, который сочетает ключ и относительный путь — так записи стабильнее при изменениях.

Почему PO в RimLoc?

  • Удобно для переводчиков — много редакторов поддерживают PO.
  • Хранит контекст, ссылки и ключи в одном месте.
  • Легко смотреть diff и делать ревью в PR.

Пример записи RimLoc

#: Mods/MyMod/Languages/English/Keyed/Gameplay.xml:42
msgctxt "Greeting|Keyed/Gameplay.xml:42"
msgid "Hello, {PAWN_label}!"
msgstr ""

Переводим, заполняя msgstr, но плейсхолдеры (например, {PAWN_label}) не меняем.

Рабочий процесс с RimLoc

  • Экспорт:
rimloc-cli --quiet export-po --root ./Mods/MyMod --out-po ./out/MyMod.po --lang ru
  • Редактирование в удобном редакторе (см. ниже).

  • Проверка плейсхолдеров (строгий режим для CI):

rimloc-cli --quiet validate-po --po ./out/MyMod.po --strict --format json | jq .
  • Импорт обратно в XML (в один файл или в структуру мода):
# Один XML для ревью
rimloc-cli --quiet import-po --po ./out/MyMod.po --out-xml ./out/MyMod.ru.xml

# Обновить структуру мода (с бэкапами)
rimloc-cli --quiet import-po --po ./out/MyMod.po --mod-root ./Mods/MyMod --backup

Рекомендуемые редакторы

  • Poedit — популярный кроссплатформенный редактор для PO.
  • Gtranslator (GNOME), Lokalize (KDE) — нативные приложения под Linux.
  • VS Code — есть расширения для “gettext/PO” (подсветка и базовое редактирование).
  • CLI‑утилиты: msgfmt, msgcat, msgconv из gettext (для продвинутых).

Совет: PO должны быть в UTF‑8. Если инструмент сохранил другую кодировку, конвертируйте:

msgconv --to-code=utf-8 ./in.po > ./out.po

Плейсхолдеры

Не меняйте плейсхолдеры (например, {count}, %s). Подробности — в разделах «Гайды → Плейсхолдеры».

См. также: ../cli/export_import.md · ../cli/validate_po.md