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

Ich habe es wgetzum ersten Mal nach der Installation von Lion OS X verwendet und festgestellt, dass wget in meine Muttersprache lokalisiert wurde. Das Ausführen setdes Befehls im Terminal zeigte, dass meine LANGVariable meine Landessprache darstellt. Wo kann ich dies ändern oder wgetdiese Einstellung ignorieren?

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) auf Litauisch. Das ist mein Problem. Ich würde es gerne wieder auf Englisch bringen.

Ich verwende zshals meine Login-Shell.

Wo genau liegt das Problem wget? Und was wird localeangezeigt und ist es dasselbe, was Sie von Ihrer Sprachauswahl im Systemeinstellungsfenster Sprache & Text erwarten?

Antworten (6)

Standardmäßig stellt Terminal die Gebietsschema-Umgebungsvariablen so ein, dass sie mit der aktuell ausgewählten Sprache und den Zeit-/Datums-/Zahlenformaten übereinstimmen, die Terminal verwendet und die über ausgewählt werden

Systemeinstellungen > Sprache und Text

(Das 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 Liste der Sprachen zu ziehen, dann das Terminal zu öffnen und dann Litauisch wieder an den Anfang zu verschieben. Dann ist nur Terminal auf Englisch. Es wird jedoch auf Litauisch zurückgesetzt, wenn Sie Terminal beenden und neu starten.

Ein hartnäckiger Ansatz besteht darin, Terminal anzuweisen, die lokalen Umgebungsvariablen nicht zu setzen, indem es ausgeschaltet wird

Terminal > Einstellungen > Einstellungen > [Profil] > Erweitert > Lokale Umgebungsvariablen beim Start festlegen

Dann wird das Gebietsschema standardmäßig auf "C" ohne angegebene Sprache eingestellt, und die meisten Programme werden dann standardmäßig auf Englisch eingestellt.

Beachten Sie, dass das Deaktivieren bedeutet, dass einige Programme nicht wissen, welche Zeichencodierung Terminal verwendet, und davon ausgehen, dass es sich nur um ASCII oder ISO-Latin-1 handelt. Wenn also Terminal UTF-8 (Standardeinstellung) verwendet, können sich diese Programme wie gewünscht verhalten oder auch nicht.

Wenn es hauptsächlich um wgetgeht, empfehle ich Ihnen, eine Kopie des Standardeinstellungsprofils zu erstellen, die Gebietsschemaeinstellung in Ihrem benutzerdefinierten Profil zu deaktivieren und dieses Profil nur zu verwenden, wenn Sie verwenden wget, damit Sie UTF-8 weiterhin mit voller Unterstützung verwenden können bei Verwendung anderer Programme die Standardeinstellungen verwenden.

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

Unter x-man-page://1/locale finden Sie weitere Informationen zu den einzelnen Locale-Umgebungswerten.

Wenn Sie es jedoch nur unset LANGauf "C" setzen oder festlegen würden, würde dies normalerweise für alle Ihre Shells und Programme gelten, während Sie die meiste Zeit wahrscheinlich UTF-8 verwenden und Terminal die Gebietsschemavariablen so einstellen möchten, dass sie übereinstimmen. um ein Höchstmaß an Zusammenarbeit, Treue und Funktionalität zu erreichen.

Wenn Sie diesen Weg gehen, schlage ich daher vor, dass Sie Code schreiben, um die Anfangswerte zu bearbeiten, anstatt sie zu ersetzen, sodass Sie die Codierungsinformationen ("UTF-8") beibehalten und lediglich die Sprache auf Englisch zwingen. 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}

Wann LANG="lt_LT.UTF-8"ändert sich dies zu LANG="en_US.UTF-8". Ich habe keine wgetMöglichkeit, dies zu testen, aber das sollte ausreichen.

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

Schön gemacht; LANGUm den Neudefinitionsbefehl zu verallgemeinern : echo ${LANG/*./en_US.}Ersetzt den aktuellen Kulturnamen en_USunabhängig davon, was er ist; arbeitet in bash, ksh, zsh.

Hier ist eingestellt...

Geben Sie hier die Bildbeschreibung ein

Wenn Sie mehr oder weniger Optionen im Pulldown-Menü wünschen, gehen Sie zur Registerkarte „ Codierungen “, um noch mehr von der Prämie anzuzeigen.

Unter OS X ist es ~/.bash_profile, nicht bashrc. Die Leute waren dadurch sehr verwirrt, als sie Online-Tutorials lasen.
Meine Güte, verdammt noch mal – danke, dass du das aufgefangen hast. Ich bin sogar auf die Open-Source-Seite gegangen und habe nachgesehen, ob Apple Änderungen an Gnu Bash vorgenommen hat und es immer noch falsch gemacht hat. (Bearbeite meine Antwort - danke @the_great_monkey )
Terminal erstellt Login-Shells, die ~/.bash_profile ausführen. Die meisten Benutzeranpassungen sollten jedoch in ~/.bashrc platziert werden, damit sie auch für Nicht-Login-Shells gelten (z. B. Sub-Shells), und ~/.bash_profile sollte ~/.bashrc ausführen, damit es für Login-Shells gilt. ~/.bash_profile ist im Allgemeinen größtenteils leer und enthält nur Code speziell für Anmelde-Shells der obersten Ebene, den der Benutzer nicht für Sub-Shells ausführen möchte.
"Ein kurzer Blick auf die Manpage zeigt, dass die Shell diesen Wert bei jeder Anmeldung festlegt" Die Bash-Manpage sagt das, aber Terminal setzt den Anfangswert, und ich habe noch nie gesehen, dass Bash sie gesetzt hat, wenn sie nicht bereits gesetzt waren. Wenn ich die Einstellung „Gebietsschema-Umgebung festlegen…“ ausschalte, wird keine der Variablen festgelegt, und das Gebietsschema wird LANG=angezeigt, und die anderen Werte sind alle standardmäßig auf "C".

Ich habe dieses Problem gelöst, indem ich die Sprache in meiner .profile-Datei eingestellt habe, die geladen wird, wenn ich ein Terminal starte.

export LANG="en_US.UTF-8"
export LC_ALL="POSIX"
LC_ALLüberschreibt LANG, sodass Ihr erster Befehl keine Wirkung hat.
Auch POSIXist äquivalent zu Cund das kommt mit Unicode überhaupt nicht zurecht.

Wenn Sie Ihre Lokalisierung nicht vollständig mit LC_LANG ändern möchten, sondern nur Systemmeldungen auf Englisch haben möchten, sollten Sie dies einfach einstellen, basierend auf Linux-Erfahrung

LC_COLLATE=C    (to have standard sorting in ls, etc)
LC_CTYPE=en_US.UTF-8
Es ist die LC_MESSAGESVariable, die steuert, in welcher Sprache Meldungen ausgegeben werden sollen (falls installiert).

Die anderen Antworten sind korrekt, dh über die TerminalEinstellung für das Festlegen von Umgebungsvariablen beim Start und die Verwendung der /etc/profile. Es gibt jedoch noch eine andere Möglichkeit, die es wert ist, verstanden zu werden - insbesondere, wenn das "Problem" aufgrund einer Remote- sshAnmeldung auftritt.

OpenSSH (wie es unter Linux, BSD und macOS verwendet wird) kann Umgebungsvariablen aus der Umgebung des Clients an die Shell senden, die der Server startet. Dies geschieht nur, wenn der Client so konfiguriert ist, dass er sie sendet, und der Server so konfiguriert ist, dass er sie akzeptiert. Der Client ( ~/.ssh/config) müsste Folgendes haben:

SendEnv LANG LC_*

und der Server ( /etc/ssh/sshd_config) würde Folgendes benötigen:

AcceptEnv LANG LC_*

Wenn beide vorhanden sind, wird das lokale des Clients in die Anmelde-Shell auf dem SSH-Server weitergegeben:

$ 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 bei Snow Leopard nicht standardmäßig vorhanden ; es ist dort auf Sierra . Denken Sie daran, den SSH-Server nach der Änderung neu zu starten /etc/sshd_config!!!

Mit einem Debian-Server auf Französisch und einem Macsox-Bash-Client musste ich dies "nur" zu meinem .bash_profile im Benutzerverzeichnis von macosx hinzufügen:

export LANG=fr_FR.UTF-8

Gelöst.