locale
— Услуги по интернационализации¶
Исходный код: Lib/locale.py.
Модуль locale
открывает доступ к базе данных и функциональности POSIX locale. Механизм POSIX locale позволяет программистам решать определенные культурные вопросы в приложении, не требуя от программиста знания всех особенностей каждой страны, где выполняется программа.
Модуль locale
реализован поверх модуля _locale
, который в свою очередь использует реализацию локали ANSI C, если она доступна.
Модуль locale
определяет следующие исключения и функции:
-
exception
locale.
Error
¶ Исключение, возникающее, когда локаль, переданная в
setlocale()
, не распознана.
-
locale.
setlocale
(category, locale=None)¶ Если задана locale, а не
None
,setlocale()
изменяет настройки локали для категории. Доступные категории перечислены в описании данных ниже. locale может быть строкой или итерабельной строкой из двух строк (код языка и кодировка). Если это итерабельная строка, она преобразуется в имя локали с помощью механизма псевдонимов локали. Пустая строка задает пользовательские настройки по умолчанию. Если модификация локали не удалась, возникает исключениеError
. В случае успеха возвращается новая настройка локали.Если locale опущена или
None
, возвращается текущая настройка для category.setlocale()
не является потокобезопасным в большинстве систем. Приложения обычно начинаются с вызоваimport locale locale.setlocale(locale.LC_ALL, '')
Это устанавливает локаль для всех категорий в соответствии с настройками пользователя по умолчанию (обычно заданными в переменной окружения
LANG
). Если локаль в дальнейшем не изменяется, использование многопоточности не должно вызывать проблем.
-
locale.
localeconv
()¶ Возвращает базу данных локальных конвенций в виде словаря. Этот словарь имеет следующие строки в качестве ключей:
Категория
Ключ
Значение
'decimal_point'
Символ десятичной точки.
'grouping'
Последовательность чисел, указывающая, в каких относительных позициях ожидается
'thousands_sep'
. Если последовательность завершается символомCHAR_MAX
, дальнейшая группировка не производится. Если последовательность заканчивается на0
, то повторно используется последний размер группы.'thousands_sep'
Характер использовался между группами.
'int_curr_symbol'
Международный символ валюты.
'currency_symbol'
Символ местной валюты.
'p_cs_precedes/n_cs_precedes'
Предшествует ли символ валюты значению (для положительных и отрицательных значений).
'p_sep_by_space/n_sep_by_space'
Отделяется ли символ валюты от значения пробелом (для положительных и отрицательных значений).
'mon_decimal_point'
Десятичная точка, используемая для денежных значений.
'frac_digits'
Количество дробных цифр, используемых при локальном форматировании денежных значений.
'int_frac_digits'
Количество дробных цифр, используемых в международном форматировании денежных величин.
'mon_thousands_sep'
Групповой разделитель, используемый для денежных значений.
'mon_grouping'
Эквивалент
'grouping'
, используется для денежных значений.'positive_sign'
Символ, используемый для обозначения положительного денежного значения.
'negative_sign'
Символ, используемый для обозначения отрицательного денежного значения.
'p_sign_posn/n_sign_posn'
Положение знака (для положительных и отрицательных значений), см. ниже.
Все числовые значения могут быть установлены в
CHAR_MAX
, чтобы указать, что в данной локали значение не определено.Ниже приведены возможные значения для
'p_sign_posn'
и'n_sign_posn'
.Значение
Пояснение
0
Валюта и стоимость заключены в круглые скобки.
1
Знак должен предшествовать значению и символу валюты.
2
Знак должен следовать за значением и символом валюты.
3
Знак должен непосредственно предшествовать значению.
4
Знак должен следовать непосредственно за значением.
CHAR_MAX
В этой локали ничего не указано.
Функция временно устанавливает локаль
LC_CTYPE
на локальLC_NUMERIC
или на локальLC_MONETARY
, если локали разные, а числовые или денежные строки не ASCII. Это временное изменение влияет на другие потоки.Изменено в версии 3.7: Функция теперь временно устанавливает локаль
LC_CTYPE
в локальLC_NUMERIC
в некоторых случаях.
-
locale.
nl_langinfo
(option)¶ Возвращает некоторую информацию, специфичную для локали, в виде строки. Эта функция доступна не на всех системах, и набор возможных опций также может отличаться на разных платформах. Возможными значениями аргументов являются числа, для которых в модуле locale доступны символьные константы.
Функция
nl_langinfo()
принимает один из следующих ключей. Большинство описаний взято из соответствующего описания в библиотеке GNU C.-
locale.
CODESET
¶ Получение строки с именем кодировки символов, используемой в выбранной локали.
-
locale.
D_T_FMT
¶ Получение строки, которая может быть использована в качестве строки формата для
time.strftime()
для представления даты и времени в специфическом для данной местности виде.
-
locale.
D_FMT
¶ Получение строки, которая может быть использована в качестве строки формата для
time.strftime()
для представления даты в специфическом для данной местности виде.
-
locale.
T_FMT
¶ Получение строки, которая может быть использована в качестве строки формата для
time.strftime()
для представления времени в локально-специфическом виде.
-
locale.
T_FMT_AMPM
¶ Получение строки формата для
time.strftime()
для представления времени в формате am/pm.
-
DAY_1 ... DAY_7
Получить название n-го дня недели.
Примечание
Это соответствует американской конвенции, согласно которой
DAY_1
является воскресеньем, а не международной конвенции (ISO 8601), согласно которой понедельник является первым днем недели.
-
ABDAY_1 ... ABDAY_7
Получить сокращенное название n-го дня недели.
-
MON_1 ... MON_12
Получить название n-го месяца.
-
ABMON_1 ... ABMON_12
Получить сокращенное название n-го месяца.
-
locale.
RADIXCHAR
¶ Получить символ радикса (десятичная точка, десятичная запятая и т.д.).
-
locale.
THOUSEP
¶ Получить символ-разделитель для тысяч (группы из трех цифр).
-
locale.
YESEXPR
¶ Получите регулярное выражение, которое можно использовать с помощью функции regex для распознавания положительного ответа на вопрос «да/нет».
Примечание
Выражение имеет синтаксис, подходящий для функции
regex()
из библиотеки C, который может отличаться от синтаксиса, используемого вre
.
-
locale.
NOEXPR
¶ Получите регулярное выражение, которое можно использовать с помощью функции regex(3) для распознавания отрицательного ответа на вопрос «да/нет».
-
locale.
CRNCYSTR
¶ Получить символ валюты, перед которым ставится «-», если символ должен появиться перед значением, «+», если символ должен появиться после значения, или «.», если символ должен заменить символ радикса.
-
locale.
ERA
¶ Получить строку, представляющую эпоху, используемую в текущей локали.
Большинство локалей не определяют это значение. Примером локали, которая определяет это значение, является японская. В Японии традиционное представление дат включает название эпохи, соответствующей правлению тогдашнего императора.
Обычно нет необходимости использовать это значение напрямую. Указание модификатора
E
в их строках формата заставляет функциюtime.strftime()
использовать эту информацию. Формат возвращаемой строки не указан, поэтому не следует предполагать его знание на разных системах.
-
locale.
ERA_D_T_FMT
¶ Получите строку формата для
time.strftime()
для представления даты и времени в привязке к конкретной эпохе.
-
locale.
ERA_D_FMT
¶ Получите строку формата для
time.strftime()
для представления даты в привязке к конкретной эпохе.
-
locale.
ERA_T_FMT
¶ Получите строку формата для
time.strftime()
для представления времени в привязке к конкретной эпохе.
-
locale.
ALT_DIGITS
¶ Получите представление до 100 значений, используемых для представления значений от 0 до 99.
-
-
locale.
getdefaultlocale
([envvars])¶ Пытается определить настройки локали по умолчанию и возвращает их в виде кортежа вида
(language code, encoding)
.Согласно POSIX, программа, не вызвавшая
setlocale(LC_ALL, '')
, работает с использованием переносимой локали'C'
. Вызовsetlocale(LC_ALL, '')
позволяет ей использовать локаль по умолчанию, определяемую переменнойLANG
. Поскольку мы не хотим вмешиваться в текущую настройку локали, мы эмулируем ее поведение описанным выше способом.Для обеспечения совместимости с другими платформами проверяется не только переменная
LANG
, но и список переменных, заданных в качестве параметра envvars. Будет использоваться первая найденная переменная. По умолчанию envvars - это путь поиска, используемый в GNU gettext; он всегда должен содержать имя переменной'LANG'
. Путь поиска GNU gettext содержит'LC_ALL'
,'LC_CTYPE'
,'LANG'
и'LANGUAGE'
, в таком порядке.За исключением кода
'C'
, код языка соответствует RFC 1766. код языка и кодировка могут бытьNone
, если их значения не могут быть определены.
-
locale.
getlocale
(category=LC_CTYPE)¶ Возвращает текущую настройку для заданной категории локали в виде последовательности, содержащей код языка, кодировку. категория может быть одним из значений
LC_*
, кромеLC_ALL
. По умолчанию используется значениеLC_CTYPE
.За исключением кода
'C'
, код языка соответствует RFC 1766. код языка и кодировка могут бытьNone
, если их значения не могут быть определены.
-
locale.
getpreferredencoding
(do_setlocale=True)¶ Возвращает locale encoding, используемый для текстовых данных, в соответствии с предпочтениями пользователя. Предпочтения пользователя выражаются по-разному в разных системах и могут быть недоступны программно в некоторых системах, поэтому эта функция возвращает только предположение.
В некоторых системах для получения предпочтений пользователя необходимо вызывать
setlocale()
, поэтому эта функция не является потокобезопасной. Если вызов setlocale не является необходимым или желательным, do_setlocale следует установить вFalse
.На Android или если включен Python UTF-8 Mode, всегда возвращается
'UTF-8'
, locale encoding и аргумент do_setlocale игнорируются.Python preinitialization настраивает локаль LC_CTYPE. См. также filesystem encoding and error handler.
Изменено в версии 3.7: Теперь функция всегда возвращает
UTF-8
на Android или если включено Python UTF-8 Mode.
-
locale.
normalize
(localename)¶ Возвращает нормализованный код локали для заданного имени локали. Возвращаемый код локали отформатирован для использования с
setlocale()
. Если нормализация не удалась, исходное имя возвращается без изменений.Если заданная кодировка неизвестна, функция по умолчанию использует кодировку по умолчанию для кода локали, как и
setlocale()
.
-
locale.
resetlocale
(category=LC_ALL)¶ Устанавливает локаль для category в значение по умолчанию.
Настройка по умолчанию определяется вызовом
getdefaultlocale()
. category по умолчанию имеет значениеLC_ALL
.
-
locale.
strcoll
(string1, string2)¶ Сравнивает две строки в соответствии с текущей настройкой
LC_COLLATE
. Как и любая другая функция сравнения, возвращает отрицательное, или положительное значение, или0
, в зависимости от того, располагается ли строка1 перед или после строки2 или равна ей.
-
locale.
strxfrm
(string)¶ Преобразует строку в строку, которая может быть использована в сравнениях с учетом локали. Например,
strxfrm(s1) < strxfrm(s2)
эквивалентноstrcoll(s1, s2) < 0
. Эта функция может использоваться, когда одна и та же строка сравнивается многократно, например, при свертке последовательности строк.
-
locale.
format_string
(format, val, grouping=False, monetary=False)¶ Форматирует число val в соответствии с текущей настройкой
LC_NUMERIC
. Формат соответствует соглашениям оператора%
. Для значений с плавающей запятой десятичная точка изменяется, если это необходимо. Если grouping равно true, также учитывается группировка.Если monetary имеет значение true, то при преобразовании используются разделитель денежных тысяч и строки группировки.
Обрабатывает спецификаторы форматирования, как в
format % val
, но учитывает текущие настройки локали.Изменено в версии 3.7: Добавлен параметр ключевого слова monetary.
-
locale.
format
(format, val, grouping=False, monetary=False)¶ Обратите внимание, что эта функция работает как
format_string()
, но только для одного спецификатора%char
. Например,'%f'
и'%.0f'
являются допустимыми спецификаторами, а'%f KiB'
- нет.Для целых строк формата используйте
format_string()
.Не рекомендуется, начиная с версии 3.7: Вместо этого используйте
format_string()
.
-
locale.
currency
(val, symbol=True, grouping=False, international=False)¶ Форматирует число val в соответствии с текущими настройками
LC_MONETARY
.Возвращаемая строка включает символ валюты, если symbol равно true, что является значением по умолчанию. Если grouping равно true (что не является значением по умолчанию), то группировка производится со значением. Если international равно true (что не является значением по умолчанию), то используется международный символ валюты.
Обратите внимание, что эта функция не будет работать с локалью „C“, поэтому сначала необходимо установить локаль через
setlocale()
.
-
locale.
str
(float)¶ Форматирует число с плавающей точкой, используя тот же формат, что и встроенная функция
str(float)
, но учитывает десятичную точку.
-
locale.
delocalize
(string)¶ Преобразует строку в нормализованную числовую строку, следуя настройкам
LC_NUMERIC
.Добавлено в версии 3.5.
-
locale.
localize
(string, grouping=False, monetary=False)¶ Преобразует нормализованную строку чисел в форматированную строку, следуя настройкам
LC_NUMERIC
.Добавлено в версии 3.10.
-
locale.
atof
(string, func=float)¶ Преобразует строку в число, следуя установкам
LC_NUMERIC
, вызывая func на результате вызоваdelocalize()
на string.
-
locale.
atoi
(string)¶ Преобразует строку в целое число, следуя соглашениям
LC_NUMERIC
.
-
locale.
LC_CTYPE
¶ Категория локали для функций символьного типа. В зависимости от настроек этой категории, функции модуля
string
, работающие с регистром, меняют свое поведение.
-
locale.
LC_COLLATE
¶ Категория локали для сортировки строк. Затронуты функции
strcoll()
иstrxfrm()
модуляlocale
.
-
locale.
LC_TIME
¶ Категория локали для форматирования времени. Функция
time.strftime()
следует этим соглашениям.
-
locale.
LC_MONETARY
¶ Категория локали для форматирования денежных значений. Доступные опции можно получить из функции
localeconv()
.
-
locale.
LC_MESSAGES
¶ Категория локали для отображения сообщений. В настоящее время Python не поддерживает сообщения с учетом локали для конкретного приложения. Сообщения, отображаемые операционной системой, например, сообщения, возвращаемые командой
os.strerror()
, могут быть затронуты этой категорией.
-
locale.
LC_NUMERIC
¶ Категория локали для форматирования чисел. Эта категория влияет на функции
format()
,atoi()
,atof()
иstr()
модуляlocale
. Все остальные операции форматирования чисел не затрагиваются.
-
locale.
LC_ALL
¶ Комбинация всех настроек локали. Если этот флаг используется при изменении локали, то производится попытка установить локаль для всех категорий. Если это не удается для какой-либо категории, то ни одна категория не изменяется. Когда локаль извлекается с помощью этого флага, возвращается строка с указанием настроек для всех категорий. Эта строка может быть использована для восстановления настроек.
-
locale.
CHAR_MAX
¶ Это символическая константа, используемая для различных значений, возвращаемых
localeconv()
.
Пример:
>>> import locale
>>> loc = locale.getlocale() # get current locale
# use German locale; name might vary with platform
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
>>> locale.strcoll('f\xe4n', 'foo') # compare a string containing an umlaut
>>> locale.setlocale(locale.LC_ALL, '') # use user's preferred locale
>>> locale.setlocale(locale.LC_ALL, 'C') # use default (C) locale
>>> locale.setlocale(locale.LC_ALL, loc) # restore saved locale
Общие сведения, детали, подсказки, советы и предостережения¶
Стандарт C определяет локаль как общепрограммное свойство, изменение которого может быть относительно дорогим. Кроме того, некоторые реализации сломаны таким образом, что частое изменение локали может привести к выгрузке ядра. Это делает локаль несколько болезненной для правильного использования.
Изначально, при запуске программы, локалью является локаль C
, независимо от того, какую локаль предпочитает пользователь. Есть одно исключение: категория LC_CTYPE
изменяется при запуске программы, чтобы установить текущую кодировку локали на предпочтительную кодировку локали пользователя. Программа должна явно указать, что она хочет установить предпочитаемую пользователем локаль для других категорий, вызвав setlocale(LC_ALL, '')
.
Как правило, вызывать setlocale()
в какой-либо библиотечной процедуре - плохая идея, поскольку в качестве побочного эффекта это влияет на всю программу. Сохранять и восстанавливать его почти так же плохо: это дорого и влияет на другие потоки, которые случайно запускаются до восстановления настроек.
Если при написании модуля для общего использования вам понадобится независимая от локали версия операции, на которую влияет локаль (например, некоторые форматы, используемые с time.strftime()
), вам придется найти способ сделать это без использования стандартной библиотечной процедуры. Еще лучше убедить себя в том, что использование настроек локали - это нормально. Только в крайнем случае следует документировать, что ваш модуль не совместим с настройками локали неC
.
Единственный способ выполнять числовые операции в соответствии с локалью - использовать специальные функции, определенные этим модулем: atof()
, atoi()
, format()
, str()
.
Не существует способа выполнить преобразование регистра и классификацию символов в соответствии с локалью. Для текстовых строк (Unicode) они выполняются только в соответствии со значением символов, в то время как для байтовых строк преобразования и классификация выполняются в соответствии со значением ASCII байта, и байты, у которых установлен старший бит (т.е. не-ASCII байты), никогда не преобразуются и не считаются частью класса символов, таких как буква или пробел.
Для авторов расширений и программ, встраивающих Python¶
Модули расширения никогда не должны вызывать setlocale()
, кроме как для выяснения текущей локали. Но поскольку возвращаемое значение можно использовать только для его восстановления, это не очень полезно (за исключением, возможно, выяснения того, является ли локаль C
).
Когда код Python использует модуль locale
для изменения локали, это также влияет на встраиваемое приложение. Если встраиваемое приложение не хочет, чтобы это произошло, оно должно удалить модуль расширения _locale
(который выполняет всю работу) из таблицы встроенных модулей в файле config.c
и убедиться, что модуль _locale
недоступен как разделяемая библиотека.
Доступ к каталогам сообщений¶
-
locale.
gettext
(msg)¶
-
locale.
dgettext
(domain, msg)¶
-
locale.
dcgettext
(domain, msg, category)¶
-
locale.
textdomain
(domain)¶
-
locale.
bindtextdomain
(domain, dir)¶
Модуль locale раскрывает интерфейс gettext библиотеки C в системах, предоставляющих этот интерфейс. Он состоит из функций gettext()
, dgettext()
, dcgettext()
, textdomain()
, bindtextdomain()
и bind_textdomain_codeset()
. Они похожи на те же функции в модуле gettext
, но используют двоичный формат библиотеки C для каталогов сообщений и алгоритмы поиска библиотеки C для нахождения каталогов сообщений.
Обычно приложения Python не нуждаются в вызове этих функций, и вместо них следует использовать gettext
. Известным исключением из этого правила являются приложения, которые связываются с дополнительными библиотеками C, внутренне вызывающими gettext()
или dcgettext()
. Для таких приложений может потребоваться привязка текстового домена, чтобы библиотеки могли правильно определить местоположение своих каталогов сообщений.