Як я можу налаштувати локальну систему?


24

У системі Адміністрація Мовна підтримка Текст. Я можу вибирати лише стандартні локалі, але хотілося б точно налаштувати. Наприклад, в Windows я можу налаштувати такі речі, як формат часу та дати, виміряти одиниці, десятковий роздільник, валюту тощо вручну - як я можу це зробити в Ubuntu?

Відповіді:


28

Ця відповідь покаже, як повністю налаштувати локаль, необов'язково використовуючи наявний локал як базовий. Тип локалі, який буде використаний у цій відповіді, - i18nтип; такий тип локалі буде мати на увазі в кожній згадці слова "locale" в тілі відповіді.

Знайдіть путівник

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

Потрібні інструменти

Єдиними інструментами, необхідними для роботи з локалями, є

  1. Текстовий редактор. Будь-хто зробить, хоча VIM буде чудовим.
  2. Перетворювач тексту в унікод. Найбільш очікувалося, що у вас його не було, тож я надам вам простий. Прочитайте наступний підрозділ, щоб отримати його.

Я рекомендую вам створити каталог і зберегти все, що стосується роботи, яку ви будете виконувати на локалі до нього.

Перетворювач тексту в унікод (encodestr)

ПРИМІТКА: якщо ви використовуєте непоширені символи, у вас можуть виникнути проблеми зі сценарієм, про який я пишу нижче; ви можете поглянути на альтернативні сценарії, пов’язані з nass .

Збережіть наступний код у файлі. Цей файл буде ідентифікований вашою системою як сценарій python. Це добре, оскільки він є одним. Це керівництво передбачає, що ви викликали сценарій encodestr.

#!/usr/bin/python

def encode(string):
    newstring = str()
    for ch in string:
        newstring += "<U%04X>" % ord(ch)
    return newstring

if __name__ == '__main__':
    import sys
    print encode(sys.argv[1])

Після збереження цього дозволу на виконання файлу - це стане в нагоді. Ви можете зробити це з допомогою Наутілуса, або тікаючи від терміналу наступної команди на каталозі , в якому ви зберегли сценарій: chmod +x encodestr.

Тепер ви можете перевірити цей скрипт працює на тому ж каталозі: ./encodestr hello. Ви повинні отримати вихід, рівний <U0068><U0065><U006C><U006C><U006F>.

Змініть існуючий локал

Модифікація наявної локалі - це найпростіший випадок, оскільки в ідеалі ви виберете локаль, який майже повністю відповідає вашим потребам, і в цьому випадку вам потрібно внести лише невеликі зміни. Для його адаптації ви можете скористатися посібником, щоб дізнатись, які з розділів є тими, які ви хочете змінити, і як ви можете їх змінити. Усі встановлені локалі проживають /usr/share/i18n/locales, однак керівництво містить майже кожну створену локаль.

Однак перше, що ви помітите, коли відкриєте локаль, - це те, що ви прочитаєте англійські слова стільки, скільки дивні <UXXXX>коди. Вам потрібно буде вміти створювати ці коди - ось тут і encodestrйде сценарій.

Коли ви знаєте, які розділи потрібно змінити, вам потрібно знати кожне поле, що міститься в розділі.

Наприклад, LC_TIMEрозділ містить поле t_fmtта багато інших. Кожне поле має свій опис у путівнику .

Тепер, коли ви знаєте, які поля потрібно змінити, скористайтеся посібником ще раз, щоб дізнатися, які значення приймає поле.

Наприклад, поле t_fmtприймає текст та загальні змінні strfmt .

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

ПРИМІТКА: Не кожне поле потрібно кодувати, використовуйте наявний локаль як посилання, якщо це необхідно.

Наприклад, якщо ви хочете мати формат часу Time: %Tв t_fmtполі, запустіть ./encodestr "Time: %T"; це повернеться, <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>і тому у вас буде лінія t_fmt <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>у вашій мові (звичайно, у відповідному розділі).

Після того, як ви змінили кожне поле, яке ви хотіли, вам потрібно буде продовжити встановлення локальної системи в систему, щоб її можна було використовувати. Перейдіть до розділу інсталяції для цього.

Створення локалу з нуля

На відміну від модифікації одного, інший метод, який ви можете використовувати для створення власної локальної мови, працює над цим з нуля. Це не дуже складно, якщо - знову ж таки - ви користуєтесь посібником . Ось корисна порада: ви можете копіювати розділи з інших локальних версій без власних методів копіювання та вставки . Вам просто потрібно дотримуватися цього формату:

LC_SECTION
copy "locale"
END LC_SECTION

Де LC_SECTIONзнаходиться розділ, який ви хочете змінити, і localeлокал, з якого потрібно скопіювати цей розділ.

Наприклад, якщо ви хочете скопіювати формат часу в англійській мові, ви мали б цей текст у вашому користувальницькому локальному файлі:

LC_TIME
copy "en_GB"
END LC_TIME

І це економить багато роботи та запевняє, що будь-які зміни, внесені до посилається на локалі, будуть відображені у вашому.

Встановлення власної локальної мови

Кроки, які я збираюся показати нижче, можуть бути не оптимальними, але працюють.

  1. Складіть свою мову. Не панікуйте! На це не потрібно часу. Просто запустіть команду, sudo localedef -i custom -f UTF-8 custom.UTF-8 -c -vде customє назва вашої мови.

  2. Скопіюйте свій локальний /usr/share/i18n/locales/каталог у каталог. Для цього вам обов’язково знадобляться sudo priviledges, і ви можете це зробити за допомогою команди, sudo cp locale /usr/share/i18n/locales/де localeназва файлу вашого користувацького локалу.

  3. Вкажіть свою мову в /var/lib/locales/supported.d/. Наприклад, створіть ім’я файлу /var/lib/locales/supported.d/asdта додайте рядок custom UTF-8, де користувацьким є ім’я вашої локалі.

  4. Виконайте магічну команду. Я насправді не знаю, що саме ця команда робить, але це дуже важливо. Біжи sudo locale-gen. Найімовірніше, що він генерує посилання на доступні локалі, де це необхідно.

  5. Скажіть вашій системі використовувати локаль. Якщо ви хочете, щоб локал використовувався на загальносистемному рівні, змініть /etc/environmentфайл. Якщо ні, ви можете змінити ~/.profileфайл або будь-який інший файл, який розміщується при запуску. Якщо ви не знаєте, що останнє означає, не хвилюйтеся, просто скористайтеся ~/.profileфайлом. Щоб знати, що ви повинні написати в ньому, спочатку запустіть localeкоманду. Він повинен видавати список з пунктами як LANGUAGE, LC_MESSAGES, LC_CTYPEі багатьма іншими. Ви будете писати для кожного з потрібних розділів (перерахованих попередньою командою) окремими рядками, SECTION="locale"де SECTIONзнаходиться розділ та localeназва вашої власної мови.

Наприклад, якщо ви хочете використовувати формат часу з Нідерландів, але англійською мовою, напишіть:

LANGUAGE="en_GB:en"
LC_TIME="nl_NL"

ПРИМІТКА. Якщо ви хочете використовувати одну локаль для кожного параметра локалі, напишіть, LC_ALL="locale"де localeім’я вашого власного мовного. Якщо ви хочете використовувати локаль для всього, окрім мови, ви можете написати LANG="locale"та (в іншому рядку, звичайно), LANGUAGE="locale":XXде XXє 2-літерний код для потрібної мови.

Наприклад, якщо ви хочете використовувати голландську мову та англійську мову, ви можете використовувати:

LANG="nl_NL"
LANGUAGE="nl_NL:en"

Ви закінчили

Наступного разу, коли ви ввійдете в систему, ваша мова повинна використовуватись. Ви можете перевірити це, запустивши localeкоманду ще раз.

Будь ласка, коментуйте невідповідності чи помилкові заяви в цьому посібнику!


Привіт, використовуваний вами код python працює не у всіх випадках. Для грецьких знаків πμвін виводить <U00CF><U0080><U00CE><U00BC>замість очікуваних символів <U03C0><U03BC>. Ось посилання, яке працює.
nass

Дякуємо за ваш внесок! Я включив ваш коментар до тексту, куди це належить :)
Severo Raz

Я повинен був додати custom UTF-8до /usr/share/i18n/SUPPORTEDперш , ніж я міг бігти sudo locale-gen. Інакше його не було б у списку.
Вільберт

Скопіював ваш метод перетворення рядків у колекцію моїх скриптів оболонок: github.com/budhajeewa/shell-scripts/commit/… . Дякую!
budhajeewa

Якщо хтось шукає функцію зробити зворотний спосіб у цій відповіді (мені знадобилося, щоб прочитати наявні шістнадцяткові значення у файлах локалів.), Я написав для цього сценарій PHP. github.com/budhajeewa/shell-scripts/commit / ... . Якщо хтось може написати це на Python, дайте мені знати. Я хотів би додати це до своєї колекції.
budhajeewa

8

Не впевнений, який тип налаштування ви хочете, але ви можете встановити деякі змінні локалі, використовуючи ваш ~/.locale. Наприклад, щоб отримувати англійські повідомлення, але німецький час та подібні речі, які я використовую

export LC_ALL=""
export LANG="en_GB.utf8"
export LC_CTYPE="de_DE.utf8"
export LC_NUMERIC="de_DE.utf8"
export LC_TIME="de_DE.utf8"
export LC_COLLATE="de_DE.utf8"
export LC_MONETARY="de_DE.utf8"
export LC_MESSAGES="en_GB.utf8"
export LC_PAPER="de_DE.utf8"
export LC_NAME="en_GB.utf8"
export LC_ADDRESS="de_DE.utf8"
export LC_TELEPHONE="de_DE.utf8"
export LC_MEASUREMENT="de_DE.utf8"
export LC_IDENTIFICATION="de_DE.utf8"

Можливе також створення спеціальних локалів. Дивіться, наприклад, цей посібник щодо дат.


1
Ні, я хочу налаштувати нижчий рівень. Наприклад: англійські повідомлення, метричні одиниці, модифікована дата / час чеської мови (DD.MM.YYYY HH: мм замість DMYYYY H.MM), крапка як десятковий роздільник (для цього є кома в чеській мові) та € як валюта (у чеській мові є валюта Kč).
Іван

Розумію. Приймаючи en_USза LC_NUMERICі de_DEза, LC_MONETARYі LC_MEASUREMENTдає вам інші побічні ефекти? Дивіться також нове посилання для створення особистої мови.
Карстен Тієль

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