char * get_default_locale(void) { const char *lc_vars[] = {"LC_ALL", "LC_CTYPE", "LANG", NULL}; char *ev; const char **evname; char *locale = NULL; for(evname = lc_vars; NULL != *evname; evname++) { ev = getenv(*evname); if ((NULL != ev) && ('\0' != ev[0])) break; } if (NULL != *evname) { locale = ev; lgdebug(D_USER_FILES, "Debug: Environment locale \"%s=%s\"\n", *evname, ev); #ifdef _WIN32 /* If compiled with MSVC/MinGW, we still support running under Cygwin. */ const char *ostype = getenv("OSTYPE"); if ((NULL != ostype) && (0 == strcmp(ostype, "cygwin"))) { /* Convert to Windows style locale */ locale = strdupa(locale); locale[strcspn(locale, "_")] = '-'; locale[strcspn(locale, ".@")] = '\0'; } #endif /* _WIN32 */ } else { lgdebug(D_USER_FILES, "Debug: Environment locale not set\n"); #ifdef _WIN32 locale = win32_getlocale(); if (NULL == locale) lgdebug(D_USER_FILES, "Debug: Cannot find user default locale\n"); else lgdebug(D_USER_FILES, "Debug: User default locale \"%s\"\n", locale); return locale; /* Already strdup'ed */ #endif /* _WIN32 */ } return safe_strdup(locale); }
char * get_default_locale(void) { char * locale, * needle; locale = NULL; #ifdef _WIN32 if(!locale) locale = win32_getlocale (); #endif if(!locale) locale = safe_strdup (getenv ("LANG")); #if defined(HAVE_LC_MESSAGES) if(!locale) locale = safe_strdup (setlocale (LC_MESSAGES, NULL)); #endif if(!locale) locale = safe_strdup (setlocale (LC_ALL, NULL)); if(!locale || strcmp(locale, "C") == 0) { free(locale); locale = safe_strdup("en"); } /* strip off "@euro" from en_GB@euro */ if ((needle = strchr (locale, '@')) != NULL) *needle = '\0'; /* strip off ".UTF-8" from en_GB.UTF-8 */ if ((needle = strchr (locale, '.')) != NULL) *needle = '\0'; /* strip off "_GB" from en_GB */ if ((needle = strchr (locale, '_')) != NULL) *needle = '\0'; return locale; }