Де встановлюється змінна $ LANG у Mac OS X?


24

Я wgetвперше використав після встановлення Lion OS X і помітив, що wget локалізується на моїй рідній мові. Запуск setкоманди в терміналі показав, що моя LANGзмінна представляє мою локальну мову. Де я можу це змінити чи wgetігнорувати цей параметр?

оновлення

Ось що localeмені дає:

LANG="lt_LT.UTF-8"
LC_COLLATE="lt_LT.UTF-8"
LC_CTYPE="lt_LT.UTF-8"
LC_MESSAGES="lt_LT.UTF-8"
LC_MONETARY="lt_LT.UTF-8"
LC_NUMERIC="lt_LT.UTF-8"
LC_TIME="lt_LT.UTF-8"
LC_ALL=

Отже, всі вихідні параметри (наприклад, підказки та повідомлення про налагодження) є литовською мовою. Це моя проблема. Я хотів би повернути його до англійської мови.

Я використовую zshяк свою оболонку для входу.


У чому саме проблема wget? І що localeпоказує, чи це те саме, що ви очікуєте від вибору мови на панелі налаштувань мови та тексту ?
bmike

Відповіді:


26

За замовчуванням Terminal встановлює змінні середовища локальної локації відповідно до вибраних форматів мови та часу / дати / числа, якими використовується Terminal, і вибирається через

Налаштування системи> Мова та текст

(Це ім'я на Lion. У попередніх системах точна назва панелі налаштувань може відрізнятися.)

Тимчасове рішення - перетягнути англійську мову на верхню частину списку мов, потім відкрити термінал, а потім повернути литовську мову на верхню. Тоді лише Термінал буде англійською мовою. Однак він скинеться на литовську мову, якщо ви вийдете та перезапустите Термінал.

Стійкий підхід полягає в тому, щоб сказати Terminal не встановлювати змінні середовища локального значення, вимикаючи його

Термінал> Налаштування> Налаштування> [профіль]> Додатково> Встановити змінні середовища локальної системи при запуску

Тоді для локальної мови за замовчуванням встановлено значення "C", не вказана мова, і більшість програм за замовчуванням буде відповідати англійській мові.

Зауважте, що вимкнення цього означає, що деякі програми не знають, який кодування символів використовує Термінал, і вважатимуть, що це лише ASCII або ISO-Latin-1. Тож якщо у Терміналі використовується UTF-8 (за замовчуванням), ці програми можуть чи не можуть вести себе так, як потрібно.

Якщо здебільшого це стосується wget, я рекомендую зробити копію профілю налаштувань за замовчуванням, вимкнути параметр локалі у власному користувальницькому профілі та використовувати цей профіль лише під час використання wget, щоб ви могли продовжувати використовувати UTF-8 з повною підтримкою при використанні інших програм, використовуючи налаштування за замовчуванням.

Як уже згадували інші, ви також можете змінити початкові параметри локалі, надані Terminal, у сценарії запуску оболонки. Для zsh, покладіть його в ~ / .zshrc. Для bash використовуйте ~ / .bashrc (а якщо у вас його ще немає, створіть ~ / .bash_profile, який запускає ~ / .bashrc).

Див. X-man-сторінку: // 1 / locale для отримання додаткової інформації про кожне значення середовища локальної локації.

Однак, якщо ви були просто unset LANGабо встановили його на "C", це зазвичай стосується всіх ваших оболонок і програм, тоді як більшість часу ви, ймовірно, хочете використовувати UTF-8 і термінал встановив змінні локалі, щоб вони відповідали, щоб отримати найвищий ступінь співпраці, вірності та функціональності.

Тому, якщо ви збираєтеся пройти цей маршрут, я пропоную вам написати код для редагування, а не заміни, початкових значень, щоб зберегти інформацію про кодування ("UTF-8") і просто змусити мову англійською, замість встановлення змінних на "C".

Наприклад, це працює в zsh і bash:

# Replace Lithuanian with English
export LANG=${LANG/lt_LT/en_US}

Коли LANG="lt_LT.UTF-8"це змінить це на LANG="en_US.UTF-8". У мене немає wgetможливості це перевірити, але цього має бути достатньо.

Це зробити таким чином, що якщо ви зміните перевагу кодування символів у Terminal, ви не перекриєте це в сценарії запуску оболонки.


Чудово зроблено; узагальнити команду LANGперевизначення: echo ${LANG/*./en_US.}замінює поточну назву культури en_US незалежно від того, що це; працює bash, ksh, zsh.
mklement0

7

Тут встановлено ...

введіть тут опис зображення

Якщо ви хочете більше або менше варіантів у спадному меню, перейдіть на вкладку « Кодування », щоб переглянути ще більшу суму.


3
на os x це ~ / .bash_profile, а не bashrc. Люди дуже збентежилися цим, читаючи онлайн-підручники.
Енріко Сусатьо

Боже, чорт, спасибі за те, що це спіймав. Я навіть зайшов на сторінку з відкритим кодом і перевірив, чи змінили яблуко зміни на gnu bash і все-таки помилилися. (редагування моєї відповіді - дякую @the_great_monkey)
bmike

4
Термінал створює оболонки для входу, які виконують ~ / .bash_profile. Однак більшість налаштувань користувачів повинні бути розміщені в ~ / .bashrc, щоб вони також застосовувались до оболонок, які не входять у систему (наприклад, під оболонок), а ~ / .bash_profile має працювати ~ / .bashrc, так що це стосується оболонок входу. ~ / .bash_profile, як правило, порожній і містить лише код спеціально для вхідних оболонок верхнього рівня, які користувач не хоче запускати для суб-оболонок.
Кріс Пейдж

1
"Швидке прочитання сторінки man показує, що оболонка встановлює це значення для кожного входу" Сторінка bash man говорить про це, але Terminal встановлює початкове значення, і я ніколи не бачив, щоб bash встановлював їх, якщо вони вже не були встановлені. Якщо я відключу налаштування "встановити середовище локалі ...", жодна зі змінних не встановлюється, а локаль показує LANG=та інші значення, які за замовчуванням "C".
Кріс Пейдж

2

Я вирішив цю проблему, встановивши мову у своєму .profile-файлі, який завантажується кожного разу, коли я запускаю термінал.

export LANG="en_US.UTF-8"
export LC_ALL="POSIX"

LC_ALLвідміни LANG, тому ваша перша команда не матиме ефекту.
mklement0

Крім того, POSIXце рівнозначно, Cі це зовсім не справляється з Unicode.
Себастьян Граф

1

Виходячи з досвіду Linux, якщо ви не хочете повністю змінити свою локалізацію за допомогою LC_LANG, але хочете просто мати системні повідомлення англійською мовою, ви просто встановите

LC_COLLATE=C    (to have standard sorting in ls, etc)
LC_CTYPE=en_US.UTF-8

Це LC_MESSAGESзмінна, яка керує тим, якими мовами слід виводити повідомлення (якщо вони встановлені).
mklement0

0

Використовуючи сервер debian французькою мовою та клієнт bash macsox, я "просто" повинен був додати це до мого .bash_profile в каталозі користувачів macosx:

експортувати LANG = fr_FR.UTF-8

Вирішено.


0

Інші відповіді правильні, тобто щодо Terminalналаштування для встановлених змінних оточуючих середовищ при запуску та використання оболонки/etc/profile . Однак є й інший спосіб, який варто зрозуміти - особливо, якщо "проблема" відчувається через віддалений sshвхід.

OpenSSH (як використовується в Linux, BSD і macOS) може надсилати змінні середовища із середовища клієнта в оболонку, яку запускає сервер. Це робиться лише в тому випадку, якщо клієнт налаштований їх відправляти і сервер налаштований їх приймати. Клієнт ( ~/.ssh/config) повинен мати:

SendEnv LANG LC_*

і серверу ( /etc/ssh/sshd_config) знадобиться:

AcceptEnv LANG LC_*

Якщо вони обидва на місці, то локальний клієнт передається в оболонку входу на ssh-сервер:

$ ssh me@my-mac locale
LANG="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_CTYPE="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_ALL=

Необхідні настройки сервера за замовчуванням у Snow Leopard відсутні ; саме там, на Сьєррі . Не забудьте перезапустити SSH-сервер після зміни /etc/sshd_config!!!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.