Преимущества компиляции po-файлов для mo - PullRequest
0 голосов
/ 12 декабря 2018

В чем выгода и основная причина компиляции файлов GNU gettext .po (Portable Object) в .mo (Machine Object)?

Я видел много программ, читающих / разбирающих .po напрямую.

Я не использую WordPress, но в их документах написано:

https://codex.wordpress.org/I18n_for_WordPress_Developers

PO-файлы компилируются в двоичные MO-файлы, которые обеспечивают более быстрый доступ к строкам во время выполнения

Является ли более быстрый доступ истинным?PO может быть прочитан только один раз и кэширован в некоторой хеш-таблице, то же самое, вероятно, относится к MO

1 Ответ

0 голосов
/ 17 декабря 2018

Существует несколько причин:

  1. Вы должны всегда компилировать PO-файлы с msgfmt --check, который выполняет несколько важных проверок PO-файла, а не только проверку синтаксиса.Например, если вы используете строки формата printf, он проверит, что%-расширения в переводе соответствуют исходной строке.Невыполнение этого требования может привести к сбоям во время выполнения.В зависимости от языка (программирования) проверок может быть намного больше.
  2. Чтение двоичного файла MO обычно быстрее и проще, чем анализ текстового PO-файла.
  3. PO-файлы часто содержат записи переводаэто не должно использоваться для производства, например, нечетких или устаревших записей.
  4. Многие парсеры PO содержат ошибки или неполны.
  5. Это часть API gettext.Предполагается, что переводы будут находиться под /usr/share/locale/LOCALE/LC_MESSAGES/TEXTDOMAIN.mo, и они должны быть в формате MO, а не в формате PO.Это, конечно, не относится к бесчисленным библиотекам, которые просто реализуют подмножество API gettext.
...