Почему модуль gettext Python требует шага компиляции (.po -> .mo)? - PullRequest
0 голосов
/ 10 сентября 2009

Я не вижу, чтобы на этапе компиляции добавлялось какое-либо значение.

Ответы [ 3 ]

5 голосов
/ 11 сентября 2009

Чтение очень быстро о .mo файлах, ясно, что:

  • Это машиночитаемое представление
  • Это хеш-таблица

Учитывая функцию gettext, для поиска строк по ключам во время выполнения , разумно, чтобы этот поиск был реализован эффективно.

Кроме того, необходимо, чтобы влияние gettext на производительность было незначительным; иначе интерес к общению с международным сообществом был бы еще ниже для англоязычных хакеров (из всех стран мы все говорим по-английски, языки программирования на английском).

Делать .mo файл уже обработанным представлением хорошо, так как

  • Формат хорошо подходит для быстрого поиска (хэш-таблица)
  • Формат требует небольшой обработки при запуске приложения (двоичный файл с пользовательским представлением)
1 голос
/ 07 января 2010

Поскольку модуль gettext в Python соответствует стандартам GNU gettext, которые требуют использования PO-файлов для выполнения переводов людьми и MO-файлов для использования приложением во время выполнения. Когда вы используете модуль gettext, вы на самом деле используете класс GNUTranslations, название которого предполагает реализацию gettext в GNU.

Но вы можете предоставить свой собственный класс Translations и загрузить переводы из PO-файлов, в этом нет ничего особенного. В стандартном дистрибутиве Python есть даже некоторая реализация программы чтения PO-файлов, см. Скрипт msgfmt.py в каталоге Tools.

0 голосов
/ 11 сентября 2009

Я думаю, что компиляция .po -> .mo

Буквы PO в файлах .po означают Portable Object, чтобы отличить его от файлов .mo, где MO обозначает Machine Object.

MO-файлы предназначены для чтения программами и имеют двоичный характер. Некоторые системы уже предлагают инструменты для создания и обработки файлов MO в рамках поддержки родного языка, поставляемой с системой, но формат этих файлов MO часто отличается от системы к системе и не переносим.

Утилиты GNU `gettext '- 1.4 Файлы, передающие переводы

...