Mercurial > pidgin
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 7723:9235eecc9f74 | 7724:613b20c69d2c |
|---|---|
| 544 } | 544 } |
| 545 | 545 |
| 546 static void | 546 static void |
| 547 show_usage(int mode, const char *name) | 547 show_usage(int mode, const char *name) |
| 548 { | 548 { |
| 549 char *text=NULL; | |
| 550 | |
| 549 switch (mode) { | 551 switch (mode) { |
| 550 case 0: /* full help text */ | 552 case 0: /* full help text */ |
| 551 printf(_("Gaim %s\n" | 553 text=g_strdup_printf(_("Gaim %s\n" |
| 552 "Usage: %s [OPTION]...\n\n" | 554 "Usage: %s [OPTION]...\n\n" |
| 553 " -a, --acct display account editor window\n" | 555 " -a, --acct display account editor window\n" |
| 554 " -w, --away[=MESG] make away on signon (optional argument MESG specifies\n" | 556 " -w, --away[=MESG] make away on signon (optional argument MESG specifies\n" |
| 555 " name of away message to use)\n" | 557 " name of away message to use)\n" |
| 556 " -l, --login[=NAME] automatically login (optional argument NAME specifies\n" | 558 " -l, --login[=NAME] automatically login (optional argument NAME specifies\n" |
| 561 " -d, --debug print debugging messages to stdout\n" | 563 " -d, --debug print debugging messages to stdout\n" |
| 562 " -v, --version display the current version and exit\n" | 564 " -v, --version display the current version and exit\n" |
| 563 " -h, --help display this help and exit\n"), VERSION, name); | 565 " -h, --help display this help and exit\n"), VERSION, name); |
| 564 break; | 566 break; |
| 565 case 1: /* short message */ | 567 case 1: /* short message */ |
| 566 printf(_("Gaim %s. Try `%s -h' for more information.\n"), VERSION, name); | 568 text=g_strdup_printf(_("Gaim %s. Try `%s -h' for more information.\n"), VERSION, name); |
| 567 break; | 569 break; |
| 570 } | |
| 571 | |
| 572 if(text) { | |
| 573 char *text_conv; | |
| 574 GError *error=NULL; | |
| 575 | |
| 576 /* tries to convert 'text' to users locale */ | |
| 577 text_conv=g_locale_from_utf8(text,-1,NULL,NULL,&error); | |
| 578 if(text_conv) { | |
| 579 puts(text_conv); | |
| 580 g_free(text_conv); | |
| 581 } | |
| 582 /* use 'text' as a fallback */ | |
| 583 else { | |
| 584 g_warning("%s\n", error->message); | |
| 585 g_error_free(error); | |
| 586 puts(text); | |
| 587 } | |
| 588 g_free(text); | |
| 568 } | 589 } |
| 569 } | 590 } |
| 570 | 591 |
| 571 #ifdef HAVE_STARTUP_NOTIFICATION | 592 #ifdef HAVE_STARTUP_NOTIFICATION |
| 572 static void | 593 static void |
