[Этот ответ предназначен только для платформы 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
? Если вы поэкспериментируете с этим, вы поймете, что эта команда в основном действует как графический интерфейс для упрощения описанных выше шагов, т.е. Edit /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
.