Альтернативы gettext?
Существуют ли какие-либо общие альтернативы локализации/перевода для gettext?
Открытый исходный код или собственность не имеет значения.
Когда я говорю об альтернативе gettext, я имею в виду библиотеку для интернационализации, со свойством локализации.
Причина, о которой я прошу, заключается в том, что (среди прочего) я нахожу, что gettext делает вещи немного громоздкими и статичными, в основном в бэкэндовом бите.
Ответы
Ответ 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.