Chapitre 8. I18N et L10N

# Chapitre 8. I18N et L10N

Le multilinguisme (M17N) ou la gestion de la langue natale (« Native Language Support ») d’un logiciel applicatif est réalisé en deux étapes :

- L’internationalisation (I18N) : donne la possibilité à un logiciel de gérer plusieurs paramètres linguistiques ;

- La localisation (L10N) : permet au logiciel de prendre en charge des paramètres linguistiques particuliers.

| Astuce
Il y a 17, 18, ou 10 lettres entre « m » et « n », « i » et « n » ou « l » et « n » dans « multilingualization », « internationalization » et « localization » ce qui correspond à M17N, I18N et L10N. Consulter Internationalisation et localisation pour plus de détails.

## 8.1. Les paramètres linguistiques (« locale »)

Le comportement des programmes prenant en charge l’internationalisation est configuré par la variable d’environnement « `$LANG` » pour prendre en charge la régionalisation. La prise en charge effective des fonctionnalités dépendantes des paramètres régionaux par la bibliothèque `libc` nécessite l’installation des paquets `locales` ou `locales-all`. Le paquet `locales` doit être initialisé correctement.

Si ni le paquet `locales` ni le paquet `locales-all` n’est installé, la prise en charge des fonctionnalités régionales est impossible et le système utilise des messages en anglais américain et gère les données en tant que ASCII. Ce comportement est le même que si « `$LANG` » est défini par «`LANG=` », « `LANG=C` » ou « `LANG= POSIX` ».

Des logiciels modernes, tels que GNOME et KDE, gèrent le multilinguisme. Ils sont internationalisés en les faisant gérer les données UTF-8 et régionalisés en leur donnant les messages traduits par l’intermédiaire de l’infrastructure `gettext`(1). Les messages traduits peuvent être fournis sous forme de paquets de régionalisation séparés.

Le système actuel d'interface graphique du bureau Debian définit normalement les paramètres régionaux pour l'environnement graphique comme « `LANG=xx_YY.UTF-8` ». Ici, « `xx` » correspond aux codes de langue ISO 639 et «`YY` » correspond aux codes de pays ISO 3166. Ces valeurs sont définies par la boîte de dialogue de configuration de l'interface graphique de bureau et modifient le comportement du programme. Consulter la Section 1.5.2, « La variable « `$LANG` » ».

### 8.1.1. Justification de l’utilisation d’UTF-8 dans les paramètres linguistiques

La représentation la plus simple des données textuelles est en ASCII, ce qui est suffisant pour l'anglais et utilise moins de 127 caractères (représentables avec 7 bits).

Même le texte anglais en texte brut peut contenir des caractères non-ASCII, par exemple les guillemets apostrophes culbutés gauches et droits ne sont pas disponibles en ASCII.

    “double quoted text” is not "double quoted ASCII"
    ‘single quoted text’ is not 'single quoted ASCII'

Afin de prendre en charge un plus grand nombre de caractères, de nombreux jeux de caractères et systèmes de codage ont été utilisés pour prendre en charge beaucoup de langues (consulter le Tableau 11.2, « Liste de valeurs de codage et leur utilisation »).

Le jeu de caractères Unicode peut représenter pratiquement tous les caractères humainement connus avec une plage de points de code de 21 bits (c'est-à-dire de 0 à 10FFFF en notation hexadécimale).

Le système de codage de texte UTF-8 adapte les points de code Unicode dans un flux de données pratique de 8 bits grandement compatible avec le système de traitement de données ASCII. Cela fait de UTF-8 le choix moderne privilégié. UTF signifie Unicode Transformation Format. Lorsque les données en texte brut ASCII sont converties en données UTF-8, elles ont exactement le même contenu et la même taille que l’ASCII originel. Ainsi, vous ne perdez rien en déployant les paramètres régionaux UTF-8.

Sous les paramètres régionaux UTF-8 avec le programme d’application compatible, vous pouvez afficher et modifier toutes les données textuelles en langue étrangère tant que les fontes et les méthodes de saisie requises sont installées et activées. Par exemple avec le paramètre « `LANG=fr_FR. UTF-8` », `gedit`(1) (éditeur de texte pour le bureau GNOME) peut afficher et modifier des données de texte en caractères chinois tout en présentant des menus en français.

| Astuce

Le nouveau paramètre régional standard "`en_US.UTF-8`" et celui ancien standard « `C`"/"`POSIX` » utilisent les messages standard en anglais américain. Ils ont des différences subtiles dans l'ordre de tri, etc. Si vous souhaitez gérer non seulement les caractères ASCII, mais également tous les caractères encodés en UTF-8 élégamment tout en conservant l'ancien comportement régional « `C` », utilisez le paramètre « `C.UTF-8` » non standard avec Debian.

| Note

Certains programmes utilisent davantage de mémoire lors de l’utilisation de I18N. Cela parce qu’ils sont codés avec l’utilisation interne d’UTF-32(UCS4) pour la prise en compte d’Unicode afin d’optimiser la vitesse, ils utilisent 4 octets pour chaque caractère ASCII indépendamment de la « locale » sélectionnée. De nouveau, il n’y a rien à perdre en mettant en œuvre des paramètres linguistiques UTF-8.

### 8.1.2. Reconfiguration des paramètres linguistiques

Pour que le système puisse accéder à un paramètre régional particulier, les données de paramètres régionaux doivent être compilées à partir de la base de données de paramètres régionaux.

Le paquet `locales` n’est pas fourni avec des données de paramètres régionaux précompilées. Vous devez le configurer comme suit :

    # dpkg-reconfigure locales

Ce processus se déroule en deux étapes :

1. Sélectionnez toutes les données de paramètres régionaux requis à compiler dans une forme binaire (assurez-vous d’inclure au moins un paramètre régional UTF-8) ;

2. Définissez la valeur des paramètres linguistiques par défaut pour l’ensemble du système dans « `/etc/default/locale` » pour une utilisation par PAM (consulter la Section 4.5, « PAM et NSS »).

La valeur des paramètres régionaux par défaut pour l’ensemble du système définie dans « `/etc/default/locale` » peut être remplacée par la configuration de l’interface graphique pour les applications graphiques.

| Note
Le système d’encodage traditionnel réel peut être identifié par « `/usr/share/i18n/SUPPORTED` ». Ainsi, « `LANG=en_US` » est « `LANG=en_US. ISO-8859-1` ».

Le paquet `locales-all` est livré avec les données de paramètres régionaux pré-compilées pour toutes les données de paramètres régionaux. Comme il ne crée pas « `/etc/default/locale` », vous devrez peut-être encore installer le paquet `locales`.

| Astuce
Le paquet `locales` de certaines distributions dérivées de Debian sont livrées avec des données pré-compilées pour tous les paramètres régionaux existants. Vous devez installer les deux paquets `locales` et `locales-all` dans Debian pour imiter cet environnement de système.

### 8.1.3. Coder les noms de fichiers

Pour les échanges de données entre plateformes (consultez Section 10.1.7, « Périphériques d’enregistrement amovibles »), il vous faudra peut-être monter certains systèmes de fichiers ayant un codage particulier. Par exemple, `, la commande mount`(8) pour un système de fichiers vfat suppose que l’on utilise CP437 si on l’utilise sans option. Vous devrez fournir les options explicites à mount pour utiliser des noms de fichiers codés en UTF-8 ou en CP932.

| Note
When auto-mounting a hot-pluggable USB flash drive under modern desktop environment such as GNOME, you may provide such mount option by right clicking the icon on the desktop, click "Drive" tab, click to expand "Setting", and entering "utf8" to "Mount options:". The next time this USB flash drive is mounted, mount with UTF-8 is enabled.

| Note

Si vous êtes en train de mettre à jour le système ou de déplacer des disques depuis un ancien système qui n’était pas UTF-8, les noms de fichiers avec des caractères non ASCII peuvent être codés avec des codages historiques et obsolètes tels que ISO-8859-1 ou eucJP. Veuillez consulter l’aide des outils de conversion de texte pour les convertir en UTF-8. Consultez Section 11.1, « Outils de conversion de données textuelles ».

Samba utilise Unicode pour les clients les plus récents (Windows NT, 200x, XP) mais utilise par défaut CP850 pour des clients plus anciens (DOS et Windows 9x/Me). Cette valeur par défaut pour les anciens clients peut être modifiée en utilisant « `dos charset` » dans le fichier « `/etc/samba/smb.conf` », par exemple, avecCP932 pour le japonais.

### 8.1.4. Messages et documentation traduits

Il existe des traductions de nombreux messages et documents affichés par le système Debian, comme les messages d’erreur, la sortie standard des programmes,les menus et les pages de manuel. La GNU gettext(1) command tool chain est utilisé comme outil de base pour la plupart des activités de traduction.

Dans « Tâches » → « Localisation » `aptitude`(8) fournit une liste exhaustive de paquets binaires utiles qui ajoutent les traductions de messages aux applications et fournissent de la documentation traduite.

Vous pouvez, par exemple, obtenir les messages traduits pour une page de manuel en installant le paquet `manpages-LANG`. Pour lire la page de manuel de nom_programme en italien depuis « `/usr/share/man/it/` », lancez le programme de la manière suivante :

    LANG=it_IT.UTF-8 man programname

GNU gettext peut s’adapter à la liste de priorité des langues de traduction avec la variable d’environnement `$LANGUAGE`. Par exemple :

     $ export LANGUAGE="pt:pt_BR:es:it:fr"

Pour en savoir plus, consultez `info gettext` et lisez la section « The LANGUAGE variable ».

### 8.1.5. Effet des paramètres linguistiques

L’ordre de tri des caractères par `sort`(1) et `ls`(1) est affecté par la régionalisation. L’export `LANG=en_US.UTF-8` trie dans l’ordre du dictionnaire `A->a->B->b...->Z->z`, tandis que l’export `LANG=C.UTF-8` trie dans l’ordre binaire ASCII `A->B->...->Z->a->b...`.

Le format de date de `ls`(1) est affecté par les paramètres linguistiques (consultez Section 9.3.4, « Affichage personnalisé de la date et de l’heure »).

Le format de `date`(1) est affecté par la régionalisation. Par exemple :

     $ unset LC_ALL
     $ LANG=en_US.UTF-8 date
    Thu Dec 24 08:30:00 PM JST 2023
     $ LANG=en_GB.UTF-8 date
    Thu 24 Dec 20:30:10 JST 2023
     $ LANG=es_ES.UTF-8 date
    jue 24 dic 2023 20:30:20 JST
     $ LC_TIME=en_DK.UTF-8 date
    2023-12-24T20:30:30 JST

La ponctuation des nombres est différente selon les régions. Par exemple, dans la langue anglaise, mille virgule un est affiché comme « `1,000.1` » alors que dans la langue allemande, il est affiché comme « `1.000,1` ». Vous pouvez constater cette différence dans un tableur.

Chaque caractéristique détaillée de la variable d'environnement « `$LANG` » peut être remplacée en réglant les variables à «`$LC_*` ». Ces variables d'environnement peuvent être remplacées à nouveau par la variable réglée à « `$LC_ALL` ». Consultez la page de manuel `locale`(7) pour plus de détails. À moins que vous n'ayez de bonnes raisons de créer une configuration compliquée, n'utilisez pas ces variables et utilisez uniquement la variable « `$LANG` » définie à un des paramètres régionaux UTF-8.

## 8.2. L’entrée clavier

### 8.2.1. La saisie avec le clavier pour la console Linux et X Window

Le système Debian peut être configuré pour travailler avec de nombreuses configurations de clavier internationales en utilisant les paquets `keybord-configuration` et `console-setup`.

    # dpkg-reconfigure keyboard-configuration
    # dpkg-reconfigure console-setup

Pour la console Linux et le système X Window, cela met à jour les paramètres de configuration dans « `/etc/default/keyboard` » et « `/etc/default/console-setup` ». Cela configure également la fonte de la console Linux. De nombreux caractères non ASCII, y compris les caractères accentués utilisés par de nombreuses langues européennes, peuvent être disponibles avec les touches mortes, la touche AltGr et la touche compose.

### 8.2.2. La saisie avec le clavier pour Wayland

Pour le système de bureau GNOME avec Wayland, la Section 8.2.1, « La saisie avec le clavier pour la console Linux et X Window » ne peut pas prendre en charge les langues européennes autres que l’anglais. IBus a été conçu pour prendre en charge non seulement les langues asiatiques, mais aussi les langues européennes. Les dépendances du paquet d’environnement de bureau GNOME recommandent « `ibus` » à travers « `gnome-shell` ». Le code de « `ibus` » a été mis à jour pour intégrer les fonctionnalités des options `setxkbmap` et XKB. Vous devez configurer `ibus` à partir de « Paramètres GNOME » ou « Réglages GNOME » pour la saisie clavier multilingue.

| Note
Si ibus est actif, votre configuration de clavier X classique avec `setxkbmap` peut être remplacée par `ibus`, même dans un environnement de bureau classique basé sur X. Vous pouvez désactiver `ibus` si installé à l’aide de `im-config` pour définir la méthode de saisie à « None ». Pour en savoir plus, consultez le wiki de Debian concernant le clavier.

### 8.2.3. Prise en charge de la méthode d’entrée avec iBus

Étant donné que l'environnement de bureau GNOME recommande « `ibus` » à travers « `gnome-shell` », « `ibus` » est le bon choix comme méthode de saisie.

Les entrées multilingues dans une application sont traitées comme suit :

    Keyboard                                       Application
       |                                                 ^
       |                                                 |
       +-> Linux kernel ->  Input method (ibus)  -> Gtk, Qt, X, Wayland
                              +-- Engine--+

La liste des paquets IBus et de ses moteurs est la suivante.

Tableau 8.1. Liste des paquets IBus et de ses moteurs

paquet | popularité | taille | paramètres linguistiques pris en charge
--- | --- | --- | ---
ibus | V:217, I:264 | 1874 | infrastructure de méthode d’entrée utilisant dbus
ibus-mozc | V:2, I:3 | 980 | Japonais
ibus-anthy | V:0, I:1 | 8867 | , ,
ibus-skk | V:0, I:0 | 243 | , ,
ibus-kkc | V:0, I:0 | 211 | , ,
ibus-libpinyin | V:1, I:4 | 2769 | Chinois (pour zh_CN)
ibus-chewing | V:0, I:0 | 288 | , , (pour zh_TW)
ibus-libzhuyin | I:0 | 41009 | , , (pour zh_TW)
ibus-rime | V:0, I:0 | 78 | , , (for zh_CN/zh_TW)
ibus-cangjie | V:0, I:0 | 235 | , , (for zh_HK)
ibus-hangul | V:0, I:2 | 264 | Coréen
ibus-libthai | I:0 | 84 | Thaï
ibus-table-thai | I:0 | 59 | Thaï
ibus-unikey | V:0, I:0 | 286 | Vietnamien
ibus-keyman | V:0, I:0 | 191 | Multilingue : moteur Keyman pour plus de 2 000 langues
ibus-table | V:0, I:1 | 2271 | moteur de tables pour iBus
ibus-m17n | V:0, I:1 | 448 | Multilingue : Indien, Arabe et autres
plasma-widgets-addons | V:68, I:113 | 5132 | composants graphiques supplémentaires pour Plasma 5 contenant un indicateur de clavier

| Note

Pour le chinois, « `fcitx5` » peut être un cadriciel de méthode de saisie alternatif. Pour les aficionados d’Emacs, « `uim` » peut être une alternative. Dans les deux cas, vous devrez peut-être effectuer une configuration manuelle supplémentaire avec `im-config`. Certaines anciennes méthodes de saisie classiques telles que « `kinput2` » peuvent encore exister dans le dépôt Debian, mais ne sont pas recommandées pour un environnement moderne.

### 8.2.4. Un exemple pour le japonais

J’ai trouvé très utile la méthode de saisie du japonais lancée depuis un environnement anglais (« `en_US.UTF-8` »). Voici comment j’ai procédé avec iBus pour GNOME avec Wayland :

1. Installez le paquet d’outil de saisie du japonais `ibus-mozc` (ou `ibus-anthy`) avec ses paquets recommandés tels que`im-config` ;

2. Sélectionnez « Settings » → « Keyboard » → « Input Sources » → clic « `+` » dans « Input Sources » → « Japanese » → « Japanese mozc (anthy) » et cliquez « Add » si ce n’est déjà activé ;

3. Vous pouvez choisir autant de « Input Sources » que vous le souhaitez ;

4. Reconnectez-vous au compte utilisateur.

5. Configurez chaque « Input Source » avec un clic droit sur l’icône de la barre d’outils de l’interface graphique ;

6. Choisissez parmi les sources d’entrée installées avec SUPER+ESPACE. (en général, SUPER désigne la touche Windows)

| Astuce
Si vous souhaitez avoir accès à l’environnement de clavier alphabétique uniquement avec le clavier japonais physique sur lequel shift-`2` a `"` (guillemets doubles) gravé, vous sélectionnez « Japonais » dans la procédure ci-dessus. Vous pouvez entrer japonais en utilisant « Japanese mozc (ou anthy) » avec le clavier physique « US » sur lequel shift-`2` a `@` (marque arobase) gravé.

- L'entrée du menu graphique pour `im-config`(8) est « Input method ».

- Alternativement, exécutez « `im-config` " à partir de l’interpréteur de commande de l'utilisateur.

- `im-config`(8) se comporte différemment selon que la commande est exécutée depuis le compte de l’administrateur ou non.

- `im-config`(8) active la meilleure méthode de saisie sur le système par défaut sans intervention de l’utilisateur.

## 8.3. L’affichage de sortie

La console Linux ne peut afficher qu’un nombre restreint de caractères. Vous devez avoir un programme de terminal particulier tel que `jfbterm`(1) pour afficher les langues non européennes sur des consoles autres que la console graphique.

L'environnement graphique (Chapitre 7, Système d’interface graphique) peut afficher n'importe quel caractère en UTF-8 tant que les fontes requises soient installées et activées. L'encodage des données de la fonte originelle est pris en compte et est transparent pour l'utilisateur.

## 8.4. Largeur des caractères ambigus d’Asie orientale

Under the East Asian locale, the box drawing, Greek, and Cyrillic characters may be displayed wider than your desired width to cause the unaligned terminal output (see Unicode Standard Annex #11, 4.2 Ambiguous Characters).

Vous pouvez contourner ce problème :

- `gnome-terminal` : Préférences → Profils → Nom du profil (Sans nom) → Compatibilité → Caractères de largeur ambigüe → Fins ;

- `ncurses` : paramètre l'environnement `export NCURSES_NO_UTF8_ACS=0`.

Chapitre 7. Système d’interface graphique |  | Chapitre 9. Astuces du système