Przełącz język wyjściowy poleceń z języka ojczystego na angielski

84

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)?

BuZZ-dEE
źródło
5
Jest to nieco mylące. Ludzie tak naprawdę nie muszą tego robić . (Jeśli uważasz, że powinniśmy wymagać, aby operatorzy obciążali się w ten sposób, prześlij na meta, zanim ktoś to zrobi.) Mogą się LANGtak 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.
Eliah Kagan
4
@EliahKagan tak, masz rację, ale myślę, że jest to przydatne.
BuZZ-dEE,
2
Zgadzam się, ludzie mogą to zrobić, a dobrze, że opublikowałeś to pytanie! Jednak ważne jest, ludzie wiedzą, że nie wymagają je, aby to zrobić (ale nie wymagają, pytania i odpowiedzi sami być napisany w języku angielskim).
Eliah Kagan
8
@EliahKagan Wręcz przeciwnie, bardzo ważne jest, aby publikować rzeczywiste komunikaty o błędach, a bardzo dobrze jest publikować je w języku angielskim, ponieważ to właśnie mogą rozpoznać i przetestować główni odbiorcy tej witryny. (I nigdy, nigdy nie wysyłaj ponownie przetłumaczonego komunikatu o błędzie. Zawsze kopiuj-wklej, ponieważ dokładne sformułowanie, interpunkcja, a nawet odstępy mogą być znaczące.)
Gilles

Odpowiedzi:

74

export LC_ALL=Cwystarczy. 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_ALLzmienną:

unset LC_ALL
Eric Carvalho
źródło
13

funkcja bash dla terminala

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 ENaby 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, LANGUAGEaby uniknąć misbehaviours niektórych programów.

Dostosowanie do twojego języka

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'
H.-Dirk Schmitt
źródło
Skrypt wymaga zmiany dla innego języka niż niemiecki (DE)? Poszukuję rozwiązania niezależnego od języka ojczystego.
BuZZ-dEE,
@ BuZZ-dEE: Możesz (i prawdopodobnie powinien) łatwo to dostosować, wyrzucając casei 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 -aaby upewnić się, że żądane ustawienia narodowe są rzeczywiście zainstalowane.
maska ​​bitowa
@ buzz-dee: patrz zaktualizowana odpowiedź
H.-Dirk Schmitt
7

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 .bashrcplik 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:

BuZZ-dEE
źródło
Ustawienie nieLANG jest wystarczające, aby zaryzykować cały wynik.
maska ​​bitowa
@bitmask jest to: LANG=en_US.UTF-8 && LC_ALL=en_US.UTF-8 && LANGUAGE=en_US.UTF-8 bashlepiej?
BuZZ-dEE,
2
Tak powinno być LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LANGUAGE=en_US.UTF-8 $SHELL.
maska ​​bitowa
Tylko LC_ALL = Bash działa dla mnie.
upłynnienie
5

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.
  • Kategoria zmienne specyficzne literę 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.

Gilles
źródło
Nie używaj JĘZYKA? Nie wiem, na jakim systemie operacyjnym jesteś, ale w Ubuntu LANGUAGE jest domyślnie używany przez cały czas za pośrednictwem instalatora i różnych GUI. Jakie to są błędy? Przeczytałem również odpowiedź, do której linkujesz , i nawet jeśli zawiera przydatne ogólne informacje, zalecenie to po prostu nie jest dobrą radą na pulpicie Ubuntu.
Gunnar Hjalmarsson
@GunnarHjalmarsson Głównym problemem LANGUAGEjest to, że ma on pierwszeństwo przed LC_ALL, co powoduje błędy, ponieważ programy ustawiają się tak, LC_ALLaby uzyskać przewidywalne dane wyjściowe, a następnie gubią się, ponieważ nie uzyskują oczekiwanych danych wyjściowych.
Gilles
Cóż, interfejsy GUI Ubuntu konsekwentnie ustawiają zarówno LANG, jak i LANGUAGE (a LC_MESSAGES dziedziczy po LANG), co powinno zapobiec tego rodzaju pomyłkom. Powodem, dla którego ustawiono JĘZYK, jest to, że obsługa języków ma interfejs do ustawiania listy priorytetów.
Gunnar Hjalmarsson
@GunnarHjalmarsson Wiem. Ustawienie LANGUAGEjest 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.
Gilles
Odpowiedzi tutaj nie są właściwym miejscem do debatowania nad zagadnieniami projektowymi. Takie dyskusje są lepiej prowadzone np. Podczas ubuntu-devel-dyskusji . Aby być pomocnym dla użytkowników, naprawdę uważam, że odpowiedź powinna opierać się na obecnym projekcie, niezależnie od tego, czy uważasz, że jest optymalny, czy nie. I pamiętaj, że „niektóre wersje” są wszystkimi obsługiwanymi wersjami pulpitu i pochodnych Ubuntu, być może z wyjątkiem Kubuntu.
Gunnar Hjalmarsson
1

Najprościej jest otworzyć terminal, naciskając klawisze Alt + F2 i uruchamiając następującą komendę:

env LANGUAGE=en gnome-terminal
Gunnar Hjalmarsson
źródło
1

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.

https://help.ubuntu.com/community/Locale

rofrol
źródło
Nie wiem, dlaczego ta odpowiedź została odrzucona. Tak, przydałoby się więcej wyjaśnień, ale w przeciwieństwie do przyjętej odpowiedzi, pokazuje, jak uczynić ją stałą i jest bardziej szczegółowa.
Xerus
0
  1. Kliknij ikonę koła zębatego po lewej stronie (ustawienia systemowe w panelu Unity)
  2. Kliknij opcję Obsługa języków
  3. Wybierz formaty regionalne
  4. Ustaw „Wyświetlanie liczb, dat i kwoty w walucie ...” na angielski.
  5. Wyloguj się i zaloguj ponownie (Wymagane!)

Gotowy.

Robin Hsu
źródło