На що мені слід встановити свою локальну локацію та які наслідки цього робити?


19

Це питання було стимульовано запитанням браузера Chromium не дозволяє встановити стандартний розмір паперу для "Друк у файл" , а також розмовою з @Gilles у чаті. Як вказував @don_crissti, і як я перевірив, зміна місцевості (принаймні LC_PAPER) має значення для вибору розміру паперу.

Я ніколи не задумувався над тим, що вибрати, і завжди ходив із цим, en_US.UTF-8бо це здавалося розумним вибором за замовчуванням.

Однак на @Gilles у чаті (див. Розмову, починаючи з http://chat.stackexchange.com/transcript/message/17017095#17017095 ). Виписки:

Жили: за замовчуванням LC_PAPER до $ LANG

Gilles: у вас повинен бути LANG = en_US.UTF-8. Це погана ідея: вона встановлює LC_COLLATE, і це майже завжди погано

Жили: LC_COLLATE не описує правильне зіставлення, воно занадто обмежувальне (воно позначається символом за символом) видаліть LANG і замість цього встановіть LC_CTYPE та LC_PAPER

Gilles: плюс LC_MESSAGES, якщо ви хочете повідомляти мовою, відмінною від англійської

Зрозуміло, що тут є проблеми, про які я не знаю, і я впевнений, що і багато інших. Отже, які питання слід враховувати під час налаштування локалів та як їх встановлювати? Я завжди просто бігав dpkg-reconfigure localesу Debian, і не думав про це двічі.

Конкретне запитання: чи слід встановити свою локальну мову на en_IN.UTF-8? Чи є якісь недоліки в цьому?

Дивіться також: Чи (чи повинен) LC_COLLATE впливати на діапазони символів?

Відповіді:


29

Налаштування місцеположення - це налаштування користувача, які стосуються вашої культури.

Локальні назви

У всіх поточних варіантах Unix, про які я знаю (але не в кількох антикваріатах), імена локалів відповідають тій же схемі:

  • ISO 639-1 малими двобуквених код мови, або ISO 639-2 код мови три букви , якщо мова не має два-буквений код. Наприклад, enдля англійської, deдля німецької, jaдля японської, ukдля української, berдля берберської…
  • Для багатьох, але не для всіх мов, підкреслення, _за яким іде двозначний код країни з великим регістром ISO 3166 . Таким чином: en_USдля англійської США, en_UKдля англійської англійської, для fr_CAканадської (квебекської) французької, de_DEдля німецької Німеччини, de_ATдля німецької з Австрії, ja_JPдля японської (Японії) тощо.
  • Необов'язково, точка з .подальшим ім'ям персонажа , що кодує такими як UTF-8, ISO-8859-1, KOI8-U, GB2312, Big5і т.д. З GNU LIBC по крайней мере (не знаю , наскільки широко це), випадок і пунктуація ігноруються при кодуванні імен. Наприклад, zh_CN.UTF-8мандарин (спрощений) китайський код закодований у UTF-8, тоді zh_CNяк мандарин китайський закодований у GB2312, і zh_TWтайванський (традиційний) китайський закодований у Big5.
  • За бажанням, знак at, який @супроводжується назвою варіанта. Значення варіантів залежить від локалу. Наприклад, у багатьох європейських країнах є @euroмісцевий варіант, де знак валюти є євро, а кодування - це такий, що включає цей символ (ISO 8859-15 або ISO 8859-16), на відміну від варіанту, який не використовується без старого знака валюти. Наприклад, en_IE(англійська, Ірландія) використовує кодування latin1 (ISO 8859-1) і £ як символ валюти, в той час як en_IE@euroвикористовується кодування latin9 (ISO 8859-15) і € як символ валюти.

Крім того, є два імені локалів, які існують у всій системі, схожій на unix: Cі POSIX. Ці імена синонімічні і означають обчислювальні, тобто налаштування за замовчуванням, які підходять для даних, які аналізуються комп'ютерною програмою.

Налаштування мови

Наступні категорії локалів визначені POSIX :

  • LC_CTYPE: набір символів, використовуваний термінальними додатками: класифікаційні дані (символи яких букви, пунктуація, пробіли, недійсні тощо) та перетворення регістру. Текстові утиліти зазвичай прислуховуються LC_CTYPEдо визначення меж символів.
  • LC_COLLATE: порядок порівняння (тобто сортування). Цей параметр дуже обмежено використовується з кількох причин:
    • Більшість мов мають складні правила, які залежать від сортування (наприклад, слова словника та власні імена можуть використовувати не той самий порядок) і не можуть бути виражені символом LC_COLLATE.
    • Існує небагато програм, де належний порядок сортування має значення, яке виконується програмним забезпеченням, яке використовує параметри місцевості. Наприклад, текстові процесори зберігають мову та кодування файлу у самому файлі (інакше файл не оброблятиметься належним чином у системі з різними налаштуваннями мови) та не хвилює налаштування локалі, визначені середовищем.
    • LC_COLLATEможе мати негативні побічні ефекти, зокрема, тому що це призводить до порядку сортування A <a <B <..., завдяки якому "між A і Z" включає малі літери від a до y. Зокрема, дуже поширені регулярні вирази, такі як [A-Z]зламати деякі програми .
  • LC_MESSAGES: мова інформаційних повідомлень та повідомлень про помилки.
  • LC_NUMERIC: форматування чисел: роздільник десятків і тисяч.
    Багато програм жорсткого коду .у вигляді десяткового роздільника. Це робить LC_NUMERICне дуже корисними та потенційно небезпечними:
    • Навіть якщо ви встановите його, ви все одно будете бачити формат за замовчуванням досить часто.
    • Ви, швидше за все, потрапите в ситуацію, коли одна програма виробляє залежний від локалі вихід, а інша програма розраховує .на десяткову точку або ,роздільник поля.
  • LC_MONETARY: як LC_NUMERIC, але для сум місцевої валюти.
    Дуже мало додатків використовують це.
  • LC_TIME: форматування дати та часу: назви будня та місяця, годинник 12 або 24 години, порядок частин дати, пунктуація тощо.

GNU libc, який ви знайдете в невбудованому Linux, визначає додаткові категорії мов:

  • LC_PAPER: розмір паперу за замовчуванням (визначається висотою та шириною).
  • LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATIONЯ не знаю ні одного додатка , яке використовує їх.

Змінні середовища

Програми, що використовують параметри локалі, визначають їх із змінних оточення.

  • Тоді використовується значення LANGзмінної середовища, якщо це не перекрито іншим параметром. Якщо LANGне встановлено, локальний код за замовчуванням C.
  • Ці LC_xxxімена можуть бути використані в якості змінних оточення.
  • Якщо LC_ALLвстановлено, усі інші значення ігноруються; це в першу чергу корисно для встановлення LC_ALL=Cзапущених програм, яким потрібно виробляти однаковий вихід незалежно від того, де вони запущені.
  • Крім того, GNU libc використовуєLANGUAGE для визначення резервних копій для LC_MESSAGES(наприклад, LANGUAGE=fr_BE:fr_FR:enвіддати перевагу бельгійській французькій мові, або за відсутності французької французької мови, або за відсутності англійської).

Встановлення локалів

Дані про локальний вміст можуть бути великими, тому деякі дистрибутиви не доставляють їх у зручній формі, а натомість потребують додаткового кроку встановлення.

  • У Debian, щоб встановити локалі, запустіть dpkg-reconfigure localesта виберіть зі списку в діалоговому вікні або відредагуйте /etc/locale.genта запустіть locale-gen.
  • Для встановлення локалів на Ubuntu запустіть locale-genз іменами локалів як аргументами.

Ви можете визначити свою власну локаль .

Рекомендація

Корисні налаштування:

  • Встановіть LC_CTYPEмову та кодування, якими ви кодуєте текстові файли. Переконайтесь, що термінали використовують це кодування.
    Для більшості мов значення має лише кодування. Є кілька винятків; наприклад, в верхньому регістрі iє Iв більшості мов , але İна турецькому мовою ( tr_TR).
  • Встановіть LC_MESSAGESмову, в якій ви хочете бачити повідомлення.
  • Набір LC_PAPERдля en_USякщо ви хочете US Letter бути розмір паперу по замовчуванням і просто про що - небудь ще (наприклад en_GB) , якщо ви хочете A4.
  • За бажанням встановіть LC_TIMEулюблений формат часу.

Як пояснено вище, уникайте встановлення LC_COLLATEта LC_NUMERIC. Якщо ви користуєтесь LANG, явно перекрийте ці дві категорії, встановивши їх на C.


Привіт Жиле, дякую за детальну відповідь. Де гарне місце для зміни параметрів за замовчуванням на Debian? Оскільки мені потрібен формат паперу формату А4, я думаю, що мені потрібно змінити значення за замовчуванням LC_PAPER. І чи можу я оновити це в системі без перезавантаження?
Faheem Mitha

1
@FaheemMitha Який найкращий дистрибутив / оболонку-агностик спосіб встановлення змінних середовища? І якщо ви хочете встановити його на загальному рівні, на Debian також є /etc/default/locale. Ці файли набувають чинності під час входу; ви можете робити export LC_PAPER=…в оболонці, щоб впливати на команди, запущені з цієї оболонки.
Жил 'SO- перестань бути злим'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.