[Ця відповідь націлена лише на платформу Linux]
Перше, що вам слід знати, це більшість конфігураційних файлів локального контента, які можна знайти з localedef --help
:
$ localedef --help | tail -n 5
System's directory for character maps : /usr/share/i18n/charmaps
repertoire maps: /usr/share/i18n/repertoiremaps
locale path : /usr/lib/locale:/usr/share/i18n
For bug reporting instructions, please see:
<https://bugs.launchpad.net/ubuntu/+source/glibc/+bugs>
Бачите останнє /usr/share/i18n
? Тут знаходиться ваш конфігураційний файл xx_XX.UTF-8:
$ ls /usr/share/i18n/locales/zh_*
/usr/share/i18n/locales/zh_CN /usr/share/i18n/locales/zh_HK /usr/share/i18n/locales/zh_SG /usr/share/i18n/locales/zh_TW
А тепер що? Нам потрібно скласти їх в архівний двійковий файл. Один із способів, наприклад, припустимо, що у мене є /usr/share/i18n/locales/en_LOVE
, я можу додати його до списку компіляції, тобто у /etc/locale-gen
файл:
$ tail -1 /etc/locale.gen
en_LOVE.UTF-8 UTF-8
І компілюйте його до двійкового з sudo locale-gen
:
$ sudo locale-gen
Generating locales (this might take a while)...
en_AG.UTF-8... done
en_AU.UTF-8... done
en_BW.UTF-8... done
...
en_LOVE.UTF-8... done
Generation complete.
А тепер оновіть локальну систему за замовчуванням на потрібне LANG
, LC_ALL
... тощо за допомогою цього update-locale
:
sudo update-locale LANG=en_LOVE.UTF-8
update-locale
насправді також означає оновити цей /etc/default/locale
файл, який подаватиметься системою при вході в систему змінних середовища:
$ head /etc/default/locale
# File generated by update-locale
LANG=en_LOVE.UTF-8
LC_NUMERIC="en_US.UTF-8"
...
Але ми можемо не хотіти перезавантажуватись, щоб набути чинності, тому ми можемо просто запустити її до змінної середовища в поточному сеансі оболонки:
$ . /etc/default/locale
Як щодо sudo dpkg-reconfigure locales
? Якщо ви будете грати навколо нього, ви знаєте, що ця команда в основному діє як графічний інтерфейс для спрощення вищезазначених кроків, тобто Правка /etc/locale.gen
-> sudo locale-gen
->sudo update-locale LANG=en_LOVE.UTF-8
Для python, якщо він /etc/locale.gen
містить цього локального кандидата та locale.gen
збирається, setlocale(category, locale)
повинен працювати без кидків locale.Error: unsupoorted locale setting
. Ви можете перевірити правильний рядок en_US.UTF-8
/, en_US/....etc
який слід встановити setlocale()
, спостерігаючи /etc/locale.gen
файл, а потім відміняйте та компілюйте його за бажанням. zh_CN GB2312
без крапки в цьому файлі означає, що правильний рядок є zh_CN
і zh_CN.GB2312
.