Comment puis-je personnaliser les paramètres régionaux d'un système?

24

Dans Système Administration Prise en charge linguistique Texte. Je ne peux que choisir des paramètres régionaux standard, mais je voudrais affiner. Par exemple, dans Windows, je pourrais personnaliser des choses comme le format de l'heure et de la date, les unités de mesure, le séparateur décimal, la devise, etc. manuellement - comment puis-je faire cela dans Ubuntu?

Ivan
la source

Réponses:

28

Cette réponse montrera comment personnaliser entièrement un environnement local, en utilisant éventuellement un environnement local existant comme base. Le type de paramètres régionaux qui sera utilisé dans cette réponse est le i18ntype; ce type de paramètres régionaux sera impliqué dans chaque mention du mot «paramètres régionaux» dans le corps de la réponse.

Trouvez un guide

La première chose dont vous avez besoin pour personnaliser un environnement local est de connaître le format de l'environnement local. Cet éditeur de paramètres régionaux Web a une description complète de chaque champ d'un paramètre régional, bien qu'il ne soit pas utilisable par n'importe qui de manière immédiate. Ce sera le guide à utiliser.

Outils nécessaires

Les seuls outils dont vous avez besoin pour travailler avec les paramètres régionaux sont

  1. Un éditeur de texte. Tout le monde fera l'affaire, bien que VIM excellera.
  2. Un convertisseur texte-à-unicode. On s'attendrait à ce que vous n'en ayez pas, alors je vais vous en fournir un simple. Lisez la sous-section suivante pour l'obtenir.

Je vous recommande de créer un répertoire et d'y enregistrer tout ce qui concerne le travail que vous ferez sur les paramètres régionaux.

Convertisseur texte en unicode (encodestr)

REMARQUE: si vous utilisez des caractères non courants, vous pouvez rencontrer des problèmes avec le script que j'écris ci-dessous; vous voudrez peut-être jeter un œil aux scripts alternatifs liés par nass .

Enregistrez le code suivant dans un fichier. Ce fichier sera identifié par votre système comme un script python, ce qui est correct car il en est un. Ce guide suppose que vous avez appelé le script encodestr.

#!/usr/bin/python

def encode(string):
    newstring = str()
    for ch in string:
        newstring += "<U%04X>" % ord(ch)
    return newstring

if __name__ == '__main__':
    import sys
    print encode(sys.argv[1])

Après l'avoir enregistré, donnez l'autorisation d'exécution du fichier - cela vous sera utile. Vous pouvez le faire en utilisant nautilus, ou en exécutant depuis un terminal la commande suivante dans le répertoire dans lequel vous avez enregistré le script: chmod +x encodestr.

Vous pouvez maintenant tester ce script en cours d' exécution sur le même répertoire: ./encodestr hello. Vous devriez obtenir une sortie égale à <U0068><U0065><U006C><U006C><U006F>.

Modifier un environnement local existant

La modification d'un environnement local existant est le cas le plus simple, car dans l'idéal, vous choisirez un environnement local qui correspond presque entièrement à vos besoins, auquel cas vous ne devrez apporter que de petites modifications. Pour l'adapter, vous pouvez utiliser le guide pour savoir quelles sections vous souhaitez modifier et comment les modifier. Tous les paramètres régionaux installés résident /usr/share/i18n/locales, mais le guide contient à peu près tous les paramètres régionaux jamais créés.

Cependant, la première chose que vous remarquerez lorsque vous ouvrirez une locale est que vous lirez autant les mots anglais que les <UXXXX>codes étranges . Vous devrez être en mesure de créer ces codes - c'est là que le encodestrscript vient.

Lorsque vous savez quelles sections vous devez modifier, vous devez connaître chaque champ contenu dans la section.

Par exemple, la LC_TIMEsection contient le champ t_fmtet bien d'autres. Chaque champ a sa propre description sur le guide .

Maintenant que vous savez quels champs modifier, utilisez à nouveau le guide pour savoir quelles valeurs le champ accepte.

Par exemple, le champ t_fmtaccepte le texte et les variables strfmt courantes .

Juste au moment où vous savez quoi écrire sur les champs que vous souhaitez modifier, exécutez le texte via le encodestrscript pour obtenir son équivalent codé.

REMARQUE: tous les champs n'ont pas besoin d'être codés, utilisez une locale existante comme référence si nécessaire.

Par exemple, si vous souhaitez avoir le format d'heure Time: %Tdans le t_fmtchamp, exécutez ./encodestr "Time: %T"; cela reviendra <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>et vous aurez donc la ligne t_fmt <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>dans votre locale (dans sa section respective, bien sûr).

Après avoir modifié tous les champs souhaités, vous devrez procéder à l'installation des paramètres régionaux sur le système, afin qu'ils puissent être utilisés. Passez à la section d'installation pour cela.

Créer un environnement local à partir de zéro

Au lieu d'en modifier une, l'autre méthode que vous pouvez utiliser pour créer vos paramètres régionaux personnalisés fonctionne à partir de zéro. Ce n'est pas très difficile si - encore une fois - vous utilisez le guide . Voici une astuce utile: vous pouvez copier des sections à partir d'autres paramètres régionaux sans méthodes de copier-coller réelles . Il vous suffit de suivre ce format:

LC_SECTION
copy "locale"
END LC_SECTION

Où se LC_SECTIONtrouve la section que vous souhaitez modifier et localeles paramètres régionaux à partir desquels vous souhaitez copier cette section.

Par exemple, si vous souhaitez copier le format d'heure dans les paramètres régionaux anglais, vous devriez avoir ce texte dans votre fichier de paramètres régionaux personnalisé:

LC_TIME
copy "en_GB"
END LC_TIME

Et cela vous fait économiser beaucoup de travail et garantit que toute modification apportée aux paramètres régionaux référencés sera reflétée dans la vôtre.

Installation de vos paramètres régionaux personnalisés

Les étapes que je vais montrer ci-dessous ne sont peut-être pas optimales, mais fonctionnent.

  1. Compilez vos paramètres régionaux. Pas de panique! Cela ne prend pas de temps. Exécutez simplement la commande sudo localedef -i custom -f UTF-8 custom.UTF-8 -c -vcustomest le nom de votre locale.

  2. Copiez vos paramètres régionaux dans le /usr/share/i18n/locales/répertoire. Vous aurez certainement besoin des privilèges sudo pour ce faire, et vous pouvez le faire avec la commande sudo cp locale /usr/share/i18n/locales/localeest le nom de fichier de votre locale personnalisée.

  3. Spécifiez vos paramètres régionaux dans /var/lib/locales/supported.d/. Par exemple, créez un nom de fichier /var/lib/locales/supported.d/asdet ajoutez la ligne custom UTF-8, où personnalisé est le nom de votre environnement local.

  4. Exécutez la commande magique. En fait, je ne sais pas exactement ce que fait cette commande, mais elle est cruciale. Courez sudo locale-gen. Il est très probable qu'il génère des références aux paramètres régionaux disponibles, le cas échéant.

  5. Dites à votre système d'utiliser les paramètres régionaux. Si vous souhaitez que les paramètres régionaux soient utilisés à l'échelle du système, modifiez le paramètre/etc/environment fichier. Sinon, vous pouvez modifier votre ~/.profilefichier ou tout autre qui provient du démarrage. Si vous ne savez pas ce que cela signifie, ne vous inquiétez pas, utilisez simplement le ~/.profilefichier. Pour savoir ce que vous devez y écrire, lancez d'abord la localecommande. Il devrait publier une liste avec des articles comme LANGUAGE, LC_MESSAGES, LC_CTYPEet bien d' autres. Vous écrirez, pour chacune des sections souhaitées (répertoriées par la commande précédente), sur des lignes distinctes, SECTION="locale"où se SECTIONtrouve la section et localele nom de votre locale personnalisée.

Par exemple, si vous souhaitez utiliser le format d'heure des Pays-Bas, mais la langue anglaise, écrivez:

LANGUAGE="en_GB:en"
LC_TIME="nl_NL"

REMARQUE: si vous souhaitez utiliser un paramètre régional pour chaque paramètre de paramètres régionaux, écrivez LC_ALL="locale"localeest le nom de vos paramètres régionaux personnalisés. Si vous souhaitez utiliser un environnement local pour tout sauf pour la langue, vous pouvez écrire LANG="locale"et (sur une autre ligne, bien sûr) LANGUAGE="locale":XXXXest le code à 2 lettres pour la langue que vous souhaitez.

Par exemple, si vous souhaitez utiliser les paramètres régionaux néerlandais et la langue anglaise, vous pouvez utiliser:

LANG="nl_NL"
LANGUAGE="nl_NL:en"

Vous avez fini

La prochaine fois que vous vous connecterez, vos paramètres régionaux devraient être utilisés. Vous pouvez tester cela en exécutant à localenouveau la commande.

Veuillez commenter les incohérences ou les fausses déclarations dans ce guide!

Severo Raz
la source
Salut, Le code python que vous utilisez ne fonctionne pas dans tous les cas. Pour les caractères grecs πμ, il génère <U00CF><U0080><U00CE><U00BC>, au lieu des caractères attendus <U03C0><U03BC>. Voici un lien qui fonctionne.
nass
Merci pour votre contribution! J'ai inclus votre commentaire dans le texte où il était dû :)
Severo Raz
Je devais ajouter custom UTF-8à /usr/share/i18n/SUPPORTEDavant que je puisse courir sudo locale-gen. Sinon, il ne serait pas dans la liste.
Wilbert
Copiez votre méthode de conversion de chaîne dans ma collection de scripts shell: github.com/budhajeewa/shell-scripts/commit/… . Merci!
budhajeewa
Si quelqu'un cherche une fonction pour faire l'inverse de la méthode dans cette réponse (j'en avais besoin pour lire les valeurs hexadécimales existantes dans les fichiers de paramètres régionaux.), J'ai écrit un script PHP pour cela. github.com/budhajeewa/shell-scripts/commit/… . Si quelqu'un peut l'écrire en Python, faites le moi savoir. J'aimerais ajouter cela à ma collection.
budhajeewa
8

Vous ne savez pas quel type de personnalisation vous souhaitez, mais vous pouvez définir certaines variables locales à l'aide de votre ~/.locale. Par exemple, pour obtenir des messages en anglais, mais l'heure allemande et les goûts que j'utilise

export LC_ALL=""
export LANG="en_GB.utf8"
export LC_CTYPE="de_DE.utf8"
export LC_NUMERIC="de_DE.utf8"
export LC_TIME="de_DE.utf8"
export LC_COLLATE="de_DE.utf8"
export LC_MONETARY="de_DE.utf8"
export LC_MESSAGES="en_GB.utf8"
export LC_PAPER="de_DE.utf8"
export LC_NAME="en_GB.utf8"
export LC_ADDRESS="de_DE.utf8"
export LC_TELEPHONE="de_DE.utf8"
export LC_MEASUREMENT="de_DE.utf8"
export LC_IDENTIFICATION="de_DE.utf8"

La génération de paramètres régionaux personnalisés est également possible. Voir par exemple ce guide pour les dates.

Carsten Thiel
la source
1
Non, je veux une personnalisation de niveau inférieur. Par exemple: messages en anglais, unités métriques, date / heure tchèque modifiée (DD.MM.YYYY HH: mm au lieu de DMYYYY H.MM), un point comme séparateur décimal (il y a une virgule pour cela en langue tchèque) et € comme devise (il y a la devise Kč en langue tchèque).
Ivan
Je vois. Prendre en_USpour LC_NUMERICet de_DEpour LC_MONETARYet LC_MEASUREMENTvous donne d'autres effets secondaires? Voir également le nouveau lien pour générer un environnement local personnel.
Carsten Thiel
1
les instructions derrière le lien semblent répondre merveilleusement à la question, peut-être pourriez-vous reproduire les bits les plus importants ici, au cas où le lien ne serait pas accessible un jour?
Stefano Palazzo