Hardcoded dropdown menu for language selection

This commit is contained in:
Berke Viktor 2012-10-18 22:57:55 +02:00
parent b686a24d3b
commit 9abfecf05e
4 changed files with 207 additions and 21 deletions

View File

@ -452,7 +452,7 @@ const struct prefs vars[] = {
{"gui_join_dialog", P_OFFINT (gui_join_dialog), TYPE_BOOL},
{"gui_lagometer", P_OFFINT (lagometer), TYPE_INT},
#ifdef WIN32
{"gui_lang", P_OFFSET (gui_lang), TYPE_STR},
{"gui_lang", P_OFFINT (gui_lang), TYPE_INT},
#endif
{"gui_mode_buttons", P_OFFINT (chanmodebuttons), TYPE_BOOL},
#ifdef WIN32
@ -677,7 +677,10 @@ load_config (void)
prefs.indent_nicks = 1;
prefs.thin_separator = 1;
prefs._tabs_position = 2; /* 2 = left */
#ifndef WIN32
#ifdef WIN32
prefs.identd = 1;
prefs.gui_lang = 12;
#else
prefs.fastdccsend = 1;
#endif
prefs.wordwrap = 1;
@ -747,10 +750,6 @@ load_config (void)
prefs.url_grabber_limit = 100; /* 0 means unlimited */
prefs.text_search_follow = 1;
prefs.timestamp = 1;
#ifdef WIN32
prefs.identd = 1;
strcpy (prefs.gui_lang, g_getenv ("LC_ALL") ? g_getenv ("LC_ALL") : "en_US");
#endif
strcpy (prefs.spell_langs, g_getenv ("LC_ALL") ? g_getenv ("LC_ALL") : "en_US");
strcpy (prefs.stamp_format, "[%H:%M:%S] ");
strcpy (prefs.timestamp_log_format, "%b %d %H:%M:%S ");

View File

@ -957,23 +957,150 @@ main (int argc, char *argv[])
srand (time (0)); /* CL: do this only once! */
#ifdef SOCKS
SOCKSinit (argv[0]);
#endif
ret = fe_args (argc, argv);
if (ret != -1)
return ret;
#ifdef USE_DBUS
xchat_remote ();
#endif
load_config ();
#ifdef WIN32
/* we MUST do this after load_config () otherwise it would fail */
snprintf (hexchat_lang, 12, "LC_ALL=%s", prefs.gui_lang);
strcpy (hexchat_lang, "LC_ALL=");
switch (prefs.gui_lang)
{
case 0:
strcat (hexchat_lang, "sq");
break;
case 1:
strcat (hexchat_lang, "am");
break;
case 2:
strcat (hexchat_lang, "az");
break;
case 3:
strcat (hexchat_lang, "eu");
break;
case 4:
strcat (hexchat_lang, "be");
break;
case 5:
strcat (hexchat_lang, "bg");
break;
case 6:
strcat (hexchat_lang, "ca");
break;
case 7:
strcat (hexchat_lang, "zh_CN");
break;
case 8:
strcat (hexchat_lang, "zh_TW");
break;
case 9:
strcat (hexchat_lang, "cs");
break;
case 10:
strcat (hexchat_lang, "nl");
break;
case 11:
strcat (hexchat_lang, "en_GB");
break;
case 12:
strcat (hexchat_lang, "en_US");
break;
case 13:
strcat (hexchat_lang, "et");
break;
case 14:
strcat (hexchat_lang, "fi");
break;
case 15:
strcat (hexchat_lang, "fr");
break;
case 16:
strcat (hexchat_lang, "gl");
break;
case 17:
strcat (hexchat_lang, "de");
break;
case 18:
strcat (hexchat_lang, "el");
break;
case 19:
strcat (hexchat_lang, "hi");
break;
case 20:
strcat (hexchat_lang, "hu_HU");
break;
case 21:
strcat (hexchat_lang, "it");
break;
case 22:
strcat (hexchat_lang, "ja");
break;
case 23:
strcat (hexchat_lang, "kn");
break;
case 24:
strcat (hexchat_lang, "ko");
break;
case 25:
strcat (hexchat_lang, "lv");
break;
case 26:
strcat (hexchat_lang, "lt");
break;
case 27:
strcat (hexchat_lang, "mk");
break;
case 28:
strcat (hexchat_lang, "ms");
break;
case 29:
strcat (hexchat_lang, "nb");
break;
case 30:
strcat (hexchat_lang, "pl");
break;
case 31:
strcat (hexchat_lang, "pt");
break;
case 32:
strcat (hexchat_lang, "pt_BR");
break;
case 33:
strcat (hexchat_lang, "pa");
break;
case 34:
strcat (hexchat_lang, "ru");
break;
case 35:
strcat (hexchat_lang, "sr");
break;
case 36:
strcat (hexchat_lang, "sk");
break;
case 37:
strcat (hexchat_lang, "sl");
break;
case 38:
strcat (hexchat_lang, "es");
break;
case 39:
strcat (hexchat_lang, "sv");
break;
case 40:
strcat (hexchat_lang, "th");
break;
case 41:
strcat (hexchat_lang, "uk");
break;
case 42:
strcat (hexchat_lang, "vi");
break;
case 43:
strcat (hexchat_lang, "wa");
break;
default:
strcat (hexchat_lang, "en_US");
break;
}
putenv (hexchat_lang);
if (prefs.gui_one_instance && !portable_mode ())
@ -1003,6 +1130,18 @@ main (int argc, char *argv[])
}
#endif
#ifdef SOCKS
SOCKSinit (argv[0]);
#endif
ret = fe_args (argc, argv);
if (ret != -1)
return ret;
#ifdef USE_DBUS
xchat_remote ();
#endif
#ifdef USE_LIBPROXY
libproxy_factory = px_proxy_factory_new();
#endif

View File

@ -117,7 +117,6 @@ struct xchatprefs
char font_normal[4 * FONTNAMELEN + 1];
char font_main[FONTNAMELEN + 1];
char font_alternative[3 * FONTNAMELEN + 1];
char gui_lang[6]; /* Just enough for xx_YY plus trailing \0 */
#else
char font_normal[FONTNAMELEN + 1];
#endif
@ -192,6 +191,7 @@ struct xchatprefs
int gui_quit_dialog;
#ifdef WIN32
int gui_one_instance;
int gui_lang;
#endif
int dialog_left;
int dialog_top;

View File

@ -99,12 +99,60 @@ typedef struct
int extra;
} setting;
static const char *const langsmenu[] =
{
N_("Albanian"),
N_("Amharic"),
N_("Azerbaijani"),
N_("Basque"),
N_("Belarusian"),
N_("Bulgarian"),
N_("Catalan"),
N_("Chinese (Simplified)"),
N_("Chinese (Traditional)"),
N_("Czech"),
N_("Dutch"),
N_("English (UK)"),
N_("English (US)"),
N_("Estonian"),
N_("Finnish"),
N_("French"),
N_("Galician"),
N_("German"),
N_("Greek"),
N_("Hindi"),
N_("Hungarian"),
N_("Italian"),
N_("Japanese"),
N_("Kannada"),
N_("Korean"),
N_("Latvian"),
N_("Lithuanian"),
N_("Macedonian"),
N_("Malay"),
N_("Norwegian"),
N_("Polish"),
N_("Portuguese"),
N_("Portuguese (Brazilian)"),
N_("Punjabi"),
N_("Russian"),
N_("Serbian"),
N_("Slovak"),
N_("Slovenian"),
N_("Spanish"),
N_("Swedish"),
N_("Thai"),
N_("Ukrainian"),
N_("Vietnamese"),
N_("Walloon"),
NULL
};
static const setting appearance_settings[] =
{
#ifdef WIN32
{ST_HEADER, N_("Localization"),0,0,0},
{ST_ENTRY, N_("HexChat language:"), P_OFFSETNL(gui_lang), 0, 0, sizeof prefs.gui_lang},
{ST_MENU, N_("Interface language:"), P_OFFINTNL(gui_lang), 0, langsmenu, 0},
#endif
{ST_HEADER, N_("Text Box"),0,0,0},
#ifdef WIN32