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ć.
LANGlubLANG_ALLdla mnie nie działa, ale takLANGUAGEjest. Zobacz Dlaczego przesłanianie zmiennej środowiskowej LANG nie zmienia dla mnie języka?