X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fgettext.c;h=4df641a28e7ce01f4eb1a8fda82878ae59140fa1;hb=faa7bc4175fa88b5fd6548b2e92cdc5497dfe692;hp=58a0edd8d78bb48437893ecab62f4a47ccf37ab4;hpb=2231ed4d99d9e8adc745c3b2959d885259931c12;p=citadel.git diff --git a/webcit/gettext.c b/webcit/gettext.c index 58a0edd8d..4df641a28 100644 --- a/webcit/gettext.c +++ b/webcit/gettext.c @@ -209,25 +209,12 @@ void httplang_to_locale(StrBuf *LocaleString, wcsession *sess) */ void tmplput_offer_languages(StrBuf *Target, WCTemplputParams *TP) { +#ifdef HAVE_USELOCALE int i; -#ifndef HAVE_USELOCALE - char *Lang = getenv("LANG"); - - if (Lang == NULL) - Lang = "C"; -#endif - - if (nLocalesLoaded == 1) { - wc_printf("

%s

", AvailLangLoaded[0]); - return; - } wc_printf("\n"); +#else + wc_printf("%s", (getenv("LANG") ? getenv("LANG") : "C")); +#endif } /* @@ -280,9 +270,6 @@ void stop_selected_language(void) { #endif } -#ifdef HAVE_USELOCALE - locale_t Empty_Locale; -#endif /* * Create a locale_t for each available language @@ -290,7 +277,6 @@ void stop_selected_language(void) { void initialize_locales(void) { int nLocales; int i; - char buf[32]; char *language = NULL; #ifdef ENABLE_NLS @@ -315,47 +301,38 @@ void initialize_locales(void) { #ifdef HAVE_USELOCALE wc_locales = malloc (sizeof(locale_t) * nLocales); memset(wc_locales,0, sizeof(locale_t) * nLocales); - /* create default locale */ - Empty_Locale = newlocale(LC_ALL_MASK, NULL, NULL); + wc_locales[0] = newlocale(LC_ALL_MASK, NULL, NULL); #endif - for (i = 0; i < nLocales; ++i) { - if ((language != NULL) && (strcmp(AvailLang[i], language) != 0)) - continue; - if (i == 0) { - sprintf(buf, "%s", AvailLang[i]); /* locale 0 (C) is ascii, not utf-8 */ - } - else { - sprintf(buf, "%s.UTF8", AvailLang[i]); - } + for (i = 1; i < nLocales; ++i) { #ifdef HAVE_USELOCALE wc_locales[nLocalesLoaded] = newlocale( (LC_MESSAGES_MASK|LC_TIME_MASK), - buf, - Empty_Locale + AvailLang[i], + wc_locales[0] ); if (wc_locales[nLocalesLoaded] == NULL) { syslog(1, "locale for %s disabled: %s (domain: %s, path: %s)", - buf, + AvailLang[i], strerror(errno), textdomain(NULL), bindtextdomain(textdomain(NULL), NULL) ); } else { - syslog(3, "Found locale: %s", buf); + syslog(3, "Found locale: %s", AvailLang[i]); AvailLangLoaded[nLocalesLoaded] = AvailLang[i]; nLocalesLoaded++; } #else if ((language != NULL) && (strcmp(language, AvailLang[i]) == 0)) { - setenv("LANG", buf, 1); + setenv("LANG", AvailLang[i], 1); AvailLangLoaded[nLocalesLoaded] = AvailLang[i]; setlocale(LC_MESSAGES, AvailLang[i]); nLocalesLoaded++; } else if (nLocalesLoaded == 0) { - setenv("LANG", buf, 1); + setenv("LANG", AvailLang[i], 1); AvailLangLoaded[nLocalesLoaded] = AvailLang[i]; nLocalesLoaded++; } @@ -363,13 +340,7 @@ void initialize_locales(void) { } if ((language != NULL) && (nLocalesLoaded == 0)) { syslog(1, "Your selected locale [%s] isn't available on your system. falling back to C", language); -#ifdef HAVE_USELOCALE - wc_locales[0] = newlocale( - (LC_MESSAGES_MASK|LC_TIME_MASK), - AvailLang[0], - Empty_Locale - ); -#else +#ifndef HAVE_USELOCALE setlocale(LC_MESSAGES, AvailLang[0]); setenv("LANG", AvailLang[0], 1); #endif @@ -386,9 +357,7 @@ ServerShutdownModule_GETTEXT #ifdef HAVE_USELOCALE int i; for (i = 0; i < nLocalesLoaded; ++i) { - if (Empty_Locale != wc_locales[i]) { - freelocale(wc_locales[i]); - } + freelocale(wc_locales[i]); } free(wc_locales); #endif