Tymczasowo zmień język komunikatów / ostrzeżeń / błędów terminala

22

Wiadomości w moim terminalu są domyślnie wyświetlane w języku rosyjskim, który jest moim językiem ojczystym.

Przez chwilę chcę, żeby były po angielsku (np. Aby wkleić na forach), a następnie wróciły do ​​domyślnego języka.

Jak mogę zmienić przełącznik i wrócić z powrotem za pomocą bash?

zabiera
źródło

Odpowiedzi:

23

Dostępnych jest kilka zmiennych środowiskowych do zmiany ustawień języka. Możesz wyświetlić bieżące ustawienia regionalne, wykonując localepolecenie. Aby zmienić wszystkie ustawienia regionalne na angielski, użyj LANG=C. To Custawienie regionalne jest zawsze dostępne bez instalowania dodatkowych pakietów językowych. (Aby tymczasowo zmienić język na inny niż angielski, zobacz post @ mklement0 ).

Przykłady:

Wykonanie polecenia z domyślnymi ustawieniami języka i wydrukowanie bieżących ustawień regionalnych:

$ /nonexistent
bash: /nonexistent: Bestand of map bestaat niet
$ locale
LANG=nl_NL.UTF-8
LANGUAGE=
LC_CTYPE="nl_NL.UTF-8"
LC_NUMERIC="nl_NL.UTF-8"
LC_TIME="nl_NL.UTF-8"
LC_COLLATE="nl_NL.UTF-8"
LC_MONETARY="nl_NL.UTF-8"
LC_MESSAGES="nl_NL.UTF-8"
LC_PAPER="nl_NL.UTF-8"
LC_NAME="nl_NL.UTF-8"
LC_ADDRESS="nl_NL.UTF-8"
LC_TELEPHONE="nl_NL.UTF-8"
LC_MEASUREMENT="nl_NL.UTF-8"
LC_IDENTIFICATION="nl_NL.UTF-8"
LC_ALL=

Tymczasowo zastąp język jednego programu i pokaż, że jest on naprawdę tymczasowy:

$ LANG=C ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ ls /nonexistent
ls: kan geen toegang krijgen tot /nonexistent: Bestand of map bestaat niet

Zmień ustawienia regionalne dla wszystkich poleceń wykonanych w bieżącej powłoce i ponownie dołącz proofy:

$ LANG=C
$ ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ locale
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
Lekensteyn
źródło
6
Dla innych użytkowników, którzy mają problemy z uruchomieniem tego - ustawienie LANGlub LANG_ALLdla mnie nie działa, ale tak LANGUAGEjest. Zobacz Dlaczego przesłanianie zmiennej środowiskowej LANG nie zmienia dla mnie języka?
gertvdijk
1
@gertvdijk: Dzięki za to; powodem, dla którego ta odpowiedź działa nawet bez ustawiania, LANGUAGEjest wyjątek : GNU gettext daje pierwszeństwo LANGUAGEwartości, z wyjątkiem sytuacji, gdy (efektywna) LC_MESSAGESwartość (zwykle ustawiana pośrednio przez LANGlub LC_ALL) to albo C(jej synonim) POSIX. Zauważ też, że LANGUAGEzdarza się, że w tej odpowiedzi jest rozbrojony, podczas gdy jest ustawiony domyślnie, a jeśli jest ustawiony, musisz go przesłonić , aby przełączyć się na język określonego ustawienia narodowego (w przeciwieństwie do „C” / „POSIX”), który jest co znalazłeś
mklement0
Twoja odpowiedź działa świetnie, gdy przechodzisz do ustawień regionalnych „C” (z wiadomościami w języku angielskim w USA, zgodnie z wymaganiami), ale nie będzie działać dla innych ustawień regionalnych, chyba że LANGUAGEzostanie jawnie rozbrojone lub zastąpione. Biorąc pod uwagę ogólny tytuł pytania, istnieje prawdopodobieństwo, że ludzie znajdą tę odpowiedź, chcąc również przejść na język inny niż angielski, więc rozważ dodanie tej informacji do swojej odpowiedzi.
mklement0
@ mklement0 Biorąc pod uwagę kontekst pytania (publikowanie angielskich komunikatów o błędach), uważam, że aktualny post jest wystarczający. Możesz dodać kolejną odpowiedź, aby wyjaśnić szczegóły, LANGUAGEjeśli chcesz :)
Lekensteyn
Dodałem własną odpowiedź , jak zasugerowałeś. Jeśli zgadzasz się z moją oceną, że przyszli czytelnicy mogą przyjść tutaj, aby przejść na dowolny język (jak już kilka osób już aktywnie wskazało), dodaj link do mojej odpowiedzi na twoje pytanie. Poza tym sugeruję zmianę wartości LANGUAGEwyjściowej próbki na nl, która jest faktyczną wartością domyślną, gdy twoje ustawienia regionalne są nl_NL.UTF-8.
mklement0
9

Pomocna odpowiedź Lekensteyn działa świetnie, jeśli chcesz przejść na angielski w USA na żądanie, zgodnie z żądaniem PO, ale jeśli chcesz przejść na inny język na żądanie , potrzeba więcej pracy.

Przed rozpoczęciem należy zainstalować tabele komunikatów z sudo apt-get install language-pack-<lang-tag>, gdzie <lang-tag>jest prostą podtag języka RTF 5646 , na przykład esdla hiszpańskiego.

Podstawowe informacje

GNU gettext narzędzia opartych daje pierwszeństwo niestandardowych LANGUAGEzmiennej środowiska [1] na POSIX określonych kodowej zmienne środowiska LC_ALL, LC_MESSAGESi LANG(w tej kolejności).

Biorąc pod uwagę, że LANGUAGEjest ustawiony domyślnie w systemach Ubuntu [2] , a mianowicie do fragmentu o LANGwartości, która odzwierciedla zarówno tag prosty język (np esna hiszpańskim) lub tag language-region (np de_DEdla wariantu Niemczech niemiecki), musisz wyłączyć lub zastąpić LANGUAGE, aby komunikaty w innym języku zaczęły obowiązywać. [3]

Opcja 1: Ustaw LANGUAGE

Przykład : Przełącz na eswiadomości hiszpańskie ( ) ad-hoc:

$ LANGUAGE=es ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio

Uwaga : eswystarczy prosty tag języka, np. , Ale możesz dodać identyfikator regionu (np. es_ARDla Argentyny), a nawet sufiks zestawu znaków (np es_AR.UTF-8.).
Jednak zlokalizowane wiadomości mogą istnieć tylko na poziomie języka , a awarią jest użycie wiadomości pasujących do części językowej ( esw tym przypadku).

Opcja 2: Wyłącz LANGUAGEi ustawLC_ALL

To alternatywne rozwiązanie undefines LANGUAGE pierwszy, a następnie wykorzystuje zmienną środowiskowe w POSIX LC_ALLniejawnie ustawione LC_MESSAGES[4] :

$ LANGUAGE= LC_ALL=es_ES.UTF-8 ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio

To rozwiązanie ma tę zaletę, że ustawia wszystkie aspekty lokalizacji na określone ustawienia regionalne (takie jak LC_TIMEformaty daty / godziny), a ustawienie (domyślnie) LC_MESSAGESinformuje również programy inne niż GNU o pożądanym języku.

Zwróć uwagę, że LC_ALLwymagana jest dokładna, pełna nazwa ustawień regionalnych, w tym sufiks zestawu znaków, aby była skuteczna ( es_ES.UTF-8) (inaczej niż w przypadku LANGUAGE, gdy wystarczy prosty tag języka (jak es)). To samo dotyczy ustawienia LC_MESSSAGESi LANG. Podanie niepoprawnej / niezainstalowanej nazwy ustawień regionalnych powoduje powrót do ustawień narodowych POSIX, a zatem w języku angielskim.


Przypisy

[1] Powody, dla których odpowiedź Lekensteyn dzieła nawet bez wyłączania / nadrzędne LANGUAGEJEST wyjątek : jeżeli (skuteczne) LC_MESSAGESwartości (zwykle ustawiony pośrednio LANGlub LC_ALL) jest albo Cczy (jego synonim) POSIX, wartość ta jest spełniony, niezależnie od wartości LANGUAGE, Jeśli w ogóle. I odwrotnie, jeśli (skuteczną) LC_MESSAGESwartością jest jakikolwiek inny, specyficzny język, LANGUAGEma pierwszeństwo.

[2] Dotyczy to właściwego Ubuntu , ale niekoniecznie innych smaków ; Lekensteyn stwierdza, że Kubuntu czy nie ustawić LANGUAGE.
Prawdopodobnie nieLANGUAGE powinien być ustawiony domyślnie, biorąc pod uwagę, że w przypadku jego braku przestrzegana jest wartość implikowana przez wartość (która określa bieżące ustawienia narodowe). LC_MESSAGESLANG

[3] Możesz także użyć tego podejścia, aby przejść na [US] angielski, przypisując jeden LANGUAGE=Club LANGUAGE=POSIX(jako alternatywę dla, LANG=C/ LANG=POSIX), chociaż nie jestem pewien, czy jest to aktywnie rozpoznawane, czy po prostu mechanizm rezerwowy , biorąc pod uwagę, że te wartości nie 'zacząć od znacznika języka ; być może byłby lepszy wybór en_US.

[4] Istnieje AN krawędź przypadek, w którym to podejście nie jest praca: Próby wywołania wykonywalny z toru - czy względny lub bezwzględny - nie przełączy się na określonym języku, podczas gdy sama nazwa pliku nie:
LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utilitynie nie pracy (wysyła wiadomość w bieżących ustawieniach narodowych), podczas gdy
LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utilityrobi (wyświetla hiszpański komunikat o błędzie).
Jeśli ktoś wie, dlaczego i czy jest ku temu dobry powód, daj nam znać.

mklement0
źródło
Porada dla @ wjandrea za pomoc w tworzeniu tego postu.
mklement0