Почему у gettext нет опции хранения в БД? - PullRequest
10 голосов
/ 09 августа 2010

Я работаю над i18n для веб-приложения, использующего Django, которое использует gettext в качестве основы i18n.Кажется очевидной идеей, что переводы должны храниться в базе данных, и это не сложно сделать, но po-файлы в файловой системе все еще используются.Почему это так?

Мое текущее подозрение состоит в том, что преимущества разработки db backaged просто перевешиваются надежностью / привычностью gettext как хорошо известного пакета.Существуют ли другие существенные причины для сохранения переводов в файловой системе?

Ответы [ 3 ]

9 голосов
/ 14 сентября 2010

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

Кроме того, скомпилированные файлы gettext (.mo) оптимизированы для загрузки в память и по этой причине они более подходят, чем обычные текстовые файлы (например, некомпилированные .po файлы).

Вы всегда можете использовать платформу перевода, возможно, которая использует базу данных, для выполнения перевода и экспорта результатов в текстовые файлы. Примеры: Pootle , Narro , Launchpad Rosetta , Transifex (только для хостинга) .

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

Кстати, использование gettext, вероятно, является лучшим технологическим решением, которое вы можете принять в отношении локализации. Я никогда не видел ни коммерческого, ни собственного решения, которое могло бы конкурировать с ним по функциям, инструментам и даже поддержке.

3 голосов
/ 24 августа 2010

Это очень распространенный способ делать переводы, которые существовали в течение долгого времени, позволяя устранять любые проблемы в течение многих лет. Я представляю, что пишу что-то вроде gettext, было бы слишком легко сделать неправильные обобщения о том, как работают языки. Зачем команде разработчиков Django тратить время на изучение и разработку этого, когда это уже сделано в проверенной и проверенной системе? Кроме того, профессиональные переводчики, вероятно, знают, что делать с PO-файлами, когда база данных домашнего перевода может помешать им работать так, как они привыкли.

Почему вы предпочитаете переводы в базе данных? Я думаю, вы могли бы предпочесть это, поскольку вы могли бы сделать интерфейс перевода для базы данных. Если это так, взгляните на Pootle , это мощный веб-интерфейс перевода, который работает непосредственно с PO-файлами и может даже интегрироваться с обычными системами контроля версий. Добавьте несколько хуков после фиксации, и у вас может получиться такая система без особых усилий и без накладных расходов на базу данных переводов.

Надеюсь, это поможет.

2 голосов
/ 09 августа 2010

Это кажется очевидной идеей для вас , я не думаю, что все согласятся.AFAIK django использует .po файлы по следующим причинам:

  • Контроль версий - вам придется создавать дополнительные инструменты ".po для базы данных", потому что вам все равно нужно поддерживать разных людей, работающих над переводами, и выне может избавиться от наличия .po файлов для этой цели
  • gettext - это стандартный способ выполнения переводов в мире .nix, есть много инструментов для работы с ним, и его легко редактировать, изменять и т. д.
  • Нет необходимости попадать в базу данных, если вам нужно что-то перевести.Некоторые представления могут работать без каких-либо запросов к базе данных, поэтому нет необходимости привязывать их к базе данных только для получения перевода.(Я могу ошибаться, но в случае mod_wsgi - переводы будут загружены один раз и сохранены в памяти для каждого потока).

Кстати, если вам нужны разные переводы для полей, это немногодругой вопрос, и вы должны проверить http://www.muhuk.com/2010/01/dynamic-translation-apps-for-django/ и выбрать приложение, которое лучше всего соответствует вашим потребностям.

...