Mercurial > pidgin.yaz
diff src/gaim-remote.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 | 0dfe02111e20 |
children | fa6395637e2c |
line wrap: on
line diff
--- a/src/gaim-remote.c Wed Dec 03 07:38:43 2003 +0000 +++ b/src/gaim-remote.c Wed Dec 03 13:21:55 2003 +0000 @@ -28,9 +28,42 @@ #include <gaim-remote/remote.h> +/* writes a message 'text' to screen + * message tries to convert 'text' from utf-8 to user's locale and + * uses the original message 'text' as a fallback + * + * if channel is 1, the message is printed to stdout + * if channel is 2, the message is printed to stderr + */ +void message(char *text,int channel) +{ + char *text_conv=NULL,*text_output; + GError *error=NULL; + + text_conv=g_locale_from_utf8(text,-1,NULL,NULL,&error); + + if(!text_conv) { + g_warning("%s\n", error->message); + g_error_free(error); + } + + text_output=(text_conv ? text_conv : text); + + switch(channel) { + case 1: puts(text_output); break; + case 2: fputs(text_output, stderr); break; + default: break; + } + + if(text_conv) + g_free(text_conv); +} + void show_remote_usage(char *name) { - printf(_("Usage: %s command [OPTIONS] [URI]\n\n" + char *text=NULL; + + text=g_strdup_printf(_("Usage: %s command [OPTIONS] [URI]\n\n" " COMMANDS:\n" " uri Handle AIM: URI\n" @@ -38,6 +71,10 @@ " OPTIONS:\n" " -h, --help [commmand] Show help for command\n"), name); + + message(text,1); + g_free(text); + return; } @@ -130,13 +167,12 @@ return 0; } - int command_uri() { int fd = 0; GaimRemotePacket *p = NULL; fd = gaim_remote_session_connect(0); if (fd<0) { - fprintf(stderr, _("Gaim not running (on session 0)\n")); + message(_("Gaim not running (on session 0)\n"),2); return 1; } p = gaim_remote_packet_new(CUI_TYPE_REMOTE, CUI_REMOTE_URI); @@ -152,7 +188,7 @@ GaimRemotePacket *p = NULL; fd = gaim_remote_session_connect(0); if (fd<0) { - fprintf(stderr, _("Gaim not running (on session 0)\n")); + message(_("Gaim not running (on session 0)\n"),2); return 1; } p = gaim_remote_packet_new(CUI_TYPE_META, CUI_META_QUIT); @@ -162,29 +198,29 @@ return 0; } -void show_longhelp_uri( char *name, char *command){ +void show_longhelp_uri( char *name, char *command) +{ if(!strcmp(command, "uri")) { - printf (_("\n" - "Using AIM: URIs:\n" - "Sending an IM to a screenname:\n" - " gaim-remote uri 'aim:goim?screenname=Penguin&message=hello+world'\n" - "In this case, 'Penguin' is the screenname we wish to IM, and 'hello world'\n" - "is the message to be sent. '+' must be used in place of spaces.\n" - "Please note the quoting used above - if you run this from a shell the '&'\n" - "needs to be escaped, or the command will stop at that point.\n" - "Also,the following will just open a conversation window to a screenname,\n" - "with no message:\n" - " gaim-remote uri aim:goim?screenname=Penguin\n\n" - "Joining a chat:\n" - " gaim-remote uri aim:gochat?roomname=PenguinLounge\n" - "...joins the 'PenguinLounge' chat room.\n\n" - "Adding a buddy to your buddy list:\n" - " gaim-remote uri aim:addbuddy?screenname=Penguin\n" - "...prompts you to add 'Penguin' to your buddy list.\n") - ); + message(_("\n" + "Using AIM: URIs:\n" + "Sending an IM to a screenname:\n" + " gaim-remote uri 'aim:goim?screenname=Penguin&message=hello+world'\n" + "In this case, 'Penguin' is the screenname we wish to IM, and 'hello world'\n" + "is the message to be sent. '+' must be used in place of spaces.\n" + "Please note the quoting used above - if you run this from a shell the '&'\n" + "needs to be escaped, or the command will stop at that point.\n" + "Also,the following will just open a conversation window to a screenname,\n" + "with no message:\n" + " gaim-remote uri 'aim:goim?screenname=Penguin'\n\n" + "Joining a chat:\n" + " gaim-remote uri 'aim:gochat?roomname=PenguinLounge'\n" + "...joins the 'PenguinLounge' chat room.\n\n" + "Adding a buddy to your buddy list:\n" + " gaim-remote uri 'aim:addbuddy?screenname=Penguin'\n" + "...prompts you to add 'Penguin' to your buddy list.\n"), 1); } else if(!strcmp(command, "quit")) { - printf (_("\nClose running copy of Gaim\n")); + message(_("\nClose running copy of Gaim\n"), 1); } else { show_remote_usage(name);