Корисна відповідь Лекенштейна чудово працює, якщо ви хочете перейти на англійську мову США на вимогу, як вимагає ОП, але якщо ви хочете перейти на іншу мову на вимогу , потрібно більше роботи.
Перш ніж почати, ви повинні встановити таблиці повідомлень з sudo apt-get install language-pack-<lang-tag>
, де <lang-tag>
є простим підтегом мови RTF 5646 , наприклад es
для іспанської.
Довідкова інформація
ГНУ GetText заснованих утиліти дають пріоритет до нестандартної LANGUAGE
змінної середовищі [1]
над POSIX певної локалі змінну середу LC_ALL
, LC_MESSAGES
і LANG
(в зазначеному порядку).
З огляду на , що LANGUAGE
за замовчуванням встановлюються в системах Ubuntu [2] , а саме до підрядку з LANG
значення , яке відображає або простий тег мови (наприклад, es
для іспанської мови) або мови область тегів (наприклад, de_DE
для варіанта Німеччині німецького), ви повинні скасувати або змінити LANGUAGE
, щоб повідомлення іншої мови набули чинності. [3]
Варіант 1: Встановити LANGUAGE
Приклад : перехід на іспанські ( es
) повідомлення ad-hoc:
$ LANGUAGE=es ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio
Примітка.es
Достатній простий тег мови, такий як , але ви можете додати ідентифікатор регіону (наприклад, es_AR
для Аргентини) і навіть суфікс шаблону (наприклад, es_AR.UTF-8
).
Однак локалізовані повідомлення можуть існувати лише на мовному рівні, а резервна копія полягає у використанні повідомлень, які відповідають мовній частині ( es
у цьому випадку).
Варіант 2: Зніміть LANGUAGE
і встановітьLC_ALL
Це альтернативне рішення undefines LANGUAGE
, а потім використовує POSIX змінну мовного середовища , LC_ALL
щоб встановити неявно 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
Це рішення має перевагу в налаштуванні всіх аспектів локалізації на вказану локаль (наприклад, LC_TIME
формати дати / часу), а також (неявно) LC_MESSAGES
також інформує програми, що не належать до GNU, бажаною мовою.
Зверніть увагу, наскільки LC_ALL
потрібне точне повне ім’я мови, включаючи суфікс шаблону, щоб бути ефективним ( es_ES.UTF-8
) (на відміну від цього LANGUAGE
, для якого достатньо простого тегу мови (як es
)). Те саме стосується налаштування LC_MESSSAGES
і LANG
. Вказівка недійсного / невстановленого імені локальної локалізації спричиняє запас локалі POSIX, а отже, англійську мову США.
Виноски
[1] Причини , по яким відповідь Lekensteyn працює навіть без зняття з охорони / перевизначення LANGUAGE
є виняток : якщо (ефективне) LC_MESSAGES
значення (зазвичай встановлюється побічно через LANG
або LC_ALL
) або C
чи (його синонім) POSIX
, що значення дотримується, незалежно від вартості LANGUAGE
, якщо хто-небудь. І навпаки, якщо (ефективним) LC_MESSAGES
значенням є будь-яка інша, конкретна локаль, LANGUAGE
має перевагу.
[2] Це стосується належних Ubuntu , але не обов'язково інших ароматів ; Lekensteyn стверджує , що Kubuntu це НЕ встановлено LANGUAGE
.
Можна стверджувати, що LANGUAGE
повинно НЕ бути встановлено за замовчуванням, якщо врахувати , що в її відсутність, LC_MESSAGES
значення випливає з LANG
значення (яке визначає поточний стандарт), дотримується.
[3] Ви також можете використовувати цей підхід для переходу до [американської] англійської мови, призначивши LANGUAGE=C
або LANGUAGE=POSIX
(як альтернативу, LANG=C
/ LANG=POSIX
), хоча мені незрозуміло, чи це активно розпізнається чи просто резервний механізм, враховуючи, що ці значення не відповідають не починати з мовного тегу; можливо, кращий вибір був би en_US
.
[4] Там в край випадок , коли цей підхід не працює: Спроба викликати виконуваний файл з шляху - будь то відносне або абсолютне - не переходить на зазначену мову, в той час як саме ім'я файлу робить:
LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility
робить НЕ роботу (виводить повідомлення у поточному локалі), тоді як
LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility
так (видає іспанське повідомлення про помилку).
Якщо хтось знає, чому і чи є для цього вагомі причини, повідомте нам.
LANG
чиLANG_ALL
не працюєLANGUAGE
. Див. Чому перевизначення змінної середовища LANG не змінює мову для мене?