Прототип функции setlocale:
char * setlocale( int category, const char * locale );
Заголовочный файл:
Название | Язык |
---|---|
locale.h | С |
clocale | С++ |
Описание
Функция setlocale
задает локаль, которая будет использоваться текущей программой. Можно изменить все параметры локали, или конкретные её части. Эта функция также может быть использована для получения имени текущей локали, передав NULL
в через параметр locale
.
Локаль содержит информацию о том, как интерпретировать и выполнять определенные операции ввода/вывода и преобразования с учетом географического расположения и специфики языков в определённых условиях.
Большинство используемых сред программирования имеют определенную информацию о локали, установленной в соответствии с предпочтениями пользователя или автоматической локализации. Но, независимо от этой системной локали, в момент запуска, все Си-программы имеют установленную Cи
-локаль, которая является нейтральной локалью с минимальной информацией, что позволяет предсказать результат программы. Для того чтобы использовать, по умолчанию, локаль установленную в среде программирования, необходимо вызвать функцию setlocale
с параметром locale
равным ""
.
По умолчанию, установлена локаль: SetLocale (LC_ALL, "C")
.
Вся локаль, по умолчанию, может быть установлена вызовом функции SetLocale (LC_ALL, "");
Если необходимо изменить часть текущей локали, вместо параметра LC_ALL
определяем параметр определённой категории. Какие именно категории есть, вы можете увидеть в таблице, ниже.
Чтобы изменить все параметры локали, необходимо вызвать функцию setlocale
с параметром category LC_ALL
, на пример, так: setlocale(LC_ALL,"");
Конкретные параметры текущей локали зависят от вызова функции setlocale
, предварительно указав параметр category
.
Параметры:
- category
Параметры локали, можно задавать отдельно каждый параметр или все сразу. В заголовочном файле<clocale>
определены константы, содержащие значения для этого параметра:
Константа | Описание |
---|---|
LC_ALL | Вся локаль. |
LC_COLLATE | Влияет на поведение функций strcoll и strxfrm . |
LC_CTYPE | Влияет на поведение всех функций заголовочного файла <cctype> , кроме isdigit и isxdigit и на функции обработки многобайтовых и широких символов. |
LC_MONETARY | Влияет на денежный формат, денежная информация возвращается функцией localeconv . |
LC_NUMERIC | Влияет на символ десятичной точки в операции форматируемого ввода/вывода и на функции форматирования строк, а также на неденежную информацию возвращаемую функцией localeconv . |
LC_TIME | Влияет на поведение функции strftime . |
- locale
Строка, содержащая имя локали. Как минимум существуют два значения, передаваемые через этот параметр:
Имя локали | Описание |
---|---|
«C» | Минимальная Си-локаль. |
» « | Локаль, по умолчанию, используемая средой разработки. |
Если значение этого параметра равно NULL
, функция не вносит никаких изменений в текущую локаль, но имя текущей локали возвращается функцией.
Возвращаемое значение
В случае успеха, функция возвращает указатель на строку с установленной локалью для данной категории.
Если установлена категория LC_ALL
и для различных частей локали установлены различные значения, возвращаемая строка предоставляет эту информацию в формате, который может варьироваться от реализации компилятора.
Если функции не удалось установить новую локаль, текущая локаль остается неизменной и возвращается нулевой указатель.
Пример: исходный код программы
// пример использования функции setlocale #include <iostream> // для оператора cout #include <ctime> // для функции time и localtime #include <clocale> // для функций настройки локали int main () { time_t numb_sec; // кол. сек прошедших с 00:00 , 1 января 1970 года struct tm * timeinfo; // структура хранения даты и времени char buffer [80]; struct lconv * lc; // инфрмация о форматировании числовых значений time ( &numb_sec ); // записать в numb_sec кол. сек прошедших с 00:00 , 1 января 1970 года timeinfo = localtime ( &numb_sec ); // заполняем структуру timeinfo, используя только значение количества сек. int twice = 0; // управляющая переменная циклом do while do { std::cout << "Локаль: " << setlocale(LC_ALL,NULL) << std::endl; // установить Си-локаль strftime (buffer,80,"%c",timeinfo);// преобразуем время в строку, которая сохраняется в buffer std::cout << "Дата: " << buffer << std::endl; lc = localeconv (); // сохранить параметры текущей локали в структуру lc std::cout << "Символ валюты: " << lc->currency_symbol << std::endl; setlocale (LC_ALL,""); // установить используемую системой локаль } while (!twice++); // цикл сработает всего 2 раза return 0; }
Пример работы программы
Одним из возможных выводов программы при запуске этого кода является:
Дата: Mon Oct 8 08:42:17 2012
Символ валюты:
Локаль: ru_UA.UTF-8
Дата: Пнд 08 Окт 2012 08:42:17
Символ валюты: гр
Комментарии
pro100bodia
Можна ввести setlocale(LC_ALL, «ukr»); читає всі українські літери крім і
Віталій Гордій
Що ставити для української мови?
admin
Украинский язык не поддерживается.
Сергей Плахотнюк
Так на скрині ж написано — ru_UA.UTF-8. Спробуй)