ICU против Boost Locale в С++
Я рассматриваю использование ICU или Boost Locale.
Каковы плюсы и минусы каждого?
Я понимаю, что оба используют ICU, но ICU скрыт Boost Locale. Согласно страница Boost Locale rational: "... весь API ICU скрыт за непрозрачными указателями, и пользователи не имеют к нему доступа".
При сравнении этих библиотек учитывайте новые возможности Unicode в С++ 11.
Ответы
Ответ 1
ICU - очень хорошая библиотека, но имеет свои недостатки:
- API ужасен с точки зрения современного дизайна на С++, и он не очень хорошо работает со стандартной библиотекой С++.
- Он ориентирован на UTF-16
- Инструменты перевода текста далеко не идеальны, поэтому Boost.Locale использует модель Gettext
Смотрите: http://www.boost.org/doc/libs/1_49_0/libs/locale/doc/html/rationale.html#why_icu
Boost.Locale делает локализацию на С++, а также позволяет использовать другие back-end, кроме ICU (конечно, ICU лучше), так что во многих случаях Boost.Locale предоставляет вам лучшую альтернативу локализации, поскольку она проще, предназначена для современных С++ и, как правило, проще в использовании.
Конечно, если вам нужны очень сложные алгоритмы, которые не поддерживаются Boost.Locale
или все, что ваше приложение делает, это обработка в Юникоде, тогда ICU может быть лучше, кроме этого Boost.Locale лучше для локализации приложений на С++.
Ответ 2
Boost.Locale использует ICU в качестве базового сервера по умолчанию. Некоторые другие бэкэнды могут использоваться также Boost.Locale. Вы можете подумать, что Boost.Locale лучше взаимодействует с ICU.
Ответ 3
ICU был разработан специалистами по интернационализации, а boost был разработан программистами на С++.
Несмотря на то, что сильный и элегантный С++, форсинг сильно искажает интернационализацию.
Теперь boost - это большая коллекция библиотек, а некоторые - лучше, чем другие.
Но ICU устойчив во всем, и он используется как основа почти всем, кроме Microsoft.
Итак, если вы хотите прочной интернационализации, пойдите в ICU.
Если вам нужен ультрасовременный С++ (но i18n вроде шаткий), поднимитесь.