Jak mogę zmienić język wyjściowy komend z mojego języka ojczystego na angielski, aby móc zadawać pytanie Ask Ubuntu z angielskimi danymi wyjściowymi (komunikaty o błędach)?
Jak mogę zmienić język wyjściowy komend z mojego języka ojczystego na angielski, aby móc zadawać pytanie Ask Ubuntu z angielskimi danymi wyjściowymi (komunikaty o błędach)?
Odpowiedzi:
export LC_ALL=C
wystarczy. Wszystkie kolejne polecenia będą w języku angielskim.
Więcej informacji: Co robi „LC_ALL = C”?
Jeśli chcesz powrócić do języka ojczystego, odznacz LC_ALL
zmienną:
unset LC_ALL
Oto moja funkcja bash do przełączania między ustawieniami DE i EN.
Możesz rozszerzyć ten kod o preferowane języki. Aby tego użyć, umieść go w swoim ~/.bashrc
(lub ~/.bash_profile
) -
Zadzwoń za pomocą, _configure_locale EN
aby przejść na angielski.
function _configure_locale() { # [profile]
local profile=${1:-EN}
case ${profile} in
DE|DE_DE|de_DE)
LC_ALL="de_DE.UTF-8"
LANG="de_DE.UTF-8"
LANGUAGE="de_DE:de:en_US:en"
;;
EN|EN_US|en|en_US)
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"
;;
*)
echo "ALERT" "${FUNCNAME}: unknown profile '${profile}'"
;;
esac
LC_PAPER="de_DE.UTF-8"; # independent from locale
LESSCHARSET="utf-8"; # independent from locale
MM_CHARSET="utf-8" # independent from locale
echo "locale settings" "${LANG}";
export LC_ALL LANG LANGUAGE LC_PAPER LESSCHARSET MM_CHARSET
}
W ogóle proponuję zmienić wszystkie 3 zmienne środowiskowe LC_ALL
, LANG
, LANGUAGE
aby uniknąć misbehaviours niektórych programów.
Rozszerzenie kodu na język ojczysty jest dość proste. Możesz znaleźć potrzebne wartości, wywołując następujące polecenie
env |egrep -e 'LC_ALL|LANG'
case
i określając dane wejściowe, aby były zgodne z <lang>_<country>
formatem. Następnie możesz po prostu przejść przez to, zakładając, że UTF-8. Jeśli naprawdę zależy Ci na uporządkowanym rozwiązaniu, prawdopodobnie powinieneś sprawdzić dane wejściowe użytkownika, locale -a
aby upewnić się, że żądane ustawienia narodowe są rzeczywiście zainstalowane.
Otwórz terminal Ctrl+ Alt+ Ti wpisz:
LANG=en_US.UTF-8 bash
lub :
LC_ALL=C bash
Teraz dane wyjściowe terminala są w języku angielskim. Możesz to sprawdzić za pomocą locale
.
Można wykonać polecenie, aby zrobić to na stałealias
. Otwórz .bashrc
plik w preferowanym edytorze i umieść tam następujący kod:
alias basheng='LANG=en_US.UTF-8 bash'
lub :
alias basheng='LC_ALL=C bash'
Uruchom ponownie powłokę Bash. Teraz masz polecenie basheng
. Wpisz go w Bash, aby uzyskać angielską powłokę Bash. Aby opuścić angielski typ powłoki exit
.
Źródło:
LANG
jest wystarczające, aby zaryzykować cały wynik.
LANG=en_US.UTF-8 && LC_ALL=en_US.UTF-8 && LANGUAGE=en_US.UTF-8 bash
lepiej?
LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LANGUAGE=en_US.UTF-8 $SHELL
.
Jest to konfigurowane za pomocą ustawień regionalnych , które można ustawić za pomocą zmiennej środowiskowej. Istnieją cztery warstwy zmiennych; pierwszy z nich ma pierwszeństwo:
LANGUAGE
- nie używaj go, rzadko jest przydatny i może powodować błędy. Niestety niektóre wersje Ubuntu ją ustawiły, więc może być konieczne jej rozbrojenie.LC_ALL
- zastępuje ustawienia specyficzne dla kategorii, przeznaczone głównie do użytku przez programy, które chcą działać w domyślnych ustawieniach narodowych. Nie przeznaczone do użycia jako ustawienia globalne.LC_
: LC_CTYPE
, LC_MESSAGES
, LC_TIME
, ....LANG
- ustawia domyślne ustawienia regionalne dla wszystkich kategorii, które mają być używane w globalnych ustawieniach użytkownika.Wywoływane są „zwykłe” ustawienia regionalne, z nieprzetłumaczonymi wszystkimi komunikatami, domyślnymi formatami czasu i liczb, ASCII jako zestaw znaków itp C
. Ta lokalizacja jest obecna w każdym systemie.
Aby uruchomić program z wiadomościami w języku angielskim, uruchom
unset LANGUAGE; LC_MESSAGES=C myprogram --option
lub
unset LANGUAGE
export LC_MESSAGES=C
myprogram --option
myotherprogram
Aby uruchomić program z wyłączoną lokalizacją, uruchom
env -u LANGUAGE LC_ALL=C myprogram --option
ale uwaga: przełącza to kodowanie znaków na ASCII (więc nie ma Unicode, Latin-1 itp.).
Zobacz, na co mam ustawić lokalizację i jakie są tego konsekwencje? dla bardziej szczegółowego przeglądu ustawień regionalnych.
LANGUAGE
jest to, że ma on pierwszeństwo przed LC_ALL
, co powoduje błędy, ponieważ programy ustawiają się tak, LC_ALL
aby uzyskać przewidywalne dane wyjściowe, a następnie gubią się, ponieważ nie uzyskują oczekiwanych danych wyjściowych.
LANGUAGE
jest jednak złym pomysłem, ponieważ korzyści są bardzo cienkie, podczas gdy błędy mogą być denerwujące i trudne do znalezienia. Masz rację, powinienem wspomnieć o niepokojeniu LANGUAGE
.
Najprościej jest otworzyć terminal, naciskając klawisze Alt + F2 i uruchamiając następującą komendę:
env LANGUAGE=en gnome-terminal
w Twoim ~/.bashrc
unset LC_ALL
export LC_MESSAGES=C
następnie
source ~/.bashrc
Sprawdź to
$ locale
LANG=pl_PL.utf8
LANGUAGE=
LC_CTYPE="pl_PL.utf8"
LC_NUMERIC="pl_PL.utf8"
LC_TIME="pl_PL.utf8"
LC_COLLATE="pl_PL.utf8"
LC_MONETARY="pl_PL.utf8"
LC_MESSAGES=C
LC_PAPER="pl_PL.utf8"
LC_NAME="pl_PL.utf8"
LC_ADDRESS="pl_PL.utf8"
LC_TELEPHONE="pl_PL.utf8"
LC_MEASUREMENT="pl_PL.utf8"
LC_IDENTIFICATION="pl_PL.utf8"
LC_ALL=
Dlaczego najpierw rozbroić?
LC_ALL Zastępuje indywidualne ustawienia LC_ *: jeśli ustawiono LC_ALL, żadne z poniższych nie ma żadnego efektu.
LANG
tak zmienić i to może pomóc, ale nie wymagamy, aby skopiowane komunikaty o błędach były w języku angielskim. Wymagamy, aby autor napisał po angielsku (chociaż zwykle tłumaczymy to zamiast zamykających pytania). Tak więc pytanie napisane w języku angielskim z tekstem terminalu hiszpańskiego jest w porządku, natomiast pytanie napisane w języku hiszpańskim z tekstem terminalu w języku angielskim nie jest.