Что такое формат файла PO?
Файлы .po - это файлы GNU gettext Portable Object, формат исходного кода переводов программного обеспечения, доступный для редактирования человеком. Этот формат используется в огромном количестве проектов: утилитах GNU/Linux, приложениях PHP, пакетах Python, темах и плагинах WordPress и многих других приложениях с открытым исходным кодом.
Файл .po представляет собой обычный текст в кодировке UTF-8, организованный в виде парных записей: msgid (исходная строка на языке оригинала) и msgstr (эквивалент перевода). Строки комментариев, начинающиеся с #, содержат заметки переводчика, извлеченные комментарии из исходного кода, ссылки на файлы и флаги «fuzzy» (нечеткий перевод). Записи с формами множественного числа используют варианты msgid_plural и индексированные msgstr[n], управляемые выражением Plural-Forms в заголовке файла.
Рабочий процесс перевода включает три типа файлов: разработчики извлекают переводимые строки в шаблон .pot, переводчики копируют его для каждой локали и заполняют значения msgstr, а затем msgfmt компилирует каждый .po в бинарный файл .mo, который приложение загружает во время выполнения. Файл .mo предназначен только для чтения машиной - вы всегда редактируете .po, а не скомпилированный результат.
Файлы .po можно редактировать в обычном текстовом редакторе, но специализированные инструменты, такие как Poedit, обеспечивают проверку ошибок, предложения нечетких совпадений и помощники для форм множественного числа. Веб-платформы, такие как Weblate, поддерживают совместный перевод. Формат стабилен и обладает обратной совместимостью с момента появления GNU gettext в 1995 году.
Безопасность и защита
РИСК: LOWФайл .po содержит только текст перевода и комментарии - в нем нет исполняемого кода, поэтому сам файл безвреден. Единственное предостережение: вредоносный файл перевода, помещенный в тему или плагин, может внедрить вводящий в заблуждение текст интерфейса (например, измененные ссылки или инструкции), поэтому используйте языковые файлы только из официальных источников тем/плагинов, а не случайные загрузки.
Детали формата
в двух словах- Образ диска / образ раздела (редко) - Устаревшее название в базах данных «Disk image file» отражает редкую или неверную маркировку; .po не является стандартным расширением для образов дисков.
Программы, открывающие файлы PO
Технические подробности
глубокая спецификация| Тип формата | Простой текст, ориентированный на строки (синтаксис GNU gettext PO) |
| Кодировка | UTF-8 (кодировка объявляется в поле заголовка Content-Type); устаревшие каталоги могут использовать кодировки ISO-8859-x |
| MIME-тип | text/x-gettext-translation |
| Структура записи | пары msgid / msgstr; необязательный msgctxt для контекстного разграничения идентичных исходных строк |
| Запись заголовка | Первая запись имеет пустой msgid; ее блок msgstr содержит Project-Id-Version, Content-Type, Plural-Forms и другие метаданные каталога |
| Формы множественного числа | msgid_plural с индексированными вариантами msgstr[0], msgstr[1], ...; выражение в заголовке Plural-Forms определяет, какая форма применяется для данного числа |
| Типы комментариев | # (комментарий переводчика), #. (извлеченный комментарий к исходному коду), #: (ссылка на файл исходного кода), #, (флаги, такие как fuzzy или c-format) |
| Флаг Fuzzy | #, fuzzy помечает перевод, требующий проверки после изменения исходной строки; msgfmt исключает записи fuzzy из скомпилированного вывода .mo |
| Скомпилированный результат | Преобразуется в бинарный .mo (Machine Object) с помощью msgfmt; именно .mo загружается работающим приложением через gettext() |
| Файл шаблона | .pot (Portable Object Template) - непереведенный скелет; все языковые файлы .po создаются на его основе через msginit или msgmerge |
| Типичный размер файла | 5 КБ - 5 МБ; масштабируется в зависимости от количества переводимых строк в проекте |
| Инструментарий | xgettext (извлечение строк из исходников), msginit (создание нового .po), msgmerge (обновление существующего .po), msgfmt (компиляция в .mo) |
| Платформа | Любая - Linux, macOS, Windows, BSD; везде, где доступен GNU gettext или совместимая реализация libintl |
| Экосистема | Используется WordPress, Drupal, GNOME, KDE, Python gettext, PHP gettext и многими другими фреймворками для интернационализации (i18n) |
| Выпущен | 1995 (GNU gettext) |
| Последняя версия | PO file syntax is stable; defined in the current GNU gettext manual |
| Открыть стандартное | Да · без роялти |
| Спецификация | www.gnu.org |
Конвертации PO
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах PO.