UCI vs Boost Locale en C++
unicode c++11 (3)
Estoy considerando usar UCI o Boost Locale.
¿Cuáles son los pros y los contras de cada uno?
Entiendo que ambos usan ICU, pero BoU Locale oculta ICU. De acuerdo con la página de fundamentos de Boost Locale : "... toda la API de ICU está oculta detrás de los punteros opacos y los usuarios no tienen acceso a ella".
Tenga en cuenta las nuevas funciones de Unicode en C ++ 11 cuando compare estas bibliotecas.
Boost.Locale usa ICU como su backend predeterminado. Algunos otros backends pueden ser utilizados por Boost.Locale también. Puede considerar que Boost.Locale es una mejor interfaz para ICU.
ICU fue diseñada por expertos en internacionalización, mientras que boost fue diseñada por programadores de C ++.
Aunque es fuerte y elegante en C ++, el impulso hace que gran parte de la internacionalización sea incorrecta. Ahora, boost es una gran colección de bibliotecas, y algunas funcionan mejor que otras. Pero la UCI es sólida en todo momento, y casi todo el mundo, excepto Microsoft, la usa como base.
Así que si quieres una internacionalización sólida, ve con la UCI. Si quieres lo último en C ++ (pero i18n es algo tembloroso), mejora.
La UCI es muy buena biblioteca pero tiene inconvenientes:
- La API es horrible en términos de diseño moderno de C ++ y no funciona bien con la biblioteca estándar de C ++
- Está orientado a UTF-16.
- Sus herramientas de traducción de mensajes distan mucho de ser perfectas, por eso Boost.Locale usa el modelo Gettext
Consulte: http://www.boost.org/doc/libs/1_49_0/libs/locale/doc/html/rationale.html#why_icu
Boost.Locale hace que la localización sea en C ++ y también permite usar otros back-ends además de ICU (por supuesto, ICU es mejor), por lo que en muchos casos Boost.Locale le ofrece una mejor alternativa de localización ya que es más simple, diseñada para C ++ moderno y en general más fácil de usar.
Por supuesto, si necesita algoritmos muy sofisticados que no son compatibles con Boost.Locale o todo lo que hace su aplicación es el procesamiento de Unicode, entonces la ICU puede ser mejor, aparte de que Boost.Locale es mejor para localizar aplicaciones de C ++.