Функции библиотеки 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", используется для установки конкретной локали.

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

  • iflocaleявляетсяNULL, возвращает указатель на строку текущей информации о локализации.
  • iflocalenotNULLи, если установка прошла успешно, возвращает указатель на строку этой информации о локализации.
  • iflocalenotNULLи, если установка не удалась, вернутьNULL。

Пример

Ниже приведён пример кода с использованием setlocale, демонстрирующий, как задавать и запрашивать информацию о локализации.

Установка и запрос информации о локализации:

Пример

#include <stdio.h>
#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 <stdio.h>
#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, программы могут корректно обрабатывать и отображать локализованную информацию, такую как строки, числа, денежные единицы, даты и время.

Стандартная библиотека C - <locale.h>

Другие расширения