8 char *AvailLang[NUM_LANGS] = {
14 locale_t wc_locales[NUM_LANGS];
16 typedef struct _lang_pref{
23 /* TODO: we skip the language weightening so far. */
24 /* Accept-Language: 'de-de,en-us;q=0.7,en;q=0.3' */
25 /* Accept-Language: de,en-ph;q=0.8,en-us;q=0.5,de-at;q=0.3 */
26 void httplang_to_locale(char *LocaleString)
28 char selected_locale[16];
33 lprintf(9, "languageAccept: %s\n", LocaleString);
35 strcpy(selected_locale, "C");
36 num_accept = num_tokens(LocaleString, ',');
38 for (i=num_accept-1; i>=0; --i) {
39 extract_token(lang, LocaleString, i, ',', sizeof lang);
41 /* Strip out the weights; we don't use them. Also convert
42 * hyphens to underscores.
44 for (j=0; j<strlen(lang); ++j) {
45 if (lang[j] == '-') lang[j] = '_';
46 if (lang[j] == ';') lang[j] = 0;
49 for (j=0; j<NUM_LANGS; ++j) {
50 if (!strncasecmp(lang, AvailLang[j], strlen(lang))) {
51 strcpy(selected_locale, AvailLang[j]);
56 lprintf(9, "language found: %s\n", selected_locale);
57 set_selected_language(selected_locale);
61 void offer_languages(void) {
64 wprintf("<select name=\"language\" size=\"1\">\n");
66 for (i=0; i < NUM_LANGS; ++i) {
67 wprintf("<option %s value=%s>%s</option>\n",
68 ((WC->selected_language == i) ? "selected" : ""),
74 wprintf("</select>\n");
78 * Set the selected language for this session.
80 void set_selected_language(char *lang) {
83 for (i=0; i<NUM_LANGS; ++i) {
84 if (!strcasecmp(lang, AvailLang[i])) {
85 WC->selected_language = i;
91 * Activate and deactivate the selected language for this session.
93 void go_selected_language(void) {
94 if (WC->selected_language < 0) return;
95 uselocale(wc_locales[WC->selected_language]); /* switch locales */
96 textdomain(textdomain(NULL)); /* clear the cache */
99 void stop_selected_language(void) {
100 uselocale(LC_GLOBAL_LOCALE); /* switch locales */
101 textdomain(textdomain(NULL)); /* clear the cache */
106 * Create a locale_t for each available language
108 void initialize_locales(void) {
110 locale_t Empty_Locale;
113 /* create default locale */
114 Empty_Locale = newlocale(LC_ALL_MASK, NULL, NULL);
116 for (i = 0; i < NUM_LANGS; ++i) {
117 sprintf(buf, "%s.UTF8", AvailLang[i]);
118 wc_locales[i] = newlocale(LC_MESSAGES_MASK /* |LC_TIME_MASK FIXME */ ,
126 #else /* ENABLE_NLS */
128 void offer_languages(void) {
129 wprintf("English (US)");
132 void set_selected_language(char *lang) {
135 void go_selected_language(void) {
138 void stop_selected_language(void) {
141 #endif /* ENABLE_NLS */