Modifier une définition de paramètres régionaux (par opposition à un paramètre de paramètres régionaux)

8

Remarque préliminaire : Cette question est pas à propos de la mise en un lieu en changeant LC_ALL, LC_TIME, LANG, etc., il est plutôt de changer une locale définition , par exemple dans /usr/share/i18n/locales/de_DE, respectivement, pour obtenir des suggestions sur les options plus appropriées que de changer les paramètres du système.

L' objectif est d'obtenir des représentations ISO du temps %Y-%m-%d et %H:%M:%Ssans effets secondaires indésirables.

Les suggestions que j'ai trouvées sur le net étaient encore toutes inappropriées (par exemple, définir les paramètres régionaux sur "danois" ne conservera pas les noms de semaine orthographiés de la langue maternelle).

Maintenant, le seul choix que je vois actuellement pour obtenir le comportement souhaité est de modifier la définition de mes paramètres régionaux natifs dans /usr/share/i18n/locales/de_DE. Ce n'est pas une solution parfaite car avec les mises à jour du système, ces fichiers modifiés peuvent être écrasés à nouveau.

Mes questions sont:

  1. Existe-t-il de meilleures options liées aux paramètres régionaux pour obtenir la fonction souhaitée que de modifier le fichier de paramètres régionaux du système spécifique?
  2. Y a-t-il des problèmes à prévoir lors de la modification d'un fichier de définition de paramètres régionaux spécifique? (Et comment éviter que ce fichier soit écrasé en cas de mise à jour du système?)
  3. Serait-il préférable de définir une nouvelle variante spécifique d'un fichier de paramètres régionaux existant et de l'utiliser dans les LC_*paramètres? (Et comment ce nouveau fichier / définition serait-il correctement communiqué au système?)
  4. D'autres suggestions?
Janis
la source
Je vous suggère de copier le fichier de paramètres régionaux qui vous intéresse, de donner à cette copie un nom unique (par exemple, en_XX- je ne sais pas quelles sont les restrictions ici, des essais et des erreurs peuvent suffire), apportez les modifications que vous souhaitez et utilisez-le comme paramètre régional. Vous devrez régénérer la liste ou autre chose par la suite, etc.
goldilocks
1
Vous voudrez peut-être lire ma question , qui contient des détails sur ce que j'ai fait. Je ne l'ai pas encore emballé, mais pour l'instant cela fonctionne très bien. Définissez simplement LC_TIME(dans /etc/environmentou /etc/default/localeou en /etc/locale.conffonction de la distribution) les paramètres régionaux modifiés (j'ai appelé le mien isodate.UTF-8) et le format respectif sera sélectionné à partir de ces paramètres régionaux personnalisés uniquement pour l'heure / la date. C'est ainsi que j'ai personnalisé mon autre en_USparamètre pour afficher la date / heure ISO.
0xC0000022L
1
@Janis: sur Debian et Ubuntu, vous voudrez également mettre le nom de votre locale dans /var/lib/locales/supported.d/local(ou l'un des autres fichiers) et exécuter en dpkg-reconfigure localestant que superutilisateur pour la définition de la locale à compiler. Et oui, le réglageLC_TIME pour pointer vers un environnement local personnalisé semble être la méthode la moins intrusive de tout ce que j'ai vu jusqu'à présent. C'est pourquoi votre système a des paramètres globaux qui LC_TIMEpeuvent être définis différemment des "paramètres régionaux généraux".
0xC0000022L
@ 0xC0000022L; Votre expérience ici est très précieuse. Avec les suggestions jusqu'à présent, j'irai pour un nouveau fichier de paramètres régionaux. Je ne suis pas encore décidé si je devrais utiliser l' copyapproche on sections, ou garder les autres sections redondantes (afin de pouvoir diffcontre le fichier d'origine).
Janis

Réponses:

5

Dans une question récente, j'ai demandé quelle était la meilleure pratique pour ce type de changement. Il n'y avait pas encore de réponse. Cependant, je peux vous donner la recette que j'utilise, qui s'est avérée très efficace. Tous les programmes prennent correctement la date.

Ma description concerne Ubuntu, mais fonctionnera probablement sur Debian et Mint.

Les préparatifs

Copiez les paramètres régionaux que vous souhaitez personnaliser /usr/share/i18n/localesdans un nouveau fichier. Par exemple

cp /usr/share/i18n/locales/de_DE /usr/share/i18n/locales/de_DE@isodate

Ajustez tout à l'exception des LC_TIMEsections pour:

copy "de_DE"

Ajustez la LC_TIMEsection pour qu'elle corresponde au résultat souhaité. Vous pouvez utiliser les paramètres de ma question liée ci-dessus comme modèle. Il semble que c'est à peu près exactement ce que vous voulez.

Si vos paramètres régionaux n'utilisent pas la notation "AM / PM", définissez-les sur vide:

t_fmt_ampm ""
am_pm   "";""

Faire connaître le système

Modifiez le fichier /var/lib/locales/supported.d/localet ajoutez-y les informations sur votre définition de paramètres régionaux. Autrement dit, ajoutez une ligne comme celle-ci si le nom de votre fichier ci-dessus était isodate, ajustez-le autrement:

de_DE.UTF-8@isodate UTF-8

S'il /var/lib/locales/supported.d/localn'existe pas, créez un fichier de ce nom. Ne placez pas vos modifications dans le fichier respectif enou dedans ce dossier, car elles peuvent être écrasées dès que les packages language-pack-*-baseet language-pack-*sur votre système reçoivent une mise à jour.

Maintenant, lancez dpkg-reconfigure locales:

# dpkg-reconfigure locales
Generating locales...
  de_DE.UTF-8@isodate... done
  de_DE.UTF-8... up-to-date
Generation complete.

Dans votre cas, cela indiquera que les de_DE.UTF-8@isodateparamètres régionaux ont été générés (en supposant que vous n'avez aucun problème de syntaxe).

Enfin et surtout, ajoutez ce qui suit à /etc/default/locale:

LC_TIME="de_DE.UTF-8@isodate"

Cela garantira que ne LC_TIME remplace que les paramètres régionaux par défaut définis à l'aide de LANG.

Connectez-vous à nouveau et vous devriez pouvoir voir la nouvelle date / heure ISO lors de l'utilisation dateou d'autres outils utilisant la fonction d'exécution libc respective.


Le but ici est de faire le changement le moins intrusif tout en ne travaillant pas contre le système (par exemple contre le gestionnaire de paquets et les amis). Bien sûr, vous pouvez également simplement créer une copie de vos paramètres régionaux, l'installer de la même manière que celle décrite ci-dessus, puis ajuster LANG. Le fait est que tant que vous ne voulez pas courir le risque que vos modifications soient écrasées par une mise à jour de package, vous devez utiliser une copie personnalisée (quelle que soit la personnalisation que vous recherchez; c'est copy-à- dire ou simplement conserver les sections telles qu'elles étaient dans l'original). Et si vous changez LANGpour pointer vers la définition locale complète personnalisée - ou si vous ajoutez LC_TIME pour pointer uniquement vers la section personnalisée pertinente du même nom d'un fichier de définition de paramètres régionaux personnalisé - vous ne pourrez pas contourner l'un des paramètres globaux.

0xC0000022L
la source
3
En tant que meilleure pratique, vous suffixeriez vos paramètres régionaux avec @something like en_US.UTF-8@isodate.
Stéphane Chazelas
@ StéphaneChazelas: Hah! Impressionnant. Cependant, vous ne pouvez pas copyla LC_IDENTIFICATIONet comment cela affecterait la dénomination des fichiers et comment vous faites référence à la locale /etc/default/localeet /var/lib/locales/supported.d/localrespectivement? Peux tu raconter?
0xC0000022L
1
Vous devez créer un en_US@isodatefichier de définition et l'utiliser localedefpour produire les fichiers corrects; voir sourceware.org/git/?p=glibc.git;a=blob;f=localedata/README pour plus de détails (et sourceware.org/git/?p=glibc.git;a=blob;f=localedata/locales/ … Pour un exemple).
Stephen Kitt
1
Oui, dans tous les cas, vous voudriez changer la section LC_IDENTIFICATION (en_US @ isodate) car c'est une locale différente, La commande de fin serait localedef -i en_US@isodate -f UTF-8 en_US.UTF-8@isodate, je ne suis pas sûr de la configuration spécifique à Debian, mon commentaire était principalement sur la façon dont pour nommer les paramètres régionaux.
Stéphane Chazelas
1
Si je comprends bien, sur Debian, vous devez ajouter votre définition de paramètres régionaux dans /usr/local/share/i18n/locales, ajouter les paires de paramètres régionaux / charmap pris en charge /usr/local/share/i18n/SUPPORTEDet exécuter dpkg-reconfigure locales(voir également /etc/locale.gen).
Stephen Kitt