Формат локали в разных системах - C (СИ)
Формулировка задачи:
Англоязычный линукс возвращает "en_US", русскоязычный windows возвращает "Russia_Russian". Как определять локаль в независимости от системы? Перебирать все возможные(ru_RU || Russia_Russian || ...) или есть какой-то ещё выход?
char *currentLocale = setlocale(LC_ALL,"");
Решение задачи: «Формат локали в разных системах»
textual
Листинг программы
#include <stdio.h> #include <locale.h> #include <string.h> #define RU_LINUX_LOCALE "ru_UA" #define EN_LINUX_LOCALE "en_US" #define RU_WINDOWS_LOCALE "Russian_Russia" #define EN_WINDOWS_LOCALE "English_England" int main() { char *p = setlocale( LC_ALL, "" ); #ifdef __linux if ( strstr( p, RU_LINUX_LOCALE ) ) puts( RU_LINUX_LOCALE ); if ( strstr( p, EN_LINUX_LOCALE ) ) puts( EN_LINUX_LOCALE ); #elif defined _WIN32 || defined _WIN64 if ( strstr( p, RU_WINDOWS_LOCALE ) ) puts( RU_WINDOWS_LOCALE ); if ( strstr( p, EN_WINDOWS_LOCALE ) ) puts( EN_WINDOWS_LOCALE ); #endif puts( p ); return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h, locale.h, string.h
- Определяются значения переменных RU_LINUX_LOCALE, EN_LINUX_LOCALE, RU_WINDOWS_LOCALE, EN_WINDOWS_LOCALE.
- В функции main() создается указатель p на строку, которая возвращается функцией setlocale( LC_ALL, `` ), где LC_ALL - это константа, определяющая все локальные настройки.
- С помощью условного оператора if проверяется, какая локальная настройка используется в системе.
- Если используется Linux, то с помощью функции strstr() проверяется, содержит ли локальная настройка значение RU_LINUX_LOCALE или EN_LINUX_LOCALE, и выводится соответствующее значение.
- Если используется Windows, то с помощью функции strstr() проверяется, содержит ли локальная настройка значение RU_WINDOWS_LOCALE или EN_WINDOWS_LOCALE, и выводится соответствующее значение.
- Выводится значение переменной p.
- Функция main() возвращает 0, что означает успешное завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д