1. Главная страница » Компьютеры

Locale setlocale locale lc all

Автор: | 16.12.2019

Устанавливает или извлекает языковой стандарт времени выполнения. Sets or retrieves the run-time locale.

Синтаксис Syntax

Параметры Parameters

category category
Категория, на которую влияет языковой стандарт. Category affected by locale.

locale locale
Указатель языкового стандарта. Locale specifier.

Возвращаемое значение Return Value

Если заданы допустимые язык и региональные параметры и Категория , возвращает указатель на строку, связанную с заданным языковым стандартом и категорией. If a valid locale and category are given, returns a pointer to the string associated with the specified locale and category. Если языковой стандарт или Категория недействительна, возвращает пустой указатель, а текущие параметры языкового стандарта программы не изменяются. If the locale or category is not valid, returns a null pointer and the current locale settings of the program are not changed.

Например, вызов For example, the call

задает все категории, возвращая только строку sets all categories, returning only the string

Вы можете скопировать строку, возвращенную setlocale , для восстановления этой части информации о языковых стандартах программы. You can copy the string returned by setlocale to restore that part of the program’s locale information. Глобальное или локальное хранилище потока используется для строки, возвращаемой setlocale. Global or thread local storage is used for the string returned by setlocale. Последующие вызовы setlocale перезапишут строку, которая делает недействительными указатели строк, возвращаемые предыдущими вызовами. Later calls to setlocale overwrite the string, which invalidates string pointers returned by earlier calls.

Примечания Remarks

Используйте функцию setlocale , чтобы задать, изменить или запросить некоторые или все сведения о локали текущей программы, заданные локальным языком и категорией. Use the setlocale function to set, change, or query some or all of the current program locale information specified by locale and category. языковой стандарт — это локальность (страна, регион и язык), для которой можно настроить определенные аспекты программы. locale refers to the locality (country/region and language) for which you can customize certain aspects of your program. К некоторым категориям, зависящим от языкового стандарта, относится формат дат и отображения денежных значений. Some locale-dependent categories include the formatting of dates and the display format for monetary values. Если для языкового стандарта задана строка по умолчанию для языка с несколькими формами, поддерживаемыми на компьютере, следует проверить возвращаемое значение setlocale , чтобы узнать, какой язык действует. If you set locale to the default string for a language that has multiple forms supported on your computer, you should check the setlocale return value to see which language is in effect. Например, если задать для параметра locale значение "Китайский", то возвращаемым значением может быть "китайский-упрощенный" или "Китайский (традиционное письмо)". For example, if you set locale to "chinese" the return value could be either "chinese-simplified" or "chinese-traditional".

Читайте также:  Bq bq 5517l twin pro обзор

_wsetlocale — это версия setlocaleдля расширенных символов; Аргумент локали и возвращаемое значение _wsetlocale являются строками расширенных символов. _wsetlocale is a wide-character version of setlocale; the locale argument and return value of _wsetlocale are wide-character strings. поведение _wsetlocale и setlocale идентично в противном случае. _wsetlocale and setlocale behave identically otherwise.

Сопоставления подпрограмм обработки обычного текста Generic-Text Routine Mappings

Подпрограмма TCHAR.H TCHAR.H routine _UNICODE и _MBCS не определены _UNICODE & _MBCS not defined _MBCS определено _MBCS defined _UNICODE определено _UNICODE defined
_tsetlocale _tsetlocale setlocale setlocale setlocale setlocale _wsetlocale _wsetlocale

Аргумент Category определяет части информации о языковом стандарте программы, которые затрагиваются. The category argument specifies the parts of a program’s locale information that are affected. Макросы, используемые для категории и части программы, на которые они влияют, выглядят следующим образом: The macros used for category and the parts of the program they affect are as follows:

флаг категории category flag Затрагивает Affects
LC_ALL LC_ALL Все категории, перечисленные ниже. All categories, as listed below.
LC_COLLATE LC_COLLATE Функции strcoll, _stricoll, вксколл, _wcsicoll, стрксфрм, _strncoll, _strnicoll, _wcsncoll, _wcsnicollи вксксфрм . The strcoll, _stricoll, wcscoll, _wcsicoll, strxfrm, _strncoll, _strnicoll, _wcsncoll, _wcsnicoll, and wcsxfrm functions.
LC_CTYPE LC_CTYPE Функции обработки символов (кроме знаков isxdigit, функции mbstowcsи mbtowc, которые не затрагиваются). The character-handling functions (except isdigit, isxdigit, mbstowcs, and mbtowc, which are unaffected).
LC_MONETARY LC_MONETARY Сведения о денежном форматировании, возвращаемые функцией localeconv . Monetary-formatting information returned by the localeconv function.
LC_NUMERIC LC_NUMERIC Символ десятичной запятой для отформатированных выходных подпрограмм (например, printf), для подпрограмм преобразования данных и для сведений о неденежном форматировании, возвращаемых функцией localeconv. Decimal-point character for the formatted output routines (such as printf), for the data-conversion routines, and for the non-monetary formatting information returned by localeconv. В дополнение к символу десятичной запятой, LC_NUMERIC устанавливает разделитель групп разрядов и строку управления группированием, возвращаемую localeconv. In addition to the decimal-point character, LC_NUMERIC sets the thousands separator and the grouping control string returned by localeconv.
LC_TIME LC_TIME Функции strftime и wcsftime . The strftime and wcsftime functions.

Эта функция проверяет параметр категории. This function validates the category parameter. Если параметр категории не является одним из значений, приведенных в предыдущей таблице, вызывается обработчик недопустимого параметра, как описано в разделе Проверка параметров. If the category parameter is not one of the values given in the previous table, the invalid parameter handler is invoked, as described in Parameter Validation. Если выполнение может быть продолжено, функция устанавливает значение Еинвал и возвращает null. If execution is allowed to continue, the function sets errno to EINVAL and returns NULL.

Аргумент locale является указателем на строку, указывающую языковой стандарт. The locale argument is a pointer to a string that specifies the locale. Дополнительные сведения о формате аргумента языкового стандарта см. в разделе языковые имена, языки и строки страны или региона. For information about the format of the locale argument, see Locale Names, Languages, and Country/Region Strings. Если аргумент locale указывает на пустую строку, языковой стандарт соответствует исходной среде, определенной реализацией. If locale points to an empty string, the locale is the implementation-defined native environment. Значение C указывает МИНИМАЛЬную стандартную среду ANSI для перевода C. A value of C specifies the minimal ANSI conforming environment for C translation. Язык C предполагает, что все типы данных char имеют размер 1 байт, а их значение всегда меньше 256. The C locale assumes that all char data types are 1 byte and that their value is always less than 256.

При запуске программы выполняется эквивалент следующего оператора: At program startup, the equivalent of the following statement is executed:

setlocale( LC_ALL, "C" );

Аргумент locale может принимать имя локали, строку языка, языковую строку и код страны или региона, кодовую страницу, языковую строку, код страны или региона и кодовую страницу. The locale argument can take a locale name, a language string, a language string and country/region code, a code page, or a language string, country/region code, and code page. Набор доступных имен языкового стандарта, названий языков, кодов страны и кодовых страниц включает все поддерживаемые API многоязыковой поддержки Windows, кроме кодовых страниц, требующих более 2 байт на один знак, таких как UTF-7 и UTF-8. The set of available locale names, languages, country/region codes, and code pages includes all those supported by the Windows NLS API except code pages that require more than two bytes per character, such as UTF-7 and UTF-8. Если указать значение кодовой страницы UTF-7 или UTF-8, то setlocale завершится ошибкой, возвращая значение NULL. If you provide a code page value of UTF-7 or UTF-8, setlocale will fail, returning NULL. Набор имен языков, поддерживаемых setlocale , описан в разделе имена языков, языков и строк страны и региона. The set of locale names supported by setlocale are described in Locale Names, Languages, and Country/Region Strings. Набор строк языка и страны или региона, поддерживаемых setlocale , указан в строках языка и строках страны или региона. The set of language and country/region strings supported by setlocale are listed in Language Strings and Country/Region Strings. Рекомендуется использовать форму имени языкового стандарта для обеспечения производительности и удобства поддержки строк языкового стандарта, внедренных в код или сериализованных в хранилище. We recommend the locale name form for performance and for maintainability of locale strings embedded in code or serialized to storage. Строковые значения имен языкового стандарта реже подвергаются изменению обновлением операционной системы, чем язык и форма названия страны или региона. The locale name strings are less likely to be changed by an operating system update than the language and country/region name form.

Указатель null, который передается в качестве аргумента локали , указывает setlocale для запроса вместо установки международной среды. A null pointer that’s passed as the locale argument tells setlocale to query instead of to set the international environment. Если аргумент locale является пустым указателем, текущий параметр языкового стандарта программы не изменяется. If the locale argument is a null pointer, the program’s current locale setting is not changed. Вместо этого функция setlocale возвращает указатель на строку, связанную с категорией текущего языкового стандарта потока. Instead, setlocale returns a pointer to the string that’s associated with the category of the thread’s current locale. Если аргумент Category имеет значение LC_ALL, функция возвращает строку, которая указывает текущее значение каждой категории, разделенные точкой с запятой. If the category argument is LC_ALL, the function returns a string that indicates the current setting of each category, separated by semicolons. Например, последовательность вызовов For example, the sequence of calls

Строка, связанная с категорией LC_ALL . which is the string that’s associated with the LC_ALL category.

Следующие примеры относятся к категории LC_ALL . The following examples pertain to the LC_ALL category. Каждую из строк ".OCP" и ".ACP" можно использовать вместо номера кодовой страницы для определения использования заданной по умолчанию для пользователя кодовой страницы OEM и заданной по умолчанию для пользователя кодовой страницы ANSI, соответственно. Either of the strings ".OCP" and ".ACP" can be used instead of a code page number to specify use of the user-default OEM code page and user-default ANSI code page, respectively.

Задает языковой стандарт по умолчанию, т.е. заданную по умолчанию для пользователя кодовую страницу ANSI, полученную от операционной системы. Sets the locale to the default, which is the user-default ANSI code page obtained from the operating system.

setlocale( LC_ALL, ".OCP" );

Явно задает языковой стандарт согласно текущей кодовой странице OEM, полученной от операционной системы. Explicitly sets the locale to the current OEM code page obtained from the operating system.

setlocale( LC_ALL, ".ACP" );

Задает языковой стандарт согласно текущей кодовой странице ANSI, полученной от операционной системы. Sets the locale to the ANSI code page obtained from the operating system.

Задает языковой стандарт согласно имени языкового стандарта, отображаемому . Sets the locale to the locale name that’s indicated by .

setlocale( LC_ALL, " _ " );

Задает языковой стандарт согласно языку и стране или региону, отображаемым и , вместе с кодовой страницей по умолчанию, полученной от операционной системы. Sets the locale to the language and country/region indicated by and , together with the default code page obtained from the host operating system.

setlocale( LC_ALL, " _ . " );

Задает языковой стандарт для языка, страны или региона, а также кодовую страницу, , и . Sets the locale to the language, country/region, and code page indicated by the , , and strings. Можно использовать различные сочетания языка, страны или региона и кодовой страницы. You can use various combinations of language, country/region, and code page. Например, этот вызов устанавливает языковой стандарт "французский (Канада)" с кодовой страницей 1252. For example, this call sets the locale to French Canada with code page 1252:

setlocale( LC_ALL, "French_Canada.1252" );

Этот вызов устанавливает языковой стандарт "французский (Канада)" с кодовой страницей по умолчанию ANSI. This call sets the locale to French Canada with the default ANSI code page:

setlocale( LC_ALL, "French_Canada.ACP" );

Этот вызов устанавливает языковой стандарт "французский (Канада)" с кодовой страницей по умолчанию OEM. This call sets the locale to French Canada with the default OEM code page:

setlocale( LC_ALL, "French_Canada.OCP" );

Задает языковой стандарт согласно языку, отображаемому , и использует страну или регион по умолчанию для определенного языка и заданную по умолчанию для пользователя кодовую страницу ANSI для этой страны или региона согласно данным, полученным от операционной системы. Sets the locale to the language that’s indicated by , and uses the default country/region for the specified language and the user-default ANSI code page for that country/region as obtained from the host operating system. Например, следующие вызовы setlocale функционально эквивалентны: For example, the following calls to setlocale are functionally equivalent:

setlocale( LC_ALL, "en-US" );

setlocale( LC_ALL, "English" );

setlocale( LC_ALL, "English_United States.1252" );

Рекомендуется использовать первую форму для обеспечения производительности и простоты обслуживания. We recommend the first form for performance and maintainability.

Задает кодовую страницу согласно значению, отображаемому , вместе с языком и страной или регионом по умолчанию (согласно определению операционной системы) для заданной кодовой страницы. Sets the code page to the value indicated by , together with the default country/region and language (as defined by the host operating system) for the specified code page.

Для изменения кодовой страницы категория должна быть либо LC_ALL , либо LC_CTYPE . The category must be either LC_ALL or LC_CTYPE to effect a change of code page. Например, если страна или регион по умолчанию и язык операционной системы узла имеют значение "США" и "Английский", следующие два вызова setlocale функционально эквивалентны: For example, if the default country/region and language of the host operating system are "United States" and "English," the following two calls to setlocale are functionally equivalent:

setlocale( LC_ALL, ".1252" );

setlocale( LC_ALL, "English_United States.1252");

Дополнительные сведения см. в разделе о pragma-директиве setlocale в Справочнике по препроцессору C/C++. For more information, see the setlocale pragma directive in the C/C++ Preprocessor Reference.

Функция _configthreadlocale используется для управления тем, влияет ли setlocale на языковой стандарт для всех потоков в программе или только на языковой стандарт вызывающего потока. The function _configthreadlocale is used to control whether setlocale affects the locale of all threads in a program or only the locale of the calling thread.

Требования Requirements

Подпрограмма Routine Обязательный заголовок Required header
setlocale setlocale
_wsetlocale _wsetlocale или or

Дополнительные сведения о совместимости см. в разделе Совместимость. For additional compatibility information, see Compatibility.

В соответствии с документацией, strftime() должен возвращать локализованные значения даты и времени (название месяцев и дней недели и т.д.), однако делает это лишь после явной установки локали:

Почему на русском начинает выводить только после переопределения локали, хотя до этого она и так была (‘ru_RU’, ‘UTF-8’) ? Более того, достаточно просто сделать resetlocale:

1 ответ 1

Все программы на *nix системах (не только python ) стартуют, используя C (POSIX) locale до тех пор пока они не вызовут setlocale(LC_ALL, ») , чтобы активировать пользовательскую locale.

Если не хотите locale активировать для процесса, то можно использовать библиотеки, которые явно позволяют язык выбрать, такие как PyICU (пример использования)—есть полегче библиотеки, которые могут работать для конкретной задачи, например humanize :

В: но почему же locale.getlocale() выдаёт ru_RU ?

Я бы также ожидал, что-нибудь вроде (None, None) вместо (‘ru_RU’, ‘UTF-8’) до того как setlocale(LC_ALL, ») вызвано в программе. Из документации: "Returns the current setting for the given locale category" не очевидно, что пользовательские настройки из переменных окружения ( LC_* , LANG ) читаются, а не текущая локаль по умолчанию ("The POSIX locale is the default global locale at entry to main() ") возвращается до вызова setlocale(LC_ALL, ») .

locale модуль это тонкая обёртка вокруг соответствующей C функциональности, в частности, поведение может зависеть от платформы. Текущая реализация locale.getlocale() эквивалентна C setlocale(category, NULL) , которая запрашивает текущую настройку для локали ("query the current global locale setting").

Почему "the current global locale setting" не равна "the default global locale" до вызова setlocale(LC_ALL, ») я не понимаю. Может дело в слове setting vs. locale , то есть текущая настройка до вызова setlocale(LC_ALL, ») берётся из переменных окружения ( LC_* , etc), а текущая локаль до вызова setlocale(LC_ALL, ») , используемая strftime() , является C (как и положено). Но это чистая спекуляция с моей стороны.

При обновлении ядра Ubuntu Linux выскакивает ошибка:

Я решил проверить в чем дело, для этого выполняю команду locale:

На последней строке видим что не установлено LC_ALL

После этого необходимо выйти и зайти в систему или перегрузить сервер.

Проверяем что локаль правильно установлена:

Вот таким мы образом устранили ошибку локали.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *