Paramètres régionaux sur Ubuntu (locales), configuration des langues

Logo

Introduction

Dans la plupart des langages de programmation, il est pratique d’utiliser les paramètres régionaux (locales) pour afficher des nombres, des dates… Les paramètres régionaux évitent le développement de fonctions pour formater les données (mois, jours, devises, etc…).

Exemple Python :

import locale
import datetime

d = datetime.date(2020, 12, 10)

# US english format
locale.setlocale(locale.LC_ALL , 'en_US.utf8')

print(d.strftime('%B %e, %Y'))

v = locale.currency(1234567.89,grouping=True)
print(v)


# FR format
locale.setlocale(locale.LC_ALL , 'fr_FR.utf8')

print(d.strftime('%e %B %Y'))

v = locale.currency(1234567.89,grouping=True)
print(v)
  December 10, 2020
$1,234,567.89
10 décembre 2020
1 234 567,89 €

Exemple PHP :

$d = DateTime::createFromFormat("Y-m-d", "2020-12-10");

// US english format
setlocale(LC_ALL, 'en_US.UTF-8');

echo strftime("%B %e, %Y", strtotime($d->format('Y-m-d')))."\n";

$v = numfmt_create('en_US.UTF-8', NumberFormatter::CURRENCY );
echo numfmt_format_currency($v, 1234567.89, 'USD')."\n";


// FR format
setlocale(LC_ALL, 'fr_FR.UTF-8');

echo strftime("%e %B %Y", strtotime($d->format('Y-m-d')))."\n";

$v = numfmt_create('fr_FR.UTF-8', NumberFormatter::CURRENCY );
echo numfmt_format_currency($v, 1234567.89, 'EUR')."\n";
  December 10, 2020
$1,234,567.89
10 décembre 2020
1 234 567,89 €

L’inconvénient majeur : les paramètres régionaux disponibles dépendent de l’OS. Si le paramètre régional demandé n’est pas installé sur l’OS hébergeant le programme, le formatage échoue ou revient à des paramètres par défaut.

Dans cet article, un rapide survol des paramètres régionaux sur Ubuntu : installation, modification temporaire ou permanente.

Paramètres régionaux sur Ubuntu

Les paramètres courants sont affichés avec la commande locale :

$ locale 
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=

Utiliser locale -a pour lister les paramètres régionaux installés :

$ locale -a
C
C.UTF-8
POSIX
en_US.utf8

Installation d’une nouvelle région

Les paramètres régionaux supportés par Ubuntu sont stockés dans le fichier /usr/share/i18n/SUPPORTED :

/usr/share/i18n/SUPPORTED
…
de_DE.UTF-8 UTF-8       # Allemand, Allemagne, encodage UTF-8
de_DE ISO-8859-1        # Allemand, Allemagne, encodage ISO-8859-1
de_DE@euro ISO-8859-15  # Allemand, Allemagne, encodage ISO-8859-15 (symbole euro)
…
fr_CA.UTF-8 UTF-8       # Français, Canada, encodage UTF-8
fr_CA ISO-8859-1        # Français, Canada, encodage ISO-8859-1
…
fr_FR.UTF-8 UTF-8       # Français, France, encodage UTF-8
fr_FR ISO-8859-1        # Français, France, encodage ISO-8859-1
fr_FR@euro ISO-8859-15  # Français, France, encodage ISO-8859-15 (symbole euro)
…

Utiliser locale-gen en tant que root pour installer une nouvelle région. Ci-dessous, les paramètres régionaux pour la France fr_FR.UTF-8 sont installés :

root$ locale-gen fr_FR.UTF-8
Generating locales (this might take a while)...
  fr_FR.UTF-8... done
Generation complete.

L’installation ne modifie pas les paramètres régionaux par défaut. Pour vérifier l’installation :

$ locale -a | grep 'fr'
fr_FR.utf8

Modification des paramètres régionaux

Temporairement

Pour modifier les paramètres régionaux d’une session (dates, nombres…) :

$ export LANG=fr_FR.UTF-8
$ date
lundi 11 janvier 2021, 08:29:07 (UTC+0000)

Pour un seul paramètre, par exemple les dates/heures :

$ export LC_TIME=fr_FR.UTF-8
$ date
lundi 11 janvier 2021, 08:29:07 (UTC+0000)

Modification permanente

Pour changer de façon permanente les paramètres régionaux pour un user : mettre à jour $HOME/.bashrc ou $HOME/.pam_environment files

$HOME/.bashrc
export LANG=fr_FR.UTF-8
export LC_MESSAGES=POSIX
$HOME/.pam_environment
LANG=fr_FR.UTF-8
LC_MESSAGES=POSIX

L’option LC_MESSAGES=POSIX empêche la traduction des messages systèmes, généralement préférable.

Pour changer de façon permanente les paramètres régionaux d’un serveur Ubuntu: en tant queroot, mettre à jour /etc/default/locale ou utiliser la commande update-locale

/etc/default/locale
LANG=fr_FR.UTF-8
LC_MESSAGES=POSIX
update-locale
root$ update-locale LANG=fr_FR.UTF-8 LC_MESSAGES=POSIX

Le fichier /etc/default/locale peut ne pas déjà exister si aucun paramètre régional n’a encore été défini sur le système.