Функции библиотеки C -setlocale()
Стандартная библиотека C - <locale.h>
Описание
setlocaleявляется стандартной библиотекой C<locale.h>Функция, используемая для установки или запроса информации о локализации программы. Она позволяет программистам задавать параметры локали для классификации символов, преобразования символов, форматирования валюты, форматирования даты и времени, числового форматирования и т. д.
Объявление
Ниже приведено объявление функции setlocale().
#include <locale.h> char *setlocale(int category, const char *locale);
Параметр
-
category: Указывает категорию локализации для установки или запроса. Это может быть один из следующих макросов:LC_ALL: Устанавливает или запрашивает все категории локализации.LC_COLLATE: Устанавливает или запрашивает информацию о локализации для сравнения строк.LC_CTYPE: Устанавливает или запрашивает информацию о локализации для обработки символов.LC_MONETARY: Устанавливает или запрашивает информацию о локализации для форматирования денежных величин.LC_NUMERIC: Устанавливает или запрашивает информацию о локализации для форматирования чисел.LC_TIME: Устанавливает или запрашивает информацию о локализации для форматирования времени.
-
locale: Указывает информацию о локализации, которую нужно установить. Это может быть одно из следующих значений:"": Устанавливает значение по умолчанию из переменных среды пользователя.NULL: Запрашивает текущую информацию о локализации.Specific locale names: Например, "en_US.UTF-8", используется для установки конкретной локали.
Возвращаемое значение
- if
localeявляетсяNULL, возвращает указатель на строку текущей информации о локализации. - if
localenotNULLи, если установка прошла успешно, возвращает указатель на строку этой информации о локализации. - if
localenotNULLи, если установка не удалась, вернутьNULL。
Пример
Ниже приведён пример кода с использованием setlocale, демонстрирующий, как задавать и запрашивать информацию о локализации.
Установка и запрос информации о локализации:
Пример
#include <locale.h>
int main() {
// Запрос текущей информации о локали
printf("Локаль по умолчанию: %s\n", setlocale(LC_ALL, NULL));
// Установить информацию о локали в настройки по умолчанию из переменных среды пользователя
setlocale(LC_ALL, "");
// Получить и вывести информацию о текущей локали
printf("Локаль после установки в '': %s\n", setlocale(LC_ALL, NULL));
// Установить информацию о локали в "en_US.UTF-8"
if (setlocale(LC_ALL, "en_US.UTF-8") != NULL) {
printf("Локаль после установки в 'en_US.UTF-8': %s\n", setlocale(LC_ALL, NULL));
} else {
printf("Не удалось установить локаль в 'en_US.UTF-8'\n");
}
return 0;
}
Давайте скомпилируем и запустим вышеуказанную программу, это даст следующий результат:
Default locale: C Locale after setting to '': zh_CN.UTF-8 Locale after setting to 'en_US.UTF-8': en_US.UTF-8
Форматирование чисел в соответствии с информацией о локализации:
Пример
#include <locale.h>
int main() {
// Установить информацию о локали в настройки по умолчанию из переменных среды пользователя
setlocale(LC_NUMERIC, "");
// Вывести локализованное число с плавающей точкой
printf("Форматированное число: %'.2f\n", 1234567.89);
// Установить данные локали в "de_DE.UTF-8" (немецкий - Германия)
if (setlocale(LC_NUMERIC, "de_DE.UTF-8") != NULL) {
printf("Локаль после установки в 'de_DE.UTF-8': %s\n", setlocale(LC_NUMERIC, NULL));
printf("Форматированное число в немецкой локали: %'.2f\n", 1234567.89);
} else {
printf("Не удалось установить локаль в 'de_DE.UTF-8'\n");
}
return 0;
}
Давайте скомпилируем и запустим вышеуказанную программу, это даст следующий результат:
Formatted number: 1,234,567.89 Locale after setting to 'de_DE.UTF-8': de_DE.UTF-8 Formatted number in German locale: 1234567,89
Подробное описание
1. Установка и запрос информации о локализации
- В начале программы вы можете использовать
setlocale(LC_ALL, "");Устанавливает информацию о локализации программы в соответствии с настройками по умолчанию в переменных среды пользователя. Переменные среды пользователя обычно задаются операционной системой или пользователем и определяют локаль по умолчанию, которую программа должна использовать во время выполнения. - Вы можете использовать
setlocale(LC_ALL, "en_US.UTF-8");или другие строки локали для установки конкретной локали. - Использование
setlocale(LC_ALL, NULL);Запрашивает текущую информацию о локализации и возвращает строку, описывающую текущую локаль.
2. Категории локализации
Каждая категория управляет определенными аспектами программы:
LC_COLLATE: влияет на функции сравнения строк (такие какstrcollиstrxfrm)。LC_CTYPE: влияет на функции классификации и преобразования символов (такие какisalphaиtoupper)。LC_MONETARY: влияет на функции, связанные с форматированием денежных единиц (такие какlocaleconv)。LC_NUMERIC: Влияет на форматирование чисел (например, десятичная точка и разделитель тысяч).LC_TIME: влияет на форматы даты и времени (такие какstrftime)。
Итог
setlocale— функция, которая является важным инструментом для установки и запроса информации о локализации программы. Она позволяет программам адаптироваться к различным языкам и культурным соглашениям, тем самым обеспечивая интернационализацию и локализацию. Используяsetlocale, программы могут корректно обрабатывать и отображать локализованную информацию, такую как строки, числа, денежные единицы, даты и время.