PO-файлы в локализации

PO-файл (Portable Object) — это текстовый формат для хранения строк интерфейса и их переводов, который используется в системе gettext. В нем каждая запись содержит исходный текст и перевод, а также служебную информацию для переводчика. Формат широко применяется в программном обеспечении, веб-проектах и играх.

3 мин чтения

Как устроен 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-файл в текстовом редакторе?

Да, это обычный текст. Но для перевода удобнее использовать редактор системы локализации, который защищает служебные элементы.

Попробуйте на практике

Глоссарии, память переводов и контроль качества уже есть в Платформе перевода.