Как устроен PO-файл
Основная запись состоит из двух полей: msgid содержит исходную строку, а msgstr хранит перевод. Если одна и та же фраза может означать разное в разных местах, добавляют msgctxt — контекст, который отличает такие случаи. Для строк с числами используют msgid_plural и несколько вариантов перевода msgstr[0], msgstr[1] и так далее.
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
# Кнопка сохранения в меню
msgctxt "menu"
msgid "Save"
msgstr "Сохранить"
В начале файла находится заголовок — запись с пустым msgid. В нем указаны кодировка и правило множественного числа Plural-Forms, которое определяет количество форм для языка. Комментарии со знаком # часто используют для пояснений переводчику, а специальные пометки, например о ссылках на место в коде, сохраняются без изменений.
Что переводится в PO-файле, а что нет
Переводится только текст в поле msgstr. Поле msgid в большинстве проектов служит ключом, поэтому изменять его нельзя: иначе приложение не найдет перевод. Нельзя трогать кавычки, служебные символы и плейсхолдеры вроде %s или {name}. Заголовок файла и комментарии также остаются без изменений, а msgstr для множественного числа заполняют для всех форм, которые требует язык.
Почему PO-файлы удобны для локализации
Формат прост и хорошо понятен инструментам. Строки легко извлекаются из кода, а идентификатор записи позволяет отслеживать изменения: при обновлении файла в работу попадают только новые и измененные строки. Благодаря комментариям и msgctxt переводчик получает контекст, а системы перевода и инструменты синхронизации, например Serge, умеют разбирать формат без дополнительной подготовки.
Как выстроить работу с PO-файлами
Храните файлы вместе с кодом, в системе контроля версий. Подключите их к платформе перевода напрямую или через инструмент синхронизации. Следите, чтобы у каждой строки был понятный контекст: комментарий или msgctxt. Для строк с числами заранее проверьте, сколько форм у целевого языка, и убедитесь, что в заголовке указано верное правило Plural-Forms. Перед возвратом файла в репозиторий запускайте проверку на пропущенные плейсхолдеры и сломанные кавычки.
Платформа перевода работает с PO-файлами в процессе непрерывной локализации программного обеспечения. Подробнее — на странице Платформы перевода.
Частые ошибки
Распространенная ошибка — перевод msgid вместо msgstr: файл выглядит заполненным, но ключи перестают совпадать. Вторая — неверное число форм множественного числа: для русского языка нужно больше форм, чем для английского. Третья — пометки о неточном переводе (fuzzy) остаются в файле, и приложение может не использовать такую запись. Четвертая — потерянные или измененные плейсхолдеры.
FAQ
Чем PO отличается от XLIFF?
PO — формат экосистемы gettext, он проще и ориентирован на программное обеспечение. XLIFF — универсальный XML-формат обмена данными между системами локализации.
Что такое msgctxt?
Это необязательное поле, которое задает контекст строки и позволяет различать одинаковые исходные фразы с разным значением.
Зачем нужен заголовок Plural-Forms?
Он определяет, сколько форм множественного числа у языка и по какому правилу выбирается нужная.
Можно ли открыть PO-файл в текстовом редакторе?
Да, это обычный текст. Но для перевода удобнее использовать редактор системы локализации, который защищает служебные элементы.