International Components for Unicode ( ICU ) es un proyecto de código abierto de bibliotecas maduras de C / C ++ y Java para soporte Unicode , internacionalización de software y globalización de software. ICU es ampliamente portátil para muchos sistemas operativos y entornos. Proporciona a las aplicaciones los mismos resultados en todas las plataformas y entre el software C, C ++ y Java. El proyecto ICU es un comité técnico del Consorcio Unicode y patrocinado, respaldado y utilizado por IBM y muchas otras empresas. [1]
Desarrollador (es) | Consorcio Unicode |
---|---|
Versión inicial | 1999 |
Lanzamiento estable | 68,2 / 17 de diciembre de 2020 |
Repositorio | |
Escrito en | C / C ++ (C ++ 11) y Java |
Sistema operativo | Multiplataforma |
Tipo | bibliotecas para Unicode e internacionalización |
Licencia | Licencia Unicode |
Sitio web | www |
ICU proporciona los siguientes servicios: manejo de texto Unicode , propiedades completas de caracteres y conversiones de juegos de caracteres ; Expresiones regulares Unicode ; conjuntos Unicode completos; límites de caracteres, palabras y líneas; recopilación y búsqueda sensibles al idioma ; normalización , conversión de mayúsculas y minúsculas y transliteraciones de guiones ; integrales de localización de datos y la arquitectura paquete de recursos a través de la configuración regional de datos de repositorio común (CLDR); multi- calendario y zonas horarias ; y formato y análisis basado en reglas de fechas, horas, números, monedas y mensajes. ICU proporcionó un servicio de diseño de texto complejo para árabe, hebreo, índico y tailandés históricamente, pero eso quedó en desuso en la versión 54 y se eliminó por completo en la versión 58 a favor de HarfBuzz . [2]
ICU proporciona instalaciones de internacionalización más amplias que las bibliotecas estándar para C y C ++. ICU 67 admite Unicode 13.0 y gestiona la eliminación de Gran Bretaña de las regiones de la UE . ICU 64 es compatible con Unicode 12.0 , mientras que ICU 64.2 agregó soporte para Unicode 12.1, es decir, el nuevo símbolo único para la era japonesa actual de Reiwa (pero el soporte también se ha actualizado a versiones anteriores de ICU hasta ICU 4.8.2). ICU 58 (con soporte Unicode 9.0) es la última versión compatible con plataformas más antiguas como Windows XP , Windows Vista . Soporte para AIX , Solaris y z / OS también puede estar limitada en versiones posteriores (es decir, la construcción depende de compilador de soporte). [3] ICU se ha incluido como un componente estándar con Microsoft Windows desde Windows 10 versión 1703. [4]
ICU ha utilizado históricamente UTF-16 y todavía lo hace solo para Java; mientras que para C / C ++ se admite UTF-8 , [5] incluido el manejo correcto de "UTF-8 ilegal". [6]
ICU 68 no se puede construir con un compilador C ++ 20 [7] pero debería ser posible con 69.1.
Origen y desarrollo
Después de que Taligent se convirtió en parte de IBM a principios de 1996, Sun Microsystems decidió que el nuevo lenguaje Java debería tener un mejor soporte para la internacionalización. Dado que Taligent tenía experiencia con dichas tecnologías y estaba cerca geográficamente, se pidió a su grupo Text and International que contribuyera con las clases internacionales al Java Development Kit como parte de las API de internacionalización JDK 1.1 . [8] Una gran parte de este código todavía existe en los paquetes y . Se agregaron más características de internacionalización con cada versión posterior de Java.java.text
java.util
Las clases de internacionalización de Java se trasladaron a C ++ y C [9] como parte de una biblioteca conocida como ICU4C ("ICU para C"). El proyecto ICU también proporciona ICU4J ("ICU para Java"), que agrega características que no están presentes en las bibliotecas estándar de Java. ICU4C e ICU4J son muy similares, aunque no idénticas; por ejemplo, ICU4C incluye una API de expresión regular, mientras que ICU4J no. Ambos marcos se han mejorado con el tiempo para admitir nuevas instalaciones y nuevas funciones de Unicode y Common Locale Data Repository (CLDR).
ICU fue lanzado como un proyecto de código abierto en 1999 bajo el nombre de IBM Classes for Unicode. Más tarde se le cambió el nombre a Componentes internacionales para Unicode. [10] En mayo de 2016, el proyecto ICU se unió al consorcio Unicode como comité técnico ICU-TC , y las fuentes de la biblioteca ahora se distribuyen bajo la licencia Unicode. [11]
MessageFormat
Una parte de ICU es la clase MessageFormat , un sistema de formato que permite que cualquier número de argumentos controle la forma plural ( plural
, selectordinal
) o la selección más general del estilo de cambio de mayúsculas y minúsculas ( select
) para cosas como el género gramatical . Estas declaraciones se pueden anidar. [12] Los desarrolladores de AngularJS utilizan comúnmente un puerto JavaScript de esta biblioteca en combinación con , de modo que la biblioteca simple basada en claves puede manejar entradas de localización matizadas. [13] Un ejemplo de este sistema puede verse así:ngx-translate
# Usando YAML para simplificar el ejemplo. hola : ¡Hola, {usuario}! # offset permite restar las categorías por la cantidad especificada antes de ser procesadas. Sin embargo, no afecta el sistema de coincidencia exacta. party : { user } ha invitado a {player_count, plural, offset: 1, = 0 {nadie} un {un jugador} otro {# players}} a {user_gender, select, male {his}, female {her}, other { su}} fiesta.
// Usando la forma simple de https://messageformat.github.io/messageformat/page-build import msg from './example.yaml' function say ( messageKey , options ) { console . log ( msg [ messageKey ] ( opciones )) }say ( 'hola' , { usuario : 'Jimmy' }) // ¡Hola, Jimmy! say ( 'party' , { user : 'Whales' , player_count : 5000 , user_gender : 'male' }) // Whales ha invitado a 4999 jugadores a su juego. say ( 'party' , { user : 'Dolphin' , player_count : 20 , user_gender : 'other' }) // Dolphin ha invitado a 19 jugadores a su juego. say ( 'party' , { user : 'Elephant' , player_count : 1 , user_gender : 'female' }) // Elephant no ha invitado a nadie a su juego.
ICU MessageFormat se creó agregando el plural y el sistema de selección a un sistema con el mismo nombre en Java SE .
Ver también
- Tipografía avanzada de Apple
- Servicios de tipo Apple para imágenes Unicode
- GNU GetText
- Grafito (SIL)
- NetRexx (licencia ICU)
- De tipo abierto
- Pango
- Uconv
- Darse de baja
Referencias
- ^ "UCI - componentes internacionales para Unicode" . site.icu-project.org .
- ^ "Layout Engine - Guía del usuario de la UCI" . userguide.icu-project.org .
- ^ "Descargar ICU 64 - ICU - Componentes internacionales para Unicode" . site.icu-project.org . Consultado el 20 de octubre de 2019 .
- ^ Chen, Raymond. "¿Cómo puedo convertir entre zonas horarias de IANA y zonas horarias basadas en el registro de Windows?" . Lo viejo y nuevo . Microsoft .
- ^ "UTF-8 - Guía del usuario de la UCI" . userguide.icu-project.org . Consultado el 3 de abril de 2018 .
- ^ "# 13311 (cambiar el manejo ilegal de UTF-8 a Unicode" mejores prácticas ")" . bugs.icu-project.org . Consultado el 3 de abril de 2018 .
- ^ "ICU 68 - ICU - Componentes internacionales para Unicode" . site.icu-project.org . Consultado el 10 de febrero de 2021 .
- ^ Laura Werner (1999). "Preparando Java para el mundo: una breve historia de los esfuerzos de internacionalización de IBM y Sun" .
- ^ "Guía del usuario de la UCI" . userguide.icu-project.org .
- ^ "Comité de Gestión de Proyectos de UCI" .
- ^ "UCI se une al Consorcio Unicode" . Unicode, Inc. 16 de mayo de 2016 . Consultado el 1 de agosto de 2016 .
- ^ "Formatear mensajes" . Guía del usuario de la UCI .
- ^ "messageformat (js)" . Páginas de GitHub .
enlaces externos
- Página web oficial
- Componentes internacionales para servicios de transliteración Unicode
- Editor de UCI en línea