Альтернативы gettext?

Есть ли общие альтернативы gettext для локализации / перевода?

Открытый исходный код или частная собственность не имеет значения.

Когда я говорю "альтернатива gettext", я имею в виду библиотеку для интернационализации с своего рода локализацией.

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

3 ответа

Решение

В первую очередь я думаю gettext является одним из лучших на данный момент.

Вы можете посмотреть на Boost.Locale что может обеспечить лучший API и использовать gettextМодель словаря: http://cppcms.sourceforge.net/boost_locale/docs/ (не является официальной частью Boost, все еще бета).


Редактировать:

Если тебе не нравится gettext...

Это переводческие технологии:

  • ОАЗИС XLIFF
  • GNU gettext po / mo файлы
  • Каталоги POSIX
  • Файлы Qt ts/tm
  • Свойства Java,
  • Ресурсы Windows.

Сейчас:

  • Последние два всего дерьма... Очень сложно использовать перевод и поддерживать, не поддерживают множественное число форм.
  • Qt ts/tm - требует использования фреймворка Qt. Иметь очень похожую модель gettext, Неплохое решение, но ограничено Qt. Не очень полезен в общих программах.
  • Каталоги POSIX - никто не использует их, поддержка множественных форм. Дерьмо.
  • OASIX XLIFF - "стандартное" решение, зависит от XML, даже ICU требует компиляции для конкретных ресурсов ICU для использования. Инструменты для ограниченного перевода, я не знаю ни одной библиотеки, которая поддерживает XLIFF. Множественные формы не так просты в использовании (ICU включала некоторую поддержку только в версии 4.x).

Теперь, что у нас есть?

GNU gettext, широко используется, имеет отличные инструменты, имеет отличную поддержку множественных форм, очень популярен в сообществе переводчиков...

Так что решайте, неужели вы думаете, что gettext - это не очень хорошее решение?

Я так не думаю. Вы вообще не работали с другими решениями, поэтому постарайтесь сначала понять, как они работают.

Fluent is a new system that offers a number of adaptations that gettext lacks. Where gettext supports pluralization, fluent has a generic framework for the text variants. Where gettext uses the "untranslated" string as its translation key, fluent supports an abstract key (allowing multiple translations for something that just happens to be homonymous in the source language. Here is a more extensive comparison.

An example of fluent.ftl file, taken from firefox's preferences codebase, looks like this:

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

blocklist-window =
    .title = Block Lists
    .style = width: 55em

blocklist-description = Choose the list { -brand-short-name } uses to block online trackers. Lists provided by <a data-l10n-name="disconnect-link" title="Disconnect">Disconnect</a>.
blocklist-close-key =
    .key = w

blocklist-treehead-list =
    .label = List

blocklist-button-cancel =
    .label = Cancel
    .accesskey = C

blocklist-button-ok =
    .label = Save Changes
    .accesskey = S

# This template constructs the name of the block list in the block lists dialog.
# It combines the list name and description.
# e.g. "Standard (Recommended). This list does a pretty good job."
#
# Variables:
#   $listName {string, "Standard (Recommended)."} - List name.
#   $description {string, "This list does a pretty good job."} - Description of the list.
blocklist-item-list-template = { $listName } { $description }

blocklist-item-moz-std-listName = Level 1 block list (Recommended).
blocklist-item-moz-std-description = Allows some trackers so fewer websites break.
blocklist-item-moz-full-listName = Level 2 block list.
blocklist-item-moz-full-description = Blocks all detected trackers. Some websites or content may not load properly.

Интересные комментарии о gettext() и всех тех pro-gettext().

Я не говорю, что в большинстве случаев он не работает должным образом, но я пытался управлять одним проектом с ним и быстро почувствовал себя подавленным из-за сложности его использования. Может быть, сегодня есть несколько пользовательских интерфейсов для переводчиков, но я даже не посмотрел. Извлечение и объединение строк просто не делают это для меня.

Теперь я благодарю вас, Артем, за то, что вы рассказали о XLIFF, который является гораздо лучшим решением для моей среды, поскольку все является XML. Ой! И там есть отличные редакторы. Но если вам нравится gettext(), вы их не найдете. 8-)

Я предлагаю посмотреть на это, например:

https://sourceforge.net/projects/wordforge2/

Теперь, это может дать программисту кошмар, чтобы заставить все это работать, но мы хотим, чтобы мечта осуществилась для переводчиков (и ноль работы программиста при переводе, потому что я могу сказать вам, что с gettext() я пришлось сделать всю работу!)

Есть альтернатива от Zend, которая поддерживает файлы gettext *.po / *.mo и многие другие форматы. Многие серверы Apache кэшируют файлы перевода, потому что gettext реализован как модуль, и сервер должен быть перезапущен для обновления данных перевода.

Реализация Zend избегает этого и поддерживает множество других форматов:

http://framework.zend.com/manual/1.12/en/zend.translate.html

Другие вопросы по тегам