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
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
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.