summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorBerke Viktor <bviktor@hexchat.org>2012-10-18 16:34:40 +0200
committerBerke Viktor <bviktor@hexchat.org>2012-10-18 16:34:40 +0200
commit5acd848f79b248511c298ae6321417e1488dc696 (patch)
treeeda7e2ef517d153a46c04debd189bf8edef23999 /src
parent4732505e3030574ccdacbefc1d0ef696813ff705 (diff)
Initial version of language selector GUI
Diffstat (limited to 'src')
-rw-r--r--src/common/cfgfiles.c4
-rw-r--r--src/common/xchat.c5
-rw-r--r--src/common/xchat.h1
-rw-r--r--src/fe-gtk/setup.c16
4 files changed, 22 insertions, 4 deletions
diff --git a/src/common/cfgfiles.c b/src/common/cfgfiles.c
index 4ac47f58..09b91423 100644
--- a/src/common/cfgfiles.c
+++ b/src/common/cfgfiles.c
@@ -451,6 +451,9 @@ const struct prefs vars[] = {
 	{"gui_input_style", P_OFFINT (style_inputbox), TYPE_BOOL},
 	{"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},
+#endif
 	{"gui_mode_buttons", P_OFFINT (chanmodebuttons), TYPE_BOOL},
 #ifdef WIN32
 	{"gui_one_instance", P_OFFINT (gui_one_instance), TYPE_BOOL},
@@ -746,6 +749,7 @@ load_config (void)
 	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] ");
diff --git a/src/common/xchat.c b/src/common/xchat.c
index 17bad663..77650a03 100644
--- a/src/common/xchat.c
+++ b/src/common/xchat.c
@@ -951,6 +951,7 @@ main (int argc, char *argv[])
 	int ret;
 
 #ifdef WIN32
+	char hexchat_lang[13];	/* LC_ALL= plus 5 chars of gui_lang and trailing \0 */
 	HANDLE mutex;
 #endif
 
@@ -971,6 +972,10 @@ main (int argc, char *argv[])
 	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);
+	putenv (hexchat_lang);
+
 	if (prefs.gui_one_instance && !portable_mode ())
 	{
 		DWORD error;
diff --git a/src/common/xchat.h b/src/common/xchat.h
index 7767d709..06b29494 100644
--- a/src/common/xchat.h
+++ b/src/common/xchat.h
@@ -117,6 +117,7 @@ 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
diff --git a/src/fe-gtk/setup.c b/src/fe-gtk/setup.c
index fcc0a588..b664e008 100644
--- a/src/fe-gtk/setup.c
+++ b/src/fe-gtk/setup.c
@@ -100,9 +100,13 @@ typedef struct
 } setting;
 
 
-static const setting textbox_settings[] =
+static const setting appearance_settings[] =
 {
-	{ST_HEADER,	N_("Text Box Appearance"),0,0,0},
+#ifdef WIN32
+	{ST_HEADER,	N_("Localization"),0,0,0},
+	{ST_ENTRY,  N_("HexChat language:"), P_OFFSETNL(gui_lang), 0, 0, sizeof prefs.gui_lang},
+#endif
+	{ST_HEADER,	N_("Text Box"),0,0,0},
 #ifdef WIN32
 	{ST_EFONT,  N_("Main font:"), P_OFFSETNL(font_main), 0, 0, sizeof prefs.font_main},
 #else
@@ -1820,7 +1824,7 @@ setup_add_page (const char *title, GtkWidget *book, GtkWidget *tab)
 static const char *const cata[] =
 {
 	N_("Interface"),
-		N_("Text box"),
+		N_("Appearance"),
 		N_("Input box"),
 		N_("User list"),
 		N_("Channel switcher"),
@@ -1847,7 +1851,7 @@ setup_create_pages (GtkWidget *box)
 
 	book = gtk_notebook_new ();
 
-	setup_add_page (cata[1], book, setup_create_page (textbox_settings));
+	setup_add_page (cata[1], book, setup_create_page (appearance_settings));
 	setup_add_page (cata[2], book, setup_create_page (inputbox_settings));
 	setup_add_page (cata[3], book, setup_create_page (userlist_settings));
 	setup_add_page (cata[4], book, setup_create_page (tabs_settings));
@@ -2130,6 +2134,10 @@ setup_apply (struct xchatprefs *pr)
 
 #define DIFF(a) (pr->a != prefs.a)
 
+#ifdef WIN32
+	if (DIFF (gui_lang))
+		noapply = TRUE;
+#endif
 	if (DIFF (paned_userlist))
 		noapply = TRUE;
 	if (DIFF (lagometer))