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 strcpy(selected_locale, "C");
34 num_accept = num_tokens(LocaleString, ',');
36 for (i=num_accept-1; i>=0; --i) {
37 extract_token(lang, LocaleString, i, ',', sizeof lang);
39 /* Strip out the weights; we don't use them. Also convert
40 * hyphens to underscores.
42 for (j=0; j<strlen(lang); ++j) {
43 if (lang[j] == '-') lang[j] = '_';
44 if (lang[j] == ';') lang[j] = 0;
47 for (j=0; j<NUM_LANGS; ++j) {
48 if (!strcasecmp(lang, AvailLang[j])) {
49 strcpy(selected_locale, AvailLang[j]);
54 lprintf(9, "language found: %s\n", selected_locale);
55 set_selected_language(selected_locale);
59 void offer_languages(void) {
62 wprintf("<select name=\"language\" size=\"1\">\n");
64 for (i=0; i < NUM_LANGS; ++i) {
65 wprintf("<option %s value=%s>%s</option>\n",
66 ((WC->selected_language == i) ? "selected" : ""),
72 wprintf("</select>\n");
76 * Set the selected language for this session.
78 void set_selected_language(char *lang) {
81 for (i=0; i<NUM_LANGS; ++i) {
82 if (!strcasecmp(lang, AvailLang[i])) {
83 WC->selected_language = i;
89 * Activate and deactivate the selected language for this session.
91 void go_selected_language(void) {
92 if (WC->selected_language < 0) return;
93 uselocale(wc_locales[WC->selected_language]); /* switch locales */
94 textdomain(textdomain(NULL)); /* clear the cache */
97 void stop_selected_language(void) {
98 uselocale(LC_GLOBAL_LOCALE); /* switch locales */
99 textdomain(textdomain(NULL)); /* clear the cache */
104 * Create a locale_t for each available language
106 void initialize_locales(void) {
108 locale_t Empty_Locale;
111 /* create default locale */
112 Empty_Locale = newlocale(LC_ALL_MASK, NULL, NULL);
114 for (i = 0; i < NUM_LANGS; ++i) {
115 sprintf(buf, "%s.UTF8", AvailLang[i]);
116 wc_locales[i] = newlocale(LC_MESSAGES_MASK /* |LC_TIME_MASK FIXME */ ,
124 #else /* ENABLE_NLS */
126 void offer_languages(void) {
127 wprintf("English (US)");
130 void set_selected_language(char *lang) {
133 void go_selected_language(void) {
136 void stop_selected_language(void) {
139 #endif /* ENABLE_NLS */