Où la variable $ LANG est-elle définie dans Mac OS X?

24

J'ai utilisé wgetpour la première fois après l'installation de Lion OS X et j'ai remarqué que wget était localisé dans ma langue maternelle. L'exécution de la setcommande dans le terminal a montré que ma LANGvariable représente ma langue locale. Où puis-je changer cela ou faire wgetignorer ce paramètre?

mise à jour

Voici ce localequi me donne:

LANG="lt_LT.UTF-8"
LC_COLLATE="lt_LT.UTF-8"
LC_CTYPE="lt_LT.UTF-8"
LC_MESSAGES="lt_LT.UTF-8"
LC_MONETARY="lt_LT.UTF-8"
LC_NUMERIC="lt_LT.UTF-8"
LC_TIME="lt_LT.UTF-8"
LC_ALL=

Par conséquent, toutes les sorties de non-paramètres (comme les invites et les messages de débogage) sont en lituanien. Voilà mon problème. J'aimerais revenir en anglais.

J'utilise zshcomme shell de connexion.

Eimantas
la source
Quel est exactement le problème wget? Et qu'est-ce qui locales'affiche et est-ce la même chose que ce que vous attendez de votre sélection de langue dans le volet des préférences système Langue et texte ?
bmike

Réponses:

26

Par défaut, Terminal définit les variables d'environnement locales pour correspondre à la langue et aux formats d'heure / date / nombre actuellement sélectionnés que Terminal utilise, qui est sélectionné via

Préférences système> Langue et texte

(C'est le nom sur Lion. Sur les systèmes antérieurs, le nom exact du panneau de préférences peut varier.)

Une solution temporaire consiste à faire glisser l'anglais en haut de la liste des langues, puis à ouvrir le terminal, puis à déplacer le lituanien vers le haut. Seul le terminal sera alors en anglais. Cependant, il sera réinitialisé en lituanien si vous quittez et redémarrez Terminal.

Une approche persistante consiste à dire à Terminal de ne pas définir les variables d'environnement locales, en désactivant

Terminal> Préférences> Paramètres> [profil]> Avancé> Définir les variables d'environnement locales au démarrage

Ensuite, les paramètres régionaux seront par défaut "C" sans langue spécifiée, et la plupart des programmes seront alors par défaut en anglais.

Notez que la désactivation de cette option signifie que certains programmes ne seront pas conscients du codage de caractères utilisé par Terminal et supposeront qu'il s'agit uniquement de ASCII ou ISO-Latin-1. Donc, si Terminal utilise UTF-8 (par défaut), ces programmes peuvent se comporter ou non comme souhaité.

Si cela concerne principalement wget, je vous recommande de faire une copie du profil des paramètres par défaut, de désactiver le paramètre régional dans votre profil personnalisé et de n'utiliser ce profil que lors de l'utilisation wget, afin de pouvoir continuer à utiliser UTF-8 avec une prise en charge complète lors de l'utilisation d'autres programmes, en utilisant les paramètres par défaut.

Comme d'autres l'ont mentionné, vous pouvez également remplacer les paramètres régionaux initiaux fournis par Terminal dans un script de démarrage du shell. Pour zsh, mettez-le dans ~ / .zshrc. Pour bash, utilisez ~ / .bashrc (et si vous n'en avez pas déjà un, créez un ~ / .bash_profile qui exécute ~ / .bashrc).

Voir x-man-page: // 1 / locale pour plus d'informations sur chacune des valeurs d'environnement local.

Cependant, si vous deviez simplement unset LANGou le définir sur "C", cela s'appliquerait normalement à tous vos shells et programmes, alors que la plupart du temps vous voudrez probablement utiliser UTF-8 et que Terminal définisse les variables locales pour qu'elles correspondent, pour obtenir le plus haut degré de coopération, de fidélité et de fonctionnalité.

Par conséquent, si vous allez dans cette voie, je vous suggère d'écrire du code pour modifier, plutôt que de remplacer, les valeurs initiales, afin de conserver les informations de codage ("UTF-8") et de forcer simplement la langue en anglais, plutôt que de définir les variables sur "C".

Par exemple, cela fonctionne en zsh et bash:

# Replace Lithuanian with English
export LANG=${LANG/lt_LT/en_US}

Quand LANG="lt_LT.UTF-8", cela le changera en LANG="en_US.UTF-8". Je n'ai pas de wgetdisponibilité pour tester cela, mais cela devrait suffire.

Le faire de cette façon signifie que si vous modifiez la préférence de codage des caractères dans Terminal, vous ne la remplacerez pas dans votre script de démarrage du shell.

Chris Page
la source
Bien fait; pour généraliser la LANGcommande de redéfinition: echo ${LANG/*./en_US.}remplace le nom de la culture actuelle par en_US quel qu'il soit; travaille à bash, ksh, zsh.
mklement0
7

C'est réglé ici ...

entrez la description de l'image ici

Si vous voulez plus ou moins d'options dans le menu déroulant, rendez-vous sur l' onglet Encodages pour voir encore plus de primes.

bmike
la source
3
sous os x c'est ~ / .bash_profile, pas bashrc. Les gens ont été très confus lors de la lecture de didacticiels en ligne.
Enrico Susatyo
Bon sang, merci - d'avoir attrapé ça. Je suis même allé sur la page open source et j'ai vérifié si Apple avait apporté des modifications à gnu bash et je me suis toujours trompé. (éditant ma réponse - merci @the_great_monkey)
bmike
4
Le terminal crée des shells de connexion, qui exécutent ~ / .bash_profile. Cependant, la plupart des personnalisations utilisateur doivent être placées dans ~ / .bashrc afin qu'elles s'appliquent également aux shells sans connexion (par exemple, les sous-shells), et ~ / .bash_profile doit exécuter ~ / .bashrc pour s'appliquer aux shells de connexion. ~ / .bash_profile est généralement vide et ne contient que du code spécifiquement pour les shells de connexion de niveau supérieur que l'utilisateur ne veut pas exécuter pour les sous-shells.
Chris Page
1
"une lecture rapide de la page de manuel montre que le shell définit cette valeur à chaque connexion" La page de manuel bash le dit, mais Terminal définit la valeur initiale, et je n'ai jamais vu bash les définir si elles n'étaient pas déjà définies. Si je désactive la préférence "définir l'environnement local ...", aucune des variables n'est définie et les paramètres régionaux s'affichent LANG=et les autres valeurs par défaut "C".
Chris Page
2

J'ai résolu ce problème en définissant la langue dans mon fichier .profile qui se charge chaque fois que je démarre un terminal.

export LANG="en_US.UTF-8"
export LC_ALL="POSIX"
user42973
la source
LC_ALLremplace LANG, donc votre première commande n'aura aucun effet.
mklement0
En outre, POSIXest équivalent à Cet qui ne supporte pas du tout Unicode.
Sebastian Graf
1

Basé plus sur l'expérience Linux, si vous ne voulez pas changer complètement votre localisation avec LC_LANG, mais souhaitez simplement avoir des messages système en anglais, vous devez simplement définir

LC_COLLATE=C    (to have standard sorting in ls, etc)
LC_CTYPE=en_US.UTF-8
dmpogo
la source
C'est la LC_MESSAGESvariable qui contrôle dans quelle langue les messages doivent être émis (si installés).
mklement0
0

En utilisant un serveur Debian en français et un client bash macsox, j'ai "juste" dû l'ajouter à mon .bash_profile sur le répertoire utilisateur de macosx:

export LANG = fr_FR.UTF-8

Résolu.

XiangXing
la source
0

Les autres réponses sont correctes, c'est-à-dire concernant le Terminalréglage des variables d'environnement locales définies au démarrage et l'utilisation des shell /etc/profile. Cependant, il existe un autre moyen qui mérite d'être compris - surtout si le "problème" est rencontré en raison d'une sshconnexion à distance .

OpenSSH (tel qu'utilisé sous Linux, BSD et macOS) peut envoyer des variables d'environnement de l'environnement du client au shell que le serveur démarre. Il ne le fait que si le client est configuré pour les envoyer et le serveur est configuré pour les accepter. Le client ( ~/.ssh/config) devrait avoir:

SendEnv LANG LC_*

et le serveur ( /etc/ssh/sshd_config) aurait besoin de:

AcceptEnv LANG LC_*

Si ceux-ci sont tous les deux en place, le local du client est propagé dans le shell de connexion sur le serveur ssh:

$ ssh me@my-mac locale
LANG="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_CTYPE="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_ALL=

Le paramètre de serveur requis n'est pas là par défaut sur Snow Leopard ; il est là sur Sierra . N'oubliez pas de redémarrer le serveur SSH après avoir modifié /etc/sshd_config!!!

étoilé
la source