# Internationalisation (informatique)

En développement de logiciel, l’internationalisation (abrégé en i18n, où 18 représente le nombre de caractères entre le i et le n dans le mot) est la mise en place d’un système permettant la régionalisation du logiciel, c’est-à-dire son adaptation à des langues et des cultures différentes. L’objectif de l’internationalisation est donc de produire un programme unique qui puisse inclure plusieurs langues pour l’interface.

## Présentation

L'internationalisation est un prérequis de la régionalisation. Elle consiste à séparer, dans le code source d'un programme, ce qui est indépendant de la langue et de la culture de ce qui en est dépendant (généralement, dans des fichiers appelés tables de traduction).
Mais l'internationalisation ne nécessite pas qu'un travail sur les messages textuels. Il faut aussi parfois permettre de changer les codes couleur (dont la signification peut varier selon les cultures), les graphiques (dont les noms des icônes, certaines icônes pouvant contenir du texte écrit à traduire), le format des dates ou des nombres, la direction de l'écriture (de droite à gauche en arabe, par exemple), la taille des éléments graphiques (un texte en allemand est souvent plus long que son équivalent en anglais, ce qui peut modifier une mise en page, etc.), jusqu'à la façon d'accorder des mots au pluriel après un nombre (on écrira « 0 tâche fille » en français, mais « 0 children processes » en anglais).
L'internationalisation est donc l'ensemble des mécanismes techniques qui aboutissent à un résultat linguistiquement acceptable dans la langue que l'utilisateur final a choisie. Cependant, elle peut ne pas suffire pour traiter « n'importe quelle langue », du fait que le programme utilise un jeu de caractères limité, ou certaines polices de caractères spécifiques, ou encore parce que l'utilisateur ne dispose pas des bons claviers pour la saisie de données dans telle ou telle autre langue.
La migration ou la prise en compte d'un jeu de caractères plus étendu peut être nécessaire pour mener à bien une internationalisation universelle. Des jeux étendus sont proposés, d'une part dans la famille ISO-2022, et d'autre part sous forme d'unicode, avec en particulier UTF-8/UTF-16. Cette étape, plus ou moins indépendante de l'internationalisation (elle peut se faire en même temps, avant ou après) est appelée « multilingualisation ».
Les termes sont souvent écrits dans leur forme abrégée i18n, une dénomination inventée par la Digital Equipment Corporation dans les années 1970 et 1980 et l10n pour le mot anglais localization (régionalisation en français).
Certaines entreprises, comme IBM et Sun Microsystems, utilisent le terme globalization (« globalisation » en français) pour définir la combinaison entre l’internationalisation et la régionalisation.
Microsoft définit l’internationalisation comme une combinaison entre l’expression anglaise « World-Readiness » et la régionalisation. World-readiness est une tâche qui incombe au développeur, et qui permet d’utiliser un produit avec de nombreux caractères d’écriture et de nombreuses cultures (globalisation) tout en séparant les ressources internationalisables de l’interface utilisateur dans un format régionalisable (localisability, abrégée en l12y).
Ce concept est également connu sous le nom de « NLS » (National Language Support ou Native Language Support qui signifie prise en charge des langues nationales ou prise en charge des langues maternelles en français).

## Exemple

Le programme C ainsi rédigé n'est pas internationalisé :
Pour traduire le message, il faudrait éditer le code source et modifier la chaîne de caractères.
Par contre, la version suivante du même programme est internationalisée grâce à la bibliothèque gettext. Le programme va chercher dans ses fichiers de régionalisation (localization) une chaîne de caractères correspondant à « Fatal error: %s », et ce, pour la langue de l'utilisateur courant :
Les messages régionalisés de gettext sont associés à la version par défaut du message qui sert de clé. D'autres environnements de programmation peuvent utiliser, par exemple, un numéro (ce que faisait Mac OS), ou bien se baser sur un paramètre de configuration dynamique (par exemple, la méthode I18n.translate d'une application Ruby On Rails).

## Aperçu

Les efforts d’internationalisation et de régionalisation doivent prendre en considération les caractéristiques suivantes :
* La langue
** Le texte codé par ordinateur
*** Les alphabets/caractères d’écriture ; la plupart des systèmes récents utilisent le standard informatique Unicode afin de résoudre les problèmes de codage des caractères.
*** Différents systèmes d’adjectifs numéraux
*** Le système d’écriture de la gauche vers la droite dans les langues européennes (par exemple, l’allemand), de la droite vers la gauche en hébreu et en arabe, et en vertical dans certaines langues asiatiques.
*** La mise en page de textes complexes
*** Les différents traitements de texte, tels que le concept dit de « capitalisation » qui existe dans certains caractères d’écriture mais pas dans tous, les différentes règles de tri des textes, etc.
*** Les formes plurielles dans l’affichage du texte, qui varient selon la langue
** La saisie du texte
*** L’activation des raccourcis clavier sur tout type de clavier
** Les représentations graphiques du texte (des documents imprimés, des images contenant du texte)
** le son de la voix (Son)
** Le sous-titrage de films et de vidéos
* La culture
** Les images et les couleurs : les questions de l'intelligibilité et de la pertinence culturelle
** Les noms et les titres
** Des numéros assignés par les gouvernements (tels que le Social Security number aux États-Unis, le National Insurance number au Royaume-Uni, l’Isikukood en Estonie, et le Resident registration number en Corée du Sud) ainsi que les passeports
** Les numéros de téléphone, les adresses ainsi que les codes postaux internationaux
** La devise (les symboles, les positions des marqueurs de change)
** Les unités de poids et de mesure
** Les formats des papiers (A4, Letter...)
* Les conventions écrites
** Le format de date et d’heure, y compris l’utilisation des différents calendriers
** Les fuseaux horaires (UTC dans les milieux internationalisés)
** La mise en forme des nombres (séparateur décimal, ordre de tri des chiffres)
** Les différences de symboles (par exemple, les guillemets (“...”), en anglais, utilisées pour les citations, ou les chevrons (« ... ») en français).
* Tout autre aspect du produit ou du service étant soumis à la conformité réglementaire
** Les incidents de frontière indiqués sur des cartes (par exemple, le fait de ne pas réussir à montrer où est le Cachemire quand on est Indien est considéré comme un crime en Inde)
** La censure de l’Internet
La distinction entre internationalisation et régionalisation est subtile mais importante. L’internationalisation est l’adaptation de produits utilisables de manière « potentielle » presque partout, alors que la régionalisation constitue l’ajout de valeurs spécifiques destinées à des paramètres régionaux donnés. L’internationalisation est effectuée une fois sur chaque produit, alors que la régionalisation est effectuée pour chacune des adaptations de ce produit à des paramètres régionaux. Les processus se complètent et doivent être combinés afin d’atteindre l’objectif d’un système fonctionnant à l’échelle internationale. Les domaines propres à la régionalisation incluent les caractéristiques suivantes :
* La traduction
* La variété de langues à l’échelle nationale (voir localisation linguistique)
* Un soutien particulier pour certaines langues comme les langues de l’Asie de l’Est
* Les coutumes locales
* Le contenu local
* Les symboles
* Ordre de tri (classement alphabétique)
* L’esthétique
* La culture et l’environnement social
* Les différentes lois et réglementations (par exemple, les lois fiscales, les lois du travail, etc.)

## Procédure d’affaires pour l’internationalisation de logiciels

Afin d’internationaliser un produit, il convient de bien vérifier, pour chacun des marchés dans lesquels s’inscrit le produit, les détails tels que :
* la longueur de champ pour les adresses,
* le format unique pour l’adresse,
* la possibilité de rendre optionnels, pour les pays qui n’en disposent pas :
** le champ pour le code postal,
** le champ pour l’État,
* l’introduction de nouveaux flux d’enregistrement qui adhérent aux lois locales
Ce ne sont là que des exemples faisant de l’internationalisation un projet complexe$^,$.
Une approche plus large prend en compte les facteurs culturels concernant, par exemple, l’adaptation de la logique du processus d’affaires ou l’inclusion des aspects individuels et culturels (comportementaux).

## Pratique de codage

La pratique actuellement en vigueur est destinée aux applications permettant de placer du texte dans des chaînes de ressource, chargées durant l’exécution du programme et selon les besoins. Ces chaînes, stockées dans des fichiers de ressource, sont relativement faciles à convertir. Les programmes sont souvent créés afin de référencer des bibliothèques de ressource qui dépendent des données des paramètres régionaux ayant été sélectionnés. Ceci est possible grâce à des bibliothèques logicielles telles que gettext.
Ainsi, pour obtenir une application qui puisse prendre en charge plusieurs langues, il conviendrait de concevoir l’application qui permettrait de sélectionner le fichier de ressource de la langue correspondante au moment de l’exécution. Les fichiers de ressource sont convertis dans les langues requises. Cette méthode a tendance à devenir spécifique à l’application voire spécifique au fournisseur. Le code nécessaire pour gérer la vérification d’une saisie et de nombreux autres types de données sensibles aux paramètres régionaux doit également supporter les différentes exigences régionales. Les systèmes modernes de développement et d’exploitation incluent des bibliothèques sophistiquées qui offrent un soutien international à ce genre de données.

## Difficultés

Bien que la traduction de textes existant dans d’autres langues puisse sembler facile, il est plus difficile de conserver les versions parallèles des textes tout au long du cycle de vie du produit. Par exemple, si un message affiché à l’utilisateur est modifié, toutes les versions traduites devront également être modifiées. Il en résulte par la suite un cycle de développement un peu plus long.
De nombreux problèmes de régionalisation (comme le sens de l’écriture, le tri du texte, etc.) nécessitent une modification plus profonde que l'unique traduction du texte. Par exemple, OpenOffice.org y parvient grâce aux commutateurs de compilation.
Dans une certaine mesure (par exemple pour l’assurance qualité), l’équipe de développement a besoin de quelqu’un qui comprenne les langues et les cultures étrangères et qui dispose d’une formation technique. Au sein des grands pays où il n’existe qu’une langue ou culture dominante, il est probablement difficile de trouver une telle personne.
L’un des exemples de pièges connus à propos de la régionalisation est celui de la tentative qu’a faite Microsoft pour garder quelques raccourcis clavier significatifs pour des langues locales. Dans certains programmes de la version italophone de Microsoft Office, la touche « CTRL + U » (soulignement) a fini par être remplacée par « CTRL + S » (« sottolineato »), plutôt que par la fonction (quasi) universelle « Enregistrer ».

## Coûts et bénéfices

Dans un contexte commercial, l’avantage de l’internationalisation est l’accès à de nouveaux marchés. Cependant, cela implique des coûts considérables, qui vont bien au-delà de la simple ingénierie. Tout d’abord, le programme doit généralement être remanié pour pouvoir être commercialisé à l’échelle mondiale.
Ensuite, le fait de fournir une traduction dans une langue donnée n’est pas considéré comme un projet trivial. Cela implique l’intervention de rédacteurs techniques spécialisés qui construisent une syntaxe adaptée à la culture, notamment dans le cas de concepts complexes, associée à des ressources d’ingénierie permettant de développer et de tester les éléments de régionalisation. En outre, les opérations commerciales doivent être adaptées afin de gérer la production, le stockage et la distribution des nombreux et différents produits régionalisés, souvent vendus à des prix différents selon les devises, dans différents environnements réglementaires ainsi que soumis à différents régimes fiscaux.
Enfin, les ventes, le soutien marketing et technique doivent également faciliter leurs opérations dans les nouvelles langues afin d’aider les consommateurs à choisir leurs produits régionalisés. Mais concernant les populations parlant une langue très peu répandue, il ne faut jamais s’attendre à ce que les produits régionalisés soient rentables. Même si les populations parlant une langue répandue exigent qu’un produit donné soit traduit, et que le produit est déjà internationalisé, le développeur ou éditeur de logiciel concerné manquera sûrement d’espace ou de savoir-faire pour gérer les fonctions complémentaires liées à l’exploitation dans plusieurs langues. Par exemple, Microsoft Windows 7 dispose d’un pack disponible en 96 langues.
Une alternative, souvent utilisée par les communautés de logiciels libres, est la régionalisation participative par des équipes de bénévoles. Le projet K Desktop Environment 3, par exemple, a été traduit en plus de 100 langues, et le projet KDE Software Compilation 4 est disponible en 68 langues. Toutefois, la régionalisation participative exige que le produit sous-jacent soit d’abord conçu pour financer de telles activités, ce qui représente un effort important.