import locale locale.setlocale(category, locale=None)
category
- категория локали,locale=None
- строка или кортеж языковой стандарт.Функция setlocale()
модуля locale
изменяет настройку языкового стандарта для категории category
если указан языковой стандарт locale
. В случае успеха смены локали возвращается новая настройка локали. Если языковой стандарт locale
опущен или отсутствует, возвращается текущий параметр категории category
.
Доступные категории category
перечислены в разделе "Категории локали модуля locale
."
Аргумент locale
может быть строкой или кортежем из двух строк ('код языка', 'кодировка')
:
locale=''
указывает настройки пользователя по умолчанию. Функция locale.setlocale()
не является потокобезопасной на большинстве систем. обычно приложения начинают работу с вызова этой функции для проверки или корректировки региональных настроек.
Функция устанавливает языковой стандарт для всех категорий в соответствии с настройками пользователя по умолчанию и обычно указывается в переменной среды LANG
. Если после этого языковой стандарт не изменился, использование многопоточности не должно вызывать проблем.
import locale locale.setlocale(locale.LC_ALL, '')
Посмотрим как зависят региональные настройки от установки локали в Python.
>>> import locale, pprint, time, calendar # смотрим текущие настройки локали >>> locale.setlocale(locale.LC_ALL) # 'LC_CTYPE=ru_RU.UTF-8;LC_NUMERIC=C; # LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C; # LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C; # LC_ADDRESS=C;LC_TELEPHONE=C; # LC_MEASUREMENT=C;LC_IDENTIFICATION=C' >>> time.strftime('%A, %d %B %Y года.') # 'Monday, 27 April 2020 года.' >>> list(calendar.day_name) # ['Monday', 'Tuesday', 'Wednesday', # 'Thursday', 'Friday', 'Saturday', 'Sunday'] >>> std = locale.localeconv() >>> pprint.pprint(std) # {'currency_symbol': '', # 'decimal_point': '.', # 'frac_digits': 127, # 'grouping': [], # 'int_curr_symbol': '', # 'int_frac_digits': 127, # 'mon_decimal_point': '', # 'mon_grouping': [], # 'mon_thousands_sep': '', # 'n_cs_precedes': 127, # 'n_sep_by_space': 127, # 'n_sign_posn': 127, # 'negative_sign': '', # 'p_cs_precedes': 127, # 'p_sep_by_space': 127, # 'p_sign_posn': 127, # 'positive_sign': '', # 'thousands_sep': ''}
Теперь установим локаль функцией locale.setlocale() в LC_ALL
как ('ru_RU', 'UTF-8')
.
>>> import locale, pprint, time, calendar # устанавливаем локаль >>> locale.setlocale(locale.LC_ALL, ('ru_RU', 'UTF-8')) # 'ru_RU.UTF-8' >>> time.strftime('%A, %d %B %Y года.') # 'Понедельник, 27 апреля 2020 года.' >>> list(calendar.day_name) # ['Понедельник', 'Вторник', 'Среда', 'Четверг', # 'Пятница', 'Суббота', 'Воскресенье'] >>> std = locale.localeconv() >>> pprint.pprint(std) # {'currency_symbol': '₽', # 'decimal_point': ',', # 'frac_digits': 2, # 'grouping': [3, 3, 0], # 'int_curr_symbol': 'RUB ', # 'int_frac_digits': 2, # 'mon_decimal_point': ',', # 'mon_grouping': [3, 3, 0], # 'mon_thousands_sep': '\u202f', # 'n_cs_precedes': 0, # 'n_sep_by_space': 1, # 'n_sign_posn': 1, # 'negative_sign': '-', # 'p_cs_precedes': 0, # 'p_sep_by_space': 1, # 'p_sign_posn': 1, # 'positive_sign': '', # 'thousands_sep': '\u202f'}