9.7. Configuration des paramètres régionaux du système

Certaines variables d'environnement sont nécessaires pour la prise en charge des langues naturelles. Les configurer a pour résultat :

Remplacez <ll> ci-dessous par les deux lettres de la langue désirée (par exemple fr) et remplacez <CC> par les deux lettres du pays approprié (par exemple FR). <charmap> doit être remplacé par la table de caractères classique pour le paramètre linguistique choisi. On peut aussi ajouter des modificateurs facultatifs comme @euro.

La liste des paramètre régionaux pris en charge par Glibc peut être obtenue en exécutant la commande suivante :

locale -a

Les jeux de caractères peuvent aussi avoir certains alias, par exemple ISO-8859-1 est aussi référencé comme iso8859-1 et iso88591. Certaines applications ne peuvent pas gérer les différents synonymes (il est par exemple requis que UTF-8 soit écrit UTF-8 et pas utf8), il est donc plus sur de choisir le nom classique pour un paramètre linguistique particulier. Pour déterminer le nom classique, lancez la commande suivante, où <nom du paramètre linguistique> est la sortie donnée par locale -a pour votre langue préférée (fr_FR.iso88591 dans notre exemple).

LC_ALL=<nom du paramètre linguistique> locale charmap

Pour le paramètre fr_FR.iso885915, la commande ci-dessus affichera :

ISO-8859-15

Cela résulte en un paramètre de régionalisation final de fr_FR.ISO-8859-15. Il est important que le paramètre trouvé en utilisant la syntaxe précédente soit testé avant d'être ajouté aux fichiers de démarrage de bash :

LC_ALL=<nom du paramètre linguistique> locale language
LC_ALL=<nom du paramètre linguistique> locale charmap
LC_ALL=<nom du paramètre linguistique> locale int_curr_symbol
LC_ALL=<nom du paramètre linguistique> locale int_prefix

Les commandes ci-dessus devraient afficher la langue, l'encodage des caractères utilisé par le paramètre, la monnaie locale ainsi que le préfixe de téléphone à composer afin d'entrer dans le pays. Si une de ces commandes précédentes échoue, cela signifie que votre paramètre n'a pas été installé dans le chapitre 8 ou n'est pas prise en charge par l'installation par défaut de Glibc.

locale: Cannot set LC_* to default locale: No such file or directory

Si cela arrive, vous devriez soit installer le paramètre linguistique désiré en utilisant la commande localedef, soit utiliser un autre paramètre. Les instructions suivantes supposent que vous n'avez pas reçu ces messages d'erreur de Glibc.

D'autres programmes ne vont aussi pas fonctionner correctement (mais ne vont pas nécessairement afficher un message d'erreur) si le nom du paramètre régional ne rencontre pas leurs attentes. Dans d'autres cas, rechercher comment d'autres distributions Linux prennent en charge votre paramètre régional peut fournir des informations utiles.

Une fois que les bonnes configurations de paramètres linguistiques ont été effectuées, créez le fichier /etc/locale.conf :

cat > /etc/locale.conf << "EOF"
LANG=<ll>_<CC>.<charmap><@modifiers>
EOF

Le programme shell /bin/bash (à partir de maintenant appelé « le shell ») utilise un ensemble de fichiers de démarrage pour créer l'environnement dans lequel il s'exécute. Chaque fichier a un but précis et peut affecter différemment les environnements de connexion et interactifs. Les fichiers dans le répertoire /etc fournissent des paramètres génériques. Si un fichier équivalent existe dans le répertoire personnel, il peut remplacer les paramètres génériques.

Un shell de connexion interactif est démarré après une connexion réussie, avec /bin/login, en lisant le fichier /etc/passwd. Un shell interactif sans connexion est démarré par la ligne de commande (p. ex. [invite]$/bin/bash). Un shell non-interactif est en général présent quand un script shell est lancé. Il n'est pas interactif car il traite un script et n'attend pas d'entrées utilisateur entre les commandes.

Les shells de connexion ne sont pas affectés par les paramètres dans /etc/locale.conf. Créez le fichier /etc/profile pour lire les paramètres linguistiques de /etc/locale.conf et les exporter, mais indiquez le paramètre C.UTF-8 à la place si le shell tourne sous la console Linux (pour éviter que les programmes n'affichent des caractères que la console Linux ne peut pas afficher) :

cat > /etc/profile << "EOF"
# Début de /etc/profile

for i in $(locale); do
  unset ${i%=*}
done

if [[ "$TERM" = linux ]]; then
  export LANG=C.UTF-8
else
  source /etc/locale.conf

  for i in $(locale); do
    key=${i%=*}
    if [[ -v $key ]]; then
      export $key
    fi
  done
fi

# Fin de /etc/profile
EOF

Remarquez que vous devez modifier /etc/locale.conf avec l'utilitaire systemd localectl. Pour utiliser localectl avec l'exemple précédent, lancez :

localectl set-locale LANG="<ll>_<CC>.<charmap><@modifiers>"

Vous pouvez aussi spécifier d'autres variables d'environnement comme LANG, LC_CTYPE, LC_NUMERIC ou n'importe quel autre variable de la sortie de locale. Un exemple où LANG est définie à en_US.UTF-8 mais LC_CTYPE est défini juste à en_US est :

localectl set-locale LANG="en_US.UTF-8" LC_CTYPE="en_US"
[Note]

Note

Remarquez que la commande localectl ne fonctionne pas dans l'environnement chroot. Elle ne peut être utilisée qu'après avoir démarré le système LFS avec systemd.

Les paramètres C (par défaut) et en_US (recommandé pour les utilisateurs anglophones des États-Unis) sont différents. C utilise le jeu de caractères US-ASCII 7-bit et traite les octets avec le bit de point fort à 1 comme des caractères invalides. C'est pourquoi, par exemple, la commande ls les remplace par des points d'interrogation sous ce paramètre. De plus, les messages contenant ces caractères envoyés avec Mutt ou Pine ne sont pas conformes aux RFC (le jeu de caractères dans le mail sortant est indiqué comme unknown 8-bit). Vous ne pouvez donc utiliser le paramètre régional C que si vous êtes sûr que vous n'aurez jamais besoins de caractère 8 bits.