Существует много учетных записей перехода от CL до Clojure ( блог , другой блог , Поток на HN).
самая большая проблема много Общих Lispers имеет с Clojure, когда они сначала проверяют его, его отсутствие Оптимизация последнего вызова , который не возможен на JVM.
Мы используем пакеты ресурсов 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 довольно прост, так как его интерфейс предоставляет несколько методов, позволяющих управлять им на уровне кодовой точки. Для других кодировок возможно преобразование кода .
Вы также можете преобразовать пакеты ресурсов ICU в формат XLIFF на основе XML и обратно для перевода.
Переключение языка в браузере Google Chrome сделано очень аккуратно. Можно переключаться между языками во время работы программы. Я не знаю, какую систему они используют, но, возможно, стоит изучить ее, поскольку это браузер с открытым исходным кодом.
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
читателя файлов.
mo
читателя файлов. Но даже это не настоящая проблема . Однажды я реализовал поточно-безопасную версию gettext для своего проекта. См. http://art-blog.no-ip.info/cppcms/blog/post/16 , на основе mo
читателя файлов. Нельзя использовать язык, если система не поддерживает его.
Это не имеет ничего общего с GNU gettext - потому что он обрабатывает только часть перевода. Но это правда, что если система не может отображать какие-либо китайские иероглифы, тогда у вас будут проблемы с Китаем.
Использует среду для определения языка
Это хороший выбор, но вы всегда можете установить язык самостоятельно , подавляя окружающую среду. Таким образом, вы можете использовать любой язык по вашему выбору.
Невозможно установить язык по умолчанию
Это неверно - язык по умолчанию всегда является встроенным языком, и если вы хотите использовать другой язык , просто переключитесь на него. Это просто не может быть проще, чем одна строка кода.
Кодировка возвращаемых значений зависит от UTF-8 и текущей локальной кодировки.
Если вы ' Если вы можете выбрать инструмент интернационализации, то вы также можете выбрать, какую кодировку символов вы хотите использовать для своих текстов. Некоторые проекты используют utf-8 для всех языков (я предпочитаю), некоторые используют кодировку локали.
Кто-нибудь знает библиотеки перевода с открытым исходным кодом, которые предоставляют более полезный интерфейс?
Нет, извините, я не могу увидеть любую проблему с GNU gettext: -)