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 es
dla hiszpańskiego.
Podstawowe informacje
GNU gettext narzędzia opartych daje pierwszeństwo niestandardowych LANGUAGE
zmiennej środowiska [1]
na POSIX określonych kodowej zmienne środowiska LC_ALL
, LC_MESSAGES
i LANG
(w tej kolejności).
Biorąc pod uwagę, że LANGUAGE
jest ustawiony domyślnie w systemach Ubuntu [2] , a mianowicie do fragmentu o LANG
wartości, która odzwierciedla zarówno tag prosty język (np es
na hiszpańskim) lub tag language-region (np de_DE
dla 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 es
wiadomości hiszpańskie ( ) ad-hoc:
$ LANGUAGE=es ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio
Uwaga : es
wystarczy prosty tag języka, np. , Ale możesz dodać identyfikator regionu (np. es_AR
Dla 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 ( es
w tym przypadku).
Opcja 2: Wyłącz LANGUAGE
i ustawLC_ALL
To alternatywne rozwiązanie undefines LANGUAGE
pierwszy, a następnie wykorzystuje zmienną środowiskowe w POSIX LC_ALL
niejawnie 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_TIME
formaty daty / godziny), a ustawienie (domyślnie) LC_MESSAGES
informuje również programy inne niż GNU o pożądanym języku.
Zwróć uwagę, że LC_ALL
wymagana 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_MESSSAGES
i 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 LANGUAGE
JEST wyjątek : jeżeli (skuteczne) LC_MESSAGES
wartości (zwykle ustawiony pośrednio LANG
lub LC_ALL
) jest albo C
czy (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_MESSAGES
wartością jest jakikolwiek inny, specyficzny język, LANGUAGE
ma 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_MESSAGES
LANG
[3] Możesz także użyć tego podejścia, aby przejść na [US] angielski, przypisując jeden LANGUAGE=C
lub 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_utility
nie nie pracy (wysyła wiadomość w bieżących ustawieniach narodowych), podczas gdy
LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility
robi (wyświetla hiszpański komunikat o błędzie).
Jeśli ktoś wie, dlaczego i czy jest ku temu dobry powód, daj nam znać.
LANG
lubLANG_ALL
dla mnie nie działa, ale takLANGUAGE
jest. Zobacz Dlaczego przesłanianie zmiennej środowiskowej LANG nie zmienia dla mnie języka?