Замены для gettext

Существует много учетных записей перехода от CL до Clojure ( блог , другой блог , Поток на HN).

самая большая проблема много Общих Lispers имеет с Clojure, когда они сначала проверяют его, его отсутствие Оптимизация последнего вызова , который не возможен на JVM.

5
задан Douglas Leeder 14 October 2009 в 08:57
поделиться

5 ответов

Мы используем пакеты ресурсов ICU и очень им довольны. Интерфейс ICU не «современный», но он мощный, лежащие в основе принципы надежны, а упаковка ресурсов (с помощью инструмента genrb) довольно гибкая. Его возможности форматирования сообщений также хороши.

О ваших конкретных комментариях:

Невозможно использовать язык, если система не поддерживает его.

Я не понимаю этого. Это может быть связано с тем, что единственный "опыт" работы с gettext у меня - это чтение документации к нему.

Использует среду для разработки языка

Интерфейс ICU принимает в качестве входных данных Locale , так что у вас есть полный контроль. В нем также есть концепция "локали по умолчанию", если вам так удобнее.

Может ' t установить язык по умолчанию

ICU имеет тщательно продуманный резервный механизм , включающий пакет «по умолчанию»

Кодирование возвращаемых значений варьируется между UTF-8 и текущей локальной кодировкой.

String ] ResourceBundle s (также возможны другие типы данных) всегда представлены как UnicodeString , внутренне закодированные в UTF-16. UTF-32 с UnicodeString довольно прост, так как его интерфейс предоставляет несколько методов, позволяющих управлять им на уровне кодовой точки. Для других кодировок возможно преобразование кода .

Строка ResourceBundle s (также возможны другие типы данных) всегда представлены как UnicodeString , которая внутренне закодирована в UTF-16. UTF-32 с UnicodeString довольно прост, так как его интерфейс предоставляет несколько методов, позволяющих управлять им на уровне кодовой точки. Для других кодировок возможно преобразование кода .

String ResourceBundle s (также возможны другие типы данных) всегда представлены как UnicodeString , внутренняя кодировка которой - UTF-16. UTF-32 с UnicodeString довольно прост, так как его интерфейс предоставляет несколько методов, позволяющих управлять им на уровне кодовой точки. Для других кодировок возможно преобразование кода .

5
ответ дан 14 December 2019 в 01:12
поделиться

Вы также можете преобразовать пакеты ресурсов ICU в формат XLIFF на основе XML и обратно для перевода.

1
ответ дан 14 December 2019 в 01:12
поделиться

Переключение языка в браузере Google Chrome сделано очень аккуратно. Можно переключаться между языками во время работы программы. Я не знаю, какую систему они используют, но, возможно, стоит изучить ее, поскольку это браузер с открытым исходным кодом.

0
ответ дан 14 December 2019 в 01:12
поделиться

1. Невозможно использовать язык, если он не поддерживается системой.

Неверно. Вы можете указать язык вручную. Использование переменной среды LANGUAGE

int main()
{
      setlocale(LC_ALL,"");
      setenv("LANGUAGE","foo");
}

Это работает, даже если языковой стандарт не существует (вы когда-нибудь видели язык foo?)

2. Использует среду для разработки языка

В чем проблема? Это дает пользователю больше контроля.

3. Не удается установить язык по умолчанию

Неверно, см. Выше.

4. Кодировка возвращаемых значений различается между UTF-8 и текущей локальной кодировкой.

Неправильно, см. bind_textdomain_codeset (домен, кодовая страница);

Моя настоятельная рекомендация - не используйте gettext. Это один из самых поддерживаемых и лучших инструментов. Переводчики будут благодарны за использование нормального и полезного инструмента.

Есть другой важный момент: отличная поддержка форм множественного числа, которая имеет довольно плохую поддержку в инструментах, не основанных на gettext.


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

Это может быть ограничение только для многопоточных сервисов.

РЕДАКТИРОВАТЬ: Но даже это не реальная проблема . Однажды я реализовал поточно-безопасную версию gettext для своего проекта. См. http://art-blog.no-ip.info/cppcms/blog/post/16 , на основе mo читателя файлов.

Но даже это не настоящая проблема . Однажды я реализовал поточно-безопасную версию gettext для своего проекта. См. http://art-blog.no-ip.info/cppcms/blog/post/16 , на основе mo читателя файлов.

Но даже это не настоящая проблема . Однажды я реализовал поточно-безопасную версию gettext для своего проекта. См. http://art-blog.no-ip.info/cppcms/blog/post/16 , на основе mo читателя файлов.

3
ответ дан 14 December 2019 в 01:12
поделиться

Нельзя использовать язык, если система не поддерживает его.

Это не имеет ничего общего с GNU gettext - потому что он обрабатывает только часть перевода. Но это правда, что если система не может отображать какие-либо китайские иероглифы, тогда у вас будут проблемы с Китаем.

Использует среду для определения языка

Это хороший выбор, но вы всегда можете установить язык самостоятельно , подавляя окружающую среду. Таким образом, вы можете использовать любой язык по вашему выбору.

Невозможно установить язык по умолчанию

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

Кодировка возвращаемых значений зависит от UTF-8 и текущей локальной кодировки.

Если вы ' Если вы можете выбрать инструмент интернационализации, то вы также можете выбрать, какую кодировку символов вы хотите использовать для своих текстов. Некоторые проекты используют utf-8 для всех языков (я предпочитаю), некоторые используют кодировку локали.

Кто-нибудь знает библиотеки перевода с открытым исходным кодом, которые предоставляют более полезный интерфейс?

Нет, извините, я не могу увидеть любую проблему с GNU gettext: -)

0
ответ дан 14 December 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: