diff src/main.c @ 7724:613b20c69d2c

[gaim-migrate @ 8369] this didn't cause me any problems yesterday, and it compiles, and bug fixing is a good thing. "Some month ago I introduced translatable texts for "gaim --help" and "gaim-remote --help". Unfortunately the output of the translated text is often unreadable. The problem is, that Gaim's *.po files have the UTF-8 locale (because this is the default charset for GTK+ 2.0). But the users may have configured other locales. For instance my SuSE Linux 9.0 system is configured with LANG=de_DE@euro. "euro" is ISO-8859-1 (Western character set, 8 Bit, with the Euro currency symbol). Lots of UTF-8 characters are unreadable if they are displayed in a 8 Bit charset without conversion. Only the 7 Bit chars are displayed right. There are two possible solutions: 1) Make the console texts untranslatable. This isn't very clever. 2) Convert the texts from UTF-8 to user's locale. I choose the second solution. The conversion cannot be made during the translation, because gettext does not allow a mix of different character sets in one po-file. My patch converts the console strings from UTF-8 to users locale. Normally this works right, because most users have a locale which is compatible with their language. The case where a user uses a language (for instance German: LANG=de_DE) with an incompatible character set (for instance the 7Bit charset LC_CTYPE=C) is also handled. The user then sees a warning and the original UTF-8 message. At first I tried to make a new UTF-8 function in src/util.c. But the function is needed 5 times in src/gaim-remote.c and 2 times in src/main.c. gaim-remote is not linked against util.o. Also there are a lot of dependencies from util.o to other files, so I will introduce a lot of trouble to link gaim-remote against util.o. So I only wrote a function in src/gaim-remote.c and used the UTF-8 conversion inline in src/main.c." --Bjoern Voigt committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Wed, 03 Dec 2003 13:21:55 +0000
parents f48c6e4db102
children 565369d12874
line wrap: on
line diff
--- a/src/main.c	Wed Dec 03 07:38:43 2003 +0000
+++ b/src/main.c	Wed Dec 03 13:21:55 2003 +0000
@@ -546,9 +546,11 @@
 static void
 show_usage(int mode, const char *name)
 {
+	char *text=NULL;
+
 	switch (mode) {
 	case 0:		/* full help text */
-		printf(_("Gaim %s\n"
+		text=g_strdup_printf(_("Gaim %s\n"
 		       "Usage: %s [OPTION]...\n\n"
 		       "  -a, --acct          display account editor window\n"
 		       "  -w, --away[=MESG]   make away on signon (optional argument MESG specifies\n"
@@ -563,9 +565,28 @@
 		       "  -h, --help          display this help and exit\n"), VERSION, name);
 		break;
 	case 1:		/* short message */
-		printf(_("Gaim %s. Try `%s -h' for more information.\n"), VERSION, name);
+		text=g_strdup_printf(_("Gaim %s. Try `%s -h' for more information.\n"), VERSION, name);
 		break;
 	}
+
+	if(text) {
+		char *text_conv;
+		GError *error=NULL;
+
+		/* tries to convert 'text' to users locale */
+		text_conv=g_locale_from_utf8(text,-1,NULL,NULL,&error);
+		if(text_conv) {
+			puts(text_conv);
+			g_free(text_conv);
+		}
+		/* use 'text' as a fallback */
+		else {
+			g_warning("%s\n", error->message);
+			g_error_free(error);
+			puts(text);
+		}
+		g_free(text);
+	}
 }
 
 #ifdef HAVE_STARTUP_NOTIFICATION