30 votes

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

J'ai utilisé wget pour la première fois après avoir installé Lion OS X et j'ai remarqué que wget a été localisé dans ma langue maternelle. Exécution de set dans le terminal a montré que mon LANG La variable représente ma langue locale. Où puis-je changer cela ou faire wget ignorer ce paramètre ?

mise à jour

Voici ce que locale 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. C'est là mon problème. J'aimerais le ramener à l'anglais.

J'utilise zsh comme shell de connexion.

1 votes

Quel est exactement le problème avec wget ? Et qu'est-ce que locale et est-ce la même chose que ce que vous attendez de votre sélection de langues dans le cadre de la Langue et texte le panneau de préférences du système ?

28voto

Chris Page Points 7394

Par défaut, le terminal définit les variables d'environnement locales pour qu'elles correspondent à la langue et aux formats d'heure/date/nombre actuellement sélectionnés par le terminal, qui est sélectionné par le biais de la commande

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, et enfin à remettre le lituanien en haut de la liste. Ainsi, seul le terminal sera en anglais. Cependant, le lituanien sera rétabli si vous quittez et redémarrez le terminal.

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

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

Dans ce cas, la locale sera par défaut "C" sans spécifier de langue, et la plupart des programmes seront alors en anglais par défaut.

Notez que si vous désactivez cette option, certains programmes ne sauront pas quel est le codage de caractères utilisé par le terminal et supposeront qu'il s'agit uniquement d'ASCII ou d'ISO-Latin-1. Ainsi, si Terminal utilise UTF-8 (valeur par défaut), ces programmes peuvent ou non se comporter comme souhaité.

Si c'est surtout pour wget Je vous recommande de faire une copie du profil de paramètres par défaut, de désactiver le paramètre de langue dans votre profil personnalisé et de n'utiliser ce profil que lorsque vous utilisez le site Web de la Commission européenne. wget afin que vous puissiez continuer à utiliser UTF-8 avec un support complet lorsque vous utilisez d'autres programmes, en utilisant les paramètres par défaut.

Comme d'autres l'ont mentionné, vous pouvez également remplacer les paramètres linguistiques 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).

Consultez x-man-page://1/locale pour plus d'informations sur chacune des valeurs d'environnement de la locale.

Cependant, si vous deviez simplement unset LANG ou le mettre sur "C", qui s'appliquerait normalement à tous de vos shells et programmes, alors que la plupart du temps, vous souhaitez probablement utiliser UTF-8 et faire en sorte que Terminal définisse les variables locales en conséquence, afin d'obtenir le plus haut degré de coopération, de fidélité et de fonctionnalité.

Par conséquent, si vous choisissez cette voie, je vous suggère d'écrire du code pour modifier, plutôt que remplacer, les valeurs initiales, de manière à préserver les informations relatives à l'encodage ("UTF-8") et à forcer simplement la langue à l'anglais, plutôt que de définir les variables à "C".

Par exemple, cela fonctionne dans zsh et bash :

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

Lorsque LANG="lt_LT.UTF-8" ce qui le transformera en LANG="en_US.UTF-8" . Je n'ai pas wget disponible pour tester cela, mais cela devrait suffire.

En procédant ainsi, si vous modifiez la préférence en matière de codage des caractères dans Terminal, vous ne remplacerez pas cette préférence dans votre script de démarrage du shell.

1 votes

Bien joué ; pour généraliser la LANG commande de redéfinition : echo ${LANG/*./en_US.} remplace le nom de la culture actuelle par en_US quel qu'il soit ; travaille en bash , ksh , zsh .

8voto

Oskar Points 1242

C'est ici...

enter image description here

Si vous souhaitez avoir plus ou moins d'options dans le menu déroulant, rendez-vous dans l'onglet "Options". Encodages pour voir encore plus d'avantages.

4 votes

Sur os x c'est ~/.bash_profile, pas bashrc. Les gens ont été très déroutés par cela lorsqu'ils ont lu des tutoriels en ligne.

0 votes

Merci de l'avoir signalé. Je suis même allé sur la page open source et j'ai vérifié si apple avait fait des changements à gnu bash et je me suis encore trompé. (je modifie ma réponse - merci @the_great_monkey )

6 votes

Le terminal crée des shells de connexion, qui exécutent ~/.bash_profile. Cependant, la plupart des personnalisations de l'utilisateur doivent être placées dans ~/.bashrc afin qu'elles s'appliquent également aux shells de non connexion (par exemple, les sous-shells), et ~/.bash_profile doit exécuter ~/.bashrc afin qu'il s'applique aux shells de connexion. ~/.bash_profile est généralement vide et ne contient que du code spécifique aux shells de connexion de premier niveau que l'utilisateur ne souhaite pas exécuter pour les sous-shells.

3voto

EOL Points 24342

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"

7 votes

LC_ALL dérogations LANG Votre première commande n'aura donc aucun effet.

2 votes

En outre, POSIX est équivalent à C et qui ne gère pas du tout l'Unicode.

1voto

dmpogo Points 11

Basé plus sur l'expérience de Linux, si vous ne voulez pas changer complètement votre localisation avec LC_LANG, mais que vous voulez juste avoir les messages du système en anglais, vous devriez juste mettre

LC_COLLATE=C    (to have standard sorting in ls, etc)
LC_CTYPE=en_US.UTF-8

0 votes

Il s'agit de la LC_MESSAGES qui contrôle la langue dans laquelle les messages doivent être affichés (si elle est installée).

1voto

bernedef Points 723

Les autres réponses sont correctes, c'est-à-dire à propos de la Terminal pour définir les variables d'environnement locales au démarrage et en utilisant l'interpréteur de commandes /etc/profile . Cependant, il existe une autre méthode qui mérite d'être comprise, surtout si le "problème" est dû à une télécommande. ssh connexion.

OpenSSH (tel qu'utilisé sur 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 si 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 :

AcceptEnv LANG LC_*

Si ces deux éléments sont en place, l'adresse locale du client est propagée dans le shell de connexion du 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 présent par défaut sur Snow Leopard ; c'est là sur Sierra . N'oubliez pas de redémarrer le serveur SSH après avoir modifié /etc/sshd_config ! !!

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X