Существует несколько переменных среды, доступных для изменения языковых настроек. Вы можете просмотреть текущие настройки локали, выполнив localeкоманду. Чтобы изменить все настройки локали на английский, используйте LANG=C. Этот Cязык всегда доступен без установки дополнительных языковых пакетов. (Чтобы временно перейти на неанглийские локали, см. Сообщение @ mklement0 .)
Примеры:
Выполнение команды с настройками языка по умолчанию и печать текущих настроек локали:
$ /nonexistent
bash: /nonexistent: Bestand of map bestaat niet
$ locale
LANG=nl_NL.UTF-8
LANGUAGE=
LC_CTYPE="nl_NL.UTF-8"
LC_NUMERIC="nl_NL.UTF-8"
LC_TIME="nl_NL.UTF-8"
LC_COLLATE="nl_NL.UTF-8"
LC_MONETARY="nl_NL.UTF-8"
LC_MESSAGES="nl_NL.UTF-8"
LC_PAPER="nl_NL.UTF-8"
LC_NAME="nl_NL.UTF-8"
LC_ADDRESS="nl_NL.UTF-8"
LC_TELEPHONE="nl_NL.UTF-8"
LC_MEASUREMENT="nl_NL.UTF-8"
LC_IDENTIFICATION="nl_NL.UTF-8"
LC_ALL=
Временно переопределите язык для одной программы и покажите, что он действительно временный:
$ LANG=C ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ ls /nonexistent
ls: kan geen toegang krijgen tot /nonexistent: Bestand of map bestaat niet
Измените локаль для всех команд, выполняемых в текущей оболочке, и снова включите доказательства:
$ LANG=C
$ ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ locale
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
@gertvdijk: Спасибо за это; причина, по которой этот ответ работает даже без установки, LANGUAGEявляется исключением : GNU gettext отдает приоритет LANGUAGEзначению, за исключением случаев, когда (эффективное) LC_MESSAGESзначение (обычно устанавливаемое косвенно через LANGили LC_ALL) равно либо C(его синоним) POSIX. Также обратите внимание , что LANGUAGEслучается быть снята в этом ответе, в то время как он будет установлен по умолчанию, и если он установлен, вы должны переопределить его , чтобы перейти к конкретной локали языка (в отличие от «C» / «POSIX»), которая является что ты нашел
mklement0
Ваш ответ прекрасно работает при переключении на локаль "C" (с сообщениями на английском языке США, как требуется), но не будет работать для других локалей, если LANGUAGEявно не установлен или не переопределен. Учитывая общее название вопроса, вполне вероятно, что люди найдут этот ответ, надеясь также переключиться на не английский язык, поэтому, пожалуйста, рассмотрите возможность добавления этой информации в свой ответ.
mklement0
@ mklement0 Учитывая контекст вопроса (публикация сообщений об ошибках на английском языке), я думаю, что текущее сообщение достаточно. Вы можете добавить еще один ответ, чтобы объяснить подробности, LANGUAGEесли хотите :)
Lekensteyn
Я добавил свой собственный ответ , как вы предложили. Если вы согласны с моей оценкой, что будущие читатели могут приехать сюда в поисках переключения на любой язык (как уже несколько человек активно указали), пожалуйста, добавьте ссылку на мой ответ на ваш вопрос. Кроме того, я предлагаю изменить значение LANGUAGEв вашем примере вывода на nl, которое является фактическим значением по умолчанию, когда используется ваш языковой стандарт nl_NL.UTF-8.
mklement0
9
Полезный ответ Лекенштейна отлично работает, если вы хотите переключиться на американский английский по требованию, как того требует ОП, но если вы хотите переключиться на другой язык по требованию , требуется больше работы.
Перед запуском необходимо установить таблицы сообщений с 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 не меняет язык для меня?LANGUAGE
является исключением : GNU gettext отдает приоритетLANGUAGE
значению, за исключением случаев, когда (эффективное)LC_MESSAGES
значение (обычно устанавливаемое косвенно черезLANG
илиLC_ALL
) равно либоC
(его синоним)POSIX
. Также обратите внимание , чтоLANGUAGE
случается быть снята в этом ответе, в то время как он будет установлен по умолчанию, и если он установлен, вы должны переопределить его , чтобы перейти к конкретной локали языка (в отличие от «C» / «POSIX»), которая является что ты нашелLANGUAGE
явно не установлен или не переопределен. Учитывая общее название вопроса, вполне вероятно, что люди найдут этот ответ, надеясь также переключиться на не английский язык, поэтому, пожалуйста, рассмотрите возможность добавления этой информации в свой ответ.LANGUAGE
если хотите :)LANGUAGE
в вашем примере вывода наnl
, которое является фактическим значением по умолчанию, когда используется ваш языковой стандартnl_NL.UTF-8
.Полезный ответ Лекенштейна отлично работает, если вы хотите переключиться на американский английский по требованию, как того требует ОП, но если вы хотите переключиться на другой язык по требованию , требуется больше работы.
Перед запуском необходимо установить таблицы сообщений с
sudo apt-get install language-pack-<lang-tag>
, где<lang-tag>
это простой RTF 5646 язык Subtag , например,es
на испанском языке.Справочная информация
Утилиты на основе gettext в GNU отдают приоритет нестандартной
LANGUAGE
переменной среды [1] над переменными средыLC_ALL
, определяемыми POSIXLC_MESSAGES
, иLANG
(в указанном порядке).Учитывая , что
LANGUAGE
по умолчанию устанавливаются в системах Ubuntu [2] , а именно к подстроке изLANG
значения , которое отражает либо простой тег языка (например,es
для испанского языка) или языка область тегов (например,de_DE
для варианта Германии немецкого), Вы должны сбросить или переопределить,LANGUAGE
чтобы сообщения на другом языке вступили в силу. [3]Вариант 1: Установить
LANGUAGE
Пример : переключение на испанские (
es
) сообщения ad-hoc:Примечание : достаточно простого языкового тега, такого как
es
, но вы можете добавить идентификатор региона (например,es_AR
для Аргентины) и даже суффикс набора символов (например,es_AR.UTF-8
).Однако локализованные сообщения могут существовать только на уровне языка , и в качестве альтернативы можно использовать сообщения, которые соответствуют языковой части (
es
в данном случае).Вариант 2: сбросить
LANGUAGE
и установитьLC_ALL
Это альтернативное решение сначала определяет неопределенность
LANGUAGE
, а затем используетLC_ALL
неявную переменную окружения POSIX для установкиLC_MESSAGES
[4] :Это решение имеет преимущество установки всех аспектов локализации для указанной локали (например,
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
делает (выводит испанское сообщение об ошибке).Если кто-то знает, почему и есть ли для этого веская причина, сообщите нам.
источник