International Components for Unicode
Les International Components for Unicode (ICU) est un projet open source qui fournit des bibliothèques de traitement utilisables dans les langages informatiques C/C++ et Java, afin de prendre en charge les textes utilisant le répertoire universel de caractères codés (UCS, normalisé dans la norme ISO/CEI 10646 et le standard informatique Unicode), l’internationalisation et la localisation des logiciels. ICU est largement portable vers de nombreux systèmes d’exploitations et environnements. Il donne aux applications les mêmes comportements et résultats sur toutes les plateformes et entre les langages de programmation fournissant une interface avec les langages C, C++ ou Java.
Le Projet ICU et licence de distribution et d’utilisation
Le Projet ICU est un projet libre, collaboratif et indépendant des organisations commerciales ; il est destiné à écrire, faire évoluer et distribuer ces bibliothèques dont les codes sources sont disponibles en même temps que des versions précompilées directement utilisables dans d’autres logiciels ; il est activement supporté et utilisé par IBM qui en est l’actuel principal promotteur, et par d’autres entreprises, organisations et individus créant du logiciel.
Ces bibliothèques sont fournies avec une licence ouverte et libre (dérivée de la licence X) et compatible avec les licences libres (de type GPL selon les critères du copyleft de la Free Software Foundation) et les licences ouvertes (selon les critères de l’Open Source Initiative), permettant la réutilisation, la modification, et la redistribution ; cette licence est gratuite mais sans garantie offerte, à la seule condition de fournir une copie de cette licence et de mentionner l’origine (copyright) du logiciel original (dont le Projet ICU est détenteur des droits d’auteur sur l’œuvre collective).
Services fournis
Certains des services fournis par les bibliothèques ICU sont les suivants :
- Texte : gestion de texte Unicode, propriété des caractères et les conversions de jeu de caractères.
- Transcodage : conversion du texte entre de nombreux jeux de caractères codés sur un octet ou plusieurs octets d’une part (issus de normes nationales ou internationales ou de standards de l’industrie informatique), et d’autre part le répertoire universel de caractères codés (UCS) défini dans la norme internationale ISO/CEI 10646 et le standard informatique Unicode.
- Transformations : normalisation, majuscules/minuscules, transcriptions et translittérations selon la langue.
- Comparaison : algorithmes de collation et de recherche sensibles à la casse et conformes aux règles linguistiques.
- Analyse lexicale du texte : Unicode expressions rationnelles ; jeu Unicode complet ; délimitation des caractères, graphèmes, mots, phrases et lignes.
- Formatage et analyse sémantique du texte : dates, heures, nombres, monnaies et messages basés sur des règles.
- Temps : calcul et transformations selon de nombreux calendriers et fuseaux horaires.
- Assistance pour l’affichage et la saisie du texte : support de la disposition du texte et des graphèmes dans les écritures complexes (arabe, hébreu, dévanagari, thaï, etc.).
- Régionalisation : architecture complète pour les données de localisation et paquets de ressources, support de LDML et intégration des données communes issues du projet CLDR dans ce format.
Origine et développement
Originellement, ICU a été intégralement écrit en Java. Mais certains travaux initiaux d’ICU viennent du framework pour C++ écrit par une l’entreprise Taligent, qui fut rachetée par IBM.
Certaines des fonctionnalités liées à la gestion de texte, au formatage des dates, etc. ont été réécrites en Java pour devenir les APIs d’internationalisation pour JDK 1.1, qui ont été proposées à Sun Microsystems par l’équipe ICU pour l’intégration à la plateforme de base Java. Une grande portion du code initial en Java existe toujours dans les paquets Modèle:Javadoc:SE et Modèle:Javadoc:SE qui intègrent une version limitée de l’actuelle bibliothèque ICU pour Java.
Ces fonctionnalités furent ensuite portées et étendues en C et en C++ pour surmonter les défauts d’internationalisation de ces langages et de nombreux autres disposant de bibliothèques très incomplètes pour le traitement de l’internationalisation des logiciel et le support correct et complet des algorithmes de traitement du texte basés sur les spécifications du standard Unicode et ses annexes, ainsi que sur les travaux issus d’autres normes internationales dans ces domaines.
D'ordinaire un système d'exploitation fournit ces fonctionnalités, mais le support d’une telle API d’internationalisation n’est pas assuré de façon homogène par tous les systèmes d’exploitation, ni d’une façon suffisante pour prendre en charge un nombre aussi important d’écritures, langues et conventions régionales.
ICU a été livré en 1999 en tant que projet de développement en source ouvert, sous le nom IBM Classes for Unicode. Suite au transfert des droits de propriété intellectuelle d’IBM à une organisation indépendante et à but non lucratif (où d’autres acteurs peuvent participer et prendre part au processus de décision ou d’évaluation des nouvelles fonctionnalités), il fut finalement renommé International Components For Unicode (ICU), et sa licence d’utilisation et de distribution a été libéralisée.
La version Java existe aujourd’hui sous le nom ICU4J, et la version C/C++ existe aujourd'hui sous le nom ICU4C. Les deux bibliothèques disposent de fonctionnalités pratiquement identiques et évoluent selon la même architecture générale en fonction des besoins propres à chaque plateforme (comme la plateforme de base normalisée pour les langages C et C++ ne dispose pas de fonctionnalités suffisantes et est la plus hétérogène, ICU4C les complète pour les amener au même niveau que celles disponibles en Java, qui en a déjà intégré une partie significative et que la version ICU4J n’a pas besoin de remplacer, et les autres différences mineures sont généralement gommées par la mise à niveau de l’un ou l’autre projet lorsque leur développement spécifique est nécessaire).
Le Projet ICU et ses deux sous-projets continuent à être développés en parallèle pour le support plus avancé d’Unicode, et de façon plus générale, celui de l’internationalisation (i18n) des logiciels selon l’état de l’art en la matière, et selon l’évolution des normes dont le projet ICU est même devenu un modèle de référence presque incontournable (utilisé aussi dans le développement et le test des évolutions des diverses normes et travaux collaboratifs qu’ICU supporte).
Exemple
Exemple de code C++ utilisant la bibliothèque ICU, pour le formatage de nombres décimaux sous forme ici de noms correspondant à une suite d’intervalles de valeurs.
#include <unicode/unistr.h>
#include <unicode/ustream.h>
#include <unicode/choicfmt.h>
int main(int argc, char *argv[]) {
// Bornes inférieures des intervalles de valeurs.
double limits[] = {1, 2, 3, 4, 5, 6, 7};
// Noms donnés à chaque intervalle.
UnicodeString weekdayNames[] = {
"lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"};
// Crée un format correspondant à la liste de choix bornée par les limites.
ChoiceFormat fmt(limits, weekdayNames, 7);
// Déclare une classe destinée à stocker des chaînes de caractères Unicode.
UnicodeString str;
for (double x = 1.0; x <= 8.0; x += 1.0) {
// Formate selon la liste de choix le nombre x dans la chaîne str.
fmt.format(x, str);
// Affiche le nombre ainsi que la chaîne formatée.
cout << x << " -> " << str << endl;
}
cout << endl;
return 0;
}
Liens externes
- (en) ICU website