Waar wordt de variabele $ LANG ingesteld in Mac OS X?

Ik heb wget voor de eerste keer gebruikt na het installeren van Lion OS X en ik heb gemerkt dat wget is gelokaliseerd in mijn moedertaal. De opdracht set in terminal liet zien dat mijn variabele LANG mijn lokale taal weergeeft. Waar kan ik dit wijzigen of wget deze instelling negeren?

-update

Dit is wat locale me geeft:

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=

Daarom zijn alle uitvoer van niet-parameters (zoals aanwijzingen en foutopsporingsberichten) in het Litouws. Dat is mijn probleem. Ik wil het graag terug naar het Engels krijgen.

Ik gebruik zsh als mijn login-shell.

22
Wat is precies het probleem met wget ? En wat is de status locale en is dit hetzelfde als wat u verwacht van uw taalselectie in het systeemvak Taal en tekst systeemvoorkeur?
toegevoegd de auteur Oskar, de bron

6 antwoord

Standaard worden door Terminal de locatievariabelen ingesteld die overeenkomen met de momenteel geselecteerde taal en tijd/datum/getalnotaties die Terminal gebruikt, die is geselecteerd via

System Preferences > Language and Text

(Dat is de naam op Lion. Op eerdere systemen kan de exacte naam van het voorkeurenpaneel variëren.)

Een tijdelijke oplossing is om Engels naar de top van de lijst met talen te slepen, vervolgens Terminal te openen en Litouws terug naar de top te verplaatsen. Dan is alleen Terminal in het Engels. Het wordt echter opnieuw ingesteld op Litouws als u Terminal afsluit en herstart.

Een persistente benadering is om Terminal te vertellen de locale omgevingsvariabelen niet in te stellen, door uit te schakelen

Terminal > Preferences > Settings > [profile] > Advanced > Set locale environment variables on startup

Dan zal de locale standaard op "C" staan ​​zonder taal gespecificeerd, en de meeste programma's zullen standaard Engels zijn.

Merk op dat het uitschakelen van dit betekent dat sommige programma's niet weten welke tekencodering Terminal gebruikt en ervan uitgaan dat het alleen ASCII of ISO-Latin-1 is. Dus als Terminal UTF-8 gebruikt (de standaardinstelling), kunnen die programma's zich al dan niet gedragen zoals gewenst.

Als dit meestal over wget gaat, raad ik aan dat u een kopie maakt van het standaardinstellingenprofiel, de locale-instelling in uw aangepaste profiel uitschakelt en dat profiel alleen gebruikt bij het gebruik van wget , zodat u UTF-8 met volledige ondersteuning kunt blijven gebruiken wanneer u andere programma's gebruikt, met behulp van de standaardinstellingen.

Zoals anderen al hebben vermeld, kunt u ook de initiële locale-instellingen overschrijven die door Terminal zijn geleverd in een shell-opstartscript. Plaats voor zsh in ~/.zshrc. Gebruik voor bash ~/.bashrc (en als je dat nog niet hebt, maak dan een ~/.bash_profile aan die ~/.bashrc uitvoert).

Zie x-man-page://1/locale voor meer informatie over elk van de locale-omgevingswaarden.

Als je echter alleen LANG zou uitschakelen of op "C" zou zetten, zou dat normaal gesproken van toepassing zijn op all van je shells en programma's, terwijl je waarschijnlijk de meeste tijd zult gebruiken wil UTF-8 gebruiken en laat Terminal de locale variabelen instellen om te matchen, om de hoogste mate van samenwerking, betrouwbaarheid en functionaliteit te krijgen.

Daarom, als je die weg wilt gaan, stel ik voor dat je code schrijft om de beginwaarden te bewerken, in plaats van te vervangen, zodat je de coderingsinformatie ("UTF-8") behoudt en de taal alleen maar in het Engels forceert, in plaats van de variabelen in te stellen op "C".

Dit werkt bijvoorbeeld in zsh en bash:

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

Wanneer LANG = "lt_LT.UTF-8" , verandert dit in LANG = "en_US.UTF-8" . Ik heb geen wget beschikbaar om dit te testen, maar dit zou voldoende moeten zijn.

Als u het op deze manier doet, betekent dit dat als u de tekencoderingsvoorkeur in Terminal wijzigt, u die niet in het script voor het opstarten van shells hoeft te overschrijven.

22
toegevoegd
@Jonny: Ja. Dat valt onder "Merk op dat het uitschakelen van dit betekent dat sommige programma's ... zich al dan niet kunnen gedragen zoals gewenst."
toegevoegd de auteur imallett, de bron
Uitschakelen "Plaatsgevingsvariabelen instellen bij opstarten" betekent dat we niets anders kunnen typen dan gewone ASCII, wat in de meeste scenario's onaanvaardbaar is (dwz geen Zweeds, Japans, enz. Kan schrijven)
toegevoegd de auteur Celeste, de bron

Het staat hier ...

enter image description here

Als u meer of minder opties wilt in de vervolgkeuzelijst, gaat u naar het tabblad Encodings om nog meer van de bounty te bekijken.

6
toegevoegd
op os x is het ~/.bash_profile, niet bashrc. Mensen raakten hierdoor erg in de war door online tutorials te lezen.
toegevoegd de auteur Skizz, de bron
Jeetje, verdorie, bedankt dat je dat hebt begrepen. Ik ging zelfs naar de open source-pagina en controleerde of Apple wijzigingen aanbracht in GNU-bash en het nog steeds fout had. (bewerken van mijn antwoord - bedankt @the_great_monkey)
toegevoegd de auteur Oskar, de bron
Terminal maakt login-shells aan, die ~/.bash_profile uitvoeren. De meeste gebruikersaanpassingen moeten echter in ~/.bashrc worden geplaatst, zodat ze ook van toepassing zijn op niet-login shells (bijvoorbeeld sub-shells), en ~/.bash_profile moet ~/.bashrc uitvoeren, dus het is van toepassing op inlogshells. ~/.bash_profile is meestal grotendeels leeg en bevat alleen code die specifiek bedoeld is voor login-shells op het hoogste niveau die de gebruiker niet wil uitvoeren voor sub-shells.
toegevoegd de auteur imallett, de bron
"een snel lezen van de man-pagina laat zien dat de shell deze waarde instelt bij elke log-in" De bash-man-pagina zegt dat, maar Terminal stelt de beginwaarde in, en ik heb nog nooit bash-instellingen gezien als deze nog niet waren ingesteld. Als ik de voorkeursinstelling "locale omgeving instellen" uitschakel, worden geen van de variabelen ingesteld en toont de landinstelling LANG = en de andere waarden alle standaard in "C" .
toegevoegd de auteur imallett, de bron

Ik heb dit probleem opgelost door de taal in mijn .profile-bestand in te stellen, dat wordt geladen wanneer ik een terminal start.

export LANG="en_US.UTF-8"
export LC_ALL="POSIX"
1
toegevoegd

Meer gebaseerd op Linux exprience, als u uw lokalisatie niet volledig wilt wijzigen met LC_LANG, maar graag alleen systeemberichten in het Engels wilt hebben, je zou gewoon gaan zitten

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

De andere antwoorden zijn correct, dat wil zeggen over de Terminal -instelling voor locale omgevingsvariabelen instellen bij opstarten en het /etc/profile van de shell gebruiken. Er is echter nog een andere manier die de moeite waard is om te begrijpen - vooral als het "probleem" wordt ondervonden door een externe ssh login.

OpenSSH (zoals gebruikt in Linux, BSD en macOS) kan omgevingsvariabelen verzenden vanuit de omgeving van de client naar de shell die de server opstart. Dit gebeurt alleen als de client is geconfigureerd om ze te verzenden en de server is geconfigureerd om ze te accepteren. De client ( ~/.ssh/config ) zou moeten hebben:

SendEnv LANG LC_*

en de server (/etc/ssh/sshd_config ) zou nodig hebben:

AcceptEnv LANG LC_*

Als beide aanwezig zijn, wordt de lokale client van de client doorgegeven aan de login-shell op de ssh-server:

$ ssh [email protected] 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=

De vereiste serverinstelling is standaard niet aanwezig in Snow Leopard ; het staat daar op Sierra . Vergeet niet om de SSH-server te herstarten na het wijzigen van /etc/sshd_config !!!

0
toegevoegd

Met een debian server in het Frans en een macsox bash client, moest ik dit "gewoon" toevoegen aan mijn .bash_profile in de gebruikersdirectory van macosx:

exporteer LANG = fr_FR.UTF-8

Opgelost.

0
toegevoegd