Wo wird die Variable $ LANG in Mac OS X festgelegt?

24

Ich habe wgetzum ersten Mal nach der Installation von Lion OS X verwendet und festgestellt, dass wget in meine Muttersprache lokalisiert wurde. Das Ausführen des setBefehls im Terminal hat gezeigt, dass meine LANGVariable meine Landessprache darstellt. Wo kann ich das ändern oder wgetdiese Einstellung ignorieren lassen?

aktualisieren

Folgendes localegibt mir:

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=

Daher sind alle Ausgaben von Nicht-Parametern (wie Eingabeaufforderungen und Debug-Meldungen) in Litauisch. Das ist mein problem Ich würde es gerne wieder auf Englisch bringen.

Ich benutze zshals meine Login-Shell.

Eimantas
quelle
Womit genau ist das Problem wget? Und was wird localeangezeigt und ist es dasselbe, was Sie von Ihrer Sprachauswahl im Systemeinstellungsbereich Sprache & Text erwarten ?
bmike

Antworten:

26

Standardmäßig legt Terminal die Umgebungsvariablen für das Gebietsschema so fest, dass sie den aktuell von Terminal verwendeten Sprach- und Zeit- / Datums- / Zahlenformaten entsprechen, die über ausgewählt werden

Systemeinstellungen> Sprache und Text

(Dies ist der Name auf Lion. Auf früheren Systemen kann der genaue Name des Einstellungsfensters abweichen.)

Eine vorübergehende Lösung besteht darin, Englisch an den Anfang der Sprachenliste zu ziehen, dann das Terminal zu öffnen und Litauisch an den Anfang zu verschieben. Dann wird nur Terminal in Englisch sein. Es wird jedoch auf Litauisch zurückgesetzt, wenn Sie Terminal beenden und neu starten.

Ein beständiger Ansatz besteht darin, Terminal anzuweisen, die Umgebungsvariablen für das Gebietsschema nicht festzulegen, indem Sie sie deaktivieren

Terminal> Einstellungen> Einstellungen> [Profil]> Erweitert> Umgebungsvariablen für das Gebietsschema beim Start festlegen

Das Gebietsschema wird dann standardmäßig auf "C" ohne Angabe einer Sprache festgelegt, und die meisten Programme werden dann standardmäßig auf Englisch eingestellt.

Beachten Sie, dass das Deaktivieren dieser Option dazu führt, dass einige Programme nicht wissen, welches Zeichencodierungsterminal verwendet wird, und davon ausgehen, dass es sich nur um ASCII oder ISO-Latin-1 handelt. Wenn Terminal UTF-8 verwendet (Standardeinstellung), verhalten sich diese Programme möglicherweise nicht wie gewünscht.

In diesem wgetFall empfehle ich, eine Kopie des Standardeinstellungsprofils zu erstellen, die Ländereinstellung in Ihrem benutzerdefinierten Profil zu deaktivieren und dieses Profil nur bei Verwendung zu verwenden wget, damit Sie UTF-8 weiterhin mit vollständiger Unterstützung verwenden können Wenn Sie andere Programme verwenden, verwenden Sie die Standardeinstellungen.

Wie bereits erwähnt, können Sie auch die von Terminal bereitgestellten anfänglichen Gebietsschemaeinstellungen in einem Shell-Startskript überschreiben. Geben Sie für zsh ~ / .zshrc ein. Verwenden Sie für bash ~ / .bashrc (und falls Sie noch keines haben, erstellen Sie ein ~ / .bash_profile, das ~ / .bashrc ausführt).

Weitere Informationen zu den einzelnen Umgebungswerten für das Gebietsschema finden Sie unter x-man-page: // 1 / locale.

Wenn Sie es jedoch lediglich unset LANGauf "C" setzen oder setzen, gilt dies normalerweise für alle Ihre Shells und Programme, wohingegen Sie wahrscheinlich die meiste Zeit UTF-8 verwenden möchten und Terminal die entsprechenden Gebietsschemavariablen festlegen soll. um ein Höchstmaß an Zusammenarbeit, Treue und Funktionalität zu erreichen.

Wenn Sie diesen Weg einschlagen, sollten Sie Code schreiben, um die Anfangswerte zu bearbeiten, anstatt sie zu ersetzen, damit Sie die Codierungsinformationen ("UTF-8") beibehalten und lediglich die Sprache auf Englisch setzen. anstatt die Variablen auf "C" zu setzen.

Dies funktioniert beispielsweise in zsh und bash:

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

Wenn LANG="lt_LT.UTF-8", ändert sich dies zu LANG="en_US.UTF-8". Ich habe nicht zur wgetVerfügung, um dies zu testen, aber dies sollte ausreichen.

Wenn Sie dies auf diese Weise tun, bedeutet dies, dass Sie die Einstellung für die Zeichencodierung in Terminal nicht überschreiben, wenn Sie sie in Ihrem Shell-Startskript ändern.

Chris Page
quelle
Schön gemacht; Um den LANGBefehl zur Neudefinition zu verallgemeinern : echo ${LANG/*./en_US.}Ersetzt den aktuellen Kulturnamen, en_US unabhängig davon, was er ist. arbeitet bash, ksh, zsh.
mklement0
7

Es ist hier gesetzt ...

Bildbeschreibung hier eingeben

Wenn Sie mehr oder weniger Optionen im Pulldown wünschen, gehen Sie zur Registerkarte Kodierungen , um noch mehr von der Prämie zu sehen.

bmike
quelle
3
Auf os x ist es ~ / .bash_profile, nicht bashrc. Das hat die Leute beim Lesen von Online-Tutorials sehr verwirrt.
Enrico Susatyo
Meine Güte, verdammt - danke, dass du das verstanden hast. Ich bin sogar auf die Open-Source-Seite gegangen und habe überprüft, ob Apple Änderungen an Gnu Bash vorgenommen hat und habe immer noch einen Fehler gemacht. (Bearbeitung meiner Antwort - danke @ the_great_monkey)
bmike
4
Terminal erstellt Login-Shells, auf denen ~ / .bash_profile ausgeführt wird. Die meisten Benutzeranpassungen sollten jedoch in ~ / .bashrc abgelegt werden, damit sie auch für nicht angemeldete Shells (z. B. Sub-Shells) gelten, und ~ / .bash_profile sollte ~ / .bashrc ausführen, damit dies für Anmeldeshells gilt. ~ / .bash_profile ist im Allgemeinen größtenteils leer und enthält nur Code speziell für Anmeldeshells der obersten Ebene, die der Benutzer nicht für Sub-Shells ausführen möchte.
Chris Seite
1
"Ein kurzer Blick auf die Manpage zeigt, dass die Shell diesen Wert bei jeder Anmeldung festlegt." Die Bash-Manpage gibt dies an, aber Terminal legt den Anfangswert fest. Ich habe noch nie gesehen, dass Bash sie festgelegt hat, wenn sie noch nicht festgelegt waren. Wenn ich die Voreinstellung "Gebietsschema festlegen ..." deaktiviere, wird keine der Variablen festgelegt, und das Gebietsschema wird LANG=angezeigt, und die anderen Werte werden standardmäßig auf "Alle" gesetzt "C".
Chris Seite
2

Ich habe dieses Problem gelöst, indem ich die Sprache in meiner .profile-Datei festgelegt habe, die beim Starten eines Terminals geladen wird.

export LANG="en_US.UTF-8"
export LC_ALL="POSIX"
user42973
quelle
LC_ALLüberschreibt LANG, so dass Ihr erster Befehl keine Wirkung hat.
mklement0
Ist auch POSIXäquivalent zu Cund kommt mit Unicode überhaupt nicht klar.
Sebastian Graf
1

Wenn Sie Ihre Lokalisierung nicht vollständig mit LC_LANG ändern möchten, sondern nur Systemnachrichten in Englisch haben möchten, sollten Sie dies einfach festlegen

LC_COLLATE=C    (to have standard sorting in ls, etc)
LC_CTYPE=en_US.UTF-8
dmpogo
quelle
Diese LC_MESSAGESVariable steuert, in welcher Sprache Nachrichten ausgegeben werden sollen (falls installiert).
mklement0
0

Unter Verwendung eines Debian-Servers in Französisch und eines MacSox-Bash-Clients musste ich dies "nur" meinem .bash_profile im Benutzerverzeichnis von MacOSX hinzufügen:

export LANG = fr_FR.UTF-8

Gelöst

XiangXing
quelle
0

Die anderen Antworten sind korrekt, dh sie beziehen sich auf die TerminalEinstellung zum Festlegen von Umgebungsvariablen für das Gebietsschema beim Start und unter Verwendung der Shell /etc/profile. Es gibt jedoch noch einen anderen Weg, den es zu verstehen gilt - insbesondere, wenn das "Problem" durch eine Remote- sshAnmeldung auftritt.

OpenSSH (wie es unter Linux, BSD und macOS verwendet wird) kann Umgebungsvariablen von der Client-Umgebung an die Shell senden, die der Server startet. Dies ist nur dann der Fall, wenn der Client für das Senden und der Server für das Akzeptieren konfiguriert ist. Der Client ( ~/.ssh/config) müsste:

SendEnv LANG LC_*

und der Server ( /etc/ssh/sshd_config) würde brauchen:

AcceptEnv LANG LC_*

Wenn beides vorhanden ist, wird das lokale des Clients in die Anmeldeshell auf dem SSH-Server übertragen:

$ 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=

Die erforderliche Servereinstellung ist in Snow Leopard nicht standardmäßig vorhanden . es ist dort auf Sierra . Denken Sie daran, den SSH-Server nach dem Ändern neu zu starten /etc/sshd_config!!!

starfry
quelle