все Python 3localeфункция
locale.setlocale()
настройка локали
Устанавливает или запрашивает локаль для категории (LC_NUMERIC, LC_ALL и др.); от неё зависят разделители чисел, валюта и сортировка.
Синтаксис
locale.setlocale(category, locale=None)
Главная ловушка: локаль — состояние всего процесса, а не модуля или потока. Вызов в одной библиотеке молча меняет atof(), format_string() и сортировку во всей программе и в остальных потоках, а сам setlocale потокобезопасным не является. Без второго аргумента функция только читает текущее значение; setlocale(LC_ALL, '') берёт локаль из окружения, а имя, которого нет в системе, даёт locale.Error. До первого вызова все категории, кроме LC_CTYPE, остаются 'C'.
Примеры
import locale
print(locale.setlocale(locale.LC_NUMERIC)) # → C — запрос, ничего не меняет
try:
locale.setlocale(locale.LC_NUMERIC, 'ru_RU.UTF-8')
print(locale.str(3.14)) # → ? 3,14 — если локаль есть в системе
except locale.Error as e:
print('нет такой локали:', e) # → ? unsupported locale setting
import locale
saved = locale.setlocale(locale.LC_ALL)
locale.setlocale(locale.LC_ALL, '') # → ? локаль из окружения: LANG, LC_ALL
print(locale.localeconv()['decimal_point']) # → ? '.' или ',' — зависит от машины
locale.setlocale(locale.LC_ALL, saved) # вернуть как было — для всего процесса
print(locale.localeconv()['decimal_point']) # → .
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности