À quoi dois-je définir mes paramètres régionaux et quelles en sont les implications?

19

Cette question a été stimulée en posant la question que le navigateur Chromium ne permet pas de définir le format de papier par défaut pour "Imprimer dans un fichier" , et aussi par une conversation avec @Gilles sur le chat. Comme l'a souligné @don_crissti, et comme je l'ai vérifié, le changement des paramètres régionaux (au moins LC_PAPER) fait une différence dans le format de papier sélectionné.

Je n'avais jamais beaucoup réfléchi à ce que je devais sélectionner, et j'étais toujours allé avec en_US.UTF-8car cela semblait être un choix par défaut raisonnable.

Cependant, par @Gilles sur le chat (voir la conversation commençant à http://chat.stackexchange.com/transcript/message/17017095#17017095 ). Extraits:

Gilles: LC_PAPER prend par défaut $ LANG

Gilles: Vous devez avoir LANG = en_US.UTF-8. C'est une mauvaise idée: il définit LC_COLLATE et c'est presque toujours une mauvaise chose

Gilles: LC_COLLATE ne décrit pas le classement correct, il est trop restrictif (il va caractère par caractère) supprimez LANG et définissez plutôt LC_CTYPE et LC_PAPER

Gilles: plus LC_MESSAGES si vous voulez des messages dans une langue autre que l'anglais

De toute évidence, il y a des problèmes dont je ne suis pas au courant, et je suis sûr que de nombreux autres le sont aussi. Alors, quels problèmes devez-vous prendre en compte lors de la définition des paramètres régionaux et comment les définir? J'ai toujours juste exécuté dpkg-reconfigure localesdans Debian, et je n'y ai pas réfléchi à deux fois.

Question spécifique: Dois-je définir mes paramètres régionaux sur en_IN.UTF-8? Y a-t-il des inconvénients à le faire?

Voir aussi: LC_COLLATE affecte-t - il (devrait-il) affecter les plages de caractères?

Faheem Mitha
la source

Réponses:

29

Les paramètres régionaux sont des préférences utilisateur qui se rapportent à votre culture.

Noms de paramètres régionaux

Sur toutes les variantes actuelles d'Unix que je connais (mais pas sur quelques antiquités), les noms de paramètres régionaux suivent le même modèle:

  • Un code de langue minuscule ISO 639-1 à deux lettres ou un code de langue à trois lettres ISO 639-2 si la langue n'a pas de code à deux lettres. Par exemple, enpour l'anglais, depour l'allemand, japour le japonais, ukpour l'ukrainien, berpour le berbère,…
  • Pour de nombreuses langues mais pas toutes, un trait de soulignement _suivi d'un code de pays à deux lettres majuscule ISO 3166 . Ainsi: en_USpour l'anglais américain, en_UKpour l'anglais britannique, le français fr_CAcanadien (Québec), de_DEpour l'allemand de l'Allemagne, de_ATpour l'allemand de l'Autriche, ja_JPpour le japonais (du Japon), etc.
  • En option, un point .suivi du nom d'un codage de caractères tels que UTF-8, ISO-8859-1, KOI8-U, GB2312, Big5, etc. Avec GNU libc au moins (je ne sais pas l'ampleur de c'est), le cas et la ponctuation est ignorée dans le codage des noms. Par exemple, le zh_CN.UTF-8chinois mandarin (simplifié) est-il codé en UTF-8, tandis que le zh_CNchinois mandarin est codé en GB2312 et le zh_TWchinois taïwanais (traditionnel) est codé en Big5.
  • Facultativement, un signe at @suivi du nom d'une variante. La signification des variantes dépend des paramètres régionaux. Par exemple, de nombreux pays européens ont une @eurovariante locale où le signe monétaire est € et où l'encodage est celui qui inclut ce caractère (ISO 8859-15 ou ISO 8859-16), par opposition à la variante sans fioritures avec l'ancien signe monétaire. Par exemple, en_IE(anglais, Irlande) utilise le codage latin1 (ISO 8859-1) et £ comme symbole monétaire tandis que en_IE@eurole codage latin9 (ISO 8859-15) et € comme symbole monétaire.

De plus, il existe deux noms de paramètres régionaux qui existent sur tous les systèmes de type Unix: Cet POSIX. Ces noms sont synonymes et signifient informatique, c'est-à-dire des paramètres par défaut appropriés pour les données analysées par un programme informatique.

Paramètres régionaux

Les catégories de paramètres régionaux suivantes sont définies par POSIX :

  • LC_CTYPE: le jeu de caractères utilisé par les applications du terminal: données de classification (dont les caractères sont des lettres, ponctuation, espaces, invalides, etc.) et conversion de casse. Les utilitaires de texte tiennent généralement compte des LC_CTYPElimites des caractères.
  • LC_COLLATE: ordre de classement (ie tri). Ce paramètre est d'une utilité très limitée pour plusieurs raisons:
    • La plupart des langues ont des règles complexes qui dépendent de ce qui est trié (par exemple, les mots du dictionnaire et les noms propres peuvent ne pas utiliser le même ordre) et ne peuvent pas être exprimés par LC_COLLATE.
    • Il y a peu d'applications où un ordre de tri approprié est effectué par un logiciel qui utilise les paramètres régionaux. Par exemple, les traitements de texte stockent la langue et l'encodage d'un fichier dans le fichier lui-même (sinon le fichier ne serait pas traité correctement sur un système avec des paramètres régionaux différents) et ne se soucient pas des paramètres régionaux spécifiés par l'environnement.
    • LC_COLLATEpeut avoir des effets secondaires désagréables, en particulier parce qu'il provoque l'ordre de tri A <a <B <…, ce qui fait que «entre A et Z» inclut les lettres minuscules a à y. En particulier, des expressions régulières très courantes comme [A-Z]casser certaines applications .
  • LC_MESSAGES: la langue des messages d'information et d'erreur.
  • LC_NUMERIC: formatage des nombres: séparateur décimal et milliers.
    De nombreuses applications codent .en dur comme séparateur décimal. Cela rend LC_NUMERICpeu utile et potentiellement dangereux:
    • Même si vous le définissez, vous verrez toujours le format par défaut assez souvent.
    • Vous risquez de vous retrouver dans une situation où une application produit une sortie dépendante des paramètres régionaux et une autre application s'attend .à être le point décimal ou ,à être un séparateur de champ.
  • LC_MONETARY: comme LC_NUMERIC, mais pour des montants en monnaie locale.
    Très peu d'applications l'utilisent.
  • LC_TIME: formatage de la date et de l'heure: noms des jours de la semaine et du mois, horloge 12 ou 24 heures, ordre des parties de la date, ponctuation, etc.

GNU libc, que vous trouverez sur Linux non intégré, définit des catégories de paramètres régionaux supplémentaires:

  • LC_PAPER: le format de papier par défaut (défini par la hauteur et la largeur).
  • LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION: Je ne sais pas de toute application qui utilise ces derniers .

Variables d'environnement

Les applications qui utilisent les paramètres régionaux les déterminent à partir des variables d'environnement.

  • Ensuite, la valeur de la LANGvariable d'environnement est utilisée sauf si elle est remplacée par un autre paramètre. Si LANGn'est pas défini, les paramètres régionaux par défaut sont C.
  • Les LC_xxxnoms peuvent être utilisés comme variables d'environnement.
  • Si LC_ALLest défini, toutes les autres valeurs sont ignorées; cela est principalement utile pour définir les LC_ALL=Capplications d'exécution qui doivent produire la même sortie, quel que soit l'endroit où elles sont exécutées.
  • De plus, GNU libc utiliseLANGUAGE pour définir des solutions de secours pour LC_MESSAGES(par exemple, LANGUAGE=fr_BE:fr_FR:enpréférer le français belge, ou si le français français n'est pas disponible, ou si l'anglais n'est pas disponible).

Installation de paramètres régionaux

Les données locales peuvent être volumineuses, donc certaines distributions ne les expédient pas sous une forme utilisable et nécessitent à la place une étape d'installation supplémentaire.

  • Sur Debian, pour installer les paramètres régionaux, exécutez dpkg-reconfigure localeset sélectionnez dans la liste de la boîte de dialogue, ou modifiez /etc/locale.genpuis exécutez locale-gen.
  • Sur Ubuntu, pour installer les paramètres régionaux, exécutez locale-genavec les noms des paramètres régionaux comme arguments.

Vous pouvez définir vos propres paramètres régionaux .

Recommandation

Les paramètres utiles sont:

  • Définissez LC_CTYPEla langue et l'encodage dans lesquels vous encodez vos fichiers texte. Assurez-vous que vos terminaux utilisent cet encodage.
    Pour la plupart des langues, seul l'encodage compte. Il y a quelques exceptions; par exemple, une majuscule iest Idans la plupart des langues mais İen turc ( tr_TR).
  • Définissez LC_MESSAGESla langue dans laquelle vous souhaitez voir les messages.
  • Set LC_PAPERà en_USsi vous voulez Lettre US à la taille de papier par défaut et à peu près rien d' autre (par exemple en_GB) si vous voulez A4.
  • Vous pouvez éventuellement définir LC_TIMEvotre format d'heure préféré.

Comme expliqué ci-dessus, évitez de régler LC_COLLATEet LC_NUMERIC. Si vous utilisez LANG, remplacez explicitement ces deux catégories en les définissant sur C.

Gilles 'SO- arrête d'être méchant'
la source
Bonjour Gilles, merci pour la réponse détaillée. Où est un bon endroit pour remplacer les paramètres par défaut sur Debian? Étant donné que j'ai besoin d'un format de papier A4, je suppose que je dois remplacer la valeur par défaut de LC_PAPER. Et puis-je mettre à jour cela sur le système sans redémarrer?
Faheem Mitha
1
@FaheemMitha Quelle est la meilleure façon indépendante de la distribution / shell pour définir les variables d'environnement? Et si vous voulez le configurer à l'échelle du système, sur Debian, il y en a aussi /etc/default/locale. Ces fichiers prennent effet lorsque vous vous connectez; vous pouvez faire export LC_PAPER=…dans un shell pour affecter les commandes lancées à partir de ce shell.
Gilles 'SO- arrête d'être méchant'