Временно изменить язык для сообщений терминала / предупреждений / ошибок

Твой вопрос трудно понять. Да, вы можете установить Ubuntu в virtualbox. Это работает как программа в вашей основной операционной системе. Это не то же самое, что с двойной загрузкой, где у вас две операционные системы бок о бок, но только один за раз. Это также вполне возможно с Ubuntu, но это совсем другое, и для этого вам не нужен VirtualBox.

Надеюсь, он ответил на ваш вопрос. Если вы отредактируете свой вопрос, чтобы его было легче понять, я, вероятно, могу дать лучший ответ.

18
задан 4 June 2012 в 17:25

10 ответов

Для изменения языковых настроек доступно несколько переменных среды. Вы можете просмотреть текущие настройки локали, выполнив команду locale. Чтобы изменить все настройки языка на английский, используйте LANG=C. Этот язык C всегда доступен без установки дополнительных языковых пакетов. (Чтобы временно перейти на неанглийские локали, см. Сообщение @ mklement0.)

Примеры:

Выполнение команды с настройками языка по умолчанию и печать текущих настроек языкового стандарта: [ ! d3]

$ /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=
17
ответ дан 25 May 2018 в 10:55
  • 1
    Для других пользователей, имеющих проблемы с этим, чтобы работать - настройка LANG или LANG_ALL не работает для меня, но LANGUAGE. См. Почему переопределение переменной среды LANG не меняет язык? – gertvdijk 23 June 2013 в 21:07
  • 2
    @gertvdijk: Спасибо за это; причина, по которой этот ответ работает даже без установки LANGUAGE, является исключением : GNU gettext дает преимущество LANGUAGE значение , кроме , если значение (эффективное) LC_MESSAGES обычно устанавливается косвенно через LANG или LC_ALL), либо C, либо (его синоним) POSIX. Также обратите внимание, что LANGUAGE не отвечает в этом ответе, тогда как установлен по умолчанию, и если он установлен, вы должны переопределить его , чтобы переключиться на языка специфического языка (в отличие от «C» / «POSIX»), который вы нашли. – mklement0 1 November 2016 в 09:45
  • 3
    Ваш ответ отлично работает при переключении на «C». locale (с сообщениями на английском языке в США, как указано), но не будет работать для других локалей, если LANGUAGE явно не задан или не отменен. Учитывая общий заголовок вопроса, вполне вероятно, что люди найдут, что этот ответ также будет переключен на неанглийский язык, поэтому, пожалуйста, подумайте над тем, чтобы добавить эту информацию к вашему ответу. – mklement0 1 November 2016 в 09:52
  • 4
    @ mklement0 Учитывая контекст вопроса (публикация сообщений об ошибках на английском языке), я считаю, что текущего сообщения достаточно. Вы можете добавить еще один ответ, чтобы объяснить детали вокруг LANGUAGE, если хотите :) – Lekensteyn 2 November 2016 в 04:23
  • 5
    Я добавил свой собственный ответ , как вы сказали. Если вы согласны с моей оценкой, что будущие читатели могут приехать сюда, чтобы переключиться на на любой язык (как уже указывали некоторые люди), добавьте ссылку на мой ответ на свой вопрос. Помимо этого, я предлагаю изменить значение LANGUAGE в вашем образце вывода на nl, что является фактическим значением по умолчанию, когда ваша локаль nl_NL.UTF-8. – mklement0 2 November 2016 в 06:20

Полезный ответ Lekensteyn отлично работает, если вы хотите переключиться на US English по запросу, как запросил OP, но если вы хотите переключиться на по запросу, требуется больше работы.

Перед запуском вы должны установить таблицы сообщений с помощью sudo apt-get install language-pack-<lang-tag>, где <lang-tag> является простым языковым подтекстом RTF 5646 , например es для испанского.

Фоновая информация

Утилиты GNU gettext предоставляют приоритет нестандартной переменной среды LANGUAGE [1 ] над POSIX-определенными переменными среды локали LC_ALL, LC_MESSAGES и LANG (в этом порядке).

Учитывая, что LANGUAGE по умолчанию задан в системах Ubuntu [2], а именно к подстроке значения LANG, которая отражает либо простой тег языка (например, es для испанского), либо тег языкового региона (например, de_DE для немецкого варианта немецкого языка ), вы должны отключить или отменить LANGUAGE, чтобы сообщения другого языка вступили в силу. [3]

Вариант 1: Установите LANGUAGE

[g3 4] Пример: переключение на испанский (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). Однако локализованные сообщения могут существовать только на уровне language , а резервное копирование - использовать сообщения, которые в данном случае соответствуют языку (es).

Вариант 2: Отменить LANGUAGE и установить LC_ALL

Это альтернативное решение сначала отменяет 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 также сообщает программы non -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 , но не обязательно к другим ароматам ; Лекенстейн утверждает, что Kubuntu делает не установленным LANGUAGE. По-видимому, LANGUAGE следует установить not по умолчанию, учитывая, что в его отсутствие соблюдается значение LC_MESSAGES, подразумеваемое значением LANG (которое определяет текущую локаль).

[3] Вы также можете использовать этот подход для перехода на [US] English, назначив либо LANGUAGE=C, либо LANGUAGE=POSIX (в качестве альтернативы, LANG=C / LANG=POSIX), хотя я «Неясно, активно ли это признано или просто механизм резервного , учитывая, что эти значения не начинаются с тега language ; возможно, лучшим выбором будет en_US.

[4] Существует случай edge , где этот подход не работает: попытка вызвать исполняемый файл с помощью пути - относительного или абсолютного - не переключается на указанный язык, тогда как mest filename делает: LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility работает not (выводит сообщение в текущем регионе), тогда как LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility делает ( выводит сообщение об ошибке в Испании). Если кто-нибудь знает, почему и есть ли веские причины для этого, сообщите нам об этом.

17
ответ дан 31 July 2018 в 10:39

Полезный ответ Lekensteyn отлично работает, если вы хотите переключиться на US English по запросу, как запросил OP, но если вы хотите переключиться на по запросу, требуется больше работы.

Перед запуском вы должны установить таблицы сообщений с помощью sudo apt-get install language-pack-<lang-tag>, где <lang-tag> является простым языковым подтекстом RTF 5646 , например es для испанского.

Фоновая информация

Утилиты GNU gettext предоставляют приоритет нестандартной переменной среды LANGUAGE [1 ] над POSIX-определенными переменными среды локали LC_ALL, LC_MESSAGES и LANG (в этом порядке).

Учитывая, что LANGUAGE по умолчанию задан в системах Ubuntu [2], а именно к подстроке значения LANG, которая отражает либо простой тег языка (например, es для испанского), либо тег языкового региона (например, de_DE для немецкого варианта немецкого языка ), вы должны отключить или отменить LANGUAGE, чтобы сообщения другого языка вступили в силу. [3]

Вариант 1: Установите LANGUAGE

[g3 4] Пример: переключение на испанский (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). Однако локализованные сообщения могут существовать только на уровне language , а резервное копирование - использовать сообщения, которые в данном случае соответствуют языку (es).

Вариант 2: Отменить LANGUAGE и установить LC_ALL

Это альтернативное решение сначала отменяет 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 также сообщает программы non -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 , но не обязательно к другим ароматам ; Лекенстейн утверждает, что Kubuntu делает не установленным LANGUAGE. По-видимому, LANGUAGE следует установить not по умолчанию, учитывая, что в его отсутствие соблюдается значение LC_MESSAGES, подразумеваемое значением LANG (которое определяет текущую локаль).

[3] Вы также можете использовать этот подход для перехода на [US] English, назначив либо LANGUAGE=C, либо LANGUAGE=POSIX (в качестве альтернативы, LANG=C / LANG=POSIX), хотя я «Неясно, активно ли это признано или просто механизм резервного , учитывая, что эти значения не начинаются с тега language ; возможно, лучшим выбором будет en_US.

[4] Существует случай edge , где этот подход не работает: попытка вызвать исполняемый файл с помощью пути - относительного или абсолютного - не переключается на указанный язык, тогда как mest filename делает: LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility работает not (выводит сообщение в текущем регионе), тогда как LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility делает ( выводит сообщение об ошибке в Испании). Если кто-нибудь знает, почему и есть ли веские причины для этого, сообщите нам об этом.

17
ответ дан 2 August 2018 в 00:53

Полезный ответ Lekensteyn отлично работает, если вы хотите переключиться на US English по запросу, как запросил OP, но если вы хотите переключиться на по запросу, требуется больше работы.

Перед запуском вы должны установить таблицы сообщений с помощью sudo apt-get install language-pack-<lang-tag>, где <lang-tag> является простым языковым подтекстом RTF 5646 , например es для испанского.

Фоновая информация

Утилиты GNU gettext предоставляют приоритет нестандартной переменной среды LANGUAGE [1 ] над POSIX-определенными переменными среды локали LC_ALL, LC_MESSAGES и LANG (в этом порядке).

Учитывая, что LANGUAGE по умолчанию задан в системах Ubuntu [2], а именно к подстроке значения LANG, которая отражает либо простой тег языка (например, es для испанского), либо тег языкового региона (например, de_DE для немецкого варианта немецкого языка ), вы должны отключить или отменить LANGUAGE, чтобы сообщения другого языка вступили в силу. [3]

Вариант 1: Установите LANGUAGE

[g3 4] Пример: переключение на испанский (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). Однако локализованные сообщения могут существовать только на уровне language , а резервное копирование - использовать сообщения, которые в данном случае соответствуют языку (es).

Вариант 2: Отменить LANGUAGE и установить LC_ALL

Это альтернативное решение сначала отменяет 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 также сообщает программы non -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 , но не обязательно к другим ароматам ; Лекенстейн утверждает, что Kubuntu делает не установленным LANGUAGE. По-видимому, LANGUAGE следует установить not по умолчанию, учитывая, что в его отсутствие соблюдается значение LC_MESSAGES, подразумеваемое значением LANG (которое определяет текущую локаль).

[3] Вы также можете использовать этот подход для перехода на [US] English, назначив либо LANGUAGE=C, либо LANGUAGE=POSIX (в качестве альтернативы, LANG=C / LANG=POSIX), хотя я «Неясно, активно ли это признано или просто механизм резервного , учитывая, что эти значения не начинаются с тега language ; возможно, лучшим выбором будет en_US.

[4] Существует случай edge , где этот подход не работает: попытка вызвать исполняемый файл с помощью пути - относительного или абсолютного - не переключается на указанный язык, тогда как mest filename делает: LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility работает not (выводит сообщение в текущем регионе), тогда как LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility делает ( выводит сообщение об ошибке в Испании). Если кто-нибудь знает, почему и есть ли веские причины для этого, сообщите нам об этом.

17
ответ дан 4 August 2018 в 16:24

Полезный ответ Lekensteyn отлично работает, если вы хотите переключиться на US English по запросу, как запросил OP, но если вы хотите переключиться на по запросу, требуется больше работы.

Перед запуском вы должны установить таблицы сообщений с помощью sudo apt-get install language-pack-<lang-tag>, где <lang-tag> является простым языковым подтекстом RTF 5646 , например es для испанского.

Фоновая информация

Утилиты GNU gettext предоставляют приоритет нестандартной переменной среды LANGUAGE [1 ] над POSIX-определенными переменными среды локали LC_ALL, LC_MESSAGES и LANG (в этом порядке).

Учитывая, что LANGUAGE по умолчанию задан в системах Ubuntu [2], а именно к подстроке значения LANG, которая отражает либо простой тег языка (например, es для испанского), либо тег языкового региона (например, de_DE для немецкого варианта немецкого языка ), вы должны отключить или отменить LANGUAGE, чтобы сообщения другого языка вступили в силу. [3]

Вариант 1: Установите LANGUAGE

[g3 4] Пример: переключение на испанский (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). Однако локализованные сообщения могут существовать только на уровне language , а резервное копирование - использовать сообщения, которые в данном случае соответствуют языку (es).

Вариант 2: Отменить LANGUAGE и установить LC_ALL

Это альтернативное решение сначала отменяет 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 также сообщает программы non -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 , но не обязательно к другим ароматам ; Лекенстейн утверждает, что Kubuntu делает не установленным LANGUAGE. По-видимому, LANGUAGE следует установить not по умолчанию, учитывая, что в его отсутствие соблюдается значение LC_MESSAGES, подразумеваемое значением LANG (которое определяет текущую локаль).

[3] Вы также можете использовать этот подход для перехода на [US] English, назначив либо LANGUAGE=C, либо LANGUAGE=POSIX (в качестве альтернативы, LANG=C / LANG=POSIX), хотя я «Неясно, активно ли это признано или просто механизм резервного , учитывая, что эти значения не начинаются с тега language ; возможно, лучшим выбором будет en_US.

[4] Существует случай edge , где этот подход не работает: попытка вызвать исполняемый файл с помощью пути - относительного или абсолютного - не переключается на указанный язык, тогда как mest filename делает: LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility работает not (выводит сообщение в текущем регионе), тогда как LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility делает ( выводит сообщение об ошибке в Испании). Если кто-нибудь знает, почему и есть ли веские причины для этого, сообщите нам об этом.

17
ответ дан 6 August 2018 в 01:04

Полезный ответ Lekensteyn отлично работает, если вы хотите переключиться на US English по запросу, как запросил OP, но если вы хотите переключиться на по запросу, требуется больше работы.

Перед запуском вы должны установить таблицы сообщений с помощью sudo apt-get install language-pack-<lang-tag>, где <lang-tag> является простым языковым подтекстом RTF 5646 , например es для испанского.

Фоновая информация

Утилиты GNU gettext предоставляют приоритет нестандартной переменной среды LANGUAGE [1 ] над POSIX-определенными переменными среды локали LC_ALL, LC_MESSAGES и LANG (в этом порядке).

Учитывая, что LANGUAGE по умолчанию задан в системах Ubuntu [2], а именно к подстроке значения LANG, которая отражает либо простой тег языка (например, es для испанского), либо тег языкового региона (например, de_DE для немецкого варианта немецкого языка ), вы должны отключить или отменить LANGUAGE, чтобы сообщения другого языка вступили в силу. [3]

Вариант 1: Установите LANGUAGE

[g3 4] Пример: переключение на испанский (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). Однако локализованные сообщения могут существовать только на уровне language , а резервное копирование - использовать сообщения, которые в данном случае соответствуют языку (es).

Вариант 2: Отменить LANGUAGE и установить LC_ALL

Это альтернативное решение сначала отменяет 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 также сообщает программы non -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 , но не обязательно к другим ароматам ; Лекенстейн утверждает, что Kubuntu делает не установленным LANGUAGE. По-видимому, LANGUAGE следует установить not по умолчанию, учитывая, что в его отсутствие соблюдается значение LC_MESSAGES, подразумеваемое значением LANG (которое определяет текущую локаль).

[3] Вы также можете использовать этот подход для перехода на [US] English, назначив либо LANGUAGE=C, либо LANGUAGE=POSIX (в качестве альтернативы, LANG=C / LANG=POSIX), хотя я «Неясно, активно ли это признано или просто механизм резервного , учитывая, что эти значения не начинаются с тега language ; возможно, лучшим выбором будет en_US.

[4] Существует случай edge , где этот подход не работает: попытка вызвать исполняемый файл с помощью пути - относительного или абсолютного - не переключается на указанный язык, тогда как mest filename делает: LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility работает not (выводит сообщение в текущем регионе), тогда как LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility делает ( выводит сообщение об ошибке в Испании). Если кто-нибудь знает, почему и есть ли веские причины для этого, сообщите нам об этом.

17
ответ дан 7 August 2018 в 18:30

Полезный ответ Lekensteyn отлично работает, если вы хотите переключиться на US English по запросу, как запросил OP, но если вы хотите переключиться на по запросу, требуется больше работы.

Перед запуском вы должны установить таблицы сообщений с помощью sudo apt-get install language-pack-<lang-tag>, где <lang-tag> является простым языковым подтекстом RTF 5646 , например es для испанского.

Фоновая информация

Утилиты GNU gettext предоставляют приоритет нестандартной переменной среды LANGUAGE [1 ] над POSIX-определенными переменными среды локали LC_ALL, LC_MESSAGES и LANG (в этом порядке).

Учитывая, что LANGUAGE по умолчанию задан в системах Ubuntu [2], а именно к подстроке значения LANG, которая отражает либо простой тег языка (например, es для испанского), либо тег языкового региона (например, de_DE для немецкого варианта немецкого языка ), вы должны отключить или отменить LANGUAGE, чтобы сообщения другого языка вступили в силу. [3]

Вариант 1: Установите LANGUAGE

[g3 4] Пример: переключение на испанский (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). Однако локализованные сообщения могут существовать только на уровне language , а резервное копирование - использовать сообщения, которые в данном случае соответствуют языку (es).

Вариант 2: Отменить LANGUAGE и установить LC_ALL

Это альтернативное решение сначала отменяет 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 также сообщает программы non -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 , но не обязательно к другим ароматам ; Лекенстейн утверждает, что Kubuntu делает не установленным LANGUAGE. По-видимому, LANGUAGE следует установить not по умолчанию, учитывая, что в его отсутствие соблюдается значение LC_MESSAGES, подразумеваемое значением LANG (которое определяет текущую локаль).

[3] Вы также можете использовать этот подход для перехода на [US] English, назначив либо LANGUAGE=C, либо LANGUAGE=POSIX (в качестве альтернативы, LANG=C / LANG=POSIX), хотя я «Неясно, активно ли это признано или просто механизм резервного , учитывая, что эти значения не начинаются с тега language ; возможно, лучшим выбором будет en_US.

[4] Существует случай edge , где этот подход не работает: попытка вызвать исполняемый файл с помощью пути - относительного или абсолютного - не переключается на указанный язык, тогда как mest filename делает: LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility работает not (выводит сообщение в текущем регионе), тогда как LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility делает ( выводит сообщение об ошибке в Испании). Если кто-нибудь знает, почему и есть ли веские причины для этого, сообщите нам об этом.

18
ответ дан 15 August 2018 в 19:11
  • 1
    Для других пользователей, имеющих проблемы с этим, чтобы работать - настройка LANG или LANG_ALL не работает для меня, но LANGUAGE. См. Почему переопределяет переменную среды LANG, не меняя язык для меня? – gertvdijk 23 June 2013 в 21:07
  • 2
    @gertvdijk: Спасибо за это; причина, по которой этот ответ работает даже без установки LANGUAGE, является exception : GNU gettext дает преимущество LANGUAGE value except , если значение (эффективное) LC_MESSAGES обычно устанавливается косвенно через LANG или LC_ALL), либо C, либо (его синоним) POSIX. Также обратите внимание, что LANGUAGE в этом ответе не установлен, тогда как он является установлен по умолчанию, и если он установлен, вы должны переопределить it , чтобы переключиться на a < i> специфический язык (в отличие от «C» / «POSIX»), который вы нашли. – mklement0 1 November 2016 в 09:45
  • 3
    Ваш ответ отлично работает при переключении на «C». locale (с сообщениями на английском языке в США, как указано), но не будет работать для других локалей, если LANGUAGE явно не задан или не отменен. Учитывая общий заголовок вопроса, вполне вероятно, что люди найдут, что этот ответ также будет переключен на неанглийский язык, поэтому, пожалуйста, подумайте над тем, чтобы добавить эту информацию к вашему ответу. – mklement0 1 November 2016 в 09:52
  • 4
    @ mklement0 Учитывая контекст вопроса (публикация сообщений об ошибках на английском языке), я считаю, что текущего сообщения достаточно. Вы можете добавить еще один ответ, чтобы объяснить детали вокруг LANGUAGE, если хотите :) – Lekensteyn 2 November 2016 в 04:23
  • 5
    Я добавил свой собственный ответ , как вы сказали. Если вы согласны с моей оценкой, что будущие читатели могут приехать сюда, чтобы перейти на любой язык (как уже указывали некоторые люди), добавьте ссылку на мой ответ на свой вопрос. Помимо этого, я предлагаю изменить значение LANGUAGE в вашем образце вывода на nl, что является фактическим значением по умолчанию, когда ваша локаль nl_NL.UTF-8. – mklement0 2 November 2016 в 06:20
  • 6
    Совет шляпы @ wjandrea за его помощь в структурировании этого сообщения. – mklement0 3 November 2016 в 23:57

Для изменения языковых настроек доступно несколько переменных среды. Вы можете просмотреть текущие настройки локали, выполнив команду 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=
18
ответ дан 18 August 2018 в 21:58
  • 1
    Для других пользователей, имеющих проблемы с этим, чтобы работать - настройка LANG или LANG_ALL не работает для меня, но LANGUAGE. См. Почему переопределяет переменную среды LANG, не меняя язык для меня? – gertvdijk 23 June 2013 в 21:07
  • 2
    @gertvdijk: Спасибо за это; причина, по которой этот ответ работает даже без установки LANGUAGE, является exception : GNU gettext дает преимущество LANGUAGE value except , если значение (эффективное) LC_MESSAGES обычно устанавливается косвенно через LANG или LC_ALL), либо C, либо (его синоним) POSIX. Также обратите внимание, что LANGUAGE в этом ответе не установлен, тогда как он является установлен по умолчанию, и если он установлен, вы должны переопределить it , чтобы переключиться на a < i> специфический язык (в отличие от «C» / «POSIX»), который вы нашли. – mklement0 1 November 2016 в 09:45
  • 3
    Ваш ответ отлично работает при переключении на «C». locale (с сообщениями на английском языке в США, как указано), но не будет работать для других локалей, если LANGUAGE явно не задан или не отменен. Учитывая общий заголовок вопроса, вполне вероятно, что люди найдут, что этот ответ также будет переключен на неанглийский язык, поэтому, пожалуйста, подумайте над тем, чтобы добавить эту информацию к вашему ответу. – mklement0 1 November 2016 в 09:52
  • 4
    @ mklement0 Учитывая контекст вопроса (публикация сообщений об ошибках на английском языке), я считаю, что текущего сообщения достаточно. Вы можете добавить еще один ответ, чтобы объяснить детали вокруг LANGUAGE, если хотите :) – Lekensteyn 2 November 2016 в 04:23
  • 5
    Я добавил свой собственный ответ , как вы сказали. Если вы согласны с моей оценкой, что будущие читатели могут приехать сюда, чтобы перейти на любой язык (как уже указывали некоторые люди), добавьте ссылку на мой ответ на свой вопрос. Помимо этого, я предлагаю изменить значение LANGUAGE в вашем образце вывода на nl, что является фактическим значением по умолчанию, когда ваша локаль nl_NL.UTF-8. – mklement0 2 November 2016 в 06:20

Полезный ответ Lekensteyn отлично работает, если вы хотите переключиться на US English по запросу, как запросил OP, но если вы хотите переключиться на другой язык по запросу, вам потребуется больше работы.

start, вы должны установить таблицы сообщений с помощью sudo apt-get install language-pack-<lang-tag>, где <lang-tag> является полезным ответчиком Lekensteyn , например es для испанского языка.

Фоновая информация

Утилиты, основанные на GNU gettext, имеют приоритет для нестандартной переменной LANGUAGE среды [1] над переменными среды локального языка POSIX LC_ALL, LC_MESSAGES и LANG (в этом порядке).

Учитывая, что LANGUAGE устанавливается по умолчанию в системах Ubuntu [1] , а именно US English значения 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 LANGUAGE, а затем использует переменную среды локализации POSIX LC_ALL, чтобы неявно установить LC_MESSAGES [3] :

$ 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 также сообщает language -GNU-программы желаемого языка.

Обратите внимание, что для LC_ALL требуется имя для всех , включая суффикс набора символов, чтобы быть эффективным ([ f29]) (в отличие от LANGUAGE, для которого достаточно простого языкового тега (например, es)). То же самое относится к настройкам LC_MESSSAGES и LANG. Указание недопустимого / не установленного имени локали приводит к откату в локали POSIX и, следовательно, в английском языке.

Сноски

[1] Причины, по которым ответ Лекенштейна работает даже без отмены / переопределения LANGUAGE - исключение: если значение (эффективное) LC_MESSAGES (обычно установленное косвенно через LANG или LC_ALL), либо C, либо (его синоним) POSIX, то значение соблюдается независимо от значения LANGUAGE, если таковое имеется. И наоборот, если (эффективное) значение LC_MESSAGES - это любой другой, определенный язык, LANGUAGE имеет приоритет.

[1] Причины, по которым ответ Лекенштейна работает даже без отмены / переопределения LANGUAGE, являются исключением: если значение (эффективное) LC_MESSAGES (обычно устанавливается косвенно через LANG или [ f37]) является либо C, либо (его синоним) POSIX, это значение соблюдается независимо от значения LANGUAGE, если оно есть. И наоборот, если (эффективное) значение LC_MESSAGES - это любой другой, определенный язык, LANGUAGE имеет приоритет.

[3] Вы также можете использовать этот подход для перехода на [US] English, назначив либо LANGUAGE=C, либо LANGUAGE=POSIX (в качестве альтернативы, LANG=C / LANG=POSIX ), хотя я не понимаю, активно ли это признано или просто без механизма , учитывая, что эти значения не начинаются с языкового тега; возможно, лучшим выбором будет en_US.

[3] Вы также можете использовать этот подход для перехода на [US] English, назначив либо LANGUAGE=C, либо LANGUAGE=POSIX (в качестве альтернативы, LANG=C / LANG=POSIX). , хотя я не знаю, активно ли это признано или просто без механизма , учитывая, что эти значения не начинаются с тега языка; возможно, лучшим выбором будет en_US.

6
ответ дан 25 May 2018 в 10:55

Полезный ответ Lekensteyn отлично работает, если вы хотите переключиться на US English по запросу, как запросил OP, но если вы хотите переключиться на по запросу, требуется больше работы.

Перед запуском вы должны установить таблицы сообщений с помощью sudo apt-get install language-pack-<lang-tag>, где <lang-tag> является простым языковым подтекстом RTF 5646 , например es для испанского.

Фоновая информация

Утилиты GNU gettext предоставляют приоритет нестандартной переменной среды LANGUAGE [1 ] над POSIX-определенными переменными среды локали LC_ALL, LC_MESSAGES и LANG (в этом порядке).

Учитывая, что LANGUAGE по умолчанию задан в системах Ubuntu [2], а именно к подстроке значения LANG, которая отражает либо простой тег языка (например, es для испанского), либо тег языкового региона (например, de_DE для немецкого варианта немецкого языка ), вы должны отключить или отменить LANGUAGE, чтобы сообщения другого языка вступили в силу. [3]

Вариант 1: Установите LANGUAGE

[g3 4] Пример: переключение на испанский (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). Однако локализованные сообщения могут существовать только на уровне language , а резервное копирование - использовать сообщения, которые в данном случае соответствуют языку (es).

Вариант 2: Отменить LANGUAGE и установить LC_ALL

Это альтернативное решение сначала отменяет 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 также сообщает программы non -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 , но не обязательно к другим ароматам ; Лекенстейн утверждает, что Kubuntu делает не установленным LANGUAGE. По-видимому, LANGUAGE следует установить not по умолчанию, учитывая, что в его отсутствие соблюдается значение LC_MESSAGES, подразумеваемое значением LANG (которое определяет текущую локаль).

[3] Вы также можете использовать этот подход для перехода на [US] English, назначив либо LANGUAGE=C, либо LANGUAGE=POSIX (в качестве альтернативы, LANG=C / LANG=POSIX), хотя я «Неясно, активно ли это признано или просто механизм резервного , учитывая, что эти значения не начинаются с тега language ; возможно, лучшим выбором будет en_US.

[4] Существует случай edge , где этот подход не работает: попытка вызвать исполняемый файл с помощью пути - относительного или абсолютного - не переключается на указанный язык, тогда как mest filename делает: LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility работает not (выводит сообщение в текущем регионе), тогда как LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility делает ( выводит сообщение об ошибке в Испании). Если кто-нибудь знает, почему и есть ли веские причины для этого, сообщите нам об этом.

6
ответ дан 25 July 2018 в 18:45

Другие вопросы по тегам:

Похожие вопросы: