Полезный ответ Лекенштейна отлично работает, если вы хотите переключиться на американский английский по требованию, как того требует ОП, но если вы хотите переключиться на другой язык по требованию , требуется больше работы.
Перед запуском необходимо установить таблицы сообщений с sudo apt-get install language-pack-<lang-tag>, где <lang-tag>это простой RTF 5646 язык Subtag , например, esна испанском языке.
Справочная информация
Утилиты на основе gettext в GNU отдают приоритет нестандартной LANGUAGEпеременной среды [1]
над переменными среды LC_ALL, определяемыми POSIX 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
Это альтернативное решение сначала определяет неопределенность LANGUAGE , а затем использует LC_ALLнеявную переменную окружения POSIX для установки 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] Причины, по которым ответ Лекенштейна работает даже без отмены или переопределения, LANGUAGEявляются исключением : если (эффективное) LC_MESSAGESзначение (обычно устанавливаемое косвенно через LANGили LC_ALL) равно Cили (его синоним) POSIX, это значение уважается независимо от значения LANGUAGE, если есть. И наоборот, если (эффективное) LC_MESSAGESзначение является любым другим, конкретным языком, LANGUAGEимеет приоритет.
[2] Это относится к собственно Ubuntu , но не обязательно к другим вкусам ; Lekensteyn утверждает , что Kubuntu это не установлено LANGUAGE.
Можно утверждать, что LANGUAGEдолжно не быть установлено по умолчанию, если учесть , что в ее отсутствие, LC_MESSAGESзначение вытекает из LANGзначения (которое определяет текущий стандарт), соблюдается.
[3] Вы также можете использовать этот подход, чтобы переключиться на [US] английский, назначив либо 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 не меняет язык для меня?