Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

Прежде всего, я думаю, что 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 - это не очень хорошее решение?

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

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

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

Ответ 4

Fluent - это новая система, которая предлагает ряд адаптаций, которые отсутствуют в gettext. Там, где gettext поддерживает плюрализм, у fluent есть общая структура для текстовых вариантов. Там, где gettext использует "непереведенную" строку в качестве ключа перевода, fluent поддерживает абстрактный ключ (что позволяет многократные переводы для чего-то, что просто является одноименным в исходном языке. Вот более подробное сравнение.

Пример свободного файла .ftl, взятого из кодовой базы настроек Firefox, выглядит следующим образом:

# 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.