stringtranslate.com

Componentes internacionales para Unicode

International Components for Unicode ( ICU ) es un proyecto de código abierto de bibliotecas maduras de C / C++ y Java para compatibilidad con Unicode , internacionalización de software y globalización de software. ICU es ampliamente portable a muchos sistemas operativos y entornos. Proporciona a las aplicaciones los mismos resultados en todas las plataformas y entre software C, C++ y Java. El proyecto ICU es un comité técnico del Consorcio Unicode y está patrocinado, respaldado y utilizado por IBM y muchas otras empresas. [2] ICU se ha incluido como un componente estándar con Microsoft Windows desde la versión 1703 de Windows 10. [3]

ICU proporciona los siguientes servicios: manejo de texto Unicode , propiedades completas de caracteres y conversiones de conjuntos de caracteres ; expresiones regulares Unicode ; conjuntos Unicode completos; límites de caracteres, palabras y líneas; intercalación y búsqueda sensibles al idioma; normalización , conversión de mayúsculas y minúsculas y transliteraciones de escritura ; datos de configuración regional completos y arquitectura de paquetes de recursos a través del Repositorio de datos de configuración regional común (CLDR); múltiples calendarios y zonas horarias ; y formato y análisis basados ​​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ó obsoleto en la versión 54 y se eliminó por completo en la versión 58 a favor de HarfBuzz . [4]

La ICU ofrece más facilidades de internacionalización que las bibliotecas estándar para C y C++. La futura ICU 75, prevista para abril de 2024, requerirá C++17 (en lugar de C++11 ) o C11 (en lugar de C99), según los lenguajes que se utilicen. Históricamente, la ICU ha utilizado UTF-16 y todavía lo hace solo para Java; mientras que para C/C++ se admite UTF-8 , [5] [6] incluido el manejo correcto de "UTF-8 ilegal". [7]

La versión ICU 73.2 ha mejorado los cambios significativos para la compatibilidad con GB18030 -2022, es decir, para chino (ese estándar de formato de transformación Unicode GB18030 chino actualizado es ligeramente incompatible); tiene "una tabla de conversión de caracteres modificada, que asigna algunos caracteres GB18030 a caracteres Unicode que se codificaron después de GB18030-2005" y tiene una serie de otros cambios, como la mejora de los saltos de línea de texto corto en japonés y coreano, y en "inglés, ahora se usa el nombre "Türkiye" para el país en lugar de "Turquía" (la ortografía alternativa también está disponible en los datos)". [8]

ICU 74 "se actualiza a Unicode 15.1, incluyendo nuevos caracteres, emoji, mecanismos de seguridad y API e implementaciones correspondientes. [..] ICU 74 y CLDR 44 son versiones importantes, incluyendo una nueva versión de Unicode y mejoras importantes en los datos locales". [9] De los muchos cambios, algunos son para el formato de nombres de personas o para mejorar el soporte de idiomas, por ejemplo, para el bajo alemán , y hay, por ejemplo, una nueva API de verificación de suplantación de identidad, siguiendo la (última versión) Unicode 15 .1.0 UTS #39: Mecanismo de seguridad Unicode.

Detalles de la versión anterior

ICU 72 se actualizó a Unicode 15 (y 73.2 a la última versión 15.1). "En muchos patrones de formato, los espacios ASCII se reemplazan con espacios Unicode (por ejemplo, un " espacio delgado ")." ICU (ICU4J) ahora requiere Java 8 pero "La mayor parte del código de la biblioteca ICU 72 aún debería funcionar con Java 7 / Android API nivel 21, pero ya no realizamos pruebas con Java 7". [10] ICU 71 agregó, por ejemplo, saltos de línea basados ​​en frases para japonés (los métodos anteriores no funcionaban bien para texto corto en japonés, como en títulos y encabezados) y soporte para hindi escrito en letras latinas (hi_Latn), también conocido como " Hinglish ". ICU 70 agregó, por ejemplo, soporte para propiedades emoji de cadenas y ahora se puede construir y usar con compiladores de C++20 (y "las funciones ICU operator==() y operator!=() ahora devuelven bool en lugar de UBool, como un ajuste para cambios incompatibles en C++20"), [11] y a partir de esa versión la versión mínima de Windows es Windows 7. ICU 67 maneja la eliminación de Gran Bretaña de la UE . ICU 64.2 agregó soporte para Unicode 12.1, es decir, el único símbolo nuevo para la era actual de Reiwa japonesa (pero el soporte para él también se ha retroportado a versiones anteriores de ICU hasta ICU 4.8.2). ICU 58 (con soporte para Unicode 9.0) es la última versión que admite plataformas más antiguas como Windows XP y Windows Vista . El soporte para AIX , Solaris y z/OS también puede estar limitado en versiones posteriores (es decir, la construcción depende del soporte del compilador). [12]

Origen y desarrollo

Después de que Taligent pasara a formar parte de IBM a principios de 1996, Sun Microsystems decidió que el nuevo lenguaje Java debía ofrecer un mejor soporte para la internacionalización. Como Taligent tenía experiencia con dichas tecnologías y estaban cerca geográficamente, se le 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 de JDK 1.1 . [13] Una gran parte de este código todavía existe en los paquetes y . Se agregaron más funciones de internacionalización con cada versión posterior de Java.java.textjava.util

Las clases de internacionalización de Java se trasladaron a C++ y C [14] como parte de una biblioteca conocida como ICU4C ("ICU para C"). El proyecto ICU también proporciona ICU4J ("ICU para Java"), que añade características que no están presentes en las bibliotecas estándar de Java. ICU4C e ICU4J son muy similares, aunque no idénticos; por ejemplo, ICU4C incluye una API de expresiones regulares, mientras que ICU4J no. Ambos marcos se han mejorado con el tiempo para admitir nuevas funciones y características de Unicode y Common Locale Data Repository (CLDR).

ICU se lanzó 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 International Components For Unicode. [15] 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. [16]

Formato del mensaje

Una parte de ICU es la clase MessageFormat , un sistema de formato que permite que cualquier número de argumentos controlen la forma plural ( plural, selectordinal) o una selección más general de estilo switch-case ( select) para cosas como el género gramatical . Estas declaraciones se pueden anidar. [17] ICU MessageFormat se creó agregando el sistema de plural y selección a un sistema con el mismo nombre en Java SE .

Alternativas

Una alternativa para usar ICU con C++ , o para usarlo directamente, es usar Boost.Locale, que es un contenedor de C++ para ICU (aunque también permite otros backends [18] ). La afirmación de usarlo en lugar de ICU directamente es que "es absolutamente hostil para los desarrolladores de C++. Ignora los modismos populares de C++ (STL, RTTI, excepciones, etc.), y en su lugar imita principalmente la API de Java". [19] [20] Otra afirmación, que ICU solo admite UTF-16 (y por lo tanto una razón para evitar usar ICU) ya no es cierta, ya que ICU ahora también admite UTF-8 para C y C++. [5]

Véase también

Referencias

  1. ^ "Publicado ICU 75.1 · unicode-org/icu" . Consultado el 21 de abril de 2024 .
  2. ^ "ICU - Componentes internacionales para Unicode". site.icu-project.org . Archivado desde el original el 2021-08-27 . Consultado el 2011-11-14 .
  3. ^ Chen, Raymond (27 de mayo de 2021). "¿Cómo puedo convertir entre zonas horarias de IANA y zonas horarias basadas en el registro de Windows?". The Old New Thing . Microsoft .
  4. ^ "Guía del usuario de Layout Engine - UCI". userguide.icu-project.org .
  5. ^ ab "UTF-8". Documentación de la UCI . Consultado el 24 de mayo de 2022 .
  6. ^ "UTF-8 - Guía del usuario de la UCI". userguide.icu-project.org . Consultado el 3 de abril de 2018 .
  7. ^ "#13311 (cambiar el manejo ilegal de UTF-8 a la "mejor práctica" de Unicode)". bugs.icu-project.org . Consultado el 2018-04-03 .
  8. ^ "UCI - Componentes internacionales para Unicode - UCI 73". icu.unicode.org . Consultado el 24 de septiembre de 2023 .
  9. ^ "UCI - Componentes internacionales para Unicode - UCI 74". icu.unicode.org . Consultado el 29 de noviembre de 2023 .
  10. ^ "UCI - Componentes internacionales para Unicode - UCI 72". icu.unicode.org . Consultado el 24 de enero de 2023 .
  11. ^ "UCI - Componentes internacionales para Unicode - UCI 70". icu.unicode.org . Consultado el 24 de enero de 2023 .
  12. ^ "Descargar ICU 64 - ICU - Componentes internacionales para Unicode". site.icu-project.org . Consultado el 20 de octubre de 2019 .
  13. ^ Laura Werner (1999). "Preparando Java para el mundo: una breve historia de los esfuerzos de internacionalización de IBM y Sun". Archivado desde el original el 17 de noviembre de 2021. Consultado el 23 de mayo de 2007 .
  14. ^ "Guía del usuario de la UCI". userguide.icu-project.org .
  15. ^ "Comité de Gestión de Proyectos de la UCI". Archivado desde el original el 28 de agosto de 2021. Consultado el 17 de agosto de 2012 .
  16. ^ "La UCI se une al Consorcio Unicode". Unicode, Inc. 16 de mayo de 2016. Consultado el 1 de agosto de 2016 .
  17. ^ "Formato de mensajes". Guía del usuario de la UCI .
  18. ^ "Boost.Locale: uso de backends de localización". www.boost.org . Consultado el 24 de mayo de 2022 .
  19. ^ "Boost.Locale: Fundamento del diseño". www.boost.org . Consultado el 24 de mayo de 2022 .
  20. ^ "ICU vs Boost Locale en C++". Desbordamiento de pila . Consultado el 24 de mayo de 2022 .

Enlaces externos