Формат локали в разных системах - 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;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы: stdio.h, locale.h, string.h
  2. Определяются значения переменных RU_LINUX_LOCALE, EN_LINUX_LOCALE, RU_WINDOWS_LOCALE, EN_WINDOWS_LOCALE.
  3. В функции main() создается указатель p на строку, которая возвращается функцией setlocale( LC_ALL, `` ), где LC_ALL - это константа, определяющая все локальные настройки.
  4. С помощью условного оператора if проверяется, какая локальная настройка используется в системе.
  5. Если используется Linux, то с помощью функции strstr() проверяется, содержит ли локальная настройка значение RU_LINUX_LOCALE или EN_LINUX_LOCALE, и выводится соответствующее значение.
  6. Если используется Windows, то с помощью функции strstr() проверяется, содержит ли локальная настройка значение RU_WINDOWS_LOCALE или EN_WINDOWS_LOCALE, и выводится соответствующее значение.
  7. Выводится значение переменной p.
  8. Функция main() возвращает 0, что означает успешное завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5
Похожие ответы