Mercurial > pidgin
changeset 27089:4023cee127c6
merge of '67228440771b545dc01526f74fd7171a02fb5e08'
and '7d328b30bc18c77fc3de6e2870b9b576fac4ab1c'
author | Etan Reisner <pidgin@unreliablesource.net> |
---|---|
date | Tue, 09 Jun 2009 23:30:18 +0000 |
parents | ef132bfb0793 (current diff) 5330ffe6ca86 (diff) |
children | 4dfffaf9ceac |
files | |
diffstat | 111 files changed, 32314 insertions(+), 2211 deletions(-) [+] |
line wrap: on
line diff
--- a/COPYRIGHT Fri May 22 00:38:45 2009 +0000 +++ b/COPYRIGHT Tue Jun 09 23:30:18 2009 +0000 @@ -1,5 +1,5 @@ Pidgin, Finch, and libpurple -Copyright (C) 1998-2008 by the following: +Copyright (C) 1998-2009 by the following: If you have contributed to this project then you deserve to be on this list. Contact us (see: AUTHORS) and we'll add you. @@ -333,6 +333,7 @@ Diego Petten Nathan Peterson Sebastián E. Peyrott +Andrea Piccinelli Celso Pinto Joao Luís Marques Pinto Aleksander Piotrowski @@ -451,6 +452,7 @@ Mark Tiefenbruck Andrew Tinney Jeffery To +Krzysztof Tobola (kreez) Warren Togami Stu Tomlinson Bill Tompkins
--- a/ChangeLog Fri May 22 00:38:45 2009 +0000 +++ b/ChangeLog Tue Jun 09 23:30:18 2009 +0000 @@ -16,10 +16,19 @@ * Report idle time 'From last message sent' should work properly. * Show the invite message for buddies that requested authorization from you on MSN. + * DNS servers are re-read when DNS queries fail in case the system has + moved to a new network and the old servers are not accessible. + * Gadu-Gadu accounts can specify a server to which to connect. + (Krzysztof "kreez" Tobola) + * Modifying the MSN privacy list for buddies not added by you (i.e. + spammers and other generally unwanted users) should no longer cause + a 240 error and disconnection. XMPP: - * Voice & Video support with Jingle (XEP-0166, 0167, 0176, & 0177), and - voice support with GTalk and GMail. (Mike "Maiku" Ruprecht) + * Voice & Video support with Jingle (XEP-0166, 0167, 0176, & 0177), voice + support with GTalk and voice and video support with the GMail web + client. (Mike "Maiku" Ruprecht) + * Added a Service Discovery Browser plugin for Pidgin. (Andrei Mozzhuhin) * Support for in-band bytestreams for file transfers (XEP-0047). (Marcus Lundblad) * Support for sending and receiving attentions (equivalent to "buzz" @@ -37,6 +46,8 @@ * /affiliate and /role will now list the room members with the specified affiliation/role if possible. (Andrei Mozzhuhin) * Put section breaks between resources in "Get Info" to improve readability. + * Silently remove invalid XML 1.0 entities (e.g. ASCII control characters) + from sent messages. * XHTML markup is only included in outgoing messages when the message contains formatting. * Show when the user was last logged in when doing "Get Info" on an offline @@ -44,11 +55,16 @@ * Support custom smileys in MUCs (only when all participants support the "Bits of Binary" extension, and a maximum of 10 participants are in the chat to avoid getting too many fetch requests). + * Fix an issue with Jabber (pre-XMPP) servers and the user's preference + to require SSL not being respected. + * Fix an issue where Cyrus SASL DIGEST MD5 authentication might fail if + the username, password, or realm (the JID domain) contain non-ASCII + characters. + * Show emblem for mobile, handheld, and web clients and bots (if the other + client supports it). Yahoo: - * P2P file transfers. (Sulabh Mahajan) - * MSN Interoperability by adding MSN buddies as 'msn/user@example.com'. - (Sulabh Mahajan) + * P2P file transfers. (Sulabh Mahajan) * Sending text messages (address to +<countrycode><phone number>). (Sulabh Mahajan) * Addition of MSN buddies to Yahoo accounts by adding them as @@ -78,12 +94,53 @@ rejoin. * Always set unseen-count and unseen-state on conversations. (Joshua Stein) + * Fix a bug in 'Conversation Colors' plugin for RTL messages. + * Pressing the Left and Right arrow keys in the buddy list will expand and + collapse buddy groups or contacts. (Peter Ruibal) + * Support saving animated custom smileys as animated images or animated + custom smileys. (Andrea Piccinelli) Finch: * The hardware cursor is updated correctly. This will be useful especially for users of braille terminals, screen readers etc. * Added a TinyURL plugin, which aids copying longer URLs. + Pidgin GTK+ Theme Control Plugin: + * Removed mouse cursor color preferences. + * Added "Typing Notification Color" preference. + * Added "Disable Typing Notification Text" preference. + * Preferences have been reorganized into three tabs for Colors, Fonts, and + Miscellaneous categories. + +version 2.5.6 (05/19/2009): + libpurple: + * Improve sleep behavior by aggregation of longer timeouts on second + boundaries to allow better power saving. (Arunan Balasubramaniam) + * Fix various crashes on exit. + * Make XML parsing more resilient to interactions with other libraries. + This, along with the fix for libxml2 bug 564217, fixes the crashes + on connect in XMPP with recent gst-plugins-bad (see #8830 for details). + * Many security related fixes. + + IRC: + * Correctly handle WHOIS for users who are joined to a large number of + channels. + * Notify the user if a /nick command fails, rather than trying + fallback nicks. + + MSN: + * Fix a race condition causing occasional Pidgin crashes. + * Fix some errors about the friendly name changing too fast caused + by MSN/Yahoo integration buddies. + + XMPP: + * Less likely to pop up a new conversation window in disregard of + the "Hide new IM conversations" preference. + + Yahoo: + * Fix a crash when sending very long messages. + * Fix a bug where UTF-8 status messages get garbled when going idle. + version 2.5.5 (03/01/2009): libpurple: * Fix a crash when removing an account with an unknown protocol id.
--- a/ChangeLog.API Fri May 22 00:38:45 2009 +0000 +++ b/ChangeLog.API Tue Jun 09 23:30:18 2009 +0000 @@ -33,11 +33,13 @@ * purple_global_proxy_set_info * purple_group_destroy * purple_log_get_activity_score + * purple_markup_is_rtl * purple_network_force_online * purple_network_set_stun_server * purple_network_set_turn_server * purple_network_get_stun_ip * purple_network_get_turn_ip + * purple_proxy_connect_udp * purple_prpl_get_media_caps * purple_prpl_got_account_actions * purple_prpl_initiate_media @@ -45,6 +47,8 @@ * purple_request_field_get_ui_data * purple_request_field_set_ui_data * purple_strequal + * purple_utf8_strip_unprintables + * purple_util_fetch_url_request_len_with_account * xmlnode_from_file * xmlnode_get_parent * xmlnode_set_attrib_full @@ -55,6 +59,15 @@ which was completely non-deterministic. If you want to remove the attribute with no namespace, then use NULL with xmlnode_remove_with_namespace. + * Plugins may now emit the jabber-sending-xmlnode signal in order + to send stanzas; this method is preferred to the prpl send_raw + function as other plugins listening to the signal see them. + * The conversation-updated signal with a PURPLE_CONV_UPDATE_TYPING + update type is emitted when receiving an IM. Previously, the + typing state was modified (and the buddy-typing-stopped signal + emitted), but this signal was not emitted. + * Added a client_type field in the get_ui_info core UI op. See + core.h for details. Deprecated: * buddy-added and buddy-removed blist signals @@ -70,6 +83,7 @@ * purple_status_set_attr_string * purple_presence_add_status * purple_presence_add_list + * purple_util_fetch_url_request_len * xmlnode_set_attrib_with_namespace * xmlnode_set_attrib_with_prefix @@ -84,6 +98,7 @@ * pidgin_blist_set_theme * pidgin_blist_get_theme * pidgin_prefs_labeled_password + * pidgin_smiley_editor_set_data * pidgin_sound_is_customized * pidgin_utils_init, pidgin_utils_uninit * pidgin_notify_pounce_add
--- a/NEWS Fri May 22 00:38:45 2009 +0000 +++ b/NEWS Tue Jun 09 23:30:18 2009 +0000 @@ -2,6 +2,27 @@ Our development blog is available at: http://planet.pidgin.im +2.5.6 (05/19/2009): + Ka-Hing: Many much bugfixes. Hooray. (Paul told me to say that) + Oh, no one has met Paul yet? He's awesome, he backported my fixes + to the release branch so I didn't have to checkout a + workspace... except I just did to NEWS to tell you all about + that. Oh and I actually did do something for this release, none of + which is user visible though. This basically applies to the rest + of the release as well, nothing exciting, but you definitely want + it. + + Daniel: This should fix a number of annoying issues that some users + have encountered. We also would like to thank Veracode + (http://www.veracode.com) who performed a code analysis and found some + bugs that were addressed in this release. + + Elliott: I feel like I'm repeating myself, but there are some more MSN + fixes that should make things better behaved at login as well, and + maybe you'll stop getting some of those annoying errors (though not all + are fixed yet). Some other bugfixes, plus the craziness that is the + libxml "structured error handler" make up the rest of this release. + 2.5.5 (03/01/2009): John: Well, yet another release with bug fixing and patches. Hopefully one of the fixed bugs is one that irritated you. Also, thank Dimmuxx
--- a/configure.ac Fri May 22 00:38:45 2009 +0000 +++ b/configure.ac Tue Jun 09 23:30:18 2009 +0000 @@ -144,7 +144,7 @@ ;; esac -ALL_LINGUAS="af am ar az be@latin bg bn bs ca ca@valencia cs da de dz el en_AU en_CA en_GB eo es et eu fa fi fr ga gl gu he hi hu id it ja ka km kn ko ku lo lt mk mn my_MM nb ne nl nn oc pa pl pt_BR pt ps ro ru si sk sl sq sr sr@latin sv ta te th tr uk ur vi xh zh_CN zh_HK zh_TW" +ALL_LINGUAS="af am ar az be@latin bg bn bs ca ca@valencia cs da de dz el en_AU en_CA en_GB eo es et eu fa fi fr ga gl gu he hi hu hy id it ja ka km kn ko ku lo lt mk mn my_MM nb ne nl nn oc pa pl pt_BR pt ps ro ru si sk sl sq sr sr@latin sv sw ta te th tr uk ur vi xh zh_CN zh_HK zh_TW" AM_GLIB_GNU_GETTEXT dnl If we don't have msgfmt, then po/ is going to fail -- ensure that @@ -2476,6 +2476,7 @@ pidgin/pixmaps/emotes/small/16/Makefile pidgin/plugins/Makefile pidgin/plugins/cap/Makefile + pidgin/plugins/disco/Makefile pidgin/plugins/gestures/Makefile pidgin/plugins/gevolution/Makefile pidgin/plugins/musicmessaging/Makefile
--- a/finch/finch.c Fri May 22 00:38:45 2009 +0000 +++ b/finch/finch.c Tue Jun 09 23:30:18 2009 +0000 @@ -65,6 +65,7 @@ g_hash_table_insert(ui_info, "version", VERSION); g_hash_table_insert(ui_info, "website", "http://pidgin.im"); g_hash_table_insert(ui_info, "dev_website", "http://developer.pidgin.im"); + g_hash_table_insert(ui_info, "client_type", "console"); } return ui_info;
--- a/finch/gntblist.c Fri May 22 00:38:45 2009 +0000 +++ b/finch/gntblist.c Tue Jun 09 23:30:18 2009 +0000 @@ -1921,11 +1921,11 @@ if (gnt_tree_is_searching(GNT_TREE(ggblist->tree))) gnt_bindable_perform_action_named(GNT_BINDABLE(ggblist->tree), "end-search", NULL); remove_peripherals(ggblist); - } else if (strcmp(text, GNT_KEY_CTRL_O) == 0) { - purple_prefs_set_bool(PREF_ROOT "/showoffline", - !purple_prefs_get_bool(PREF_ROOT "/showoffline")); } else if (strcmp(text, GNT_KEY_INS) == 0) { - purple_blist_request_add_buddy(NULL, NULL, NULL, NULL); + PurpleBlistNode *node = gnt_tree_get_selection_data(GNT_TREE(ggblist->tree)); + purple_blist_request_add_buddy(NULL, NULL, + node && PURPLE_BLIST_NODE_IS_GROUP(node) ? purple_group_get_name(PURPLE_GROUP(node)) : NULL, + NULL); } else if (!gnt_tree_is_searching(GNT_TREE(ggblist->tree))) { if (strcmp(text, "t") == 0) { finch_blist_toggle_tag_buddy(gnt_tree_get_selection_data(GNT_TREE(ggblist->tree)));
--- a/finch/gntnotify.c Fri May 22 00:38:45 2009 +0000 +++ b/finch/gntnotify.c Tue Jun 09 23:30:18 2009 +0000 @@ -208,6 +208,9 @@ void *ret; static int key = 0; + if (count == 0) + return NULL; + if (!detailed) { g_string_append_printf(message,
--- a/finch/plugins/gnttinyurl.c Fri May 22 00:38:45 2009 +0000 +++ b/finch/plugins/gnttinyurl.c Tue Jun 09 23:30:18 2009 +0000 @@ -228,12 +228,15 @@ if (!(*flags & PURPLE_MESSAGE_RECV) || *flags & PURPLE_MESSAGE_INVISIBLE) return FALSE; - t = g_string_new(*message); urls = purple_conversation_get_data(conv, "TinyURLs"); if (urls != NULL) /* message was cancelled somewhere? Reset. */ g_list_foreach(urls, free_urls, NULL); g_list_free(urls); - urls = extract_urls(t->str); + urls = extract_urls(*message); + if (!urls) + return FALSE; + + t = g_string_new(*message); g_free(*message); for (iter = urls; iter; iter = iter->next) { if (g_utf8_strlen((char *)iter->data, -1) >= purple_prefs_get_int(PREF_LENGTH)) {
--- a/libpurple/blist.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/blist.c Tue Jun 09 23:30:18 2009 +0000 @@ -977,18 +977,26 @@ PurpleConversation *conv; PurpleBlistNode *bnode; char *old_alias; + char *new_alias = NULL; g_return_if_fail(contact != NULL); - if (!purple_strings_are_different(contact->alias, alias)) + if ((alias != NULL) && (*alias != '\0')) + new_alias = purple_utf8_strip_unprintables(alias); + + if (!purple_strings_are_different(contact->alias, new_alias)) { + g_free(new_alias); return; + } old_alias = contact->alias; - if ((alias != NULL) && (*alias != '\0')) - contact->alias = g_strdup(alias); - else + if ((new_alias != NULL) && (*new_alias != '\0')) + contact->alias = new_alias; + else { contact->alias = NULL; + g_free(new_alias); /* could be "\0" */ + } purple_blist_schedule_save(); @@ -1014,18 +1022,26 @@ { PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); char *old_alias; + char *new_alias = NULL; g_return_if_fail(chat != NULL); - if (!purple_strings_are_different(chat->alias, alias)) + if ((alias != NULL) && (*alias != '\0')) + new_alias = purple_utf8_strip_unprintables(alias); + + if (!purple_strings_are_different(chat->alias, new_alias)) { + g_free(new_alias); return; + } old_alias = chat->alias; - if ((alias != NULL) && (*alias != '\0')) - chat->alias = g_strdup(alias); - else + if ((new_alias != NULL) && (*new_alias != '\0')) + chat->alias = new_alias; + else { chat->alias = NULL; + g_free(new_alias); /* could be "\0" */ + } purple_blist_schedule_save(); @@ -1042,18 +1058,26 @@ PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); PurpleConversation *conv; char *old_alias; + char *new_alias = NULL; g_return_if_fail(buddy != NULL); - if (!purple_strings_are_different(buddy->alias, alias)) + if ((alias != NULL) && (*alias != '\0')) + new_alias = purple_utf8_strip_unprintables(alias); + + if (!purple_strings_are_different(buddy->alias, new_alias)) { + g_free(new_alias); return; + } old_alias = buddy->alias; - if ((alias != NULL) && (*alias != '\0')) + if ((new_alias != NULL) && (*new_alias != '\0')) buddy->alias = g_strdup(alias); - else + else { buddy->alias = NULL; + g_free(new_alias); /* could be "\0" */ + } purple_blist_schedule_save(); @@ -1075,18 +1099,26 @@ PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); PurpleConversation *conv; char *old_alias; + char *new_alias = NULL; g_return_if_fail(buddy != NULL); - if (!purple_strings_are_different(buddy->server_alias, alias)) + if ((alias != NULL) && (*alias != '\0') && g_utf8_validate(alias, -1, NULL)) + new_alias = purple_utf8_strip_unprintables(alias); + + if (!purple_strings_are_different(buddy->server_alias, new_alias)) { + g_free(new_alias); return; + } old_alias = buddy->server_alias; - if ((alias != NULL) && (*alias != '\0') && g_utf8_validate(alias, -1, NULL)) - buddy->server_alias = g_strdup(alias); - else + if ((new_alias != NULL) && (*new_alias != '\0')) + buddy->server_alias = new_alias; + else { buddy->server_alias = NULL; + g_free(new_alias); /* could be "\0"; */ + } purple_blist_schedule_save(); @@ -1106,19 +1138,24 @@ /* * TODO: If merging, prompt the user if they want to merge. */ -void purple_blist_rename_group(PurpleGroup *source, const char *new_name) +void purple_blist_rename_group(PurpleGroup *source, const char *name) { PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); PurpleGroup *dest; gchar *old_name; + gchar *new_name; GList *moved_buddies = NULL; GSList *accts; g_return_if_fail(source != NULL); - g_return_if_fail(new_name != NULL); - - if (*new_name == '\0' || purple_strequal(new_name, source->name)) + g_return_if_fail(name != NULL); + + new_name = purple_utf8_strip_unprintables(name); + + if (*new_name == '\0' || purple_strequal(new_name, source->name)) { + g_free(new_name); return; + } dest = purple_find_group(new_name); if (dest != NULL && purple_utf8_strcasecmp(source->name, dest->name) != 0) { @@ -1160,6 +1197,7 @@ old_name = g_strdup(source->name); purple_blist_remove_group(source); source = dest; + g_free(new_name); } else { /* A simple rename */ PurpleBlistNode *cnode, *bnode; @@ -1172,7 +1210,7 @@ } old_name = source->name; - source->name = g_strdup(new_name); + source->name = new_name; } /* Save our changes */ @@ -1184,7 +1222,7 @@ /* Notify all PRPLs */ /* TODO: Is this condition needed? Seems like it would always be TRUE */ - if(old_name && purple_strequal(source->name, old_name)) { + if(old_name && !purple_strequal(source->name, old_name)) { for (accts = purple_group_get_accounts(source); accts; accts = g_slist_remove(accts, accts->data)) { PurpleAccount *account = accts->data; PurpleConnection *gc = NULL; @@ -1246,7 +1284,7 @@ chat = g_new0(PurpleChat, 1); chat->account = account; if ((alias != NULL) && (*alias != '\0')) - chat->alias = g_strdup(alias); + chat->alias = purple_utf8_strip_unprintables(alias); chat->components = components; purple_blist_node_initialize_settings((PurpleBlistNode *)chat); ((PurpleBlistNode *)chat)->type = PURPLE_BLIST_CHAT_NODE; @@ -1273,13 +1311,13 @@ PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); PurpleBuddy *buddy; - g_return_val_if_fail(account != NULL, FALSE); - g_return_val_if_fail(name != NULL, FALSE); + g_return_val_if_fail(account != NULL, NULL); + g_return_val_if_fail(name != NULL, NULL); buddy = g_new0(PurpleBuddy, 1); buddy->account = account; - buddy->name = g_strdup(name); - buddy->alias = g_strdup(alias); + buddy->name = purple_utf8_strip_unprintables(name); + buddy->alias = purple_utf8_strip_unprintables(alias); buddy->presence = purple_presence_new_for_buddy(buddy); ((PurpleBlistNode *)buddy)->type = PURPLE_BLIST_BUDDY_NODE; @@ -1705,7 +1743,7 @@ return group; group = g_new0(PurpleGroup, 1); - group->name = g_strdup(name); + group->name = purple_utf8_strip_unprintables(name); group->totalsize = 0; group->currentsize = 0; group->online = 0;
--- a/libpurple/conversation.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/conversation.c Tue Jun 09 23:30:18 2009 +0000 @@ -55,7 +55,6 @@ im = PURPLE_CONV_IM(c); purple_conv_im_set_typing_state(im, PURPLE_NOT_TYPING); - purple_conv_im_update_typing(im); purple_conv_im_stop_typing_timeout(im); return FALSE; @@ -1050,6 +1049,8 @@ "buddy-typing-stopped", im->conv->account, im->conv->name); break; } + + purple_conv_im_update_typing(im); } }
--- a/libpurple/core.h Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/core.h Tue Jun 09 23:30:18 2009 +0000 @@ -186,6 +186,10 @@ * * <dt><tt>dev_website</tt></dt> * <dd>the UI's development/support website, such as http://developer.pidgin.im.</dd> + * + * <dt><tt>client_type</tt></dt> + * <dd>the type of UI (pc, console, phone, handheld, web, bot)</dd> + * * </dl> * * @return A GHashTable with strings for keys and values. This
--- a/libpurple/dnsquery.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/dnsquery.c Tue Jun 09 23:30:18 2009 +0000 @@ -32,6 +32,10 @@ #include "prefs.h" #include "util.h" +#ifndef _WIN32 +#include <resolv.h> +#endif + #if (defined(__APPLE__) || defined (__unix__)) && !defined(__osf__) #define PURPLE_DNSQUERY_USE_FORK #endif @@ -571,8 +575,10 @@ g_snprintf(message, sizeof(message), _("Error resolving %s: %d"), query_data->hostname, err); #endif + /* Re-read resolv.conf and friends in case DNS servers have changed */ + res_init(); + purple_dnsquery_failed(query_data, message); - } else if (rc > 0) { /* Success! */ while (rc > 0) {
--- a/libpurple/dnssrv.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/dnssrv.c Tue Jun 09 23:30:18 2009 +0000 @@ -141,7 +141,14 @@ } size = res_query( query.query, C_IN, query.type, (u_char*)&answer, sizeof( answer)); - + if (size == -1) { + write(out, &(query.type), sizeof(query.type)); + write(out, &size, sizeof(int)); + close(out); + close(in); + _exit(0); + } + qdcount = ntohs(answer.hdr.qdcount); ancount = ntohs(answer.hdr.ancount); cp = (guchar*)&answer + sizeof(HEADER); @@ -223,59 +230,73 @@ PurpleSrvQueryData *query_data = (PurpleSrvQueryData*)data; int i; int status; - + if (read(source, &type, sizeof(type)) == sizeof(type)) { - if (type == T_SRV) { - PurpleSrvResponse *res; - PurpleSrvResponse *tmp; - PurpleSrvCallback cb = query_data->cb.srv; - if (read(source, &size, sizeof(int)) == sizeof(int)) { - ssize_t red; - purple_debug_info("dnssrv","found %d SRV entries\n", size); - tmp = res = g_new0(PurpleSrvResponse, size); - for (i = 0; i < size; i++) { - red = read(source, tmp++, sizeof(PurpleSrvResponse)); - if (red != sizeof(PurpleSrvResponse)) { - purple_debug_error("dnssrv","unable to read srv " - "response: %s\n", g_strerror(errno)); - size = 0; - g_free(res); - res = NULL; + if (read(source, &size, sizeof(size)) == sizeof(size)) { + if (size == -1 || size == 0) { + if (size == -1) { + purple_debug_warning("dnssrv", "res_query returned an error\n"); + /* Re-read resolv.conf and friends in case DNS servers have changed */ + res_init(); + } else + purple_debug_info("dnssrv", "Found 0 entries, errno is %i\n", errno); + + if (type == T_SRV) { + PurpleSrvCallback cb = query_data->cb.srv; + cb(NULL, 0, query_data->extradata); + } else if (type == T_TXT) { + PurpleTxtCallback cb = query_data->cb.txt; + cb(NULL, query_data->extradata); + } else { + purple_debug_error("dnssrv", "type unknown of DNS result entry; errno is %i\n", errno); + } + + } else if (size) { + if (type == T_SRV) { + PurpleSrvResponse *res; + PurpleSrvResponse *tmp; + PurpleSrvCallback cb = query_data->cb.srv; + ssize_t red; + purple_debug_info("dnssrv","found %d SRV entries\n", size); + tmp = res = g_new0(PurpleSrvResponse, size); + for (i = 0; i < size; i++) { + red = read(source, tmp++, sizeof(PurpleSrvResponse)); + if (red != sizeof(PurpleSrvResponse)) { + purple_debug_error("dnssrv","unable to read srv " + "response: %s\n", g_strerror(errno)); + size = 0; + g_free(res); + res = NULL; + } } + + cb(res, size, query_data->extradata); + } else if (type == T_TXT) { + GSList *responses = NULL; + PurpleTxtResponse *res; + PurpleTxtCallback cb = query_data->cb.txt; + ssize_t red; + purple_debug_info("dnssrv","found %d TXT entries\n", size); + res = g_new0(PurpleTxtResponse, 1); + for (i = 0; i < size; i++) { + red = read(source, res, sizeof(PurpleTxtResponse)); + if (red != sizeof(PurpleTxtResponse)) { + purple_debug_error("dnssrv","unable to read txt " + "response: %s\n", g_strerror(errno)); + size = 0; + g_free(res); + g_slist_foreach(responses, (GFunc)purple_txt_response_destroy, NULL); + g_slist_free(responses); + responses = NULL; + break; + } + } + + cb(responses, query_data->extradata); + } else { + purple_debug_error("dnssrv", "type unknown of DNS result entry; errno is %i\n", errno); } - } else { - purple_debug_info("dnssrv","found 0 SRV entries; errno is %i\n", errno); - size = 0; - res = NULL; } - cb(res, size, query_data->extradata); - } else if (type == T_TXT) { - GSList *responses = NULL; - PurpleTxtResponse *res; - PurpleTxtCallback cb = query_data->cb.txt; - if (read(source, &size, sizeof(int)) == sizeof(int)) { - ssize_t red; - purple_debug_info("dnssrv","found %d TXT entries\n", size); - res = g_new0(PurpleTxtResponse, 1); - for (i = 0; i < size; i++) { - red = read(source, res, sizeof(PurpleTxtResponse)); - if (red != sizeof(PurpleTxtResponse)) { - purple_debug_error("dnssrv","unable to read txt " - "response: %s\n", g_strerror(errno)); - size = 0; - g_free(res); - g_slist_foreach(responses, (GFunc)purple_txt_response_destroy, NULL); - g_slist_free(responses); - responses = NULL; - break; - } - } - } else { - purple_debug_info("dnssrv","found 0 TXT entries; errno is %i\n", errno); - } - cb(responses, query_data->extradata); - } else { - purple_debug_info("dnssrv","type unknown of DNS result entry; errno is %i\n", errno); } }
--- a/libpurple/media.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/media.c Tue Jun 09 23:30:18 2009 +0000 @@ -43,6 +43,7 @@ #ifdef USE_VV #include <gst/farsight/fs-conference-iface.h> +#include <gst/farsight/fs-element-added-notifier.h> /** @copydoc _PurpleMediaSession */ typedef struct _PurpleMediaSession PurpleMediaSession; @@ -2380,6 +2381,18 @@ stream->connected_cb_id = purple_timeout_add(0, (GSourceFunc)purple_media_connected_cb, stream); } + +static void +purple_media_element_added_cb(FsElementAddedNotifier *self, + GstBin *bin, GstElement *element, gpointer user_data) +{ + /* + * Hack to make H264 work with Gmail video. + */ + if (!strncmp(GST_ELEMENT_NAME(element), "x264", 4)) { + g_object_set(GST_OBJECT(element), "cabac", FALSE, NULL); + } +} #endif /* USE_VV */ gboolean @@ -2403,7 +2416,7 @@ if (!session) { GError *err = NULL; - GList *codec_conf = NULL; + GList *codec_conf = NULL, *iter = NULL; gchar *filename = NULL; PurpleMediaSessionType session_type; GstElement *src = NULL; @@ -2420,15 +2433,6 @@ return FALSE; } - /* XXX: SPEEX has a latency of 5 or 6 seconds for me */ -#if 0 - /* SPEEX is added through the configuration */ - codec_conf = g_list_prepend(codec_conf, fs_codec_new(FS_CODEC_ID_ANY, - "SPEEX", FS_MEDIA_TYPE_AUDIO, 8000)); - codec_conf = g_list_prepend(codec_conf, fs_codec_new(FS_CODEC_ID_ANY, - "SPEEX", FS_MEDIA_TYPE_AUDIO, 16000)); -#endif - filename = g_build_filename(purple_user_dir(), "fs-codec.conf", NULL); codec_conf = fs_codec_list_from_keyfile(filename, &err); g_free(filename); @@ -2445,6 +2449,25 @@ g_error_free(err); } + /* + * Add SPEEX if the configuration file doesn't exist or + * there isn't a speex entry. + */ + for (iter = codec_conf; iter; iter = g_list_next(iter)) { + FsCodec *codec = iter->data; + if (!g_ascii_strcasecmp(codec->encoding_name, "speex")) + break; + } + + if (iter == NULL) { + codec_conf = g_list_prepend(codec_conf, + fs_codec_new(FS_CODEC_ID_ANY, + "SPEEX", FS_MEDIA_TYPE_AUDIO, 8000)); + codec_conf = g_list_prepend(codec_conf, + fs_codec_new(FS_CODEC_ID_ANY, + "SPEEX", FS_MEDIA_TYPE_AUDIO, 16000)); + } + fs_session_set_codec_preferences(session->session, codec_conf, NULL); /* @@ -2456,6 +2479,19 @@ g_object_set(G_OBJECT(session->session), "no-rtcp-timeout", 0, NULL); + /* + * Hack to make x264 work with Gmail video. + */ + if (is_nice && !strcmp(sess_id, "google-video")) { + FsElementAddedNotifier *notifier = + fs_element_added_notifier_new(); + g_signal_connect(G_OBJECT(notifier), "element-added", + G_CALLBACK(purple_media_element_added_cb), + stream); + fs_element_added_notifier_add(notifier, + GST_BIN(media->priv->conference)); + } + fs_codec_list_destroy(codec_conf); session->id = g_strdup(sess_id); @@ -2670,7 +2706,8 @@ PurpleMediaStream *stream; g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); stream = purple_media_get_stream(media, sess_id, participant); - return purple_media_candidate_list_from_fs(stream->local_candidates); + return stream ? purple_media_candidate_list_from_fs( + stream->local_candidates) : NULL; #else return NULL; #endif
--- a/libpurple/nat-pmp.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/nat-pmp.c Tue Jun 09 23:30:18 2009 +0000 @@ -200,7 +200,7 @@ if (!(buf = malloc(needed))) { - purple_debug_warning("nat-pmp", "Failed to malloc %i\n", needed); + purple_debug_warning("nat-pmp", "Failed to malloc %" G_GSIZE_FORMAT "\n", needed); return NULL; }
--- a/libpurple/plugins/perl/common/Certificate.xs Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/plugins/perl/common/Certificate.xs Tue Jun 09 23:30:18 2009 +0000 @@ -214,7 +214,7 @@ GByteArray *gba = NULL; CODE: gba = purple_certificate_get_fingerprint_sha1(crt); - RETVAL = newSVpv(gba->data, gba->len); + RETVAL = newSVpv((gchar *)gba->data, gba->len); g_byte_array_free(gba, TRUE); OUTPUT: RETVAL
--- a/libpurple/plugins/perl/common/Cipher.xs Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/plugins/perl/common/Cipher.xs Tue Jun 09 23:30:18 2009 +0000 @@ -66,9 +66,9 @@ guchar *data = NULL; size_t data_len; CODE: - data = SvPV(data_sv, data_len); + data = (guchar *)SvPV(data_sv, data_len); SvUPGRADE(digest, SVt_PV); - buff = SvGROW(digest, in_len); + buff = (guchar *)SvGROW(digest, in_len); ret = purple_cipher_digest_region(name, data, data_len, in_len, buff, &RETVAL); if(!ret) { SvSetSV_nosteal(digest, &PL_sv_undef); @@ -181,7 +181,7 @@ guchar *buff = NULL; CODE: SvUPGRADE(digest, SVt_PV); - buff = SvGROW(digest, in_len); + buff = (guchar *)SvGROW(digest, in_len); ret = purple_cipher_context_digest(context, in_len, buff, &RETVAL); if(!ret) { SvSetSV_nosteal(digest, &PL_sv_undef); @@ -225,9 +225,9 @@ guchar *buff = NULL; guchar *data = NULL; CODE: - data = SvPV(data_sv, datalen); + data = (guchar *)SvPV(data_sv, datalen); SvUPGRADE(output, SVt_PV); - buff = SvGROW(output, datalen); + buff = (guchar *)SvGROW(output, datalen); RETVAL = purple_cipher_context_encrypt(context, data, datalen, buff, &outlen); if(outlen != 0) { SvPOK_only(output); @@ -249,9 +249,9 @@ guchar *buff = NULL; guchar *data = NULL; CODE: - data = SvPV(data_sv, datalen); + data = (guchar *)SvPV(data_sv, datalen); SvUPGRADE(output, SVt_PV); - buff = SvGROW(output, datalen); + buff = (guchar *)SvGROW(output, datalen); RETVAL = purple_cipher_context_decrypt(context, data, datalen, buff, &outlen); if(outlen != 0) { SvPOK_only(output);
--- a/libpurple/plugins/perl/common/Util.xs Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/plugins/perl/common/Util.xs Tue Jun 09 23:30:18 2009 +0000 @@ -69,7 +69,7 @@ PREINIT: char *message = NULL; gboolean ret; - gssize len; + gsize len; CODE: message = SvPV(msg, len); message = g_strndup(message, len); @@ -239,7 +239,7 @@ CODE: ret = purple_base16_decode(str, &len); if(len) { - RETVAL = newSVpv(ret, len); + RETVAL = newSVpv((gchar *)ret, len); } else { g_free(ret); XSRETURN_UNDEF; @@ -257,7 +257,7 @@ CODE: ret = purple_base64_decode(str, &len); if(len) { - RETVAL = newSVpv(ret, len); + RETVAL = newSVpv((gchar *)ret, len); } else { g_free(ret); XSRETURN_UNDEF; @@ -275,7 +275,7 @@ CODE: ret = purple_quotedp_decode(str, &len); if(len) { - RETVAL = newSVpv(ret, len); + RETVAL = newSVpv((gchar *)ret, len); } else { g_free(ret); XSRETURN_UNDEF; @@ -499,11 +499,11 @@ gpointer unused const char* -purple_util_get_image_extension(gconstpointer data, size_t length(data)) +purple_util_get_image_extension(const char *data, size_t length(data)) PROTOTYPE: $ gchar_own* -purple_util_get_image_filename(gconstpointer image_data, size_t length(image_data)) +purple_util_get_image_filename(const char *image_data, size_t length(image_data)) PROTOTYPE: $ Purple::XMLNode
--- a/libpurple/plugins/psychic.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/plugins/psychic.c Tue Jun 09 23:30:18 2009 +0000 @@ -74,6 +74,7 @@ time(NULL)); } + /* Necessary because we may be creating a new conversation window. */ purple_conv_im_set_typing_state(PURPLE_CONV_IM(gconv), PURPLE_TYPING); } }
--- a/libpurple/plugins/signals-test.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/plugins/signals-test.c Tue Jun 09 23:30:18 2009 +0000 @@ -624,6 +624,70 @@ } /************************************************************************** + * Jabber signals callbacks + **************************************************************************/ +static gboolean +jabber_iq_received(PurpleConnection *pc, const char *type, const char *id, + const char *from, xmlnode *iq) +{ + purple_debug_misc("signals test", "jabber IQ (type=%s, id=%s, from=%s) %p\n", + type, id, from ? from : "(null)", iq); + + /* We don't want the plugin to stop processing */ + return FALSE; +} + +static gboolean +jabber_message_received(PurpleConnection *pc, const char *type, const char *id, + const char *from, const char *to, xmlnode *message) +{ + purple_debug_misc("signals test", "jabber message (type=%s, id=%s, " + "from=%s to=%s) %p\n", + type ? type : "(null)", id ? id : "(null)", + from ? from : "(null)", to ? to : "(null)", message); + + /* We don't want the plugin to stop processing */ + return FALSE; +} + +static gboolean +jabber_presence_received(PurpleConnection *pc, const char *type, + const char *from, xmlnode *presence) +{ + purple_debug_misc("signals test", "jabber presence (type=%s, from=%s) %p\n", + type ? type : "(null)", from ? from : "(null)", presence); + + /* We don't want the plugin to stop processing */ + return FALSE; +} + +static gboolean +jabber_watched_iq(PurpleConnection *pc, const char *type, const char *id, + const char *from, xmlnode *child) +{ + purple_debug_misc("signals test", "jabber watched IQ (type=%s, id=%s, from=%s)\n" + "child %p name=%s, namespace=%s\n", + type, id, from, child, child->name, + xmlnode_get_namespace(child)); + + if (g_str_equal(type, "get") || g_str_equal(type, "set")) { + /* Send the requisite reply */ + xmlnode *iq = xmlnode_new("iq"); + xmlnode_set_attrib(iq, "to", from); + xmlnode_set_attrib(iq, "id", id); + xmlnode_set_attrib(iq, "type", "result"); + + purple_signal_emit(purple_connection_get_prpl(pc), + "jabber-sending-xmlnode", pc, &iq); + if (iq != NULL) + xmlnode_free(iq); + } + + /* Cookie monster eats IQ stanzas; the prpl shouldn't keep processing */ + return TRUE; +} + +/************************************************************************** * Plugin stuff **************************************************************************/ static gboolean @@ -638,6 +702,7 @@ void *ft_handle = purple_xfers_get_handle(); void *sound_handle = purple_sounds_get_handle(); void *notify_handle = purple_notify_get_handle(); + void *jabber_handle = purple_plugins_find_with_id("prpl-jabber"); /* Accounts subsystem signals */ purple_signal_connect(accounts_handle, "account-connecting", @@ -783,6 +848,45 @@ purple_signal_connect(notify_handle, "displaying-emails-notification", plugin, PURPLE_CALLBACK(notify_emails_cb), NULL); + /* Jabber signals */ + if (jabber_handle) { + purple_signal_connect(jabber_handle, "jabber-receiving-iq", plugin, + PURPLE_CALLBACK(jabber_iq_received), NULL); + purple_signal_connect(jabber_handle, "jabber-receiving-message", plugin, + PURPLE_CALLBACK(jabber_message_received), NULL); + purple_signal_connect(jabber_handle, "jabber-receiving-presence", plugin, + PURPLE_CALLBACK(jabber_presence_received), NULL); + + /* IQ namespace signals */ + purple_signal_emit(jabber_handle, "jabber-register-namespace-watcher", + "bogus_node", "super-duper-namespace"); + /* The above is equivalent to doing: + int result = GPOINTER_TO_INT(purple_plugin_ipc_call(jabber_handle, "register_namespace_watcher", &ok, "bogus_node", "super-duper-namespace")); + */ + + purple_signal_connect(jabber_handle, "jabber-watched-iq", plugin, + PURPLE_CALLBACK(jabber_watched_iq), NULL); + } + + return TRUE; +} + +static gboolean +plugin_unload(PurplePlugin *plugin) +{ + void *jabber_handle = purple_plugins_find_with_id("prpl-jabber"); + + purple_signals_disconnect_by_handle(plugin); + + if (jabber_handle) { + /* Unregister watched namespaces */ + purple_signal_emit(jabber_handle, "jabber-unregister-namespace-watcher", + "bogus_node", "super-duper-namespace"); + /* The above is equivalent to doing: + int result = GPOINTER_TO_INT(purple_plugin_ipc_call(jabber_handle, "unregister_namespace_watcher", &ok, "bogus_node", "super-duper-namespace")); + */ + } + return TRUE; } @@ -808,7 +912,7 @@ PURPLE_WEBSITE, /**< homepage */ plugin_load, /**< load */ - NULL, /**< unload */ + plugin_unload, /**< unload */ NULL, /**< destroy */ NULL, /**< ui_info */
--- a/libpurple/protocols/bonjour/mdns_avahi.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/bonjour/mdns_avahi.c Tue Jun 09 23:30:18 2009 +0000 @@ -357,14 +357,16 @@ AvahiBuddyImplData *idata = buddy->mdns_impl_data; switch (event) { + case AVAHI_BROWSER_CACHE_EXHAUSTED: + case AVAHI_BROWSER_ALL_FOR_NOW: + /* Ignore these "meta" informational events */ + return; case AVAHI_BROWSER_NEW: bonjour_buddy_got_buddy_icon(buddy, rdata, size); break; case AVAHI_BROWSER_REMOVE: - case AVAHI_BROWSER_CACHE_EXHAUSTED: - case AVAHI_BROWSER_ALL_FOR_NOW: case AVAHI_BROWSER_FAILURE: - purple_debug_error("bonjour", "Error rerieving buddy icon record: %s\n", + purple_debug_error("bonjour", "Error retrieving buddy icon record: %s\n", avahi_strerror(avahi_client_errno(avahi_record_browser_get_client(b)))); break; }
--- a/libpurple/protocols/gg/buddylist.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/gg/buddylist.c Tue Jun 09 23:30:18 2009 +0000 @@ -40,57 +40,33 @@ { GGPInfo *info = gc->proto_data; PurpleAccount *account = purple_connection_get_account(gc); - - PurpleBlistNode *gnode, *cnode, *bnode; - PurpleBuddy *buddy; - uin_t *userlist = NULL; - gchar *types = NULL; - int size = 0, ret = 0; + GSList *buddies; + uin_t *userlist; + gchar *types; + int i = 0, ret = 0; + int size; - for (gnode = purple_blist_get_root(); - gnode != NULL; - gnode = purple_blist_node_get_sibling_next(gnode)) - { - if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) - continue; - - for (cnode = purple_blist_node_get_first_child(gnode); - cnode != NULL; - cnode = purple_blist_node_get_sibling_next(cnode)) - { - if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) - continue; + buddies = purple_find_buddies(account, NULL); - for (bnode = purple_blist_node_get_first_child(cnode); - bnode != NULL; - bnode = purple_blist_node_get_sibling_next(bnode)) - { - const gchar *name = NULL; - - if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) - continue; - - buddy = (PurpleBuddy *)bnode; + size = g_slist_length(buddies); + userlist = g_new(uin_t, size); + types = g_new(gchar, size); - if (purple_buddy_get_account(buddy) != account) - continue; - - name = purple_buddy_get_name(buddy); + for (buddies = purple_find_buddies(account, NULL); buddies; + buddies = g_slist_delete_link(buddies, buddies), ++i) + { + PurpleBuddy *buddy = buddies->data; + const gchar *name = purple_buddy_get_name(buddy); - size++; - userlist = (uin_t *) g_renew(uin_t, userlist, size); - types = (gchar *) g_renew(gchar, types, size); - userlist[size - 1] = ggp_str_to_uin(name); - types[size - 1] = GG_USER_NORMAL; - purple_debug_info("gg", "ggp_buddylist_send: adding %d\n", - userlist[size - 1]); - } - } + userlist[i] = ggp_str_to_uin(name); + types[i] = GG_USER_NORMAL; + purple_debug_info("gg", "ggp_buddylist_send: adding %d\n", + userlist[i]); } ret = gg_notify_ex(info->session, userlist, types, size); purple_debug_info("gg", "send: ret=%d; size=%d\n", ret, size); - + if (userlist) { g_free(userlist); g_free(types); @@ -178,105 +154,28 @@ } /* }}} */ -/* void ggp_buddylist_offline(PurpleConnection *gc) {{{ */ -void ggp_buddylist_offline(PurpleConnection *gc) -{ - PurpleAccount *account = purple_connection_get_account(gc); - PurpleBlistNode *gnode, *cnode, *bnode; - PurpleBuddy *buddy; - - for (gnode = purple_blist_get_root(); - gnode != NULL; - gnode = purple_blist_node_get_sibling_next(gnode)) - { - if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) - continue; - - for (cnode = purple_blist_node_get_first_child(gnode); - cnode != NULL; - cnode = purple_blist_node_get_sibling_next(cnode)) - { - if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) - continue; - - for (bnode = purple_blist_node_get_first_child(cnode); - bnode != NULL; - bnode = purple_blist_node_get_sibling_next(bnode)) - { - const gchar *name = NULL; - - if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) - continue; - - buddy = (PurpleBuddy *)bnode; - - name = purple_buddy_get_name(buddy); - - if (purple_buddy_get_account(buddy) != account) - continue; - - purple_prpl_got_user_status( - account, name, "offline", NULL); - - purple_debug_info("gg", - "ggp_buddylist_offline: gone: %s\n", - name); - } - } - } -} -/* }}} */ - /* char *ggp_buddylist_dump(PurpleAccount *account) {{{ */ char *ggp_buddylist_dump(PurpleAccount *account) { - PurpleBlistNode *gnode, *cnode, *bnode; - PurpleGroup *group; - PurpleBuddy *buddy; + GSList *buddies; GString *buddylist = g_string_sized_new(1024); char *ptr; - for (gnode = purple_blist_get_root(); - gnode != NULL; - gnode = purple_blist_node_get_sibling_next(gnode)) - { - if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) - continue; - - group = (PurpleGroup *)gnode; - - for (cnode = purple_blist_node_get_first_child(gnode); - cnode != NULL; - cnode = purple_blist_node_get_sibling_next(cnode)) - { - if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) - continue; + for (buddies = purple_find_buddies(account, NULL); buddies; + buddies = g_slist_delete_link(buddies, buddies)) { + PurpleBuddy *buddy = buddies->data; + PurpleGroup *group = purple_buddy_get_group(buddy); + const char *bname = purple_buddy_get_name(buddy); + const char *gname = purple_group_get_name(group); + const char *alias = purple_buddy_get_alias(buddy); - for (bnode = purple_blist_node_get_first_child(cnode); - bnode != NULL; - bnode = purple_blist_node_get_sibling_next(bnode)) - { - const gchar *name, *alias, *gname; - - if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) - continue; - - buddy = (PurpleBuddy *)bnode; - if (purple_buddy_get_account(buddy) != account) - continue; + if (alias == NULL) + alias = bname; - name = purple_buddy_get_name(buddy); - alias = purple_buddy_get_alias(buddy); - if(alias == NULL) - alias = name; - gname = purple_group_get_name(group); - - g_string_append_printf(buddylist, - "%s;%s;%s;%s;%s;%s;%s;%s%s\r\n", - alias, alias, alias, alias, - "", gname, name, "", ""); - } - } + g_string_append_printf(buddylist, + "%s;%s;%s;%s;%s;%s;%s;%s%s\r\n", + alias, alias, alias, alias, + "", gname, bname, "", ""); } ptr = charset_convert(buddylist->str, "UTF-8", "CP1250");
--- a/libpurple/protocols/gg/buddylist.h Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/gg/buddylist.h Tue Jun 09 23:30:18 2009 +0000 @@ -31,7 +31,7 @@ ggp_buddylist_send(PurpleConnection *gc); /** - * Load buddylist from server into the rooster. + * Load buddylist from server into the roster. * * @param gc PurpleConnection * @param buddylist Pointer to the buddylist that will be loaded. @@ -41,14 +41,6 @@ ggp_buddylist_load(PurpleConnection *gc, char *buddylist); /** - * Set offline status for all buddies. - * - * @param gc Connection handler - */ -void -ggp_buddylist_offline(PurpleConnection *gc); - -/** * Get all the buddies in the current account. * * @param account Current account.
--- a/libpurple/protocols/gg/gg.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/gg/gg.c Tue Jun 09 23:30:18 2009 +0000 @@ -1759,6 +1759,7 @@ PurpleStatus *status; struct gg_login_params *glp; GGPInfo *info; + const char *address; if (ggp_setup_proxy(account) == -1) return; @@ -1789,6 +1790,26 @@ glp->status = ggp_to_gg_status(status, &glp->status_descr); glp->tls = 0; + address = purple_account_get_string(account, "gg_server", ""); + if (address && *address) { + struct in_addr *addr = gg_gethostbyname(address); + + purple_debug_info("gg", "Using gg server given by user (%s)\n", address); + + if (addr == NULL) { + purple_debug_error("gg", "gg_gethostbyname returned error (%d): %s\n", + errno, g_strerror(errno)); + purple_connection_error_reason(gc, + PURPLE_CONNECTION_ERROR_NETWORK_ERROR, /* should this be a settings error? */ + _("Unable to resolve server")); + return; + } + + glp->server_addr = inet_addr(inet_ntoa(*addr)); + glp->server_port = 8074; + } else + purple_debug_info("gg", "Trying to retrieve address from gg appmsg service\n"); + info->session = gg_login(glp); if (info->session == NULL) { purple_connection_error_reason (gc, @@ -1837,8 +1858,6 @@ if (gc->inpa > 0) purple_input_remove(gc->inpa); - ggp_buddylist_offline(gc); - purple_debug_info("gg", "Connection closed.\n"); } @@ -2369,6 +2388,11 @@ prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + option = purple_account_option_string_new(_("GG server"), + "gg_server", ""); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, + option); + my_protocol = plugin; gg_debug_handler = purple_gg_debug_handler;
--- a/libpurple/protocols/irc/cmds.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/irc/cmds.c Tue Jun 09 23:30:18 2009 +0000 @@ -142,10 +142,10 @@ if (purple_conversation_get_type(convo) == PURPLE_CONV_TYPE_CHAT) serv_got_chat_in(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(convo)), purple_connection_get_display_name(gc), - 0, action, time(NULL)); + PURPLE_MESSAGE_SEND, action, time(NULL)); else purple_conv_im_write(PURPLE_CONV_IM(convo), purple_connection_get_display_name(gc), - action, 0, time(NULL)); + action, PURPLE_MESSAGE_SEND, time(NULL)); g_free(action); }
--- a/libpurple/protocols/irc/irc.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/irc/irc.c Tue Jun 09 23:30:18 2009 +0000 @@ -306,7 +306,7 @@ if (strpbrk(username, " \t\v\r\n") != NULL) { purple_connection_error_reason (gc, PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, - _("IRC nicks may not contain whitespace")); + _("IRC nick and server may not contain whitespace")); return; }
--- a/libpurple/protocols/irc/msgs.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/irc/msgs.c Tue Jun 09 23:30:18 2009 +0000 @@ -78,7 +78,7 @@ { PurpleConnection *gc; PurpleStatus *status; - PurpleBlistNode *gnode, *cnode, *bnode; + GSList *buddies; PurpleAccount *account; if ((gc = purple_account_get_connection(irc->account)) == NULL @@ -97,33 +97,13 @@ } /* this used to be in the core, but it's not now */ - for (gnode = purple_blist_get_root(); - gnode; - gnode = purple_blist_node_get_sibling_next(gnode)) + for (buddies = purple_find_buddies(account, NULL); buddies; + buddies = g_slist_delete_link(buddies, buddies)) { - if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) - continue; - for(cnode = purple_blist_node_get_first_child(gnode); - cnode; - cnode = purple_blist_node_get_sibling_next(cnode)) - { - if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) - continue; - for(bnode = purple_blist_node_get_first_child(cnode); - bnode; - bnode = purple_blist_node_get_sibling_next(bnode)) - { - PurpleBuddy *b; - if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) - continue; - b = (PurpleBuddy *)bnode; - if(purple_buddy_get_account(b) == account) { - struct irc_buddy *ib = g_new0(struct irc_buddy, 1); - ib->name = g_strdup(purple_buddy_get_name(b)); - g_hash_table_insert(irc->buddies, ib->name, ib); - } - } - } + PurpleBuddy *b = buddies->data; + struct irc_buddy *ib = g_new0(struct irc_buddy, 1); + ib->name = g_strdup(purple_buddy_get_name(b)); + g_hash_table_insert(irc->buddies, ib->name, ib); } irc_blist_timeout(irc);
--- a/libpurple/protocols/jabber/auth.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/auth.c Tue Jun 09 23:30:18 2009 +0000 @@ -689,6 +689,18 @@ JabberIq *iq; xmlnode *query, *username; + /* We can end up here without encryption if the server doesn't support + * <stream:features/> and we're not using old-style SSL. If the user + * is requiring SSL/TLS, we need to enforce it. + */ + if (!jabber_stream_is_ssl(js) && + purple_account_get_bool(purple_connection_get_account(js->gc), "require_tls", FALSE)) { + purple_connection_error_reason (js->gc, + PURPLE_CONNECTION_ERROR_ENCRYPTION_ERROR, + _("You require encryption, but it is not available on this server.")); + return; + } + #ifdef HAVE_CYRUS_SASL /* If we have Cyrus SASL, then passwords will have been set * to OPTIONAL for this protocol. So, we need to do our own @@ -977,7 +989,20 @@ response = xmlnode_new("response"); xmlnode_set_namespace(response, "urn:ietf:params:xml:ns:xmpp-sasl"); if (clen > 0) { - enc_out = purple_base64_encode((unsigned char*)c_out, clen); + /* Cyrus SASL 2.1.22 appears to contain code to add the charset + * to the response but there is no possibility it will be executed. + * My reading of the digestmd5 plugin indicates the username and + * realm are always encoded in UTF-8 (they seem to be the values + * we pass in), so we need to ensure charset=utf-8 is set. + */ + if (strstr(c_out, ",charset=")) + enc_out = purple_base64_encode((unsigned char*)c_out, clen); + else { + char *tmp = g_strdup_printf("%s,charset=utf-8", c_out); + enc_out = purple_base64_encode((unsigned char*)tmp, clen + 14); + g_free(tmp); + } + xmlnode_insert_data(response, enc_out, -1); g_free(enc_out); }
--- a/libpurple/protocols/jabber/bosh.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/bosh.c Tue Jun 09 23:30:18 2009 +0000 @@ -57,7 +57,7 @@ /* decoded URL */ char *host; int port; - char *path; + char *path; /* Must be big enough to hold 2^53 - 1 */ guint64 rid; @@ -281,7 +281,7 @@ * connection. */ chosen = conn->connections[0]; - + if (!chosen->ready) purple_debug_warning("jabber", "First BOSH connection wasn't ready. Bad " "things may happen.\n"); @@ -296,12 +296,12 @@ */ if (data) { int len = data ? strlen(data) : 0; - purple_circ_buffer_append(conn->pending, data, len); + purple_circ_buffer_append(conn->pending, data, len); } return; } - packet = g_string_new(""); + packet = g_string_new(NULL); g_string_printf(packet, "<body " "rid='%" G_GUINT64_FORMAT "' " @@ -349,7 +349,7 @@ const char *type; type = xmlnode_get_attrib(node, "type"); - + if (type != NULL && !strcmp(type, "terminate")) { conn->ready = FALSE; purple_connection_error_reason (conn->js->gc, @@ -418,7 +418,7 @@ jabber_process_packet(js, &child); } } else { - purple_debug_warning("jabber", "Received unexepcted empty BOSH packet.\n"); + purple_debug_warning("jabber", "Received unexepcted empty BOSH packet.\n"); } } @@ -448,11 +448,14 @@ if (version) { const char *dot = strstr(version, "."); - int major = atoi(version); - int minor = atoi(dot + 1); + int major, minor = 0; purple_debug_info("jabber", "BOSH connection manager version %s\n", version); + major = atoi(version); + if (dot) + minor = atoi(dot + 1); + if (major != 1 || minor < 6) { purple_connection_error_reason(conn->js->gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, @@ -484,11 +487,11 @@ packet = xmlnode_get_child(node, "features"); conn->js->use_bosh = TRUE; conn->receive_cb = auth_response_cb; - jabber_stream_features_parse(conn->js, packet); + jabber_stream_features_parse(conn->js, packet); } static void jabber_bosh_connection_boot(PurpleBOSHConnection *conn) { - GString *buf = g_string_new(""); + GString *buf = g_string_new(NULL); g_string_printf(buf, "<body content='text/xml; charset=utf-8' " "secure='true' " @@ -627,13 +630,24 @@ if (!conn->headers_done) { const char *content_length = purple_strcasestr(cursor, "\r\nContent-Length"); - const char *end_of_headers = purple_strcasestr(cursor, "\r\n\r\n"); + const char *end_of_headers = strstr(cursor, "\r\n\r\n"); /* Make sure Content-Length is in headers, not body */ - if (content_length && content_length < end_of_headers) { - char *sep = strstr(content_length, ": "); - int len = atoi(sep + 2); - if (len == 0) + if (content_length && (!end_of_headers || content_length < end_of_headers)) { + const char *sep; + const char *eol; + int len; + + if ((sep = strstr(content_length, ": ")) == NULL || + (eol = strstr(sep, "\r\n")) == NULL) + /* + * The packet ends in the middle of the Content-Length line. + * We'll try again later when we have more. + */ + return; + + len = atoi(sep + 2); + if (len == 0) purple_debug_warning("jabber", "Found mangled Content-Length header.\n"); conn->body_len = len; @@ -686,26 +700,24 @@ int cnt, count = 0; if (!conn->buf) - conn->buf = g_string_new(""); + conn->buf = g_string_new(NULL); - /* Read once to prime cnt before the loop */ - if (conn->psc) - cnt = purple_ssl_read(conn->psc, buffer, sizeof(buffer)); - else - cnt = read(conn->fd, buffer, sizeof(buffer)); - while (cnt > 0) { - count += cnt; - g_string_append_len(conn->buf, buffer, cnt); - + do { if (conn->psc) cnt = purple_ssl_read(conn->psc, buffer, sizeof(buffer)); else cnt = read(conn->fd, buffer, sizeof(buffer)); - } + + if (cnt > 0) { + count += cnt; + g_string_append_len(conn->buf, buffer, cnt); + } + } while (cnt > 0); if (cnt == 0 || (cnt < 0 && errno != EAGAIN)) { if (cnt < 0) - purple_debug_info("jabber", "bosh read=%d, errno=%d\n", cnt, errno); + purple_debug_info("jabber", "bosh read=%d, errno=%d, error=%s\n", + cnt, errno, g_strerror(errno)); else purple_debug_info("jabber", "bosh server closed the connection\n"); @@ -718,8 +730,8 @@ /* Process what we do have */ } - - jabber_bosh_http_connection_process(conn); + if (conn->buf->len > 0) + jabber_bosh_http_connection_process(conn); } static void
--- a/libpurple/protocols/jabber/buddy.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/buddy.c Tue Jun 09 23:30:18 2009 +0000 @@ -47,7 +47,7 @@ char *jid; GSList *ids; GHashTable *resources; - int timeout_handle; + guint timeout_handle; GSList *vcard_imgids; PurpleNotifyUserInfo *user_info; long last_seconds; @@ -69,7 +69,7 @@ gboolean create) { JabberBuddy *jb; - const char *realname; + char *realname; if (js->buddies == NULL) return NULL; @@ -81,8 +81,9 @@ if(!jb && create) { jb = g_new0(JabberBuddy, 1); - g_hash_table_insert(js->buddies, g_strdup(realname), jb); - } + g_hash_table_insert(js->buddies, realname, jb); + } else + g_free(realname); return jb; } @@ -1044,14 +1045,14 @@ if (!jbi->jb->resources) { /* the buddy is offline */ - gchar *status = - g_strdup_printf("%s%s%s", _("Offline"), + gchar *status = + g_strdup_printf("%s%s%s", _("Offline"), jbi->last_message ? ": " : "", jbi->last_message ? jbi->last_message : ""); if (jbi->last_seconds > 0) { char *last = purple_str_seconds_to_string(jbi->last_seconds); gchar *message = g_strdup_printf(_("%s ago"), last); - purple_notify_user_info_prepend_pair(user_info, + purple_notify_user_info_prepend_pair(user_info, _("Logged off"), message); g_free(last); g_free(message); @@ -1471,8 +1472,8 @@ jbir->idle_seconds = sec; } } - /* Update the idle time of the buddy resource, if we got it. - This will correct the value when a server doesn't mark + /* Update the idle time of the buddy resource, if we got it. + This will correct the value when a server doesn't mark delayed presence and we got the presence when signing on */ jb = jabber_buddy_find(js, from, FALSE); if (jb) { @@ -1493,9 +1494,9 @@ jbr->idle = 0; } - if (jbr == + if (jbr == jabber_buddy_find_resource(jb, NULL)) { - purple_prpl_got_user_idle(js->gc->account, + purple_prpl_got_user_idle(js->gc->account, buddy_name, jbr->idle, jbr->idle); } } @@ -1750,7 +1751,7 @@ jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id)); jabber_iq_send(iq); } - + js->pending_buddy_info_requests = g_slist_prepend(js->pending_buddy_info_requests, jbi); jbi->timeout_handle = purple_timeout_add_seconds(30, jabber_buddy_get_info_timeout, jbi); } @@ -2501,7 +2502,7 @@ if (node) purple_debug_info("jabber", "Found cap: %s\n", cap); else - purple_debug_info("jabber", "Cap %s not found\n", cap); + purple_debug_info("jabber", "Cap %s not found\n", cap); return (node != NULL); } @@ -2520,3 +2521,22 @@ return jabber_resource_has_capability(jbr, cap); } +const gchar * +jabber_resource_get_identity_category_type(const JabberBuddyResource *jbr, + const gchar *category) +{ + const GList *iter = NULL; + + if (jbr->caps.info) { + for (iter = jbr->caps.info->identities ; iter ; iter = g_list_next(iter)) { + const JabberIdentity *identity = + (JabberIdentity *) iter->data; + + if (strcmp(identity->category, category) == 0) { + return identity->type; + } + } + } + + return NULL; +}
--- a/libpurple/protocols/jabber/buddy.h Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/buddy.h Tue Jun 09 23:30:18 2009 +0000 @@ -123,4 +123,8 @@ const gchar *cap); gboolean jabber_buddy_has_capability(const JabberBuddy *jb, const gchar *cap); +const gchar * +jabber_resource_get_identity_category_type(const JabberBuddyResource *jbr, + const gchar *category); + #endif /* PURPLE_JABBER_BUDDY_H_ */
--- a/libpurple/protocols/jabber/caps.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/caps.c Tue Jun 09 23:30:18 2009 +0000 @@ -41,7 +41,7 @@ /** * Processes a query-node and returns a JabberCapsClientInfo object with all relevant info. - * + * * @param query A query object. * @return A JabberCapsClientInfo object. */ @@ -192,7 +192,7 @@ xmlnode *feature = xmlnode_new_child(client, "feature"); xmlnode_set_attrib(feature, "var", feat); } - + for(iter = props->forms; iter; iter = g_list_next(iter)) { /* FIXME: See #7814 */ xmlnode *xdata = iter->data; @@ -329,7 +329,7 @@ void jabber_caps_init(void) { - nodetable = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)jabber_caps_node_exts_unref); + nodetable = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)jabber_caps_node_exts_unref); capstable = g_hash_table_new_full(jabber_caps_hash, jabber_caps_compare, NULL, (GDestroyNotify)jabber_caps_client_info_destroy); jabber_caps_load(); } @@ -589,7 +589,7 @@ } userdata = g_new0(jabber_caps_cbplususerdata, 1); - /* This ref is given to fetching the basic node#ver info if we need it + /* This ref is given to fetching the basic node#ver info if we need it * or unrefed at the bottom of this function */ cbplususerdata_ref(userdata); userdata->cb = cb; @@ -659,7 +659,7 @@ jabber_iq_set_callback(iq, jabber_caps_ext_iqcb, cbdata); jabber_iq_send(iq); - ++userdata->extOutstanding; + ++userdata->extOutstanding; } exts[i] = NULL; } @@ -681,7 +681,7 @@ const JabberIdentity *bc; gint cat_cmp; gint typ_cmp; - + ac = a; bc = b; @@ -723,7 +723,7 @@ aformtype = jabber_caps_get_formtype(aformtypefield); bformtype = jabber_caps_get_formtype(bformtypefield); - + result = strcmp(aformtype, bformtype); g_free(aformtype); g_free(bformtype); @@ -737,7 +737,7 @@ if (!query || strcmp(query->xmlns, "http://jabber.org/protocol/disco#info")) return 0; - + info = g_new0(JabberCapsClientInfo, 1); for(child = query->child; child; child = child->next) { @@ -846,7 +846,7 @@ char *type = g_markup_escape_text(id->type, -1); char *lang = NULL; char *name = NULL; - + if (id->lang) lang = g_markup_escape_text(id->lang, -1); if (id->name) @@ -878,7 +878,7 @@ while (fields) { GList *value; - JabberDataFormField *field = (JabberDataFormField*)fields->data; + JabberDataFormField *field = (JabberDataFormField*)fields->data; if (strcmp(field->var, "FORM_TYPE")) { /* Append the "var" attribute */
--- a/libpurple/protocols/jabber/chat.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/chat.c Tue Jun 09 23:30:18 2009 +0000 @@ -1204,7 +1204,7 @@ data.all_support = &all_support; data.jb = jb; - g_hash_table_foreach(chat->members, + g_hash_table_foreach(chat->members, jabber_chat_all_participants_have_capability_foreach, &data); } else { all_support = FALSE;
--- a/libpurple/protocols/jabber/data.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/data.c Tue Jun 09 23:30:18 2009 +0000 @@ -237,7 +237,7 @@ remote_data_by_cid = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, jabber_data_delete); - jabber_iq_register_handler("data", XEP_0231_NAMESPACE, jabber_data_parse); + jabber_iq_register_handler("data", XEP_0231_NAMESPACE, jabber_data_parse); } void
--- a/libpurple/protocols/jabber/disco.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/disco.c Tue Jun 09 23:30:18 2009 +0000 @@ -1,5 +1,5 @@ /* - * purple - Jabber Protocol Plugin + * purple - Jabber Service Discovery * * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com> * @@ -22,6 +22,7 @@ #include "internal.h" #include "prefs.h" #include "debug.h" +#include "request.h" #include "adhoccommands.h" #include "buddy.h" @@ -40,6 +41,11 @@ JabberDiscoInfoCallback *callback; }; +struct _jabber_disco_items_cb_data { + gpointer data; + JabberDiscoItemsCallback *callback; +}; + #define SUPPORT_FEATURE(x) { \ feature = xmlnode_new_child(query, "feature"); \ xmlnode_set_attrib(feature, "var", x); \ @@ -148,14 +154,26 @@ */ xmlnode *feature = xmlnode_new_child(query, "feature"); xmlnode_set_attrib(feature, "var", "http://www.google.com/xmpp/protocol/voice/v1"); + } else if (g_str_equal(node, CAPS0115_NODE "#" "video-v1")) { + /* + * HUGE HACK! We advertise this ext (see jabber_presence_create_js + * where we add <c/> to the <presence/>) for the Google Talk + * clients that don't actually check disco#info features. + * + * This specific feature is redundant but is what + * node='http://mail.google.com/xmpp/client/caps', ver='1.1' + * advertises as 'video-v1'. + */ + xmlnode *feature = xmlnode_new_child(query, "feature"); + xmlnode_set_attrib(feature, "var", "http://www.google.com/xmpp/protocol/video/v1"); #endif } else { xmlnode *error, *inf; - + /* XXX: gross hack, implement jabber_iq_set_type or something */ xmlnode_set_attrib(iq->node, "type", "error"); iq->type = JABBER_IQ_ERROR; - + error = xmlnode_new_child(query, "error"); xmlnode_set_attrib(error, "code", "404"); xmlnode_set_attrib(error, "type", "cancel"); @@ -164,13 +182,42 @@ } g_free(node_uri); jabber_iq_send(iq); - } else if(type == JABBER_IQ_RESULT) { + } else if (type == JABBER_IQ_SET) { + /* wtf? seriously. wtf‽ */ + JabberIq *iq = jabber_iq_new(js, JABBER_IQ_ERROR); + xmlnode *error, *bad_request; + + /* Free the <query/> */ + xmlnode_free(xmlnode_get_child(iq->node, "query")); + /* Add an error */ + error = xmlnode_new_child(iq->node, "error"); + xmlnode_set_attrib(error, "type", "modify"); + bad_request = xmlnode_new_child(error, "bad-request"); + xmlnode_set_namespace(bad_request, "urn:ietf:params:xml:ns:xmpp-stanzas"); + + jabber_iq_set_id(iq, id); + xmlnode_set_attrib(iq->node, "to", from); + + jabber_iq_send(iq); + } +} + +static void jabber_disco_info_cb(JabberStream *js, const char *from, + JabberIqType type, const char *id, + xmlnode *packet, gpointer data) +{ + struct _jabber_disco_info_cb_data *jdicd = data; + xmlnode *query; + + query = xmlnode_get_child_with_namespace(packet, "query", + "http://jabber.org/protocol/disco#info"); + + if (type == JABBER_IQ_RESULT && query) { xmlnode *child; JabberID *jid; JabberBuddy *jb; JabberBuddyResource *jbr = NULL; JabberCapabilities capabilities = JABBER_CAP_NONE; - struct _jabber_disco_info_cb_data *jdicd; if((jid = jabber_id_new(from))) { if(jid->resource && (jb = jabber_buddy_find(js, from, TRUE))) @@ -181,7 +228,7 @@ if(jbr) capabilities = jbr->capabilities; - for(child = in_query->child; child; child = child->next) { + for(child = query->child; child; child = child->next) { if(child->type != XMLNODE_TYPE_TAG) continue; @@ -233,6 +280,8 @@ capabilities |= JABBER_CAP_IQ_REGISTER; else if(!strcmp(var, "urn:xmpp:ping")) capabilities |= JABBER_CAP_PING; + else if(!strcmp(var, "http://jabber.org/protocol/disco#items")) + capabilities |= JABBER_CAP_ITEMS; else if(!strcmp(var, "http://jabber.org/protocol/commands")) { capabilities |= JABBER_CAP_ADHOC; } @@ -248,19 +297,12 @@ if(jbr) jbr->capabilities = capabilities; - if((jdicd = g_hash_table_lookup(js->disco_callbacks, from))) { - jdicd->callback(js, from, capabilities, jdicd->data); - g_hash_table_remove(js->disco_callbacks, from); - } - } else if(type == JABBER_IQ_ERROR) { + jdicd->callback(js, from, capabilities, jdicd->data); + } else { /* type == JABBER_IQ_ERROR or query == NULL */ JabberID *jid; JabberBuddy *jb; JabberBuddyResource *jbr = NULL; JabberCapabilities capabilities = JABBER_CAP_NONE; - struct _jabber_disco_info_cb_data *jdicd; - - if(!(jdicd = g_hash_table_lookup(js->disco_callbacks, from))) - return; if((jid = jabber_id_new(from))) { if(jid->resource && (jb = jabber_buddy_find(js, from, TRUE))) @@ -272,7 +314,6 @@ capabilities = jbr->capabilities; jdicd->callback(js, from, capabilities, jdicd->data); - g_hash_table_remove(js->disco_callbacks, from); } } @@ -517,10 +558,10 @@ jdicd->data = data; jdicd->callback = callback; - g_hash_table_insert(js->disco_callbacks, g_strdup(who), jdicd); - iq = jabber_iq_new_query(js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#info"); xmlnode_set_attrib(iq->node, "to", who); + jabber_iq_set_callback(iq, jabber_disco_info_cb, jdicd); jabber_iq_send(iq); } +
--- a/libpurple/protocols/jabber/disco.h Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/disco.h Tue Jun 09 23:30:18 2009 +0000 @@ -1,5 +1,5 @@ /** - * @file disco.h service discovery handlers + * @file disco.h Jabber Service Discovery * * purple * @@ -24,9 +24,18 @@ #include "jabber.h" +typedef struct _JabberDiscoItem { + const char *jid; /* MUST */ + const char *node; /* SHOULD */ + const char *name; /* MAY */ +} JabberDiscoItem; + typedef void (JabberDiscoInfoCallback)(JabberStream *js, const char *who, JabberCapabilities capabilities, gpointer data); +typedef void (JabberDiscoItemsCallback)(JabberStream *js, const char *jid, + const char *node, GSList *items, gpointer data); + void jabber_disco_info_parse(JabberStream *js, const char *from, JabberIqType type, const char *id, xmlnode *in_query); void jabber_disco_items_parse(JabberStream *js, const char *from,
--- a/libpurple/protocols/jabber/google.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/google.c Tue Jun 09 23:30:18 2009 +0000 @@ -36,6 +36,9 @@ #ifdef USE_VV +#define NS_GOOGLE_VIDEO "http://www.google.com/session/video" +#define NS_GOOGLE_PHONE "http://www.google.com/session/phone" + typedef struct { char *id; char *initiator; @@ -53,16 +56,17 @@ GoogleSessionId id; GoogleSessionState state; PurpleMedia *media; - JabberStream *js; + JabberStream *js; char *remote_jid; + gboolean video; } GoogleSession; -static gboolean +static gboolean google_session_id_equal(gconstpointer a, gconstpointer b) { GoogleSessionId *c = (GoogleSessionId*)a; GoogleSessionId *d = (GoogleSessionId*)b; - + return !strcmp(c->id, d->id) && !strcmp(c->initiator, d->initiator); } @@ -95,18 +99,22 @@ xmlnode_set_attrib(iq->node, "to", session->remote_jid); sess = google_session_create_xmlnode(session, "terminate"); xmlnode_insert_child(iq->node, sess); - + jabber_iq_send(iq); google_session_destroy(session); } -static void +static void google_session_send_candidates(PurpleMedia *media, gchar *session_id, gchar *participant, GoogleSession *session) { - GList *candidates = purple_media_get_local_candidates(session->media, "google-voice", - session->remote_jid); + GList *candidates = purple_media_get_local_candidates( + session->media, session_id, session->remote_jid); PurpleMediaCandidate *transport; + gboolean video = FALSE; + + if (!strcmp(session_id, "google-video")) + video = TRUE; for (;candidates;candidates = candidates->next) { JabberIq *iq; @@ -114,11 +122,10 @@ PurpleMediaCandidateType type; xmlnode *sess; xmlnode *candidate; + guint component_id; transport = (PurpleMediaCandidate*)(candidates->data); - - if (purple_media_candidate_get_component_id(transport) - != PURPLE_MEDIA_COMPONENT_RTP) - continue; + component_id = purple_media_candidate_get_component_id( + transport); iq = jabber_iq_new(session->js, JABBER_IQ_SET); sess = google_session_create_xmlnode(session, "candidates"); @@ -139,7 +146,11 @@ xmlnode_set_attrib(candidate, "address", ip); xmlnode_set_attrib(candidate, "port", port); - xmlnode_set_attrib(candidate, "name", "rtp"); + xmlnode_set_attrib(candidate, "name", + component_id == PURPLE_MEDIA_COMPONENT_RTP ? + video ? "video_rtp" : "rtp" : + component_id == PURPLE_MEDIA_COMPONENT_RTCP ? + video ? "video_rtcp" : "rtcp" : "none"); xmlnode_set_attrib(candidate, "username", username); /* * As of this writing, Farsight 2 in Google compatibility @@ -205,13 +216,38 @@ google_session_send_candidates(session->media, "google-voice", session->remote_jid, session); + google_session_send_candidates(session->media, + "google-video", session->remote_jid, + session); xmlnode_set_attrib(iq->node, "to", session->remote_jid); xmlnode_set_attrib(iq->node, "from", me); sess = google_session_create_xmlnode(session, "accept"); } xmlnode_insert_child(iq->node, sess); desc = xmlnode_new_child(sess, "description"); - xmlnode_set_namespace(desc, "http://www.google.com/session/phone"); + if (session->video) + xmlnode_set_namespace(desc, NS_GOOGLE_VIDEO); + else + xmlnode_set_namespace(desc, NS_GOOGLE_PHONE); + + codecs = purple_media_get_codecs(media, "google-video"); + + for (iter = codecs; iter; iter = g_list_next(iter)) { + PurpleMediaCodec *codec = (PurpleMediaCodec*)iter->data; + gchar *id = g_strdup_printf("%d", + purple_media_codec_get_id(codec)); + gchar *encoding_name = + purple_media_codec_get_encoding_name(codec); + payload = xmlnode_new_child(desc, "payload-type"); + xmlnode_set_attrib(payload, "id", id); + xmlnode_set_attrib(payload, "name", encoding_name); + xmlnode_set_attrib(payload, "width", "320"); + xmlnode_set_attrib(payload, "height", "200"); + xmlnode_set_attrib(payload, "framerate", "30"); + g_free(encoding_name); + g_free(id); + } + purple_media_codec_list_free(codecs); codecs = purple_media_get_codecs(media, "google-voice"); @@ -224,8 +260,17 @@ gchar *clock_rate = g_strdup_printf("%d", purple_media_codec_get_clock_rate(codec)); payload = xmlnode_new_child(desc, "payload-type"); + if (session->video) + xmlnode_set_namespace(payload, NS_GOOGLE_PHONE); xmlnode_set_attrib(payload, "id", id); - xmlnode_set_attrib(payload, "name", encoding_name); + /* + * Hack to make Gmail accept speex as the codec. + * It shouldn't have to be case sensitive. + */ + if (purple_strequal(encoding_name, "SPEEX")) + xmlnode_set_attrib(payload, "name", "speex"); + else + xmlnode_set_attrib(payload, "name", encoding_name); xmlnode_set_attrib(payload, "clockrate", clock_rate); g_free(clock_rate); g_free(encoding_name); @@ -235,10 +280,14 @@ jabber_iq_send(iq); - if (is_initiator) + if (is_initiator) { google_session_send_candidates(session->media, "google-voice", session->remote_jid, session); + google_session_send_candidates(session->media, + "google-video", session->remote_jid, + session); + } g_signal_handlers_disconnect_by_func(G_OBJECT(session->media), G_CALLBACK(google_session_ready), session); @@ -339,6 +388,9 @@ session->js = js; session->remote_jid = jid; + if (type & PURPLE_MEDIA_VIDEO) + session->video = TRUE; + session->media = purple_media_manager_create_media( purple_media_manager_get(), purple_connection_get_account(js->gc), @@ -349,8 +401,12 @@ params = jabber_google_session_get_params(js, &num_params); if (purple_media_add_stream(session->media, "google-voice", - session->remote_jid, PURPLE_MEDIA_AUDIO, - TRUE, "nice", num_params, params) == FALSE) { + session->remote_jid, PURPLE_MEDIA_AUDIO, + TRUE, "nice", num_params, params) == FALSE || + (session->video && purple_media_add_stream( + session->media, "google-video", + session->remote_jid, PURPLE_MEDIA_VIDEO, + TRUE, "nice", num_params, params) == FALSE)) { purple_media_error(session->media, "Error adding stream."); purple_media_stream_info(session->media, PURPLE_MEDIA_INFO_HANGUP, NULL, NULL, TRUE); @@ -378,18 +434,31 @@ google_session_handle_initiate(JabberStream *js, GoogleSession *session, xmlnode *sess, const char *iq_id) { JabberIq *result; - GList *codecs = NULL; + GList *codecs = NULL, *video_codecs = NULL; xmlnode *desc_element, *codec_element; PurpleMediaCodec *codec; - const char *id, *encoding_name, *clock_rate; + const char *xmlns; GParameter *params; - guint num_params; + guint num_params; if (session->state != UNINIT) { purple_debug_error("jabber", "Received initiate for active session.\n"); return; } + desc_element = xmlnode_get_child(sess, "description"); + xmlns = xmlnode_get_namespace(desc_element); + + if (purple_strequal(xmlns, NS_GOOGLE_PHONE)) + session->video = FALSE; + else if (purple_strequal(xmlns, NS_GOOGLE_VIDEO)) + session->video = TRUE; + else { + purple_debug_error("jabber", "Received initiate with " + "invalid namespace %s.\n", xmlns); + return; + } + session->media = purple_media_manager_create_media( purple_media_manager_get(), purple_connection_get_account(js->gc), @@ -401,7 +470,11 @@ if (purple_media_add_stream(session->media, "google-voice", session->remote_jid, PURPLE_MEDIA_AUDIO, FALSE, - "nice", num_params, params) == FALSE) { + "nice", num_params, params) == FALSE || + (session->video && purple_media_add_stream( + session->media, "google-video", + session->remote_jid, PURPLE_MEDIA_VIDEO, + FALSE, "nice", num_params, params) == FALSE)) { purple_media_error(session->media, "Error adding stream."); purple_media_stream_info(session->media, PURPLE_MEDIA_INFO_HANGUP, NULL, NULL, TRUE); @@ -412,23 +485,55 @@ g_free(params); - desc_element = xmlnode_get_child(sess, "description"); + for (codec_element = xmlnode_get_child(desc_element, "payload-type"); + codec_element; codec_element = codec_element->next) { + const char *id, *encoding_name, *clock_rate, + *width, *height, *framerate; + gboolean video; + if (codec_element->name && + strcmp(codec_element->name, "payload-type")) + continue; - for (codec_element = xmlnode_get_child(desc_element, "payload-type"); - codec_element; - codec_element = xmlnode_get_next_twin(codec_element)) { + xmlns = xmlnode_get_namespace(codec_element); encoding_name = xmlnode_get_attrib(codec_element, "name"); id = xmlnode_get_attrib(codec_element, "id"); - clock_rate = xmlnode_get_attrib(codec_element, "clockrate"); + + if (!session->video || + (xmlns && !strcmp(xmlns, NS_GOOGLE_PHONE))) { + clock_rate = xmlnode_get_attrib( + codec_element, "clockrate"); + video = FALSE; + } else { + width = xmlnode_get_attrib(codec_element, "width"); + height = xmlnode_get_attrib(codec_element, "height"); + framerate = xmlnode_get_attrib( + codec_element, "framerate"); + clock_rate = "90000"; + video = TRUE; + } if (id) { - codec = purple_media_codec_new(atoi(id), encoding_name, PURPLE_MEDIA_AUDIO, - clock_rate ? atoi(clock_rate) : 0); - codecs = g_list_append(codecs, codec); + codec = purple_media_codec_new(atoi(id), encoding_name, + video ? PURPLE_MEDIA_VIDEO : + PURPLE_MEDIA_AUDIO, + clock_rate ? atoi(clock_rate) : 0); + if (video) + video_codecs = g_list_append( + video_codecs, codec); + else + codecs = g_list_append(codecs, codec); } } - purple_media_set_remote_codecs(session->media, "google-voice", session->remote_jid, codecs); + if (codecs) + purple_media_set_remote_codecs(session->media, "google-voice", + session->remote_jid, codecs); + if (video_codecs) + purple_media_set_remote_codecs(session->media, "google-video", + session->remote_jid, video_codecs); + + purple_media_codec_list_free(codecs); + purple_media_codec_list_free(video_codecs); g_signal_connect_swapped(G_OBJECT(session->media), "accepted", G_CALLBACK(google_session_ready), session); @@ -442,31 +547,32 @@ g_signal_connect(G_OBJECT(session->media), "stream-info", G_CALLBACK(google_session_stream_info_cb), session); - purple_media_codec_list_free(codecs); - result = jabber_iq_new(js, JABBER_IQ_RESULT); jabber_iq_set_id(result, iq_id); xmlnode_set_attrib(result->node, "to", session->remote_jid); jabber_iq_send(result); } -static void +static void google_session_handle_candidates(JabberStream *js, GoogleSession *session, xmlnode *sess, const char *iq_id) { JabberIq *result; - GList *list = NULL; + GList *list = NULL, *video_list = NULL; xmlnode *cand; static int name = 0; - char n[4]; - - for (cand = xmlnode_get_child(sess, "candidate"); cand; cand = xmlnode_get_next_twin(cand)) { + char n[4]; + + for (cand = xmlnode_get_child(sess, "candidate"); cand; + cand = xmlnode_get_next_twin(cand)) { PurpleMediaCandidate *info; + const gchar *cname = xmlnode_get_attrib(cand, "name"); const gchar *type = xmlnode_get_attrib(cand, "type"); const gchar *protocol = xmlnode_get_attrib(cand, "protocol"); const gchar *address = xmlnode_get_attrib(cand, "address"); const gchar *port = xmlnode_get_attrib(cand, "port"); + guint component_id; - if (type && address && port) { + if (cname && type && address && port) { PurpleMediaCandidateType candidate_type; g_snprintf(n, sizeof(n), "S%d", name++); @@ -480,7 +586,13 @@ else candidate_type = PURPLE_MEDIA_CANDIDATE_TYPE_HOST; - info = purple_media_candidate_new(n, PURPLE_MEDIA_COMPONENT_RTP, + if (purple_strequal(cname, "rtcp") || + purple_strequal(cname, "video_rtcp")) + component_id = PURPLE_MEDIA_COMPONENT_RTCP; + else + component_id = PURPLE_MEDIA_COMPONENT_RTP; + + info = purple_media_candidate_new(n, component_id, candidate_type, purple_strequal(protocol, "udp") ? PURPLE_MEDIA_NETWORK_PROTOCOL_UDP : @@ -489,12 +601,23 @@ atoi(port)); g_object_set(info, "username", xmlnode_get_attrib(cand, "username"), "password", xmlnode_get_attrib(cand, "password"), NULL); - list = g_list_append(list, info); + if (!strncmp(cname, "video_", 6)) + video_list = g_list_append(video_list, info); + else + list = g_list_append(list, info); } } - purple_media_add_remote_candidates(session->media, "google-voice", session->remote_jid, list); + if (list) + purple_media_add_remote_candidates( + session->media, "google-voice", + session->remote_jid, list); + if (video_list) + purple_media_add_remote_candidates( + session->media, "google-video", + session->remote_jid, video_list); purple_media_candidate_list_free(list); + purple_media_candidate_list_free(video_list); result = jabber_iq_new(js, JABBER_IQ_RESULT); jabber_iq_set_id(result, iq_id); @@ -506,28 +629,57 @@ google_session_handle_accept(JabberStream *js, GoogleSession *session, xmlnode *sess, const char *iq_id) { xmlnode *desc_element = xmlnode_get_child(sess, "description"); - xmlnode *codec_element = xmlnode_get_child(desc_element, "payload-type"); - GList *codecs = NULL; + xmlnode *codec_element = xmlnode_get_child( + desc_element, "payload-type"); + GList *codecs = NULL, *video_codecs = NULL; JabberIq *result = NULL; + const gchar *xmlns = xmlnode_get_namespace(desc_element); + gboolean video = (xmlns && !strcmp(xmlns, NS_GOOGLE_VIDEO)); + + for (; codec_element; codec_element = codec_element->next) { + const gchar *xmlns, *encoding_name, *id, + *clock_rate, *width, *height, *framerate; + gboolean video_codec = FALSE; + + if (!purple_strequal(codec_element->name, "payload-type")) + continue; - for (; codec_element; codec_element = - xmlnode_get_next_twin(codec_element)) { - const gchar *encoding_name = - xmlnode_get_attrib(codec_element, "name"); - const gchar *id = xmlnode_get_attrib(codec_element, "id"); - const gchar *clock_rate = - xmlnode_get_attrib(codec_element, "clockrate"); + xmlns = xmlnode_get_namespace(codec_element); + encoding_name = xmlnode_get_attrib(codec_element, "name"); + id = xmlnode_get_attrib(codec_element, "id"); + + if (!video || purple_strequal(xmlns, NS_GOOGLE_PHONE)) + clock_rate = xmlnode_get_attrib( + codec_element, "clockrate"); + else { + clock_rate = "90000"; + width = xmlnode_get_attrib(codec_element, "width"); + height = xmlnode_get_attrib(codec_element, "height"); + framerate = xmlnode_get_attrib( + codec_element, "framerate"); + video_codec = TRUE; + } if (id && encoding_name) { - PurpleMediaCodec *codec = purple_media_codec_new(atoi(id), - encoding_name, PURPLE_MEDIA_AUDIO, + PurpleMediaCodec *codec = purple_media_codec_new( + atoi(id), encoding_name, + video_codec ? PURPLE_MEDIA_VIDEO : + PURPLE_MEDIA_AUDIO, clock_rate ? atoi(clock_rate) : 0); - codecs = g_list_append(codecs, codec); + if (video_codec) + video_codecs = g_list_append( + video_codecs, codec); + else + codecs = g_list_append(codecs, codec); } } - purple_media_set_remote_codecs(session->media, "google-voice", - session->remote_jid, codecs); + if (codecs) + purple_media_set_remote_codecs(session->media, "google-voice", + session->remote_jid, codecs); + if (video_codecs) + purple_media_set_remote_codecs(session->media, "google-video", + session->remote_jid, video_codecs); purple_media_stream_info(session->media, PURPLE_MEDIA_INFO_ACCEPT, NULL, NULL, FALSE); @@ -1139,7 +1291,7 @@ } static void -jabber_google_stun_lookup_cb(GSList *hosts, gpointer data, +jabber_google_stun_lookup_cb(GSList *hosts, gpointer data, const char *error_message) { JabberStream *js = (JabberStream *) data; @@ -1152,16 +1304,16 @@ } if (hosts && g_slist_next(hosts)) { - struct sockaddr *addr = g_slist_next(hosts)->data; + struct sockaddr *addr = g_slist_next(hosts)->data; char dst[INET6_ADDRSTRLEN]; int port; if (addr->sa_family == AF_INET6) { - inet_ntop(addr->sa_family, &((struct sockaddr_in6 *) addr)->sin6_addr, + inet_ntop(addr->sa_family, &((struct sockaddr_in6 *) addr)->sin6_addr, dst, sizeof(dst)); port = ntohs(((struct sockaddr_in6 *) addr)->sin6_port); } else { - inet_ntop(addr->sa_family, &((struct sockaddr_in *) addr)->sin_addr, + inet_ntop(addr->sa_family, &((struct sockaddr_in *) addr)->sin_addr, dst, sizeof(dst)); port = ntohs(((struct sockaddr_in *) addr)->sin_port); } @@ -1226,12 +1378,12 @@ if (host && udp) { int port = atoi(udp); - /* if there, would already be an ongoing query, + /* if there, would already be an ongoing query, cancel it */ if (js->stun_query) purple_dnsquery_destroy(js->stun_query); - js->stun_query = purple_dnsquery_a(host, port, + js->stun_query = purple_dnsquery_a(host, port, jabber_google_stun_lookup_cb, js); } } @@ -1265,7 +1417,7 @@ void jabber_google_send_jingle_info(JabberStream *js) { - JabberIq *jingle_info = + JabberIq *jingle_info = jabber_iq_new_query(js, JABBER_IQ_GET, GOOGLE_JINGLE_INFO_NAMESPACE); jabber_iq_set_callback(jingle_info, jabber_google_jingle_info_cb,
--- a/libpurple/protocols/jabber/google.h Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/google.h Tue Jun 09 23:30:18 2009 +0000 @@ -28,6 +28,7 @@ #include "media.h" #define GOOGLE_VOICE_CAP "http://www.google.com/xmpp/protocol/voice/v1" +#define GOOGLE_VIDEO_CAP "http://www.google.com/xmpp/protocol/video/v1" #define GOOGLE_JINGLE_INFO_NAMESPACE "google:jingleinfo" void jabber_gmail_init(JabberStream *js);
--- a/libpurple/protocols/jabber/iq.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/iq.c Tue Jun 09 23:30:18 2009 +0000 @@ -495,6 +495,8 @@ jabber_iq_register_handler("session", "http://www.google.com/session", jabber_google_session_parse); #endif + jabber_iq_register_handler("block", "urn:xmpp:blocking", jabber_blocklist_parse_push); + jabber_iq_register_handler("unblock", "urn:xmpp:blocking", jabber_blocklist_parse_push); jabber_iq_register_handler("time", "urn:xmpp:time", jabber_iq_time_parse); }
--- a/libpurple/protocols/jabber/jabber.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/jabber.c Tue Jun 09 23:30:18 2009 +0000 @@ -23,6 +23,7 @@ #include "account.h" #include "accountopt.h" #include "blist.h" +#include "core.h" #include "cmds.h" #include "connection.h" #include "conversation.h" @@ -67,7 +68,7 @@ #define JABBER_CONNECT_STEPS (js->gsc ? 9 : 5) -static PurplePlugin *my_protocol = NULL; +PurplePlugin *jabber_plugin = NULL; GList *jabber_features = NULL; GList *jabber_identities = NULL; GSList *jabber_cmds = NULL; @@ -84,10 +85,6 @@ "xmlns:stream='http://etherx.jabber.org/streams' " "version='1.0'>", js->user->domain); - if (js->reinit) - /* Close down the current stream to keep the XML parser happy */ - jabber_parser_close_stream(js); - /* setup the parser fresh for each stream */ jabber_parser_setup(js); jabber_send_raw(js, open_stream, -1); @@ -252,7 +249,7 @@ { const char *xmlns; - purple_signal_emit(my_protocol, "jabber-receiving-xmlnode", js->gc, packet); + purple_signal_emit(jabber_plugin, "jabber-receiving-xmlnode", js->gc, packet); /* if the signal leaves us with a null packet, we're done */ if(NULL == *packet) @@ -406,7 +403,7 @@ /* If we've got a security layer, we need to encode the data, * splitting it on the maximum buffer length negotiated */ - purple_signal_emit(my_protocol, "jabber-sending-text", js->gc, &data); + purple_signal_emit(jabber_plugin, "jabber-sending-text", js->gc, &data); if (data == NULL) return; @@ -453,28 +450,31 @@ return len; } -void jabber_send(JabberStream *js, xmlnode *packet) +void jabber_send_signal_cb(PurpleConnection *pc, xmlnode **packet, + gpointer unused) { char *txt; int len; - purple_signal_emit(my_protocol, "jabber-sending-xmlnode", js->gc, &packet); - - /* if we get NULL back, we're done processing */ - if(NULL == packet) + if (NULL == packet) return; - txt = xmlnode_to_str(packet, &len); - jabber_send_raw(js, txt, len); + txt = xmlnode_to_str(*packet, &len); + jabber_send_raw(purple_connection_get_protocol_data(pc), txt, len); g_free(txt); } +void jabber_send(JabberStream *js, xmlnode *packet) +{ + purple_signal_emit(jabber_plugin, "jabber-sending-xmlnode", js->gc, &packet); +} + static gboolean jabber_keepalive_timeout(PurpleConnection *gc) { JabberStream *js = gc->proto_data; purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Ping timeout")); - js->keepalive_timeout = -1; + js->keepalive_timeout = 0; return FALSE; } @@ -482,7 +482,7 @@ { JabberStream *js = gc->proto_data; - if (js->keepalive_timeout == -1) { + if (js->keepalive_timeout == 0) { jabber_keepalive_ping(js); js->keepalive_timeout = purple_timeout_add_seconds(120, (GSourceFunc)(jabber_keepalive_timeout), gc); @@ -595,7 +595,7 @@ jabber_stream_set_state(js, JABBER_STREAM_INITIALIZING_ENCRYPTION); } -static void +static void txt_resolved_cb(GSList *responses, gpointer data) { JabberStream *js = data; @@ -608,7 +608,7 @@ purple_connection_error_reason (js->gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp); g_free(tmp); - return; + return; } while (responses) { @@ -687,9 +687,6 @@ static void tls_init(JabberStream *js) { - /* Close down the current stream to keep the XML parser happy */ - jabber_parser_close_stream(js); - purple_input_remove(js->gc->inpa); js->gc->inpa = 0; js->gsc = purple_ssl_connect_with_host_fd(js->gc->account, js->fd, @@ -773,8 +770,6 @@ js->fd = -1; js->iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); - js->disco_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal, - g_free, g_free); js->buddies = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)jabber_buddy_free); js->chats = g_hash_table_new_full(g_str_hash, g_str_equal, @@ -783,7 +778,7 @@ js->next_id = g_random_int(); js->write_buffer = purple_circ_buffer_new(512); js->old_length = 0; - js->keepalive_timeout = -1; + js->keepalive_timeout = 0; /* Set the default protocol version to 1.0. Overridden in parser.c. */ js->protocol_version = JABBER_PROTO_1_0; js->sessions = NULL; @@ -1096,6 +1091,24 @@ jabber_iq_send(iq); } +static const struct { + const char *name; + const char *label; +} registration_fields[] = { + { "email", N_("Email") }, + { "nick", N_("Nickname") }, + { "first", N_("First name") }, + { "last", N_("Last name") }, + { "address", N_("Address") }, + { "city", N_("City") }, + { "state", N_("State") }, + { "zip", N_("Postal code") }, + { "phone", N_("Phone") }, + { "url", N_("URL") }, + { "date", N_("Date") }, + { NULL, NULL } +}; + void jabber_register_parse(JabberStream *js, const char *from, JabberIqType type, const char *id, xmlnode *query) { @@ -1103,18 +1116,15 @@ PurpleRequestFields *fields; PurpleRequestFieldGroup *group; PurpleRequestField *field; - xmlnode *x, *y; + xmlnode *x, *y, *node; char *instructions; JabberRegisterCBData *cbdata; gboolean registered = FALSE; + int i; if (type != JABBER_IQ_RESULT) return; - if (!from) - from = js->serverFQDN; - g_return_if_fail(from != NULL); - if(js->registration) { /* get rid of the login thingy */ purple_connection_set_state(js->gc, PURPLE_CONNECTED); @@ -1163,74 +1173,53 @@ group = purple_request_field_group_new(NULL); purple_request_fields_add_group(fields, group); - if(js->registration) - field = purple_request_field_string_new("username", _("Username"), js->user->node, FALSE); - else - field = purple_request_field_string_new("username", _("Username"), NULL, FALSE); - - purple_request_field_group_add_field(group, field); - - if(js->registration) - field = purple_request_field_string_new("password", _("Password"), - purple_connection_get_password(js->gc), FALSE); - else - field = purple_request_field_string_new("password", _("Password"), NULL, FALSE); - - purple_request_field_string_set_masked(field, TRUE); - purple_request_field_group_add_field(group, field); - - if(xmlnode_get_child(query, "name")) { + if((node = xmlnode_get_child(query, "username"))) { + char *data = xmlnode_get_data(node); + if(js->registration) + field = purple_request_field_string_new("username", _("Username"), data ? data : js->user->node, FALSE); + else + field = purple_request_field_string_new("username", _("Username"), data, FALSE); + + purple_request_field_group_add_field(group, field); + g_free(data); + } + if((node = xmlnode_get_child(query, "password"))) { + if(js->registration) + field = purple_request_field_string_new("password", _("Password"), + purple_connection_get_password(js->gc), FALSE); + else { + char *data = xmlnode_get_data(node); + field = purple_request_field_string_new("password", _("Password"), data, FALSE); + g_free(data); + } + + purple_request_field_string_set_masked(field, TRUE); + purple_request_field_group_add_field(group, field); + } + + if((node = xmlnode_get_child(query, "name"))) { if(js->registration) field = purple_request_field_string_new("name", _("Name"), purple_account_get_alias(js->gc->account), FALSE); - else - field = purple_request_field_string_new("name", _("Name"), NULL, FALSE); - purple_request_field_group_add_field(group, field); - } - if(xmlnode_get_child(query, "email")) { - field = purple_request_field_string_new("email", _("Email"), NULL, FALSE); - purple_request_field_group_add_field(group, field); - } - if(xmlnode_get_child(query, "nick")) { - field = purple_request_field_string_new("nick", _("Nickname"), NULL, FALSE); - purple_request_field_group_add_field(group, field); - } - if(xmlnode_get_child(query, "first")) { - field = purple_request_field_string_new("first", _("First name"), NULL, FALSE); - purple_request_field_group_add_field(group, field); - } - if(xmlnode_get_child(query, "last")) { - field = purple_request_field_string_new("last", _("Last name"), NULL, FALSE); - purple_request_field_group_add_field(group, field); - } - if(xmlnode_get_child(query, "address")) { - field = purple_request_field_string_new("address", _("Address"), NULL, FALSE); + else { + char *data = xmlnode_get_data(node); + field = purple_request_field_string_new("name", _("Name"), data, FALSE); + g_free(data); + } purple_request_field_group_add_field(group, field); } - if(xmlnode_get_child(query, "city")) { - field = purple_request_field_string_new("city", _("City"), NULL, FALSE); - purple_request_field_group_add_field(group, field); - } - if(xmlnode_get_child(query, "state")) { - field = purple_request_field_string_new("state", _("State"), NULL, FALSE); - purple_request_field_group_add_field(group, field); - } - if(xmlnode_get_child(query, "zip")) { - field = purple_request_field_string_new("zip", _("Postal code"), NULL, FALSE); - purple_request_field_group_add_field(group, field); + + for (i = 0; registration_fields[i].name != NULL; ++i) { + if ((node = xmlnode_get_child(query, registration_fields[i].name))) { + char *data = xmlnode_get_data(node); + field = purple_request_field_string_new(registration_fields[i].name, + _(registration_fields[i].label), + data, FALSE); + purple_request_field_group_add_field(group, field); + g_free(data); + } } - if(xmlnode_get_child(query, "phone")) { - field = purple_request_field_string_new("phone", _("Phone"), NULL, FALSE); - purple_request_field_group_add_field(group, field); - } - if(xmlnode_get_child(query, "url")) { - field = purple_request_field_string_new("url", _("URL"), NULL, FALSE); - purple_request_field_group_add_field(group, field); - } - if(xmlnode_get_child(query, "date")) { - field = purple_request_field_string_new("date", _("Date"), NULL, FALSE); - purple_request_field_group_add_field(group, field); - } + if(registered) { field = purple_request_field_bool_new("unregister", _("Unregister"), FALSE); purple_request_field_group_add_field(group, field); @@ -1303,12 +1292,10 @@ js->registration = TRUE; js->iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); - js->disco_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal, - g_free, g_free); js->user = jabber_id_new(purple_account_get_username(account)); js->next_id = g_random_int(); js->old_length = 0; - js->keepalive_timeout = -1; + js->keepalive_timeout = 0; if(!js->user) { purple_connection_error_reason (gc, @@ -1493,8 +1480,6 @@ if(js->iq_callbacks) g_hash_table_destroy(js->iq_callbacks); - if(js->disco_callbacks) - g_hash_table_destroy(js->disco_callbacks); if(js->buddies) g_hash_table_destroy(js->buddies); if(js->chats) @@ -1563,7 +1548,7 @@ g_free(js->old_track); g_free(js->expected_rspauth); - if (js->keepalive_timeout != -1) + if (js->keepalive_timeout != 0) purple_timeout_remove(js->keepalive_timeout); g_free(js->srv_rec); @@ -1577,7 +1562,7 @@ purple_dnsquery_destroy(js->stun_query); js->stun_query = NULL; } - + g_free(js); gc->proto_data = NULL; @@ -1652,6 +1637,73 @@ jabber_presence_send(js, FALSE); } +void jabber_blocklist_parse_push(JabberStream *js, const char *from, + JabberIqType type, const char *id, + xmlnode *child) +{ + JabberIq *result; + xmlnode *item; + PurpleAccount *account; + gboolean is_block; + + if (!jabber_is_own_account(js, from)) { + xmlnode *error, *x; + result = jabber_iq_new(js, JABBER_IQ_ERROR); + xmlnode_set_attrib(result->node, "id", id); + if (from) + xmlnode_set_attrib(result->node, "to", from); + + error = xmlnode_new_child(result->node, "error"); + xmlnode_set_attrib(error, "type", "cancel"); + x = xmlnode_new_child(error, "not-allowed"); + xmlnode_set_namespace(x, "urn:ietf:params:xml:ns:xmpp-stanzas"); + + jabber_iq_send(result); + return; + } + + account = purple_connection_get_account(js->gc); + is_block = g_str_equal(child->name, "block"); + + item = xmlnode_get_child(child, "item"); + if (!is_block && item == NULL) { + /* Unblock everyone */ + purple_debug_info("jabber", "Received unblock push. Unblocking everyone.\n"); + + while (account->deny != NULL) { + purple_privacy_deny_remove(account, account->deny->data, TRUE); + } + } else if (item == NULL) { + /* An empty <block/> is bogus */ + xmlnode *error, *x; + result = jabber_iq_new(js, JABBER_IQ_ERROR); + xmlnode_set_attrib(result->node, "id", id); + + error = xmlnode_new_child(result->node, "error"); + xmlnode_set_attrib(error, "type", "modify"); + x = xmlnode_new_child(error, "bad-request"); + xmlnode_set_namespace(x, "urn:ietf:params:xml:ns:xmpp-stanzas"); + + jabber_iq_send(result); + return; + } else { + for ( ; item; item = xmlnode_get_next_twin(item)) { + const char *jid = xmlnode_get_attrib(item, "jid"); + if (jid == NULL || *jid == '\0') + continue; + + if (is_block) + purple_privacy_deny_add(account, jid, TRUE); + else + purple_privacy_deny_remove(account, jid, TRUE); + } + } + + result = jabber_iq_new(js, JABBER_IQ_RESULT); + xmlnode_set_attrib(result->node, "id", id); + jabber_iq_send(result); +} + static void jabber_blocklist_parse(JabberStream *js, const char *from, JabberIqType type, const char *id, xmlnode *packet, gpointer data) @@ -1663,13 +1715,23 @@ "blocklist", "urn:xmpp:blocking"); account = purple_connection_get_account(js->gc); - if (blocklist == NULL) + if (type == JABBER_IQ_ERROR || blocklist == NULL) return; + /* This is the only privacy method supported by XEP-0191 */ + if (account->perm_deny != PURPLE_PRIVACY_DENY_USERS) + account->perm_deny = PURPLE_PRIVACY_DENY_USERS; + + /* + * TODO: When account->deny is something more than a hash table, this can + * be re-written to find the set intersection and difference. + */ + while (account->deny) + purple_privacy_deny_remove(account, account->deny->data, TRUE); + item = xmlnode_get_child(blocklist, "item"); while (item != NULL) { const char *jid = xmlnode_get_attrib(item, "jid"); - purple_privacy_deny_add(account, jid, TRUE); item = xmlnode_get_next_twin(item); } @@ -1798,14 +1860,14 @@ /* both required according to XEP-0030 */ g_return_if_fail(category != NULL); g_return_if_fail(type != NULL); - + for(identity = jabber_identities; identity; identity = identity->next) { JabberIdentity *ident = (JabberIdentity*)identity->data; if (!strcmp(ident->category, category) && !strcmp(ident->type, type) && ((!ident->lang && !lang) || (ident->lang && lang && !strcmp(ident->lang, lang)))) { return; - } + } } ident = g_new0(JabberIdentity, 1); @@ -1858,6 +1920,28 @@ !(jb->subscription & JABBER_SUB_TO))) return "not-authorized"; } + + if (jb) { + JabberBuddyResource *jbr = jabber_buddy_find_resource(jb, NULL); + if (jbr) { + const gchar *client_type = + jabber_resource_get_identity_category_type(jbr, "client"); + + if (client_type) { + if (strcmp(client_type, "phone") == 0) { + return "mobile"; + } else if (strcmp(client_type, "web") == 0) { + return "external"; + } else if (strcmp(client_type, "handheld") == 0) { + return "hiptop"; + } else if (strcmp(client_type, "bot") == 0) { + return "bot"; + } + /* the default value "pc" falls through and has no emblem */ + } + } + } + return NULL; } @@ -1897,7 +1981,7 @@ } static void -jabber_tooltip_add_resource_text(JabberBuddyResource *jbr, +jabber_tooltip_add_resource_text(JabberBuddyResource *jbr, PurpleNotifyUserInfo *user_info, gboolean multiple_resources) { char *text = NULL; @@ -1930,13 +2014,13 @@ g_free(label); g_free(value); g_free(text); - + /* if the resource is idle, show that */ /* only show it if there is more than one resource available for the buddy, since the "general" idleness will be shown anyway, this way we can see see the idleness of lower-priority resources */ if (jbr->idle && multiple_resources) { - gchar *idle_str = + gchar *idle_str = purple_str_seconds_to_string(time(NULL) - jbr->idle); label = g_strdup_printf("%s%s", _("Idle"), (res ? res : "")); purple_notify_user_info_add_pair(user_info, label, idle_str); @@ -1969,13 +2053,13 @@ const char *sub; GList *l; const char *mood; - gboolean multiple_resources = + gboolean multiple_resources = jb->resources && g_list_next(jb->resources); JabberBuddyResource *top_jbr = jabber_buddy_find_resource(jb, NULL); /* resource-specific info for the top resource */ if (top_jbr) { - jabber_tooltip_add_resource_text(top_jbr, user_info, + jabber_tooltip_add_resource_text(top_jbr, user_info, multiple_resources); } @@ -1987,7 +2071,7 @@ multiple_resources); } } - + if (full) { PurpleStatus *status; @@ -2879,7 +2963,7 @@ return (caps & (PURPLE_MEDIA_CAPS_AUDIO | PURPLE_MEDIA_CAPS_AUDIO_SINGLE_DIRECTION)); } -static gboolean +gboolean jabber_video_enabled(JabberStream *js, const char *namespace) { PurpleMediaManager *manager = purple_media_manager_get(); @@ -2892,7 +2976,7 @@ PurpleAccount *account; gchar *who; PurpleMediaSessionType type; - + } JabberMediaRequest; static void @@ -2921,7 +3005,7 @@ #endif gboolean -jabber_initiate_media(PurpleAccount *account, const char *who, +jabber_initiate_media(PurpleAccount *account, const char *who, PurpleMediaSessionType type) { #ifdef USE_VV @@ -3119,8 +3203,12 @@ caps |= PURPLE_MEDIA_CAPS_MODIFY_SESSION | PURPLE_MEDIA_CAPS_CHANGE_DIRECTION; } - if (jabber_resource_has_capability(jbr, GOOGLE_VOICE_CAP)) + if (jabber_resource_has_capability(jbr, GOOGLE_VOICE_CAP)) { caps |= PURPLE_MEDIA_CAPS_AUDIO; + if (jabber_resource_has_capability(jbr, + GOOGLE_VIDEO_CAP)) + caps |= PURPLE_MEDIA_CAPS_AUDIO_VIDEO; + } return caps; } @@ -3305,7 +3393,7 @@ return FALSE; js = gc->proto_data; - if (!(resource = jabber_get_resource(jid)) || + if (!(resource = jabber_get_resource(jid)) || !(jb = jabber_buddy_find(js, jid, FALSE)) || !(jbr = jabber_buddy_find_resource(jb, resource))) { g_free(resource); @@ -3331,9 +3419,26 @@ void jabber_init_plugin(PurplePlugin *plugin) { - my_protocol = plugin; - - jabber_add_identity("client", "pc", NULL, PACKAGE); + GHashTable *ui_info = purple_core_get_ui_info(); + const gchar *ui_type; + const gchar *type = "pc"; /* default client type, if unknown or + unspecified */ + + jabber_plugin = plugin; + + ui_type = ui_info ? g_hash_table_lookup(ui_info, "client_type") : NULL; + if (ui_type) { + if (strcmp(ui_type, "pc") == 0 || + strcmp(ui_type, "console") == 0 || + strcmp(ui_type, "phone") == 0 || + strcmp(ui_type, "handheld") == 0 || + strcmp(ui_type, "web") == 0 || + strcmp(ui_type, "bot") == 0) { + type = ui_type; + } + } + + jabber_add_identity("client", type, NULL, PACKAGE); /* initialize jabber_features list */ jabber_add_feature("jabber:iq:last", 0); @@ -3385,6 +3490,21 @@ purple_marshal_VOID__POINTER, NULL, 1, purple_value_new(PURPLE_TYPE_STRING)); + + /* Modifying these? Look at libxmpp.c:load_plugin for the signal versions */ + purple_plugin_ipc_register(plugin, "register_namespace_watcher", + PURPLE_CALLBACK(jabber_iq_signal_register), + purple_marshal_VOID__POINTER_POINTER, + NULL, 2, + purple_value_new(PURPLE_TYPE_STRING), /* node */ + purple_value_new(PURPLE_TYPE_STRING)); /* namespace */ + + purple_plugin_ipc_register(plugin, "unregister_namespace_watcher", + PURPLE_CALLBACK(jabber_iq_signal_unregister), + purple_marshal_VOID__POINTER_POINTER, + NULL, 2, + purple_value_new(PURPLE_TYPE_STRING), /* node */ + purple_value_new(PURPLE_TYPE_STRING)); /* namespace */ } void
--- a/libpurple/protocols/jabber/jabber.h Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/jabber.h Tue Jun 09 23:30:18 2009 +0000 @@ -44,6 +44,8 @@ JABBER_CAP_ADHOC = 1 << 12, JABBER_CAP_BLOCKING = 1 << 13, + JABBER_CAP_ITEMS = 1 << 14, + JABBER_CAP_RETRIEVED = 1 << 31 } JabberCapabilities; @@ -53,12 +55,12 @@ #include <glib.h> #include "circbuffer.h" #include "connection.h" +#include "dnsquery.h" #include "dnssrv.h" #include "media.h" #include "mediamanager.h" #include "roomlist.h" #include "sslconn.h" -#include "dnsquery.h" #include "iq.h" #include "jutil.h" @@ -153,7 +155,6 @@ GList *user_directories; GHashTable *iq_callbacks; - GHashTable *disco_callbacks; int next_id; GList *bs_proxies; @@ -244,8 +245,8 @@ char *certificate_CN; /* A purple timeout tag for the keepalive */ - int keepalive_timeout; - + guint keepalive_timeout; + PurpleSrvResponse *srv_rec; guint srv_rec_idx; guint max_srv_rec_idx; @@ -301,6 +302,8 @@ void jabber_process_packet(JabberStream *js, xmlnode **packet); void jabber_send(JabberStream *js, xmlnode *data); void jabber_send_raw(JabberStream *js, const char *data, int len); +void jabber_send_signal_cb(PurpleConnection *pc, xmlnode **packet, + gpointer unused); void jabber_stream_set_state(JabberStream *js, JabberStreamState state); @@ -322,7 +325,7 @@ void jabber_add_feature(const gchar *namespace, JabberFeatureEnabled cb); /* cb may be NULL */ void jabber_remove_feature(const gchar *namespace); -/** Adds an identitiy to this jabber library instance. For list of valid values vistit the +/** Adds an identitiy to this jabber library instance. For list of valid values vistit the * webiste of the XMPP Registrar ( http://www.xmpp.org/registrar/disco-categories.html#client ). * @param category the category of the identity. * @param type the type of the identity. @@ -347,6 +350,9 @@ void jabber_login(PurpleAccount *account); void jabber_close(PurpleConnection *gc); void jabber_idle_set(PurpleConnection *gc, int idle); +void jabber_blocklist_parse_push(JabberStream *js, const char *from, + JabberIqType type, const char *id, + xmlnode *child); void jabber_request_block_list(JabberStream *js); void jabber_add_deny(PurpleConnection *gc, const char *who); void jabber_rem_deny(PurpleConnection *gc, const char *who); @@ -363,6 +369,7 @@ GList *jabber_actions(PurplePlugin *plugin, gpointer context); gboolean jabber_audio_enabled(JabberStream *js, const char *unused); +gboolean jabber_video_enabled(JabberStream *js, const char *unused); gboolean jabber_initiate_media(PurpleAccount *account, const char *who, PurpleMediaSessionType type); PurpleMediaCaps jabber_get_media_caps(PurpleAccount *account, const char *who);
--- a/libpurple/protocols/jabber/jutil.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/jutil.c Tue Jun 09 23:30:18 2009 +0000 @@ -223,6 +223,51 @@ return buf; } +gboolean +jabber_is_own_server(JabberStream *js, const char *str) +{ + JabberID *jid; + gboolean equal; + + if (str == NULL) + return FALSE; + + g_return_val_if_fail(*str != '\0', FALSE); + + jid = jabber_id_new(str); + if (!jid) + return FALSE; + + equal = (jid->node == NULL && + g_str_equal(jid->domain, js->user->domain) && + jid->resource == NULL); + jabber_id_free(jid); + return equal; +} + +gboolean +jabber_is_own_account(JabberStream *js, const char *str) +{ + JabberID *jid; + gboolean equal; + + if (str == NULL) + return TRUE; + + g_return_val_if_fail(*str != '\0', FALSE); + + jid = jabber_id_new(str); + if (!jid) + return FALSE; + + equal = (purple_strequal(jid->node, js->user->node) && + g_str_equal(jid->domain, js->user->domain) && + (jid->resource == NULL || + g_str_equal(jid->resource, js->user->resource))); + jabber_id_free(jid); + return equal; +} + PurpleConversation * jabber_find_unnormalized_conv(const char *name, PurpleAccount *account) {
--- a/libpurple/protocols/jabber/jutil.h Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/jutil.h Tue Jun 09 23:30:18 2009 +0000 @@ -36,6 +36,12 @@ const char *jabber_normalize(const PurpleAccount *account, const char *in); +/* Returns true if JID is the bare JID of our server. */ +gboolean jabber_is_own_server(JabberStream *js, const char *jid); + +/* Returns true if JID is the bare JID of our account. */ +gboolean jabber_is_own_account(JabberStream *js, const char *jid); + gboolean jabber_nodeprep_validate(const char *); gboolean jabber_nameprep_validate(const char *); gboolean jabber_resourceprep_validate(const char *);
--- a/libpurple/protocols/jabber/libxmpp.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/libxmpp.c Tue Jun 09 23:30:18 2009 +0000 @@ -34,6 +34,7 @@ #include "iq.h" #include "jabber.h" #include "chat.h" +#include "disco.h" #include "message.h" #include "roster.h" #include "si.h" @@ -46,8 +47,6 @@ #include "data.h" #include "ibb.h" -PurplePlugin *jabber_plugin = NULL; - static PurplePluginProtocolInfo prpl_info = { OPT_PROTO_CHAT_TOPIC | OPT_PROTO_UNIQUE_CHATNAME | OPT_PROTO_MAIL_CHECK | @@ -119,6 +118,7 @@ jabber_unregister_account, /* unregister_user */ jabber_send_attention, /* send_attention */ jabber_attention_types, /* attention_types */ + sizeof(PurplePluginProtocolInfo), /* struct_size */ NULL, /* get_account_text_table */ jabber_initiate_media, /* initiate_media */ @@ -127,8 +127,6 @@ static gboolean load_plugin(PurplePlugin *plugin) { - jabber_plugin = plugin; - purple_signal_register(plugin, "jabber-receiving-xmlnode", purple_marshal_VOID__POINTER_POINTER, NULL, 2, purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION), @@ -139,13 +137,21 @@ purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION), purple_value_new_outgoing(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE)); + /* + * Do not remove this or the plugin will fail. Completely. You have been + * warned! + */ + purple_signal_connect_priority(plugin, "jabber-sending-xmlnode", + plugin, PURPLE_CALLBACK(jabber_send_signal_cb), + NULL, PURPLE_SIGNAL_PRIORITY_HIGHEST); + purple_signal_register(plugin, "jabber-sending-text", purple_marshal_VOID__POINTER_POINTER, NULL, 2, purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION), purple_value_new_outgoing(PURPLE_TYPE_STRING)); purple_signal_register(plugin, "jabber-receiving-message", - purple_marshal_BOOLEAN__POINTER_POINTER_POINTER, + purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER_POINTER, purple_value_new(PURPLE_TYPE_BOOLEAN), 6, purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION), purple_value_new(PURPLE_TYPE_STRING), /* type */ @@ -172,14 +178,15 @@ purple_value_new(PURPLE_TYPE_STRING), /* from */ purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE)); /* child */ + /* Modifying these? Look at jabber_init_plugin for the ipc versions */ purple_signal_register(plugin, "jabber-register-namespace-watcher", - purple_marshal_VOID__POINTER_POINTER_POINTER, + purple_marshal_VOID__POINTER_POINTER, NULL, 2, purple_value_new(PURPLE_TYPE_STRING), /* node */ purple_value_new(PURPLE_TYPE_STRING)); /* namespace */ purple_signal_register(plugin, "jabber-unregister-namespace-watcher", - purple_marshal_VOID__POINTER_POINTER_POINTER, + purple_marshal_VOID__POINTER_POINTER, NULL, 2, purple_value_new(PURPLE_TYPE_STRING), /* node */ purple_value_new(PURPLE_TYPE_STRING)); /* namespace */ @@ -219,8 +226,6 @@ /* Stay on target...stay on target... Almost there... */ jabber_uninit_plugin(); - jabber_plugin = NULL; - return TRUE; }
--- a/libpurple/protocols/jabber/message.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/message.c Tue Jun 09 23:30:18 2009 +0000 @@ -639,7 +639,7 @@ purple_debug_info("jabber", "found %d smileys\n", g_list_length(smiley_refs)); - if (smiley_refs) { + if (smiley_refs) { if (jm->type == JABBER_MESSAGE_GROUPCHAT) { JabberID *jid = jabber_id_new(jm->from); JabberChat *chat = NULL; @@ -657,7 +657,7 @@ who, account); if (!conv) { /* we need to create the conversation here */ - conv = + conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, who); } @@ -949,7 +949,7 @@ /* do not attempt to send custom smileys in a MUC with more than 10 people, to avoid getting too many BoB requests */ return jabber_chat_get_num_participants(chat) <= 10 && - jabber_chat_all_participants_have_capability(chat, + jabber_chat_all_participants_have_capability(chat, XEP_0231_NAMESPACE); } else { return FALSE; @@ -1190,7 +1190,9 @@ jm->typing_style |= JM_TS_JEP_0022; } - purple_markup_html_to_xhtml(msg, &xhtml, &jm->body); + tmp = purple_utf8_strip_unprintables(msg); + purple_markup_html_to_xhtml(tmp, &xhtml, &jm->body); + g_free(tmp); tmp = jabber_message_smileyfy_xhtml(jm, xhtml); if (tmp) { g_free(xhtml); @@ -1231,7 +1233,9 @@ jm->to = g_strdup_printf("%s@%s", chat->room, chat->server); jm->id = jabber_get_next_id(jm->js); + tmp = purple_utf8_strip_unprintables(msg); purple_markup_html_to_xhtml(msg, &xhtml, &jm->body); + g_free(tmp); tmp = jabber_message_smileyfy_xhtml(jm, xhtml); if (tmp) { g_free(xhtml);
--- a/libpurple/protocols/jabber/parser.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/parser.c Tue Jun 09 23:30:18 2009 +0000 @@ -207,12 +207,6 @@ jabber_parser_free(js); } -void -jabber_parser_close_stream(JabberStream *js) -{ - xmlParseChunk(js->context, "</stream:stream>", 16 /* length */, 0); -} - void jabber_parser_free(JabberStream *js) { if (js->context) { xmlParseChunk(js->context, NULL,0,1);
--- a/libpurple/protocols/jabber/parser.h Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/parser.h Tue Jun 09 23:30:18 2009 +0000 @@ -25,7 +25,6 @@ #include "jabber.h" void jabber_parser_setup(JabberStream *js); -void jabber_parser_close_stream(JabberStream *js); void jabber_parser_free(JabberStream *js); void jabber_parser_process(JabberStream *js, const char *buf, int len);
--- a/libpurple/protocols/jabber/ping.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/ping.c Tue Jun 09 23:30:18 2009 +0000 @@ -32,10 +32,12 @@ JabberIqType type, const char *id, xmlnode *packet, gpointer data) { - if (js->keepalive_timeout >= 0) { + if (js->keepalive_timeout != 0) { + purple_debug_misc("jabber", "Keepalive PONG\n"); purple_timeout_remove(js->keepalive_timeout); - js->keepalive_timeout = -1; - } + js->keepalive_timeout = 0; + } else + purple_debug_warning("jabber", "Keepalive PONG with no outstanding timeout!\n"); } void
--- a/libpurple/protocols/jabber/presence.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/presence.c Tue Jun 09 23:30:18 2009 +0000 @@ -100,7 +100,7 @@ if (!purple_account_is_connected(account)) return; - + if (!purple_status_is_active(status)) return; @@ -245,6 +245,9 @@ { xmlnode *show, *status, *presence, *pri, *c; const char *show_string = NULL; +#ifdef USE_VV + gboolean audio_enabled, video_enabled; +#endif presence = xmlnode_new("presence"); @@ -277,7 +280,7 @@ xmlnode *query = xmlnode_new_child(presence, "query"); gchar seconds[10]; g_snprintf(seconds, 10, "%d", (int) (time(NULL) - js->idle)); - + xmlnode_set_namespace(query, "jabber:iq:last"); xmlnode_set_attrib(query, "seconds", seconds); } @@ -300,9 +303,18 @@ * just assume that if we specify a 'voice-v1' ext (ignoring that * these are to be assigned no semantic value), we support receiving voice * calls. + * + * Ditto for 'video-v1'. */ - if (jabber_audio_enabled(js, NULL /* unused */)) + audio_enabled = jabber_audio_enabled(js, NULL /* unused */); + video_enabled = jabber_video_enabled(js, NULL /* unused */); + + if (audio_enabled && video_enabled) + xmlnode_set_attrib(c, "ext", "voice-v1 video-v1"); + else if (audio_enabled) xmlnode_set_attrib(c, "ext", "voice-v1"); + else if (video_enabled) + xmlnode_set_attrib(c, "ext", "video-v1"); #endif return presence; @@ -626,7 +638,7 @@ avatar_hash = xmlnode_get_data(photo); } } - } else if (!strcmp(y->name, "query") && + } else if (!strcmp(y->name, "query") && !strcmp(xmlnode_get_namespace(y), "jabber:iq:last")) { /* resource has specified idle */ const gchar *seconds = xmlnode_get_attrib(y, "seconds"); @@ -644,7 +656,7 @@ NULL); purple_debug_info("jabber", "got delay %s yielding %ld s offset\n", stamp, offset); - idle += offset; + idle += offset; } if(jid->node && (chat = jabber_chat_find(js, jid->node, jid->domain))) {
--- a/libpurple/protocols/jabber/roster.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/roster.c Tue Jun 09 23:30:18 2009 +0000 @@ -282,9 +282,23 @@ return; if(grps) { + GString *out = g_string_new(NULL); groups = grps; + + for (l = groups; l; l = l->next) { + out = g_string_append(out, (const char *)l->data); + if (l->next) + out = g_string_append(out, ", "); + } + + purple_debug_info("jabber", "jabber_roster_update(%s): [Source: grps]: groups: %s\n", + name, out->str); + g_string_free(out, TRUE); + } else { GSList *buddies = purple_find_buddies(js->gc->account, name); + GString *out = g_string_new(NULL); + if(!buddies) return; while(buddies) { @@ -293,6 +307,15 @@ groups = g_slist_append(groups, (char *)purple_group_get_name(g)); buddies = g_slist_remove(buddies, b); } + for (l = groups; l; l = l->next) { + out = g_string_append(out, (const char *)l->data); + if (l->next) + out = g_string_append(out, ", "); + } + + purple_debug_info("jabber", "jabber_roster_update(%s): [Source: local blist]: groups: %s\n", + name, out->str); + g_string_free(out, TRUE); } iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:roster"); @@ -340,6 +363,9 @@ jb = jabber_buddy_find(js, name, FALSE); + purple_debug_info("jabber", "jabber_roster_add_buddy(): Adding %s\n", + name); + jabber_roster_update(js, who, NULL); my_bare_jid = g_strdup_printf("%s@%s", js->user->node, js->user->domain); @@ -369,6 +395,9 @@ if(b != NULL) { purple_blist_alias_buddy(b, alias); + purple_debug_info("jabber", "jabber_roster_alias_change(): Aliased %s to %s\n", + name, alias ? alias : "(null)"); + jabber_roster_update(gc->proto_data, name, NULL); } } @@ -395,6 +424,10 @@ groups = g_slist_append(groups, (char*)gname); buddies = g_slist_remove(buddies, b); } + + purple_debug_info("jabber", "jabber_roster_group_change(): Moving %s from %s to %s\n", + name, old_group, new_group); + jabber_roster_update(gc->proto_data, name, groups); g_slist_free(groups); } @@ -428,6 +461,9 @@ buddies = g_slist_remove(buddies, tmpbuddy); } + purple_debug_info("jabber", "jabber_roster_remove_buddy(): Removing %s from %s\n", + purple_buddy_get_name(buddy), purple_group_get_name(group)); + jabber_roster_update(gc->proto_data, name, groups); g_slist_free(groups); } else { @@ -439,6 +475,9 @@ xmlnode_set_attrib(item, "jid", name); xmlnode_set_attrib(item, "subscription", "remove"); + purple_debug_info("jabber", "jabber_roster_remove_buddy(): Removing %s\n", + purple_buddy_get_name(buddy)); + jabber_iq_send(iq); } }
--- a/libpurple/protocols/jabber/si.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/jabber/si.c Tue Jun 09 23:30:18 2009 +0000 @@ -1697,8 +1697,8 @@ void jabber_si_init(void) { - jabber_iq_register_handler("si", "http://jabber.org/protocol/si", jabber_si_parse); - + jabber_iq_register_handler("si", "http://jabber.org/protocol/si", jabber_si_parse); + jabber_ibb_register_open_handler(jabber_si_xfer_ibb_open_cb); }
--- a/libpurple/protocols/msn/msn.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/msn/msn.c Tue Jun 09 23:30:18 2009 +0000 @@ -1281,7 +1281,7 @@ imdata->gc = gc; imdata->who = who; imdata->msg = body_str; - imdata->flags = flags; + imdata->flags = flags & ~PURPLE_MESSAGE_SEND; imdata->when = time(NULL); purple_timeout_add(0, msn_send_me_im, imdata); } @@ -1380,56 +1380,36 @@ msn_change_status(session); } -#if 0 +/* + * Actually adds a buddy once we have the response from FQY + */ static void -fake_userlist_add_buddy(MsnUserList *userlist, - const char *who, int list_id, - const char *group_name) +add_pending_buddy(MsnSession *session, + const char *who, + MsnNetwork network, + MsnUser *user) { - MsnUser *user; - static int group_id_c = 1; - int group_id; - - group_id = -1; - - if (group_name != NULL) - { - MsnGroup *group; - group = msn_group_new(userlist, group_id_c, group_name); - group_id = group_id_c++; - } - - user = msn_userlist_find_user(userlist, who); - - if (user == NULL) - { - user = msn_user_new(userlist, who, NULL); + MsnUserList *userlist = session->userlist; + MsnUser *user2; + char *group; + + g_return_if_fail(user != NULL); + + group = msn_user_remove_pending_group(user); + + user2 = msn_userlist_find_user(userlist, who); + if (user2 != NULL) { + /* User already in userlist, so just update it. */ + msn_user_destroy(user); + user = user2; + } else { msn_userlist_add_user(userlist, user); } - else - if (user->list_op & (1 << list_id)) - { - if (list_id == MSN_LIST_FL) - { - if (group_id >= 0) - if (g_list_find(user->group_ids, - GINT_TO_POINTER(group_id))) - return; - } - else - return; - } - - if (group_id >= 0) - { - /* This is wrong... user->group_ids contains g_strdup()'d data now */ - user->group_ids = g_list_append(user->group_ids, - GINT_TO_POINTER(group_id)); - } - - user->list_op |= (1 << list_id); + + msn_user_set_network(user, network); + msn_userlist_add_buddy(userlist, who, group); + g_free(group); } -#endif static void msn_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) @@ -1447,23 +1427,11 @@ purple_debug_info("msn", "Add user:%s to group:%s\n", who, gname ? gname : "(null)"); if (!session->logged_in) { -#if 0 - fake_userlist_add_buddy(session->sync_userlist, who, MSN_LIST_FL, - group ? group->name : NULL); -#else purple_debug_error("msn", "msn_add_buddy called before connected\n"); -#endif return; } -#if 0 - if (group != NULL && group->name != NULL) - purple_debug_info("msn", "msn_add_buddy: %s, %s\n", who, group->name); - else - purple_debug_info("msn", "msn_add_buddy: %s\n", who); -#endif - /* XXX - Would group ever be NULL here? I don't think so... * shx: Yes it should; MSN handles non-grouped buddies, and this is only * internal. */ @@ -1476,13 +1444,15 @@ char **tokens; char *fqy; /* We need to check the network for this buddy first */ - msn_userlist_save_pending_buddy(userlist, who, gname); + user = msn_user_new(userlist, who, NULL); + msn_user_set_pending_group(user, gname); + msn_user_set_network(user, MSN_NETWORK_UNKNOWN); tokens = g_strsplit(who, "@", 2); fqy = g_strdup_printf("<ml><d n=\"%s\"><c n=\"%s\"/></d></ml>", tokens[1], tokens[0]); msn_notification_send_fqy(session, fqy, strlen(fqy), - (MsnFqyCb)msn_userlist_add_pending_buddy); + (MsnFqyCb)add_pending_buddy, user); g_free(fqy); g_strfreev(tokens); }
--- a/libpurple/protocols/msn/notification.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/msn/notification.c Tue Jun 09 23:30:18 2009 +0000 @@ -479,6 +479,12 @@ /************************************************************************** * Buddy Lists **************************************************************************/ + +typedef struct MsnFqyCbData { + MsnFqyCb cb; + gpointer data; +} MsnFqyCbData; + /* add contact to xmlnode */ static void msn_add_contact_xml(MsnSession *session, xmlnode *mlNode,const char *passport, MsnListOp list_op, MsnNetwork networkId) @@ -551,24 +557,40 @@ msn_cmdproc_send_trans(cmdproc, trans); } +static void +msn_notification_post_rml(MsnCmdProc *cmdproc, const char *payload, int payload_len) +{ + MsnTransaction *trans; + purple_debug_info("msn", "Sending RML with payload: %s\n", payload); + trans = msn_transaction_new(cmdproc, "RML", "%i", payload_len); + msn_transaction_set_payload(trans, payload, payload_len); + msn_cmdproc_send_trans(cmdproc, trans); +} + void msn_notification_send_fqy(MsnSession *session, const char *payload, int payload_len, - MsnFqyCb cb) + MsnFqyCb cb, + gpointer cb_data) { MsnTransaction *trans; MsnCmdProc *cmdproc; + MsnFqyCbData *data; cmdproc = session->notification->cmdproc; + data = g_new(MsnFqyCbData, 1); + data->cb = cb; + data->data = cb_data; + trans = msn_transaction_new(cmdproc, "FQY", "%d", payload_len); msn_transaction_set_payload(trans, payload, payload_len); - msn_transaction_set_data(trans, cb); + msn_transaction_set_data(trans, data); msn_cmdproc_send_trans(cmdproc, trans); } static void -update_contact_network(MsnSession *session, const char *passport, MsnNetwork network) +update_contact_network(MsnSession *session, const char *passport, MsnNetwork network, gpointer unused) { MsnUser *user; @@ -684,7 +706,7 @@ payload = xmlnode_to_str(fqy_node, &payload_len); msn_notification_send_fqy(session, payload, payload_len, - update_contact_network); + update_contact_network, NULL); g_free(payload); xmlnode_free(fqy_node); @@ -709,7 +731,7 @@ payload = xmlnode_to_str(fqy_node, &payload_len); msn_notification_send_fqy(session, payload, payload_len, - update_contact_network); + update_contact_network, NULL); g_free(payload); } @@ -919,15 +941,20 @@ passport = g_strdup_printf("%s@%s", local, domain); - if (!g_ascii_isdigit(cmd->command[0]) && type != NULL) + if (g_ascii_isdigit(cmd->command[0])) + network = MSN_NETWORK_UNKNOWN; + else if (type != NULL) network = (MsnNetwork)strtoul(type, NULL, 10); - else - network = MSN_NETWORK_UNKNOWN; purple_debug_info("msn", "FQY response says %s is from network %d\n", passport, network); - if (cmd->trans->data) - ((MsnFqyCb)cmd->trans->data)(session, passport, network); + if (cmd->trans->data) { + MsnFqyCbData *fqy_data = cmd->trans->data; + fqy_data->cb(session, passport, network, fqy_data->data); + /* TODO: This leaks, but the server responds to FQY multiple times, so we + can't free it yet. We need to figure out somewhere else to do so. + g_free(fqy_data); */ + } g_free(passport); } @@ -952,7 +979,7 @@ FQY error, it's probably going to disconnect us. So it isn't necessary to tell the handler about it. */ else if (trans->data) - ((MsnFqyCb)trans->data)(session, NULL, MSN_NETWORK_UNKNOWN); */ + ((MsnFqyCb)trans->data)(session, NULL, MSN_NETWORK_UNKNOWN, NULL); #endif } @@ -981,85 +1008,6 @@ } static void -add_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) -{ - MsnSession *session; - PurpleAccount *account; - PurpleConnection *gc; - const char *list, *passport; - char *reason = NULL; - char *msg = NULL; - char **params; - - session = cmdproc->session; - account = session->account; - gc = purple_account_get_connection(account); - params = g_strsplit(trans->params, " ", 0); - - list = params[0]; - passport = params[1]; - - if (!strcmp(list, "FL")) - msg = g_strdup_printf(_("Unable to add user on %s (%s)"), - purple_account_get_username(account), - purple_account_get_protocol_name(account)); - else if (!strcmp(list, "BL")) - msg = g_strdup_printf(_("Unable to block user on %s (%s)"), - purple_account_get_username(account), - purple_account_get_protocol_name(account)); - else if (!strcmp(list, "AL")) - msg = g_strdup_printf(_("Unable to permit user on %s (%s)"), - purple_account_get_username(account), - purple_account_get_protocol_name(account)); - - if (!strcmp(list, "FL")) - { - if (error == 210) - { - reason = g_strdup_printf(_("%s could not be added because " - "your buddy list is full."), passport); - } - } - - if (reason == NULL) - { - if (error == 208) - { - reason = g_strdup_printf(_("%s is not a valid passport account."), - passport); - } - else if (error == 500) - { - reason = g_strdup(_("Service Temporarily Unavailable.")); - } - else - { - reason = g_strdup(_("Unknown error.")); - } - } - - if (msg != NULL) - { - purple_notify_error(gc, NULL, msg, reason); - g_free(msg); - } - - if (!strcmp(list, "FL")) - { - PurpleBuddy *buddy; - - buddy = purple_find_buddy(account, passport); - - if (buddy != NULL) - purple_blist_remove_buddy(buddy); - } - - g_free(reason); - - g_strfreev(params); -} - -static void qng_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { /* TODO: Call PNG after the timeout specified. */ @@ -1946,10 +1894,54 @@ g_hash_table_destroy(table); } +/************************************************************************** + * Dispatch server list management + **************************************************************************/ +typedef struct MsnAddRemoveListData { + MsnCmdProc *cmdproc; + MsnUser *user; + MsnListOp list_op; + gboolean add; +} MsnAddRemoveListData; + +static void +modify_unknown_buddy_on_list(MsnSession *session, const char *passport, + MsnNetwork network, gpointer data) +{ + MsnAddRemoveListData *addrem = data; + MsnCmdProc *cmdproc; + xmlnode *node; + char *payload; + int payload_len; + + cmdproc = addrem->cmdproc; + + /* Update user first */ + msn_user_set_network(addrem->user, network); + + node = xmlnode_new("ml"); + node->child = NULL; + + msn_add_contact_xml(session, node, passport, + addrem->list_op, network); + + payload = xmlnode_to_str(node, &payload_len); + xmlnode_free(node); + + if (addrem->add) + msn_notification_post_adl(cmdproc, payload, payload_len); + else + msn_notification_post_rml(cmdproc, payload, payload_len); + + g_free(payload); + g_free(addrem); +} + void msn_notification_add_buddy_to_list(MsnNotification *notification, MsnListId list_id, MsnUser *user) { + MsnAddRemoveListData *addrem; MsnCmdProc *cmdproc; MsnListOp list_op = 1 << list_id; xmlnode *adl_node; @@ -1964,11 +1956,23 @@ msn_add_contact_xml(notification->session, adl_node, user->passport, list_op, user->networkid); - payload = xmlnode_to_str(adl_node,&payload_len); + payload = xmlnode_to_str(adl_node, &payload_len); xmlnode_free(adl_node); - msn_notification_post_adl(notification->servconn->cmdproc, - payload,payload_len); + if (user->networkid != MSN_NETWORK_UNKNOWN) { + msn_notification_post_adl(cmdproc, payload, payload_len); + + } else { + addrem = g_new(MsnAddRemoveListData, 1); + addrem->cmdproc = cmdproc; + addrem->user = user; + addrem->list_op = list_op; + addrem->add = TRUE; + + msn_notification_send_fqy(notification->session, payload, payload_len, + modify_unknown_buddy_on_list, addrem); + } + g_free(payload); } @@ -1976,8 +1980,8 @@ msn_notification_rem_buddy_from_list(MsnNotification *notification, MsnListId list_id, MsnUser *user) { + MsnAddRemoveListData *addrem; MsnCmdProc *cmdproc; - MsnTransaction *trans; MsnListOp list_op = 1 << list_id; xmlnode *rml_node; char *payload; @@ -1994,10 +1998,20 @@ payload = xmlnode_to_str(rml_node, &payload_len); xmlnode_free(rml_node); - purple_debug_info("msn", "Send RML with payload:\n%s\n", payload); - trans = msn_transaction_new(cmdproc, "RML","%" G_GSIZE_FORMAT, strlen(payload)); - msn_transaction_set_payload(trans, payload, strlen(payload)); - msn_cmdproc_send_trans(cmdproc, trans); + if (user->networkid != MSN_NETWORK_UNKNOWN) { + msn_notification_post_rml(cmdproc, payload, payload_len); + + } else { + addrem = g_new(MsnAddRemoveListData, 1); + addrem->cmdproc = cmdproc; + addrem->user = user; + addrem->list_op = list_op; + addrem->add = FALSE; + + msn_notification_send_fqy(notification->session, payload, payload_len, + modify_unknown_buddy_on_list, addrem); + } + g_free(payload); } @@ -2052,7 +2066,6 @@ msn_table_add_cmd(cbs_table, NULL, "241", adl_241_error_cmd); - msn_table_add_error(cbs_table, "ADD", add_error); msn_table_add_error(cbs_table, "ADL", adl_error); msn_table_add_error(cbs_table, "FQY", fqy_error); msn_table_add_error(cbs_table, "USR", usr_error);
--- a/libpurple/protocols/msn/notification.h Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/msn/notification.h Tue Jun 09 23:30:18 2009 +0000 @@ -58,7 +58,7 @@ gboolean in_use; }; -typedef void (*MsnFqyCb)(MsnSession *session, const char *passport, MsnNetwork network); +typedef void (*MsnFqyCb)(MsnSession *session, const char *passport, MsnNetwork network, gpointer data); #include "state.h" void uum_send_msg(MsnSession *session,MsnMessage *msg); @@ -73,7 +73,7 @@ void msn_notification_send_fqy(MsnSession *session, const char *payload, int payload_len, - MsnFqyCb cb); + MsnFqyCb cb, gpointer cb_data); MsnNotification *msn_notification_new(MsnSession *session); void msn_notification_destroy(MsnNotification *notification);
--- a/libpurple/protocols/msn/session.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/msn/session.c Tue Jun 09 23:30:18 2009 +0000 @@ -261,9 +261,9 @@ static void msn_session_sync_users(MsnSession *session) { - PurpleBlistNode *gnode, *cnode, *bnode; PurpleConnection *gc = purple_account_get_connection(session->account); GList *to_remove = NULL; + GSList *buddies; g_return_if_fail(gc != NULL); @@ -271,60 +271,36 @@ * being logged in. This no longer happens, so we manually iterate * over the whole buddy list to identify sync issues. */ - for (gnode = purple_blist_get_root(); gnode; - gnode = purple_blist_node_get_sibling_next(gnode)) { - PurpleGroup *group = (PurpleGroup *)gnode; - const char *group_name; - if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) - continue; - group_name = purple_group_get_name(group); - for(cnode = purple_blist_node_get_first_child(gnode); - cnode; - cnode = purple_blist_node_get_sibling_next(cnode)) { - if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) - continue; - for(bnode = purple_blist_node_get_first_child(cnode); - bnode; - bnode = purple_blist_node_get_sibling_next(bnode)) { - PurpleBuddy *b; - if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) - continue; - b = (PurpleBuddy *)bnode; - if(purple_buddy_get_account(b) == purple_connection_get_account(gc)) { - MsnUser *remote_user; - gboolean found = FALSE; - - remote_user = msn_userlist_find_user(session->userlist, purple_buddy_get_name(b)); + for (buddies = purple_find_buddies(session->account, NULL); buddies; + buddies = g_slist_delete_link(buddies, buddies)) { + PurpleBuddy *buddy = buddies->data; + const gchar *buddy_name = purple_buddy_get_name(buddy); + const gchar *group_name = purple_group_get_name(purple_buddy_get_group(buddy)); + MsnUser *remote_user; + gboolean found = FALSE; - if ((remote_user != NULL) && (remote_user->list_op & MSN_LIST_FL_OP)) - { - GList *l; - - for (l = remote_user->group_ids; l != NULL; l = l->next) - { - const char *name = msn_userlist_find_group_name(remote_user->userlist, l->data); - if (name && !g_ascii_strcasecmp(group_name, name)) - { - found = TRUE; - break; - } - } - } + remote_user = msn_userlist_find_user(session->userlist, buddy_name); + if (remote_user && remote_user->list_op & MSN_LIST_FL_OP) { + GList *l; + for (l = remote_user->group_ids; l; l = l->next) { + const char *name = msn_userlist_find_group_name(remote_user->userlist, l->data); + if (name && !g_ascii_strcasecmp(group_name, name)) { + found = TRUE; + break; + } + } - /* We don't care if they're in a different group, as long as they're on the - * list somewhere. If we check for the group, we cause pain, agony and - * suffering for people who decide to re-arrange their buddy list elsewhere. - */ - if (!found) - { - if ((remote_user == NULL) || !(remote_user->list_op & MSN_LIST_FL_OP)) { - /* The user is not on the server list */ - msn_show_sync_issue(session, purple_buddy_get_name(b), group_name); - } else { - /* The user is not in that group on the server list */ - to_remove = g_list_prepend(to_remove, b); - } - } + /* We don't care if they're in a different group, as long as they're on the + * list somewhere. If we check for the group, we cause pain, agony and + * suffering for people who decide to re-arrange their buddy list elsewhere. + */ + if (!found) { + if ((remote_user == NULL) || !(remote_user->list_op & MSN_LIST_FL_OP)) { + /* The user is not on the server list */ + msn_show_sync_issue(session, buddy_name, group_name); + } else { + /* The user is not in that group on the server list */ + to_remove = g_list_prepend(to_remove, buddy); } } }
--- a/libpurple/protocols/msn/slplink.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/msn/slplink.c Tue Jun 09 23:30:18 2009 +0000 @@ -592,7 +592,7 @@ if (G_MAXSIZE - len < offset || (offset + len) > slpmsg->size) { purple_debug_error("msn", - "Oversized slpmsg - msgsize=%lld offset=%" G_GSIZE_FORMAT " len=%" G_GSIZE_FORMAT "\n", + "Oversized slpmsg - msgsize=%lld offset=%" G_GUINT64_FORMAT " len=%" G_GSIZE_FORMAT "\n", slpmsg->size, offset, len); g_return_if_reached(); }
--- a/libpurple/protocols/msn/state.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/msn/state.c Tue Jun 09 23:30:18 2009 +0000 @@ -21,6 +21,10 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ + +#include "internal.h" +#include "core.h" + #include "msn.h" #include "state.h" @@ -288,10 +292,29 @@ MsnUser *user; MsnObject *msnobj; const char *state_text; + GHashTable *ui_info = purple_core_get_ui_info(); + MsnClientCaps caps = MSN_CLIENT_ID; g_return_if_fail(session != NULL); g_return_if_fail(session->notification != NULL); + /* set client caps based on what the UI tells us it is... */ + if (ui_info) { + const gchar *client_type = g_hash_table_lookup(ui_info, "client_type"); + if (client_type) { + if (strcmp(client_type, "phone") == 0 || + strcmp(client_type, "handheld") == 0) { + caps |= MSN_CLIENT_CAP_WIN_MOBILE; + } else if (strcmp(client_type, "web") == 0) { + caps |= MSN_CLIENT_CAP_WEBMSGR; + } else if (strcmp(client_type, "bot") == 0) { + caps |= MSN_CLIENT_CAP_BOT; + } + /* MSN doesn't a "console" type... + What, they have no ncurses UI? :-) */ + } + } + account = session->account; cmdproc = session->notification->cmdproc; user = session->user; @@ -307,8 +330,7 @@ if (msnobj == NULL) { - msn_cmdproc_send(cmdproc, "CHG", "%s %d", state_text, - MSN_CLIENT_ID); + msn_cmdproc_send(cmdproc, "CHG", "%s %d", state_text, caps); } else { @@ -317,7 +339,7 @@ msnobj_str = msn_object_to_string(msnobj); msn_cmdproc_send(cmdproc, "CHG", "%s %d %s", state_text, - MSN_CLIENT_ID, purple_url_encode(msnobj_str)); + caps, purple_url_encode(msnobj_str)); g_free(msnobj_str); }
--- a/libpurple/protocols/msn/userlist.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/msn/userlist.c Tue Jun 09 23:30:18 2009 +0000 @@ -601,69 +601,6 @@ msn_add_contact_to_group(userlist->session, state, who, group_id); } -/* - * Save a buddy address/group until we get back response from FQY - */ -void -msn_userlist_save_pending_buddy(MsnUserList *userlist, - const char *who, - const char *group_name) -{ - MsnUser *user; - - g_return_if_fail(userlist != NULL); - - user = msn_user_new(userlist, who, NULL); - msn_user_set_pending_group(user, group_name); - msn_user_set_network(user, MSN_NETWORK_UNKNOWN); - userlist->pending = g_list_prepend(userlist->pending, user); -} - -/* - * Actually adds a buddy once we have the response from FQY - */ -void -msn_userlist_add_pending_buddy(MsnSession *session, - const char *who, - /*MsnNetwork*/ int network) -{ - MsnUserList *userlist = session->userlist; - MsnUser *user = NULL; - MsnUser *user2; - GList *l; - char *group; - - for (l = userlist->pending; l != NULL; l = l->next) - { - user = (MsnUser *)l->data; - - if (!g_ascii_strcasecmp(who, user->passport)) { - userlist->pending = g_list_delete_link(userlist->pending, l); - break; - } - } - - if (user == NULL) { - purple_debug_error("msn", "Attempting to add a pending user that does not exist.\n"); - return; - } - - group = msn_user_remove_pending_group(user); - - user2 = msn_userlist_find_user(userlist, who); - if (user2 != NULL) { - /* User already in userlist, so just update it. */ - msn_user_destroy(user); - user = user2; - } else { - msn_userlist_add_user(userlist, user); - } - - msn_user_set_network(user, network); - msn_userlist_add_buddy(userlist, who, group); - g_free(group); -} - void msn_userlist_add_buddy_to_list(MsnUserList *userlist, const char *who, MsnListId list_id) @@ -783,7 +720,6 @@ void msn_userlist_load(MsnSession *session) { - PurpleBlistNode *gnode, *cnode, *bnode; PurpleAccount *account = session->account; PurpleConnection *gc = purple_account_get_connection(account); GSList *l; @@ -791,34 +727,14 @@ g_return_if_fail(gc != NULL); - for (gnode = purple_blist_get_root(); gnode; - gnode = purple_blist_node_get_sibling_next(gnode)) - { - if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) - continue; - for (cnode = purple_blist_node_get_first_child(gnode); - cnode; - cnode = purple_blist_node_get_sibling_next(cnode)) - { - if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) - continue; - for (bnode = purple_blist_node_get_first_child(cnode); - bnode; - bnode = purple_blist_node_get_sibling_next(bnode)) - { - PurpleBuddy *b; - if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) - continue; - b = (PurpleBuddy *)bnode; - if (purple_buddy_get_account(b) == account) - { - user = msn_userlist_find_add_user(session->userlist, - purple_buddy_get_name(b), NULL); - purple_buddy_set_protocol_data(b, user); - msn_user_set_op(user, MSN_LIST_FL_OP); - } - } - } + for (l = purple_find_buddies(account, NULL); l != NULL; + l = g_slist_delete_link(l, l)) { + PurpleBuddy *buddy = l->data; + + user = msn_userlist_find_add_user(session->userlist, + purple_buddy_get_name(buddy), NULL); + purple_buddy_set_protocol_data(buddy, user); + msn_user_set_op(user, MSN_LIST_FL_OP); } for (l = session->account->permit; l != NULL; l = l->next) {
--- a/libpurple/protocols/msn/userlist.h Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/msn/userlist.h Tue Jun 09 23:30:18 2009 +0000 @@ -47,7 +47,6 @@ GList *users; /* Contains MsnUsers */ GList *groups; /* Contains MsnGroups */ - GList *pending; /* MsnUsers pending addition (waiting for FQY response) */ GQueue *buddy_icon_requests; int buddy_icon_window; @@ -87,12 +86,6 @@ void msn_userlist_rem_buddy(MsnUserList *userlist, const char *who); void msn_userlist_add_buddy(MsnUserList *userlist, const char *who, const char *group_name); -void msn_userlist_save_pending_buddy(MsnUserList *userlist, - const char *who, - const char *group_name); -void msn_userlist_add_pending_buddy(MsnSession *session, - const char *who, - /*MsnNetwork*/ int network); void msn_userlist_move_buddy(MsnUserList *userlist, const char *who, const char *old_group_name, const char *new_group_name);
--- a/libpurple/protocols/msnp9/session.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/msnp9/session.c Tue Jun 09 23:30:18 2009 +0000 @@ -221,68 +221,51 @@ static void msn_session_sync_users(MsnSession *session) { - PurpleBlistNode *gnode, *cnode, *bnode; PurpleConnection *gc = purple_account_get_connection(session->account); GList *to_remove = NULL; + GSList *buddies; g_return_if_fail(gc != NULL); /* The core used to use msn_add_buddy to add all buddies before * being logged in. This no longer happens, so we manually iterate * over the whole buddy list to identify sync issues. */ + for (buddies = purple_find_buddies(session->account, NULL); buddies; + buddies = g_slist_delete_link(buddies, buddies)) { + PurpleBuddy *buddy = buddies->data; + const char *buddy_name = purple_buddy_get_name(buddy); + const char *group_name = purple_group_get_name(purple_buddy_get_group(buddy)); + MsnUser *remote_user; + gboolean found = FALSE; - for (gnode = purple_blist_get_root(); gnode; gnode = gnode->next) { - PurpleGroup *group = (PurpleGroup *)gnode; - const char *group_name = group->name; - if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) - continue; - for(cnode = gnode->child; cnode; cnode = cnode->next) { - if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) - continue; - for(bnode = cnode->child; bnode; bnode = bnode->next) { - PurpleBuddy *b; - if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) - continue; - b = (PurpleBuddy *)bnode; - if(purple_buddy_get_account(b) == purple_connection_get_account(gc)) { - MsnUser *remote_user; - gboolean found = FALSE; + remote_user = msn_userlist_find_user(session->userlist, buddy_name); - remote_user = msn_userlist_find_user(session->userlist, purple_buddy_get_name(b)); + if (remote_user && remote_user->list_op & MSN_LIST_FL_OP) { + int group_id; + GList *l; - if ((remote_user != NULL) && (remote_user->list_op & MSN_LIST_FL_OP)) - { - int group_id; - GList *l; + group_id = msn_userlist_find_group_id(remote_user->userlist, + group_name); - group_id = msn_userlist_find_group_id(remote_user->userlist, - group_name); - - for (l = remote_user->group_ids; l != NULL; l = l->next) - { - if (group_id == GPOINTER_TO_INT(l->data)) - { - found = TRUE; - break; - } - } - - } + for (l = remote_user->group_ids; l; l = l->next) { + if (group_id == GPOINTER_TO_INT(l->data)) { + found = TRUE; + break; + } + } - /* We don't care if they're in a different group, as long as they're on the - * list somewhere. If we check for the group, we cause pain, agony and - * suffering for people who decide to re-arrange their buddy list elsewhere. - */ - if (!found) - { - if ((remote_user == NULL) || !(remote_user->list_op & MSN_LIST_FL_OP)) { - /* The user is not on the server list */ - msn_show_sync_issue(session, purple_buddy_get_name(b), group_name); - } else { - /* The user is not in that group on the server list */ - to_remove = g_list_prepend(to_remove, b); - } - } + /* We don't care if they're in a different group, as long as they're on the + * list somewhere. If we check for the group, we cause pain, agony and + * suffering for people who decide to re-arrange their buddy list elsewhere. + */ + if (!found) + { + if ((remote_user == NULL) || !(remote_user->list_op & MSN_LIST_FL_OP)) { + /* The user is not on the server list */ + msn_show_sync_issue(session, buddy_name, group_name); + } else { + /* The user is not in that group on the server list */ + to_remove = g_list_prepend(to_remove, buddy); } } }
--- a/libpurple/protocols/myspace/myspace.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/myspace/myspace.c Tue Jun 09 23:30:18 2009 +0000 @@ -1118,10 +1118,6 @@ guint buddy_count; body = msim_msg_get_dictionary(reply, "body"); - if (!body) { - /* No friends. Not an error. */ - return; - } buddy_count = 0; @@ -1477,28 +1473,22 @@ * @return TRUE if successful. */ static gboolean -msim_incoming_im(MsimSession *session, MsimMessage *msg) +msim_incoming_im(MsimSession *session, MsimMessage *msg, const gchar *username) { - gchar *username, *msg_msim_markup, *msg_purple_markup; + gchar *msg_msim_markup, *msg_purple_markup; gchar *userid; time_t time_received; PurpleConversation *conv; - g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE); - g_return_val_if_fail(msg != NULL, FALSE); - - username = msim_msg_get_string(msg, "_username"); /* I know this isn't really a string... but we need it to be one for * purple_find_conversation_with_account(). */ userid = msim_msg_get_string(msg, "f"); - g_return_val_if_fail(username != NULL, FALSE); purple_debug_info("msim_incoming_im", "UserID is %s", userid); if (msim_is_userid(username)) { purple_debug_info("msim", "Ignoring message from spambot (%s) on account %s\n", username, purple_account_get_username(session->account)); - g_free(username); return FALSE; } @@ -1523,14 +1513,13 @@ serv_got_im(session->gc, username, msg_purple_markup, PURPLE_MESSAGE_RECV, time_received); - g_free(username); g_free(msg_purple_markup); return TRUE; } /** - * Handle an incoming action message. + * Handle an incoming action message or an IM. * * @param session * @param msg @@ -1538,7 +1527,7 @@ * @return TRUE if successful. */ static gboolean -msim_incoming_action(MsimSession *session, MsimMessage *msg) +msim_incoming_action_or_im(MsimSession *session, MsimMessage *msg) { gchar *msg_text, *username; gboolean rc; @@ -1552,7 +1541,8 @@ username = msim_msg_get_string(msg, "_username"); g_return_val_if_fail(username != NULL, FALSE); - purple_debug_info("msim", "msim_incoming_action: action <%s> from <%s>\n", + purple_debug_info("msim", + "msim_incoming_action_or_im: action <%s> from <%s>\n", msg_text, username); if (g_str_equal(msg_text, "%typing%")) { @@ -1566,13 +1556,16 @@ } else if (strstr(msg_text, "!!!GroupCount=")) { /* TODO: support group chats. I think the number in msg_text has * something to do with the 'gid' field. */ - purple_debug_info("msim", "msim_incoming_action: TODO: implement #4691, group chats: %s\n", msg_text); + purple_debug_info("msim", + "msim_incoming_action_or_im: " + "TODO: implement #4691, group chats: %s\n", msg_text); rc = TRUE; } else if (strstr(msg_text, "!!!Offline=")) { /* TODO: support group chats. This one might mean a user * went offline or exited the chat. */ - purple_debug_info("msim", "msim_incoming_action: TODO: implement #4691, group chats: %s\n", msg_text); + purple_debug_info("msim", "msim_incoming_action_or_im: " + "TODO: implement #4691, group chats: %s\n", msg_text); rc = TRUE; } else if (msim_msg_get_integer(msg, "aid") != 0) { @@ -1583,9 +1576,7 @@ rc = TRUE; } else { - msim_unrecognized(session, msg, - "got to msim_incoming_action but unrecognized value for 'msg'"); - rc = FALSE; + rc = msim_incoming_im(session, msg, username); } g_free(msg_text); @@ -1670,10 +1661,9 @@ switch (bm) { case MSIM_BM_STATUS: return msim_incoming_status(session, msg); - case MSIM_BM_INSTANT: - return msim_incoming_im(session, msg); - case MSIM_BM_ACTION: - return msim_incoming_action(session, msg); + case MSIM_BM_INSTANT_ACTION_OR_IM: + case MSIM_BM_DELAYABLE_ACTION_OR_IM: + return msim_incoming_action_or_im(session, msg); case MSIM_BM_MEDIA: return msim_incoming_media(session, msg); case MSIM_BM_UNOFFICIAL_CLIENT: @@ -1681,7 +1671,8 @@ default: /* Not really an IM, but show it for informational * purposes during development. */ - return msim_incoming_im(session, msg); + /* TODO: This is probably wrong */ + return msim_incoming_action_or_im(session, msg); } } @@ -2294,7 +2285,7 @@ message_msim = html_to_msim_markup(session, message); - if (msim_send_bm(session, who, message_msim, MSIM_BM_INSTANT)) { + if (msim_send_bm(session, who, message_msim, MSIM_BM_DELAYABLE_ACTION_OR_IM)) { /* Return 1 to have Purple show this IM as being sent, 0 to not. I always * return 1 even if the message could not be sent, since I don't know if * it has failed yet--because the IM is only sent after the userid is @@ -2347,7 +2338,7 @@ } purple_debug_info("msim", "msim_send_typing(%s): %d (%s)\n", name, state, typing_str); - msim_send_bm(session, name, typing_str, MSIM_BM_ACTION); + msim_send_bm(session, name, typing_str, MSIM_BM_INSTANT_ACTION_OR_IM); return 0; }
--- a/libpurple/protocols/myspace/myspace.h Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/myspace/myspace.h Tue Jun 09 23:30:18 2009 +0000 @@ -127,12 +127,12 @@ #define MSIM_FINAL_STRING "\\final\\" /**< Message end marker */ /* Messages */ -#define MSIM_BM_INSTANT 1 -#define MSIM_BM_STATUS 100 -#define MSIM_BM_ACTION 121 -#define MSIM_BM_MEDIA 122 -#define MSIM_BM_PROFILE 124 -#define MSIM_BM_UNOFFICIAL_CLIENT 200 +#define MSIM_BM_DELAYABLE_ACTION_OR_IM 1 +#define MSIM_BM_STATUS 100 +#define MSIM_BM_INSTANT_ACTION_OR_IM 121 +#define MSIM_BM_MEDIA 122 +#define MSIM_BM_PROFILE 124 +#define MSIM_BM_UNOFFICIAL_CLIENT 200 /* Authentication algorithm for login2 */ #define MSIM_AUTH_ALGORITHM 196610
--- a/libpurple/protocols/myspace/zap.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/myspace/zap.c Tue Jun 09 23:30:18 2009 +0000 @@ -109,7 +109,7 @@ /* Construct and send the actual zap command. */ zap_string = g_strdup_printf("!!!ZAP_SEND!!!=RTE_BTN_ZAPS_%d", code); - if (!msim_send_bm(session, username, zap_string, MSIM_BM_ACTION)) { + if (!msim_send_bm(session, username, zap_string, MSIM_BM_INSTANT_ACTION_OR_IM)) { purple_debug_info("msim_send_zap", "msim_send_bm failed: zapping %s with %s\n", username, zap_string);
--- a/libpurple/protocols/oscar/oscar.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/oscar/oscar.c Tue Jun 09 23:30:18 2009 +0000 @@ -3566,7 +3566,8 @@ alerturl = va_arg(ap, char *); va_end(ap); - if (account != NULL && emailinfo != NULL && emailinfo->unread && havenewmail) { + if (account != NULL && emailinfo != NULL && purple_account_get_check_mail(account) && + emailinfo->unread && havenewmail) { gchar *to = g_strdup_printf("%s%s%s", purple_account_get_username(account), emailinfo->domain ? "@" : "", @@ -6540,47 +6541,35 @@ { PurpleConnection *gc = (PurpleConnection *) action->context; OscarData *od = purple_connection_get_protocol_data(gc); - gchar *nombre, *text, *tmp; - PurpleBlistNode *gnode, *cnode, *bnode; + gchar *text, *tmp; + GSList *buddies; PurpleAccount *account; int num=0; text = g_strdup(""); account = purple_connection_get_account(gc); - for (gnode = purple_blist_get_root(); gnode; - gnode = purple_blist_node_get_sibling_next(gnode)) { - PurpleGroup *group = (PurpleGroup *)gnode; - const char *gname; - if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) - continue; - gname = purple_group_get_name(group); - for (cnode = purple_blist_node_get_first_child(gnode); - cnode; - cnode = purple_blist_node_get_sibling_next(cnode)) { - if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) - continue; - for (bnode = purple_blist_node_get_first_child(cnode); - bnode; - bnode = purple_blist_node_get_sibling_next(bnode)) { - PurpleBuddy *buddy = (PurpleBuddy *)bnode; - const char *bname; - if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) - continue; - bname = purple_buddy_get_name(buddy); - if (purple_buddy_get_account(buddy) == account && aim_ssi_waitingforauth(od->ssi.local, gname, bname)) { - if (purple_buddy_get_alias_only(buddy)) - nombre = g_strdup_printf(" %s (%s)", bname, purple_buddy_get_alias_only(buddy)); - else - nombre = g_strdup_printf(" %s", bname); - tmp = g_strdup_printf("%s%s<br>", text, nombre); - g_free(text); - text = tmp; - g_free(nombre); - num++; - } - } + buddies = purple_find_buddies(account, NULL); + while (buddies) { + PurpleBuddy *buddy; + const gchar *bname, *gname; + + buddy = buddies->data; + bname = purple_buddy_get_name(buddy); + gname = purple_group_get_name(purple_buddy_get_group(buddy)); + if (aim_ssi_waitingforauth(od->ssi.local, gname, bname)) { + const gchar *alias = purple_buddy_get_alias_only(buddy); + if (alias) + tmp = g_strdup_printf("%s %s (%s)<br>", text, bname, alias); + else + tmp = g_strdup_printf("%s %s<br>", text, bname); + g_free(text); + text = tmp; + + num++; } + + buddies = g_slist_delete_link(buddies, buddies); } if (!num) {
--- a/libpurple/protocols/silc/buddy.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/silc/buddy.c Tue Jun 09 23:30:18 2009 +0000 @@ -1407,35 +1407,16 @@ void silcpurple_send_buddylist(PurpleConnection *gc) { - PurpleBlistNode *gnode, *cnode, *bnode; - PurpleBuddy *buddy; + GSList *buddies; PurpleAccount *account; account = purple_connection_get_account(gc); - for (gnode = purple_blist_get_root(); - gnode != NULL; - gnode = purple_blist_node_get_sibling_next(gnode)) + for (buddies = purple_find_buddies(account, NULL); buddies; + buddies = g_slist_delete_link(buddies, buddies)) { - if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) - continue; - for (cnode = purple_blist_node_get_first_child(gnode); - cnode != NULL; - cnode = purple_blist_node_get_sibling_next(cnode)) - { - if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) - continue; - for (bnode = purple_blist_node_get_first_child(cnode); - bnode != NULL; - bnode = purple_blist_node_get_sibling_next(bnode)) - { - if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) - continue; - buddy = (PurpleBuddy *)bnode; - if (purple_buddy_get_account(buddy) == account) - silcpurple_add_buddy_i(gc, buddy, TRUE); - } - } + PurpleBuddy *buddy = buddies->data; + silcpurple_add_buddy_i(gc, buddy, TRUE); } }
--- a/libpurple/protocols/silc/ops.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/silc/ops.c Tue Jun 09 23:30:18 2009 +0000 @@ -839,7 +839,7 @@ b = NULL; if (public_key) { - PurpleBlistNode *gnode, *cnode, *bnode; + GSList *buddies; const char *f; pk = silc_pkcs_public_key_encode(public_key, &pk_len); @@ -857,29 +857,13 @@ silc_free(pk); /* Find buddy by associated public key */ - for (gnode = purple_blist_get_root(); gnode; - gnode = purple_blist_node_get_sibling_next(gnode)) { - if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) - continue; - for (cnode = purple_blist_node_get_first_child(gnode); - cnode; - cnode = purple_blist_node_get_sibling_next(cnode)) { - if( !PURPLE_BLIST_NODE_IS_CONTACT(cnode)) - continue; - for (bnode = purple_blist_node_get_first_child(cnode); - bnode; - bnode = purple_blist_node_get_sibling_next(bnode)) { - if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) - continue; - b = (PurpleBuddy *)bnode; - if (purple_buddy_get_account(b) != account) - continue; - f = purple_blist_node_get_string(bnode, "public-key"); - if (f && !strcmp(f, buf)) - goto cont; - b = NULL; - } - } + for (buddies = purple_find_buddies(account, NULL); buddies; + buddies = g_slist_delete_link(buddies, buddies)) { + b = buddies->data; + f = purple_blist_node_get_string(PURPLE_BLIST_NODE(b), "public-key"); + if (purple_strequal(f, buf)) + goto cont; + b = NULL; } } cont:
--- a/libpurple/protocols/simple/simple.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/simple/simple.c Tue Jun 09 23:30:18 2009 +0000 @@ -213,27 +213,18 @@ } static void simple_get_buddies(PurpleConnection *gc) { - PurpleBlistNode *gnode, *cnode, *bnode; + GSList *buddies; PurpleAccount *account; purple_debug_info("simple", "simple_get_buddies\n"); account = purple_connection_get_account(gc); - for(gnode = purple_blist_get_root(); gnode; - gnode = purple_blist_node_get_sibling_next(gnode)) { - if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for(cnode = purple_blist_node_get_first_child(gnode); - cnode; - cnode = purple_blist_node_get_sibling_next(cnode)) { - if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for(bnode = purple_blist_node_get_first_child(cnode); - bnode; - bnode = purple_blist_node_get_sibling_next(bnode)) { - if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; - if(purple_buddy_get_account((PurpleBuddy*)bnode) == account) - simple_add_buddy(gc, (PurpleBuddy*)bnode, (PurpleGroup *)gnode); - } - } + buddies = purple_find_buddies(account, NULL); + while (buddies) { + PurpleBuddy *buddy = buddies->data; + simple_add_buddy(gc, buddy, purple_buddy_get_group(buddy)); + + buddies = g_slist_delete_link(buddies, buddies); } }
--- a/libpurple/protocols/yahoo/yahoo.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo.c Tue Jun 09 23:30:18 2009 +0000 @@ -147,7 +147,6 @@ static void yahoo_process_status(PurpleConnection *gc, struct yahoo_packet *pkt) { PurpleAccount *account = purple_connection_get_account(gc); - struct yahoo_data *yd = gc->proto_data; GSList *l = pkt->hash; YahooFriend *f = NULL; char *name = NULL; @@ -168,29 +167,7 @@ switch (pair->key) { case 0: /* we won't actually do anything with this */ - break; - case 1: /* we don't get the full buddy list here. */ - if (!yd->logged_in) { - purple_connection_set_display_name(gc, pair->value); - purple_connection_set_state(gc, PURPLE_CONNECTED); - yd->logged_in = TRUE; - if (yd->picture_upload_todo) { - yahoo_buddy_icon_upload(gc, yd->picture_upload_todo); - yd->picture_upload_todo = NULL; - } - yahoo_set_status(account, purple_account_get_active_status(account)); - - /* this requests the list. i have a feeling that this is very evil - * - * scs.yahoo.com sends you the list before this packet without it being - * requested - * - * do_import(gc, NULL); - * newpkt = yahoo_packet_new(YAHOO_SERVICE_LIST, YAHOO_STATUS_OFFLINE, 0); - * yahoo_packet_send_and_free(newpkt, yd); - */ - - } + case 1: /* we won't actually do anything with this */ break; case 8: /* how many online buddies we have */ break; @@ -577,6 +554,18 @@ } g_hash_table_foreach(ht, yahoo_do_group_cleanup, NULL); + + /* Now that we have processed the buddy list, we can say yahoo has connected */ + purple_connection_set_display_name(gc, purple_normalize(account, purple_account_get_username(account))); + purple_connection_set_state(gc, PURPLE_CONNECTED); + yd->logged_in = TRUE; + if (yd->picture_upload_todo) { + yahoo_buddy_icon_upload(gc, yd->picture_upload_todo); + yd->picture_upload_todo = NULL; + } + yahoo_set_status(account, purple_account_get_active_status(account)); + purple_debug_info("yahoo","Authentication: Connection established\n"); + g_hash_table_destroy(ht); g_free(norm_bud); g_free(temp); @@ -1584,7 +1573,8 @@ to_y64(base64_string, md5_digest, 16); - pkt = yahoo_packet_new(YAHOO_SERVICE_AUTHRESP, YAHOO_STATUS_WEBLOGIN, yd->session_id); + purple_debug_info("yahoo", "yahoo status: %d\n", yd->current_status); + pkt = yahoo_packet_new(YAHOO_SERVICE_AUTHRESP, yd->current_status, yd->session_id); if(yd->jp) { yahoo_packet_hash(pkt, "ssssssss", 1, name, @@ -1751,7 +1741,7 @@ break; case 1213: /* security lock from too many failed login attempts */ - error_reason = g_strdup(_("Account locked: Too many failed login attempts")); + error_reason = g_strdup(_("Account locked: Too many failed login attempts.\nLogging into the Yahoo! website may fix this.")); error = PURPLE_CONNECTION_ERROR_OTHER_ERROR; break; case 1235: @@ -1759,9 +1749,10 @@ error_reason = g_strdup(_("Username does not exist")); error = PURPLE_CONNECTION_ERROR_INVALID_USERNAME; break; + case 1214: case 1236: /* indicates a lock of some description */ - error_reason = g_strdup(_("Account locked: See the debug log")); + error_reason = g_strdup(_("Account locked: Unknown reason.\nLogging into the Yahoo! website may fix this.")); error = PURPLE_CONNECTION_ERROR_OTHER_ERROR; break; case 100: @@ -1790,7 +1781,10 @@ "yahoojp", 0); url = g_strdup_printf(yahoojp ? YAHOOJP_LOGIN_URL : YAHOO_LOGIN_URL, token); - url_data = purple_util_fetch_url_request(url, TRUE, YAHOO_CLIENT_USERAGENT, TRUE, NULL, FALSE, yahoo_auth16_stage2, auth_data); + url_data = purple_util_fetch_url_request_len_with_account( + purple_connection_get_account(gc), url, TRUE, + YAHOO_CLIENT_USERAGENT, TRUE, NULL, FALSE, -1, + yahoo_auth16_stage2, auth_data); g_free(url); g_free(token); } @@ -1826,7 +1820,11 @@ g_free(encoded_password); g_free(encoded_username); - url_data = purple_util_fetch_url_request(url, TRUE, YAHOO_CLIENT_USERAGENT, TRUE, NULL, FALSE, yahoo_auth16_stage1_cb, auth_data); + url_data = purple_util_fetch_url_request_len_with_account( + purple_connection_get_account(gc), url, TRUE, + YAHOO_CLIENT_USERAGENT, TRUE, NULL, FALSE, -1, + yahoo_auth16_stage1_cb, auth_data); + g_free(url); } @@ -3948,8 +3946,9 @@ use_whole_url ? base_url : "", yd->cookie_t, yd->cookie_y); - url_data = purple_util_fetch_url_request(base_url, use_whole_url, - YAHOO_CLIENT_USERAGENT, TRUE, request, FALSE, + url_data = purple_util_fetch_url_request_len_with_account( + purple_connection_get_account(gc), base_url, use_whole_url, + YAHOO_CLIENT_USERAGENT, TRUE, request, FALSE, -1, yahoo_get_inbox_token_cb, gc); g_free(request); @@ -4110,8 +4109,9 @@ if ((gc->account->proxy_info) && (gc->account->proxy_info->type == PURPLE_PROXY_HTTP)) use_whole_url = TRUE; - url_data = purple_util_fetch_url_request(YAHOO_SMS_CARRIER_URL, use_whole_url, - YAHOO_CLIENT_USERAGENT, TRUE, request, FALSE, + url_data = purple_util_fetch_url_request_len_with_account( + purple_connection_get_account(gc), YAHOO_SMS_CARRIER_URL, use_whole_url, + YAHOO_CLIENT_USERAGENT, TRUE, request, FALSE, -1, yahoo_get_sms_carrier_cb, data); g_free(request);
--- a/libpurple/protocols/yahoo/yahoo.h Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo.h Tue Jun 09 23:30:18 2009 +0000 @@ -28,7 +28,7 @@ #include "circbuffer.h" #include "prpl.h" -#define YAHOO_PAGER_HOST "scs.msg.yahoo.com" +#define YAHOO_PAGER_HOST "scsa.msg.yahoo.com" #define YAHOO_PAGER_PORT 5050 #define YAHOO_PAGER_PORT_P2P 5101 #define YAHOO_LOGIN_URL "https://login.yahoo.com/config/pwtoken_login?src=ymsgr&ts=&token=%s"
--- a/libpurple/protocols/yahoo/yahoo_aliases.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_aliases.c Tue Jun 09 23:30:18 2009 +0000 @@ -175,9 +175,9 @@ webaddress); /* We have a URL and some header information, let's connect and get some aliases */ - url_data = purple_util_fetch_url_request(url, use_whole_url, NULL, TRUE, - request, FALSE, - yahoo_fetch_aliases_cb, cb); + url_data = purple_util_fetch_url_request_len_with_account(purple_connection_get_account(gc), + url, use_whole_url, NULL, TRUE, request, FALSE, -1, + yahoo_fetch_aliases_cb, cb); if (url_data != NULL) yd->url_datas = g_slist_prepend(yd->url_datas, url_data); @@ -347,7 +347,9 @@ content); /* We have a URL and some header information, let's connect and update the alias */ - url_data = purple_util_fetch_url_request(url, use_whole_url, NULL, TRUE, request, FALSE, yahoo_update_alias_cb, cb); + url_data = purple_util_fetch_url_request_len_with_account( + purple_connection_get_account(gc), url, use_whole_url, NULL, TRUE, + request, FALSE, -1, yahoo_update_alias_cb, cb); if (url_data != NULL) yd->url_datas = g_slist_prepend(yd->url_datas, url_data);
--- a/libpurple/protocols/zephyr/zephyr.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/protocols/zephyr/zephyr.c Tue Jun 09 23:30:18 2009 +0000 @@ -1254,45 +1254,32 @@ #ifdef WIN32 -static gint check_loc(gpointer_data) +static gint check_loc(gpointer data) { - PurpleBlistNode *gnode, *cnode, *bnode; + GSList *buddies; ZLocations_t locations; + PurpleConnection *gc = data; + zephyr_account *zephyr = gc->proto_data; + PurpleAccount *account = purple_connection_get_account(gc); int numlocs; int one = 1; - for (gnode = purple_blist_get_root(); gnode; - gnode = purple_blist_node_get_sibling_next(gnode)) { - if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) - continue; - for (cnode = purple_blist_node_get_first_child(gnode); - cnode; - cnode = purple_blist_node_get_sibling_next(cnode)) { - if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) - continue; - for (bnode = purple_blist_node_get_first_child(cnode); - bnode; - bnode = purple_blist_node_get_sibling_next(bnode)) { - PurpleBuddy *b = (PurpleBuddy *) bnode; - - if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) - continue; - if (purple_buddy_get_account(b)->gc == zgc) { - char *chk; - const char *bname = purple_buddy_get_name(b); - chk = local_zephyr_normalize(bname); - ZLocateUser(chk,&numlocs, ZAUTH); - if (numlocs) { - int i; - for(i=0;i<numlocs;i++) { - ZGetLocations(&locations,&one); - serv_got_update(zgc,bname,1,0,0,0,0); - } - } - } + for (buddies = purple_find_buddies(account, NULL); buddies; + buddies = g_slist_delete_link(buddies, buddies)) { + PurpleBuddy *b = buddies->data; + char *chk; + const char *bname = purple_buddy_get_name(b); + chk = local_zephyr_normalize(bname); + ZLocateUser(chk,&numlocs, ZAUTH); + if (numlocs) { + int i; + for(i=0;i<numlocs;i++) { + ZGetLocations(&locations,&one); + serv_got_update(zgc,bname,1,0,0,0,0); } } } + return TRUE; } @@ -1300,7 +1287,7 @@ static gint check_loc(gpointer data) { - PurpleBlistNode *gnode, *cnode, *bnode; + GSList *buddies; ZAsyncLocateData_t ald; PurpleConnection *gc = (PurpleConnection *)data; zephyr_account *zephyr = gc->proto_data; @@ -1312,65 +1299,49 @@ ald.version = NULL; } - for (gnode = purple_blist_get_root(); gnode; - gnode = purple_blist_node_get_sibling_next(gnode)) { - if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) - continue; - for (cnode = purple_blist_node_get_first_child(gnode); - cnode; - cnode = purple_blist_node_get_sibling_next(cnode)) { - if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) - continue; - for (bnode = purple_blist_node_get_first_child(cnode); - bnode; - bnode = purple_blist_node_get_sibling_next(bnode)) { - PurpleBuddy *b = (PurpleBuddy *) bnode; + for (buddies = purple_find_buddies(account, NULL); buddies; + buddies = g_slist_delete_link(buddies, buddies)) { + PurpleBuddy *b = buddies->data; - if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) - continue; - if (purple_buddy_get_account(b) == account) { - const char *chk; - const char *name = purple_buddy_get_name(b); + const char *chk; + const char *name = purple_buddy_get_name(b); - chk = local_zephyr_normalize(zephyr,name); - purple_debug_info("zephyr","chk: %s b->name %s\n",chk,name); - /* XXX add real error reporting */ - /* doesn't matter if this fails or not; we'll just move on to the next one */ - if (use_zeph02(zephyr)) { + chk = local_zephyr_normalize(zephyr,name); + purple_debug_info("zephyr","chk: %s b->name %s\n",chk,name); + /* XXX add real error reporting */ + /* doesn't matter if this fails or not; we'll just move on to the next one */ + if (use_zeph02(zephyr)) { #ifdef WIN32 - int numlocs; - int one=1; - ZLocateUser(chk,&numlocs,ZAUTH); - if (numlocs) { - int i; - for(i=0;i<numlocs;i++) { - ZGetLocations(&locations,&one); - if (nlocs>0) - purple_prpl_got_user_status(account,name,"available",NULL); - else - purple_prpl_got_user_status(account,name,"offline",NULL); - } - } -#else - ZRequestLocations(chk, &ald, UNACKED, ZAUTH); - g_free(ald.user); - g_free(ald.version); -#endif /* WIN32 */ - } else - if (use_tzc(zephyr)) { - gchar *zlocstr = g_strdup_printf("((tzcfodder . zlocate) \"%s\")\n",chk); - size_t len = strlen(zlocstr); - size_t result = write(zephyr->totzc[ZEPHYR_FD_WRITE],zlocstr,len); - if (result != len) { - purple_debug_error("zephyr", "Unable to write a message: %s\n", g_strerror(errno)); - } - g_free(zlocstr); - } + int numlocs; + int one=1; + ZLocateUser(chk,&numlocs,ZAUTH); + if (numlocs) { + int i; + for(i=0;i<numlocs;i++) { + ZGetLocations(&locations,&one); + if (nlocs>0) + purple_prpl_got_user_status(account,name,"available",NULL); + else + purple_prpl_got_user_status(account,name,"offline",NULL); } } - } +#else + ZRequestLocations(chk, &ald, UNACKED, ZAUTH); + g_free(ald.user); + g_free(ald.version); +#endif /* WIN32 */ + } else + if (use_tzc(zephyr)) { + gchar *zlocstr = g_strdup_printf("((tzcfodder . zlocate) \"%s\")\n",chk); + size_t len = strlen(zlocstr); + size_t result = write(zephyr->totzc[ZEPHYR_FD_WRITE],zlocstr,len); + if (result != len) { + purple_debug_error("zephyr", "Unable to write a message: %s\n", g_strerror(errno)); + } + g_free(zlocstr); + } } - + return TRUE; } @@ -1955,8 +1926,7 @@ static void write_anyone(PurpleConnection *gc) { - PurpleBlistNode *gnode, *cnode, *bnode; - PurpleBuddy *b; + GSList *buddies; char *fname; FILE *fd; PurpleAccount *account; @@ -1969,29 +1939,12 @@ } account = purple_connection_get_account(gc); - for (gnode = purple_blist_get_root(); - gnode; - gnode = purple_blist_node_get_sibling_next(gnode)) { - if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) - continue; - for (cnode = purple_blist_node_get_first_child(gnode); - cnode; - cnode = purple_blist_node_get_sibling_next(cnode)) { - if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) - continue; - for (bnode = purple_blist_node_get_first_child(cnode); - bnode; - bnode = purple_blist_node_get_sibling_next(bnode)) { - if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) - continue; - b = (PurpleBuddy *) bnode; - if (purple_buddy_get_account(b) == account) { - gchar *stripped_user = zephyr_strip_local_realm(zephyr, purple_buddy_get_name(b)); - fprintf(fd, "%s\n", stripped_user); - g_free(stripped_user); - } - } - } + for (buddies = purple_find_buddies(account, NULL); buddies; + buddies = g_slist_delete_link(buddies, buddies)) { + PurpleBuddy *b = buddies->data; + gchar *stripped_user = zephyr_strip_local_realm(zephyr, purple_buddy_get_name(b)); + fprintf(fd, "%s\n", stripped_user); + g_free(stripped_user); } fclose(fd);
--- a/libpurple/proxy.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/proxy.c Tue Jun 09 23:30:18 2009 +0000 @@ -47,6 +47,7 @@ gchar *host; int port; int fd; + int socket_type; guint inpa; PurpleProxyInfo *gpi; PurpleDnsQueryData *query_data; @@ -676,6 +677,68 @@ } static void +proxy_connect_udp_none(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) +{ + int flags; + + purple_debug_info("proxy", "UDP Connecting to %s:%d with no proxy\n", + connect_data->host, connect_data->port); + + connect_data->fd = socket(addr->sa_family, SOCK_DGRAM, 0); + if (connect_data->fd < 0) + { + purple_proxy_connect_data_disconnect_formatted(connect_data, + _("Unable to create socket:\n%s"), g_strerror(errno)); + return; + } + + flags = fcntl(connect_data->fd, F_GETFL); + fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK); +#ifndef _WIN32 + fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); +#endif + + if (connect(connect_data->fd, addr, addrlen) != 0) + { + if ((errno == EINPROGRESS) || (errno == EINTR)) + { + purple_debug_info("proxy", "UDP Connection in progress\n"); + connect_data->inpa = purple_input_add(connect_data->fd, + PURPLE_INPUT_WRITE, socket_ready_cb, connect_data); + } + else + { + purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); + } + } + else + { + /* + * The connection happened IMMEDIATELY... strange, but whatever. + */ + int error = ETIMEDOUT; + int ret; + + purple_debug_info("proxy", "UDP Connected immediately.\n"); + + ret = purple_input_get_error(connect_data->fd, &error); + if ((ret != 0) || (error != 0)) + { + if (ret != 0) + error = errno; + purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); + return; + } + + /* + * We want to call the "connected" callback eventually, but we + * don't want to call it before we return, just in case. + */ + purple_timeout_add(10, clean_connect, connect_data); + } +} + +static void proxy_connect_none(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) { int flags; @@ -2042,6 +2105,12 @@ #endif purple_debug_info("proxy", "Attempting connection to %s\n", ipaddr); + if (connect_data->socket_type == SOCK_DGRAM) { + proxy_connect_udp_none(connect_data, addr, addrlen); + g_free(addr); + return; + } + switch (purple_proxy_info_get_type(connect_data->gpi)) { case PURPLE_PROXY_NONE: proxy_connect_none(connect_data, addr, addrlen); @@ -2193,6 +2262,7 @@ connect_data = g_new0(PurpleProxyConnectData, 1); connect_data->fd = -1; + connect_data->socket_type = SOCK_STREAM; connect_data->handle = handle; connect_data->connect_cb = connect_cb; connect_data->data = data; @@ -2243,6 +2313,71 @@ return connect_data; } +PurpleProxyConnectData * +purple_proxy_connect_udp(void *handle, PurpleAccount *account, + const char *host, int port, + PurpleProxyConnectFunction connect_cb, gpointer data) +{ + const char *connecthost = host; + int connectport = port; + PurpleProxyConnectData *connect_data; + + g_return_val_if_fail(host != NULL, NULL); + g_return_val_if_fail(port > 0, NULL); + g_return_val_if_fail(connect_cb != NULL, NULL); + + connect_data = g_new0(PurpleProxyConnectData, 1); + connect_data->fd = -1; + connect_data->socket_type = SOCK_DGRAM; + connect_data->handle = handle; + connect_data->connect_cb = connect_cb; + connect_data->data = data; + connect_data->host = g_strdup(host); + connect_data->port = port; + connect_data->gpi = purple_proxy_get_setup(account); + + if ((purple_proxy_info_get_type(connect_data->gpi) != PURPLE_PROXY_NONE) && + (purple_proxy_info_get_host(connect_data->gpi) == NULL || + purple_proxy_info_get_port(connect_data->gpi) <= 0)) { + + purple_notify_error(NULL, NULL, _("Invalid proxy settings"), _("Either the host name or port number specified for your given proxy type is invalid.")); + purple_proxy_connect_data_destroy(connect_data); + return NULL; + } + + switch (purple_proxy_info_get_type(connect_data->gpi)) + { + case PURPLE_PROXY_NONE: + break; + + case PURPLE_PROXY_HTTP: + case PURPLE_PROXY_SOCKS4: + case PURPLE_PROXY_SOCKS5: + case PURPLE_PROXY_USE_ENVVAR: + purple_debug_info("proxy", "Ignoring Proxy type (%d) for UDP.\n", + purple_proxy_info_get_type(connect_data->gpi)); + break; + + default: + purple_debug_error("proxy", "Invalid Proxy type (%d) specified.\n", + purple_proxy_info_get_type(connect_data->gpi)); + purple_proxy_connect_data_destroy(connect_data); + return NULL; + } + + connect_data->query_data = purple_dnsquery_a(connecthost, + connectport, connection_host_resolved, connect_data); + if (connect_data->query_data == NULL) + { + purple_proxy_connect_data_destroy(connect_data); + return NULL; + } + + handles = g_slist_prepend(handles, connect_data); + + return connect_data; +} + /* * Combine some of this code with purple_proxy_connect() */ @@ -2260,6 +2395,7 @@ connect_data = g_new0(PurpleProxyConnectData, 1); connect_data->fd = -1; + connect_data->socket_type = SOCK_STREAM; connect_data->handle = handle; connect_data->connect_cb = connect_cb; connect_data->data = data;
--- a/libpurple/proxy.h Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/proxy.h Tue Jun 09 23:30:18 2009 +0000 @@ -257,6 +257,35 @@ PurpleProxyConnectFunction connect_cb, gpointer data); /** + * Makes a connection to the specified host and port. Note that this + * function name can be misleading--although it is called "proxy + * connect," it is used for establishing any outgoing UDP connection, + * whether through a proxy or not. + * + * @param handle A handle that should be associated with this + * connection attempt. The handle can be used + * to cancel the connection attempt using the + * purple_proxy_connect_cancel_with_handle() + * function. + * @param account The account making the connection. + * @param host The destination host. + * @param port The destination port. + * @param connect_cb The function to call when the connection is + * established. If the connection failed then + * fd will be -1 and error message will be set + * to something descriptive (hopefully). + * @param data User-defined data. + * + * @return NULL if there was an error, or a reference to an + * opaque data structure that can be used to cancel + * the pending connection, if needed. + */ +PurpleProxyConnectData *purple_proxy_connect_udp(void *handle, + PurpleAccount *account, + const char *host, int port, + PurpleProxyConnectFunction connect_cb, gpointer data); + +/** * Makes a connection through a SOCKS5 proxy. * * @param handle A handle that should be associated with this
--- a/libpurple/server.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/server.c Tue Jun 09 23:30:18 2009 +0000 @@ -728,7 +728,6 @@ im = PURPLE_CONV_IM(conv); purple_conv_im_set_typing_state(im, state); - purple_conv_im_update_typing(im); } else { switch (state) { @@ -766,7 +765,6 @@ purple_conv_im_stop_typing_timeout(im); purple_conv_im_set_typing_state(im, PURPLE_NOT_TYPING); - purple_conv_im_update_typing(im); } else {
--- a/libpurple/signals.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/signals.c Tue Jun 09 23:30:18 2009 +0000 @@ -975,6 +975,26 @@ } void +purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val) +{ + gboolean ret_val; + void *arg1 = va_arg(args, void *); + void *arg2 = va_arg(args, void *); + void *arg3 = va_arg(args, void *); + void *arg4 = va_arg(args, void *); + void *arg5 = va_arg(args, void *); + void *arg6 = va_arg(args, void *); + + ret_val = + ((gboolean (*)(void *, void *, void *, void *, void *, void *, void *))cb)( + arg1, arg2, arg3, arg4, arg5, arg6, data); + + if (return_val != NULL) + *return_val = GINT_TO_POINTER(ret_val); +} + +void purple_marshal_BOOLEAN__INT_POINTER(PurpleCallback cb, va_list args, void *data, void **return_val) {
--- a/libpurple/signals.h Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/signals.h Tue Jun 09 23:30:18 2009 +0000 @@ -349,6 +349,8 @@ PurpleCallback cb, va_list args, void *data, void **return_val); void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_UINT( PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); void purple_marshal_BOOLEAN__INT_POINTER( PurpleCallback cb, va_list args, void *data, void **return_val);
--- a/libpurple/theme.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/theme.c Tue Jun 09 23:30:18 2009 +0000 @@ -241,9 +241,12 @@ static gchar * theme_clean_text(const gchar *text) { - gchar *clean_text = g_markup_escape_text(text, -1); - g_strdelimit(clean_text, "\n", ' '); - purple_str_strip_char(clean_text, '\r'); + gchar *clean_text = NULL; + if (text != NULL) { + clean_text = g_markup_escape_text(text, -1); + g_strdelimit(clean_text, "\n", ' '); + purple_str_strip_char(clean_text, '\r'); + } return clean_text; } @@ -389,9 +392,10 @@ { const gchar *filename = purple_theme_get_image(theme); - g_return_val_if_fail(filename, NULL); - - return g_build_filename(purple_theme_get_dir(PURPLE_THEME(theme)), filename, NULL); + if (filename) + return g_build_filename(purple_theme_get_dir(PURPLE_THEME(theme)), filename, NULL); + else + return NULL; } void
--- a/libpurple/util.c Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/util.c Tue Jun 09 23:30:18 2009 +0000 @@ -1041,6 +1041,35 @@ return ret; } +gboolean purple_markup_is_rtl(const char *html) +{ + GData *attributes; + const gchar *start, *end; + gboolean res = FALSE; + + if (purple_markup_find_tag("span", html, &start, &end, &attributes)) + { + /* tmp is a member of attributes and is free with g_datalist_clear call */ + const char *tmp = g_datalist_get_data(&attributes, "dir"); + if (tmp && !g_ascii_strcasecmp(tmp, "RTL")) + res = TRUE; + if (!res) + { + tmp = g_datalist_get_data(&attributes, "style"); + if (tmp) + { + char *tmp2 = purple_markup_get_css_property(tmp, "direction"); + if (tmp2 && !g_ascii_strcasecmp(tmp2, "RTL")) + res = TRUE; + g_free(tmp2); + } + + } + g_datalist_clear(&attributes); + } + return res; +} + gboolean purple_markup_find_tag(const char *needle, const char *haystack, const char **start, const char **end, GData **attributes) @@ -4008,7 +4037,7 @@ const char *request, gboolean include_headers, PurpleUtilFetchUrlCallback callback, void *user_data) { - return purple_util_fetch_url_request_len(url, full, + return purple_util_fetch_url_request_len_with_account(NULL, url, full, user_agent, http11, request, include_headers, -1, callback, user_data); @@ -4020,6 +4049,17 @@ const char *request, gboolean include_headers, gssize max_len, PurpleUtilFetchUrlCallback callback, void *user_data) { + return purple_util_fetch_url_request_len_with_account(NULL, url, full, + user_agent, http11, request, include_headers, max_len, callback, + user_data); +} + +PurpleUtilFetchUrlData * +purple_util_fetch_url_request_len_with_account(PurpleAccount *account, + const char *url, gboolean full, const char *user_agent, gboolean http11, + const char *request, gboolean include_headers, gssize max_len, + PurpleUtilFetchUrlCallback callback, void *user_data) +{ PurpleUtilFetchUrlData *gfud; g_return_val_if_fail(url != NULL, NULL); @@ -4057,11 +4097,11 @@ } gfud->is_ssl = TRUE; - gfud->ssl_connection = purple_ssl_connect(NULL, + gfud->ssl_connection = purple_ssl_connect(account, gfud->website.address, gfud->website.port, ssl_url_fetch_connect_cb, ssl_url_fetch_error_cb, gfud); } else { - gfud->connect_data = purple_proxy_connect(NULL, NULL, + gfud->connect_data = purple_proxy_connect(NULL, account, gfud->website.address, gfud->website.port, url_fetch_connect_cb, gfud); } @@ -4384,6 +4424,37 @@ return g_string_free(workstr, FALSE); } +gchar * +purple_utf8_strip_unprintables(const gchar *str) +{ + gchar *workstr, *iter; + + if (str == NULL) + /* Act like g_strdup */ + return NULL; + + g_return_val_if_fail(g_utf8_validate(str, -1, NULL), NULL); + + workstr = iter = g_new(gchar, strlen(str) + 1); + while (*str) { + gunichar c = g_utf8_get_char(str); + const gchar *next = g_utf8_next_char(str); + size_t len = next - str; + + if (g_unichar_isprint(c)) { + memcpy(iter, str, len); + iter += len; + } + + str = next; + } + + /* nul-terminate the new string */ + *iter = '\0'; + + return workstr; +} + /* * This function is copied from g_strerror() but changed to use * gai_strerror().
--- a/libpurple/util.h Fri May 22 00:38:45 2009 +0000 +++ b/libpurple/util.h Tue Jun 09 23:30:18 2009 +0000 @@ -506,8 +506,6 @@ * * @return The text with HTML entities literalized. You must g_free * this string when finished with it. - * - * @see purple_escape_html */ char *purple_unescape_html(const char *html); @@ -581,6 +579,16 @@ */ char * purple_markup_get_css_property(const gchar *style, const gchar *opt); +/** + * Check if the given HTML contains RTL text. + * + * @param html The HTML text. + * + * @return TRUE if the text contains RTL text, FALSE otherwise. + * + * @since 2.6.0 + */ +gboolean purple_markup_is_rtl(const char *html); /*@}*/ @@ -1106,9 +1114,33 @@ * @param max_len The maximum number of bytes to retrieve (-1 for unlimited) * @param callback The callback function. * @param data The user data to pass to the callback function. + * @deprecated In 3.0.0, this will go away. + */ +PurpleUtilFetchUrlData *purple_util_fetch_url_request_len(const gchar *url, + gboolean full, const gchar *user_agent, gboolean http11, + const gchar *request, gboolean include_headers, gssize max_len, + PurpleUtilFetchUrlCallback callback, gpointer data); + +/** + * Fetches the data from a URL, and passes it to a callback function. + * + * @param account The account for which the request is needed, or NULL. + * @param url The URL. + * @param full TRUE if this is the full URL, or FALSE if it's a + * partial URL. + * @param user_agent The user agent field to use, or NULL. + * @param http11 TRUE if HTTP/1.1 should be used to download the file. + * @param request A HTTP request to send to the server instead of the + * standard GET + * @param include_headers + * If TRUE, include the HTTP headers in the response. + * @param max_len The maximum number of bytes to retrieve (-1 for unlimited) + * @param callback The callback function. + * @param data The user data to pass to the callback function. * @deprecated In 3.0.0, we'll rename this to "purple_util_fetch_url_request" and get rid of the old one */ -PurpleUtilFetchUrlData *purple_util_fetch_url_request_len(const gchar *url, +PurpleUtilFetchUrlData *purple_util_fetch_url_request_len_with_account( + PurpleAccount *account, const gchar *url, gboolean full, const gchar *user_agent, gboolean http11, const gchar *request, gboolean include_headers, gssize max_len, PurpleUtilFetchUrlCallback callback, gpointer data); @@ -1216,6 +1248,22 @@ gchar *purple_utf8_salvage(const char *str); /** + * Removes unprintable characters from a UTF-8 string. These characters + * (in particular low-ASCII characters) are invalid in XML 1.0 and thus + * are not allowed in XMPP and are rejected by libxml2 by default. This + * function uses g_unichar_isprint to determine what characters should + * be stripped. The returned string must be freed by the caller. + * + * @param str A valid UTF-8 string. + * + * @return A newly allocated UTF-8 string without the unprintable characters. + * @since 2.6.0 + * + * @see g_unichar_isprint + */ +gchar *purple_utf8_strip_unprintables(const gchar *str); + +/** * Return the UTF-8 version of gai_strerror(). It calls gai_strerror() * then converts the result to UTF-8. This function is analogous to * g_strerror().
--- a/pidgin/gtkblist.c Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/gtkblist.c Tue Jun 09 23:30:18 2009 +0000 @@ -1611,8 +1611,9 @@ { PurpleBlistNode *node; GValue val; - GtkTreeIter iter; + GtkTreeIter iter, parent; GtkTreeSelection *sel; + GtkTreePath *path; sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv)); if(!gtk_tree_selection_get_selected(sel, NULL, &iter)) @@ -1636,8 +1637,62 @@ } if(buddy) pidgin_retrieve_user_info(buddy->account->gc, buddy->name); - } else if (event->keyval == GDK_F2) { - gtk_blist_menu_alias_cb(tv, node); + } else { + switch (event->keyval) { + case GDK_F2: + gtk_blist_menu_alias_cb(tv, node); + break; + + case GDK_Left: + path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter); + if (gtk_tree_view_row_expanded(GTK_TREE_VIEW(tv), path)) { + /* Collapse the Group */ + gtk_tree_view_collapse_row(GTK_TREE_VIEW(tv), path); + gtk_tree_path_free(path); + return TRUE; + } else { + /* Select the Parent */ + if (gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path)) { + if (gtk_tree_model_iter_parent(GTK_TREE_MODEL(gtkblist->treemodel), &parent, &iter)) { + gtk_tree_path_free(path); + path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &parent); + gtk_tree_view_set_cursor(GTK_TREE_VIEW(tv), path, NULL, FALSE); + gtk_tree_path_free(path); + return TRUE; + } + } + } + gtk_tree_path_free(path); + break; + + case GDK_Right: + path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter); + if (!gtk_tree_view_row_expanded(GTK_TREE_VIEW(tv), path)) { + /* Expand the Group */ + if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { + pidgin_blist_expand_contact_cb(NULL, node); + gtk_tree_path_free(path); + return TRUE; + } else if (!PURPLE_BLIST_NODE_IS_BUDDY(node)) { + gtk_tree_view_expand_row(GTK_TREE_VIEW(tv), path, FALSE); + gtk_tree_path_free(path); + return TRUE; + } + } else { + /* Select the First Child */ + if (gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &parent, path)) { + if (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(gtkblist->treemodel), &iter, &parent, 0)) { + gtk_tree_path_free(path); + path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter); + gtk_tree_view_set_cursor(GTK_TREE_VIEW(tv), path, NULL, FALSE); + gtk_tree_path_free(path); + return TRUE; + } + } + } + gtk_tree_path_free(path); + break; + } } return FALSE; @@ -5556,9 +5611,12 @@ gtkblist = PIDGIN_BLIST(list); priv = PIDGIN_BUDDY_LIST_GET_PRIVATE(gtkblist); + if (priv->current_theme) + g_object_unref(priv->current_theme); + theme_name = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/blist/theme"); if (theme_name && *theme_name) - priv->current_theme = PIDGIN_BLIST_THEME(purple_theme_manager_find_theme(theme_name, "blist")); + priv->current_theme = g_object_ref(PIDGIN_BLIST_THEME(purple_theme_manager_find_theme(theme_name, "blist"))); else priv->current_theme = NULL; @@ -6164,10 +6222,9 @@ if (count > 0 || purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_empty_groups")) show = TRUE; - else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { /* Or chat? */ - if (buddy_is_displayable((PurpleBuddy*)node)) - show = TRUE; - } else if (!show_offline && PURPLE_BLIST_NODE_IS_GROUP(node)) { + else if (PURPLE_BLIST_NODE_IS_BUDDY(node) && buddy_is_displayable((PurpleBuddy*)node)) { /* Or chat? */ + show = TRUE; + } else if (!show_offline) { show = pidgin_blist_group_has_show_offline_buddy(group); } @@ -6691,6 +6748,8 @@ gtkblist->arrow_cursor = NULL; priv = PIDGIN_BUDDY_LIST_GET_PRIVATE(gtkblist); + if (priv->current_theme) + g_object_unref(priv->current_theme); g_free(priv); g_free(gtkblist); @@ -7261,7 +7320,10 @@ else purple_prefs_set_string(PIDGIN_PREFS_ROOT "/blist/theme", ""); - priv->current_theme = theme; + if (priv->current_theme) + g_object_unref(priv->current_theme); + + priv->current_theme = theme ? g_object_ref(theme) : NULL; pidgin_blist_build_layout(list);
--- a/pidgin/gtkconv.c Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/gtkconv.c Tue Jun 09 23:30:18 2009 +0000 @@ -5629,38 +5629,6 @@ #endif } -/* Returns true if the given HTML contains RTL text */ -static gboolean -html_is_rtl(const char *html) -{ - GData *attributes; - const gchar *start, *end; - gboolean res = FALSE; - - if (purple_markup_find_tag("span", html, &start, &end, &attributes)) - { - /* tmp is a member of attributes and is free with g_datalist_clear call */ - const char *tmp = g_datalist_get_data(&attributes, "dir"); - if (tmp && !g_ascii_strcasecmp(tmp, "RTL")) - res = TRUE; - if (!res) - { - tmp = g_datalist_get_data(&attributes, "style"); - if (tmp) - { - char *tmp2 = purple_markup_get_css_property(tmp, "direction"); - if (tmp2 && !g_ascii_strcasecmp(tmp2, "RTL")) - res = TRUE; - g_free(tmp2); - } - - } - g_datalist_clear(&attributes); - } - return res; -} - - static void pidgin_conv_write_conv(PurpleConversation *conv, const char *name, const char *alias, const char *message, PurpleMessageFlags flags, @@ -5822,7 +5790,7 @@ } /* Bi-Directional support - set timestamp direction using unicode characters */ - is_rtl_message = html_is_rtl(message); + is_rtl_message = purple_markup_is_rtl(message); /* Enforce direction only if message is RTL - doesn't effect LTR users */ if (is_rtl_message) str_embed_direction_chars(&mdate);
--- a/pidgin/gtkdialogs.c Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/gtkdialogs.c Tue Jun 09 23:30:18 2009 +0000 @@ -74,7 +74,7 @@ static const struct developer developers[] = { {"Daniel 'datallah' Atallah", NULL, NULL}, {"Paul 'darkrain42' Aurich", NULL, NULL }, - {"John 'rekkanoryo' Bailey", N_("bug master"), "rekkanoryo@pidgin.im"}, + {"John 'rekkanoryo' Bailey", N_("bug master"), NULL}, {"Ethan 'Paco-Paco' Blanton", NULL, NULL}, {"Hylke Bons", N_("artist"), "h.bons@student.rug.nl"}, {"Thomas Butter", NULL, NULL}, @@ -186,6 +186,7 @@ {N_("Hebrew"), "he", "Shalom Craimer", "scraimer@gmail.com"}, {N_("Hindi"), "hi", "Ravishankar Shrivastava", "raviratlami@yahoo.com"}, {N_("Hungarian"), "hu", "Kelemen Gábor", "kelemeng@gnome.hu"}, + {N_("Armenian"), "hy", "David Avsharyan", "avsharyan@gmail.com"}, {N_("Indonesian"), "id", "Rai S. Regawa", "raireg@yahoo.com"}, {N_("Italian"), "it", "Claudio Satriano", "satriano@na.infn.it"}, {N_("Japanese"), "ja", "Takashi Aihana", "aihana@gnome.gr.jp"}, @@ -223,6 +224,7 @@ {N_("Sinhala"), "si", "Danishka Navin", "snavin@redhat.com"}, {N_("Sinhala"), "si", "Yajith Ajantha Dayarathna", "yajith@gmail.com"}, {N_("Swedish"), "sv", "Peter Hjalmarsson", "xake@telia.com"}, + {N_("Swahili"), "sw", "Paul Msegeya", "msegeya@gmail.com"}, {N_("Tamil"), "ta", "Viveka Nathan K", "vivekanathan@users.sourceforge.net"}, {N_("Telugu"), "te", "Mr. Subbaramaih", "info.gist@cdac.in"}, {N_("Thai"), "th", "Isriya Paireepairit", "markpeak@gmail.com"},
--- a/pidgin/gtkimhtml.c Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/gtkimhtml.c Tue Jun 09 23:30:18 2009 +0000 @@ -3867,12 +3867,15 @@ } static void -gtk_imhtml_custom_smiley_save(GtkWidget *w, GtkIMHtmlImage *image) -{ +gtk_imhtml_custom_smiley_save(GtkWidget *w, GtkIMHtmlImageSave *save) +{ + GtkIMHtmlImage *image = (GtkIMHtmlImage *)save->image; + /* Create an add dialog */ PidginSmiley *editor = pidgin_smiley_edit(NULL, NULL); pidgin_smiley_editor_set_shortcut(editor, image->filename); pidgin_smiley_editor_set_image(editor, image->pixbuf); + pidgin_smiley_editor_set_data(editor, save->data, save->datasize); } /* @@ -3907,7 +3910,7 @@ item = gtk_image_menu_item_new_with_mnemonic(_("_Add Custom Smiley...")); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img); g_signal_connect(G_OBJECT(item), "activate", - G_CALLBACK(gtk_imhtml_custom_smiley_save), image); + G_CALLBACK(gtk_imhtml_custom_smiley_save), save); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); } @@ -5062,6 +5065,7 @@ gtk_widget_show(img); g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_plaintext", text, g_free); g_object_set_data(G_OBJECT(anchor), "gtkimhtml_tiptext", text); + g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_htmltext", g_strdup(smiley), g_free); gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), ebox, anchor); } } else {
--- a/pidgin/gtkmain.c Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/gtkmain.c Tue Jun 09 23:30:18 2009 +0000 @@ -353,6 +353,7 @@ g_hash_table_insert(ui_info, "version", VERSION); g_hash_table_insert(ui_info, "website", "http://pidgin.im"); g_hash_table_insert(ui_info, "dev_website", "http://developer.pidgin.im"); + g_hash_table_insert(ui_info, "client_type", "pc"); } return ui_info;
--- a/pidgin/gtknotify.c Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/gtknotify.c Tue Jun 09 23:30:18 2009 +0000 @@ -120,7 +120,7 @@ { PIDGIN_NOTIFY_MAIL, PIDGIN_NOTIFY_POUNCE, - PIDGIN_NOTIFY_TYPES + PIDGIN_NOTIFY_TYPES } PidginNotifyType; static PidginNotifyDialog *mail_dialog = NULL; @@ -1379,7 +1379,6 @@ spec_dialog = g_new0(PidginNotifyDialog, 1); spec_dialog->dialog = dialog; - spec_dialog->open_button = button; spec_dialog->treemodel = treemodel; spec_dialog->treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(spec_dialog->treemodel)); @@ -1399,6 +1398,7 @@ button = gtk_dialog_add_button(GTK_DIALOG(dialog), PIDGIN_STOCK_OPEN_MAIL, GTK_RESPONSE_YES); + spec_dialog->open_button = button; gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(spec_dialog->treeview), FALSE); @@ -1496,7 +1496,7 @@ mail_dialog = spec_dialog; else if (type == PIDGIN_NOTIFY_POUNCE) { pounce_dialog = spec_dialog; - } + } return spec_dialog->dialog;
--- a/pidgin/gtkprefs.c Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/gtkprefs.c Tue Jun 09 23:30:18 2009 +0000 @@ -1163,14 +1163,15 @@ static void prefs_set_blist_theme_cb(GtkComboBox *combo_box, gpointer user_data) { - PidginBlistTheme *theme; + PidginBlistTheme *theme = NULL; GtkTreeIter iter; gchar *name = NULL; g_return_if_fail(gtk_combo_box_get_active_iter(combo_box, &iter)); gtk_tree_model_get(GTK_TREE_MODEL(prefs_blist_themes), &iter, 2, &name, -1); - theme = PIDGIN_BLIST_THEME(purple_theme_manager_find_theme(name, "blist")); + if (name && *name) + theme = PIDGIN_BLIST_THEME(purple_theme_manager_find_theme(name, "blist")); g_free(name); pidgin_blist_set_theme(theme);
--- a/pidgin/gtksmiley.c Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/gtksmiley.c Tue Jun 09 23:30:18 2009 +0000 @@ -47,6 +47,8 @@ GtkWidget *smiley_image; gchar *filename; GdkPixbuf *custom_pixbuf; + gpointer data; /** @since 2.6.0 */ + gsize datasize; /** @since 2.6.0 */ }; typedef struct @@ -277,7 +279,6 @@ purple_debug_info("gtksmiley", "adding a new smiley\n"); if (s->filename == NULL) { - /* Get the smiley from the custom pixbuf */ gchar *buffer = NULL; gsize size = 0; gchar *filename; @@ -296,8 +297,16 @@ } } - gdk_pixbuf_save_to_buffer(s->custom_pixbuf, &buffer, &size, - "png", NULL, "compression", "9", NULL, NULL); + if (s->data && s->datasize) { + /* Cached data & size in memory */ + buffer = s->data; + size = s->datasize; + } + else { + /* Get the smiley from the custom pixbuf */ + gdk_pixbuf_save_to_buffer(s->custom_pixbuf, &buffer, &size, + "png", NULL, "compression", "9", NULL, NULL); + } filename = purple_util_get_image_filename(buffer, size); s->filename = g_build_filename(dirname, filename, NULL); purple_util_write_data_to_file_absolute(s->filename, buffer, size); @@ -465,6 +474,13 @@ gtk_image_set_from_pixbuf(GTK_IMAGE(editor->smiley_image), image); } +void +pidgin_smiley_editor_set_data(PidginSmiley *editor, gpointer *data, gsize datasize) +{ + editor->data = data; + editor->datasize = datasize; +} + /****************************************************************************** * Delete smiley *****************************************************************************/
--- a/pidgin/gtksmiley.h Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/gtksmiley.h Tue Jun 09 23:30:18 2009 +0000 @@ -100,4 +100,15 @@ */ void pidgin_smiley_editor_set_image(PidginSmiley *editor, GdkPixbuf *image); +/** + * Sets the image data in a smiley add dialog + * + * @param editor A smiley editor dialog + * @param data A pointer to smiley's data + * @param datasize The size of smiley's data + * + * @since 2.6.0 + */ +void pidgin_smiley_editor_set_data(PidginSmiley *editor, gpointer *data, gsize datasize); + #endif /* PIDGIN_GTKSMILEY_H */
--- a/pidgin/gtkutils.c Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/gtkutils.c Tue Jun 09 23:30:18 2009 +0000 @@ -525,7 +525,7 @@ GtkWidget *item = gtk_menu_get_active(GTK_MENU(menu)); if (p_item) (*p_item) = item; - return g_object_get_data(G_OBJECT(item), "aop_per_item_data"); + return item ? g_object_get_data(G_OBJECT(item), "aop_per_item_data") : NULL; } static void
--- a/pidgin/pidginstock.c Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/pidginstock.c Tue Jun 09 23:30:18 2009 +0000 @@ -114,120 +114,121 @@ }; typedef struct { - const char *name; - const char *dir; - const char *filename; - gboolean microscopic; - gboolean extra_small; - gboolean small; - gboolean medium; - gboolean large; - gboolean huge; - gboolean rtl; - const char *translucent_name; + const char *name; + const char *dir; + const char *filename; + gboolean microscopic; + gboolean extra_small; + gboolean small; + gboolean medium; + gboolean large; + gboolean huge; + gboolean rtl; + const char *translucent_name; } SizedStockIcon; const SizedStockIcon sized_stock_icons [] = { - { PIDGIN_STOCK_STATUS_IGNORED, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_STATUS_FOUNDER, "emblems", "founder.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_STATUS_OPERATOR, "emblems", "operator.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_STATUS_HALFOP, "emblems", "half-operator.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_STATUS_VOICE, "emblems", "voice.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_IGNORED, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_FOUNDER, "emblems", "founder.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_OPERATOR, "emblems", "operator.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_HALFOP, "emblems", "half-operator.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_VOICE, "emblems", "voice.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_DIALOG_AUTH, "dialogs", "auth.png", FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, - { PIDGIN_STOCK_DIALOG_COOL, "dialogs", "cool.png", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, - { PIDGIN_STOCK_DIALOG_ERROR, "dialogs", "error.png", FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, - { PIDGIN_STOCK_DIALOG_INFO, "dialogs", "info.png", FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, - { PIDGIN_STOCK_DIALOG_MAIL, "dialogs", "mail.png", FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, - { PIDGIN_STOCK_DIALOG_QUESTION, "dialogs", "question.png", FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, - { PIDGIN_STOCK_DIALOG_WARNING, "dialogs", "warning.png", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, + { PIDGIN_STOCK_DIALOG_AUTH, "dialogs", "auth.png", FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, + { PIDGIN_STOCK_DIALOG_COOL, "dialogs", "cool.png", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, + { PIDGIN_STOCK_DIALOG_ERROR, "dialogs", "error.png", FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, + { PIDGIN_STOCK_DIALOG_INFO, "dialogs", "info.png", FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, + { PIDGIN_STOCK_DIALOG_MAIL, "dialogs", "mail.png", FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, + { PIDGIN_STOCK_DIALOG_QUESTION, "dialogs", "question.png", FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, + { PIDGIN_STOCK_DIALOG_WARNING, "dialogs", "warning.png", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT0, "animations", "process-working0.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT1, "animations", "process-working1.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT2, "animations", "process-working2.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT3, "animations", "process-working3.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT4, "animations", "process-working4.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT5, "animations", "process-working5.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT6, "animations", "process-working6.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT7, "animations", "process-working7.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT8, "animations", "process-working8.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT9, "animations", "process-working9.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT10, "animations", "process-working10.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT11, "animations", "process-working11.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT12, "animations", "process-working12.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT13, "animations", "process-working13.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT14, "animations", "process-working14.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT15, "animations", "process-working15.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT16, "animations", "process-working16.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT17, "animations", "process-working17.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT18, "animations", "process-working18.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT19, "animations", "process-working19.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT20, "animations", "process-working20.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT21, "animations", "process-working21.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT22, "animations", "process-working22.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT23, "animations", "process-working23.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT24, "animations", "process-working24.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT25, "animations", "process-working25.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT26, "animations", "process-working26.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT27, "animations", "process-working27.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT28, "animations", "process-working28.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT29, "animations", "process-working29.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT30, "animations", "process-working30.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_TYPING0, "animations", "typing0.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_TYPING1, "animations", "typing1.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_TYPING2, "animations", "typing2.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_TYPING3, "animations", "typing3.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_TYPING4, "animations", "typing4.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_TYPING5, "animations", "typing5.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT0, "animations", "process-working0.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT1, "animations", "process-working1.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT2, "animations", "process-working2.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT3, "animations", "process-working3.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT4, "animations", "process-working4.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT5, "animations", "process-working5.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT6, "animations", "process-working6.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT7, "animations", "process-working7.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT8, "animations", "process-working8.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT9, "animations", "process-working9.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT10, "animations", "process-working10.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT11, "animations", "process-working11.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT12, "animations", "process-working12.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT13, "animations", "process-working13.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT14, "animations", "process-working14.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT15, "animations", "process-working15.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT16, "animations", "process-working16.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT17, "animations", "process-working17.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT18, "animations", "process-working18.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT19, "animations", "process-working19.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT20, "animations", "process-working20.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT21, "animations", "process-working21.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT22, "animations", "process-working22.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT23, "animations", "process-working23.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT24, "animations", "process-working24.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT25, "animations", "process-working25.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT26, "animations", "process-working26.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT27, "animations", "process-working27.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT28, "animations", "process-working28.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT29, "animations", "process-working29.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT30, "animations", "process-working30.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_BGCOLOR, "toolbar", "change-bgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_BLOCK, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_FGCOLOR, "toolbar", "change-fgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_SMILEY, "toolbar", "emote-select.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_FONT_FACE, "toolbar", "font-face.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, "toolbar", "font-size-down.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, "toolbar", "font-size-up.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_INSERT, "toolbar", "insert.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, "toolbar", "insert-image.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_INSERT_LINK, "toolbar", "insert-link.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, "toolbar", "message-new.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_PENDING, "toolbar", "message-new.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_PLUGINS, "toolbar", "plugins.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_UNBLOCK, "toolbar", "unblock.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR, "toolbar", "select-avatar.png", FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_SEND_FILE, "toolbar", "send-file.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_TRANSFER, "toolbar", "transfer.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_TYPING0, "animations", "typing0.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_TYPING1, "animations", "typing1.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_TYPING2, "animations", "typing2.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_TYPING3, "animations", "typing3.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_TYPING4, "animations", "typing4.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_TYPING5, "animations", "typing5.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + + { PIDGIN_STOCK_TOOLBAR_BGCOLOR, "toolbar", "change-bgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_BLOCK, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_FGCOLOR, "toolbar", "change-fgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_SMILEY, "toolbar", "emote-select.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_FONT_FACE, "toolbar", "font-face.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, "toolbar", "font-size-down.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, "toolbar", "font-size-up.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_INSERT, "toolbar", "insert.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, "toolbar", "insert-image.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_INSERT_LINK, "toolbar", "insert-link.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, "toolbar", "message-new.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_PENDING, "toolbar", "message-new.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_PLUGINS, "toolbar", "plugins.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_UNBLOCK, "toolbar", "unblock.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR, "toolbar", "select-avatar.png", FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_SEND_FILE, "toolbar", "send-file.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_TRANSFER, "toolbar", "transfer.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, #ifdef USE_VV - { PIDGIN_STOCK_TOOLBAR_AUDIO_CALL, "toolbar", "audio-call.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_VIDEO_CALL, "toolbar", "video-call.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_AUDIO_VIDEO_CALL, "toolbar", "audio-video-call.png", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_AUDIO_CALL, "toolbar", "audio-call.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_VIDEO_CALL, "toolbar", "video-call.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_AUDIO_VIDEO_CALL, "toolbar", "audio-video-call.png", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, #endif }; const SizedStockIcon sized_status_icons [] = { - { PIDGIN_STOCK_STATUS_AVAILABLE, "status", "available.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AVAILABLE_I }, - { PIDGIN_STOCK_STATUS_AWAY, "status", "away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AWAY_I }, - { PIDGIN_STOCK_STATUS_BUSY, "status", "busy.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_BUSY_I }, - { PIDGIN_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_STATUS_INVISIBLE, "status", "invisible.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_STATUS_XA, "status", "extended-away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, PIDGIN_STOCK_STATUS_XA_I }, - { PIDGIN_STOCK_STATUS_LOGIN, "status", "log-in.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, - { PIDGIN_STOCK_STATUS_LOGOUT, "status", "log-out.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, - { PIDGIN_STOCK_STATUS_OFFLINE, "status", "offline.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_OFFLINE_I }, - { PIDGIN_STOCK_STATUS_PERSON, "status", "person.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_STATUS_MESSAGE, "toolbar", "message-new.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_AVAILABLE, "status", "available.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AVAILABLE_I }, + { PIDGIN_STOCK_STATUS_AWAY, "status", "away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AWAY_I }, + { PIDGIN_STOCK_STATUS_BUSY, "status", "busy.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_BUSY_I }, + { PIDGIN_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_INVISIBLE, "status", "invisible.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_XA, "status", "extended-away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, PIDGIN_STOCK_STATUS_XA_I }, + { PIDGIN_STOCK_STATUS_LOGIN, "status", "log-in.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, + { PIDGIN_STOCK_STATUS_LOGOUT, "status", "log-out.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, + { PIDGIN_STOCK_STATUS_OFFLINE, "status", "offline.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_OFFLINE_I }, + { PIDGIN_STOCK_STATUS_PERSON, "status", "person.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_MESSAGE, "toolbar", "message-new.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_INVISIBLE, "tray", "tray-invisible.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_AWAY, "tray", "tray-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_BUSY, "tray", "tray-busy.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_XA, "tray", "tray-extended-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_OFFLINE, "tray", "tray-offline.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-new-im.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_EMAIL, "tray", "tray-message.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL } + { PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_INVISIBLE, "tray", "tray-invisible.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_AWAY, "tray", "tray-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_BUSY, "tray", "tray-busy.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_XA, "tray", "tray-extended-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_OFFLINE, "tray", "tray-offline.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-new-im.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_EMAIL, "tray", "tray-message.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL } }; /***************************************************************************** @@ -287,36 +288,36 @@ static void do_alphashift(GdkPixbuf *dest, GdkPixbuf *src) { - gint i, j; - gint width, height, has_alpha, srcrowstride, destrowstride; - guchar *target_pixels; - guchar *original_pixels; - guchar *pixsrc; - guchar *pixdest; - guchar a; + gint i, j; + gint width, height, has_alpha, srcrowstride, destrowstride; + guchar *target_pixels; + guchar *original_pixels; + guchar *pixsrc; + guchar *pixdest; + guchar a; - has_alpha = gdk_pixbuf_get_has_alpha (src); - if (!has_alpha) - return; + has_alpha = gdk_pixbuf_get_has_alpha (src); + if (!has_alpha) + return; - width = gdk_pixbuf_get_width (src); - height = gdk_pixbuf_get_height (src); - srcrowstride = gdk_pixbuf_get_rowstride (src); - destrowstride = gdk_pixbuf_get_rowstride (dest); - target_pixels = gdk_pixbuf_get_pixels (dest); - original_pixels = gdk_pixbuf_get_pixels (src); + width = gdk_pixbuf_get_width (src); + height = gdk_pixbuf_get_height (src); + srcrowstride = gdk_pixbuf_get_rowstride (src); + destrowstride = gdk_pixbuf_get_rowstride (dest); + target_pixels = gdk_pixbuf_get_pixels (dest); + original_pixels = gdk_pixbuf_get_pixels (src); - for (i = 0; i < height; i++) { - pixdest = target_pixels + i*destrowstride; - pixsrc = original_pixels + i*srcrowstride; - for (j = 0; j < width; j++) { - *(pixdest++) = *(pixsrc++); - *(pixdest++) = *(pixsrc++); - *(pixdest++) = *(pixsrc++); - a = *(pixsrc++); - *(pixdest++) = a / 2; - } - } + for (i = 0; i < height; i++) { + pixdest = target_pixels + i*destrowstride; + pixsrc = original_pixels + i*srcrowstride; + for (j = 0; j < width; j++) { + *(pixdest++) = *(pixsrc++); + *(pixdest++) = *(pixsrc++); + *(pixdest++) = *(pixsrc++); + a = *(pixsrc++); + *(pixdest++) = a / 2; + } + } } static gchar * @@ -434,9 +435,9 @@ if (theme != NULL) { purple_prefs_set_string(PIDGIN_PREFS_ROOT "/status/icon-theme", - purple_theme_get_name(PURPLE_THEME(theme))); + purple_theme_get_name(PURPLE_THEME(theme))); purple_prefs_set_path(PIDGIN_PREFS_ROOT "/status/icon-theme-dir", - purple_theme_get_dir(PURPLE_THEME(theme))); + purple_theme_get_dir(PURPLE_THEME(theme))); } else { purple_prefs_set_string(PIDGIN_PREFS_ROOT "/status/icon-theme", ""); @@ -456,11 +457,12 @@ if (sized_status_icons[i].translucent_name) translucent = gtk_icon_set_new(); -#define ADD_SIZED_ICON(name, size) if (sized_status_icons[i].name) { \ - add_sized_icon(normal, name, PIDGIN_ICON_THEME(theme), size, sized_status_icons[i], FALSE); \ - if (sized_status_icons[i].translucent_name) \ - add_sized_icon(translucent, name, PIDGIN_ICON_THEME(theme), size, sized_status_icons[i], TRUE); \ - } +#define ADD_SIZED_ICON(name, size) \ + if (sized_status_icons[i].name) { \ + add_sized_icon(normal, name, PIDGIN_ICON_THEME(theme), size, sized_status_icons[i], FALSE); \ + if (sized_status_icons[i].translucent_name) \ + add_sized_icon(translucent, name, PIDGIN_ICON_THEME(theme), size, sized_status_icons[i], TRUE); \ + } ADD_SIZED_ICON(microscopic, "11"); ADD_SIZED_ICON(extra_small, "16"); ADD_SIZED_ICON(small, "22"); @@ -478,7 +480,6 @@ } } - gtk_widget_destroy(win); g_object_unref(G_OBJECT(icon_factory)); reload_settings(); @@ -493,9 +494,9 @@ if (theme != NULL) { purple_prefs_set_string(PIDGIN_PREFS_ROOT "/stock/icon-theme", - purple_theme_get_name(PURPLE_THEME(theme))); + purple_theme_get_name(PURPLE_THEME(theme))); purple_prefs_set_path(PIDGIN_PREFS_ROOT "/stock/icon-theme-dir", - purple_theme_get_dir(PURPLE_THEME(theme))); + purple_theme_get_dir(PURPLE_THEME(theme))); } else { purple_prefs_set_string(PIDGIN_PREFS_ROOT "/stock/icon-theme", ""); @@ -548,8 +549,9 @@ { GtkIconSet *iconset = gtk_icon_set_new(); -#define ADD_SIZED_ICON(name, size) if (sized_stock_icons[i].name) \ - add_sized_icon(iconset, name, PIDGIN_ICON_THEME(theme), size, sized_stock_icons[i], FALSE); +#define ADD_SIZED_ICON(name, size) \ + if (sized_stock_icons[i].name) \ + add_sized_icon(iconset, name, PIDGIN_ICON_THEME(theme), size, sized_stock_icons[i], FALSE); ADD_SIZED_ICON(microscopic, "11"); ADD_SIZED_ICON(extra_small, "16"); ADD_SIZED_ICON(small, "22"); @@ -592,10 +594,10 @@ /* register custom icon sizes */ microscopic = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC, 11, 11); extra_small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL, 16, 16); - small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_SMALL, 22, 22); - medium = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MEDIUM, 32, 32); - large = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_LARGE, 48, 48); - huge = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_HUGE, 64, 64); + small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_SMALL, 22, 22); + medium = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MEDIUM, 32, 32); + large = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_LARGE, 48, 48); + huge = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_HUGE, 64, 64); pidgin_stock_load_stock_icon_theme(NULL); @@ -607,7 +609,9 @@ pidgin_stock_load_status_icon_theme(theme); g_object_unref(G_OBJECT(theme)); - } else pidgin_stock_load_status_icon_theme(NULL); + } + else + pidgin_stock_load_status_icon_theme(NULL); /* Register the stock items. */ gtk_stock_add_static(stock_items, G_N_ELEMENTS(stock_items));
--- a/pidgin/plugins/Makefile.am Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/plugins/Makefile.am Tue Jun 09 23:30:18 2009 +0000 @@ -1,4 +1,4 @@ -DIST_SUBDIRS = cap gestures gevolution musicmessaging perl ticker +DIST_SUBDIRS = cap disco gestures gevolution musicmessaging perl ticker if BUILD_GEVOLUTION GEVOLUTION_DIR = gevolution @@ -26,6 +26,7 @@ $(GEVOLUTION_DIR) \ $(MUSICMESSAGING_DIR) \ $(PERL_DIR) \ + disco \ ticker plugindir = $(libdir)/pidgin
--- a/pidgin/plugins/convcolors.c Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/plugins/convcolors.c Tue Jun 09 23:30:18 2009 +0000 @@ -101,6 +101,7 @@ gboolean bold, italic, underline; int f; const char *color; + gboolean rtl = FALSE; for (i = 0; formats[i].prefix; i++) if (flags & formats[i].flag) @@ -126,6 +127,7 @@ bold = (f & FONT_BOLD); italic = (f & FONT_ITALIC); underline = (f & FONT_UNDERLINE); + rtl = purple_markup_is_rtl(*displaying); if (purple_prefs_get_bool(PREF_IGNORE)) { @@ -156,11 +158,13 @@ } t = *displaying; - *displaying = g_strdup_printf("%s%s%s%s%s%s%s", + *displaying = g_strdup_printf("%s%s%s%s%s%s%s%s%s", bold ? "<B>" : "</B>", italic ? "<I>" : "</I>", underline ? "<U>" : "</U>", - t, + rtl ? "<SPAN style=\"direction:rtl;text-align:right;\">" : "", + t, + rtl ? "</SPAN>" : "", bold ? "</B>" : "<B>", italic ? "</I>" : "<I>", underline ? "</U>" : "<U>"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/plugins/disco/Makefile.am Tue Jun 09 23:30:18 2009 +0000 @@ -0,0 +1,23 @@ +plugindir = $(libdir)/pidgin + +xmppdisco_la_LDFLAGS = -module -avoid-version + +if PLUGINS + +plugin_LTLIBRARIES = xmppdisco.la + +xmppdisco_la_SOURCES = \ + gtkdisco.c \ + xmppdisco.c + +xmppdisco_la_LIBADD = $(GTK_LIBS) + +endif + +AM_CPPFLAGS = \ + -DDATADIR=\"$(datadir)\" \ + -I$(top_srcdir)/libpurple \ + -I$(top_builddir)/libpurple \ + -I$(top_srcdir)/pidgin \ + $(DEBUG_CFLAGS) \ + $(GTK_CFLAGS)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/plugins/disco/gtkdisco.c Tue Jun 09 23:30:18 2009 +0000 @@ -0,0 +1,754 @@ +/** + * @file gtkdisco.c GTK+ Service Discovery UI + * @ingroup pidgin + */ + +/* pidgin + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include "internal.h" +#include "debug.h" +#include "gtkutils.h" +#include "pidgin.h" +#include "request.h" +#include "pidgintooltip.h" + +#include "gtkdisco.h" +#include "xmppdisco.h" + +GList *dialogs = NULL; + +enum { + PIXBUF_COLUMN = 0, + NAME_COLUMN, + DESCRIPTION_COLUMN, + SERVICE_COLUMN, + NUM_OF_COLUMNS +}; + +static void +pidgin_disco_list_destroy(PidginDiscoList *list) +{ + g_hash_table_destroy(list->services); + if (list->dialog && list->dialog->discolist == list) + list->dialog->discolist = NULL; + + if (list->tree) { + gtk_widget_destroy(list->tree); + list->tree = NULL; + } + + g_free((gchar*)list->server); + g_free(list); +} + +PidginDiscoList *pidgin_disco_list_ref(PidginDiscoList *list) +{ + g_return_val_if_fail(list != NULL, NULL); + + ++list->ref; + purple_debug_misc("xmppdisco", "reffing list, ref count now %d\n", list->ref); + + return list; +} + +void pidgin_disco_list_unref(PidginDiscoList *list) +{ + g_return_if_fail(list != NULL); + + --list->ref; + + purple_debug_misc("xmppdisco", "unreffing list, ref count now %d\n", list->ref); + if (list->ref == 0) + pidgin_disco_list_destroy(list); +} + +void pidgin_disco_list_set_in_progress(PidginDiscoList *list, gboolean in_progress) +{ + PidginDiscoDialog *dialog = list->dialog; + + if (!dialog) + return; + + list->in_progress = in_progress; + + if (in_progress) { + gtk_widget_set_sensitive(dialog->account_widget, FALSE); + gtk_widget_set_sensitive(dialog->stop_button, TRUE); + gtk_widget_set_sensitive(dialog->browse_button, FALSE); + } else { + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(dialog->progress), 0.0); + + gtk_widget_set_sensitive(dialog->account_widget, TRUE); + + gtk_widget_set_sensitive(dialog->stop_button, FALSE); + gtk_widget_set_sensitive(dialog->browse_button, TRUE); +/* + gtk_widget_set_sensitive(dialog->register_button, FALSE); + gtk_widget_set_sensitive(dialog->add_button, FALSE); +*/ + } +} + +static void pidgin_disco_create_tree(PidginDiscoList *pdl); + +static void dialog_select_account_cb(GObject *w, PurpleAccount *account, + PidginDiscoDialog *dialog) +{ + dialog->account = account; + gtk_widget_set_sensitive(dialog->browse_button, account != NULL); +} + +static void register_button_cb(GtkWidget *unused, PidginDiscoDialog *dialog) +{ + xmpp_disco_service_register(dialog->selected); +} + +static void discolist_cancel_cb(PidginDiscoList *pdl, const char *server) +{ + pidgin_disco_list_set_in_progress(pdl, FALSE); + pidgin_disco_list_unref(pdl); +} + +static void discolist_ok_cb(PidginDiscoList *pdl, const char *server) +{ + gtk_widget_set_sensitive(pdl->dialog->browse_button, TRUE); + + if (!server || !*server) { + purple_notify_error(my_plugin, _("Invalid Server"), _("Invalid Server"), + NULL); + + pidgin_disco_list_set_in_progress(pdl, FALSE); + pidgin_disco_list_unref(pdl); + return; + } + + pdl->server = g_strdup(server); + pidgin_disco_list_set_in_progress(pdl, TRUE); + xmpp_disco_start(pdl); +} + +static void browse_button_cb(GtkWidget *button, PidginDiscoDialog *dialog) +{ + PurpleConnection *pc; + PidginDiscoList *pdl; + const char *username; + const char *at, *slash; + char *server = NULL; + + pc = purple_account_get_connection(dialog->account); + if (!pc) + return; + + gtk_widget_set_sensitive(dialog->browse_button, FALSE); + gtk_widget_set_sensitive(dialog->add_button, FALSE); + gtk_widget_set_sensitive(dialog->register_button, FALSE); + + if (dialog->discolist != NULL) { + if (dialog->discolist->tree) { + gtk_widget_destroy(dialog->discolist->tree); + dialog->discolist->tree = NULL; + } + pidgin_disco_list_unref(dialog->discolist); + } + + pdl = dialog->discolist = g_new0(PidginDiscoList, 1); + pdl->services = g_hash_table_new_full(NULL, NULL, NULL, + (GDestroyNotify)gtk_tree_row_reference_free); + pdl->pc = pc; + /* We keep a copy... */ + pidgin_disco_list_ref(pdl); + + pdl->dialog = dialog; + pidgin_disco_create_tree(pdl); + + if (dialog->account_widget) + gtk_widget_set_sensitive(dialog->account_widget, FALSE); + + username = purple_account_get_username(dialog->account); + at = g_utf8_strchr(username, -1, '@'); + slash = g_utf8_strchr(username, -1, '/'); + if (at && !slash) { + server = g_strdup_printf("%s", at + 1); + } else if (at && slash && at + 1 < slash) { + server = g_strdup_printf("%.*s", (int)(slash - (at + 1)), at + 1); + } + + if (server == NULL) + /* This shouldn't ever happen since the account is connected */ + server = g_strdup("jabber.org"); + + purple_request_input(my_plugin, _("Server name request"), _("Enter an XMPP Server"), + _("Select an XMPP server to query"), + server, FALSE, FALSE, NULL, + _("Find Services"), PURPLE_CALLBACK(discolist_ok_cb), + _("Cancel"), PURPLE_CALLBACK(discolist_cancel_cb), + purple_connection_get_account(pc), NULL, NULL, pdl); + + g_free(server); +} + +static void add_to_blist_cb(GtkWidget *unused, PidginDiscoDialog *dialog) +{ + XmppDiscoService *service = dialog->selected; + PurpleAccount *account; + const char *jid; + + g_return_if_fail(service != NULL); + + account = purple_connection_get_account(service->list->pc); + jid = service->jid; + + if (service->type == XMPP_DISCO_SERVICE_TYPE_CHAT) + purple_blist_request_add_chat(account, NULL, NULL, jid); + else + purple_blist_request_add_buddy(account, jid, NULL, NULL); +} + +static gboolean +service_click_cb(GtkTreeView *tree, GdkEventButton *event, gpointer user_data) +{ + PidginDiscoList *pdl; + XmppDiscoService *service; + GtkWidget *menu; + + GtkTreePath *path; + GtkTreeIter iter; + GValue val; + + if (event->button != 3 || event->type != GDK_BUTTON_PRESS) + return FALSE; + + pdl = user_data; + + /* Figure out what was clicked */ + if (!gtk_tree_view_get_path_at_pos(tree, event->x, event->y, &path, + NULL, NULL, NULL)) + return FALSE; + gtk_tree_model_get_iter(GTK_TREE_MODEL(pdl->model), &iter, path); + gtk_tree_path_free(path); + val.g_type = 0; + gtk_tree_model_get_value(GTK_TREE_MODEL(pdl->model), &iter, SERVICE_COLUMN, + &val); + service = g_value_get_pointer(&val); + + if (!service) + return FALSE; + + menu = gtk_menu_new(); + + if (service->flags & XMPP_DISCO_ADD) + pidgin_new_item_from_stock(menu, _("Add to Buddy List"), GTK_STOCK_ADD, + G_CALLBACK(add_to_blist_cb), pdl->dialog, + 0, 0, NULL); + + if (service->flags & XMPP_DISCO_REGISTER) { + GtkWidget *item = pidgin_new_item(menu, _("Register")); + g_signal_connect(G_OBJECT(item), "activate", + G_CALLBACK(register_button_cb), pdl->dialog); + } + + gtk_widget_show_all(menu); + gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, + event->time); + return FALSE; +} + +static void +selection_changed_cb(GtkTreeSelection *selection, PidginDiscoList *pdl) +{ + GtkTreeIter iter; + GValue val; + PidginDiscoDialog *dialog = pdl->dialog; + + if (gtk_tree_selection_get_selected(selection, NULL, &iter)) { + val.g_type = 0; + gtk_tree_model_get_value(GTK_TREE_MODEL(pdl->model), &iter, SERVICE_COLUMN, &val); + dialog->selected = g_value_get_pointer(&val); + if (!dialog->selected) { + gtk_widget_set_sensitive(dialog->add_button, FALSE); + gtk_widget_set_sensitive(dialog->register_button, FALSE); + return; + } + + gtk_widget_set_sensitive(dialog->add_button, dialog->selected->flags & XMPP_DISCO_ADD); + gtk_widget_set_sensitive(dialog->register_button, dialog->selected->flags & XMPP_DISCO_REGISTER); + } else { + gtk_widget_set_sensitive(dialog->add_button, FALSE); + gtk_widget_set_sensitive(dialog->register_button, FALSE); + } +} + +static void +row_expanded_cb(GtkTreeView *tree, GtkTreeIter *arg1, GtkTreePath *rg2, + gpointer user_data) +{ + PidginDiscoList *pdl; + XmppDiscoService *service; + GValue val; + + pdl = user_data; + + val.g_type = 0; + gtk_tree_model_get_value(GTK_TREE_MODEL(pdl->model), arg1, SERVICE_COLUMN, + &val); + service = g_value_get_pointer(&val); + xmpp_disco_service_expand(service); +} + +static void +row_activated_cb(GtkTreeView *tree_view, + GtkTreePath *path, + GtkTreeViewColumn *column, + gpointer user_data) +{ + PidginDiscoList *pdl = user_data; + GtkTreeIter iter; + XmppDiscoService *service; + GValue val; + + if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(pdl->model), &iter, path)) + return; + + val.g_type = 0; + gtk_tree_model_get_value(GTK_TREE_MODEL(pdl->model), &iter, SERVICE_COLUMN, + &val); + service = g_value_get_pointer(&val); + + if (service->flags & XMPP_DISCO_BROWSE) + if (gtk_tree_view_row_expanded(GTK_TREE_VIEW(pdl->tree), path)) + gtk_tree_view_collapse_row(GTK_TREE_VIEW(pdl->tree), path); + else + gtk_tree_view_expand_row(GTK_TREE_VIEW(pdl->tree), path, FALSE); + else if (service->flags & XMPP_DISCO_REGISTER) + register_button_cb(NULL, pdl->dialog); + else if (service->flags & XMPP_DISCO_ADD) + add_to_blist_cb(NULL, pdl->dialog); +} + +static void +destroy_win_cb(GtkWidget *window, gpointer d) +{ + PidginDiscoDialog *dialog = d; + PidginDiscoList *list = dialog->discolist; + + if (list) { + list->dialog = NULL; + + if (list->in_progress) + list->in_progress = FALSE; + + pidgin_disco_list_unref(list); + } + + dialogs = g_list_remove(dialogs, d); + g_free(dialog); +} + +static void stop_button_cb(GtkButton *button, PidginDiscoDialog *dialog) +{ + pidgin_disco_list_set_in_progress(dialog->discolist, FALSE); +} + +static void close_button_cb(GtkButton *button, PidginDiscoDialog *dialog) +{ + GtkWidget *window = dialog->window; + + gtk_widget_destroy(window); +} + +static gboolean account_filter_func(PurpleAccount *account) +{ + return purple_strequal(purple_account_get_protocol_id(account), XMPP_PLUGIN_ID); +} + +static gboolean +disco_paint_tooltip(GtkWidget *tipwindow, gpointer data) +{ + PangoLayout *layout = g_object_get_data(G_OBJECT(tipwindow), "tooltip-plugin"); + gtk_paint_layout(tipwindow->style, tipwindow->window, GTK_STATE_NORMAL, FALSE, + NULL, tipwindow, "tooltip", + 6, 6, layout); + return TRUE; +} + +static gboolean +disco_create_tooltip(GtkWidget *tipwindow, GtkTreePath *path, + gpointer data, int *w, int *h) +{ + PidginDiscoList *pdl = data; + GtkTreeIter iter; + PangoLayout *layout; + int width, height; + XmppDiscoService *service; + GValue val; + const char *type = NULL; + char *markup, *jid, *name, *desc = NULL; + + if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(pdl->model), &iter, path)) + return FALSE; + + val.g_type = 0; + gtk_tree_model_get_value(GTK_TREE_MODEL(pdl->model), &iter, SERVICE_COLUMN, + &val); + service = g_value_get_pointer(&val); + + switch (service->type) { + case XMPP_DISCO_SERVICE_TYPE_UNSET: + type = _("Unknown"); + break; + + case XMPP_DISCO_SERVICE_TYPE_GATEWAY: + type = _("Gateway"); + break; + + case XMPP_DISCO_SERVICE_TYPE_DIRECTORY: + type = _("Directory"); + break; + + case XMPP_DISCO_SERVICE_TYPE_CHAT: + type = _("Chat"); + break; + + case XMPP_DISCO_SERVICE_TYPE_PUBSUB_COLLECTION: + type = _("PubSub Collection"); + break; + + case XMPP_DISCO_SERVICE_TYPE_PUBSUB_LEAF: + type = _("PubSub Leaf"); + break; + + case XMPP_DISCO_SERVICE_TYPE_OTHER: + type = _("Other"); + break; + } + + markup = g_strdup_printf("<span size='x-large' weight='bold'>%s</span>\n<b>%s:</b> %s%s%s", + name = g_markup_escape_text(service->name, -1), + type, + jid = g_markup_escape_text(service->jid, -1), + service->description ? _("\n<b>Description:</b> ") : "", + service->description ? desc = g_markup_escape_text(service->description, -1) : ""); + + layout = gtk_widget_create_pango_layout(tipwindow, NULL); + pango_layout_set_markup(layout, markup, -1); + pango_layout_set_wrap(layout, PANGO_WRAP_WORD); + pango_layout_set_width(layout, 500000); + pango_layout_get_size(layout, &width, &height); + g_object_set_data_full(G_OBJECT(tipwindow), "tooltip-plugin", layout, g_object_unref); + + if (w) + *w = PANGO_PIXELS(width) + 12; + if (h) + *h = PANGO_PIXELS(height) + 12; + + g_free(markup); + g_free(jid); + g_free(name); + g_free(desc); + + return TRUE; +} + +static void pidgin_disco_create_tree(PidginDiscoList *pdl) +{ + GtkCellRenderer *text_renderer, *pixbuf_renderer; + GtkTreeViewColumn *column; + GtkTreeSelection *selection; + + pdl->model = gtk_tree_store_new(NUM_OF_COLUMNS, + GDK_TYPE_PIXBUF, /* PIXBUF_COLUMN */ + G_TYPE_STRING, /* NAME_COLUMN */ + G_TYPE_STRING, /* DESCRIPTION_COLUMN */ + G_TYPE_POINTER /* SERVICE_COLUMN */ + ); + + pdl->tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(pdl->model)); + gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(pdl->tree), TRUE); + + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(pdl->tree)); + g_signal_connect(G_OBJECT(selection), "changed", + G_CALLBACK(selection_changed_cb), pdl); + + g_object_unref(pdl->model); + + gtk_container_add(GTK_CONTAINER(pdl->dialog->sw), pdl->tree); + gtk_widget_show(pdl->tree); + + text_renderer = gtk_cell_renderer_text_new(); + pixbuf_renderer = gtk_cell_renderer_pixbuf_new(); + + column = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(column, _("Name")); + + gtk_tree_view_column_pack_start(column, pixbuf_renderer, FALSE); + gtk_tree_view_column_set_attributes(column, pixbuf_renderer, + "pixbuf", PIXBUF_COLUMN, NULL); + + gtk_tree_view_column_pack_start(column, text_renderer, TRUE); + gtk_tree_view_column_set_attributes(column, text_renderer, + "text", NAME_COLUMN, NULL); + + gtk_tree_view_column_set_sizing(GTK_TREE_VIEW_COLUMN(column), + GTK_TREE_VIEW_COLUMN_GROW_ONLY); + gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE); + gtk_tree_view_column_set_sort_column_id(GTK_TREE_VIEW_COLUMN(column), NAME_COLUMN); + gtk_tree_view_column_set_reorderable(GTK_TREE_VIEW_COLUMN(column), TRUE); + gtk_tree_view_append_column(GTK_TREE_VIEW(pdl->tree), column); + + column = gtk_tree_view_column_new_with_attributes(_("Description"), text_renderer, + "text", DESCRIPTION_COLUMN, NULL); + gtk_tree_view_column_set_sizing(GTK_TREE_VIEW_COLUMN(column), + GTK_TREE_VIEW_COLUMN_GROW_ONLY); + gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE); + gtk_tree_view_column_set_sort_column_id(GTK_TREE_VIEW_COLUMN(column), DESCRIPTION_COLUMN); + gtk_tree_view_column_set_reorderable(GTK_TREE_VIEW_COLUMN(column), TRUE); + gtk_tree_view_append_column(GTK_TREE_VIEW(pdl->tree), column); + + g_signal_connect(G_OBJECT(pdl->tree), "button-press-event", G_CALLBACK(service_click_cb), pdl); + g_signal_connect(G_OBJECT(pdl->tree), "row-expanded", G_CALLBACK(row_expanded_cb), pdl); + g_signal_connect(G_OBJECT(pdl->tree), "row-activated", G_CALLBACK(row_activated_cb), pdl); + + pidgin_tooltip_setup_for_treeview(pdl->tree, pdl, + disco_create_tooltip, + disco_paint_tooltip); +} + +void pidgin_disco_signed_off_cb(PurpleConnection *pc) +{ + GList *node; + + for (node = dialogs; node; node = node->next) { + PidginDiscoDialog *dialog = node->data; + PidginDiscoList *list = dialog->discolist; + + if (list && list->pc == pc) { + if (list->in_progress) + pidgin_disco_list_set_in_progress(list, FALSE); + + if (list->tree) { + gtk_widget_destroy(list->tree); + list->tree = NULL; + } + + pidgin_disco_list_unref(list); + dialog->discolist = NULL; + + gtk_widget_set_sensitive(dialog->browse_button, + pidgin_account_option_menu_get_selected(dialog->account_widget) != NULL); + + gtk_widget_set_sensitive(dialog->register_button, FALSE); + gtk_widget_set_sensitive(dialog->add_button, FALSE); + } + } +} + +void pidgin_disco_dialogs_destroy_all(void) +{ + while (dialogs) { + PidginDiscoDialog *dialog = dialogs->data; + + gtk_widget_destroy(dialog->window); + /* destroy_win_cb removes the dialog from the list */ + } +} + +PidginDiscoDialog *pidgin_disco_dialog_new(void) +{ + PidginDiscoDialog *dialog; + GtkWidget *window, *vbox, *vbox2, *bbox; + + dialog = g_new0(PidginDiscoDialog, 1); + dialogs = g_list_prepend(dialogs, dialog); + + /* Create the window. */ + dialog->window = window = pidgin_create_dialog(_("Service Discovery"), PIDGIN_HIG_BORDER, "service discovery", TRUE); + + g_signal_connect(G_OBJECT(window), "destroy", + G_CALLBACK(destroy_win_cb), dialog); + + /* Create the parent vbox for everything. */ + vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(window), FALSE, PIDGIN_HIG_BORDER); + + vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(vbox), vbox2); + gtk_widget_show(vbox2); + + /* accounts dropdown list */ + dialog->account_widget = pidgin_account_option_menu_new(NULL, FALSE, + G_CALLBACK(dialog_select_account_cb), account_filter_func, dialog); + dialog->account = pidgin_account_option_menu_get_selected(dialog->account_widget); + pidgin_add_widget_to_vbox(GTK_BOX(vbox2), _("_Account:"), NULL, dialog->account_widget, TRUE, NULL); + + /* scrolled window */ + dialog->sw = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(dialog->sw), + GTK_SHADOW_IN); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(dialog->sw), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_box_pack_start(GTK_BOX(vbox2), dialog->sw, TRUE, TRUE, 0); + gtk_widget_set_size_request(dialog->sw, -1, 250); + gtk_widget_show(dialog->sw); + + /* progress bar */ + dialog->progress = gtk_progress_bar_new(); + gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR(dialog->progress), 0.1); + gtk_box_pack_start(GTK_BOX(vbox2), dialog->progress, FALSE, FALSE, 0); + gtk_widget_show(dialog->progress); + + /* button box */ + bbox = pidgin_dialog_get_action_area(GTK_DIALOG(window)); + gtk_box_set_spacing(GTK_BOX(bbox), PIDGIN_HIG_BOX_SPACE); + gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); + + /* stop button */ + dialog->stop_button = + pidgin_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_STOP, + G_CALLBACK(stop_button_cb), dialog); + gtk_widget_set_sensitive(dialog->stop_button, FALSE); + + /* browse button */ + dialog->browse_button = + pidgin_pixbuf_button_from_stock(_("_Browse"), GTK_STOCK_REFRESH, + PIDGIN_BUTTON_HORIZONTAL); + gtk_box_pack_start(GTK_BOX(bbox), dialog->browse_button, FALSE, FALSE, 0); + g_signal_connect(G_OBJECT(dialog->browse_button), "clicked", + G_CALLBACK(browse_button_cb), dialog); + gtk_widget_set_sensitive(dialog->browse_button, dialog->account != NULL); + gtk_widget_show(dialog->browse_button); + + /* register button */ + dialog->register_button = + pidgin_dialog_add_button(GTK_DIALOG(dialog->window), _("Register"), + G_CALLBACK(register_button_cb), dialog); + gtk_widget_set_sensitive(dialog->register_button, FALSE); + + /* add button */ + dialog->add_button = + pidgin_pixbuf_button_from_stock(_("_Add"), GTK_STOCK_ADD, + PIDGIN_BUTTON_HORIZONTAL); + gtk_box_pack_start(GTK_BOX(bbox), dialog->add_button, FALSE, FALSE, 0); + g_signal_connect(G_OBJECT(dialog->add_button), "clicked", + G_CALLBACK(add_to_blist_cb), dialog); + gtk_widget_set_sensitive(dialog->add_button, FALSE); + gtk_widget_show(dialog->add_button); + + /* close button */ + dialog->close_button = + pidgin_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_CLOSE, + G_CALLBACK(close_button_cb), dialog); + + /* show the dialog window and return the dialog */ + gtk_widget_show(dialog->window); + + return dialog; +} + +void pidgin_disco_add_service(PidginDiscoList *pdl, XmppDiscoService *service, XmppDiscoService *parent) +{ + PidginDiscoDialog *dialog; + GtkTreeIter iter, parent_iter, child; + char *filename = NULL; + GdkPixbuf *pixbuf = NULL; + gboolean append = TRUE; + + dialog = pdl->dialog; + g_return_if_fail(dialog != NULL); + + if (service != NULL) + purple_debug_info("xmppdisco", "Adding service \"%s\"\n", service->name); + else + purple_debug_info("xmppdisco", "Service \"%s\" has no childrens\n", parent->name); + + gtk_progress_bar_pulse(GTK_PROGRESS_BAR(dialog->progress)); + + if (parent) { + GtkTreeRowReference *rr; + GtkTreePath *path; + + rr = g_hash_table_lookup(pdl->services, parent); + path = gtk_tree_row_reference_get_path(rr); + if (path) { + gtk_tree_model_get_iter(GTK_TREE_MODEL(pdl->model), &parent_iter, path); + gtk_tree_path_free(path); + + if (gtk_tree_model_iter_children(GTK_TREE_MODEL(pdl->model), &child, + &parent_iter)) { + PidginDiscoList *tmp; + gtk_tree_model_get(GTK_TREE_MODEL(pdl->model), &child, + SERVICE_COLUMN, &tmp, -1); + if (!tmp) + append = FALSE; + } + } + } + + if (service == NULL) { + if (parent != NULL && !append) + gtk_tree_store_remove(pdl->model, &child); + return; + } + + if (append) + gtk_tree_store_append(pdl->model, &iter, (parent ? &parent_iter : NULL)); + else + iter = child; + + if (service->flags & XMPP_DISCO_BROWSE) { + GtkTreeRowReference *rr; + GtkTreePath *path; + + gtk_tree_store_append(pdl->model, &child, &iter); + + path = gtk_tree_model_get_path(GTK_TREE_MODEL(pdl->model), &iter); + rr = gtk_tree_row_reference_new(GTK_TREE_MODEL(pdl->model), path); + g_hash_table_insert(pdl->services, service, rr); + gtk_tree_path_free(path); + } + + if (service->type == XMPP_DISCO_SERVICE_TYPE_GATEWAY && service->gateway_type) { + char *tmp = g_strconcat(service->gateway_type, ".png", NULL); + filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols", "16", tmp, NULL); + g_free(tmp); +#if 0 + } else if (service->type == XMPP_DISCO_SERVICE_TYPE_USER) { + filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "status", "16", "person.png", NULL); +#endif + } else if (service->type == XMPP_DISCO_SERVICE_TYPE_CHAT) + filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "status", "16", "chat.png", NULL); + + if (filename) { + pixbuf = gdk_pixbuf_new_from_file(filename, NULL); + g_free(filename); + } + + gtk_tree_store_set(pdl->model, &iter, + PIXBUF_COLUMN, pixbuf, + NAME_COLUMN, service->name, + DESCRIPTION_COLUMN, service->description, + SERVICE_COLUMN, service, + -1); + + if (pixbuf) + g_object_unref(pixbuf); +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/plugins/disco/gtkdisco.h Tue Jun 09 23:30:18 2009 +0000 @@ -0,0 +1,80 @@ +/* pidgin + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#ifndef PIDGIN_XMPP_DISCO_UI_H +#define PIDGIN_XMPP_DISCO_UI_H + +typedef struct _PidginDiscoDialog PidginDiscoDialog; +typedef struct _PidginDiscoList PidginDiscoList; + +#include "xmppdisco.h" + +struct _PidginDiscoDialog { + GtkWidget *window; + GtkWidget *account_widget; + + GtkWidget *sw; + GtkWidget *progress; + + GtkWidget *stop_button; + GtkWidget *browse_button; + GtkWidget *register_button; + GtkWidget *add_button; + GtkWidget *close_button; + XmppDiscoService *selected; + + PurpleAccount *account; + PidginDiscoList *discolist; +}; + +struct _PidginDiscoList { + PurpleConnection *pc; + gboolean in_progress; + const gchar *server; + + gint ref; + guint fetch_count; + + PidginDiscoDialog *dialog; + GtkTreeStore *model; + GtkWidget *tree; + GHashTable *services; +}; + +/** + * Shows a new service discovery dialog. + */ +PidginDiscoDialog *pidgin_disco_dialog_new(void); + +/** + * Destroy all the open dialogs (called when unloading the plugin). + */ +void pidgin_disco_dialogs_destroy_all(void); +void pidgin_disco_signed_off_cb(PurpleConnection *pc); + +void pidgin_disco_add_service(PidginDiscoList *list, XmppDiscoService *service, + XmppDiscoService *parent); + +PidginDiscoList *pidgin_disco_list_ref(PidginDiscoList *list); +void pidgin_disco_list_unref(PidginDiscoList *list); + +void pidgin_disco_list_set_in_progress(PidginDiscoList *list, gboolean in_progress); +#endif /* PIDGIN_XMPP_DISCO_UI_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/plugins/disco/xmppdisco.c Tue Jun 09 23:30:18 2009 +0000 @@ -0,0 +1,680 @@ +/* + * Purple - XMPP Service Disco Browser + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + * + */ + +/* TODO list (a little bit of a brain dump): + * Support more actions than "register" and "add" based on context. + - Subscribe to pubsub nodes (just...because?) + - Execute ad-hoc commands + - Change 'Register' to 'Unregister' if we're registered? + - Administer MUCs + * Enumerate pubsub node contents. + - PEP too? (useful development tool at times) + * See if we can better handle the ad-hoc commands that ejabberd returns + when disco'ing a server as an administrator: +from disco#items: + <item jid='darkrain42.org' node='announce' name='Announcements'/> +disco#info: + <iq from='darkrain42.org' type='result'> + <query xmlns='http://jabber.org/protocol/disco#info' node='announce'/> + </iq> + * For services that are a JID w/o a node, handle fetching ad-hoc commands? +*/ + +#include "internal.h" +#include "pidgin.h" + +#include "debug.h" +#include "signals.h" +#include "version.h" + +#include "gtkconv.h" +#include "gtkimhtml.h" +#include "gtkplugin.h" + +#include "xmppdisco.h" +#include "gtkdisco.h" + +/* Variables */ +PurplePlugin *my_plugin = NULL; +static GHashTable *iq_callbacks = NULL; +static gboolean iq_listening = FALSE; + +typedef void (*XmppIqCallback)(PurpleConnection *pc, const char *type, + const char *id, const char *from, xmlnode *iq, + gpointer data); + +struct xmpp_iq_cb_data +{ + gpointer context; + PurpleConnection *pc; + XmppIqCallback cb; +}; + +struct item_data { + PidginDiscoList *list; + XmppDiscoService *parent; + char *name; + char *node; /* disco#info replies don't always include the node */ +}; + +static char* +generate_next_id() +{ + static guint32 index = 0; + + if (index == 0) { + do { + index = g_random_int(); + } while (index == 0); + } + + return g_strdup_printf("purpledisco%x", index++); +} + +static gboolean +remove_iq_callbacks_by_pc(gpointer key, gpointer value, gpointer user_data) +{ + struct xmpp_iq_cb_data *cb_data = value; + + if (cb_data && cb_data->pc == user_data) { + /* + * This is a hack. All the IQ callback datas in this code are + * the same structure so that we can free them here. Ideally they'd + * be objects and this would be polymorphic. That's overkill, here. + */ + struct item_data *item_data = cb_data->context; + + if (item_data) { + pidgin_disco_list_unref(item_data->list); + g_free(item_data->name); + g_free(item_data->node); + g_free(item_data); + } + + return TRUE; + } else + return FALSE; +} + +static gboolean +xmpp_iq_received(PurpleConnection *pc, const char *type, const char *id, + const char *from, xmlnode *iq) +{ + struct xmpp_iq_cb_data *cb_data; + + cb_data = g_hash_table_lookup(iq_callbacks, id); + if (!cb_data) + return FALSE; + + cb_data->cb(cb_data->pc, type, id, from, iq, cb_data->context); + + g_hash_table_remove(iq_callbacks, id); + if (g_hash_table_size(iq_callbacks) == 0) { + PurplePlugin *prpl = purple_connection_get_prpl(pc); + iq_listening = FALSE; + purple_signal_disconnect(prpl, "jabber-receiving-iq", my_plugin, + PURPLE_CALLBACK(xmpp_iq_received)); + } + + /* Om nom nom nom */ + return TRUE; +} + +static void +xmpp_iq_register_callback(PurpleConnection *pc, gchar *id, gpointer data, + XmppIqCallback cb) +{ + struct xmpp_iq_cb_data *cbdata = g_new0(struct xmpp_iq_cb_data, 1); + + cbdata->context = data; + cbdata->cb = cb; + cbdata->pc = pc; + + g_hash_table_insert(iq_callbacks, id, cbdata); + + if (!iq_listening) { + PurplePlugin *prpl = purple_plugins_find_with_id(XMPP_PLUGIN_ID); + iq_listening = TRUE; + purple_signal_connect(prpl, "jabber-receiving-iq", my_plugin, + PURPLE_CALLBACK(xmpp_iq_received), NULL); + } +} + +static void +xmpp_disco_info_do(PurpleConnection *pc, gpointer cbdata, const char *jid, + const char *node, XmppIqCallback cb) +{ + xmlnode *iq, *query; + char *id = generate_next_id(); + + iq = xmlnode_new("iq"); + xmlnode_set_attrib(iq, "type", "get"); + xmlnode_set_attrib(iq, "to", jid); + xmlnode_set_attrib(iq, "id", id); + + query = xmlnode_new_child(iq, "query"); + xmlnode_set_namespace(query, NS_DISCO_INFO); + if (node) + xmlnode_set_attrib(query, "node", node); + + /* Steals id */ + xmpp_iq_register_callback(pc, id, cbdata, cb); + + purple_signal_emit(purple_connection_get_prpl(pc), "jabber-sending-xmlnode", + pc, &iq); + if (iq != NULL) + xmlnode_free(iq); +} + +static void +xmpp_disco_items_do(PurpleConnection *pc, gpointer cbdata, const char *jid, + const char *node, XmppIqCallback cb) +{ + xmlnode *iq, *query; + char *id = generate_next_id(); + + iq = xmlnode_new("iq"); + xmlnode_set_attrib(iq, "type", "get"); + xmlnode_set_attrib(iq, "to", jid); + xmlnode_set_attrib(iq, "id", id); + + query = xmlnode_new_child(iq, "query"); + xmlnode_set_namespace(query, NS_DISCO_ITEMS); + if (node) + xmlnode_set_attrib(query, "node", node); + + /* Steals id */ + xmpp_iq_register_callback(pc, id, cbdata, cb); + + purple_signal_emit(purple_connection_get_prpl(pc), "jabber-sending-xmlnode", + pc, &iq); + if (iq != NULL) + xmlnode_free(iq); +} + +static XmppDiscoServiceType +disco_service_type_from_identity(xmlnode *identity) +{ + const char *category, *type; + + if (!identity) + return XMPP_DISCO_SERVICE_TYPE_OTHER; + + category = xmlnode_get_attrib(identity, "category"); + type = xmlnode_get_attrib(identity, "type"); + + if (!category) + return XMPP_DISCO_SERVICE_TYPE_OTHER; + + if (g_str_equal(category, "conference")) + return XMPP_DISCO_SERVICE_TYPE_CHAT; + else if (g_str_equal(category, "directory")) + return XMPP_DISCO_SERVICE_TYPE_DIRECTORY; + else if (g_str_equal(category, "gateway")) + return XMPP_DISCO_SERVICE_TYPE_GATEWAY; + else if (g_str_equal(category, "pubsub")) { + if (!type || g_str_equal(type, "collection")) + return XMPP_DISCO_SERVICE_TYPE_PUBSUB_COLLECTION; + else if (g_str_equal(type, "leaf")) + return XMPP_DISCO_SERVICE_TYPE_PUBSUB_LEAF; + else if (g_str_equal(type, "service")) + return XMPP_DISCO_SERVICE_TYPE_OTHER; + else { + purple_debug_warning("xmppdisco", "Unknown pubsub type '%s'\n", type); + return XMPP_DISCO_SERVICE_TYPE_OTHER; + } + } + + return XMPP_DISCO_SERVICE_TYPE_OTHER; +} + +static const struct { + const char *from; + const char *to; +} disco_type_mappings[] = { + { "gadu-gadu", "gadu-gadu" }, /* the prpl is prpl-gg, but list_icon returns "gadu-gadu" */ + { "sametime", "meanwhile" }, + { "myspaceim", "myspace" }, + { "xmpp", "jabber" }, /* prpl-jabber (mentioned in case the prpl is renamed so this line will match) */ + { NULL, NULL } +}; + +static const gchar * +disco_type_from_string(const gchar *str) +{ + int i = 0; + + g_return_val_if_fail(str != NULL, ""); + + for ( ; disco_type_mappings[i].from; ++i) { + if (!strcasecmp(str, disco_type_mappings[i].from)) + return disco_type_mappings[i].to; + } + + /* fallback to the string itself */ + return str; +} + +static void +got_info_cb(PurpleConnection *pc, const char *type, const char *id, + const char *from, xmlnode *iq, gpointer data) +{ + struct item_data *item_data = data; + PidginDiscoList *list = item_data->list; + xmlnode *query; + + --list->fetch_count; + + if (!list->in_progress) + goto out; + + if (g_str_equal(type, "result") && + (query = xmlnode_get_child(iq, "query"))) { + xmlnode *identity = xmlnode_get_child(query, "identity"); + XmppDiscoService *service; + xmlnode *feature; + + service = g_new0(XmppDiscoService, 1); + service->list = item_data->list; + purple_debug_info("xmppdisco", "parent for %s is %p\n", from, item_data->parent); + service->parent = item_data->parent; + service->flags = 0; + service->type = disco_service_type_from_identity(identity); + + if (item_data->node) { + if (item_data->name) { + service->name = item_data->name; + item_data->name = NULL; + } else + service->name = g_strdup(item_data->node); + + service->node = item_data->node; + item_data->node = NULL; + + if (service->type == XMPP_DISCO_SERVICE_TYPE_PUBSUB_COLLECTION) + service->flags |= XMPP_DISCO_BROWSE; + } else + service->name = g_strdup(from); + + if (!service->node) + /* Only support adding JIDs, not JID+node combos */ + service->flags |= XMPP_DISCO_ADD; + + if (item_data->name) { + service->description = item_data->name; + item_data->name = NULL; + } else if (identity) + service->description = g_strdup(xmlnode_get_attrib(identity, "name")); + + /* TODO: Overlap with service->name a bit */ + service->jid = g_strdup(from); + + for (feature = xmlnode_get_child(query, "feature"); feature; + feature = xmlnode_get_next_twin(feature)) { + const char *var; + if (!(var = xmlnode_get_attrib(feature, "var"))) + continue; + + if (g_str_equal(var, NS_REGISTER)) + service->flags |= XMPP_DISCO_REGISTER; + else if (g_str_equal(var, NS_DISCO_ITEMS)) + service->flags |= XMPP_DISCO_BROWSE; + else if (g_str_equal(var, NS_MUC)) { + service->flags |= XMPP_DISCO_BROWSE; + service->type = XMPP_DISCO_SERVICE_TYPE_CHAT; + } + } + + if (service->type == XMPP_DISCO_SERVICE_TYPE_GATEWAY) + service->gateway_type = g_strdup(disco_type_from_string( + xmlnode_get_attrib(identity, "type"))); + + pidgin_disco_add_service(list, service, service->parent); + } + +out: + if (list->fetch_count == 0) + pidgin_disco_list_set_in_progress(list, FALSE); + + g_free(item_data->name); + g_free(item_data->node); + g_free(item_data); + pidgin_disco_list_unref(list); +} + +static void +got_items_cb(PurpleConnection *pc, const char *type, const char *id, + const char *from, xmlnode *iq, gpointer data) +{ + struct item_data *item_data = data; + PidginDiscoList *list = item_data->list; + xmlnode *query; + gboolean has_items = FALSE; + + --list->fetch_count; + + if (!list->in_progress) + goto out; + + if (g_str_equal(type, "result") && + (query = xmlnode_get_child(iq, "query"))) { + xmlnode *item; + + for (item = xmlnode_get_child(query, "item"); item; + item = xmlnode_get_next_twin(item)) { + const char *jid = xmlnode_get_attrib(item, "jid"); + const char *name = xmlnode_get_attrib(item, "name"); + const char *node = xmlnode_get_attrib(item, "node"); + + has_items = TRUE; + + if (item_data->parent->type == XMPP_DISCO_SERVICE_TYPE_CHAT) { + /* This is a hacky first-order approximation. Any MUC + * component that has a >1 level hierarchy (a Yahoo MUC + * transport component probably does) will violate this. + * + * On the other hand, this is better than querying all the + * chats at conference.jabber.org to enumerate them. + */ + XmppDiscoService *service = g_new0(XmppDiscoService, 1); + service->list = item_data->list; + service->parent = item_data->parent; + service->flags = XMPP_DISCO_ADD; + service->type = XMPP_DISCO_SERVICE_TYPE_CHAT; + + service->name = g_strdup(name); + service->jid = g_strdup(jid); + service->node = g_strdup(node); + pidgin_disco_add_service(list, service, item_data->parent); + } else { + struct item_data *item_data2 = g_new0(struct item_data, 1); + + item_data2->list = item_data->list; + item_data2->parent = item_data->parent; + item_data2->name = g_strdup(name); + item_data2->node = g_strdup(node); + + ++list->fetch_count; + pidgin_disco_list_ref(list); + xmpp_disco_info_do(pc, item_data2, jid, node, got_info_cb); + } + } + } + + if (!has_items) + pidgin_disco_add_service(list, NULL, item_data->parent); + +out: + if (list->fetch_count == 0) + pidgin_disco_list_set_in_progress(list, FALSE); + + g_free(item_data); + pidgin_disco_list_unref(list); +} + +static void +server_items_cb(PurpleConnection *pc, const char *type, const char *id, + const char *from, xmlnode *iq, gpointer data) +{ + struct item_data *cb_data = data; + PidginDiscoList *list = cb_data->list; + xmlnode *query; + + g_free(cb_data); + --list->fetch_count; + + if (g_str_equal(type, "result") && + (query = xmlnode_get_child(iq, "query"))) { + xmlnode *item; + + for (item = xmlnode_get_child(query, "item"); item; + item = xmlnode_get_next_twin(item)) { + const char *jid = xmlnode_get_attrib(item, "jid"); + const char *name = xmlnode_get_attrib(item, "name"); + const char *node = xmlnode_get_attrib(item, "node"); + struct item_data *item_data; + + if (!jid) + continue; + + item_data = g_new0(struct item_data, 1); + item_data->list = list; + item_data->name = g_strdup(name); + item_data->node = g_strdup(node); + + ++list->fetch_count; + pidgin_disco_list_ref(list); + xmpp_disco_info_do(pc, item_data, jid, node, got_info_cb); + } + } + + if (list->fetch_count == 0) + pidgin_disco_list_set_in_progress(list, FALSE); + + pidgin_disco_list_unref(list); +} + +static void +server_info_cb(PurpleConnection *pc, const char *type, const char *id, + const char *from, xmlnode *iq, gpointer data) +{ + struct item_data *cb_data = data; + PidginDiscoList *list = cb_data->list; + xmlnode *query; + xmlnode *error; + gboolean items = FALSE; + + --list->fetch_count; + + if (g_str_equal(type, "result") && + (query = xmlnode_get_child(iq, "query"))) { + xmlnode *feature; + + for (feature = xmlnode_get_child(query, "feature"); feature; + feature = xmlnode_get_next_twin(feature)) { + const char *var = xmlnode_get_attrib(feature, "var"); + if (purple_strequal(var, NS_DISCO_ITEMS)) { + items = TRUE; + break; + } + } + + if (items) { + xmpp_disco_items_do(pc, cb_data, from, NULL /* node */, server_items_cb); + ++list->fetch_count; + pidgin_disco_list_ref(list); + } + } + else { + error = xmlnode_get_child(iq, "error"); + if (xmlnode_get_child(error, "remote-server-not-found") + || xmlnode_get_child(error, "jid-malformed")) { + purple_notify_error(my_plugin, _("Error"), + _("Server does not exist"), + NULL); + } + else { + purple_notify_error(my_plugin, _("Error"), + _("Server does not support service discovery"), + NULL); + } + pidgin_disco_list_set_in_progress(list, FALSE); + g_free(cb_data); + } + + pidgin_disco_list_unref(list); +} + +void xmpp_disco_start(PidginDiscoList *list) +{ + struct item_data *cb_data; + + g_return_if_fail(list != NULL); + + ++list->fetch_count; + pidgin_disco_list_ref(list); + + cb_data = g_new0(struct item_data, 1); + cb_data->list = list; + + xmpp_disco_info_do(list->pc, cb_data, list->server, NULL, server_info_cb); +} + +void xmpp_disco_service_expand(XmppDiscoService *service) +{ + struct item_data *item_data; + + g_return_if_fail(service != NULL); + + if (service->expanded) + return; + + item_data = g_new0(struct item_data, 1); + item_data->list = service->list; + item_data->parent = service; + + ++service->list->fetch_count; + pidgin_disco_list_ref(service->list); + + pidgin_disco_list_set_in_progress(service->list, TRUE); + + xmpp_disco_items_do(service->list->pc, item_data, service->jid, service->node, + got_items_cb); + service->expanded = TRUE; +} + +void xmpp_disco_service_register(XmppDiscoService *service) +{ + xmlnode *iq, *query; + char *id = generate_next_id(); + + iq = xmlnode_new("iq"); + xmlnode_set_attrib(iq, "type", "get"); + xmlnode_set_attrib(iq, "to", service->jid); + xmlnode_set_attrib(iq, "id", id); + + query = xmlnode_new_child(iq, "query"); + xmlnode_set_namespace(query, NS_REGISTER); + + purple_signal_emit(purple_connection_get_prpl(service->list->pc), + "jabber-sending-xmlnode", service->list->pc, &iq); + if (iq != NULL) + xmlnode_free(iq); + g_free(id); +} + +static void +create_dialog(PurplePluginAction *action) +{ + pidgin_disco_dialog_new(); +} + +static GList * +actions(PurplePlugin *plugin, gpointer context) +{ + GList *l = NULL; + PurplePluginAction *action = NULL; + + action = purple_plugin_action_new(_("XMPP Service Discovery"), + create_dialog); + l = g_list_prepend(l, action); + + return l; +} + +static void +signed_off_cb(PurpleConnection *pc, gpointer unused) +{ + /* Deal with any dialogs */ + pidgin_disco_signed_off_cb(pc); + + /* Remove all the IQ callbacks for this connection */ + g_hash_table_foreach_remove(iq_callbacks, remove_iq_callbacks_by_pc, pc); +} + +static gboolean +plugin_load(PurplePlugin *plugin) +{ + PurplePlugin *xmpp_prpl; + + my_plugin = plugin; + + xmpp_prpl = purple_plugins_find_with_id(XMPP_PLUGIN_ID); + if (NULL == xmpp_prpl) + return FALSE; + + purple_signal_connect(purple_connections_get_handle(), "signing-off", + plugin, PURPLE_CALLBACK(signed_off_cb), NULL); + + iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); + + return TRUE; +} + +static gboolean +plugin_unload(PurplePlugin *plugin) +{ + g_hash_table_destroy(iq_callbacks); + iq_callbacks = NULL; + + purple_signals_disconnect_by_handle(plugin); + pidgin_disco_dialogs_destroy_all(); + + return TRUE; +} + +static PurplePluginInfo info = +{ + PURPLE_PLUGIN_MAGIC, + PURPLE_MAJOR_VERSION, + PURPLE_MINOR_VERSION, + PURPLE_PLUGIN_STANDARD, + PIDGIN_PLUGIN_TYPE, + 0, + NULL, + PURPLE_PRIORITY_DEFAULT, + "gtk-xmppdisco", + N_("XMPP Service Discovery"), + DISPLAY_VERSION, + N_("Allows browsing and registering services."), + N_("This plugin is useful for registering with legacy transports or other " + "XMPP services."), + "Paul Aurich <paul@darkrain42.org>", + PURPLE_WEBSITE, + plugin_load, + plugin_unload, + NULL, /**< destroy */ + NULL, /**< ui_info */ + NULL, /**< extra_info */ + NULL, /**< prefs_info */ + actions, + + /* padding */ + NULL, + NULL, + NULL, + NULL +}; + +static void +init_plugin(PurplePlugin *plugin) +{ +} + +PURPLE_INIT_PLUGIN(xmppdisco, init_plugin, info)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/plugins/disco/xmppdisco.h Tue Jun 09 23:30:18 2009 +0000 @@ -0,0 +1,107 @@ +/* pidgin + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#ifndef PIDGIN_XMPP_DISCO_H +#define PIDGIN_XMPP_DISCO_H + +typedef struct _XmppDiscoService XmppDiscoService; + +#include "gtkdisco.h" + +#define XMPP_PLUGIN_ID "prpl-jabber" +#define NS_DISCO_INFO "http://jabber.org/protocol/disco#info" +#define NS_DISCO_ITEMS "http://jabber.org/protocol/disco#items" +#define NS_MUC "http://jabber.org/protocol/muc" +#define NS_REGISTER "jabber:iq:register" + +#include "plugin.h" +extern PurplePlugin *my_plugin; + +/** + * The types of services. + */ +typedef enum +{ + XMPP_DISCO_SERVICE_TYPE_UNSET, + /** + * A registerable gateway to another protocol. An example would be + * XMPP legacy transports. + */ + XMPP_DISCO_SERVICE_TYPE_GATEWAY, + + /** + * A directory (e.g. allows the user to search for other users). + */ + XMPP_DISCO_SERVICE_TYPE_DIRECTORY, + + /** + * A chat (multi-user conversation). + */ + XMPP_DISCO_SERVICE_TYPE_CHAT, + + /** + * A pubsub collection (contains nodes) + */ + XMPP_DISCO_SERVICE_TYPE_PUBSUB_COLLECTION, + + /** + * A pubsub leaf (contains stuff, not nodes). + */ + XMPP_DISCO_SERVICE_TYPE_PUBSUB_LEAF, + + /** + * Something else. Do we need more categories? + */ + XMPP_DISCO_SERVICE_TYPE_OTHER +} XmppDiscoServiceType; + +/** + * The flags of services. + */ +typedef enum +{ + XMPP_DISCO_NONE = 0x0000, + XMPP_DISCO_ADD = 0x0001, /**< Supports an 'add' operation */ + XMPP_DISCO_BROWSE = 0x0002, /**< Supports browsing */ + XMPP_DISCO_REGISTER = 0x0004 /**< Supports a 'register' operation */ +} XmppDiscoServiceFlags; + +struct _XmppDiscoService { + PidginDiscoList *list; + gchar *name; + gchar *description; + + gchar *gateway_type; + XmppDiscoServiceType type; + XmppDiscoServiceFlags flags; + + XmppDiscoService *parent; + gchar *jid; + gchar *node; + gboolean expanded; +}; + +void xmpp_disco_start(PidginDiscoList *list); + +void xmpp_disco_service_expand(XmppDiscoService *service); +void xmpp_disco_service_register(XmppDiscoService *service); + +#endif /* PIDGIN_XMPP_DISCO_H */
--- a/pidgin/plugins/pidginrc.c Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/plugins/pidginrc.c Tue Jun 09 23:30:18 2009 +0000 @@ -28,34 +28,31 @@ static guint pref_callback; static const gchar *color_prefs[] = { - "/plugins/gtk/purplerc/color/GtkWidget::cursor-color", - "/plugins/gtk/purplerc/color/GtkWidget::secondary-cursor-color", "/plugins/gtk/purplerc/color/GtkIMHtml::hyperlink-color", "/plugins/gtk/purplerc/color/GtkIMHtml::hyperlink-visited-color", "/plugins/gtk/purplerc/color/GtkIMHtml::send-name-color", "/plugins/gtk/purplerc/color/GtkIMHtml::receive-name-color", "/plugins/gtk/purplerc/color/GtkIMHtml::highlight-name-color", - "/plugins/gtk/purplerc/color/GtkIMHtml::action-name-color" + "/plugins/gtk/purplerc/color/GtkIMHtml::action-name-color", + "/plugins/gtk/purplerc/color/GtkIMHtml::typing-notification-color" }; static const gchar *color_prefs_set[] = { - "/plugins/gtk/purplerc/set/color/GtkWidget::cursor-color", - "/plugins/gtk/purplerc/set/color/GtkWidget::secondary-cursor-color", "/plugins/gtk/purplerc/set/color/GtkIMHtml::hyperlink-color", "/plugins/gtk/purplerc/set/color/GtkIMHtml::hyperlink-visited-color", "/plugins/gtk/purplerc/set/color/GtkIMHtml::send-name-color", "/plugins/gtk/purplerc/set/color/GtkIMHtml::receive-name-color", "/plugins/gtk/purplerc/set/color/GtkIMHtml::highlight-name-color", - "/plugins/gtk/purplerc/set/color/GtkIMHtml::action-name-color" + "/plugins/gtk/purplerc/set/color/GtkIMHtml::action-name-color", + "/plugins/gtk/purplerc/set/color/GtkIMHtml::typing-notification-color" }; static const gchar *color_names[] = { - N_("Cursor Color"), - N_("Secondary Cursor Color"), N_("Hyperlink Color"), N_("Visited Hyperlink Color"), N_("Sent Message Name Color"), N_("Received Message Name Color"), N_("Highlighted Message Name Color"), - N_("Action Message Name Color") + N_("Action Message Name Color"), + N_("Typing Notification Color") }; static GtkWidget *color_widgets[G_N_ELEMENTS(color_prefs)]; @@ -126,6 +123,10 @@ g_string_append(style_string, "style \"purplerc_style\"\n{"); + if(purple_prefs_get_bool("/plugins/gtk/purplerc/set/disable-typing-notification")) { + g_string_append(style_string, "\tGtkIMHtml::typing-notification-enable = 0\n"); + } + for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) { if (purple_prefs_get_bool(color_prefs_set[i])) { const gchar *pref; @@ -349,103 +350,27 @@ } static GtkWidget * -purplerc_get_config_frame(PurplePlugin *plugin) +purplerc_make_interface_vbox(void) { - /* Note: Intentionally not using the size group argument to the - * pidgin_prefs_labeled_* functions they only add the text label to - * the size group not the whole thing, which isn't what I want. */ + GtkWidget *vbox = NULL, *hbox = NULL, *check = NULL; + GtkSizeGroup *labelsg = NULL; gint i; - gchar *tmp; - GtkWidget *check = NULL, *widget = NULL; - GtkWidget *ret = NULL, *hbox = NULL, *frame = NULL; - GtkSizeGroup *labelsg = NULL, *widgetsg = NULL, *buttonsg = NULL; -#ifndef _WIN32 - const gchar *homepath = "$HOME"; -#else - const gchar *homepath = "\%APPDATA\%"; -#endif - - ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); - gtk_container_set_border_width(GTK_CONTAINER(ret), PIDGIN_HIG_BORDER); - - labelsg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); - widgetsg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); - buttonsg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); - - frame = pidgin_make_frame(ret, _("General")); - /* interface font */ - hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); - gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); - - check = pidgin_prefs_checkbox(_("GTK+ Interface Font"), - "/plugins/gtk/purplerc/set/gtk-font-name", - hbox); - gtk_size_group_add_widget(labelsg, check); - - widget = pidgin_pixbuf_button_from_stock("", GTK_STOCK_SELECT_FONT, - PIDGIN_BUTTON_HORIZONTAL); - gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0); - gtk_size_group_add_widget(widgetsg, widget); - gtk_widget_set_sensitive(widget, - purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-font-name")); - g_signal_connect(G_OBJECT(check), "toggled", - G_CALLBACK(pidgin_toggle_sensitive), widget); - g_signal_connect(G_OBJECT(widget), "clicked", - G_CALLBACK(purplerc_set_font), GINT_TO_POINTER(-1)); - /* key theme name */ - hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); - gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); - - check = pidgin_prefs_checkbox(_("GTK+ Text Shortcut Theme"), - "/plugins/gtk/purplerc/set/gtk-key-theme-name", - hbox); - gtk_size_group_add_widget(labelsg, check); - - widget = pidgin_prefs_labeled_entry(hbox, "", - "/plugins/gtk/purplerc/gtk-key-theme-name", - NULL); - /* - gtk_size_group_add_widget(widgetsg, widget); - */ - gtk_widget_set_sensitive(widget, - purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name")); - g_signal_connect(G_OBJECT(check), "toggled", - G_CALLBACK(pidgin_toggle_sensitive), widget); + vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); + labelsg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); - /* - for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) { - hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); - gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); - - check = pidgin_prefs_checkbox(_(widget_bool_names[i]), - widget_bool_prefs_set[i], hbox); - gtk_size_group_add_widget(labelsg, check); + gtk_container_set_border_width(GTK_CONTAINER(vbox), PIDGIN_HIG_BORDER); - widget_bool_widgets[i] = pidgin_prefs_checkbox("", widget_bool_prefs[i], hbox); - * - gtk_size_group_add_widget(widgetsb, widget_bool_widgets[i]); - * - gtk_widget_set_sensitive(widget_bool_widgets[i], - purple_prefs_get_bool(widget_bool_prefs_set[i])); - g_signal_connect(G_OBJECT(check), "toggled", - G_CALLBACK(pidgin_toggle_sensitive), - widget_bool_widgets[i]); - } - */ - - frame = pidgin_make_frame(ret, _("Interface colors")); - /* imhtml stuff */ for (i = 0; i < G_N_ELEMENTS(color_prefs); i++) { hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); - gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); check = pidgin_prefs_checkbox(_(color_names[i]), color_prefs_set[i], hbox); gtk_size_group_add_widget(labelsg, check); - color_widgets[i] = pidgin_pixbuf_button_from_stock("", GTK_STOCK_SELECT_COLOR, PIDGIN_BUTTON_HORIZONTAL); - gtk_size_group_add_widget(widgetsg, color_widgets[i]); + color_widgets[i] = pidgin_pixbuf_button_from_stock("", + GTK_STOCK_SELECT_COLOR, PIDGIN_BUTTON_HORIZONTAL); gtk_box_pack_start(GTK_BOX(hbox), color_widgets[i], FALSE, FALSE, 0); gtk_widget_set_sensitive(color_widgets[i], @@ -458,39 +383,51 @@ GINT_TO_POINTER(i)); } - frame = pidgin_make_frame(ret, _("Widget Sizes")); - /* widget size stuff */ - for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) { - hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); - gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); + g_object_unref(labelsg); + + return vbox; +} - check = pidgin_prefs_checkbox(_(widget_size_names[i]), - widget_size_prefs_set[i], hbox); - gtk_size_group_add_widget(labelsg, check); +static GtkWidget * +purplerc_make_fonts_vbox(void) +{ + GtkWidget *vbox = NULL, *hbox = NULL, *check = NULL, *widget = NULL; + GtkSizeGroup *labelsg = NULL; + int i; + + vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); + labelsg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); + + gtk_container_set_border_width(GTK_CONTAINER(vbox), PIDGIN_HIG_BORDER); - widget_size_widgets[i] = pidgin_prefs_labeled_spin_button(hbox, "", widget_size_prefs[i], 0, 50, NULL); - /* - gtk_size_group_add_widget(widgetsg, widget_size_widgets[i]); - */ - gtk_widget_set_sensitive(widget_size_widgets[i], - purple_prefs_get_bool(widget_size_prefs_set[i])); - g_signal_connect(G_OBJECT(check), "toggled", - G_CALLBACK(pidgin_toggle_sensitive), - widget_size_widgets[i]); - } + hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + + check = pidgin_prefs_checkbox(_("GTK+ Interface Font"), + "/plugins/gtk/purplerc/set/gtk-font-name", + hbox); + gtk_size_group_add_widget(labelsg, check); - frame = pidgin_make_frame(ret, _("Fonts")); - /* imhtml font stuff */ + widget = pidgin_pixbuf_button_from_stock("", GTK_STOCK_SELECT_FONT, + PIDGIN_BUTTON_HORIZONTAL); + gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0); + gtk_widget_set_sensitive(widget, + purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-font-name")); + g_signal_connect(G_OBJECT(check), "toggled", + G_CALLBACK(pidgin_toggle_sensitive), widget); + g_signal_connect(G_OBJECT(widget), "clicked", + G_CALLBACK(purplerc_set_font), GINT_TO_POINTER(-1)); + for (i = 0; i < G_N_ELEMENTS(font_prefs); i++) { hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); - gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); check = pidgin_prefs_checkbox(_(font_names[i]), font_prefs_set[i], hbox); gtk_size_group_add_widget(labelsg, check); - font_widgets[i] = pidgin_pixbuf_button_from_stock("", GTK_STOCK_SELECT_FONT, PIDGIN_BUTTON_HORIZONTAL); - gtk_size_group_add_widget(widgetsg, font_widgets[i]); + font_widgets[i] = pidgin_pixbuf_button_from_stock("", + GTK_STOCK_SELECT_FONT, PIDGIN_BUTTON_HORIZONTAL); gtk_box_pack_start(GTK_BOX(hbox), font_widgets[i], FALSE, FALSE, 0); gtk_widget_set_sensitive(font_widgets[i], @@ -503,6 +440,127 @@ GINT_TO_POINTER(i)); } + g_object_unref(labelsg); + + return vbox; +} + +static GtkWidget * +purplerc_make_misc_vbox(void) +{ + /* Note: Intentionally not using the size group argument to the + * pidgin_prefs_labeled_* functions they only add the text label to + * the size group not the whole thing, which isn't what I want. */ + GtkWidget *vbox = NULL, *hbox = NULL, *check = NULL, *widget = NULL; + GtkSizeGroup *labelsg = NULL; + int i; + + vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); + labelsg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); + + gtk_container_set_border_width(GTK_CONTAINER(vbox), PIDGIN_HIG_BORDER); + + hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + + check = pidgin_prefs_checkbox(_("GTK+ Text Shortcut Theme"), + "/plugins/gtk/purplerc/set/gtk-key-theme-name", + hbox); + gtk_size_group_add_widget(labelsg, check); + + widget = pidgin_prefs_labeled_entry(hbox, "", + "/plugins/gtk/purplerc/gtk-key-theme-name", + NULL); + gtk_widget_set_sensitive(widget, + purple_prefs_get_bool("/plugins/gtk/purplerc/set/gtk-key-theme-name")); + g_signal_connect(G_OBJECT(check), "toggled", + G_CALLBACK(pidgin_toggle_sensitive), widget); + + for (i = 0; i < G_N_ELEMENTS(widget_size_prefs); i++) { + hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + + check = pidgin_prefs_checkbox(_(widget_size_names[i]), + widget_size_prefs_set[i], hbox); + gtk_size_group_add_widget(labelsg, check); + + widget_size_widgets[i] = pidgin_prefs_labeled_spin_button(hbox, "", widget_size_prefs[i], 0, 50, NULL); + gtk_widget_set_sensitive(widget_size_widgets[i], + purple_prefs_get_bool(widget_size_prefs_set[i])); + g_signal_connect(G_OBJECT(check), "toggled", + G_CALLBACK(pidgin_toggle_sensitive), + widget_size_widgets[i]); + } + + hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + + check = pidgin_prefs_checkbox(_("Disable Typing Notification Text"), + "/plugins/gtk/purplerc/set/disable-typing-notification", hbox); + + /* Widget boolean stuff */ + /* + for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) { + hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + + check = pidgin_prefs_checkbox(_(widget_bool_names[i]), + widget_bool_prefs_set[i], hbox); + gtk_size_group_add_widget(labelsg, check); + + widget_bool_widgets[i] = pidgin_prefs_checkbox("", widget_bool_prefs[i], hbox); + + gtk_widget_set_sensitive(widget_bool_widgets[i], + purple_prefs_get_bool(widget_bool_prefs_set[i])); + g_signal_connect(G_OBJECT(check), "toggled", + G_CALLBACK(pidgin_toggle_sensitive), + widget_bool_widgets[i]); + } + */ + + g_object_unref(labelsg); + + return vbox; +} + +static GtkWidget * +purplerc_get_config_frame(PurplePlugin *plugin) +{ + gchar *tmp; + GtkWidget *check = NULL, *label = NULL; + GtkWidget *ret = NULL, *hbox = NULL, *frame = NULL, *note = NULL; +#ifndef _WIN32 + const gchar *homepath = "$HOME"; +#else + const gchar *homepath = "\%APPDATA\%"; +#endif + + ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); + note = gtk_notebook_new(); + label = gtk_label_new(NULL); + hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); + + gtk_container_set_border_width(GTK_CONTAINER(ret), PIDGIN_HIG_BORDER); + + tmp = g_strdup_printf("<span weight=\"bold\">%s</span>", _("GTK+ Theme Control Settings")); + gtk_label_set_markup(GTK_LABEL(label), tmp); + g_free(tmp); + + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(ret), hbox, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(ret), note, FALSE, FALSE, 0); + + label = gtk_label_new(_("Colors")); + gtk_notebook_insert_page(GTK_NOTEBOOK(note), purplerc_make_interface_vbox(), label, -1); + + label = gtk_label_new(_("Fonts")); + gtk_notebook_insert_page(GTK_NOTEBOOK(note), purplerc_make_fonts_vbox(), label, -1); + + label = gtk_label_new(_("Miscellaneous")); + gtk_notebook_insert_page(GTK_NOTEBOOK(note), purplerc_make_misc_vbox(), label, -1); + + gtk_box_pack_start(GTK_BOX(ret), gtk_hseparator_new(), TRUE, TRUE, 0); + frame = pidgin_make_frame(ret, _("Gtkrc File Tools")); hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); @@ -512,22 +570,17 @@ homepath, G_DIR_SEPARATOR_S ".purple" G_DIR_SEPARATOR_S); check = gtk_button_new_with_label(tmp); g_free(tmp); - gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0); - gtk_size_group_add_widget(buttonsg, check); + gtk_box_pack_start(GTK_BOX(hbox), check, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(check), "clicked", G_CALLBACK(purplerc_write), NULL); check = gtk_button_new_with_label(_("Re-read gtkrc files")); - gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0); - gtk_size_group_add_widget(buttonsg, check); + gtk_box_pack_start(GTK_BOX(hbox), check, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(check), "clicked", G_CALLBACK(purplerc_reread), NULL); gtk_widget_show_all(ret); - g_object_unref(labelsg); - g_object_unref(widgetsg); - g_object_unref(buttonsg); return ret; } @@ -621,6 +674,15 @@ purple_prefs_add_bool(widget_bool_prefs_set[i], FALSE); } */ + + purple_prefs_add_bool("/plugins/gtk/purplerc/disable-typing-notification", FALSE); + purple_prefs_add_bool("/plugins/gtk/purplerc/set/disable-typing-notification", FALSE); + + /* remove old cursor color prefs */ + purple_prefs_remove("/plugins/gtk/purplerc/color/GtkWidget::cursor-color"); + purple_prefs_remove("/plugins/gtk/purplerc/color/GtkWidget::secondary-cursor-color"); + purple_prefs_remove("/plugins/gtk/purplerc/set/color/GtkWidget::cursor-color"); + purple_prefs_remove("/plugins/gtk/purplerc/set/color/GtkWidget::secondary-cursor-color"); } PURPLE_INIT_PLUGIN(purplerc, purplerc_init, purplerc_info)
--- a/pidgin/plugins/themeedit-icon.h Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/plugins/themeedit-icon.h Tue Jun 09 23:30:18 2009 +0000 @@ -1,2 +1,28 @@ +/* Pidgin + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#ifndef _THEMEEDIT_ICON_H_ +#define _THEMEEDIT_ICON_H_ + void pidgin_icon_theme_edit(PurplePluginAction *); +#endif +
--- a/pidgin/plugins/xmppconsole.c Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/plugins/xmppconsole.c Tue Jun 09 23:30:18 2009 +0000 @@ -62,58 +62,62 @@ g_return_val_if_fail(node != NULL, NULL); - if(pretty && depth) { + if (pretty && depth) { tab = g_strnfill(depth, '\t'); text = g_string_append(text, tab); } node_name = g_markup_escape_text(node->name, -1); - g_string_append_printf(text, "<font color='" - BRACKET_COLOR "'><</font><font color='" - TAG_COLOR "'><b>%s</b></font>", node_name); + g_string_append_printf(text, + "<font color='" BRACKET_COLOR "'><</font>" + "<font color='" TAG_COLOR "'><b>%s</b></font>", + node_name); if (node->xmlns) { - if((!node->parent || - !node->parent->xmlns || - strcmp(node->xmlns, node->parent->xmlns)) && - strcmp(node->xmlns, "jabber:client")) + if ((!node->parent || + !node->parent->xmlns || + strcmp(node->xmlns, node->parent->xmlns)) && + strcmp(node->xmlns, "jabber:client")) { char *xmlns = g_markup_escape_text(node->xmlns, -1); - g_string_append_printf(text, " <font color='" - ATTR_NAME_COLOR "'><b>xmlns</b></font>='<font color='" - XMLNS_COLOR "'><b>%s</b></font>'", xmlns); + g_string_append_printf(text, + " <font color='" ATTR_NAME_COLOR "'><b>xmlns</b></font>=" + "'<font color='" XMLNS_COLOR "'><b>%s</b></font>'", + xmlns); g_free(xmlns); } } - for(c = node->child; c; c = c->next) + for (c = node->child; c; c = c->next) { - if(c->type == XMLNODE_TYPE_ATTRIB) { + if (c->type == XMLNODE_TYPE_ATTRIB) { esc = g_markup_escape_text(c->name, -1); esc2 = g_markup_escape_text(c->data, -1); - g_string_append_printf(text, " <font color='" - ATTR_NAME_COLOR "'><b>%s</b></font>='<font color='" - ATTR_VALUE_COLOR "'>%s</font>'", esc, esc2); + g_string_append_printf(text, + " <font color='" ATTR_NAME_COLOR "'><b>%s</b></font>=" + "'<font color='" ATTR_VALUE_COLOR "'>%s</font>'", + esc, esc2); g_free(esc); g_free(esc2); - } else if(c->type == XMLNODE_TYPE_TAG || c->type == XMLNODE_TYPE_DATA) { - if(c->type == XMLNODE_TYPE_DATA) + } else if (c->type == XMLNODE_TYPE_TAG || c->type == XMLNODE_TYPE_DATA) { + if (c->type == XMLNODE_TYPE_DATA) pretty = FALSE; need_end = TRUE; } } - if(need_end) { - g_string_append_printf(text, - "<font color='"BRACKET_COLOR"'>></font>%s", pretty ? "<br>" : ""); + if (need_end) { + g_string_append_printf(text, + "<font color='"BRACKET_COLOR"'>></font>%s", + pretty ? "<br>" : ""); - for(c = node->child; c; c = c->next) + for (c = node->child; c; c = c->next) { - if(c->type == XMLNODE_TYPE_TAG) { + if (c->type == XMLNODE_TYPE_TAG) { int esc_len; esc = xmlnode_to_pretty_str(c, &esc_len, depth+1); text = g_string_append_len(text, esc, esc_len); g_free(esc); - } else if(c->type == XMLNODE_TYPE_DATA && c->data_sz > 0) { + } else if (c->type == XMLNODE_TYPE_DATA && c->data_sz > 0) { esc = g_markup_escape_text(c->data, c->data_sz); text = g_string_append(text, esc); g_free(esc); @@ -122,11 +126,14 @@ if(tab && pretty) text = g_string_append(text, tab); - g_string_append_printf(text, "<font color='"BRACKET_COLOR"'><</font>/<font color='" - TAG_COLOR"'><b>%s</b></font><font color='"BRACKET_COLOR - "'>></font><br>", node_name); + g_string_append_printf(text, + "<font color='" BRACKET_COLOR "'><</font>/" + "<font color='" TAG_COLOR "'><b>%s</b></font>" + "<font color='" BRACKET_COLOR "'>></font><br>", + node_name); } else { - g_string_append_printf(text, "/<font color='"BRACKET_COLOR"'>></font><br>"); + g_string_append_printf(text, + "/<font color='" BRACKET_COLOR "'>></font><br>"); } g_free(node_name); @@ -163,10 +170,10 @@ if (!console || console->gc != gc) return; node = xmlnode_from_str(*packet, -1); - + if (!node) return; - + str = xmlnode_to_pretty_str(node, NULL, 0); formatted = g_strdup_printf("<body bgcolor='#dcecc4'><pre>%s</pre></body>", str); gtk_imhtml_append_text(GTK_IMHTML(console->imhtml), formatted, 0); @@ -204,37 +211,35 @@ static void entry_changed_cb(GtkTextBuffer *buffer, void *data) { char *xmlstr, *str; - GtkTextIter iter; - int wrapped_lines; - int lines; - GdkRectangle oneline; - int height; - int pad_top, pad_inside, pad_bottom; + GtkTextIter iter; + int wrapped_lines; + int lines; + GdkRectangle oneline; + int height; + int pad_top, pad_inside, pad_bottom; GtkTextIter start, end; xmlnode *node; - - wrapped_lines = 1; - gtk_text_buffer_get_start_iter(buffer, &iter); - gtk_text_view_get_iter_location(GTK_TEXT_VIEW(console->entry), &iter, &oneline); - while (gtk_text_view_forward_display_line(GTK_TEXT_VIEW(console->entry), &iter)) - wrapped_lines++; - lines = gtk_text_buffer_get_line_count(buffer); + wrapped_lines = 1; + gtk_text_buffer_get_start_iter(buffer, &iter); + gtk_text_view_get_iter_location(GTK_TEXT_VIEW(console->entry), &iter, &oneline); + while (gtk_text_view_forward_display_line(GTK_TEXT_VIEW(console->entry), &iter)) + wrapped_lines++; + + lines = gtk_text_buffer_get_line_count(buffer); - /* Show a maximum of 64 lines */ - lines = MIN(lines, 6); - wrapped_lines = MIN(wrapped_lines, 6); + /* Show a maximum of 64 lines */ + lines = MIN(lines, 6); + wrapped_lines = MIN(wrapped_lines, 6); - pad_top = gtk_text_view_get_pixels_above_lines(GTK_TEXT_VIEW(console->entry)); - pad_bottom = gtk_text_view_get_pixels_below_lines(GTK_TEXT_VIEW(console->entry)); - pad_inside = gtk_text_view_get_pixels_inside_wrap(GTK_TEXT_VIEW(console->entry)); + pad_top = gtk_text_view_get_pixels_above_lines(GTK_TEXT_VIEW(console->entry)); + pad_bottom = gtk_text_view_get_pixels_below_lines(GTK_TEXT_VIEW(console->entry)); + pad_inside = gtk_text_view_get_pixels_inside_wrap(GTK_TEXT_VIEW(console->entry)); - height = (oneline.height + pad_top + pad_bottom) * lines; - height += (oneline.height + pad_inside) * (wrapped_lines - lines); + height = (oneline.height + pad_top + pad_bottom) * lines; + height += (oneline.height + pad_inside) * (wrapped_lines - lines); - gtk_widget_set_size_request(console->sw, -1, height+6); - - + gtk_widget_set_size_request(console->sw, -1, height + 6); gtk_text_buffer_get_start_iter(buffer, &start); gtk_text_buffer_get_end_iter(buffer, &end); @@ -287,7 +292,7 @@ to_entry = gtk_entry_new(); gtk_entry_set_activates_default (GTK_ENTRY (to_entry), TRUE); gtk_box_pack_start(GTK_BOX(hbox), to_entry, FALSE, FALSE, 0); - + hbox = gtk_hbox_new(FALSE, 3); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new("Type:"); @@ -302,7 +307,7 @@ gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "error"); gtk_combo_box_set_active(GTK_COMBO_BOX(type_combo), 0); gtk_box_pack_start(GTK_BOX(hbox), type_combo, FALSE, FALSE, 0); - + gtk_widget_show_all(GTK_DIALOG(dialog)->vbox); result = gtk_dialog_run(GTK_DIALOG(dialog)); @@ -310,16 +315,16 @@ gtk_widget_destroy(dialog); return; } - + to = gtk_entry_get_text(GTK_ENTRY(to_entry)); - stanza = g_strdup_printf("<iq %s%s%s id='console%x' type='%s'></iq>", + stanza = g_strdup_printf("<iq %s%s%s id='console%x' type='%s'></iq>", to && *to ? "to='" : "", to && *to ? to : "", to && *to ? "'" : "", g_random_int(), gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_combo))); - + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(console->entry)); gtk_text_buffer_set_text(buffer, stanza, -1); gtk_text_buffer_get_iter_at_offset(buffer, &iter, strstr(stanza, "</iq>") - stanza); @@ -328,25 +333,24 @@ gtk_widget_destroy(dialog); g_object_unref(sg); - } static void presence_clicked_cb(GtkWidget *w, gpointer nul) { - GtkWidget *hbox, - *to_entry, - *status_entry, - *priority_entry, - *label, - *show_combo, - *type_combo; + GtkWidget *hbox; + GtkWidget *to_entry; + GtkWidget *status_entry; + GtkWidget *priority_entry; + GtkWidget *label; + GtkWidget *show_combo; + GtkWidget *type_combo; GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); GtkTextIter iter; GtkTextBuffer *buffer; const char *to, *type, *status, *show, *priority; int result; char *stanza; - + GtkWidget *dialog = gtk_dialog_new_with_buttons("<presence/>", GTK_WINDOW(console->window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, @@ -370,7 +374,7 @@ to_entry = gtk_entry_new(); gtk_entry_set_activates_default (GTK_ENTRY (to_entry), TRUE); gtk_box_pack_start(GTK_BOX(hbox), to_entry, FALSE, FALSE, 0); - + hbox = gtk_hbox_new(FALSE, 3); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new("Type:"); @@ -417,7 +421,6 @@ gtk_entry_set_activates_default (GTK_ENTRY (status_entry), TRUE); gtk_box_pack_start(GTK_BOX(hbox), status_entry, FALSE, FALSE, 0); - hbox = gtk_hbox_new(FALSE, 3); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, FALSE, 0); @@ -430,7 +433,6 @@ gtk_spin_button_set_value(GTK_SPIN_BUTTON(priority_entry), 0); gtk_box_pack_start(GTK_BOX(hbox), priority_entry, FALSE, FALSE, 0); - gtk_widget_show_all(GTK_DIALOG(dialog)->vbox); result = gtk_dialog_run(GTK_DIALOG(dialog)); @@ -438,7 +440,7 @@ gtk_widget_destroy(dialog); return; } - + to = gtk_entry_get_text(GTK_ENTRY(to_entry)); type = gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_combo)); if (!strcmp(type, "default")) @@ -451,32 +453,30 @@ if (!strcmp(priority, "0")) priority = ""; + stanza = g_strdup_printf("<presence %s%s%s id='console%x' %s%s%s>" + "%s%s%s%s%s%s%s%s%s" + "</presence>", + *to ? "to='" : "", + *to ? to : "", + *to ? "'" : "", + g_random_int(), + *type ? "type='" : "", + *type ? type : "", + *type ? "'" : "", - stanza = g_strdup_printf("<presence %s%s%s id='console%x' %s%s%s>" - "%s%s%s%s%s%s%s%s%s" - "</presence>", - *to ? "to='" : "", - *to ? to : "", - *to ? "'" : "", - g_random_int(), - - *type ? "type='" : "", - *type ? type : "", - *type ? "'" : "", - - *show ? "<show>" : "", - *show ? show : "", - *show ? "</show>" : "", + *show ? "<show>" : "", + *show ? show : "", + *show ? "</show>" : "", - *status ? "<status>" : "", - *status ? status : "", - *status ? "</status>" : "", - - *priority ? "<priority>" : "", - *priority ? priority : "", - *priority ? "</priority>" : ""); - + *status ? "<status>" : "", + *status ? status : "", + *status ? "</status>" : "", + + *priority ? "<priority>" : "", + *priority ? priority : "", + *priority ? "</priority>" : ""); + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(console->entry)); gtk_text_buffer_set_text(buffer, stanza, -1); gtk_text_buffer_get_iter_at_offset(buffer, &iter, strstr(stanza, "</presence>") - stanza); @@ -489,13 +489,13 @@ static void message_clicked_cb(GtkWidget *w, gpointer nul) { - GtkWidget *hbox, - *to_entry, - *body_entry, - *thread_entry, - *subject_entry, - *label, - *type_combo; + GtkWidget *hbox; + GtkWidget *to_entry; + GtkWidget *body_entry; + GtkWidget *thread_entry; + GtkWidget *subject_entry; + GtkWidget *label; + GtkWidget *type_combo; GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); GtkTextIter iter; GtkTextBuffer *buffer; @@ -554,7 +554,6 @@ gtk_entry_set_activates_default (GTK_ENTRY (body_entry), TRUE); gtk_box_pack_start(GTK_BOX(hbox), body_entry, FALSE, FALSE, 0); - hbox = gtk_hbox_new(FALSE, 3); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, FALSE, 0); @@ -578,7 +577,7 @@ thread_entry = gtk_entry_new(); gtk_entry_set_activates_default (GTK_ENTRY (thread_entry), TRUE); gtk_box_pack_start(GTK_BOX(hbox), thread_entry, FALSE, FALSE, 0); - + gtk_widget_show_all(GTK_DIALOG(dialog)->vbox); result = gtk_dialog_run(GTK_DIALOG(dialog)); @@ -586,34 +585,34 @@ gtk_widget_destroy(dialog); return; } - + to = gtk_entry_get_text(GTK_ENTRY(to_entry)); body = gtk_entry_get_text(GTK_ENTRY(body_entry)); thread = gtk_entry_get_text(GTK_ENTRY(thread_entry)); subject = gtk_entry_get_text(GTK_ENTRY(subject_entry)); stanza = g_strdup_printf("<message %s%s%s id='console%x' type='%s'>" - "%s%s%s%s%s%s%s%s%s" - "</message>", - - *to ? "to='" : "", - *to ? to : "", - *to ? "'" : "", - g_random_int(), - gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_combo)), - - *body ? "<body>" : "", - *body ? body : "", - *body ? "</body>" : "", - - *subject ? "<subject>" : "", - *subject ? subject : "", - *subject ? "</subject>" : "", - - *thread ? "<thread>" : "", - *thread ? thread : "", - *thread ? "</thread>" : ""); - + "%s%s%s%s%s%s%s%s%s" + "</message>", + + *to ? "to='" : "", + *to ? to : "", + *to ? "'" : "", + g_random_int(), + gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_combo)), + + *body ? "<body>" : "", + *body ? body : "", + *body ? "</body>" : "", + + *subject ? "<subject>" : "", + *subject ? subject : "", + *subject ? "</subject>" : "", + + *thread ? "<thread>" : "", + *thread ? thread : "", + *thread ? "</thread>" : ""); + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(console->entry)); gtk_text_buffer_set_text(buffer, stanza, -1); gtk_text_buffer_get_iter_at_offset(buffer, &iter, strstr(stanza, "</message>") - stanza); @@ -629,11 +628,11 @@ { if (!console) return; - + gtk_combo_box_append_text(GTK_COMBO_BOX(console->dropdown), purple_account_get_username(gc->account)); console->accounts = g_list_append(console->accounts, gc); console->count++; - + if (console->count > 1) gtk_widget_show_all(console->hbox); } @@ -666,7 +665,7 @@ if (gc == console->gc) { console->gc = NULL; - gtk_imhtml_append_text(GTK_IMHTML(console->imhtml), + gtk_imhtml_append_text(GTK_IMHTML(console->imhtml), _("<font color='#777777'>Logged out.</font>"), 0); } } @@ -689,7 +688,7 @@ plugin, PURPLE_CALLBACK(signed_on_cb), NULL); purple_signal_connect(purple_connections_get_handle(), "signed-off", plugin, PURPLE_CALLBACK(signed_off_cb), NULL); - + return TRUE; } @@ -716,18 +715,18 @@ if (!console) return; - - account = purple_accounts_find(gtk_combo_box_get_active_text(GTK_COMBO_BOX(console->dropdown)), + + account = purple_accounts_find(gtk_combo_box_get_active_text(GTK_COMBO_BOX(console->dropdown)), "prpl-jabber"); if (!account || !account->gc) return; - + console->gc = account->gc; gtk_imhtml_clear(GTK_IMHTML(console->imhtml)); } -static void -create_console(PurplePluginAction *action) +static void +create_console(PurplePluginAction *action) { GtkWidget *vbox = gtk_vbox_new(FALSE, 6); GtkWidget *sw = gtk_scrolled_window_new(NULL, NULL); @@ -743,7 +742,7 @@ gtk_window_present(GTK_WINDOW(console->window)); return; } - + console = g_new0(XmppConsole, 1); console->window = pidgin_create_window(_("XMPP Console"), PIDGIN_HIG_BORDER, NULL, TRUE); @@ -773,32 +772,32 @@ g_signal_connect(G_OBJECT(console->dropdown), "changed", G_CALLBACK(dropdown_changed_cb), NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_ETCHED_IN); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); console->imhtml = gtk_imhtml_new(NULL, NULL); gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); if (console->count == 0) - gtk_imhtml_append_text(GTK_IMHTML(console->imhtml), + gtk_imhtml_append_text(GTK_IMHTML(console->imhtml), _("<font color='#777777'>Not connected to XMPP</font>"), 0); gtk_container_add(GTK_CONTAINER(sw), console->imhtml); - + toolbar = gtk_toolbar_new(); -#if GTK_CHECK_VERSION(2,4,0) +#if GTK_CHECK_VERSION(2,4,0) button = gtk_tool_button_new(NULL, "<iq/>"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(iq_clicked_cb), NULL); gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(button)); #else - gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), "<iq/>", + gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), "<iq/>", _("Insert an <iq/> stanza."), "foo", NULL, GTK_SIGNAL_FUNC(iq_clicked_cb), NULL); #endif -#if GTK_CHECK_VERSION(2,4,0) +#if GTK_CHECK_VERSION(2,4,0) button = gtk_tool_button_new(NULL, "<presence/>"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(presence_clicked_cb), NULL); gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(button)); #else - gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), "<presence/>", + gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), "<presence/>", _("Insert a <presence/> stanza."), NULL, gtk_label_new(NULL), GTK_SIGNAL_FUNC(presence_clicked_cb), NULL); #endif @@ -807,17 +806,17 @@ g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(message_clicked_cb), NULL); gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(button)); #else - gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), "<message/>", + gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), "<message/>", _("Insert a <message/> stanza."), "foo", gtk_label_new(NULL), GTK_SIGNAL_FUNC(message_clicked_cb), NULL); #endif - + gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); - + sw = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_ETCHED_IN); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - + console->entry = gtk_imhtml_new(NULL, NULL); gtk_imhtml_set_whole_buffer_formatting_only(GTK_IMHTML(console->entry), TRUE); g_signal_connect(G_OBJECT(console->entry),"message_send", G_CALLBACK(message_send_cb), console); @@ -843,7 +842,7 @@ act = purple_plugin_action_new(_("XMPP Console"), create_console); l = g_list_append(l, act); - + return l; } @@ -853,28 +852,28 @@ PURPLE_PLUGIN_MAGIC, PURPLE_MAJOR_VERSION, PURPLE_MINOR_VERSION, - PURPLE_PLUGIN_STANDARD, /**< type */ - PIDGIN_PLUGIN_TYPE, /**< ui_requirement */ - 0, /**< flags */ - NULL, /**< dependencies */ - PURPLE_PRIORITY_DEFAULT, /**< priority */ + PURPLE_PLUGIN_STANDARD, /**< type */ + PIDGIN_PLUGIN_TYPE, /**< ui_requirement */ + 0, /**< flags */ + NULL, /**< dependencies */ + PURPLE_PRIORITY_DEFAULT, /**< priority */ - "gtk-xmpp", /**< id */ - N_("XMPP Console"), /**< name */ - DISPLAY_VERSION, /**< version */ - /** summary */ + "gtk-xmpp", /**< id */ + N_("XMPP Console"), /**< name */ + DISPLAY_VERSION, /**< version */ + /** summary */ N_("Send and receive raw XMPP stanzas."), - /** description */ + /** description */ N_("This plugin is useful for debbuging XMPP servers or clients."), - "Sean Egan <seanegan@gmail.com>", /**< author */ - PURPLE_WEBSITE, /**< homepage */ + "Sean Egan <seanegan@gmail.com>", /**< author */ + PURPLE_WEBSITE, /**< homepage */ - plugin_load, /**< load */ - plugin_unload, /**< unload */ - NULL, /**< destroy */ + plugin_load, /**< load */ + plugin_unload, /**< unload */ + NULL, /**< destroy */ NULL, /**< ui_info */ - NULL, /**< extra_info */ + NULL, /**< extra_info */ NULL, actions,
--- a/pidgin/win32/nsis/pidgin-installer.nsi Fri May 22 00:38:45 2009 +0000 +++ b/pidgin/win32/nsis/pidgin-installer.nsi Tue Jun 09 23:30:18 2009 +0000 @@ -717,6 +717,7 @@ Delete "$INSTDIR\ca-certs\GTE_CyberTrust_Global_Root.pem" Delete "$INSTDIR\ca-certs\Microsoft_Internet_Authority.pem" Delete "$INSTDIR\ca-certs\Microsoft_Secure_Server_Authority.pem" + Delete "$INSTDIR\ca-certs\StartCom_Certification_Authority.pem" Delete "$INSTDIR\ca-certs\StartCom_Free_SSL_CA.pem" Delete "$INSTDIR\ca-certs\Verisign_Class3_Primary_CA.pem" Delete "$INSTDIR\ca-certs\VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem"
--- a/po/ChangeLog Fri May 22 00:38:45 2009 +0000 +++ b/po/ChangeLog Tue Jun 09 23:30:18 2009 +0000 @@ -1,6 +1,13 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul version 2.6.0 + * Armenian translation added (David Avsharyan) + * Lao translation updated (Anousak Souphavah) + * Slovenian translation updated (Martin Srebotnjak) + * Swahili translation added (Paul Msegeya) + +version 2.5.6 + * German translation updated (Björn Vogt) version 2.5.5 * Afrikaans translation updated (Friedel Wolff)
--- a/po/ca.po Fri May 22 00:38:45 2009 +0000 +++ b/po/ca.po Tue Jun 09 23:30:18 2009 +0000 @@ -33,8 +33,8 @@ msgstr "" "Project-Id-Version: Pidgin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-05-17 14:59+0200\n" -"PO-Revision-Date: 2009-05-17 15:05+0200\n" +"POT-Creation-Date: 2009-06-06 22:44+0200\n" +"PO-Revision-Date: 2009-06-06 22:51+0200\n" "Last-Translator: Josep Puigdemont i Casamajó <josep.puigdemont@gmail.com>\n" "Language-Team: Catalan <tradgnome@softcatala.net>\n" "MIME-Version: 1.0\n" @@ -3198,6 +3198,10 @@ msgid "Chat _name:" msgstr "_Nom del xat:" +#. should this be a settings error? +msgid "Unable to resolve server" +msgstr "No s'ha pogut resoldre el nom del servidor" + msgid "Chat error" msgstr "Error en el xat" @@ -3246,6 +3250,9 @@ msgid "Gadu-Gadu User" msgstr "Usuari Gadu-Gadu" +msgid "GG server" +msgstr "Servidor GG" + #, c-format msgid "Unknown command: %s" msgstr "Ordre desconeguda: %s" @@ -3288,8 +3295,9 @@ msgid "_Password:" msgstr "_Contrasenya:" -msgid "IRC nicks may not contain whitespace" -msgstr "Els sobrenoms d'IRC no poden contenir espais en blanc" +msgid "IRC nick and server may not contain whitespace" +msgstr "" +"Els sobrenoms i els noms de servidor d'IRC no poden contenir espais en blanc" #. 1. connect to server #. connect to the server @@ -3763,6 +3771,9 @@ msgid "Server does not use any supported authentication method" msgstr "No hi ha cap mètode d'autenticació compatible amb aquest servidor" +msgid "You require encryption, but it is not available on this server." +msgstr "Requeriu xifratge, però no està disponible en aquest servidor." + msgid "Invalid challenge from server" msgstr "Repte del servidor invàlid" @@ -4223,9 +4234,6 @@ msgid "Roles:" msgstr "Rols:" -msgid "You require encryption, but it is not available on this server." -msgstr "Requeriu xifratge, però no està disponible en aquest servidor." - msgid "Ping timeout" msgstr "Temps d'espera del ping" @@ -4273,9 +4281,6 @@ msgid "Unregistration Failed" msgstr "No s'ha pogut cancel·lar el registre" -msgid "Already Registered" -msgstr "Ja esteu registrat" - msgid "State" msgstr "Estat" @@ -4288,6 +4293,9 @@ msgid "Date" msgstr "Data" +msgid "Already Registered" +msgstr "Ja esteu registrat" + msgid "Unregister" msgstr "Cancel·la el registre" @@ -5499,17 +5507,6 @@ msgstr "Autenticació amb el Windows Live ID: la resposta no és vàlida" #, c-format -msgid "%s is not a valid group." -msgstr "%s no és un nom de grup vàlid" - -msgid "Unknown error." -msgstr "Error desconegut." - -#, c-format -msgid "%s on %s (%s)" -msgstr "%s a %s (%s)" - -#, c-format msgid "%s just sent you a Nudge!" msgstr "%s us ha donat un cop de colze!" @@ -5550,15 +5547,12 @@ msgid "Service Temporarily Unavailable." msgstr "El servei no està disponible temporalment." +msgid "Unknown error." +msgstr "Error desconegut." + msgid "Mobile message was not sent because it was too long." msgstr "No s'ha enviat el missatge al mòbil perquè era massa llarg." -msgid "Unable to rename group" -msgstr "No s'ha pogut canviar el nom del grup" - -msgid "Unable to delete group" -msgstr "No s'ha pogut suprimir el grup" - #, c-format msgid "" "The MSN server will shut down for maintenance in %d minute. You will " @@ -5716,14 +5710,6 @@ msgstr "" "No s'ha pogut enviar el missatge perquè s'ha produït un error desconegut:" -#, c-format -msgid "%s has added you to his or her buddy list." -msgstr "%s us ha afegit a la seva llista d'amics." - -#, c-format -msgid "%s has removed you from his or her buddy list." -msgstr "%s us ha suprimit de la seva llista d'amics." - msgid "Delete Buddy from Address Book?" msgstr "Voleu suprimir l'amic de la llibreta d'adreces?" @@ -5753,6 +5739,28 @@ msgstr "Connector per al protocol MSN" #, c-format +msgid "%s is not a valid group." +msgstr "%s no és un nom de grup vàlid" + +#, c-format +msgid "%s on %s (%s)" +msgstr "%s a %s (%s)" + +msgid "Unable to rename group" +msgstr "No s'ha pogut canviar el nom del grup" + +msgid "Unable to delete group" +msgstr "No s'ha pogut suprimir el grup" + +#, c-format +msgid "%s has added you to his or her buddy list." +msgstr "%s us ha afegit a la seva llista d'amics." + +#, c-format +msgid "%s has removed you from his or her buddy list." +msgstr "%s us ha suprimit de la seva llista d'amics." + +#, c-format msgid "No such user: %s" msgstr "Aquest usuari no existeix: %s" @@ -6629,6 +6637,9 @@ msgid "iChat AV" msgstr "iChat AV" +msgid "Live Video" +msgstr "Vídeo en directe" + msgid "Camera" msgstr "Càmera" @@ -9619,16 +9630,24 @@ msgstr "La contrasenya no és correcta" #. security lock from too many failed login attempts -msgid "Account locked: Too many failed login attempts" -msgstr "S'ha blocat el compte: s'ha intentat entrar massa vegades" +msgid "" +"Account locked: Too many failed login attempts.\n" +"Logging into the Yahoo! website may fix this." +msgstr "" +"El compte està blocat perquè s'ha intentat entrar massa cops.\n" +"Això es pot solucionar entrant al web de Yahoo!" #. the username does not exist msgid "Username does not exist" msgstr "L'usuari no existeix" #. indicates a lock of some description -msgid "Account locked: See the debug log" -msgstr "El compte està blocat: vegeu el registre de depuració" +msgid "" +"Account locked: Unknown reason.\n" +"Logging into the Yahoo! website may fix this." +msgstr "" +"El compte està blocat, però no se'n coneix el motiu.\n" +"Això es pot solucionar entrant al web de Yahoo!" #. username or password missing msgid "Username or password missing" @@ -11495,6 +11514,9 @@ msgid "Hungarian" msgstr "Hongarès" +msgid "Armenian" +msgstr "Armeni" + msgid "Indonesian" msgstr "Indonesi" @@ -11592,6 +11614,9 @@ msgid "Swedish" msgstr "Suec" +msgid "Swahili" +msgstr " Suahili" + msgid "Tamil" msgstr "Tàmil" @@ -13891,12 +13916,6 @@ "- escriu a l'inrevés tots els missatges rebuts\n" "- envia un missatge a tots els amics immediatament després que es connectin" -msgid "Cursor Color" -msgstr "Color del cursor" - -msgid "Secondary Cursor Color" -msgstr "Color secundari del cursor" - msgid "Hyperlink Color" msgstr "Color dels hiperenllaços" @@ -13906,6 +13925,9 @@ msgid "Highlighted Message Name Color" msgstr "Nom del color per als missatges ressaltats" +msgid "Typing Notification Color" +msgstr "Color per a les notificacions de quan s'escriu" + msgid "GtkTreeView Horizontal Separation" msgstr "Separació horitzontal del GtkTreeView" @@ -13935,35 +13957,21 @@ msgid "GTK+ Text Shortcut Theme" msgstr "Tema de la drecera de text de GTK+" -#. -#. for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) { -#. hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); -#. gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); -#. -#. check = pidgin_prefs_checkbox(_(widget_bool_names[i]), -#. widget_bool_prefs_set[i], hbox); -#. gtk_size_group_add_widget(labelsg, check); -#. -#. widget_bool_widgets[i] = pidgin_prefs_checkbox("", widget_bool_prefs[i], hbox); -#. * -#. gtk_size_group_add_widget(widgetsb, widget_bool_widgets[i]); -#. * -#. gtk_widget_set_sensitive(widget_bool_widgets[i], -#. purple_prefs_get_bool(widget_bool_prefs_set[i])); -#. g_signal_connect(G_OBJECT(check), "toggled", -#. G_CALLBACK(pidgin_toggle_sensitive), -#. widget_bool_widgets[i]); -#. } -#. -msgid "Interface colors" -msgstr "Colors de la interfície" - -msgid "Widget Sizes" -msgstr "Mides del giny" +msgid "Disable Typing Notification Text" +msgstr "Inhabilita les notificacions de que s'està escrivint" + +msgid "GTK+ Theme Control Settings" +msgstr "Configuració dels temes GTK+" + +msgid "Colors" +msgstr "Colors" msgid "Fonts" msgstr "Tipus de lletra" +msgid "Miscellaneous" +msgstr "Miscel·lània" + msgid "Gtkrc File Tools" msgstr "Eines de fitxer Gtkrc" @@ -14319,8 +14327,23 @@ msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "Aquest connector és útil per a depurar servidors i clients XMPP." -#~ msgid "Live Video" -#~ msgstr "Vídeo en directe" +#~ msgid "Account locked: Too many failed login attempts" +#~ msgstr "S'ha blocat el compte: s'ha intentat entrar massa vegades" + +#~ msgid "Account locked: See the debug log" +#~ msgstr "El compte està blocat: vegeu el registre de depuració" + +#~ msgid "Cursor Color" +#~ msgstr "Color del cursor" + +#~ msgid "Secondary Cursor Color" +#~ msgstr "Color secundari del cursor" + +#~ msgid "Interface colors" +#~ msgstr "Colors de la interfície" + +#~ msgid "Widget Sizes" +#~ msgstr "Mides del giny" #~ msgid "Invite message" #~ msgstr "Missatge d'invitació" @@ -16345,9 +16368,6 @@ #~ msgid "Invisible for friends only" #~ msgstr "Només invisible per als amics" -#~ msgid "Unable to resolve hostname." -#~ msgstr "No s'ha pogut resoldre el nom de l'ordinador." - #~ msgid "Error while writing to socket." #~ msgstr "S'ha produït un error en escriure al sòcol." @@ -16557,9 +16577,6 @@ #~ msgid "/Buddies/Log Out" #~ msgstr "/Amics/Desconnecta" -#~ msgid "Miscellaneous error" -#~ msgstr "Error miscel·lani" - #~ msgid "Unknown error when attempting to authorize with MSN login server." #~ msgstr "" #~ "S'ha produït un error desconegut en intentar autoritzar amb el servidor "
--- a/po/de.po Fri May 22 00:38:45 2009 +0000 +++ b/po/de.po Tue Jun 09 23:30:18 2009 +0000 @@ -11,9 +11,9 @@ msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-05-15 19:56+0200\n" -"PO-Revision-Date: 2009-05-15 19:56+0200\n" -"Last-Translator: Jochen Kemnade <jochenkemnade@web.de>\n" +"POT-Creation-Date: 2009-06-01 12:31+0200\n" +"PO-Revision-Date: 2009-06-01 12:31+0200\n" +"Last-Translator: Björn Voigt <bjoern@cs.tu-berlin.de>\n" "Language-Team: Deutsch <de@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1788,6 +1788,8 @@ msgid "+++ %s signed off" msgstr "+++ %s hat sich abgemeldet" +#. Unknown error +#. Unknown error! msgid "Unknown error" msgstr "Unbekannter Fehler" @@ -3257,8 +3259,8 @@ msgid "_Password:" msgstr "_Passwort:" -msgid "IRC nicks may not contain whitespace" -msgstr "IRC-Nicknamen dürfen keine Leerzeichen enthalten" +msgid "IRC nick and server may not contain whitespace" +msgstr "IRC- Server und -Nicknamen dürfen keine Leerzeichen enthalten" #. 1. connect to server #. connect to the server @@ -3741,6 +3743,10 @@ msgid "Server does not use any supported authentication method" msgstr "Der Server benutzt keine der unterstützten Authentifizierungsmethoden" +msgid "You require encryption, but it is not available on this server." +msgstr "" +"Sie fordern Verschlüsselung, aber diese ist auf dem Server nicht verfügbar." + msgid "Invalid challenge from server" msgstr "Ungültige Challenge vom Server" @@ -3748,15 +3754,13 @@ msgstr "SASL-Fehler" msgid "The BOSH connection manager terminated your session." -msgstr "" - -#, fuzzy +msgstr "Der BOSH-Verbindungsmanager hat Ihre Sitzung beendet." + msgid "No session ID given" -msgstr "Kein Grund angegeben" - -#, fuzzy +msgstr "Keine Sitzungs-ID angegeben" + msgid "Unsupported version of BOSH protocol" -msgstr "Nicht-unterstützte Version" +msgstr "Nicht-unterstützte Version des BOSH-Protokolls" msgid "Unable to establish a connection with the server" msgstr "Die Verbindung mit dem Server konnte nicht hergestellt werden" @@ -4006,7 +4010,7 @@ msgid "Resource" msgstr "Ressource" -#, fuzzy, c-format +#, c-format msgid "%s ago" msgstr "vor %s" @@ -4194,10 +4198,6 @@ msgid "Roles:" msgstr "Funktion" -msgid "You require encryption, but it is not available on this server." -msgstr "" -"Sie fordern Verschlüsselung, aber diese ist auf dem Server nicht verfügbar." - msgid "Ping timeout" msgstr "Ping-Zeitüberschreitung" @@ -5424,17 +5424,6 @@ msgstr "Windows Live ID-Authentifikation:Ungültige Antwort" #, c-format -msgid "%s is not a valid group." -msgstr "%s ist keine gültige Gruppe." - -msgid "Unknown error." -msgstr "Unbekannter Fehler." - -#, c-format -msgid "%s on %s (%s)" -msgstr "%s auf %s (%s)" - -#, c-format msgid "%s just sent you a Nudge!" msgstr "%s hat Sie gerade angestoßen!" @@ -5475,15 +5464,12 @@ msgid "Service Temporarily Unavailable." msgstr "Dienst momentan nicht verfügbar." +msgid "Unknown error." +msgstr "Unbekannter Fehler." + msgid "Mobile message was not sent because it was too long." msgstr "Mobile Nachricht wurde nicht gesendet, da sie zu lang war." -msgid "Unable to rename group" -msgstr "Kann die Gruppe nicht umbenennen" - -msgid "Unable to delete group" -msgstr "Kann die Gruppe nicht löschen" - #, c-format msgid "" "The MSN server will shut down for maintenance in %d minute. You will " @@ -5647,14 +5633,6 @@ "Nachricht konnte nicht gesendet werden, da ein unbekannter Fehler " "aufgetreten ist:" -#, c-format -msgid "%s has added you to his or her buddy list." -msgstr "Der Benutzer %s hat Sie zu seiner Buddy-Liste hinzugefügt." - -#, c-format -msgid "%s has removed you from his or her buddy list." -msgstr "Der Benutzer %s hat Sie von seiner Buddy-Liste gelöscht." - msgid "Delete Buddy from Address Book?" msgstr "Buddy aus dem Adressbuch löschen?" @@ -5684,6 +5662,28 @@ msgstr "MSN-Protokoll-Plugin" #, c-format +msgid "%s is not a valid group." +msgstr "%s ist keine gültige Gruppe." + +#, c-format +msgid "%s on %s (%s)" +msgstr "%s auf %s (%s)" + +msgid "Unable to rename group" +msgstr "Kann die Gruppe nicht umbenennen" + +msgid "Unable to delete group" +msgstr "Kann die Gruppe nicht löschen" + +#, c-format +msgid "%s has added you to his or her buddy list." +msgstr "Der Benutzer %s hat Sie zu seiner Buddy-Liste hinzugefügt." + +#, c-format +msgid "%s has removed you from his or her buddy list." +msgstr "Der Benutzer %s hat Sie von seiner Buddy-Liste gelöscht." + +#, c-format msgid "No such user: %s" msgstr "Kein solcher Benutzer: %s" @@ -6557,6 +6557,9 @@ msgid "iChat AV" msgstr "iChat AV" +msgid "Live Video" +msgstr "Live-Video" + msgid "Camera" msgstr "Kamera" @@ -9556,6 +9559,30 @@ msgid "Add buddy rejected" msgstr "Hinzufügen des Buddys zurückgewiesen" +#. Some error in the received stream +msgid "Received invalid data" +msgstr "Ungültige Daten empfangen" + +#. Password incorrect +msgid "Incorrect Password" +msgstr "Falsches Passwort" + +#. security lock from too many failed login attempts +msgid "Account locked: Too many failed login attempts" +msgstr "Konto gesperrt: Zu viele erfolglose Login-Versuche" + +#. the username does not exist +msgid "Username does not exist" +msgstr "Benutzername existiert nicht" + +#. indicates a lock of some description +msgid "Account locked: See the debug log" +msgstr "Konto gesperrt: Sehen Sie in den Debug-Mitschnitt" + +#. username or password missing +msgid "Username or password missing" +msgstr "Benutzername oder Passwort fehlt" + #, c-format msgid "" "The Yahoo server has requested the use of an unrecognized authentication " @@ -10465,8 +10492,9 @@ msgid "Please update the necessary fields." msgstr "Bitte aktualisieren Sie die erforderlichen Felder." -msgid "Room _List" -msgstr "Ra_umliste" +#, fuzzy +msgid "A_ccount" +msgstr "Konto" msgid "" "Please enter the appropriate information about the chat you would like to " @@ -10475,8 +10503,8 @@ "Bitte geben Sie geeignete Informationen über den Chat ein, den Sie betreten " "wollen.\n" -msgid "_Account:" -msgstr "_Konto:" +msgid "Room _List" +msgstr "Ra_umliste" msgid "_Block" msgstr "_Sperren" @@ -10596,7 +10624,7 @@ msgstr "/Buddys/Anzeigen/_Offline-Buddys" msgid "/Buddies/Show/_Empty Groups" -msgstr "/Buddys/Anzeigen/_leere Gruppen" +msgstr "/Buddys/Anzeigen/_Leere Gruppen" msgid "/Buddies/Show/Buddy _Details" msgstr "/Buddys/Anzeigen/Buddy-_Details" @@ -10837,7 +10865,7 @@ msgstr "/Buddys/Anzeigen/Offline-Buddys" msgid "/Buddies/Show/Empty Groups" -msgstr "/Buddys/Anzeigen/leere Gruppen" +msgstr "/Buddys/Anzeigen/Leere Gruppen" msgid "/Buddies/Show/Buddy Details" msgstr "/Buddys/Anzeigen/Buddy-Details" @@ -11410,6 +11438,9 @@ msgid "Hungarian" msgstr "Ungarisch" +msgid "Armenian" +msgstr "Armenisch" + msgid "Indonesian" msgstr "Indonesisch" @@ -11506,6 +11537,9 @@ msgid "Swedish" msgstr "Schwedisch" +msgid "Swahili" +msgstr "Swahili" + msgid "Tamil" msgstr "Tamilisch" @@ -12365,6 +12399,9 @@ msgid "Pounce on Whom" msgstr "Bei wem alarmieren" +msgid "_Account:" +msgstr "_Konto:" + msgid "_Buddy name:" msgstr "_Buddy-Name:" @@ -13025,6 +13062,9 @@ msgid "Custom Smiley Manager" msgstr "Verwaltung für benutzerdefinierte Smileys" +msgid "Select Buddy Icon" +msgstr "Buddy-Icon auswählen" + msgid "Click to change your buddyicon for this account." msgstr "Klicken Sie hier, um Ihr Buddy-Icon für dieses Konto zu ändern." @@ -14183,19 +14223,3 @@ msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "" "Dieses Plugin ist nützlich zur Fehlersuche in XMPP-Servern oder -Clients." - -#~ msgid "Live Video" -#~ msgstr "Live-Video" - -#~ msgid "Invite message" -#~ msgstr "Einladungsnachricht" - -#~ msgid "" -#~ "Please enter the name of the user you wish to invite,\n" -#~ "along with an optional invite message." -#~ msgstr "" -#~ "Bitte geben Sie den Benutzernamen der Person ein, die Sie einladen " -#~ "möchten zusammen mit einer optionalen Einladungsnachricht." - -#~ msgid "ST_UN server:" -#~ msgstr "ST_UN Server:"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/po/hy.po Tue Jun 09 23:30:18 2009 +0000 @@ -0,0 +1,13365 @@ +# translation of am.po to Armenian +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# David Avsharyan <avsharyan@gmail.com>, 2009. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: am\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 20:21-0700\n" +"PO-Revision-Date: 2009-05-20 17:37+0400\n" +"Last-Translator: David Avsharyan <avsharyan@gmail.com>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" + +#. Translators may want to transliterate the name. +#. It is not to be translated. +msgid "Finch" +msgstr "Սերինոս" + +#, c-format +msgid "%s. Try `%s -h' for more information.\n" +msgstr "%s. Ավելի շատ ինֆորմացիայի համար հավագեք `%s -h'.\n" + +#, c-format +msgid "" +"%s\n" +"Usage: %s [OPTION]...\n" +"\n" +" -c, --config=DIR use DIR for config files\n" +" -d, --debug print debugging messages to stderr\n" +" -h, --help display this help and exit\n" +" -n, --nologin don't automatically login\n" +" -v, --version display the current version and exit\n" +msgstr "" +"%s\n" +"Կիրառում: %s [OPTION]...\n" +"\n" +" -c, --config=DIR օգտագործել DIR կոնֆիգուրացիոն ֆայլերի համար\n" +" -d, --debug կարգաբերվող հաղորդագրությունները տպել դեպի ստանդարտ " +"սխալների հոսք\n" +" -h, --help ցույց տալ այս օգնությունը և դուրս գալ\n" +" -n, --nologin ոչ ինքնաբերաբար մուտք\n" +" -v, --version ցույց տալ ընթացիկ տարբերակը և դուրս գալ\n" + +#, c-format +msgid "" +"%s encountered errors migrating your settings from %s to %s. Please " +"investigate and complete the migration by hand. Please report this error at " +"http://developer.pidgin.im" +msgstr "" + +#, fuzzy +msgid "Error" +msgstr "Սխալներզ" + +msgid "Account was not added" +msgstr "" + +msgid "Username of an account must be non-empty." +msgstr "Օգտագործողի անունը ..." + +msgid "New mail notifications" +msgstr "Նոր նամակի ծանուցումներ" + +msgid "Remember password" +msgstr "Հիշել գաղտնաբառը" + +msgid "There are no protocol plugins installed." +msgstr "Այնտեղ տեղադրված չէ պրոտոկոլի ավելացումներ․" + +msgid "(You probably forgot to 'make install'.)" +msgstr "(Հավանաբար դուք մոռացել եք անեք 'make install'.)" + +msgid "Modify Account" +msgstr "Ձևափոխել Հաշիվը" + +msgid "New Account" +msgstr "Նոր Հաշիվ" + +msgid "Protocol:" +msgstr "Արձանագրություն։" + +msgid "Username:" +msgstr "Օգտագործողի անունը։" + +msgid "Password:" +msgstr "Գաղտնաբառ։" + +msgid "Alias:" +msgstr "Փոխանուն։" + +#. Register checkbox +msgid "Create this account on the server" +msgstr "Ստեղծել այս հաշիվը սերվերի վրա" + +#. Cancel button +#. Cancel +msgid "Cancel" +msgstr "Չեղյալ համարել" + +#. Save button +#. Save +msgid "Save" +msgstr "Պահպանել" + +#, c-format +msgid "Are you sure you want to delete %s?" +msgstr "Դուք համոզված եք, որ ցանկանում եք ջնջել %s?" + +msgid "Delete Account" +msgstr "Ջնջել Հաշիվը" + +#. Delete button +msgid "Delete" +msgstr "Ջնջել" + +msgid "Accounts" +msgstr "Հաշիվներ" + +msgid "You can enable/disable accounts from the following list." +msgstr "Դուք կարող եք միացնել/անջատել հաշիվները հետևյալ ցանկից․" + +#. Add button +msgid "Add" +msgstr "Ավելացնել" + +#. Modify button +msgid "Modify" +msgstr "Փոփոխել" + +#, c-format +msgid "%s%s%s%s has made %s his or her buddy%s%s" +msgstr "" + +msgid "Add buddy to your list?" +msgstr "" + +#, c-format +msgid "%s%s%s%s wants to add %s to his or her buddy list%s%s" +msgstr "" + +msgid "Authorize buddy?" +msgstr "" + +msgid "Authorize" +msgstr "Լիազորում" + +msgid "Deny" +msgstr "Մերժել" + +#, c-format +msgid "" +"Online: %d\n" +"Total: %d" +msgstr "" +"Կապի մեջ: %d\n" +"Ընդհանուր: %d" + +#, c-format +msgid "Account: %s (%s)" +msgstr "Հաշիվ: %s (%s" + +#, c-format +msgid "" +"\n" +"Last Seen: %s ago" +msgstr "" +"\n" +"Last Seen: %s ago" + +msgid "Default" +msgstr "" + +msgid "You must provide a username for the buddy." +msgstr "" + +msgid "You must provide a group." +msgstr "" + +msgid "You must select an account." +msgstr "" + +msgid "The selected account is not online." +msgstr "" + +msgid "Error adding buddy" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "Alias (optional)" +msgstr "" + +msgid "Add in group" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "Add Buddy" +msgstr "" + +msgid "Please enter buddy information." +msgstr "" + +msgid "Chats" +msgstr "" + +#. Extract their Name and put it in +msgid "Name" +msgstr "" + +msgid "Alias" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "Auto-join" +msgstr "" + +msgid "Add Chat" +msgstr "" + +msgid "You can edit more information from the context menu later." +msgstr "" + +msgid "Error adding group" +msgstr "" + +msgid "You must give a name for the group to add." +msgstr "" + +msgid "Add Group" +msgstr "" + +msgid "Enter the name of the group" +msgstr "" + +msgid "Edit Chat" +msgstr "" + +msgid "Please Update the necessary fields." +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "Edit Settings" +msgstr "" + +msgid "Information" +msgstr "" + +msgid "Retrieving..." +msgstr "" + +msgid "Get Info" +msgstr "" + +msgid "Add Buddy Pounce" +msgstr "" + +msgid "Send File" +msgstr "" + +msgid "Blocked" +msgstr "" + +msgid "Show when offline" +msgstr "" + +#, c-format +msgid "Please enter the new name for %s" +msgstr "" + +msgid "Rename" +msgstr "" + +msgid "Set Alias" +msgstr "" + +msgid "Enter empty string to reset the name." +msgstr "" + +msgid "Removing this contact will also remove all the buddies in the contact" +msgstr "" + +msgid "Removing this group will also remove all the buddies in the group" +msgstr "" + +#, c-format +msgid "Are you sure you want to remove %s?" +msgstr "" + +#. XXX: anything to do with the returned ui-handle? +msgid "Confirm Remove" +msgstr "" + +msgid "Remove" +msgstr "" + +#. Buddy List +msgid "Buddy List" +msgstr "" + +msgid "Place tagged" +msgstr "" + +msgid "Toggle Tag" +msgstr "" + +msgid "View Log" +msgstr "" + +#. General +msgid "Nickname" +msgstr "" + +#. Never know what those translations might end up like... +#. Idle stuff +msgid "Idle" +msgstr "" + +msgid "On Mobile" +msgstr "" + +msgid "New..." +msgstr "" + +msgid "Saved..." +msgstr "" + +msgid "Plugins" +msgstr "" + +msgid "Block/Unblock" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Unblock" +msgstr "" + +msgid "" +"Please enter the username or alias of the person you would like to Block/" +"Unblock." +msgstr "" + +#. Not multiline +#. Not masked? +#. No hints? +msgid "OK" +msgstr "OK" + +msgid "New Instant Message" +msgstr "" + +msgid "Please enter the username or alias of the person you would like to IM." +msgstr "" + +msgid "Channel" +msgstr "Ալիք" + +msgid "Join a Chat" +msgstr "Միանալ զրույցին" + +msgid "Please enter the name of the chat you want to join." +msgstr "" + +msgid "Join" +msgstr "Միանալ" + +msgid "" +"Please enter the username or alias of the person whose log you would like to " +"view." +msgstr "" + +#. Create the "Options" frame. +msgid "Options" +msgstr "" + +msgid "Send IM..." +msgstr "" + +msgid "Block/Unblock..." +msgstr "Փակել/Բացել" + +msgid "Join Chat..." +msgstr "Միանալ զրույցին ... " + +msgid "View Log..." +msgstr "Նայել գրառումները․․․" + +msgid "View All Logs" +msgstr "Նայել մատյանի բոլոր գրառումները" + +msgid "Show" +msgstr "Ցույց տալ" + +msgid "Empty groups" +msgstr "Դատարկ խմբեր" + +msgid "Offline buddies" +msgstr "" + +msgid "Sort" +msgstr "Դասակարգել" + +msgid "By Status" +msgstr "Ըստ " + +msgid "Alphabetically" +msgstr "" + +msgid "By Log Size" +msgstr "" + +msgid "Buddy" +msgstr "" + +msgid "Chat" +msgstr "Զրույց" + +msgid "Grouping" +msgstr "" + +msgid "Certificate Import" +msgstr "" + +msgid "Specify a hostname" +msgstr "" + +msgid "Type the host name this certificate is for." +msgstr "" + +#, c-format +msgid "" +"File %s could not be imported.\n" +"Make sure that the file is readable and in PEM format.\n" +msgstr "" + +msgid "Certificate Import Error" +msgstr "" + +msgid "X.509 certificate import failed" +msgstr "" + +msgid "Select a PEM certificate" +msgstr "" + +#, c-format +msgid "" +"Export to file %s failed.\n" +"Check that you have write permission to the target path\n" +msgstr "" + +msgid "Certificate Export Error" +msgstr "" + +msgid "X.509 certificate export failed" +msgstr "" + +msgid "PEM X.509 Certificate Export" +msgstr "" + +#, c-format +msgid "Certificate for %s" +msgstr "" + +#, c-format +msgid "" +"Common name: %s\n" +"\n" +"SHA1 fingerprint:\n" +"%s" +msgstr "" + +msgid "SSL Host Certificate" +msgstr "" + +#, c-format +msgid "Really delete certificate for %s?" +msgstr "" + +msgid "Confirm certificate delete" +msgstr "" + +msgid "Certificate Manager" +msgstr "" + +#. Creating the user splits +msgid "Hostname" +msgstr "" + +msgid "Info" +msgstr "" + +#. Close button +msgid "Close" +msgstr "" + +#, c-format +msgid "%s (%s)" +msgstr "" + +#, c-format +msgid "%s disconnected." +msgstr "" + +#, c-format +msgid "" +"%s\n" +"\n" +"Finch will not attempt to reconnect the account until you correct the error " +"and re-enable the account." +msgstr "" + +msgid "Re-enable Account" +msgstr "" + +msgid "" +"The account has disconnected and you are no longer in this chat. You will be " +"automatically rejoined in the chat when the account reconnects." +msgstr "" + +msgid "No such command." +msgstr "" + +msgid "Syntax Error: You typed the wrong number of arguments to that command." +msgstr "" + +msgid "Your command failed for an unknown reason." +msgstr "" + +msgid "That command only works in chats, not IMs." +msgstr "" + +msgid "That command only works in IMs, not chats." +msgstr "" + +msgid "That command doesn't work on this protocol." +msgstr "" + +msgid "Message was not sent, because you are not signed on." +msgstr "" + +#, c-format +msgid "%s (%s -- %s)" +msgstr "" + +#, c-format +msgid "%s [%s]" +msgstr "" + +#, c-format +msgid "" +"\n" +"%s is typing..." +msgstr "" + +msgid "You have left this chat." +msgstr "" + +msgid "Logging started. Future messages in this conversation will be logged." +msgstr "" + +msgid "" +"Logging stopped. Future messages in this conversation will not be logged." +msgstr "" + +msgid "Send To" +msgstr "" + +msgid "Conversation" +msgstr "" + +msgid "Clear Scrollback" +msgstr "" + +msgid "Show Timestamps" +msgstr "" + +msgid "Add Buddy Pounce..." +msgstr "" + +msgid "Invite..." +msgstr "" + +msgid "Enable Logging" +msgstr "" + +msgid "Enable Sounds" +msgstr "" + +msgid "<AUTO-REPLY> " +msgstr "" + +#, c-format +msgid "List of %d user:\n" +msgid_plural "List of %d users:\n" +msgstr[0] "" +msgstr[1] "" + +msgid "Supported debug options are: version" +msgstr "" + +msgid "No such command (in this context)." +msgstr "" + +msgid "" +"Use \"/help <command>\" for help on a specific command.\n" +"The following commands are available in this context:\n" +msgstr "" + +#, c-format +msgid "" +"%s is not a valid message class. See '/help msgcolor' for valid message " +"classes." +msgstr "" + +#, c-format +msgid "%s is not a valid color. See '/help msgcolor' for valid colors." +msgstr "" + +msgid "" +"say <message>: Send a message normally as if you weren't using a " +"command." +msgstr "" + +msgid "me <action>: Send an IRC style action to a buddy or chat." +msgstr "" + +msgid "" +"debug <option>: Send various debug information to the current " +"conversation." +msgstr "" + +msgid "clear: Clears the conversation scrollback." +msgstr "" + +msgid "help <command>: Help on a specific command." +msgstr "" + +msgid "users: Show the list of users in the chat." +msgstr "" + +msgid "plugins: Show the plugins window." +msgstr "" + +msgid "buddylist: Show the buddylist." +msgstr "" + +msgid "accounts: Show the accounts window." +msgstr "" + +msgid "debugwin: Show the debug window." +msgstr "" + +msgid "prefs: Show the preference window." +msgstr "" + +msgid "statuses: Show the savedstatuses window." +msgstr "" + +msgid "" +"msgcolor <class> <foreground> <background>: Set the color " +"for different classes of messages in the conversation window.<br> <" +"class>: receive, send, highlight, action, timestamp<br> <foreground/" +"background>: black, red, green, blue, white, gray, darkgray, magenta, " +"cyan, default<br><br>EXAMPLE:<br> msgcolor send cyan default" +msgstr "" + +msgid "Unable to open file." +msgstr "" + +msgid "Debug Window" +msgstr "" + +#. XXX: Setting the GROW_Y for the following widgets don't make sense. But right now +#. * it's necessary to make the width of the debug window resizable ... like I said, +#. * it doesn't make sense. The bug is likely in the packing in gntbox.c. +#. +msgid "Clear" +msgstr "" + +msgid "Filter:" +msgstr "" + +msgid "Pause" +msgstr "" + +#, c-format +msgid "File Transfers - %d%% of %d file" +msgid_plural "File Transfers - %d%% of %d files" +msgstr[0] "" +msgstr[1] "" + +#. Create the window. +msgid "File Transfers" +msgstr "" + +msgid "Progress" +msgstr "" + +msgid "Filename" +msgstr "" + +msgid "Size" +msgstr "" + +msgid "Speed" +msgstr "" + +msgid "Remaining" +msgstr "" + +#. XXX: Use of ggp_str_to_uin() is an ugly hack! +msgid "Status" +msgstr "" + +msgid "Close this window when all transfers finish" +msgstr "" + +msgid "Clear finished transfers" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Waiting for transfer to begin" +msgstr "" + +msgid "Canceled" +msgstr "" + +msgid "Failed" +msgstr "" + +#, c-format +msgid "%.2f KiB/s" +msgstr "" + +msgid "Sent" +msgstr "" + +msgid "Received" +msgstr "" + +msgid "Finished" +msgstr "" + +#, c-format +msgid "The file was saved as %s." +msgstr "" + +msgid "Sending" +msgstr "" + +msgid "Receiving" +msgstr "" + +#, c-format +msgid "Conversation in %s on %s" +msgstr "" + +#, c-format +msgid "Conversation with %s on %s" +msgstr "" + +msgid "%B %Y" +msgstr "" + +msgid "" +"System events will only be logged if the \"Log all status changes to system " +"log\" preference is enabled." +msgstr "" + +msgid "" +"Instant messages will only be logged if the \"Log all instant messages\" " +"preference is enabled." +msgstr "" + +msgid "" +"Chats will only be logged if the \"Log all chats\" preference is enabled." +msgstr "" + +msgid "No logs were found" +msgstr "" + +msgid "Total log size:" +msgstr "" + +#. Search box ********* +msgid "Scroll/Search: " +msgstr "" + +#, c-format +msgid "Conversations in %s" +msgstr "" + +#, c-format +msgid "Conversations with %s" +msgstr "" + +msgid "All Conversations" +msgstr "" + +msgid "System Log" +msgstr "" + +msgid "Calling ... " +msgstr "" + +msgid "Hangup" +msgstr "" + +#. Number of actions +msgid "Accept" +msgstr "" + +msgid "Reject" +msgstr "" + +msgid "Call in progress." +msgstr "" + +msgid "The call has been terminated." +msgstr "" + +#, c-format +msgid "%s wishes to start an audio session with you." +msgstr "" + +#, c-format +msgid "%s is trying to start an unsupported media session type with you." +msgstr "" + +msgid "You have rejected the call." +msgstr "" + +msgid "call: Make an audio call." +msgstr "" + +msgid "Emails" +msgstr "" + +msgid "You have mail!" +msgstr "" + +msgid "Sender" +msgstr "" + +msgid "Subject" +msgstr "" + +#, c-format +msgid "%s (%s) has %d new message." +msgid_plural "%s (%s) has %d new messages." +msgstr[0] "" +msgstr[1] "" + +msgid "New Mail" +msgstr "" + +#, c-format +msgid "Info for %s" +msgstr "" + +msgid "Buddy Information" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "IM" +msgstr "" + +msgid "Invite" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "URI" +msgstr "" + +msgid "ERROR" +msgstr "" + +msgid "loading plugin failed" +msgstr "" + +msgid "unloading plugin failed" +msgstr "" + +#, c-format +msgid "" +"Name: %s\n" +"Version: %s\n" +"Description: %s\n" +"Author: %s\n" +"Website: %s\n" +"Filename: %s\n" +msgstr "" + +msgid "Plugin need to be loaded before you can configure it." +msgstr "" + +msgid "No configuration options for this plugin." +msgstr "" + +msgid "Error loading plugin" +msgstr "" + +msgid "The selected file is not a valid plugin." +msgstr "" + +msgid "" +"Please open the debug window and try again to see the exact error message." +msgstr "" + +msgid "Select plugin to install" +msgstr "" + +msgid "You can (un)load plugins from the following list." +msgstr "" + +msgid "Install Plugin..." +msgstr "" + +msgid "Configure Plugin" +msgstr "" + +#. copy the preferences to tmp values... +#. * I liked "take affect immediately" Oh well :-( +#. (that should have been "effect," right?) +#. Back to instant-apply! I win! BU-HAHAHA! +#. Create the window +msgid "Preferences" +msgstr "" + +msgid "Please enter a buddy to pounce." +msgstr "" + +msgid "New Buddy Pounce" +msgstr "" + +msgid "Edit Buddy Pounce" +msgstr "" + +msgid "Pounce Who" +msgstr "" + +#. Account: +msgid "Account:" +msgstr "" + +msgid "Buddy name:" +msgstr "" + +#. Create the "Pounce When Buddy..." frame. +msgid "Pounce When Buddy..." +msgstr "" + +msgid "Signs on" +msgstr "" + +msgid "Signs off" +msgstr "" + +msgid "Goes away" +msgstr "" + +msgid "Returns from away" +msgstr "" + +msgid "Becomes idle" +msgstr "" + +msgid "Is no longer idle" +msgstr "" + +msgid "Starts typing" +msgstr "" + +msgid "Pauses while typing" +msgstr "" + +msgid "Stops typing" +msgstr "" + +msgid "Sends a message" +msgstr "" + +#. Create the "Action" frame. +msgid "Action" +msgstr "" + +msgid "Open an IM window" +msgstr "" + +msgid "Pop up a notification" +msgstr "" + +msgid "Send a message" +msgstr "" + +msgid "Execute a command" +msgstr "" + +msgid "Play a sound" +msgstr "" + +msgid "Pounce only when my status is not Available" +msgstr "" + +msgid "Recurring" +msgstr "" + +msgid "Cannot create pounce" +msgstr "" + +msgid "You do not have any accounts." +msgstr "" + +msgid "You must create an account first before you can create a pounce." +msgstr "" + +#, c-format +msgid "Are you sure you want to delete the pounce on %s for %s?" +msgstr "" + +msgid "Buddy Pounces" +msgstr "" + +#, c-format +msgid "%s has started typing to you (%s)" +msgstr "" + +#, c-format +msgid "%s has paused while typing to you (%s)" +msgstr "" + +#, c-format +msgid "%s has signed on (%s)" +msgstr "" + +#, c-format +msgid "%s has returned from being idle (%s)" +msgstr "" + +#, c-format +msgid "%s has returned from being away (%s)" +msgstr "" + +#, c-format +msgid "%s has stopped typing to you (%s)" +msgstr "" + +#, c-format +msgid "%s has signed off (%s)" +msgstr "" + +#, c-format +msgid "%s has become idle (%s)" +msgstr "" + +#, c-format +msgid "%s has gone away. (%s)" +msgstr "" + +#, c-format +msgid "%s has sent you a message. (%s)" +msgstr "" + +msgid "Unknown pounce event. Please report this!" +msgstr "" + +msgid "Based on keyboard use" +msgstr "" + +msgid "From last sent message" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Show Idle Time" +msgstr "" + +msgid "Show Offline Buddies" +msgstr "" + +msgid "Notify buddies when you are typing" +msgstr "" + +msgid "Log format" +msgstr "" + +msgid "Log IMs" +msgstr "" + +msgid "Log chats" +msgstr "" + +msgid "Log status change events" +msgstr "" + +msgid "Report Idle time" +msgstr "" + +msgid "Change status when idle" +msgstr "" + +msgid "Minutes before changing status" +msgstr "" + +msgid "Change status to" +msgstr "" + +msgid "Conversations" +msgstr "" + +msgid "Logging" +msgstr "" + +msgid "You must fill all the required fields." +msgstr "" + +msgid "The required fields are underlined." +msgstr "" + +msgid "Not implemented yet." +msgstr "" + +msgid "Save File..." +msgstr "" + +msgid "Open File..." +msgstr "" + +msgid "Choose Location..." +msgstr "" + +msgid "Hit 'Enter' to find more rooms of this category." +msgstr "" + +msgid "Get" +msgstr "" + +#. Create the window. +msgid "Room List" +msgstr "" + +msgid "Buddy logs in" +msgstr "" + +msgid "Buddy logs out" +msgstr "" + +msgid "Message received" +msgstr "" + +msgid "Message received begins conversation" +msgstr "" + +msgid "Message sent" +msgstr "" + +msgid "Person enters chat" +msgstr "" + +msgid "Person leaves chat" +msgstr "" + +msgid "You talk in chat" +msgstr "" + +msgid "Others talk in chat" +msgstr "" + +msgid "Someone says your username in chat" +msgstr "" + +msgid "GStreamer Failure" +msgstr "" + +msgid "GStreamer failed to initialize." +msgstr "" + +msgid "(default)" +msgstr "" + +msgid "Select Sound File ..." +msgstr "" + +msgid "Sound Preferences" +msgstr "" + +msgid "Profiles" +msgstr "" + +msgid "Automatic" +msgstr "" + +msgid "Console Beep" +msgstr "" + +msgid "Command" +msgstr "" + +msgid "No Sound" +msgstr "" + +msgid "Sound Method" +msgstr "" + +msgid "Method: " +msgstr "" + +#, c-format +msgid "" +"Sound Command\n" +"(%s for filename)" +msgstr "" + +#. Sound options +msgid "Sound Options" +msgstr "" + +msgid "Sounds when conversation has focus" +msgstr "" + +msgid "Always" +msgstr "" + +msgid "Only when available" +msgstr "" + +msgid "Only when not available" +msgstr "" + +msgid "Volume(0-100):" +msgstr "" + +#. Sound events +msgid "Sound Events" +msgstr "" + +msgid "Event" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Test" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Choose..." +msgstr "" + +#, c-format +msgid "Are you sure you want to delete \"%s\"" +msgstr "" + +msgid "Delete Status" +msgstr "" + +msgid "Saved Statuses" +msgstr "" + +msgid "Title" +msgstr "" + +msgid "Type" +msgstr "" + +#. Statuses are almost all the same. Define a macro to reduce code repetition. +#. PurpleStatusPrimitive +#. id - use default +#. name - use default +#. saveable +#. user_settable +#. not independent +#. Attributes - each status can have a message. +msgid "Message" +msgstr "" + +#. Use +msgid "Use" +msgstr "" + +msgid "Invalid title" +msgstr "" + +msgid "Please enter a non-empty title for the status." +msgstr "" + +msgid "Duplicate title" +msgstr "" + +msgid "Please enter a different title for the status." +msgstr "" + +msgid "Substatus" +msgstr "" + +msgid "Status:" +msgstr "" + +msgid "Message:" +msgstr "" + +msgid "Edit Status" +msgstr "" + +msgid "Use different status for following accounts" +msgstr "" + +#. Save & Use +msgid "Save & Use" +msgstr "" + +msgid "Certificates" +msgstr "" + +msgid "Sounds" +msgstr "" + +msgid "Statuses" +msgstr "" + +msgid "Error loading the plugin." +msgstr "" + +msgid "Couldn't find X display" +msgstr "" + +msgid "Couldn't find window" +msgstr "" + +msgid "This plugin cannot be loaded because it was not built with X11 support." +msgstr "" + +msgid "GntClipboard" +msgstr "" + +msgid "Clipboard plugin" +msgstr "" + +msgid "" +"When the gnt clipboard contents change, the contents are made available to " +"X, if possible." +msgstr "" + +#, c-format +msgid "%s just signed on" +msgstr "" + +#, c-format +msgid "%s just signed off" +msgstr "" + +#, c-format +msgid "%s sent you a message" +msgstr "" + +#, c-format +msgid "%s said your nick in %s" +msgstr "" + +#, c-format +msgid "%s sent a message in %s" +msgstr "" + +msgid "Buddy signs on/off" +msgstr "" + +msgid "You receive an IM" +msgstr "" + +msgid "Someone speaks in a chat" +msgstr "" + +msgid "Someone says your name in a chat" +msgstr "" + +msgid "Notify with a toaster when" +msgstr "" + +msgid "Beep too!" +msgstr "" + +msgid "Set URGENT for the terminal window." +msgstr "" + +msgid "GntGf" +msgstr "" + +msgid "Toaster plugin" +msgstr "" + +#, c-format +msgid "<b>Conversation with %s on %s:</b><br>" +msgstr "" + +msgid "History Plugin Requires Logging" +msgstr "" + +msgid "" +"Logging can be enabled from Tools -> Preferences -> Logging.\n" +"\n" +"Enabling logs for instant messages and/or chats will activate history for " +"the same conversation type(s)." +msgstr "" + +msgid "GntHistory" +msgstr "" + +msgid "Shows recently logged conversations in new conversations." +msgstr "" + +msgid "" +"When a new conversation is opened this plugin will insert the last " +"conversation into the current conversation." +msgstr "" + +msgid "Online" +msgstr "" + +msgid "Offline" +msgstr "" + +msgid "Online Buddies" +msgstr "" + +msgid "Offline Buddies" +msgstr "" + +msgid "Online/Offline" +msgstr "" + +msgid "Meebo" +msgstr "" + +msgid "No Grouping" +msgstr "" + +msgid "Nested Subgroup" +msgstr "" + +msgid "Nested Grouping (experimental)" +msgstr "" + +msgid "Provides alternate buddylist grouping options." +msgstr "" + +msgid "Lastlog" +msgstr "" + +#. Translator Note: The "backlog" is the conversation buffer/history. +msgid "lastlog: Searches for a substring in the backlog." +msgstr "" + +msgid "GntLastlog" +msgstr "" + +msgid "Lastlog plugin." +msgstr "" + +#, c-format +msgid "" +"\n" +"Fetching TinyURL..." +msgstr "" + +msgid "Only create TinyURL for urls of this length or greater" +msgstr "" + +msgid "TinyURL (or other) address prefix" +msgstr "" + +msgid "TinyURL" +msgstr "" + +msgid "TinyURL plugin" +msgstr "" + +msgid "When receiving a message with URL(s), TinyURL for easier copying" +msgstr "" + +msgid "accounts" +msgstr "" + +msgid "Password is required to sign on." +msgstr "" + +#, c-format +msgid "Enter password for %s (%s)" +msgstr "" + +msgid "Enter Password" +msgstr "" + +msgid "Save password" +msgstr "" + +#, c-format +msgid "Missing protocol plugin for %s" +msgstr "" + +msgid "Connection Error" +msgstr "" + +msgid "New passwords do not match." +msgstr "" + +msgid "Fill out all fields completely." +msgstr "" + +msgid "Original password" +msgstr "" + +msgid "New password" +msgstr "" + +msgid "New password (again)" +msgstr "" + +#, c-format +msgid "Change password for %s" +msgstr "" + +msgid "Please enter your current password and your new password." +msgstr "" + +#, c-format +msgid "Change user information for %s" +msgstr "" + +msgid "Set User Info" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Buddies" +msgstr "" + +msgid "buddy list" +msgstr "" + +msgid "(DOES NOT MATCH)" +msgstr "" + +#. Make messages +#, c-format +msgid "%s has presented the following certificate for just-this-once use:" +msgstr "" + +#, c-format +msgid "" +"Common name: %s %s\n" +"Fingerprint (SHA1): %s" +msgstr "" + +#. TODO: Find what the handle ought to be +msgid "Single-use Certificate Verification" +msgstr "" + +#. Scheme name +#. Pool name +msgid "Certificate Authorities" +msgstr "" + +#. Scheme name +#. Pool name +msgid "SSL Peers Cache" +msgstr "" + +#. Make messages +#, c-format +msgid "Accept certificate for %s?" +msgstr "" + +#. TODO: Find what the handle ought to be +msgid "SSL Certificate Verification" +msgstr "" + +msgid "_View Certificate..." +msgstr "" + +#. Prompt the user to authenticate the certificate +#. vrq will be completed by user_auth +#, c-format +msgid "" +"The certificate presented by \"%s\" is self-signed. It cannot be " +"automatically checked." +msgstr "" + +#, c-format +msgid "The certificate chain presented for %s is not valid." +msgstr "" + +#. TODO: Make this error either block the ensuing SSL +#. connection error until the user dismisses this one, or +#. stifle it. +#. TODO: Probably wrong. +#. TODO: Probably wrong +msgid "SSL Certificate Error" +msgstr "" + +msgid "Invalid certificate chain" +msgstr "" + +#. vrq will be completed by user_auth +msgid "" +"You have no database of root certificates, so this certificate cannot be " +"validated." +msgstr "" + +#. vrq will be completed by user_auth +msgid "" +"The root certificate this one claims to be issued by is unknown to Pidgin." +msgstr "" + +#, c-format +msgid "" +"The certificate chain presented by %s does not have a valid digital " +"signature from the Certificate Authority from which it claims to have a " +"signature." +msgstr "" + +msgid "Invalid certificate authority signature" +msgstr "" + +#. Prompt the user to authenticate the certificate +#. TODO: Provide the user with more guidance about why he is +#. being prompted +#. vrq will be completed by user_auth +#, c-format +msgid "" +"The certificate presented by \"%s\" claims to be from \"%s\" instead. This " +"could mean that you are not connecting to the service you believe you are." +msgstr "" + +#. Make messages +#, c-format +msgid "" +"Common name: %s\n" +"\n" +"Fingerprint (SHA1): %s\n" +"\n" +"Activation date: %s\n" +"Expiration date: %s\n" +msgstr "" + +#. TODO: Find what the handle ought to be +msgid "Certificate Information" +msgstr "" + +msgid "Registration Error" +msgstr "" + +msgid "Unregistration Error" +msgstr "" + +#, c-format +msgid "+++ %s signed on" +msgstr "" + +#, c-format +msgid "+++ %s signed off" +msgstr "" + +#. Unknown error +#. Unknown error! +msgid "Unknown error" +msgstr "" + +msgid "Unable to send message: The message is too large." +msgstr "" + +#, c-format +msgid "Unable to send message to %s." +msgstr "" + +msgid "The message is too large." +msgstr "" + +msgid "Unable to send message." +msgstr "" + +msgid "Send Message" +msgstr "" + +msgid "_Send Message" +msgstr "" + +#, c-format +msgid "%s entered the room." +msgstr "" + +#, c-format +msgid "%s [<I>%s</I>] entered the room." +msgstr "" + +#, c-format +msgid "You are now known as %s" +msgstr "" + +#, c-format +msgid "%s is now known as %s" +msgstr "" + +#, c-format +msgid "%s left the room." +msgstr "" + +#, c-format +msgid "%s left the room (%s)." +msgstr "" + +msgid "Invite to chat" +msgstr "" + +#. Put our happy label in it. +msgid "" +"Please enter the name of the user you wish to invite, along with an optional " +"invite message." +msgstr "" + +#, c-format +msgid "Failed to get connection: %s" +msgstr "" + +#, c-format +msgid "Failed to get name: %s" +msgstr "" + +#, c-format +msgid "Failed to get serv name: %s" +msgstr "" + +msgid "Purple's D-BUS server is not running for the reason listed below" +msgstr "" + +msgid "No name" +msgstr "" + +msgid "Unable to create new resolver process\n" +msgstr "" + +msgid "Unable to send request to resolver process\n" +msgstr "" + +#, c-format +msgid "" +"Error resolving %s:\n" +"%s" +msgstr "" + +#, c-format +msgid "Error resolving %s: %d" +msgstr "" + +#, c-format +msgid "" +"Error reading from resolver process:\n" +"%s" +msgstr "" + +#, c-format +msgid "Resolver process exited without answering our request" +msgstr "" + +#, c-format +msgid "Thread creation failure: %s" +msgstr "" + +msgid "Unknown reason" +msgstr "" + +#, c-format +msgid "" +"Error reading %s: \n" +"%s.\n" +msgstr "" + +#, c-format +msgid "" +"Error writing %s: \n" +"%s.\n" +msgstr "" + +#, c-format +msgid "" +"Error accessing %s: \n" +"%s.\n" +msgstr "" + +msgid "Directory is not writable." +msgstr "" + +msgid "Cannot send a file of 0 bytes." +msgstr "" + +msgid "Cannot send a directory." +msgstr "" + +#, c-format +msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n" +msgstr "" + +#, c-format +msgid "%s wants to send you %s (%s)" +msgstr "" + +#, c-format +msgid "%s wants to send you a file" +msgstr "" + +#, c-format +msgid "Accept file transfer request from %s?" +msgstr "" + +#, c-format +msgid "" +"A file is available for download from:\n" +"Remote host: %s\n" +"Remote port: %d" +msgstr "" + +#, c-format +msgid "%s is offering to send file %s" +msgstr "" + +#, c-format +msgid "%s is not a valid filename.\n" +msgstr "" + +#, c-format +msgid "Offering to send %s to %s" +msgstr "" + +#, c-format +msgid "Starting transfer of %s from %s" +msgstr "" + +#, c-format +msgid "Transfer of file %s complete" +msgstr "" + +msgid "File transfer complete" +msgstr "" + +#, c-format +msgid "You canceled the transfer of %s" +msgstr "" + +msgid "File transfer cancelled" +msgstr "" + +#, c-format +msgid "%s canceled the transfer of %s" +msgstr "" + +#, c-format +msgid "%s canceled the file transfer" +msgstr "" + +#, c-format +msgid "File transfer to %s failed." +msgstr "" + +#, c-format +msgid "File transfer from %s failed." +msgstr "" + +msgid "Run the command in a terminal" +msgstr "" + +msgid "The command used to handle \"aim\" URLs, if enabled." +msgstr "" + +msgid "The command used to handle \"gg\" URLs, if enabled." +msgstr "" + +msgid "The command used to handle \"icq\" URLs, if enabled." +msgstr "" + +msgid "The command used to handle \"irc\" URLs, if enabled." +msgstr "" + +msgid "The command used to handle \"msnim\" URLs, if enabled." +msgstr "" + +msgid "The command used to handle \"sip\" URLs, if enabled." +msgstr "" + +msgid "The command used to handle \"xmpp\" URLs, if enabled." +msgstr "" + +msgid "The command used to handle \"ymsgr\" URLs, if enabled." +msgstr "" + +msgid "The handler for \"aim\" URLs" +msgstr "" + +msgid "The handler for \"gg\" URLs" +msgstr "" + +msgid "The handler for \"icq\" URLs" +msgstr "" + +msgid "The handler for \"irc\" URLs" +msgstr "" + +msgid "The handler for \"msnim\" URLs" +msgstr "" + +msgid "The handler for \"sip\" URLs" +msgstr "" + +msgid "The handler for \"xmpp\" URLs" +msgstr "" + +msgid "The handler for \"ymsgr\" URLs" +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"aim\" " +"URLs." +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"gg\" " +"URLs." +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"icq\" " +"URLs." +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"irc\" " +"URLs." +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"msnim\" " +"URLs." +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"sip\" " +"URLs." +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"xmpp\" " +"URLs." +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"ymsgr\" " +"URLs." +msgstr "" + +msgid "" +"True if the command used to handle this type of URL should be run in a " +"terminal." +msgstr "" + +msgid "Whether the specified command should handle \"aim\" URLs" +msgstr "" + +msgid "Whether the specified command should handle \"gg\" URLs" +msgstr "" + +msgid "Whether the specified command should handle \"icq\" URLs" +msgstr "" + +msgid "Whether the specified command should handle \"irc\" URLs" +msgstr "" + +msgid "Whether the specified command should handle \"msnim\" URLs" +msgstr "" + +msgid "Whether the specified command should handle \"sip\" URLs" +msgstr "" + +msgid "Whether the specified command should handle \"xmpp\" URLs" +msgstr "" + +msgid "Whether the specified command should handle \"ymsgr\" URLs" +msgstr "" + +msgid "<b><font color=\"red\">The logger has no read function</font></b>" +msgstr "" + +msgid "HTML" +msgstr "" + +msgid "Plain text" +msgstr "" + +msgid "Old flat format" +msgstr "" + +msgid "Logging of this conversation failed." +msgstr "" + +msgid "XML" +msgstr "" + +#, c-format +msgid "" +"<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" +"REPLY>:</b></font> %s<br/>\n" +msgstr "" + +#, c-format +msgid "" +"<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" +"REPLY>:</b></font> %s<br/>\n" +msgstr "" + +msgid "<font color=\"red\"><b>Unable to find log path!</b></font>" +msgstr "" + +#, c-format +msgid "<font color=\"red\"><b>Could not read file: %s</b></font>" +msgstr "" + +#, c-format +msgid "(%s) %s <AUTO-REPLY>: %s\n" +msgstr "" + +#, c-format +msgid "You are using %s, but this plugin requires %s." +msgstr "" + +msgid "This plugin has not defined an ID." +msgstr "" + +#, c-format +msgid "Plugin magic mismatch %d (need %d)" +msgstr "" + +#, c-format +msgid "ABI version mismatch %d.%d.x (need %d.%d.x)" +msgstr "" + +msgid "" +"Plugin does not implement all required functions (list_icon, login and close)" +msgstr "" + +#, c-format +msgid "" +"The required plugin %s was not found. Please install this plugin and try " +"again." +msgstr "" + +msgid "Unable to load the plugin" +msgstr "" + +#, c-format +msgid "The required plugin %s was unable to load." +msgstr "" + +msgid "Unable to load your plugin." +msgstr "" + +#, c-format +msgid "%s requires %s, but it failed to unload." +msgstr "" + +msgid "Autoaccept" +msgstr "" + +msgid "Auto-accept file transfer requests from selected users." +msgstr "" + +#, c-format +msgid "Autoaccepted file transfer of \"%s\" from \"%s\" completed." +msgstr "" + +msgid "Autoaccept complete" +msgstr "" + +#, c-format +msgid "When a file-transfer request arrives from %s" +msgstr "" + +msgid "Set Autoaccept Setting" +msgstr "" + +msgid "_Save" +msgstr "" + +msgid "_Cancel" +msgstr "" + +msgid "Ask" +msgstr "" + +msgid "Auto Accept" +msgstr "" + +msgid "Auto Reject" +msgstr "" + +msgid "Autoaccept File Transfers..." +msgstr "" + +#. XXX: Is there a better way than this? There really should be. +msgid "" +"Path to save the files in\n" +"(Please provide the full path)" +msgstr "" + +msgid "Automatically reject from users not in buddy list" +msgstr "" + +msgid "" +"Notify with a popup when an autoaccepted file transfer is complete\n" +"(only when there's no conversation with the sender)" +msgstr "" + +msgid "Create a new directory for each user" +msgstr "" + +msgid "Notes" +msgstr "" + +msgid "Enter your notes below..." +msgstr "" + +msgid "Edit Notes..." +msgstr "" + +#. *< major version +#. *< minor version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Buddy Notes" +msgstr "" + +#. *< name +#. *< version +msgid "Store notes on particular buddies." +msgstr "" + +#. *< summary +msgid "Adds the option to store notes for buddies on your buddy list." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Cipher Test" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Tests the ciphers that ship with libpurple." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "DBus Example" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "DBus Plugin Example" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "File Control" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Allows control by entering commands in a file." +msgstr "" + +msgid "Minutes" +msgstr "" + +#. This is a cultural reference. Dy'er Mak'er is a song by Led Zeppelin. +#. If that doesn't translate well into your language, drop the 's before translating. +msgid "I'dle Mak'er" +msgstr "" + +msgid "Set Account Idle Time" +msgstr "" + +msgid "_Set" +msgstr "" + +msgid "None of your accounts are idle." +msgstr "" + +msgid "Unset Account Idle Time" +msgstr "" + +msgid "_Unset" +msgstr "" + +msgid "Set Idle Time for All Accounts" +msgstr "" + +msgid "Unset Idle Time for All Idled Accounts" +msgstr "" + +msgid "Allows you to hand-configure how long you've been idle" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "IPC Test Client" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Test plugin IPC support, as a client." +msgstr "" + +#. * description +msgid "" +"Test plugin IPC support, as a client. This locates the server plugin and " +"calls the commands registered." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "IPC Test Server" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Test plugin IPC support, as a server." +msgstr "" + +#. * description +msgid "Test plugin IPC support, as a server. This registers the IPC commands." +msgstr "" + +msgid "Join/Part Hiding Configuration" +msgstr "" + +msgid "Minimum Room Size" +msgstr "" + +msgid "User Inactivity Timeout (in minutes)" +msgstr "" + +msgid "Apply hiding rules to buddies" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Join/Part Hiding" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Hides extraneous join/part messages." +msgstr "" + +#. * description +msgid "" +"This plugin hides join/part messages in large rooms, except for those users " +"actively taking part in a conversation." +msgstr "" + +#. This is used in the place of a timezone abbreviation if the +#. * offset is way off. The user should never really see it, but +#. * it's here just in case. The parens are to make it clear it's +#. * not a real timezone. +msgid "(UTC)" +msgstr "" + +msgid "User is offline." +msgstr "" + +msgid "Auto-response sent:" +msgstr "" + +#, c-format +msgid "%s has signed off." +msgstr "" + +msgid "One or more messages may have been undeliverable." +msgstr "" + +msgid "You were disconnected from the server." +msgstr "" + +msgid "" +"You are currently disconnected. Messages will not be received unless you are " +"logged in." +msgstr "" + +msgid "Message could not be sent because the maximum length was exceeded." +msgstr "" + +msgid "Message could not be sent." +msgstr "" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +msgid "Adium" +msgstr "" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +msgid "Fire" +msgstr "" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +msgid "Messenger Plus!" +msgstr "" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +msgid "QIP" +msgstr "" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +msgid "MSN Messenger" +msgstr "" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +msgid "Trillian" +msgstr "" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +msgid "aMSN" +msgstr "" + +#. Add general preferences. +msgid "General Log Reading Configuration" +msgstr "" + +msgid "Fast size calculations" +msgstr "" + +msgid "Use name heuristics" +msgstr "" + +#. Add Log Directory preferences. +msgid "Log Directory" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Log Reader" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Includes other IM clients' logs in the log viewer." +msgstr "" + +#. * description +msgid "" +"When viewing logs, this plugin will include logs from other IM clients. " +"Currently, this includes Adium, MSN Messenger, and Trillian.\n" +"\n" +"WARNING: This plugin is still alpha code and may crash frequently. Use it " +"at your own risk!" +msgstr "" + +msgid "Mono Plugin Loader" +msgstr "" + +msgid "Loads .NET plugins with Mono." +msgstr "" + +msgid "Add new line in IMs" +msgstr "" + +msgid "Add new line in Chats" +msgstr "" + +#. *< magic +#. *< major version +#. *< minor version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "New Line" +msgstr "" + +#. *< name +#. *< version +msgid "Prepends a newline to displayed message." +msgstr "" + +#. *< summary +msgid "" +"Prepends a newline to messages so that the rest of the message appears below " +"the username in the conversation window." +msgstr "" + +msgid "Offline Message Emulation" +msgstr "" + +msgid "Save messages sent to an offline user as pounce." +msgstr "" + +msgid "" +"The rest of the messages will be saved as pounce. You can edit/delete the " +"pounce from the `Buddy Pounce' dialog." +msgstr "" + +#, c-format +msgid "" +"\"%s\" is currently offline. Do you want to save the rest of the messages in " +"a pounce and automatically send them when \"%s\" logs back in?" +msgstr "" + +msgid "Offline Message" +msgstr "" + +msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog" +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Save offline messages in pounce" +msgstr "" + +msgid "Do not ask. Always save in pounce." +msgstr "" + +msgid "One Time Password" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "One Time Password Support" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Enforce that passwords are used only once." +msgstr "" + +#. * description +msgid "" +"Allows you to enforce on a per-account basis that passwords not being saved " +"are only used in a single successful connection.\n" +"Note: The account password must not be saved for this to work." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Perl Plugin Loader" +msgstr "" + +#. *< name +#. *< version +#. *< summary +msgid "Provides support for loading perl plugins." +msgstr "" + +msgid "Psychic Mode" +msgstr "" + +msgid "Psychic mode for incoming conversation" +msgstr "" + +msgid "" +"Causes conversation windows to appear as other users begin to message you. " +"This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" +msgstr "" + +msgid "You feel a disturbance in the force..." +msgstr "" + +msgid "Only enable for users on the buddy list" +msgstr "" + +msgid "Disable when away" +msgstr "" + +msgid "Display notification message in conversations" +msgstr "" + +msgid "Raise psychic conversations" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Signals Test" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Test to see that all signals are working properly." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Simple Plugin" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Tests to see that most things are working." +msgstr "" + +#. Scheme name +msgid "X.509 Certificates" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "GNUTLS" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Provides SSL support through GNUTLS." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "NSS" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Provides SSL support through Mozilla NSS." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "SSL" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Provides a wrapper around SSL support libraries." +msgstr "" + +#, c-format +msgid "%s is no longer away." +msgstr "" + +#, c-format +msgid "%s has gone away." +msgstr "" + +#, c-format +msgid "%s has become idle." +msgstr "" + +#, c-format +msgid "%s is no longer idle." +msgstr "" + +#, c-format +msgid "%s has signed on." +msgstr "" + +msgid "Notify When" +msgstr "" + +msgid "Buddy Goes _Away" +msgstr "" + +msgid "Buddy Goes _Idle" +msgstr "" + +msgid "Buddy _Signs On/Off" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Buddy State Notification" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "" +"Notifies in a conversation window when a buddy goes or returns from away or " +"idle." +msgstr "" + +msgid "Tcl Plugin Loader" +msgstr "" + +msgid "Provides support for loading Tcl plugins" +msgstr "" + +msgid "" +"Unable to detect ActiveTCL installation. If you wish to use TCL plugins, " +"install ActiveTCL from http://www.activestate.com\n" +msgstr "" + +msgid "" +"The Apple Bonjour For Windows toolkit wasn't found, see the FAQ at: http://d." +"pidgin.im/BonjourWindows for more information." +msgstr "" + +msgid "Unable to listen for incoming IM connections\n" +msgstr "" + +msgid "" +"Unable to establish connection with the local mDNS server. Is it running?" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "AIM Account" +msgstr "" + +msgid "XMPP Account" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "Bonjour Protocol Plugin" +msgstr "" + +msgid "Purple Person" +msgstr "" + +#. Creating the options for the protocol +msgid "Local Port" +msgstr "" + +msgid "Bonjour" +msgstr "" + +#, c-format +msgid "%s has closed the conversation." +msgstr "" + +msgid "Unable to send the message, the conversation couldn't be started." +msgstr "" + +msgid "Cannot open socket" +msgstr "" + +msgid "Could not bind socket to port" +msgstr "" + +msgid "Could not listen on socket" +msgstr "" + +msgid "Error communicating with local mDNSResponder." +msgstr "" + +msgid "Invalid proxy settings" +msgstr "" + +msgid "" +"Either the host name or port number specified for your given proxy type is " +"invalid." +msgstr "" + +msgid "Token Error" +msgstr "" + +msgid "Unable to fetch the token.\n" +msgstr "" + +msgid "Save Buddylist..." +msgstr "" + +msgid "Your buddylist is empty, nothing was written to the file." +msgstr "" + +msgid "Buddylist saved successfully!" +msgstr "" + +#, c-format +msgid "Couldn't write buddy list for %s to %s" +msgstr "" + +msgid "Couldn't load buddylist" +msgstr "" + +msgid "Load Buddylist..." +msgstr "" + +msgid "Buddylist loaded successfully!" +msgstr "" + +msgid "Save buddylist..." +msgstr "" + +msgid "Load buddylist from file..." +msgstr "" + +msgid "Fill in the registration fields." +msgstr "" + +msgid "Passwords do not match." +msgstr "" + +msgid "Unable to register new account. Error occurred.\n" +msgstr "" + +msgid "New Gadu-Gadu Account Registered" +msgstr "" + +msgid "Registration completed successfully!" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Password (retype)" +msgstr "" + +msgid "Enter current token" +msgstr "" + +msgid "Current token" +msgstr "" + +msgid "Register New Gadu-Gadu Account" +msgstr "" + +msgid "Please, fill in the following fields" +msgstr "" + +msgid "City" +msgstr "" + +msgid "Year of birth" +msgstr "" + +msgid "Gender" +msgstr "" + +msgid "Male or female" +msgstr "" + +msgid "Male" +msgstr "" + +msgid "Female" +msgstr "" + +msgid "Only online" +msgstr "" + +msgid "Find buddies" +msgstr "" + +msgid "Please, enter your search criteria below" +msgstr "" + +msgid "Fill in the fields." +msgstr "" + +msgid "Your current password is different from the one that you specified." +msgstr "" + +msgid "Unable to change password. Error occurred.\n" +msgstr "" + +msgid "Change password for the Gadu-Gadu account" +msgstr "" + +msgid "Password was changed successfully!" +msgstr "" + +msgid "Current password" +msgstr "" + +msgid "Please, enter your current password and your new password for UIN: " +msgstr "" + +msgid "Change Gadu-Gadu Password" +msgstr "" + +#, c-format +msgid "Select a chat for buddy: %s" +msgstr "" + +msgid "Add to chat..." +msgstr "" + +#. Global +msgid "Available" +msgstr "" + +#. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for +#. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message +#. Away stuff +msgid "Away" +msgstr "" + +msgid "UIN" +msgstr "" + +msgid "First Name" +msgstr "" + +msgid "Birth Year" +msgstr "" + +msgid "Unable to display the search results." +msgstr "" + +msgid "Gadu-Gadu Public Directory" +msgstr "" + +msgid "Search results" +msgstr "" + +msgid "No matching users found" +msgstr "" + +msgid "There are no users matching your search criteria." +msgstr "" + +msgid "Unable to read socket" +msgstr "" + +msgid "Buddy list downloaded" +msgstr "" + +msgid "Your buddy list was downloaded from the server." +msgstr "" + +msgid "Buddy list uploaded" +msgstr "" + +msgid "Your buddy list was stored on the server." +msgstr "" + +msgid "Connection failed." +msgstr "" + +msgid "Add to chat" +msgstr "" + +msgid "Chat _name:" +msgstr "" + +msgid "Chat error" +msgstr "" + +msgid "This chat name is already in use" +msgstr "" + +msgid "Not connected to the server." +msgstr "" + +msgid "Find buddies..." +msgstr "" + +msgid "Change password..." +msgstr "" + +msgid "Upload buddylist to Server" +msgstr "" + +msgid "Download buddylist from Server" +msgstr "" + +msgid "Delete buddylist from Server" +msgstr "" + +msgid "Save buddylist to file..." +msgstr "" + +#. magic +#. major_version +#. minor_version +#. plugin type +#. ui_requirement +#. flags +#. dependencies +#. priority +#. id +#. name +#. version +msgid "Gadu-Gadu Protocol Plugin" +msgstr "" + +#. summary +msgid "Polish popular IM" +msgstr "" + +msgid "Gadu-Gadu User" +msgstr "" + +#, c-format +msgid "Unknown command: %s" +msgstr "" + +#, c-format +msgid "current topic is: %s" +msgstr "" + +msgid "No topic is set" +msgstr "" + +msgid "File Transfer Failed" +msgstr "" + +msgid "Could not open a listening port." +msgstr "" + +msgid "Error displaying MOTD" +msgstr "" + +msgid "No MOTD available" +msgstr "" + +msgid "There is no MOTD associated with this connection." +msgstr "" + +#, c-format +msgid "MOTD for %s" +msgstr "" + +msgid "Server has disconnected" +msgstr "" + +msgid "View MOTD" +msgstr "" + +msgid "_Channel:" +msgstr "" + +msgid "_Password:" +msgstr "" + +msgid "IRC nicks may not contain whitespace" +msgstr "" + +#. 1. connect to server +#. connect to the server +msgid "Connecting" +msgstr "" + +msgid "SSL support unavailable" +msgstr "" + +msgid "Couldn't create socket" +msgstr "" + +msgid "Couldn't connect to host" +msgstr "" + +msgid "Read error" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Topic" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +msgid "IRC Protocol Plugin" +msgstr "" + +#. * summary +msgid "The IRC Protocol Plugin that Sucks Less" +msgstr "" + +#. host to connect to +msgid "Server" +msgstr "" + +#. port to connect to +msgid "Port" +msgstr "" + +msgid "Encodings" +msgstr "" + +msgid "Auto-detect incoming UTF-8" +msgstr "" + +msgid "Real name" +msgstr "" + +#. +#. option = purple_account_option_string_new(_("Quit message"), "quitmsg", IRC_DEFAULT_QUIT); +#. prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); +#. +msgid "Use SSL" +msgstr "" + +msgid "Bad mode" +msgstr "" + +#, c-format +msgid "Ban on %s by %s, set %s ago" +msgstr "" + +#, c-format +msgid "Ban on %s" +msgstr "" + +msgid "End of ban list" +msgstr "" + +#, c-format +msgid "You are banned from %s." +msgstr "" + +msgid "Banned" +msgstr "" + +#, c-format +msgid "Cannot ban %s: banlist is full" +msgstr "" + +msgid " <i>(ircop)</i>" +msgstr "" + +msgid " <i>(identified)</i>" +msgstr "" + +msgid "Nick" +msgstr "" + +msgid "Currently on" +msgstr "" + +msgid "Idle for" +msgstr "" + +msgid "Online since" +msgstr "" + +msgid "<b>Defining adjective:</b>" +msgstr "" + +msgid "Glorious" +msgstr "" + +#, c-format +msgid "%s has changed the topic to: %s" +msgstr "" + +#, c-format +msgid "%s has cleared the topic." +msgstr "" + +#, c-format +msgid "The topic for %s is: %s" +msgstr "" + +#, c-format +msgid "Unknown message '%s'" +msgstr "" + +msgid "Unknown message" +msgstr "" + +msgid "The IRC server received a message it did not understand." +msgstr "" + +#, c-format +msgid "Users on %s: %s" +msgstr "" + +msgid "Time Response" +msgstr "" + +msgid "The IRC server's local time is:" +msgstr "" + +msgid "No such channel" +msgstr "" + +#. does this happen? +msgid "no such channel" +msgstr "" + +msgid "User is not logged in" +msgstr "" + +msgid "No such nick or channel" +msgstr "" + +msgid "Could not send" +msgstr "" + +#, c-format +msgid "Joining %s requires an invitation." +msgstr "" + +msgid "Invitation only" +msgstr "" + +#, c-format +msgid "You have been kicked by %s: (%s)" +msgstr "" + +#. Remove user from channel +#, c-format +msgid "Kicked by %s (%s)" +msgstr "" + +#, c-format +msgid "mode (%s %s) by %s" +msgstr "" + +msgid "Invalid nickname" +msgstr "" + +msgid "" +"Your selected nickname was rejected by the server. It probably contains " +"invalid characters." +msgstr "" + +msgid "" +"Your selected account name was rejected by the server. It probably contains " +"invalid characters." +msgstr "" + +#. We only want to do the following dance if the connection +#. has not been successfully completed. If it has, just +#. notify the user that their /nick command didn't go. +#, c-format +msgid "The nickname \"%s\" is already being used." +msgstr "" + +msgid "Nickname in use" +msgstr "" + +msgid "Cannot change nick" +msgstr "" + +msgid "Could not change nick" +msgstr "" + +#, c-format +msgid "You have parted the channel%s%s" +msgstr "" + +msgid "Error: invalid PONG from server" +msgstr "" + +#, c-format +msgid "PING reply -- Lag: %lu seconds" +msgstr "" + +#, c-format +msgid "Cannot join %s: Registration is required." +msgstr "" + +msgid "Cannot join channel" +msgstr "" + +msgid "Nick or channel is temporarily unavailable." +msgstr "" + +#, c-format +msgid "Wallops from %s" +msgstr "" + +msgid "action <action to perform>: Perform an action." +msgstr "" + +msgid "" +"away [message]: Set an away message, or use no message to return from being " +"away." +msgstr "" + +msgid "ctcp <nick> <msg>: sends ctcp msg to nick." +msgstr "" + +msgid "chanserv: Send a command to chanserv" +msgstr "" + +msgid "" +"deop <nick1> [nick2] ...: Remove channel operator status from " +"someone. You must be a channel operator to do this." +msgstr "" + +msgid "" +"devoice <nick1> [nick2] ...: Remove channel voice status from " +"someone, preventing them from speaking if the channel is moderated (+m). You " +"must be a channel operator to do this." +msgstr "" + +msgid "" +"invite <nick> [room]: Invite someone to join you in the specified " +"channel, or the current channel." +msgstr "" + +msgid "" +"j <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " +"channels, optionally providing a channel key for each if needed." +msgstr "" + +msgid "" +"join <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " +"channels, optionally providing a channel key for each if needed." +msgstr "" + +msgid "" +"kick <nick> [message]: Remove someone from a channel. You must be a " +"channel operator to do this." +msgstr "" + +msgid "" +"list: Display a list of chat rooms on the network. <i>Warning, some servers " +"may disconnect you upon doing this.</i>" +msgstr "" + +msgid "me <action to perform>: Perform an action." +msgstr "" + +msgid "memoserv: Send a command to memoserv" +msgstr "" + +msgid "" +"mode <+|-><A-Za-z> <nick|channel>: Set or unset a channel " +"or user mode." +msgstr "" + +msgid "" +"msg <nick> <message>: Send a private message to a user (as " +"opposed to a channel)." +msgstr "" + +msgid "names [channel]: List the users currently in a channel." +msgstr "" + +msgid "nick <new nickname>: Change your nickname." +msgstr "" + +msgid "nickserv: Send a command to nickserv" +msgstr "" + +msgid "notice <target<: Send a notice to a user or channel." +msgstr "" + +msgid "" +"op <nick1> [nick2] ...: Grant channel operator status to someone. You " +"must be a channel operator to do this." +msgstr "" + +msgid "" +"operwall <message>: If you don't know what this is, you probably " +"can't use it." +msgstr "" + +msgid "operserv: Send a command to operserv" +msgstr "" + +msgid "" +"part [room] [message]: Leave the current channel, or a specified channel, " +"with an optional message." +msgstr "" + +msgid "" +"ping [nick]: Asks how much lag a user (or the server if no user specified) " +"has." +msgstr "" + +msgid "" +"query <nick> <message>: Send a private message to a user (as " +"opposed to a channel)." +msgstr "" + +msgid "quit [message]: Disconnect from the server, with an optional message." +msgstr "" + +msgid "quote [...]: Send a raw command to the server." +msgstr "" + +msgid "" +"remove <nick> [message]: Remove someone from a room. You must be a " +"channel operator to do this." +msgstr "" + +msgid "time: Displays the current local time at the IRC server." +msgstr "" + +msgid "topic [new topic]: View or change the channel topic." +msgstr "" + +msgid "umode <+|-><A-Za-z>: Set or unset a user mode." +msgstr "" + +msgid "version [nick]: send CTCP VERSION request to a user" +msgstr "" + +msgid "" +"voice <nick1> [nick2] ...: Grant channel voice status to someone. You " +"must be a channel operator to do this." +msgstr "" + +msgid "" +"wallops <message>: If you don't know what this is, you probably can't " +"use it." +msgstr "" + +msgid "whois [server] <nick>: Get information on a user." +msgstr "" + +msgid "whowas <nick>: Get information on a user that has logged off." +msgstr "" + +#, c-format +msgid "Reply time from %s: %lu seconds" +msgstr "" + +msgid "PONG" +msgstr "" + +msgid "CTCP PING reply" +msgstr "" + +msgid "Disconnected." +msgstr "" + +msgid "Unknown Error" +msgstr "" + +msgid "Ad-Hoc Command Failed" +msgstr "" + +msgid "execute" +msgstr "" + +msgid "Server requires TLS/SSL for login. No TLS/SSL support found." +msgstr "" + +msgid "You require encryption, but no TLS/SSL support found." +msgstr "" + +msgid "Server requires plaintext authentication over an unencrypted stream" +msgstr "" + +#, c-format +msgid "" +"%s requires plaintext authentication over an unencrypted connection. Allow " +"this and continue authentication?" +msgstr "" + +msgid "Plaintext Authentication" +msgstr "" + +msgid "Invalid response from server." +msgstr "" + +msgid "Server does not use any supported authentication method" +msgstr "" + +msgid "You require encryption, but it is not available on this server." +msgstr "" + +msgid "Invalid challenge from server" +msgstr "" + +msgid "SASL error" +msgstr "" + +msgid "The BOSH connection manager terminated your session." +msgstr "" + +msgid "No session ID given" +msgstr "" + +msgid "Unsupported version of BOSH protocol" +msgstr "" + +msgid "Unable to establish a connection with the server" +msgstr "" + +#, c-format +msgid "" +"Could not establish a connection with the server:\n" +"%s" +msgstr "" + +msgid "Unable to establish SSL connection" +msgstr "" + +msgid "Unable to create socket" +msgstr "" + +msgid "Write error" +msgstr "" + +msgid "Full Name" +msgstr "" + +msgid "Family Name" +msgstr "" + +msgid "Given Name" +msgstr "" + +msgid "URL" +msgstr "" + +msgid "Street Address" +msgstr "" + +msgid "Extended Address" +msgstr "" + +msgid "Locality" +msgstr "" + +msgid "Region" +msgstr "" + +msgid "Postal Code" +msgstr "" + +msgid "Country" +msgstr "" + +#. lots of clients (including purple) do this, but it's +#. * out of spec +msgid "Telephone" +msgstr "" + +msgid "Organization Name" +msgstr "" + +msgid "Organization Unit" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Birthday" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Edit XMPP vCard" +msgstr "" + +msgid "" +"All items below are optional. Enter only the information with which you feel " +"comfortable." +msgstr "" + +msgid "Client" +msgstr "" + +msgid "Operating System" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Last Activity" +msgstr "" + +msgid "Service Discovery Info" +msgstr "" + +msgid "Service Discovery Items" +msgstr "" + +msgid "Extended Stanza Addressing" +msgstr "" + +msgid "Multi-User Chat" +msgstr "" + +msgid "Multi-User Chat Extended Presence Information" +msgstr "" + +msgid "In-Band Bytestreams" +msgstr "" + +msgid "Ad-Hoc Commands" +msgstr "" + +msgid "PubSub Service" +msgstr "" + +msgid "SOCKS5 Bytestreams" +msgstr "" + +msgid "Out of Band Data" +msgstr "" + +msgid "XHTML-IM" +msgstr "" + +msgid "In-Band Registration" +msgstr "" + +msgid "User Location" +msgstr "" + +msgid "User Avatar" +msgstr "" + +msgid "Chat State Notifications" +msgstr "" + +msgid "Software Version" +msgstr "" + +msgid "Stream Initiation" +msgstr "" + +msgid "File Transfer" +msgstr "" + +msgid "User Mood" +msgstr "" + +msgid "User Activity" +msgstr "" + +msgid "Entity Capabilities" +msgstr "" + +msgid "Encrypted Session Negotiations" +msgstr "" + +msgid "User Tune" +msgstr "" + +msgid "Roster Item Exchange" +msgstr "" + +msgid "Reachability Address" +msgstr "" + +msgid "User Profile" +msgstr "" + +msgid "Jingle" +msgstr "" + +msgid "Jingle Audio" +msgstr "" + +msgid "User Nickname" +msgstr "" + +msgid "Jingle ICE UDP" +msgstr "" + +msgid "Jingle ICE TCP" +msgstr "" + +msgid "Jingle Raw UDP" +msgstr "" + +msgid "Jingle Video" +msgstr "" + +msgid "Jingle DTMF" +msgstr "" + +msgid "Message Receipts" +msgstr "" + +msgid "Public Key Publishing" +msgstr "" + +msgid "User Chatting" +msgstr "" + +msgid "User Browsing" +msgstr "" + +msgid "User Gaming" +msgstr "" + +msgid "User Viewing" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Stanza Encryption" +msgstr "" + +msgid "Entity Time" +msgstr "" + +msgid "Delayed Delivery" +msgstr "" + +msgid "Collaborative Data Objects" +msgstr "" + +msgid "File Repository and Sharing" +msgstr "" + +msgid "STUN Service Discovery for Jingle" +msgstr "" + +msgid "Simplified Encrypted Session Negotiation" +msgstr "" + +msgid "Hop Check" +msgstr "" + +msgid "Capabilities" +msgstr "" + +msgid "Priority" +msgstr "" + +msgid "Resource" +msgstr "" + +#, c-format +msgid "%s ago" +msgstr "" + +msgid "Logged off" +msgstr "" + +msgid "Middle Name" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "P.O. Box" +msgstr "" + +msgid "Photo" +msgstr "" + +msgid "Logo" +msgstr "" + +msgid "Un-hide From" +msgstr "" + +msgid "Temporarily Hide From" +msgstr "" + +#. && NOT ME +msgid "Cancel Presence Notification" +msgstr "" + +msgid "(Re-)Request authorization" +msgstr "" + +#. if(NOT ME) +#. shouldn't this just happen automatically when the buddy is +#. removed? +msgid "Unsubscribe" +msgstr "" + +msgid "Log In" +msgstr "" + +msgid "Log Out" +msgstr "" + +msgid "Chatty" +msgstr "" + +msgid "Extended Away" +msgstr "" + +msgid "Do Not Disturb" +msgstr "" + +msgid "JID" +msgstr "" + +msgid "Last Name" +msgstr "" + +msgid "The following are the results of your search" +msgstr "" + +#. current comment from Jabber User Directory users.jabber.org +msgid "" +"Find a contact by entering the search criteria in the given fields. Note: " +"Each field supports wild card searches (%)" +msgstr "" + +msgid "Directory Query Failed" +msgstr "" + +msgid "Could not query the directory server." +msgstr "" + +#. Try to translate the message (see static message +#. list in jabber_user_dir_comments[]) +#, c-format +msgid "Server Instructions: %s" +msgstr "" + +msgid "Fill in one or more fields to search for any matching XMPP users." +msgstr "" + +msgid "Email Address" +msgstr "" + +msgid "Search for XMPP users" +msgstr "" + +#. "Search" +msgid "Search" +msgstr "" + +msgid "Invalid Directory" +msgstr "" + +msgid "Enter a User Directory" +msgstr "" + +msgid "Select a user directory to search" +msgstr "" + +msgid "Search Directory" +msgstr "" + +msgid "_Room:" +msgstr "" + +msgid "_Server:" +msgstr "" + +msgid "_Handle:" +msgstr "" + +#, c-format +msgid "%s is not a valid room name" +msgstr "" + +msgid "Invalid Room Name" +msgstr "" + +#, c-format +msgid "%s is not a valid server name" +msgstr "" + +msgid "Invalid Server Name" +msgstr "" + +#, c-format +msgid "%s is not a valid room handle" +msgstr "" + +msgid "Invalid Room Handle" +msgstr "" + +msgid "Configuration error" +msgstr "" + +msgid "Unable to configure" +msgstr "" + +msgid "Room Configuration Error" +msgstr "" + +msgid "This room is not capable of being configured" +msgstr "" + +msgid "Registration error" +msgstr "" + +msgid "Nick changing not supported in non-MUC chatrooms" +msgstr "" + +msgid "Error retrieving room list" +msgstr "" + +msgid "Invalid Server" +msgstr "" + +msgid "Enter a Conference Server" +msgstr "" + +msgid "Select a conference server to query" +msgstr "" + +msgid "Find Rooms" +msgstr "" + +msgid "Affiliations:" +msgstr "" + +msgid "No users found" +msgstr "" + +msgid "Roles:" +msgstr "" + +msgid "Ping timeout" +msgstr "" + +msgid "Read Error" +msgstr "" + +#, c-format +msgid "" +"Could not find alternative XMPP connection methods after failing to connect " +"directly.\n" +msgstr "" + +msgid "Invalid XMPP ID" +msgstr "" + +msgid "Invalid XMPP ID. Domain must be set." +msgstr "" + +msgid "Malformed BOSH Connect Server" +msgstr "" + +#, c-format +msgid "Registration of %s@%s successful" +msgstr "" + +#, c-format +msgid "Registration to %s successful" +msgstr "" + +msgid "Registration Successful" +msgstr "" + +msgid "Registration Failed" +msgstr "" + +#, c-format +msgid "Registration from %s successfully removed" +msgstr "" + +msgid "Unregistration Successful" +msgstr "" + +msgid "Unregistration Failed" +msgstr "" + +msgid "Already Registered" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Postal code" +msgstr "" + +msgid "Phone" +msgstr "" + +msgid "Date" +msgstr "" + +msgid "Unregister" +msgstr "" + +msgid "" +"Please fill out the information below to change your account registration." +msgstr "" + +msgid "Please fill out the information below to register your new account." +msgstr "" + +msgid "Register New XMPP Account" +msgstr "" + +msgid "Register" +msgstr "" + +#, c-format +msgid "Change Account Registration at %s" +msgstr "" + +#, c-format +msgid "Register New Account at %s" +msgstr "" + +msgid "Change Registration" +msgstr "" + +msgid "Error unregistering account" +msgstr "" + +msgid "Account successfully unregistered" +msgstr "" + +msgid "Initializing Stream" +msgstr "" + +msgid "Initializing SSL/TLS" +msgstr "" + +msgid "Authenticating" +msgstr "" + +msgid "Re-initializing Stream" +msgstr "" + +msgid "Server doesn't support blocking" +msgstr "" + +msgid "Not Authorized" +msgstr "" + +msgid "Mood" +msgstr "" + +msgid "Now Listening" +msgstr "" + +msgid "Both" +msgstr "" + +msgid "From (To pending)" +msgstr "" + +msgid "From" +msgstr "" + +msgid "To" +msgstr "" + +msgid "None (To pending)" +msgstr "" + +msgid "None" +msgstr "" + +msgid "Subscription" +msgstr "" + +msgid "Mood Text" +msgstr "" + +msgid "Allow Buzz" +msgstr "" + +msgid "Tune Artist" +msgstr "" + +msgid "Tune Title" +msgstr "" + +msgid "Tune Album" +msgstr "" + +msgid "Tune Genre" +msgstr "" + +msgid "Tune Comment" +msgstr "" + +msgid "Tune Track" +msgstr "" + +msgid "Tune Time" +msgstr "" + +msgid "Tune Year" +msgstr "" + +msgid "Tune URL" +msgstr "" + +msgid "Password Changed" +msgstr "" + +msgid "Your password has been changed." +msgstr "" + +msgid "Error changing password" +msgstr "" + +msgid "Password (again)" +msgstr "" + +msgid "Change XMPP Password" +msgstr "" + +msgid "Please enter your new password" +msgstr "" + +msgid "Set User Info..." +msgstr "" + +#. if (js->protocol_options & CHANGE_PASSWORD) { +msgid "Change Password..." +msgstr "" + +#. } +msgid "Search for Users..." +msgstr "" + +msgid "Bad Request" +msgstr "" + +msgid "Conflict" +msgstr "" + +msgid "Feature Not Implemented" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "Gone" +msgstr "" + +msgid "Internal Server Error" +msgstr "" + +msgid "Item Not Found" +msgstr "" + +msgid "Malformed XMPP ID" +msgstr "" + +msgid "Not Acceptable" +msgstr "" + +msgid "Not Allowed" +msgstr "" + +msgid "Payment Required" +msgstr "" + +msgid "Recipient Unavailable" +msgstr "" + +msgid "Registration Required" +msgstr "" + +msgid "Remote Server Not Found" +msgstr "" + +msgid "Remote Server Timeout" +msgstr "" + +msgid "Server Overloaded" +msgstr "" + +msgid "Service Unavailable" +msgstr "" + +msgid "Subscription Required" +msgstr "" + +msgid "Unexpected Request" +msgstr "" + +msgid "Authorization Aborted" +msgstr "" + +msgid "Incorrect encoding in authorization" +msgstr "" + +msgid "Invalid authzid" +msgstr "" + +msgid "Invalid Authorization Mechanism" +msgstr "" + +msgid "Authorization mechanism too weak" +msgstr "" + +msgid "Temporary Authentication Failure" +msgstr "" + +msgid "Authentication Failure" +msgstr "" + +msgid "Bad Format" +msgstr "" + +msgid "Bad Namespace Prefix" +msgstr "" + +msgid "Resource Conflict" +msgstr "" + +msgid "Connection Timeout" +msgstr "" + +msgid "Host Gone" +msgstr "" + +msgid "Host Unknown" +msgstr "" + +msgid "Improper Addressing" +msgstr "" + +msgid "Invalid ID" +msgstr "" + +msgid "Invalid Namespace" +msgstr "" + +msgid "Invalid XML" +msgstr "" + +msgid "Non-matching Hosts" +msgstr "" + +msgid "Policy Violation" +msgstr "" + +msgid "Remote Connection Failed" +msgstr "" + +msgid "Resource Constraint" +msgstr "" + +msgid "Restricted XML" +msgstr "" + +msgid "See Other Host" +msgstr "" + +msgid "System Shutdown" +msgstr "" + +msgid "Undefined Condition" +msgstr "" + +msgid "Unsupported Encoding" +msgstr "" + +msgid "Unsupported Stanza Type" +msgstr "" + +msgid "Unsupported Version" +msgstr "" + +msgid "XML Not Well Formed" +msgstr "" + +msgid "Stream Error" +msgstr "" + +#, c-format +msgid "Unable to ban user %s" +msgstr "" + +#, c-format +msgid "Unknown affiliation: \"%s\"" +msgstr "" + +#, c-format +msgid "Unable to affiliate user %s as \"%s\"" +msgstr "" + +#, c-format +msgid "Unknown role: \"%s\"" +msgstr "" + +#, c-format +msgid "Unable to set role \"%s\" for user: %s" +msgstr "" + +#, c-format +msgid "Unable to kick user %s" +msgstr "" + +#, c-format +msgid "Unable to ping user %s" +msgstr "" + +#, c-format +msgid "Unable to buzz, because there is nothing known about %s." +msgstr "" + +#, c-format +msgid "Unable to buzz, because %s might be offline." +msgstr "" + +#, c-format +msgid "" +"Unable to buzz, because %s does not support it or does not wish to receive " +"buzzes now." +msgstr "" + +#, c-format +msgid "Buzzing %s..." +msgstr "" + +#. Yahoo only supports one attention command: the 'buzz'. +#. This is index number YAHOO_BUZZ. +msgid "Buzz" +msgstr "" + +#, c-format +msgid "%s has buzzed you!" +msgstr "" + +#, c-format +msgid "Unable to initiate media with %s: invalid JID" +msgstr "" + +#, c-format +msgid "Unable to initiate media with %s: user is not online" +msgstr "" + +#, c-format +msgid "Unable to initiate media with %s: not subscribed to user presence" +msgstr "" + +msgid "Media Initiation Failed" +msgstr "" + +#, c-format +msgid "" +"Please select the resource of %s with which you would like to start a media " +"session." +msgstr "" + +msgid "Select a Resource" +msgstr "" + +msgid "Initiate Media" +msgstr "" + +msgid "config: Configure a chat room." +msgstr "" + +msgid "configure: Configure a chat room." +msgstr "" + +msgid "part [room]: Leave the room." +msgstr "" + +msgid "register: Register with a chat room." +msgstr "" + +msgid "topic [new topic]: View or change the topic." +msgstr "" + +msgid "ban <user> [reason]: Ban a user from the room." +msgstr "" + +msgid "" +"affiliate <owner|admin|member|outcast|none> [nick1] [nick2] ...: Get " +"the users with an affiliation or set users' affiliation with the room." +msgstr "" + +msgid "" +"role <moderator|participant|visitor|none> [nick1] [nick2] ...: Get the " +"users with an role or set users' role with the room." +msgstr "" + +msgid "invite <user> [message]: Invite a user to the room." +msgstr "" + +msgid "join: <room> [password]: Join a chat on this server." +msgstr "" + +msgid "kick <user> [reason]: Kick a user from the room." +msgstr "" + +msgid "" +"msg <user> <message>: Send a private message to another user." +msgstr "" + +msgid "ping <jid>:\tPing a user/component/server." +msgstr "" + +msgid "buzz: Buzz a user to get their attention" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "XMPP Protocol Plugin" +msgstr "" + +#. Translators: 'domain' is used here in the context of Internet domains, e.g. pidgin.im +msgid "Domain" +msgstr "" + +msgid "Require SSL/TLS" +msgstr "" + +msgid "Force old (port 5223) SSL" +msgstr "" + +msgid "Allow plaintext auth over unencrypted streams" +msgstr "" + +msgid "Connect port" +msgstr "" + +#. TODO: default to automatically try different ports. Make the user be +#. * able to set the first port to try (like LastConnectedPort in Windows client). +#. Account options +msgid "Connect server" +msgstr "" + +msgid "File transfer proxies" +msgstr "" + +#. this should probably be part of global smiley theme settings later on, +#. shared with MSN +msgid "Show Custom Smileys" +msgstr "" + +#, c-format +msgid "%s has left the conversation." +msgstr "" + +#, c-format +msgid "Message from %s" +msgstr "" + +#, c-format +msgid "%s has set the topic to: %s" +msgstr "" + +#, c-format +msgid "The topic is: %s" +msgstr "" + +#, c-format +msgid "Message delivery to %s failed: %s" +msgstr "" + +msgid "XMPP Message Error" +msgstr "" + +#, c-format +msgid "(Code %s)" +msgstr "" + +msgid "XML Parse error" +msgstr "" + +msgid "Unknown Error in presence" +msgstr "" + +msgid "Create New Room" +msgstr "" + +msgid "" +"You are creating a new room. Would you like to configure it, or accept the " +"default settings?" +msgstr "" + +msgid "_Configure Room" +msgstr "" + +msgid "_Accept Defaults" +msgstr "" + +#, c-format +msgid "Error joining chat %s" +msgstr "" + +#, c-format +msgid "Error in chat %s" +msgstr "" + +msgid "An error occured on the in-band bytestream transfer\n" +msgstr "" + +msgid "Transfer was closed." +msgstr "" + +msgid "Failed to open the file" +msgstr "" + +msgid "Failed to open in-band bytestream" +msgstr "" + +#, c-format +msgid "Unable to send file to %s, user does not support file transfers" +msgstr "" + +msgid "File Send Failed" +msgstr "" + +#, c-format +msgid "Unable to send file to %s, invalid JID" +msgstr "" + +#, c-format +msgid "Unable to send file to %s, user is not online" +msgstr "" + +#, c-format +msgid "Unable to send file to %s, not subscribed to user presence" +msgstr "" + +#, c-format +msgid "Please select the resource of %s to which you would like to send a file" +msgstr "" + +msgid "Edit User Mood" +msgstr "" + +msgid "Please select your mood from the list." +msgstr "" + +msgid "Set" +msgstr "" + +msgid "Set Mood..." +msgstr "" + +msgid "Set User Nickname" +msgstr "" + +msgid "Please specify a new nickname for you." +msgstr "" + +msgid "" +"This information is visible to all contacts on your contact list, so choose " +"something appropriate." +msgstr "" + +msgid "Set Nickname..." +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Select an action" +msgstr "" + +#. only notify the user about problems adding to the friends list +#. * maybe we should do something else for other lists, but it probably +#. * won't cause too many problems if we just ignore it +#, c-format +msgid "Unable to add \"%s\"." +msgstr "" + +msgid "Buddy Add error" +msgstr "" + +msgid "The username specified does not exist." +msgstr "" + +#, c-format +msgid "Buddy list synchronization issue in %s (%s)" +msgstr "" + +#, c-format +msgid "" +"%s on the local list is inside the group \"%s\" but not on the server list. " +"Do you want this buddy to be added?" +msgstr "" + +#, c-format +msgid "" +"%s is on the local list but not on the server list. Do you want this buddy " +"to be added?" +msgstr "" + +#, c-format +msgid "Unable to parse message" +msgstr "" + +#, c-format +msgid "Syntax Error (probably a client bug)" +msgstr "" + +#, c-format +msgid "Invalid email address" +msgstr "" + +#, c-format +msgid "User does not exist" +msgstr "" + +#, c-format +msgid "Fully qualified domain name missing" +msgstr "" + +#, c-format +msgid "Already logged in" +msgstr "" + +#, c-format +msgid "Invalid username" +msgstr "" + +#, c-format +msgid "Invalid friendly name" +msgstr "" + +#, c-format +msgid "List full" +msgstr "" + +#, c-format +msgid "Already there" +msgstr "" + +#, c-format +msgid "Not on list" +msgstr "" + +#, c-format +msgid "User is offline" +msgstr "" + +#, c-format +msgid "Already in the mode" +msgstr "" + +#, c-format +msgid "Already in opposite list" +msgstr "" + +#, c-format +msgid "Too many groups" +msgstr "" + +#, c-format +msgid "Invalid group" +msgstr "" + +#, c-format +msgid "User not in group" +msgstr "" + +#, c-format +msgid "Group name too long" +msgstr "" + +#, c-format +msgid "Cannot remove group zero" +msgstr "" + +#, c-format +msgid "Tried to add a user to a group that doesn't exist" +msgstr "" + +#, c-format +msgid "Switchboard failed" +msgstr "" + +#, c-format +msgid "Notify transfer failed" +msgstr "" + +#, c-format +msgid "Required fields missing" +msgstr "" + +#, c-format +msgid "Too many hits to a FND" +msgstr "" + +#, c-format +msgid "Not logged in" +msgstr "" + +#, c-format +msgid "Service temporarily unavailable" +msgstr "" + +#, c-format +msgid "Database server error" +msgstr "" + +#, c-format +msgid "Command disabled" +msgstr "" + +#, c-format +msgid "File operation error" +msgstr "" + +#, c-format +msgid "Memory allocation error" +msgstr "" + +#, c-format +msgid "Wrong CHL value sent to server" +msgstr "" + +#, c-format +msgid "Server busy" +msgstr "" + +#, c-format +msgid "Server unavailable" +msgstr "" + +#, c-format +msgid "Peer notification server down" +msgstr "" + +#, c-format +msgid "Database connect error" +msgstr "" + +#, c-format +msgid "Server is going down (abandon ship)" +msgstr "" + +#, c-format +msgid "Error creating connection" +msgstr "" + +#, c-format +msgid "CVR parameters are either unknown or not allowed" +msgstr "" + +#, c-format +msgid "Unable to write" +msgstr "" + +#, c-format +msgid "Session overload" +msgstr "" + +#, c-format +msgid "User is too active" +msgstr "" + +#, c-format +msgid "Too many sessions" +msgstr "" + +#, c-format +msgid "Passport not verified" +msgstr "" + +#, c-format +msgid "Bad friend file" +msgstr "" + +#, c-format +msgid "Not expected" +msgstr "" + +#, c-format +msgid "Friendly name changes too rapidly" +msgstr "" + +#, c-format +msgid "Server too busy" +msgstr "" + +#, c-format +msgid "Authentication failed" +msgstr "" + +#, c-format +msgid "Not allowed when offline" +msgstr "" + +#, c-format +msgid "Not accepting new users" +msgstr "" + +#, c-format +msgid "Kids Passport without parental consent" +msgstr "" + +#, c-format +msgid "Passport account not yet verified" +msgstr "" + +msgid "Passport account suspended" +msgstr "" + +#, c-format +msgid "Bad ticket" +msgstr "" + +#, c-format +msgid "Unknown Error Code %d" +msgstr "" + +#, c-format +msgid "MSN Error: %s\n" +msgstr "" + +msgid "Other Contacts" +msgstr "" + +msgid "Non-IM Contacts" +msgstr "" + +msgid "Nudge" +msgstr "" + +#, c-format +msgid "%s has nudged you!" +msgstr "" + +#, c-format +msgid "Nudging %s..." +msgstr "" + +msgid "Email Address..." +msgstr "" + +msgid "Your new MSN friendly name is too long." +msgstr "" + +msgid "Set your friendly name." +msgstr "" + +msgid "This is the name that other MSN buddies will see you as." +msgstr "" + +msgid "Set your home phone number." +msgstr "" + +msgid "Set your work phone number." +msgstr "" + +msgid "Set your mobile phone number." +msgstr "" + +msgid "Allow MSN Mobile pages?" +msgstr "" + +msgid "" +"Do you want to allow or disallow people on your buddy list to send you MSN " +"Mobile pages to your cell phone or other mobile device?" +msgstr "" + +msgid "Allow" +msgstr "" + +msgid "Disallow" +msgstr "" + +#, c-format +msgid "Blocked Text for %s" +msgstr "" + +msgid "No text is blocked for this account." +msgstr "" + +#, c-format +msgid "" +"MSN servers are currently blocking the following regular expressions:<br/>%s" +msgstr "" + +msgid "This account does not have email enabled." +msgstr "" + +msgid "Send a mobile message." +msgstr "" + +msgid "Page" +msgstr "" + +msgid "Playing a game" +msgstr "" + +msgid "Working" +msgstr "" + +msgid "Has you" +msgstr "" + +msgid "Home Phone Number" +msgstr "" + +msgid "Work Phone Number" +msgstr "" + +msgid "Mobile Phone Number" +msgstr "" + +msgid "Be Right Back" +msgstr "" + +msgid "Busy" +msgstr "" + +msgid "On the Phone" +msgstr "" + +msgid "Out to Lunch" +msgstr "" + +#. primitive +#. ID +#. name - use default +#. saveable +#. should be user_settable some day +#. independent +msgid "Artist" +msgstr "" + +msgid "Album" +msgstr "" + +msgid "Game Title" +msgstr "" + +msgid "Office Title" +msgstr "" + +msgid "Set Friendly Name..." +msgstr "" + +msgid "Set Home Phone Number..." +msgstr "" + +msgid "Set Work Phone Number..." +msgstr "" + +msgid "Set Mobile Phone Number..." +msgstr "" + +msgid "Enable/Disable Mobile Devices..." +msgstr "" + +msgid "Allow/Disallow Mobile Pages..." +msgstr "" + +msgid "View Blocked Text..." +msgstr "" + +msgid "Open Hotmail Inbox" +msgstr "" + +msgid "Send to Mobile" +msgstr "" + +msgid "Initiate _Chat" +msgstr "" + +msgid "SSL support is needed for MSN. Please install a supported SSL library." +msgstr "" + +msgid "Failed to connect to server." +msgstr "" + +msgid "Error retrieving profile" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Age" +msgstr "" + +msgid "Occupation" +msgstr "" + +msgid "Location" +msgstr "" + +msgid "Hobbies and Interests" +msgstr "" + +msgid "A Little About Me" +msgstr "" + +msgid "Social" +msgstr "" + +msgid "Marital Status" +msgstr "" + +msgid "Interests" +msgstr "" + +msgid "Pets" +msgstr "" + +msgid "Hometown" +msgstr "" + +msgid "Places Lived" +msgstr "" + +msgid "Fashion" +msgstr "" + +msgid "Humor" +msgstr "" + +msgid "Music" +msgstr "" + +msgid "Favorite Quote" +msgstr "" + +msgid "Contact Info" +msgstr "" + +msgid "Personal" +msgstr "" + +msgid "Significant Other" +msgstr "" + +msgid "Home Phone" +msgstr "" + +msgid "Home Phone 2" +msgstr "" + +msgid "Home Address" +msgstr "" + +msgid "Personal Mobile" +msgstr "" + +msgid "Home Fax" +msgstr "" + +msgid "Personal Email" +msgstr "" + +msgid "Personal IM" +msgstr "" + +msgid "Anniversary" +msgstr "" + +#. Business +msgid "Work" +msgstr "" + +msgid "Job Title" +msgstr "" + +msgid "Company" +msgstr "" + +msgid "Department" +msgstr "" + +msgid "Profession" +msgstr "" + +msgid "Work Phone" +msgstr "" + +msgid "Work Phone 2" +msgstr "" + +msgid "Work Address" +msgstr "" + +msgid "Work Mobile" +msgstr "" + +msgid "Work Pager" +msgstr "" + +msgid "Work Fax" +msgstr "" + +msgid "Work Email" +msgstr "" + +msgid "Work IM" +msgstr "" + +msgid "Start Date" +msgstr "" + +msgid "Favorite Things" +msgstr "" + +msgid "Last Updated" +msgstr "" + +msgid "Homepage" +msgstr "" + +msgid "The user has not created a public profile." +msgstr "" + +msgid "" +"MSN reported not being able to find the user's profile. This either means " +"that the user does not exist, or that the user exists but has not created a " +"public profile." +msgstr "" + +msgid "" +"Could not find any information in the user's profile. The user most likely " +"does not exist." +msgstr "" + +msgid "View web profile" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. *< summary +msgid "Windows Live Messenger Protocol Plugin" +msgstr "" + +msgid "Use HTTP Method" +msgstr "" + +msgid "HTTP Method Server" +msgstr "" + +msgid "Show custom smileys" +msgstr "" + +msgid "nudge: nudge a user to get their attention" +msgstr "" + +msgid "Windows Live ID authentication:Unable to connect" +msgstr "" + +msgid "Windows Live ID authentication:Invalid response" +msgstr "" + +#, c-format +msgid "%s just sent you a Nudge!" +msgstr "" + +#, c-format +msgid "Unknown error (%d): %s" +msgstr "" + +msgid "Unable to add user" +msgstr "" + +#, c-format +msgid "Unknown error (%d)" +msgstr "" + +msgid "The following users are missing from your addressbook" +msgstr "" + +#, c-format +msgid "Unable to add user on %s (%s)" +msgstr "" + +#, c-format +msgid "Unable to block user on %s (%s)" +msgstr "" + +#, c-format +msgid "Unable to permit user on %s (%s)" +msgstr "" + +#, c-format +msgid "%s could not be added because your buddy list is full." +msgstr "" + +#, c-format +msgid "%s is not a valid passport account." +msgstr "" + +msgid "Service Temporarily Unavailable." +msgstr "" + +msgid "Unknown error." +msgstr "" + +msgid "Mobile message was not sent because it was too long." +msgstr "" + +#, c-format +msgid "" +"The MSN server will shut down for maintenance in %d minute. You will " +"automatically be signed out at that time. Please finish any conversations " +"in progress.\n" +"\n" +"After the maintenance has been completed, you will be able to successfully " +"sign in." +msgid_plural "" +"The MSN server will shut down for maintenance in %d minutes. You will " +"automatically be signed out at that time. Please finish any conversations " +"in progress.\n" +"\n" +"After the maintenance has been completed, you will be able to successfully " +"sign in." +msgstr[0] "" +msgstr[1] "" + +msgid "" +"Message was not sent because the system is unavailable. This normally " +"happens when the user is blocked or does not exist." +msgstr "" + +msgid "Message was not sent because messages are being sent too quickly." +msgstr "" + +msgid "Message was not sent because an unknown encoding error occurred." +msgstr "" + +msgid "Message was not sent because an unknown error occurred." +msgstr "" + +msgid "Unable to connect" +msgstr "" + +msgid "Writing error" +msgstr "" + +msgid "Reading error" +msgstr "" + +#, c-format +msgid "" +"Connection error from %s server:\n" +"%s" +msgstr "" + +msgid "Our protocol is not supported by the server." +msgstr "" + +msgid "Error parsing HTTP." +msgstr "" + +msgid "You have signed on from another location." +msgstr "" + +msgid "The MSN servers are temporarily unavailable. Please wait and try again." +msgstr "" + +msgid "The MSN servers are going down temporarily." +msgstr "" + +#, c-format +msgid "Unable to authenticate: %s" +msgstr "" + +msgid "" +"Your MSN buddy list is temporarily unavailable. Please wait and try again." +msgstr "" + +msgid "Handshaking" +msgstr "" + +msgid "Transferring" +msgstr "" + +msgid "Starting authentication" +msgstr "" + +msgid "Getting cookie" +msgstr "" + +msgid "Sending cookie" +msgstr "" + +msgid "Retrieving buddy list" +msgstr "" + +msgid "Away From Computer" +msgstr "" + +msgid "On The Phone" +msgstr "" + +msgid "Out To Lunch" +msgstr "" + +msgid "Message may have not been sent because a timeout occurred:" +msgstr "" + +msgid "Message could not be sent, not allowed while invisible:" +msgstr "" + +msgid "Message could not be sent because the user is offline:" +msgstr "" + +msgid "Message could not be sent because a connection error occurred:" +msgstr "" + +msgid "Message could not be sent because we are sending too quickly:" +msgstr "" + +msgid "" +"Message could not be sent because we were unable to establish a session with " +"the server. This is likely a server problem, try again in a few minutes:" +msgstr "" + +msgid "" +"Message could not be sent because an error with the switchboard occurred:" +msgstr "" + +msgid "Message may have not been sent because an unknown error occurred:" +msgstr "" + +msgid "Delete Buddy from Address Book?" +msgstr "" + +msgid "Do you want to delete this buddy from your address book as well?" +msgstr "" + +msgid "The username specified is invalid." +msgstr "" + +msgid "This Hotmail account may not be active." +msgstr "" + +msgid "Profile URL" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "MSN Protocol Plugin" +msgstr "" + +#, c-format +msgid "%s is not a valid group." +msgstr "" + +#, c-format +msgid "%s on %s (%s)" +msgstr "" + +msgid "Unable to rename group" +msgstr "" + +msgid "Unable to delete group" +msgstr "" + +#, c-format +msgid "%s has added you to his or her buddy list." +msgstr "" + +#, c-format +msgid "%s has removed you from his or her buddy list." +msgstr "" + +#, c-format +msgid "No such user: %s" +msgstr "" + +msgid "User lookup" +msgstr "" + +msgid "Reading challenge" +msgstr "" + +msgid "Unexpected challenge length from server" +msgstr "" + +msgid "Logging in" +msgstr "" + +msgid "MySpaceIM - No Username Set" +msgstr "" + +msgid "You appear to have no MySpace username." +msgstr "" + +msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)" +msgstr "" + +msgid "Lost connection with server" +msgstr "" + +#. Can't write _()'d strings in array initializers. Workaround. +#. khc: then use N_() in the array initializer and use _() when they are +#. used +msgid "New mail messages" +msgstr "" + +msgid "New blog comments" +msgstr "" + +msgid "New profile comments" +msgstr "" + +msgid "New friend requests!" +msgstr "" + +msgid "New picture comments" +msgstr "" + +msgid "MySpace" +msgstr "" + +msgid "IM Friends" +msgstr "" + +#, c-format +msgid "" +"%d buddy was added or updated from the server (including buddies already on " +"the server-side list)" +msgid_plural "" +"%d buddies were added or updated from the server (including buddies already " +"on the server-side list)" +msgstr[0] "" +msgstr[1] "" + +msgid "Add contacts from server" +msgstr "" + +#. The session is now set up, ready to be connected. This emits the +#. * signedOn signal, so clients can now do anything with msimprpl, and +#. * we're ready for it (session key, userid, username all setup). +msgid "Connected" +msgstr "" + +#, c-format +msgid "Protocol error, code %d: %s" +msgstr "" + +#, c-format +msgid "" +"%s Your password is %d characters, greater than the expected maximum length " +"of %d for MySpaceIM. Please shorten your password at http://profileedit." +"myspace.com/index.cfm?fuseaction=accountSettings.changePassword and try " +"again." +msgstr "" + +msgid "MySpaceIM Error" +msgstr "" + +msgid "Invalid input condition" +msgstr "" + +msgid "Read buffer full (2)" +msgstr "" + +msgid "Unparseable message" +msgstr "" + +#, c-format +msgid "Couldn't connect to host: %s (%d)" +msgstr "" + +msgid "Failed to add buddy" +msgstr "" + +msgid "'addbuddy' command failed." +msgstr "" + +msgid "persist command failed" +msgstr "" + +msgid "Failed to remove buddy" +msgstr "" + +msgid "'delbuddy' command failed" +msgstr "" + +msgid "blocklist command failed" +msgstr "" + +msgid "Missing Cipher" +msgstr "" + +msgid "The RC4 cipher could not be found" +msgstr "" + +msgid "" +"Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will " +"not be loaded." +msgstr "" + +msgid "Add friends from MySpace.com" +msgstr "" + +msgid "Importing friends failed" +msgstr "" + +#. TODO: find out how +msgid "Find people..." +msgstr "" + +msgid "Change IM name..." +msgstr "" + +msgid "myim URL handler" +msgstr "" + +msgid "No suitable MySpaceIM account could be found to open this myim URL." +msgstr "" + +msgid "Enable the proper MySpaceIM account and try again." +msgstr "" + +msgid "Show display name in status text" +msgstr "" + +msgid "Show headline in status text" +msgstr "" + +msgid "Send emoticons" +msgstr "" + +msgid "Screen resolution (dots per inch)" +msgstr "" + +msgid "Base font size (points)" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Headline" +msgstr "" + +msgid "Song" +msgstr "" + +msgid "Total Friends" +msgstr "" + +msgid "Client Version" +msgstr "" + +msgid "MySpaceIM - Username Available" +msgstr "" + +msgid "This username is available. Would you like to set it?" +msgstr "" + +msgid "ONCE SET, THIS CANNOT BE CHANGED!" +msgstr "" + +msgid "MySpaceIM - Please Set a Username" +msgstr "" + +msgid "This username is unavailable." +msgstr "" + +msgid "Please try another username:" +msgstr "" + +#. Protocol won't log in now without a username set.. Disconnect +msgid "No username set" +msgstr "" + +msgid "Please enter a username to check its availability:" +msgstr "" + +#. TODO: icons for each zap +#. Lots of comments for translators: +#. Zap means "to strike suddenly and forcefully as if with a +#. * projectile or weapon." This term often has an electrical +#. * connotation, for example, "he was zapped by electricity when +#. * he put a fork in the toaster." +msgid "Zap" +msgstr "" + +#, c-format +msgid "%s has zapped you!" +msgstr "" + +#, c-format +msgid "Zapping %s..." +msgstr "" + +#. Whack means "to hit or strike someone with a sharp blow" +msgid "Whack" +msgstr "" + +#, c-format +msgid "%s has whacked you!" +msgstr "" + +#, c-format +msgid "Whacking %s..." +msgstr "" + +#. Torch means "to set on fire." Don't worry, this doesn't +#. * make a whole lot of sense in English, either. Feel free +#. * to translate it literally. +msgid "Torch" +msgstr "" + +#, c-format +msgid "%s has torched you!" +msgstr "" + +#, c-format +msgid "Torching %s..." +msgstr "" + +#. Smooch means "to kiss someone, often enthusiastically" +msgid "Smooch" +msgstr "" + +#, c-format +msgid "%s has smooched you!" +msgstr "" + +#, c-format +msgid "Smooching %s..." +msgstr "" + +#. A hug is a display of affection; wrapping your arms around someone +msgid "Hug" +msgstr "" + +#, c-format +msgid "%s has hugged you!" +msgstr "" + +#, c-format +msgid "Hugging %s..." +msgstr "" + +#. Slap means "to hit someone with an open/flat hand" +msgid "Slap" +msgstr "" + +#, c-format +msgid "%s has slapped you!" +msgstr "" + +#, c-format +msgid "Slapping %s..." +msgstr "" + +#. Goose means "to pinch someone on their butt" +msgid "Goose" +msgstr "" + +#, c-format +msgid "%s has goosed you!" +msgstr "" + +#, c-format +msgid "Goosing %s..." +msgstr "" + +#. A high-five is when two people's hands slap each other +#. * in the air above their heads. It is done to celebrate +#. * something, often a victory, or to congratulate someone. +msgid "High-five" +msgstr "" + +#, c-format +msgid "%s has high-fived you!" +msgstr "" + +#, c-format +msgid "High-fiving %s..." +msgstr "" + +#. We're not entirely sure what the MySpace people mean by +#. * this... but we think it's the equivalent of "prank." Or, for +#. * someone to perform a mischievous trick or practical joke. +msgid "Punk" +msgstr "" + +#, c-format +msgid "%s has punk'd you!" +msgstr "" + +#, c-format +msgid "Punking %s..." +msgstr "" + +#. Raspberry is a slang term for the vibrating sound made +#. * when you stick your tongue out of your mouth with your +#. * lips closed and blow. It is typically done when +#. * gloating or bragging. Nowadays it's a pretty silly +#. * gesture, so it does not carry a harsh negative +#. * connotation. It is generally used in a playful tone +#. * with friends. +msgid "Raspberry" +msgstr "" + +#, c-format +msgid "%s has raspberried you!" +msgstr "" + +#, c-format +msgid "Raspberrying %s..." +msgstr "" + +msgid "Required parameters not passed in" +msgstr "" + +msgid "Unable to write to network" +msgstr "" + +msgid "Unable to read from network" +msgstr "" + +msgid "Error communicating with server" +msgstr "" + +msgid "Conference not found" +msgstr "" + +msgid "Conference does not exist" +msgstr "" + +msgid "A folder with that name already exists" +msgstr "" + +msgid "Not supported" +msgstr "" + +msgid "Password has expired" +msgstr "" + +msgid "Incorrect password" +msgstr "" + +msgid "User not found" +msgstr "" + +msgid "Account has been disabled" +msgstr "" + +msgid "The server could not access the directory" +msgstr "" + +msgid "Your system administrator has disabled this operation" +msgstr "" + +msgid "The server is unavailable; try again later" +msgstr "" + +msgid "Cannot add a contact to the same folder twice" +msgstr "" + +msgid "Cannot add yourself" +msgstr "" + +msgid "Master archive is misconfigured" +msgstr "" + +msgid "Incorrect username or password" +msgstr "" + +msgid "Could not recognize the host of the username you entered" +msgstr "" + +msgid "" +"Your account has been disabled because too many incorrect passwords were " +"entered" +msgstr "" + +msgid "You cannot add the same person twice to a conversation" +msgstr "" + +msgid "You have reached your limit for the number of contacts allowed" +msgstr "" + +msgid "You have entered an incorrect username" +msgstr "" + +msgid "An error occurred while updating the directory" +msgstr "" + +msgid "Incompatible protocol version" +msgstr "" + +msgid "The user has blocked you" +msgstr "" + +msgid "" +"This evaluation version does not allow more than ten users to log in at one " +"time" +msgstr "" + +msgid "The user is either offline or you are blocked" +msgstr "" + +#, c-format +msgid "Unknown error: 0x%X" +msgstr "" + +#, c-format +msgid "Login failed (%s)." +msgstr "" + +#, c-format +msgid "Unable to send message. Could not get details for user (%s)." +msgstr "" + +#, c-format +msgid "Unable to add %s to your buddy list (%s)." +msgstr "" + +#. TODO: Improve this! message to who or for what conference? +#, c-format +msgid "Unable to send message (%s)." +msgstr "" + +#, c-format +msgid "Unable to invite user (%s)." +msgstr "" + +#, c-format +msgid "Unable to send message to %s. Could not create the conference (%s)." +msgstr "" + +#, c-format +msgid "Unable to send message. Could not create the conference (%s)." +msgstr "" + +#, c-format +msgid "" +"Unable to move user %s to folder %s in the server side list. Error while " +"creating folder (%s)." +msgstr "" + +#, c-format +msgid "" +"Unable to add %s to your buddy list. Error creating folder in server side " +"list (%s)." +msgstr "" + +#, c-format +msgid "Could not get details for user %s (%s)." +msgstr "" + +#, c-format +msgid "Unable to add user to privacy list (%s)." +msgstr "" + +#, c-format +msgid "Unable to add %s to deny list (%s)." +msgstr "" + +#, c-format +msgid "Unable to add %s to permit list (%s)." +msgstr "" + +#, c-format +msgid "Unable to remove %s from privacy list (%s)." +msgstr "" + +#, c-format +msgid "Unable to change server side privacy settings (%s)." +msgstr "" + +#, c-format +msgid "Unable to create conference (%s)." +msgstr "" + +msgid "Error communicating with server. Closing connection." +msgstr "" + +msgid "Telephone Number" +msgstr "" + +msgid "Personal Title" +msgstr "" + +msgid "Mailstop" +msgstr "" + +msgid "User ID" +msgstr "" + +#. tag = _("DN"); +#. value = nm_user_record_get_dn(user_record); +#. if (value) { +#. purple_notify_user_info_add_pair(user_info, tag, value); +#. } +#. +msgid "Full name" +msgstr "" + +#, c-format +msgid "GroupWise Conference %d" +msgstr "" + +msgid "Authenticating..." +msgstr "" + +msgid "Unable to connect to server." +msgstr "" + +msgid "Waiting for response..." +msgstr "" + +#, c-format +msgid "%s has been invited to this conversation." +msgstr "" + +msgid "Invitation to Conversation" +msgstr "" + +#, c-format +msgid "" +"Invitation from: %s\n" +"\n" +"Sent: %s" +msgstr "" + +msgid "Would you like to join the conversation?" +msgstr "" + +msgid "You have been logged out because you logged in at another workstation." +msgstr "" + +#, c-format +msgid "" +"%s appears to be offline and did not receive the message that you just sent." +msgstr "" + +msgid "" +"Unable to connect to server. Please enter the address of the server you wish " +"to connect to." +msgstr "" + +msgid "Error. SSL support is not installed." +msgstr "" + +msgid "This conference has been closed. No more messages can be sent." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "Novell GroupWise Messenger Protocol Plugin" +msgstr "" + +msgid "Server address" +msgstr "" + +msgid "Server port" +msgstr "" + +msgid "Could not join chat room" +msgstr "" + +msgid "Invalid chat room name" +msgstr "" + +msgid "Server closed the connection." +msgstr "" + +#, c-format +msgid "" +"Lost connection with server:\n" +"%s" +msgstr "" + +msgid "Received invalid data on connection with server." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "AIM Protocol Plugin" +msgstr "" + +msgid "ICQ UIN..." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "ICQ Protocol Plugin" +msgstr "" + +msgid "Encoding" +msgstr "" + +msgid "The remote user has closed the connection." +msgstr "" + +msgid "The remote user has declined your request." +msgstr "" + +#, c-format +msgid "Lost connection with the remote user:<br>%s" +msgstr "" + +msgid "Received invalid data on connection with remote user." +msgstr "" + +msgid "Could not establish a connection with the remote user." +msgstr "" + +msgid "Direct IM established" +msgstr "" + +#, c-format +msgid "" +"%s tried to send you a %s file, but we only allow files up to %s over Direct " +"IM. Try using file transfer instead.\n" +msgstr "" + +#, c-format +msgid "File %s is %s, which is larger than the maximum size of %s." +msgstr "" + +msgid "Invalid error" +msgstr "" + +msgid "Invalid SNAC" +msgstr "" + +msgid "Rate to host" +msgstr "" + +msgid "Rate to client" +msgstr "" + +msgid "Service unavailable" +msgstr "" + +msgid "Service not defined" +msgstr "" + +msgid "Obsolete SNAC" +msgstr "" + +msgid "Not supported by host" +msgstr "" + +msgid "Not supported by client" +msgstr "" + +msgid "Refused by client" +msgstr "" + +msgid "Reply too big" +msgstr "" + +msgid "Responses lost" +msgstr "" + +msgid "Request denied" +msgstr "" + +msgid "Busted SNAC payload" +msgstr "" + +msgid "Insufficient rights" +msgstr "" + +msgid "In local permit/deny" +msgstr "" + +msgid "Warning level too high (sender)" +msgstr "" + +msgid "Warning level too high (receiver)" +msgstr "" + +msgid "User temporarily unavailable" +msgstr "" + +msgid "No match" +msgstr "" + +msgid "List overflow" +msgstr "" + +msgid "Request ambiguous" +msgstr "" + +msgid "Queue full" +msgstr "" + +msgid "Not while on AOL" +msgstr "" + +msgid "" +"(There was an error receiving this message. The buddy you are speaking with " +"is probably using a different encoding than expected. If you know what " +"encoding he is using, you can specify it in the advanced account options for " +"your AIM/ICQ account.)" +msgstr "" + +#, c-format +msgid "" +"(There was an error receiving this message. Either you and %s have " +"different encodings selected, or %s has a buggy client.)" +msgstr "" + +#. Label +msgid "Buddy Icon" +msgstr "" + +msgid "Voice" +msgstr "" + +msgid "AIM Direct IM" +msgstr "" + +msgid "Get File" +msgstr "" + +msgid "Games" +msgstr "" + +msgid "Add-Ins" +msgstr "" + +msgid "Send Buddy List" +msgstr "" + +msgid "ICQ Direct Connect" +msgstr "" + +msgid "AP User" +msgstr "" + +msgid "ICQ RTF" +msgstr "" + +msgid "Nihilist" +msgstr "" + +msgid "ICQ Server Relay" +msgstr "" + +msgid "Old ICQ UTF8" +msgstr "" + +msgid "Trillian Encryption" +msgstr "" + +msgid "ICQ UTF8" +msgstr "" + +msgid "Hiptop" +msgstr "" + +msgid "Security Enabled" +msgstr "" + +msgid "Video Chat" +msgstr "" + +msgid "iChat AV" +msgstr "" + +msgid "Live Video" +msgstr "" + +msgid "Camera" +msgstr "" + +msgid "Screen Sharing" +msgstr "" + +msgid "Free For Chat" +msgstr "" + +msgid "Not Available" +msgstr "" + +msgid "Occupied" +msgstr "" + +msgid "Web Aware" +msgstr "" + +msgid "Invisible" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "Warning Level" +msgstr "" + +msgid "Buddy Comment" +msgstr "" + +#, c-format +msgid "" +"Could not connect to authentication server:\n" +"%s" +msgstr "" + +#, c-format +msgid "" +"Could not connect to BOS server:\n" +"%s" +msgstr "" + +msgid "Username sent" +msgstr "" + +msgid "Connection established, cookie sent" +msgstr "" + +#. TODO: Don't call this with ssi +msgid "Finalizing connection" +msgstr "" + +#, c-format +msgid "" +"Unable to login: Could not sign on as %s because the username is invalid. " +"Usernames must be a valid email address, or start with a letter and contain " +"only letters, numbers and spaces, or contain only numbers." +msgstr "" + +#. Unregistered username +#. uid is not exist +msgid "Invalid username." +msgstr "" + +msgid "Incorrect password." +msgstr "" + +#. Suspended account +msgid "Your account is currently suspended." +msgstr "" + +#. service temporarily unavailable +msgid "The AOL Instant Messenger service is temporarily unavailable." +msgstr "" + +#. username connecting too frequently +#. IP address connecting too frequently +msgid "" +"You have been connecting and disconnecting too frequently. Wait ten minutes " +"and try again. If you continue to try, you will need to wait even longer." +msgstr "" + +#, c-format +msgid "The client version you are using is too old. Please upgrade at %s" +msgstr "" + +msgid "Could Not Connect" +msgstr "" + +msgid "Received authorization" +msgstr "" + +msgid "The SecurID key entered is invalid." +msgstr "" + +msgid "Enter SecurID" +msgstr "" + +msgid "Enter the 6 digit number from the digital display." +msgstr "" + +#. * +#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons. +#. +msgid "_OK" +msgstr "" + +#, c-format +msgid "You may be disconnected shortly. If so, check %s for updates." +msgstr "" + +msgid "Unable to get a valid AIM login hash." +msgstr "" + +#, c-format +msgid "You may be disconnected shortly. Check %s for updates." +msgstr "" + +msgid "Unable to get a valid login hash." +msgstr "" + +msgid "Password sent" +msgstr "" + +msgid "Unable to initialize connection" +msgstr "" + +msgid "Please authorize me so I can add you to my buddy list." +msgstr "" + +msgid "Authorization Request Message:" +msgstr "" + +msgid "Please authorize me!" +msgstr "" + +msgid "No reason given." +msgstr "" + +msgid "Authorization Denied Message:" +msgstr "" + +#, c-format +msgid "" +"The user %u has denied your request to add them to your buddy list for the " +"following reason:\n" +"%s" +msgstr "" + +msgid "ICQ authorization denied." +msgstr "" + +#. Someone has granted you authorization +#, c-format +msgid "The user %u has granted your request to add them to your buddy list." +msgstr "" + +#, c-format +msgid "" +"You have received a special message\n" +"\n" +"From: %s [%s]\n" +"%s" +msgstr "" + +#, c-format +msgid "" +"You have received an ICQ page\n" +"\n" +"From: %s [%s]\n" +"%s" +msgstr "" + +#, c-format +msgid "" +"You have received an ICQ email from %s [%s]\n" +"\n" +"Message is:\n" +"%s" +msgstr "" + +#, c-format +msgid "ICQ user %u has sent you a buddy: %s (%s)" +msgstr "" + +msgid "Do you want to add this buddy to your buddy list?" +msgstr "" + +msgid "_Add" +msgstr "" + +msgid "_Decline" +msgstr "" + +#, c-format +msgid "You missed %hu message from %s because it was invalid." +msgid_plural "You missed %hu messages from %s because they were invalid." +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "You missed %hu message from %s because it was too large." +msgid_plural "You missed %hu messages from %s because they were too large." +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "" +"You missed %hu message from %s because the rate limit has been exceeded." +msgid_plural "" +"You missed %hu messages from %s because the rate limit has been exceeded." +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "" +"You missed %hu message from %s because his/her warning level is too high." +msgid_plural "" +"You missed %hu messages from %s because his/her warning level is too high." +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "You missed %hu message from %s because your warning level is too high." +msgid_plural "" +"You missed %hu messages from %s because your warning level is too high." +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "You missed %hu message from %s for an unknown reason." +msgid_plural "You missed %hu messages from %s for an unknown reason." +msgstr[0] "" +msgstr[1] "" + +#. Data is assumed to be the destination bn +#, c-format +msgid "Unable to send message: %s" +msgstr "" + +msgid "Unknown reason." +msgstr "" + +#, c-format +msgid "Unable to send message to %s:" +msgstr "" + +#, c-format +msgid "User information not available: %s" +msgstr "" + +msgid "Online Since" +msgstr "" + +msgid "Member Since" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Your AIM connection may be lost." +msgstr "" + +#. The conversion failed! +msgid "" +"[Unable to display a message from this user because it contained invalid " +"characters.]" +msgstr "" + +msgid "" +"The last action you attempted could not be performed because you are over " +"the rate limit. Please wait 10 seconds and try again." +msgstr "" + +#, c-format +msgid "You have been disconnected from chat room %s." +msgstr "" + +msgid "Mobile Phone" +msgstr "" + +msgid "Personal Web Page" +msgstr "" + +#. aim_userinfo_t +#. strip_html_tags +msgid "Additional Information" +msgstr "" + +msgid "Zip Code" +msgstr "" + +msgid "Work Information" +msgstr "" + +msgid "Division" +msgstr "" + +msgid "Position" +msgstr "" + +msgid "Web Page" +msgstr "" + +msgid "Pop-Up Message" +msgstr "" + +#, c-format +msgid "The following username is associated with %s" +msgid_plural "The following usernames are associated with %s" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "No results found for email address %s" +msgstr "" + +#, c-format +msgid "You should receive an email asking to confirm %s." +msgstr "" + +msgid "Account Confirmation Requested" +msgstr "" + +#, c-format +msgid "" +"Error 0x%04x: Unable to format username because the requested name differs " +"from the original." +msgstr "" + +#, c-format +msgid "Error 0x%04x: Unable to format username because it is invalid." +msgstr "" + +#, c-format +msgid "" +"Error 0x%04x: Unable to format username because the requested name is too " +"long." +msgstr "" + +#, c-format +msgid "" +"Error 0x%04x: Unable to change email address because there is already a " +"request pending for this username." +msgstr "" + +#, c-format +msgid "" +"Error 0x%04x: Unable to change email address because the given address has " +"too many usernames associated with it." +msgstr "" + +#, c-format +msgid "" +"Error 0x%04x: Unable to change email address because the given address is " +"invalid." +msgstr "" + +#, c-format +msgid "Error 0x%04x: Unknown error." +msgstr "" + +msgid "Error Changing Account Info" +msgstr "" + +#, c-format +msgid "The email address for %s is %s" +msgstr "" + +msgid "Account Info" +msgstr "" + +msgid "" +"Your IM Image was not sent. You must be Direct Connected to send IM Images." +msgstr "" + +msgid "Unable to set AIM profile." +msgstr "" + +msgid "" +"You have probably requested to set your profile before the login procedure " +"completed. Your profile remains unset; try setting it again when you are " +"fully connected." +msgstr "" + +#, c-format +msgid "" +"The maximum profile length of %d byte has been exceeded. It has been " +"truncated for you." +msgid_plural "" +"The maximum profile length of %d bytes has been exceeded. It has been " +"truncated for you." +msgstr[0] "" +msgstr[1] "" + +msgid "Profile too long." +msgstr "" + +#, c-format +msgid "" +"The maximum away message length of %d byte has been exceeded. It has been " +"truncated for you." +msgid_plural "" +"The maximum away message length of %d bytes has been exceeded. It has been " +"truncated for you." +msgstr[0] "" +msgstr[1] "" + +msgid "Away message too long." +msgstr "" + +#, c-format +msgid "" +"Could not add the buddy %s because the username is invalid. Usernames must " +"be a valid email address, or start with a letter and contain only letters, " +"numbers and spaces, or contain only numbers." +msgstr "" + +msgid "Unable to Add" +msgstr "" + +msgid "Unable to Retrieve Buddy List" +msgstr "" + +msgid "" +"The AIM servers were temporarily unable to send your buddy list. Your buddy " +"list is not lost, and will probably become available in a few minutes." +msgstr "" + +msgid "Orphans" +msgstr "" + +#, c-format +msgid "" +"Could not add the buddy %s because you have too many buddies in your buddy " +"list. Please remove one and try again." +msgstr "" + +msgid "(no name)" +msgstr "" + +#, c-format +msgid "Could not add the buddy %s for an unknown reason." +msgstr "" + +#, c-format +msgid "" +"The user %s has given you permission to add him or her to your buddy list. " +"Do you want to add this user?" +msgstr "" + +msgid "Authorization Given" +msgstr "" + +#. Granted +#, c-format +msgid "The user %s has granted your request to add them to your buddy list." +msgstr "" + +msgid "Authorization Granted" +msgstr "" + +#. Denied +#, c-format +msgid "" +"The user %s has denied your request to add them to your buddy list for the " +"following reason:\n" +"%s" +msgstr "" + +msgid "Authorization Denied" +msgstr "" + +msgid "_Exchange:" +msgstr "" + +msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats." +msgstr "" + +msgid "iTunes Music Store Link" +msgstr "" + +#, c-format +msgid "Buddy Comment for %s" +msgstr "" + +msgid "Buddy Comment:" +msgstr "" + +#, c-format +msgid "You have selected to open a Direct IM connection with %s." +msgstr "" + +msgid "" +"Because this reveals your IP address, it may be considered a security risk. " +"Do you wish to continue?" +msgstr "" + +msgid "C_onnect" +msgstr "" + +msgid "Get AIM Info" +msgstr "" + +#. We only do this if the user is in our buddy list +msgid "Edit Buddy Comment" +msgstr "" + +msgid "Get Status Msg" +msgstr "" + +msgid "Direct IM" +msgstr "" + +msgid "Re-request Authorization" +msgstr "" + +msgid "Require authorization" +msgstr "" + +msgid "Web aware (enabling this will cause you to receive SPAM!)" +msgstr "" + +msgid "ICQ Privacy Options" +msgstr "" + +msgid "The new formatting is invalid." +msgstr "" + +msgid "Username formatting can change only capitalization and whitespace." +msgstr "" + +msgid "Change Address To:" +msgstr "" + +msgid "<i>you are not waiting for authorization</i>" +msgstr "" + +msgid "You are awaiting authorization from the following buddies" +msgstr "" + +msgid "" +"You can re-request authorization from these buddies by right-clicking on " +"them and selecting \"Re-request Authorization.\"" +msgstr "" + +msgid "Find Buddy by Email" +msgstr "" + +msgid "Search for a buddy by email address" +msgstr "" + +msgid "Type the email address of the buddy you are searching for." +msgstr "" + +msgid "_Search" +msgstr "" + +msgid "Set User Info (web)..." +msgstr "" + +msgid "Change Password (web)" +msgstr "" + +msgid "Configure IM Forwarding (web)" +msgstr "" + +#. ICQ actions +msgid "Set Privacy Options..." +msgstr "" + +#. AIM actions +msgid "Confirm Account" +msgstr "" + +msgid "Display Currently Registered Email Address" +msgstr "" + +msgid "Change Currently Registered Email Address..." +msgstr "" + +msgid "Show Buddies Awaiting Authorization" +msgstr "" + +msgid "Search for Buddy by Email Address..." +msgstr "" + +msgid "Search for Buddy by Information" +msgstr "" + +msgid "" +"Always use AIM/ICQ proxy server for\n" +"file transfers and direct IM (slower,\n" +"but does not reveal your IP address)" +msgstr "" + +msgid "Allow multiple simultaneous logins" +msgstr "" + +#, c-format +msgid "Asking %s to connect to us at %s:%hu for Direct IM." +msgstr "" + +#, c-format +msgid "Attempting to connect to %s:%hu." +msgstr "" + +msgid "Attempting to connect via proxy server." +msgstr "" + +#, c-format +msgid "%s has just asked to directly connect to %s" +msgstr "" + +msgid "" +"This requires a direct connection between the two computers and is necessary " +"for IM Images. Because your IP address will be revealed, this may be " +"considered a privacy risk." +msgstr "" + +msgid "Aquarius" +msgstr "" + +msgid "Pisces" +msgstr "" + +msgid "Aries" +msgstr "" + +msgid "Taurus" +msgstr "" + +msgid "Gemini" +msgstr "" + +msgid "Cancer" +msgstr "" + +msgid "Leo" +msgstr "" + +msgid "Virgo" +msgstr "" + +msgid "Libra" +msgstr "" + +msgid "Scorpio" +msgstr "" + +msgid "Sagittarius" +msgstr "" + +msgid "Capricorn" +msgstr "" + +msgid "Rat" +msgstr "" + +msgid "Ox" +msgstr "" + +msgid "Tiger" +msgstr "" + +msgid "Rabbit" +msgstr "" + +msgid "Dragon" +msgstr "" + +msgid "Snake" +msgstr "" + +msgid "Horse" +msgstr "" + +msgid "Goat" +msgstr "" + +msgid "Monkey" +msgstr "" + +msgid "Rooster" +msgstr "" + +msgid "Dog" +msgstr "" + +msgid "Pig" +msgstr "" + +msgid "Other" +msgstr "" + +msgid "Visible" +msgstr "" + +msgid "Friend Only" +msgstr "" + +msgid "Private" +msgstr "" + +msgid "QQ Number" +msgstr "" + +msgid "Country/Region" +msgstr "" + +msgid "Province/State" +msgstr "" + +msgid "Zipcode" +msgstr "" + +msgid "Phone Number" +msgstr "" + +msgid "Authorize adding" +msgstr "" + +msgid "Cellphone Number" +msgstr "" + +msgid "Personal Introduction" +msgstr "" + +msgid "City/Area" +msgstr "" + +msgid "Publish Mobile" +msgstr "" + +msgid "Publish Contact" +msgstr "" + +msgid "College" +msgstr "" + +msgid "Horoscope" +msgstr "" + +msgid "Zodiac" +msgstr "" + +msgid "Blood" +msgstr "" + +msgid "True" +msgstr "" + +msgid "False" +msgstr "" + +msgid "Modify Contact" +msgstr "" + +msgid "Modify Address" +msgstr "" + +msgid "Modify Extended Information" +msgstr "" + +msgid "Modify Information" +msgstr "" + +msgid "Update" +msgstr "" + +msgid "Could not change buddy information." +msgstr "" + +msgid "Mobile" +msgstr "" + +msgid "Note" +msgstr "" + +#. callback +msgid "Buddy Memo" +msgstr "" + +msgid "Change his/her memo as you like" +msgstr "" + +msgid "_Modify" +msgstr "" + +msgid "Memo Modify" +msgstr "" + +msgid "Server says:" +msgstr "" + +msgid "Your request was accepted." +msgstr "" + +msgid "Your request was rejected." +msgstr "" + +#, c-format +msgid "%u requires verification" +msgstr "" + +msgid "Add buddy question" +msgstr "" + +msgid "Enter answer here" +msgstr "" + +msgid "Send" +msgstr "" + +msgid "Invalid answer." +msgstr "" + +msgid "Authorization denied message:" +msgstr "" + +msgid "Sorry, you're not my style." +msgstr "" + +#, c-format +msgid "%u needs authorization" +msgstr "" + +msgid "Add buddy authorize" +msgstr "" + +msgid "Enter request here" +msgstr "" + +msgid "Would you be my friend?" +msgstr "" + +msgid "QQ Buddy" +msgstr "" + +msgid "Add buddy" +msgstr "" + +msgid "Invalid QQ Number" +msgstr "" + +msgid "Failed sending authorize" +msgstr "" + +#, c-format +msgid "Failed removing buddy %u" +msgstr "" + +#, c-format +msgid "Failed removing me from %d's buddy list" +msgstr "" + +msgid "No reason given" +msgstr "" + +#. only need to get value +#, c-format +msgid "You have been added by %s" +msgstr "" + +msgid "Would you like to add him?" +msgstr "" + +#, c-format +msgid "Rejected by %s" +msgstr "" + +#, c-format +msgid "Message: %s" +msgstr "" + +msgid "ID: " +msgstr "" + +msgid "Group ID" +msgstr "" + +msgid "QQ Qun" +msgstr "" + +msgid "Please enter Qun number" +msgstr "" + +msgid "You can only search for permanent Qun\n" +msgstr "" + +msgid "(Invalid UTF-8 string)" +msgstr "" + +msgid "Not member" +msgstr "" + +msgid "Member" +msgstr "" + +msgid "Requesting" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Detail" +msgstr "" + +msgid "Creator" +msgstr "" + +msgid "About me" +msgstr "" + +msgid "Category" +msgstr "" + +msgid "The Qun does not allow others to join" +msgstr "" + +msgid "Join QQ Qun" +msgstr "" + +msgid "Input request here" +msgstr "" + +#, c-format +msgid "Successfully joined Qun %s (%u)" +msgstr "" + +msgid "Successfully joined Qun" +msgstr "" + +#, c-format +msgid "Qun %u denied from joining" +msgstr "" + +msgid "QQ Qun Operation" +msgstr "" + +msgid "Failed:" +msgstr "" + +msgid "Join Qun, Unknown Reply" +msgstr "" + +msgid "Quit Qun" +msgstr "" + +msgid "" +"Note, if you are the creator, \n" +"this operation will eventually remove this Qun." +msgstr "" + +msgid "Sorry, you are not our style" +msgstr "" + +msgid "Successfully changed Qun members" +msgstr "" + +msgid "Successfully changed Qun information" +msgstr "" + +msgid "You have successfully created a Qun" +msgstr "" + +msgid "Would you like to set up detailed information now?" +msgstr "" + +msgid "Setup" +msgstr "" + +#, c-format +msgid "%u requested to join Qun %u for %s" +msgstr "" + +#, c-format +msgid "%u request to join Qun %u" +msgstr "" + +#, c-format +msgid "Failed to join Qun %u, operated by admin %u" +msgstr "" + +#, c-format +msgid "<b>Joining Qun %u is approved by admin %u for %s</b>" +msgstr "" + +#, c-format +msgid "<b>Removed buddy %u.</b>" +msgstr "" + +#, c-format +msgid "<b>New buddy %u joined.</b>" +msgstr "" + +#, c-format +msgid "Unknown-%d" +msgstr "" + +msgid "Level" +msgstr "" + +msgid " VIP" +msgstr "" + +msgid " TCP" +msgstr "" + +msgid " FromMobile" +msgstr "" + +msgid " BindMobile" +msgstr "" + +msgid " Video" +msgstr "" + +msgid " Zone" +msgstr "" + +msgid "Flag" +msgstr "" + +msgid "Ver" +msgstr "" + +msgid "Invalid name" +msgstr "" + +msgid "Select icon..." +msgstr "" + +#, c-format +msgid "<b>Login time</b>: %d-%d-%d, %d:%d:%d<br>\n" +msgstr "" + +#, c-format +msgid "<b>Total Online Buddies</b>: %d<br>\n" +msgstr "" + +#, c-format +msgid "<b>Last Refresh</b>: %d-%d-%d, %d:%d:%d<br>\n" +msgstr "" + +#, c-format +msgid "<b>Server</b>: %s<br>\n" +msgstr "" + +#, c-format +msgid "<b>Client Tag</b>: %s<br>\n" +msgstr "" + +#, c-format +msgid "<b>Connection Mode</b>: %s<br>\n" +msgstr "" + +#, c-format +msgid "<b>My Internet IP</b>: %s:%d<br>\n" +msgstr "" + +#, c-format +msgid "<b>Sent</b>: %lu<br>\n" +msgstr "" + +#, c-format +msgid "<b>Resend</b>: %lu<br>\n" +msgstr "" + +#, c-format +msgid "<b>Lost</b>: %lu<br>\n" +msgstr "" + +#, c-format +msgid "<b>Received</b>: %lu<br>\n" +msgstr "" + +#, c-format +msgid "<b>Received Duplicate</b>: %lu<br>\n" +msgstr "" + +#, c-format +msgid "<b>Time</b>: %d-%d-%d, %d:%d:%d<br>\n" +msgstr "" + +#, c-format +msgid "<b>IP</b>: %s<br>\n" +msgstr "" + +msgid "Login Information" +msgstr "" + +msgid "<p><b>Original Author</b>:<br>\n" +msgstr "" + +msgid "<p><b>Code Contributors</b>:<br>\n" +msgstr "" + +msgid "<p><b>Lovely Patch Writers</b>:<br>\n" +msgstr "" + +msgid "<p><b>Acknowledgement</b>:<br>\n" +msgstr "" + +msgid "<p><b>Scrupulous Testers</b>:<br>\n" +msgstr "" + +msgid "and more, please let me know... thank you!))" +msgstr "" + +msgid "<p><i>And, all the boys in the backroom...</i><br>\n" +msgstr "" + +msgid "<i>Feel free to join us!</i> :)" +msgstr "" + +#, c-format +msgid "About OpenQ %s" +msgstr "" + +msgid "Change Icon" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Account Information" +msgstr "" + +msgid "Update all QQ Quns" +msgstr "" + +msgid "About OpenQ" +msgstr "" + +msgid "Modify Buddy Memo" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "QQ Protocol Plugin" +msgstr "" + +msgid "Auto" +msgstr "" + +msgid "Select Server" +msgstr "" + +msgid "QQ2005" +msgstr "" + +msgid "QQ2007" +msgstr "" + +msgid "QQ2008" +msgstr "" + +msgid "Connect by TCP" +msgstr "" + +msgid "Show server notice" +msgstr "" + +msgid "Show server news" +msgstr "" + +msgid "Show chat room when msg comes" +msgstr "" + +msgid "Keep alive interval (seconds)" +msgstr "" + +msgid "Update interval (seconds)" +msgstr "" + +msgid "Cannot decrypt server reply" +msgstr "" + +#, c-format +msgid "Failed requesting token, 0x%02X" +msgstr "" + +#, c-format +msgid "Invalid token len, %d" +msgstr "" + +#. extend redirect used in QQ2006 +msgid "Redirect_EX is not currently supported" +msgstr "" + +#. need activation +#. need activation +#. need activation +msgid "Activation required" +msgstr "" + +#, c-format +msgid "Unknown reply code when logging in (0x%02X)" +msgstr "" + +msgid "Could not decrypt server reply" +msgstr "" + +msgid "Requesting captcha" +msgstr "" + +msgid "Checking captcha" +msgstr "" + +msgid "Failed captcha verification" +msgstr "" + +msgid "Captcha Image" +msgstr "" + +msgid "Enter code" +msgstr "" + +msgid "QQ Captcha Verification" +msgstr "" + +msgid "Enter the text from the image" +msgstr "" + +#, c-format +msgid "Unknown reply when checking password (0x%02X)" +msgstr "" + +#, c-format +msgid "" +"Unknown reply code when logging in (0x%02X):\n" +"%s" +msgstr "" + +msgid "Unable to connect." +msgstr "" + +msgid "Socket error" +msgstr "" + +msgid "Unable to read from socket" +msgstr "" + +msgid "Write Error" +msgstr "" + +msgid "Connection lost" +msgstr "" + +msgid "Getting server" +msgstr "" + +msgid "Requesting token" +msgstr "" + +msgid "Couldn't resolve host" +msgstr "" + +msgid "Invalid server or port" +msgstr "" + +msgid "Connecting to server" +msgstr "" + +msgid "QQ Error" +msgstr "" + +#, c-format +msgid "" +"Server News:\n" +"%s\n" +"%s\n" +"%s" +msgstr "" + +#, c-format +msgid "%s:%s" +msgstr "" + +#, c-format +msgid "From %s:" +msgstr "" + +#, c-format +msgid "" +"Server notice From %s: \n" +"%s" +msgstr "" + +msgid "Unknown SERVER CMD" +msgstr "" + +#, c-format +msgid "" +"Error reply of %s(0x%02X)\n" +"Room %u, reply 0x%02X" +msgstr "" + +msgid "QQ Qun Command" +msgstr "" + +msgid "Could not decrypt login reply" +msgstr "" + +msgid "Unknown LOGIN CMD" +msgstr "" + +msgid "Unknown CLIENT CMD" +msgstr "" + +#, c-format +msgid "%d has declined the file %s" +msgstr "" + +msgid "File Send" +msgstr "" + +#, c-format +msgid "%d canceled the transfer of %s" +msgstr "" + +msgid "Connection closed (writing)" +msgstr "" + +#, c-format +msgid "<b>Group Title:</b> %s<br>" +msgstr "" + +#, c-format +msgid "<b>Notes Group ID:</b> %s<br>" +msgstr "" + +#, c-format +msgid "Info for Group %s" +msgstr "" + +msgid "Notes Address Book Information" +msgstr "" + +msgid "Invite Group to Conference..." +msgstr "" + +msgid "Get Notes Address Book Info" +msgstr "" + +msgid "Sending Handshake" +msgstr "" + +msgid "Waiting for Handshake Acknowledgement" +msgstr "" + +msgid "Handshake Acknowledged, Sending Login" +msgstr "" + +msgid "Waiting for Login Acknowledgement" +msgstr "" + +msgid "Login Redirected" +msgstr "" + +msgid "Forcing Login" +msgstr "" + +msgid "Login Acknowledged" +msgstr "" + +msgid "Starting Services" +msgstr "" + +#, c-format +msgid "" +"A Sametime administrator has issued the following announcement on server %s" +msgstr "" + +msgid "Sametime Administrator Announcement" +msgstr "" + +msgid "Connection reset" +msgstr "" + +#, c-format +msgid "Error reading from socket: %s" +msgstr "" + +#. this is a regular connect, error out +msgid "Unable to connect to host" +msgstr "" + +#, c-format +msgid "Announcement from %s" +msgstr "" + +msgid "Conference Closed" +msgstr "" + +msgid "Unable to send message: " +msgstr "" + +msgid "Place Closed" +msgstr "" + +msgid "Microphone" +msgstr "" + +msgid "Speakers" +msgstr "" + +msgid "Video Camera" +msgstr "" + +msgid "Supports" +msgstr "" + +msgid "External User" +msgstr "" + +msgid "Create conference with user" +msgstr "" + +#, c-format +msgid "" +"Please enter a topic for the new conference, and an invitation message to be " +"sent to %s" +msgstr "" + +msgid "New Conference" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Available Conferences" +msgstr "" + +msgid "Create New Conference..." +msgstr "" + +msgid "Invite user to a conference" +msgstr "" + +#, c-format +msgid "" +"Select a conference from the list below to send an invite to user %s. Select " +"\"Create New Conference\" if you'd like to create a new conference to invite " +"this user to." +msgstr "" + +msgid "Invite to Conference" +msgstr "" + +msgid "Invite to Conference..." +msgstr "" + +msgid "Send TEST Announcement" +msgstr "" + +msgid "Topic:" +msgstr "" + +msgid "No Sametime Community Server specified" +msgstr "" + +#, c-format +msgid "" +"No host or IP address has been configured for the Meanwhile account %s. " +"Please enter one below to continue logging in." +msgstr "" + +msgid "Meanwhile Connection Setup" +msgstr "" + +msgid "No Sametime Community Server Specified" +msgstr "" + +msgid "Connect" +msgstr "" + +#, c-format +msgid "Unknown (0x%04x)<br>" +msgstr "" + +msgid "Last Known Client" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Sametime ID" +msgstr "" + +msgid "An ambiguous user ID was entered" +msgstr "" + +#, c-format +msgid "" +"The identifier '%s' may possibly refer to any of the following users. Please " +"select the correct user from the list below to add them to your buddy list." +msgstr "" + +msgid "Select User" +msgstr "" + +msgid "Unable to add user: user not found" +msgstr "" + +#, c-format +msgid "" +"The identifier '%s' did not match any users in your Sametime community. This " +"entry has been removed from your buddy list." +msgstr "" + +#, c-format +msgid "" +"Error reading file %s: \n" +"%s\n" +msgstr "" + +msgid "Remotely Stored Buddy List" +msgstr "" + +msgid "Buddy List Storage Mode" +msgstr "" + +msgid "Local Buddy List Only" +msgstr "" + +msgid "Merge List from Server" +msgstr "" + +msgid "Merge and Save List to Server" +msgstr "" + +msgid "Synchronize List with Server" +msgstr "" + +#, c-format +msgid "Import Sametime List for Account %s" +msgstr "" + +#, c-format +msgid "Export Sametime List for Account %s" +msgstr "" + +msgid "Unable to add group: group exists" +msgstr "" + +#, c-format +msgid "A group named '%s' already exists in your buddy list." +msgstr "" + +msgid "Unable to add group" +msgstr "" + +msgid "Possible Matches" +msgstr "" + +msgid "Notes Address Book group results" +msgstr "" + +#, c-format +msgid "" +"The identifier '%s' may possibly refer to any of the following Notes Address " +"Book groups. Please select the correct group from the list below to add it " +"to your buddy list." +msgstr "" + +msgid "Select Notes Address Book" +msgstr "" + +msgid "Unable to add group: group not found" +msgstr "" + +#, c-format +msgid "" +"The identifier '%s' did not match any Notes Address Book groups in your " +"Sametime community." +msgstr "" + +msgid "Notes Address Book Group" +msgstr "" + +msgid "" +"Enter the name of a Notes Address Book group in the field below to add the " +"group and its members to your buddy list." +msgstr "" + +#, c-format +msgid "Search results for '%s'" +msgstr "" + +#, c-format +msgid "" +"The identifier '%s' may possibly refer to any of the following users. You " +"may add these users to your buddy list or send them messages with the action " +"buttons below." +msgstr "" + +msgid "Search Results" +msgstr "" + +msgid "No matches" +msgstr "" + +#, c-format +msgid "The identifier '%s' did not match any users in your Sametime community." +msgstr "" + +msgid "No Matches" +msgstr "" + +msgid "Search for a user" +msgstr "" + +msgid "" +"Enter a name or partial ID in the field below to search for matching users " +"in your Sametime community." +msgstr "" + +msgid "User Search" +msgstr "" + +msgid "Import Sametime List..." +msgstr "" + +msgid "Export Sametime List..." +msgstr "" + +msgid "Add Notes Address Book Group..." +msgstr "" + +msgid "User Search..." +msgstr "" + +msgid "Force login (ignore server redirects)" +msgstr "" + +#. pretend to be Sametime Connect +msgid "Hide client identity" +msgstr "" + +#, c-format +msgid "User %s is not present in the network" +msgstr "" + +msgid "Key Agreement" +msgstr "" + +msgid "Cannot perform the key agreement" +msgstr "" + +msgid "Error occurred during key agreement" +msgstr "" + +msgid "Key Agreement failed" +msgstr "" + +msgid "Timeout during key agreement" +msgstr "" + +msgid "Key agreement was aborted" +msgstr "" + +msgid "Key agreement is already started" +msgstr "" + +msgid "Key agreement cannot be started with yourself" +msgstr "" + +msgid "The remote user is not present in the network any more" +msgstr "" + +#, c-format +msgid "" +"Key agreement request received from %s. Would you like to perform the key " +"agreement?" +msgstr "" + +#, c-format +msgid "" +"The remote user is waiting key agreement on:\n" +"Remote host: %s\n" +"Remote port: %d" +msgstr "" + +msgid "Key Agreement Request" +msgstr "" + +msgid "IM With Password" +msgstr "" + +msgid "Cannot set IM key" +msgstr "" + +msgid "Set IM Password" +msgstr "" + +msgid "Get Public Key" +msgstr "" + +msgid "Cannot fetch the public key" +msgstr "" + +msgid "Show Public Key" +msgstr "" + +msgid "Could not load public key" +msgstr "" + +msgid "User Information" +msgstr "" + +msgid "Cannot get user information" +msgstr "" + +#, c-format +msgid "The %s buddy is not trusted" +msgstr "" + +msgid "" +"You cannot receive buddy notifications until you import his/her public key. " +"You can use the Get Public Key command to get the public key." +msgstr "" + +#. Open file selector to select the public key. +msgid "Open..." +msgstr "" + +#, c-format +msgid "The %s buddy is not present in the network" +msgstr "" + +msgid "" +"To add the buddy you must import his/her public key. Press Import to import " +"a public key." +msgstr "" + +msgid "_Import..." +msgstr "" + +msgid "Select correct user" +msgstr "" + +msgid "" +"More than one user was found with the same public key. Select the correct " +"user from the list to add to the buddy list." +msgstr "" + +msgid "" +"More than one user was found with the same name. Select the correct user " +"from the list to add to the buddy list." +msgstr "" + +msgid "Detached" +msgstr "" + +msgid "Indisposed" +msgstr "" + +msgid "Wake Me Up" +msgstr "" + +msgid "Hyper Active" +msgstr "" + +msgid "Robot" +msgstr "" + +msgid "Happy" +msgstr "" + +msgid "Sad" +msgstr "" + +msgid "Angry" +msgstr "" + +msgid "Jealous" +msgstr "" + +msgid "Ashamed" +msgstr "" + +msgid "Invincible" +msgstr "" + +msgid "In Love" +msgstr "" + +msgid "Sleepy" +msgstr "" + +msgid "Bored" +msgstr "" + +msgid "Excited" +msgstr "" + +msgid "Anxious" +msgstr "" + +msgid "User Modes" +msgstr "" + +msgid "Preferred Contact" +msgstr "" + +msgid "Preferred Language" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "Timezone" +msgstr "" + +msgid "Geolocation" +msgstr "" + +msgid "Reset IM Key" +msgstr "" + +msgid "IM with Key Exchange" +msgstr "" + +msgid "IM with Password" +msgstr "" + +msgid "Get Public Key..." +msgstr "" + +msgid "Kill User" +msgstr "" + +msgid "Draw On Whiteboard" +msgstr "" + +msgid "_Passphrase:" +msgstr "" + +#, c-format +msgid "Channel %s does not exist in the network" +msgstr "" + +msgid "Channel Information" +msgstr "" + +msgid "Cannot get channel information" +msgstr "" + +#, c-format +msgid "<b>Channel Name:</b> %s" +msgstr "" + +#, c-format +msgid "<br><b>User Count:</b> %d" +msgstr "" + +#, c-format +msgid "<br><b>Channel Founder:</b> %s" +msgstr "" + +#, c-format +msgid "<br><b>Channel Cipher:</b> %s" +msgstr "" + +#. Definition of HMAC: http://en.wikipedia.org/wiki/HMAC +#, c-format +msgid "<br><b>Channel HMAC:</b> %s" +msgstr "" + +#, c-format +msgid "<br><b>Channel Topic:</b><br>%s" +msgstr "" + +#, c-format +msgid "<br><b>Channel Modes:</b> " +msgstr "" + +#, c-format +msgid "<br><b>Founder Key Fingerprint:</b><br>%s" +msgstr "" + +#, c-format +msgid "<br><b>Founder Key Babbleprint:</b><br>%s" +msgstr "" + +msgid "Add Channel Public Key" +msgstr "" + +#. Add new public key +msgid "Open Public Key..." +msgstr "" + +msgid "Channel Passphrase" +msgstr "" + +msgid "Channel Public Keys List" +msgstr "" + +#, c-format +msgid "" +"Channel authentication is used to secure the channel from unauthorized " +"access. The authentication may be based on passphrase and digital " +"signatures. If passphrase is set, it is required to be able to join. If " +"channel public keys are set then only users whose public keys are listed are " +"able to join." +msgstr "" + +msgid "Channel Authentication" +msgstr "" + +msgid "Add / Remove" +msgstr "" + +msgid "Group Name" +msgstr "" + +msgid "Passphrase" +msgstr "" + +#, c-format +msgid "Please enter the %s channel private group name and passphrase." +msgstr "" + +msgid "Add Channel Private Group" +msgstr "" + +msgid "User Limit" +msgstr "" + +msgid "Set user limit on channel. Set to zero to reset user limit." +msgstr "" + +msgid "Invite List" +msgstr "" + +msgid "Ban List" +msgstr "" + +msgid "Add Private Group" +msgstr "" + +msgid "Reset Permanent" +msgstr "" + +msgid "Set Permanent" +msgstr "" + +msgid "Set User Limit" +msgstr "" + +msgid "Reset Topic Restriction" +msgstr "" + +msgid "Set Topic Restriction" +msgstr "" + +msgid "Reset Private Channel" +msgstr "" + +msgid "Set Private Channel" +msgstr "" + +msgid "Reset Secret Channel" +msgstr "" + +msgid "Set Secret Channel" +msgstr "" + +#, c-format +msgid "" +"You have to join the %s channel before you are able to join the private group" +msgstr "" + +msgid "Join Private Group" +msgstr "" + +msgid "Cannot join private group" +msgstr "" + +msgid "Call Command" +msgstr "" + +msgid "Cannot call command" +msgstr "" + +msgid "Unknown command" +msgstr "" + +msgid "Secure File Transfer" +msgstr "" + +msgid "Error during file transfer" +msgstr "" + +msgid "Remote disconnected" +msgstr "" + +msgid "Permission denied" +msgstr "" + +msgid "Key agreement failed" +msgstr "" + +msgid "Connection timed out" +msgstr "" + +msgid "Creating connection failed" +msgstr "" + +msgid "File transfer session does not exist" +msgstr "" + +msgid "No file transfer session active" +msgstr "" + +msgid "File transfer already started" +msgstr "" + +msgid "Could not perform key agreement for file transfer" +msgstr "" + +msgid "Could not start the file transfer" +msgstr "" + +msgid "Cannot send file" +msgstr "" + +msgid "Error occurred" +msgstr "" + +#, c-format +msgid "%s has changed the topic of <I>%s</I> to: %s" +msgstr "" + +#, c-format +msgid "<I>%s</I> set channel <I>%s</I> modes to: %s" +msgstr "" + +#, c-format +msgid "<I>%s</I> removed all channel <I>%s</I> modes" +msgstr "" + +#, c-format +msgid "<I>%s</I> set <I>%s's</I> modes to: %s" +msgstr "" + +#, c-format +msgid "<I>%s</I> removed all <I>%s's</I> modes" +msgstr "" + +#, c-format +msgid "You have been kicked off <I>%s</I> by <I>%s</I> (%s)" +msgstr "" + +#, c-format +msgid "You have been killed by %s (%s)" +msgstr "" + +#, c-format +msgid "Killed by %s (%s)" +msgstr "" + +msgid "Server signoff" +msgstr "" + +msgid "Personal Information" +msgstr "" + +msgid "Birth Day" +msgstr "" + +msgid "Job Role" +msgstr "" + +msgid "Organization" +msgstr "" + +msgid "Unit" +msgstr "" + +msgid "Join Chat" +msgstr "" + +#, c-format +msgid "You are channel founder on <I>%s</I>" +msgstr "" + +#, c-format +msgid "Channel founder on <I>%s</I> is <I>%s</I>" +msgstr "" + +msgid "Real Name" +msgstr "" + +msgid "Status Text" +msgstr "" + +msgid "Public Key Fingerprint" +msgstr "" + +msgid "Public Key Babbleprint" +msgstr "" + +msgid "_More..." +msgstr "" + +msgid "Detach From Server" +msgstr "" + +msgid "Cannot detach" +msgstr "" + +msgid "Cannot set topic" +msgstr "" + +msgid "Failed to change nickname" +msgstr "" + +msgid "Roomlist" +msgstr "" + +msgid "Cannot get room list" +msgstr "" + +msgid "Network is empty" +msgstr "" + +msgid "No public key was received" +msgstr "" + +msgid "Server Information" +msgstr "" + +msgid "Cannot get server information" +msgstr "" + +msgid "Server Statistics" +msgstr "" + +msgid "Cannot get server statistics" +msgstr "" + +#, c-format +msgid "" +"Local server start time: %s\n" +"Local server uptime: %s\n" +"Local server clients: %d\n" +"Local server channels: %d\n" +"Local server operators: %d\n" +"Local router operators: %d\n" +"Local cell clients: %d\n" +"Local cell channels: %d\n" +"Local cell servers: %d\n" +"Total clients: %d\n" +"Total channels: %d\n" +"Total servers: %d\n" +"Total routers: %d\n" +"Total server operators: %d\n" +"Total router operators: %d\n" +msgstr "" + +msgid "Network Statistics" +msgstr "" + +msgid "Ping failed" +msgstr "" + +msgid "Ping reply received from server" +msgstr "" + +msgid "Could not kill user" +msgstr "" + +msgid "WATCH" +msgstr "" + +msgid "Cannot watch user" +msgstr "" + +msgid "Resuming session" +msgstr "" + +msgid "Authenticating connection" +msgstr "" + +msgid "Verifying server public key" +msgstr "" + +msgid "Passphrase required" +msgstr "" + +#, c-format +msgid "" +"Received %s's public key. Your local copy does not match this key. Would you " +"still like to accept this public key?" +msgstr "" + +#, c-format +msgid "Received %s's public key. Would you like to accept this public key?" +msgstr "" + +#, c-format +msgid "" +"Fingerprint and babbleprint for the %s key are:\n" +"\n" +"%s\n" +"%s\n" +msgstr "" + +msgid "Verify Public Key" +msgstr "" + +msgid "_View..." +msgstr "" + +msgid "Unsupported public key type" +msgstr "" + +msgid "Disconnected by server" +msgstr "" + +msgid "Error during connecting to SILC Server" +msgstr "" + +msgid "Key Exchange failed" +msgstr "" + +msgid "" +"Resuming detached session failed. Press Reconnect to create new connection." +msgstr "" + +msgid "Connection failed" +msgstr "" + +msgid "Performing key exchange" +msgstr "" + +msgid "Unable to create connection" +msgstr "" + +msgid "Could not load SILC key pair" +msgstr "" + +#. Progress +msgid "Connecting to SILC Server" +msgstr "" + +msgid "Out of memory" +msgstr "" + +msgid "Cannot initialize SILC protocol" +msgstr "" + +msgid "Error loading SILC key pair" +msgstr "" + +#, c-format +msgid "Download %s: %s" +msgstr "" + +msgid "Your Current Mood" +msgstr "" + +#, c-format +msgid "Normal" +msgstr "" + +msgid "In love" +msgstr "" + +msgid "" +"\n" +"Your Preferred Contact Methods" +msgstr "" + +msgid "SMS" +msgstr "" + +msgid "MMS" +msgstr "" + +msgid "Video conferencing" +msgstr "" + +msgid "Your Current Status" +msgstr "" + +msgid "Online Services" +msgstr "" + +msgid "Let others see what services you are using" +msgstr "" + +msgid "Let others see what computer you are using" +msgstr "" + +msgid "Your VCard File" +msgstr "" + +msgid "Timezone (UTC)" +msgstr "" + +msgid "User Online Status Attributes" +msgstr "" + +msgid "" +"You can let other users see your online status information and your personal " +"information. Please fill the information you would like other users to see " +"about yourself." +msgstr "" + +msgid "Message of the Day" +msgstr "" + +msgid "No Message of the Day available" +msgstr "" + +msgid "There is no Message of the Day associated with this connection" +msgstr "" + +msgid "Create New SILC Key Pair" +msgstr "" + +msgid "Passphrases do not match" +msgstr "" + +msgid "Key Pair Generation failed" +msgstr "" + +msgid "Key length" +msgstr "" + +msgid "Public key file" +msgstr "" + +msgid "Private key file" +msgstr "" + +msgid "Passphrase (retype)" +msgstr "" + +msgid "Generate Key Pair" +msgstr "" + +msgid "Online Status" +msgstr "" + +msgid "View Message of the Day" +msgstr "" + +msgid "Create SILC Key Pair..." +msgstr "" + +#, c-format +msgid "User <I>%s</I> is not present in the network" +msgstr "" + +msgid "Topic too long" +msgstr "" + +msgid "You must specify a nick" +msgstr "" + +#, c-format +msgid "channel %s not found" +msgstr "" + +#, c-format +msgid "channel modes for %s: %s" +msgstr "" + +#, c-format +msgid "no channel modes are set on %s" +msgstr "" + +#, c-format +msgid "Failed to set cmodes for %s" +msgstr "" + +#, c-format +msgid "Unknown command: %s, (may be a client bug)" +msgstr "" + +msgid "part [channel]: Leave the chat" +msgstr "" + +msgid "leave [channel]: Leave the chat" +msgstr "" + +msgid "topic [<new topic>]: View or change the topic" +msgstr "" + +msgid "join <channel> [<password>]: Join a chat on this network" +msgstr "" + +msgid "list: List channels on this network" +msgstr "" + +msgid "whois <nick>: View nick's information" +msgstr "" + +msgid "msg <nick> <message>: Send a private message to a user" +msgstr "" + +msgid "query <nick> [<message>]: Send a private message to a user" +msgstr "" + +msgid "motd: View the server's Message Of The Day" +msgstr "" + +msgid "detach: Detach this session" +msgstr "" + +msgid "quit [message]: Disconnect from the server, with an optional message" +msgstr "" + +msgid "call <command>: Call any silc client command" +msgstr "" + +msgid "kill <nick> [-pubkey|<reason>]: Kill nick" +msgstr "" + +msgid "nick <newnick>: Change your nickname" +msgstr "" + +msgid "whowas <nick>: View nick's information" +msgstr "" + +msgid "" +"cmode <channel> [+|-<modes>] [arguments]: Change or display " +"channel modes" +msgstr "" + +msgid "" +"cumode <channel> +|-<modes> <nick>: Change nick's modes " +"on channel" +msgstr "" + +msgid "umode <usermodes>: Set your modes in the network" +msgstr "" + +msgid "oper <nick> [-pubkey]: Get server operator privileges" +msgstr "" + +msgid "" +"invite <channel> [-|+]<nick>: invite nick or add/remove from " +"channel invite list" +msgstr "" + +msgid "kick <channel> <nick> [comment]: Kick client from channel" +msgstr "" + +msgid "info [server]: View server administrative details" +msgstr "" + +msgid "ban [<channel> +|-<nick>]: Ban client from channel" +msgstr "" + +msgid "getkey <nick|server>: Retrieve client's or server's public key" +msgstr "" + +msgid "stats: View server and network statistics" +msgstr "" + +msgid "ping: Send PING to the connected server" +msgstr "" + +msgid "users <channel>: List users in channel" +msgstr "" + +msgid "" +"names [-count|-ops|-halfops|-voices|-normal] <channel(s)>: List " +"specific users in channel(s)" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +msgid "SILC Protocol Plugin" +msgstr "" + +#. * description +msgid "Secure Internet Live Conferencing (SILC) Protocol" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Public Key file" +msgstr "" + +msgid "Private Key file" +msgstr "" + +msgid "Cipher" +msgstr "" + +msgid "HMAC" +msgstr "" + +msgid "Use Perfect Forward Secrecy" +msgstr "" + +msgid "Public key authentication" +msgstr "" + +msgid "Block IMs without Key Exchange" +msgstr "" + +msgid "Block messages to whiteboard" +msgstr "" + +msgid "Automatically open whiteboard" +msgstr "" + +msgid "Digitally sign and verify all messages" +msgstr "" + +msgid "Creating SILC key pair..." +msgstr "" + +msgid "Cannot create SILC key pair\n" +msgstr "" + +#. Hint for translators: Please check the tabulator width here and in +#. the next strings (short strings: 2 tabs, longer strings 1 tab, +#. sum: 3 tabs or 24 characters) +#, c-format +msgid "Real Name: \t%s\n" +msgstr "" + +#, c-format +msgid "User Name: \t%s\n" +msgstr "" + +#, c-format +msgid "Email: \t\t%s\n" +msgstr "" + +#, c-format +msgid "Host Name: \t%s\n" +msgstr "" + +#, c-format +msgid "Organization: \t%s\n" +msgstr "" + +#, c-format +msgid "Country: \t%s\n" +msgstr "" + +#, c-format +msgid "Algorithm: \t%s\n" +msgstr "" + +#, c-format +msgid "Key Length: \t%d bits\n" +msgstr "" + +#, c-format +msgid "Version: \t%s\n" +msgstr "" + +#, c-format +msgid "" +"Public Key Fingerprint:\n" +"%s\n" +"\n" +msgstr "" + +#, c-format +msgid "" +"Public Key Babbleprint:\n" +"%s" +msgstr "" + +msgid "Public Key Information" +msgstr "" + +msgid "Paging" +msgstr "" + +msgid "Video Conferencing" +msgstr "" + +msgid "Computer" +msgstr "" + +msgid "PDA" +msgstr "" + +msgid "Terminal" +msgstr "" + +#, c-format +msgid "%s sent message to whiteboard. Would you like to open the whiteboard?" +msgstr "" + +#, c-format +msgid "" +"%s sent message to whiteboard on %s channel. Would you like to open the " +"whiteboard?" +msgstr "" + +msgid "Whiteboard" +msgstr "" + +msgid "No server statistics available" +msgstr "" + +#, c-format +msgid "Failure: Version mismatch, upgrade your client" +msgstr "" + +#, c-format +msgid "Failure: Remote does not trust/support your public key" +msgstr "" + +#, c-format +msgid "Failure: Remote does not support proposed KE group" +msgstr "" + +#, c-format +msgid "Failure: Remote does not support proposed cipher" +msgstr "" + +#, c-format +msgid "Failure: Remote does not support proposed PKCS" +msgstr "" + +#, c-format +msgid "Failure: Remote does not support proposed hash function" +msgstr "" + +#, c-format +msgid "Failure: Remote does not support proposed HMAC" +msgstr "" + +#, c-format +msgid "Failure: Incorrect signature" +msgstr "" + +#, c-format +msgid "Failure: Invalid cookie" +msgstr "" + +#, c-format +msgid "Failure: Authentication failed" +msgstr "" + +msgid "Cannot initialize SILC Client connection" +msgstr "" + +msgid "John Noname" +msgstr "" + +#, c-format +msgid "Could not load SILC key pair: %s" +msgstr "" + +msgid "Could not write" +msgstr "" + +msgid "Could not connect" +msgstr "" + +msgid "Unknown server response." +msgstr "" + +msgid "Could not create listen socket" +msgstr "" + +msgid "Could not resolve hostname" +msgstr "" + +msgid "SIP usernames may not contain whitespaces or @ symbols" +msgstr "" + +msgid "SIP connect server not specified" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +msgid "SIP/SIMPLE Protocol Plugin" +msgstr "" + +#. * summary +msgid "The SIP/SIMPLE Protocol Plugin" +msgstr "" + +msgid "Publish status (note: everyone may watch you)" +msgstr "" + +msgid "Use UDP" +msgstr "" + +msgid "Use proxy" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Auth User" +msgstr "" + +msgid "Auth Domain" +msgstr "" + +#, c-format +msgid "%s has sent you a webcam invite, which is not yet supported." +msgstr "" + +msgid "Your SMS was not delivered" +msgstr "" + +msgid "Your Yahoo! message did not get sent." +msgstr "" + +#, c-format +msgid "Yahoo! system message for %s:" +msgstr "" + +#, c-format +msgid "" +"%s has (retroactively) denied your request to add them to your list for the " +"following reason: %s." +msgstr "" + +#, c-format +msgid "%s has (retroactively) denied your request to add them to your list." +msgstr "" + +msgid "Add buddy rejected" +msgstr "" + +#. Some error in the received stream +msgid "Received invalid data" +msgstr "" + +#. Password incorrect +msgid "Incorrect Password" +msgstr "" + +#. security lock from too many failed login attempts +msgid "Account locked: Too many failed login attempts" +msgstr "" + +#. the username does not exist +msgid "Username does not exist" +msgstr "" + +#. indicates a lock of some description +msgid "Account locked: See the debug log" +msgstr "" + +#. username or password missing +msgid "Username or password missing" +msgstr "" + +#, c-format +msgid "" +"The Yahoo server has requested the use of an unrecognized authentication " +"method. You will probably not be able to successfully sign on to Yahoo. " +"Check %s for updates." +msgstr "" + +msgid "Failed Yahoo! Authentication" +msgstr "" + +#, c-format +msgid "" +"You have tried to ignore %s, but the user is on your buddy list. Clicking " +"\"Yes\" will remove and ignore the buddy." +msgstr "" + +msgid "Ignore buddy?" +msgstr "" + +msgid "Your account is locked, please log in to the Yahoo! website." +msgstr "" + +#, c-format +msgid "Unknown error number %d. Logging into the Yahoo! website may fix this." +msgstr "" + +#, c-format +msgid "Could not add buddy %s to group %s to the server list on account %s." +msgstr "" + +msgid "Could not add buddy to server list" +msgstr "" + +#, c-format +msgid "[ Audible %s/%s/%s.swf ] %s" +msgstr "" + +msgid "Received unexpected HTTP response from server." +msgstr "" + +msgid "Connection problem" +msgstr "" + +#, c-format +msgid "" +"Lost connection with %s:\n" +"%s" +msgstr "" + +#, c-format +msgid "" +"Could not establish a connection with %s:\n" +"%s" +msgstr "" + +msgid "Not at Home" +msgstr "" + +msgid "Not at Desk" +msgstr "" + +msgid "Not in Office" +msgstr "" + +msgid "On Vacation" +msgstr "" + +msgid "Stepped Out" +msgstr "" + +msgid "Not on server list" +msgstr "" + +msgid "Appear Online" +msgstr "" + +msgid "Appear Permanently Offline" +msgstr "" + +msgid "Presence" +msgstr "" + +msgid "Appear Offline" +msgstr "" + +msgid "Don't Appear Permanently Offline" +msgstr "" + +msgid "Join in Chat" +msgstr "" + +msgid "Initiate Conference" +msgstr "" + +msgid "Presence Settings" +msgstr "" + +msgid "Start Doodling" +msgstr "" + +msgid "Activate which ID?" +msgstr "" + +msgid "Join whom in chat?" +msgstr "" + +msgid "Activate ID..." +msgstr "" + +msgid "Join User in Chat..." +msgstr "" + +msgid "Open Inbox" +msgstr "" + +msgid "join <room>: Join a chat room on the Yahoo network" +msgstr "" + +msgid "list: List rooms on the Yahoo network" +msgstr "" + +msgid "doodle: Request user to start a Doodle session" +msgstr "" + +msgid "Yahoo ID..." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "Yahoo Protocol Plugin" +msgstr "" + +msgid "Yahoo Japan" +msgstr "" + +msgid "Pager server" +msgstr "" + +msgid "Japan Pager server" +msgstr "" + +msgid "Pager port" +msgstr "" + +msgid "File transfer server" +msgstr "" + +msgid "Japan file transfer server" +msgstr "" + +msgid "File transfer port" +msgstr "" + +msgid "Chat room locale" +msgstr "" + +msgid "Ignore conference and chatroom invitations" +msgstr "" + +msgid "Chat room list URL" +msgstr "" + +msgid "Yahoo Chat server" +msgstr "" + +msgid "Yahoo Chat port" +msgstr "" + +#. Write a local message to this conversation showing that a request for a +#. * Doodle session has been made +#. +msgid "Sent Doodle request." +msgstr "" + +msgid "Unable to establish file descriptor." +msgstr "" + +#, c-format +msgid "%s is trying to send you a group of %d files.\n" +msgstr "" + +msgid "Yahoo! Japan Profile" +msgstr "" + +msgid "Yahoo! Profile" +msgstr "" + +msgid "" +"Sorry, profiles marked as containing adult content are not supported at this " +"time." +msgstr "" + +msgid "" +"If you wish to view this profile, you will need to visit this link in your " +"web browser:" +msgstr "" + +msgid "Yahoo! ID" +msgstr "" + +msgid "Hobbies" +msgstr "" + +msgid "Latest News" +msgstr "" + +msgid "Home Page" +msgstr "" + +msgid "Cool Link 1" +msgstr "" + +msgid "Cool Link 2" +msgstr "" + +msgid "Cool Link 3" +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "" +"This profile is in a language or format that is not supported at this time." +msgstr "" + +msgid "" +"Could not retrieve the user's profile. This most likely is a temporary " +"server-side problem. Please try again later." +msgstr "" + +msgid "" +"Could not retrieve the user's profile. This most likely means that the user " +"does not exist; however, Yahoo! sometimes does fail to find a user's " +"profile. If you know that the user exists, please try again later." +msgstr "" + +msgid "The user's profile is empty." +msgstr "" + +#, c-format +msgid "%s declined your conference invitation to room \"%s\" because \"%s\"." +msgstr "" + +msgid "Invitation Rejected" +msgstr "" + +msgid "Failed to join chat" +msgstr "" + +#. -6 +msgid "Unknown room" +msgstr "" + +#. -15 +msgid "Maybe the room is full" +msgstr "" + +#. -35 +msgid "Not available" +msgstr "" + +msgid "" +"Unknown error. You may need to logout and wait five minutes before being " +"able to rejoin a chatroom" +msgstr "" + +#, c-format +msgid "You are now chatting in %s." +msgstr "" + +msgid "Failed to join buddy in chat" +msgstr "" + +msgid "Maybe they're not in a chat?" +msgstr "" + +msgid "Fetching the room list failed." +msgstr "" + +msgid "Voices" +msgstr "" + +msgid "Webcams" +msgstr "" + +msgid "Unable to fetch room list." +msgstr "" + +msgid "User Rooms" +msgstr "" + +msgid "Connection problem with the YCHT server." +msgstr "" + +#, c-format +msgid "" +"Lost connection with server\n" +"%s" +msgstr "" + +msgid "" +"(There was an error converting this message.\t Check the 'Encoding' option " +"in the Account Editor)" +msgstr "" + +#, c-format +msgid "Unable to send to chat %s,%s,%s" +msgstr "" + +msgid "Hidden or not logged-in" +msgstr "" + +#, c-format +msgid "<br>At %s since %s" +msgstr "" + +msgid "Anyone" +msgstr "" + +msgid "_Class:" +msgstr "" + +msgid "_Instance:" +msgstr "" + +msgid "_Recipient:" +msgstr "" + +#, c-format +msgid "Attempt to subscribe to %s,%s,%s failed" +msgstr "" + +msgid "zlocate <nick>: Locate user" +msgstr "" + +msgid "zl <nick>: Locate user" +msgstr "" + +msgid "instance <instance>: Set the instance to be used on this class" +msgstr "" + +msgid "inst <instance>: Set the instance to be used on this class" +msgstr "" + +msgid "topic <instance>: Set the instance to be used on this class" +msgstr "" + +msgid "sub <class> <instance> <recipient>: Join a new chat" +msgstr "" + +msgid "" +"zi <instance>: Send a message to <message,<i>instance</i>,*>" +msgstr "" + +msgid "" +"zci <class> <instance>: Send a message to <<i>class</i>," +"<i>instance</i>,*>" +msgstr "" + +msgid "" +"zcir <class> <instance> <recipient>: Send a message to <" +"<i>class</i>,<i>instance</i>,<i>recipient</i>>" +msgstr "" + +msgid "" +"zir <instance> <recipient>: Send a message to <MESSAGE," +"<i>instance</i>,<i>recipient</i>>" +msgstr "" + +msgid "zc <class>: Send a message to <<i>class</i>,PERSONAL,*>" +msgstr "" + +msgid "Resubscribe" +msgstr "" + +msgid "Retrieve subscriptions from server" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "Zephyr Protocol Plugin" +msgstr "" + +msgid "Use tzc" +msgstr "" + +msgid "tzc command" +msgstr "" + +msgid "Export to .anyone" +msgstr "" + +msgid "Export to .zephyr.subs" +msgstr "" + +msgid "Import from .anyone" +msgstr "" + +msgid "Import from .zephyr.subs" +msgstr "" + +msgid "Realm" +msgstr "" + +msgid "Exposure" +msgstr "" + +#, c-format +msgid "" +"Unable to create socket:\n" +"%s" +msgstr "" + +#, c-format +msgid "Unable to parse response from HTTP proxy: %s\n" +msgstr "" + +#, c-format +msgid "HTTP proxy connection error %d" +msgstr "" + +#, c-format +msgid "Access denied: HTTP proxy server forbids port %d tunneling." +msgstr "" + +#, c-format +msgid "Error resolving %s" +msgstr "" + +msgid "Could not resolve host name" +msgstr "" + +#, c-format +msgid "Requesting %s's attention..." +msgstr "" + +#, c-format +msgid "%s has requested your attention!" +msgstr "" + +#. * +#. * A wrapper for purple_request_action() that uses @c Yes and @c No buttons. +#. +msgid "_Yes" +msgstr "" + +msgid "_No" +msgstr "" + +#. * +#. * A wrapper for purple_request_action() that uses Accept and Cancel buttons. +#. +msgid "_Accept" +msgstr "" + +#. * +#. * The default message to use when the user becomes auto-away. +#. +msgid "I'm not here right now" +msgstr "" + +msgid "saved statuses" +msgstr "" + +#, c-format +msgid "%s is now known as %s.\n" +msgstr "" + +#, c-format +msgid "" +"%s has invited %s to the chat room %s:\n" +"%s" +msgstr "" + +#, c-format +msgid "%s has invited %s to the chat room %s\n" +msgstr "" + +msgid "Accept chat invitation?" +msgstr "" + +#. Shortcut +msgid "Shortcut" +msgstr "" + +msgid "The text-shortcut for the smiley" +msgstr "" + +#. Stored Image +msgid "Stored Image" +msgstr "" + +msgid "Stored Image. (that'll have to do for now)" +msgstr "" + +msgid "SSL Connection Failed" +msgstr "" + +msgid "SSL Handshake Failed" +msgstr "" + +msgid "SSL peer presented an invalid certificate" +msgstr "" + +msgid "Unknown SSL error" +msgstr "" + +msgid "Unset" +msgstr "" + +msgid "Do not disturb" +msgstr "" + +msgid "Extended away" +msgstr "" + +msgid "Listening to music" +msgstr "" + +#, c-format +msgid "%s (%s) changed status from %s to %s" +msgstr "" + +#, c-format +msgid "%s (%s) is now %s" +msgstr "" + +#, c-format +msgid "%s (%s) is no longer %s" +msgstr "" + +#, c-format +msgid "%s became idle" +msgstr "" + +#, c-format +msgid "%s became unidle" +msgstr "" + +#, c-format +msgid "+++ %s became idle" +msgstr "" + +#, c-format +msgid "+++ %s became unidle" +msgstr "" + +#. +#. * This string determines how some dates are displayed. The default +#. * string "%x %X" shows the date then the time. Translators can +#. * change this to "%X %x" if they want the time to be shown first, +#. * followed by the date. +#. +#, c-format +msgid "%x %X" +msgstr "" + +msgid "Calculating..." +msgstr "" + +msgid "Unknown." +msgstr "" + +#, c-format +msgid "%d second" +msgid_plural "%d seconds" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "%s, %d hour" +msgid_plural "%s, %d hours" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "%s, %d minute" +msgid_plural "%s, %d minutes" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "Could not open %s: Redirected too many times" +msgstr "" + +#, c-format +msgid "Unable to connect to %s" +msgstr "" + +#, c-format +msgid "Error reading from %s: response too long (%d bytes limit)" +msgstr "" + +#, c-format +msgid "" +"Unable to allocate enough memory to hold the contents from %s. The web " +"server may be trying something malicious." +msgstr "" + +#, c-format +msgid "Error reading from %s: %s" +msgstr "" + +#, c-format +msgid "Error writing to %s: %s" +msgstr "" + +#, c-format +msgid "Unable to connect to %s: %s" +msgstr "" + +#, c-format +msgid "" +"Unable to connect to %s: Server requires TLS/SSL, but no TLS/SSL support was " +"found." +msgstr "" + +#, c-format +msgid " - %s" +msgstr "" + +#, c-format +msgid " (%s)" +msgstr "" + +#. 10053 +#, c-format +msgid "Connection interrupted by other software on your computer." +msgstr "" + +#. 10054 +#, c-format +msgid "Remote host closed connection." +msgstr "" + +#. 10060 +#, c-format +msgid "Connection timed out." +msgstr "" + +#. 10061 +#, c-format +msgid "Connection refused." +msgstr "" + +#. 10048 +#, c-format +msgid "Address already in use." +msgstr "" + +#, c-format +msgid "Error Reading %s" +msgstr "" + +#, c-format +msgid "" +"An error was encountered reading your %s. The file has not been loaded, and " +"the old file has been renamed to %s~." +msgstr "" + +msgid "Internet Messenger" +msgstr "" + +msgid "Pidgin Internet Messenger" +msgstr "" + +msgid "Send instant messages over multiple protocols" +msgstr "" + +msgid "Orientation" +msgstr "" + +msgid "The orientation of the tray." +msgstr "" + +#. Build the login options frame. +msgid "Login Options" +msgstr "" + +msgid "Pro_tocol:" +msgstr "" + +msgid "_Username:" +msgstr "" + +msgid "Remember pass_word" +msgstr "" + +#. Build the user options frame. +msgid "User Options" +msgstr "" + +msgid "_Local alias:" +msgstr "" + +msgid "New _mail notifications" +msgstr "" + +#. Buddy icon +msgid "Use this buddy _icon for this account:" +msgstr "" + +msgid "_Advanced" +msgstr "" + +msgid "Use GNOME Proxy Settings" +msgstr "" + +msgid "Use Global Proxy Settings" +msgstr "" + +msgid "No Proxy" +msgstr "" + +msgid "HTTP" +msgstr "" + +msgid "SOCKS 4" +msgstr "" + +msgid "SOCKS 5" +msgstr "" + +msgid "Use Environmental Settings" +msgstr "" + +#. This is an easter egg. +#. It means one of two things, both intended as humourus: +#. A) your network is really slow and you have nothing better to do than +#. look at butterflies. +#. B)You are looking really closely at something that shouldn't matter. +msgid "If you look real closely" +msgstr "" + +#. This is an easter egg. See the comment on the previous line in the source. +msgid "you can see the butterflies mating" +msgstr "" + +msgid "Proxy _type:" +msgstr "" + +msgid "_Host:" +msgstr "" + +msgid "_Port:" +msgstr "" + +msgid "Pa_ssword:" +msgstr "" + +msgid "Unable to save new account" +msgstr "" + +msgid "An account already exists with the specified criteria." +msgstr "" + +msgid "Add Account" +msgstr "" + +msgid "_Basic" +msgstr "" + +msgid "Create _this new account on the server" +msgstr "" + +msgid "_Proxy" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Protocol" +msgstr "" + +#, c-format +msgid "" +"<span size='larger' weight='bold'>Welcome to %s!</span>\n" +"\n" +"You have no IM accounts configured. To start connecting with %s press the " +"<b>Add...</b> button below and configure your first account. If you want %s " +"to connect to multiple IM accounts, press <b>Add...</b> again to configure " +"them all.\n" +"\n" +"You can come back to this window to add, edit, or remove accounts from " +"<b>Accounts->Manage Accounts</b> in the Buddy List window" +msgstr "" + +#, c-format +msgid "You have %d contact named %s. Would you like to merge them?" +msgid_plural "" +"You currently have %d contacts named %s. Would you like to merge them?" +msgstr[0] "" +msgstr[1] "" + +msgid "" +"Merging these contacts will cause them to share a single entry on the buddy " +"list and use a single conversation window. You can separate them again by " +"choosing 'Expand' from the contact's context menu" +msgstr "" + +msgid "Please update the necessary fields." +msgstr "" + +msgid "A_ccount" +msgstr "" + +msgid "" +"Please enter the appropriate information about the chat you would like to " +"join.\n" +msgstr "" + +msgid "Room _List" +msgstr "" + +msgid "_Block" +msgstr "" + +msgid "Un_block" +msgstr "" + +msgid "Move to" +msgstr "" + +msgid "Get _Info" +msgstr "" + +msgid "I_M" +msgstr "" + +msgid "_Audio Call" +msgstr "" + +msgid "Audio/_Video Call" +msgstr "" + +msgid "_Video Call" +msgstr "" + +msgid "_Send File..." +msgstr "" + +msgid "Add Buddy _Pounce..." +msgstr "" + +msgid "View _Log" +msgstr "" + +msgid "Hide when offline" +msgstr "" + +msgid "_Alias..." +msgstr "" + +msgid "_Remove" +msgstr "" + +msgid "Set Custom Icon" +msgstr "" + +msgid "Remove Custom Icon" +msgstr "" + +msgid "Add _Buddy..." +msgstr "" + +msgid "Add C_hat..." +msgstr "" + +msgid "_Delete Group" +msgstr "" + +msgid "_Rename" +msgstr "" + +#. join button +msgid "_Join" +msgstr "" + +msgid "Auto-Join" +msgstr "" + +msgid "Persistent" +msgstr "" + +msgid "_Edit Settings..." +msgstr "" + +msgid "_Collapse" +msgstr "" + +msgid "_Expand" +msgstr "" + +msgid "/Tools/Mute Sounds" +msgstr "" + +msgid "" +"You are not currently signed on with an account that can add that buddy." +msgstr "" + +#. I don't believe this can happen currently, I think +#. * everything that calls this function checks for one of the +#. * above node types first. +msgid "Unknown node type" +msgstr "" + +#. Buddies menu +msgid "/_Buddies" +msgstr "" + +msgid "/Buddies/New Instant _Message..." +msgstr "" + +msgid "/Buddies/Join a _Chat..." +msgstr "" + +msgid "/Buddies/Get User _Info..." +msgstr "" + +msgid "/Buddies/View User _Log..." +msgstr "" + +msgid "/Buddies/Sh_ow" +msgstr "" + +msgid "/Buddies/Show/_Offline Buddies" +msgstr "" + +msgid "/Buddies/Show/_Empty Groups" +msgstr "" + +msgid "/Buddies/Show/Buddy _Details" +msgstr "" + +msgid "/Buddies/Show/Idle _Times" +msgstr "" + +msgid "/Buddies/Show/_Protocol Icons" +msgstr "" + +msgid "/Buddies/_Sort Buddies" +msgstr "" + +msgid "/Buddies/_Add Buddy..." +msgstr "" + +msgid "/Buddies/Add C_hat..." +msgstr "" + +msgid "/Buddies/Add _Group..." +msgstr "" + +msgid "/Buddies/_Quit" +msgstr "" + +#. Accounts menu +msgid "/_Accounts" +msgstr "" + +msgid "/Accounts/Manage Accounts" +msgstr "" + +#. Tools +msgid "/_Tools" +msgstr "" + +msgid "/Tools/Buddy _Pounces" +msgstr "" + +msgid "/Tools/_Certificates" +msgstr "" + +msgid "/Tools/Custom Smile_ys" +msgstr "" + +msgid "/Tools/Plu_gins" +msgstr "" + +msgid "/Tools/Pr_eferences" +msgstr "" + +msgid "/Tools/Pr_ivacy" +msgstr "" + +msgid "/Tools/_File Transfers" +msgstr "" + +msgid "/Tools/R_oom List" +msgstr "" + +msgid "/Tools/System _Log" +msgstr "" + +msgid "/Tools/Mute _Sounds" +msgstr "" + +#. Help +msgid "/_Help" +msgstr "" + +msgid "/Help/Online _Help" +msgstr "" + +msgid "/Help/_Debug Window" +msgstr "" + +msgid "/Help/_About" +msgstr "" + +#, c-format +msgid "<b>Account:</b> %s" +msgstr "" + +#, c-format +msgid "" +"\n" +"<b>Occupants:</b> %d" +msgstr "" + +#, c-format +msgid "" +"\n" +"<b>Topic:</b> %s" +msgstr "" + +msgid "(no topic set)" +msgstr "" + +msgid "Buddy Alias" +msgstr "" + +msgid "Logged In" +msgstr "" + +msgid "Last Seen" +msgstr "" + +msgid "Spooky" +msgstr "" + +msgid "Awesome" +msgstr "" + +msgid "Rockin'" +msgstr "" + +msgid "Total Buddies" +msgstr "" + +#, c-format +msgid "Idle %dd %dh %02dm" +msgstr "" + +#, c-format +msgid "Idle %dh %02dm" +msgstr "" + +#, c-format +msgid "Idle %dm" +msgstr "" + +msgid "/Buddies/New Instant Message..." +msgstr "" + +msgid "/Buddies/Join a Chat..." +msgstr "" + +msgid "/Buddies/Get User Info..." +msgstr "" + +msgid "/Buddies/Add Buddy..." +msgstr "" + +msgid "/Buddies/Add Chat..." +msgstr "" + +msgid "/Buddies/Add Group..." +msgstr "" + +msgid "/Tools/Privacy" +msgstr "" + +msgid "/Tools/Room List" +msgstr "" + +#, c-format +msgid "%d unread message from %s\n" +msgid_plural "%d unread messages from %s\n" +msgstr[0] "" +msgstr[1] "" + +msgid "Manually" +msgstr "" + +msgid "By status" +msgstr "" + +msgid "By recent log activity" +msgstr "" + +#, c-format +msgid "%s disconnected" +msgstr "" + +#, c-format +msgid "%s disabled" +msgstr "" + +msgid "Reconnect" +msgstr "" + +msgid "Re-enable" +msgstr "" + +msgid "SSL FAQs" +msgstr "" + +msgid "Welcome back!" +msgstr "" + +#, c-format +msgid "%d account was disabled because you signed on from another location:" +msgid_plural "" +"%d accounts were disabled because you signed on from another location:" +msgstr[0] "" +msgstr[1] "" + +msgid "<b>Username:</b>" +msgstr "" + +msgid "<b>Password:</b>" +msgstr "" + +msgid "_Login" +msgstr "" + +msgid "/Accounts" +msgstr "" + +#. Translators: Please maintain the use of -> and <- to refer to menu heirarchy +#, c-format +msgid "" +"<span weight='bold' size='larger'>Welcome to %s!</span>\n" +"\n" +"You have no accounts enabled. Enable your IM accounts from the <b>Accounts</" +"b> window at <b>Accounts->Manage Accounts</b>. Once you enable accounts, " +"you'll be able to sign on, set your status, and talk to your friends." +msgstr "" + +#. set the Show Offline Buddies option. must be done +#. * after the treeview or faceprint gets mad. -Robot101 +#. +msgid "/Buddies/Show/Offline Buddies" +msgstr "" + +msgid "/Buddies/Show/Empty Groups" +msgstr "" + +msgid "/Buddies/Show/Buddy Details" +msgstr "" + +msgid "/Buddies/Show/Idle Times" +msgstr "" + +msgid "/Buddies/Show/Protocol Icons" +msgstr "" + +msgid "Add a buddy.\n" +msgstr "" + +msgid "Buddy's _username:" +msgstr "" + +msgid "(Optional) A_lias:" +msgstr "" + +msgid "Add buddy to _group:" +msgstr "" + +msgid "This protocol does not support chat rooms." +msgstr "" + +msgid "" +"You are not currently signed on with any protocols that have the ability to " +"chat." +msgstr "" + +msgid "" +"Please enter an alias, and the appropriate information about the chat you " +"would like to add to your buddy list.\n" +msgstr "" + +msgid "A_lias:" +msgstr "" + +msgid "_Group:" +msgstr "" + +msgid "Auto_join when account becomes online." +msgstr "" + +msgid "_Remain in chat after window is closed." +msgstr "" + +msgid "Please enter the name of the group to be added." +msgstr "" + +msgid "Enable Account" +msgstr "" + +msgid "<PurpleMain>/Accounts/Enable Account" +msgstr "" + +msgid "<PurpleMain>/Accounts/" +msgstr "" + +msgid "_Edit Account" +msgstr "" + +msgid "No actions available" +msgstr "" + +msgid "_Disable" +msgstr "" + +msgid "/Tools" +msgstr "" + +msgid "/Buddies/Sort Buddies" +msgstr "" + +#. Widget creation function +msgid "SSL Servers" +msgstr "" + +msgid "Unknown command." +msgstr "" + +msgid "That buddy is not on the same protocol as this chat." +msgstr "" + +msgid "" +"You are not currently signed on with an account that can invite that buddy." +msgstr "" + +msgid "Invite Buddy Into Chat Room" +msgstr "" + +msgid "_Buddy:" +msgstr "" + +msgid "_Message:" +msgstr "" + +#, c-format +msgid "<h1>Conversation with %s</h1>\n" +msgstr "" + +msgid "Save Conversation" +msgstr "" + +msgid "Find" +msgstr "" + +msgid "_Search for:" +msgstr "" + +msgid "Un-Ignore" +msgstr "" + +msgid "Ignore" +msgstr "" + +msgid "Get Away Message" +msgstr "" + +msgid "Last said" +msgstr "" + +msgid "Unable to save icon file to disk." +msgstr "" + +msgid "Save Icon" +msgstr "" + +msgid "Animate" +msgstr "" + +msgid "Hide Icon" +msgstr "" + +msgid "Save Icon As..." +msgstr "" + +msgid "Set Custom Icon..." +msgstr "" + +msgid "Change Size" +msgstr "" + +msgid "Show All" +msgstr "" + +#. Conversation menu +msgid "/_Conversation" +msgstr "" + +msgid "/Conversation/New Instant _Message..." +msgstr "" + +msgid "/Conversation/_Find..." +msgstr "" + +msgid "/Conversation/View _Log" +msgstr "" + +msgid "/Conversation/_Save As..." +msgstr "" + +msgid "/Conversation/Clea_r Scrollback" +msgstr "" + +msgid "/Conversation/M_edia" +msgstr "" + +msgid "/Conversation/Media/_Audio Call" +msgstr "" + +msgid "/Conversation/Media/_Video Call" +msgstr "" + +msgid "/Conversation/Media/Audio\\/Video _Call" +msgstr "" + +msgid "/Conversation/Se_nd File..." +msgstr "" + +msgid "/Conversation/Add Buddy _Pounce..." +msgstr "" + +msgid "/Conversation/_Get Info" +msgstr "" + +msgid "/Conversation/In_vite..." +msgstr "" + +msgid "/Conversation/M_ore" +msgstr "" + +msgid "/Conversation/Al_ias..." +msgstr "" + +msgid "/Conversation/_Block..." +msgstr "" + +msgid "/Conversation/_Unblock..." +msgstr "" + +msgid "/Conversation/_Add..." +msgstr "" + +msgid "/Conversation/_Remove..." +msgstr "" + +msgid "/Conversation/Insert Lin_k..." +msgstr "" + +msgid "/Conversation/Insert Imag_e..." +msgstr "" + +msgid "/Conversation/_Close" +msgstr "" + +#. Options +msgid "/_Options" +msgstr "" + +msgid "/Options/Enable _Logging" +msgstr "" + +msgid "/Options/Enable _Sounds" +msgstr "" + +msgid "/Options/Show Formatting _Toolbars" +msgstr "" + +msgid "/Options/Show Ti_mestamps" +msgstr "" + +msgid "/Conversation/More" +msgstr "" + +msgid "/Options" +msgstr "" + +#. The menubar has been deactivated. Make sure the 'More' submenu is regenerated next time +#. * the 'Conversation' menu pops up. +#. Make sure the 'Conversation -> More' menuitems are regenerated whenever +#. * the 'Conversation' menu pops up because the entries can change after the +#. * conversation is created. +msgid "/Conversation" +msgstr "" + +msgid "/Conversation/View Log" +msgstr "" + +msgid "/Conversation/Media/Audio Call" +msgstr "" + +msgid "/Conversation/Media/Video Call" +msgstr "" + +msgid "/Conversation/Media/Audio\\/Video Call" +msgstr "" + +msgid "/Conversation/Send File..." +msgstr "" + +msgid "/Conversation/Add Buddy Pounce..." +msgstr "" + +msgid "/Conversation/Get Info" +msgstr "" + +msgid "/Conversation/Invite..." +msgstr "" + +msgid "/Conversation/Alias..." +msgstr "" + +msgid "/Conversation/Block..." +msgstr "" + +msgid "/Conversation/Unblock..." +msgstr "" + +msgid "/Conversation/Add..." +msgstr "" + +msgid "/Conversation/Remove..." +msgstr "" + +msgid "/Conversation/Insert Link..." +msgstr "" + +msgid "/Conversation/Insert Image..." +msgstr "" + +msgid "/Options/Enable Logging" +msgstr "" + +msgid "/Options/Enable Sounds" +msgstr "" + +msgid "/Options/Show Formatting Toolbars" +msgstr "" + +msgid "/Options/Show Timestamps" +msgstr "" + +msgid "User is typing..." +msgstr "" + +#, c-format +msgid "" +"\n" +"%s has stopped typing" +msgstr "" + +#. Build the Send To menu +msgid "S_end To" +msgstr "" + +msgid "_Send" +msgstr "" + +#. Setup the label telling how many people are in the room. +msgid "0 people in room" +msgstr "" + +#, c-format +msgid "%d person in room" +msgid_plural "%d people in room" +msgstr[0] "" +msgstr[1] "" + +msgid "Typing" +msgstr "" + +msgid "Stopped Typing" +msgstr "" + +msgid "Nick Said" +msgstr "" + +msgid "Unread Messages" +msgstr "" + +msgid "New Event" +msgstr "" + +msgid "clear: Clears all conversation scrollbacks." +msgstr "" + +msgid "Confirm close" +msgstr "" + +msgid "You have unread messages. Are you sure you want to close the window?" +msgstr "" + +msgid "Close other tabs" +msgstr "" + +msgid "Close all tabs" +msgstr "" + +msgid "Detach this tab" +msgstr "" + +msgid "Close this tab" +msgstr "" + +msgid "Close conversation" +msgstr "" + +msgid "Last created window" +msgstr "" + +msgid "Separate IM and Chat windows" +msgstr "" + +msgid "New window" +msgstr "" + +msgid "By group" +msgstr "" + +msgid "By account" +msgstr "" + +msgid "Save Debug Log" +msgstr "" + +msgid "Invert" +msgstr "" + +msgid "Highlight matches" +msgstr "" + +msgid "_Icon Only" +msgstr "" + +msgid "_Text Only" +msgstr "" + +msgid "_Both Icon & Text" +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Right click for more options." +msgstr "" + +msgid "Level " +msgstr "" + +msgid "Select the debug filter level." +msgstr "" + +msgid "All" +msgstr "" + +msgid "Misc" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "Error " +msgstr "" + +msgid "Fatal Error" +msgstr "" + +msgid "bug master" +msgstr "" + +msgid "artist" +msgstr "" + +#. feel free to not translate this +msgid "Ka-Hing Cheung" +msgstr "" + +msgid "voice and video" +msgstr "" + +msgid "support" +msgstr "" + +msgid "webmaster" +msgstr "" + +msgid "Senior Contributor/QA" +msgstr "" + +msgid "win32 port" +msgstr "" + +msgid "maintainer" +msgstr "" + +msgid "libfaim maintainer" +msgstr "" + +#. If "lazy bum" translates literally into a serious insult, use something else or omit it. +msgid "hacker and designated driver [lazy bum]" +msgstr "" + +msgid "support/QA" +msgstr "" + +msgid "XMPP" +msgstr "" + +msgid "original author" +msgstr "" + +msgid "lead developer" +msgstr "" + +msgid "Afrikaans" +msgstr "" + +msgid "Arabic" +msgstr "" + +msgid "Belarusian Latin" +msgstr "" + +msgid "Bulgarian" +msgstr "" + +msgid "Bengali" +msgstr "" + +msgid "Bosnian" +msgstr "" + +msgid "Catalan" +msgstr "" + +msgid "Valencian-Catalan" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Danish" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Dzongkha" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "Australian English" +msgstr "" + +msgid "Canadian English" +msgstr "" + +msgid "British English" +msgstr "" + +msgid "Esperanto" +msgstr "" + +msgid "Spanish" +msgstr "" + +msgid "Estonian" +msgstr "" + +msgid "Euskera(Basque)" +msgstr "" + +msgid "Persian" +msgstr "" + +msgid "Finnish" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Irish" +msgstr "" + +msgid "Galician" +msgstr "" + +msgid "Gujarati" +msgstr "" + +msgid "Gujarati Language Team" +msgstr "" + +msgid "Hebrew" +msgstr "" + +msgid "Hindi" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Armenian" +msgstr "" + +msgid "Indonesian" +msgstr "" + +msgid "Italian" +msgstr "" + +msgid "Japanese" +msgstr "" + +msgid "Georgian" +msgstr "" + +msgid "Ubuntu Georgian Translators" +msgstr "" + +msgid "Khmer" +msgstr "" + +msgid "Kannada" +msgstr "" + +msgid "Kannada Translation team" +msgstr "" + +msgid "Korean" +msgstr "" + +msgid "Kurdish" +msgstr "" + +msgid "Lao" +msgstr "" + +msgid "Lithuanian" +msgstr "" + +msgid "Macedonian" +msgstr "" + +msgid "Mongolian" +msgstr "" + +msgid "Bokmål Norwegian" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch, Flemish" +msgstr "" + +msgid "Norwegian Nynorsk" +msgstr "" + +msgid "Occitan" +msgstr "" + +msgid "Punjabi" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Portuguese-Brazil" +msgstr "" + +msgid "Pashto" +msgstr "" + +msgid "Romanian" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Slovak" +msgstr "" + +msgid "Slovenian" +msgstr "" + +msgid "Albanian" +msgstr "" + +msgid "Serbian" +msgstr "" + +msgid "Sinhala" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "" + +msgid "Telugu" +msgstr "" + +msgid "Thai" +msgstr "" + +msgid "Turkish" +msgstr "" + +msgid "Urdu" +msgstr "" + +msgid "Vietnamese" +msgstr "" + +msgid "T.M.Thanh and the Gnome-Vi Team" +msgstr "" + +msgid "Simplified Chinese" +msgstr "" + +msgid "Hong Kong Chinese" +msgstr "" + +msgid "Traditional Chinese" +msgstr "" + +msgid "Amharic" +msgstr "" + +#, c-format +msgid "About %s" +msgstr "" + +#, c-format +msgid "" +"%s is a graphical modular messaging client based on libpurple which is " +"capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, " +"Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, MySpaceIM, Gadu-Gadu, and " +"QQ all at once. It is written using GTK+.<BR><BR>You may modify and " +"redistribute the program under the terms of the GPL (version 2 or later). A " +"copy of the GPL is contained in the 'COPYING' file distributed with %s. %s " +"is copyrighted by its contributors. See the 'COPYRIGHT' file for the " +"complete list of contributors. We provide no warranty for this program." +"<BR><BR>" +msgstr "" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" +msgstr "" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" +msgstr "" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgstr "" + +#, c-format +msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" +msgstr "" + +msgid "Current Developers" +msgstr "" + +msgid "Crazy Patch Writers" +msgstr "" + +msgid "Retired Developers" +msgstr "" + +msgid "Retired Crazy Patch Writers" +msgstr "" + +msgid "Current Translators" +msgstr "" + +msgid "Past Translators" +msgstr "" + +msgid "Debugging Information" +msgstr "" + +msgid "_Name" +msgstr "" + +msgid "_Account" +msgstr "" + +msgid "Get User Info" +msgstr "" + +msgid "" +"Please enter the username or alias of the person whose info you would like " +"to view." +msgstr "" + +msgid "View User Log" +msgstr "" + +msgid "Alias Contact" +msgstr "" + +msgid "Enter an alias for this contact." +msgstr "" + +#, c-format +msgid "Enter an alias for %s." +msgstr "" + +msgid "Alias Buddy" +msgstr "" + +msgid "Alias Chat" +msgstr "" + +msgid "Enter an alias for this chat." +msgstr "" + +#, c-format +msgid "" +"You are about to remove the contact containing %s and %d other buddy from " +"your buddy list. Do you want to continue?" +msgid_plural "" +"You are about to remove the contact containing %s and %d other buddies from " +"your buddy list. Do you want to continue?" +msgstr[0] "" +msgstr[1] "" + +msgid "Remove Contact" +msgstr "" + +msgid "_Remove Contact" +msgstr "" + +#, c-format +msgid "" +"You are about to merge the group called %s into the group called %s. Do you " +"want to continue?" +msgstr "" + +msgid "Merge Groups" +msgstr "" + +msgid "_Merge Groups" +msgstr "" + +#, c-format +msgid "" +"You are about to remove the group %s and all its members from your buddy " +"list. Do you want to continue?" +msgstr "" + +msgid "Remove Group" +msgstr "" + +msgid "_Remove Group" +msgstr "" + +#, c-format +msgid "" +"You are about to remove %s from your buddy list. Do you want to continue?" +msgstr "" + +msgid "Remove Buddy" +msgstr "" + +msgid "_Remove Buddy" +msgstr "" + +#, c-format +msgid "" +"You are about to remove the chat %s from your buddy list. Do you want to " +"continue?" +msgstr "" + +msgid "Remove Chat" +msgstr "" + +msgid "_Remove Chat" +msgstr "" + +msgid "Right-click for more unread messages...\n" +msgstr "" + +msgid "_Change Status" +msgstr "" + +msgid "Show Buddy _List" +msgstr "" + +msgid "_Unread Messages" +msgstr "" + +msgid "New _Message..." +msgstr "" + +msgid "_Accounts" +msgstr "" + +msgid "Plu_gins" +msgstr "" + +msgid "Pr_eferences" +msgstr "" + +msgid "Mute _Sounds" +msgstr "" + +msgid "_Blink on New Message" +msgstr "" + +msgid "_Quit" +msgstr "" + +msgid "Not started" +msgstr "" + +msgid "<b>Receiving As:</b>" +msgstr "" + +msgid "<b>Receiving From:</b>" +msgstr "" + +msgid "<b>Sending To:</b>" +msgstr "" + +msgid "<b>Sending As:</b>" +msgstr "" + +msgid "There is no application configured to open this type of file." +msgstr "" + +msgid "An error occurred while opening the file." +msgstr "" + +#, c-format +msgid "Error launching %s: %s" +msgstr "" + +#, c-format +msgid "Error running %s" +msgstr "" + +#, c-format +msgid "Process returned error code %d" +msgstr "" + +msgid "Filename:" +msgstr "" + +msgid "Local File:" +msgstr "" + +msgid "Speed:" +msgstr "" + +msgid "Time Elapsed:" +msgstr "" + +msgid "Time Remaining:" +msgstr "" + +msgid "Close this window when all transfers _finish" +msgstr "" + +msgid "C_lear finished transfers" +msgstr "" + +#. "Download Details" arrow +msgid "File transfer _details" +msgstr "" + +#. Pause button +msgid "_Pause" +msgstr "" + +#. Resume button +msgid "_Resume" +msgstr "" + +msgid "Paste as Plain _Text" +msgstr "" + +msgid "_Reset formatting" +msgstr "" + +msgid "Disable _smileys in selected text" +msgstr "" + +msgid "Hyperlink color" +msgstr "" + +msgid "Color to draw hyperlinks." +msgstr "" + +msgid "Hyperlink visited color" +msgstr "" + +msgid "Color to draw hyperlinks after it has been visited (or activated)." +msgstr "" + +msgid "Hyperlink prelight color" +msgstr "" + +msgid "Color to draw hyperlinks when mouse is over them." +msgstr "" + +msgid "Sent Message Name Color" +msgstr "" + +msgid "Color to draw the name of a message you sent." +msgstr "" + +msgid "Received Message Name Color" +msgstr "" + +msgid "Color to draw the name of a message you received." +msgstr "" + +msgid "\"Attention\" Name Color" +msgstr "" + +msgid "Color to draw the name of a message you received containing your name." +msgstr "" + +msgid "Action Message Name Color" +msgstr "" + +msgid "Color to draw the name of an action message." +msgstr "" + +msgid "Action Message Name Color for Whispered Message" +msgstr "" + +msgid "Whisper Message Name Color" +msgstr "" + +msgid "Typing notification color" +msgstr "" + +msgid "The color to use for the typing notification font" +msgstr "" + +msgid "Typing notification font" +msgstr "" + +msgid "The font to use for the typing notification" +msgstr "" + +msgid "Enable typing notification" +msgstr "" + +msgid "" +"<span size='larger' weight='bold'>Unrecognized file type</span>\n" +"\n" +"Defaulting to PNG." +msgstr "" + +msgid "" +"Unrecognized file type\n" +"\n" +"Defaulting to PNG." +msgstr "" + +#, c-format +msgid "" +"<span size='larger' weight='bold'>Error saving image</span>\n" +"\n" +"%s" +msgstr "" + +#, c-format +msgid "" +"Error saving image\n" +"\n" +"%s" +msgstr "" + +msgid "Save Image" +msgstr "" + +msgid "_Save Image..." +msgstr "" + +msgid "_Add Custom Smiley..." +msgstr "" + +msgid "Select Font" +msgstr "" + +msgid "Select Text Color" +msgstr "" + +msgid "Select Background Color" +msgstr "" + +msgid "_URL" +msgstr "" + +msgid "_Description" +msgstr "" + +msgid "" +"Please enter the URL and description of the link that you want to insert. " +"The description is optional." +msgstr "" + +msgid "Please enter the URL of the link that you want to insert." +msgstr "" + +msgid "Insert Link" +msgstr "" + +msgid "_Insert" +msgstr "" + +#, c-format +msgid "Failed to store image: %s\n" +msgstr "" + +msgid "Insert Image" +msgstr "" + +#, c-format +msgid "" +"This smiley is disabled because a custom smiley exists for this shortcut:\n" +" %s" +msgstr "" + +msgid "Smile!" +msgstr "" + +msgid "_Manage custom smileys" +msgstr "" + +msgid "This theme has no available smileys." +msgstr "" + +msgid "_Font" +msgstr "" + +msgid "Group Items" +msgstr "" + +msgid "Ungroup Items" +msgstr "" + +msgid "Bold" +msgstr "" + +msgid "Italic" +msgstr "" + +msgid "Underline" +msgstr "" + +msgid "Strikethrough" +msgstr "" + +msgid "Increase Font Size" +msgstr "" + +msgid "Decrease Font Size" +msgstr "" + +msgid "Font Face" +msgstr "" + +msgid "Background Color" +msgstr "" + +msgid "Foreground Color" +msgstr "" + +msgid "Reset Formatting" +msgstr "" + +msgid "Insert IM Image" +msgstr "" + +msgid "Insert Smiley" +msgstr "" + +msgid "<b>_Bold</b>" +msgstr "" + +msgid "<i>_Italic</i>" +msgstr "" + +msgid "<u>_Underline</u>" +msgstr "" + +msgid "<span strikethrough='true'>Strikethrough</span>" +msgstr "" + +msgid "<span size='larger'>_Larger</span>" +msgstr "" + +msgid "_Normal" +msgstr "" + +msgid "<span size='smaller'>_Smaller</span>" +msgstr "" + +#. If we want to show the formatting for the following items, we would +#. * need to update them when formatting changes. The above items don't need +#. * no updating nor nothin' +msgid "_Font face" +msgstr "" + +msgid "Foreground _color" +msgstr "" + +msgid "Bac_kground color" +msgstr "" + +msgid "_Image" +msgstr "" + +msgid "_Link" +msgstr "" + +msgid "_Horizontal rule" +msgstr "" + +msgid "_Smile!" +msgstr "" + +msgid "Log Deletion Failed" +msgstr "" + +msgid "Check permissions and try again." +msgstr "" + +#, c-format +msgid "" +"Are you sure you want to permanently delete the log of the conversation with " +"%s which started at %s?" +msgstr "" + +#, c-format +msgid "" +"Are you sure you want to permanently delete the log of the conversation in %" +"s which started at %s?" +msgstr "" + +#, c-format +msgid "" +"Are you sure you want to permanently delete the system log which started at %" +"s?" +msgstr "" + +msgid "Delete Log?" +msgstr "" + +msgid "Delete Log..." +msgstr "" + +#, c-format +msgid "<span size='larger' weight='bold'>Conversation in %s on %s</span>" +msgstr "" + +#, c-format +msgid "<span size='larger' weight='bold'>Conversation with %s on %s</span>" +msgstr "" + +#. Steal the "HELP" response and use it to trigger browsing to the logs folder +msgid "_Browse logs folder" +msgstr "" + +#, c-format +msgid "%s %s. Try `%s -h' for more information.\n" +msgstr "" + +#, c-format +msgid "" +"%s %s\n" +"Usage: %s [OPTION]...\n" +"\n" +" -c, --config=DIR use DIR for config files\n" +" -d, --debug print debugging messages to stdout\n" +" -f, --force-online force online, regardless of network status\n" +" -h, --help display this help and exit\n" +" -m, --multiple do not ensure single instance\n" +" -n, --nologin don't automatically login\n" +" -l, --login[=NAME] enable specified account(s) (optional argument NAME\n" +" specifies account(s) to use, separated by commas.\n" +" Without this only the first account will be enabled).\n" +" --display=DISPLAY X display to use\n" +" -v, --version display the current version and exit\n" +msgstr "" + +#, c-format +msgid "" +"%s %s\n" +"Usage: %s [OPTION]...\n" +"\n" +" -c, --config=DIR use DIR for config files\n" +" -d, --debug print debugging messages to stdout\n" +" -f, --force-online force online, regardless of network status\n" +" -h, --help display this help and exit\n" +" -m, --multiple do not ensure single instance\n" +" -n, --nologin don't automatically login\n" +" -l, --login[=NAME] enable specified account(s) (optional argument NAME\n" +" specifies account(s) to use, separated by commas.\n" +" Without this only the first account will be enabled).\n" +" -v, --version display the current version and exit\n" +msgstr "" + +#, c-format +msgid "" +"%s %s has segfaulted and attempted to dump a core file.\n" +"This is a bug in the software and has happened through\n" +"no fault of your own.\n" +"\n" +"If you can reproduce the crash, please notify the developers\n" +"by reporting a bug at:\n" +"%ssimpleticket/\n" +"\n" +"Please make sure to specify what you were doing at the time\n" +"and post the backtrace from the core file. If you do not know\n" +"how to get the backtrace, please read the instructions at\n" +"%swiki/GetABacktrace\n" +msgstr "" + +#. Translators may want to transliterate the name. +#. It is not to be translated. +msgid "Pidgin" +msgstr "" + +#, c-format +msgid "Exiting because another libpurple client is already running.\n" +msgstr "" + +msgid "/_Media" +msgstr "" + +msgid "/Media/_Hangup" +msgstr "" + +msgid "Calling..." +msgstr "" + +#, c-format +msgid "%s wishes to start an audio/video session with you." +msgstr "" + +#, c-format +msgid "%s wishes to start a video session with you." +msgstr "" + +#, c-format +msgid "%s has %d new message." +msgid_plural "%s has %d new messages." +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "<b>%d new email.</b>" +msgid_plural "<b>%d new emails.</b>" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "The browser command \"%s\" is invalid." +msgstr "" + +msgid "Unable to open URL" +msgstr "" + +#, c-format +msgid "Error launching \"%s\": %s" +msgstr "" + +msgid "" +"The 'Manual' browser command has been chosen, but no command has been set." +msgstr "" + +msgid "Open All Messages" +msgstr "" + +msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>" +msgstr "" + +msgid "New Pounces" +msgstr "" + +msgid "Dismiss" +msgstr "" + +msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>" +msgstr "" + +msgid "No message" +msgstr "" + +msgid "The following plugins will be unloaded." +msgstr "" + +msgid "Multiple plugins will be unloaded." +msgstr "" + +msgid "Unload Plugins" +msgstr "" + +msgid "Could not unload plugin" +msgstr "" + +msgid "" +"The plugin could not be unloaded now, but will be disabled at the next " +"startup." +msgstr "" + +#, c-format +msgid "" +"<span foreground=\"red\" weight=\"bold\">Error: %s\n" +"Check the plugin website for an update.</span>" +msgstr "" + +msgid "Author" +msgstr "" + +msgid "<b>Written by:</b>" +msgstr "" + +msgid "<b>Web site:</b>" +msgstr "" + +msgid "<b>Filename:</b>" +msgstr "" + +msgid "Configure Pl_ugin" +msgstr "" + +msgid "<b>Plugin Details</b>" +msgstr "" + +msgid "Select a file" +msgstr "" + +msgid "Modify Buddy Pounce" +msgstr "" + +#. Create the "Pounce on Whom" frame. +msgid "Pounce on Whom" +msgstr "" + +msgid "_Account:" +msgstr "" + +msgid "_Buddy name:" +msgstr "" + +msgid "Si_gns on" +msgstr "" + +msgid "Signs o_ff" +msgstr "" + +msgid "Goes a_way" +msgstr "" + +msgid "Ret_urns from away" +msgstr "" + +msgid "Becomes _idle" +msgstr "" + +msgid "Is no longer i_dle" +msgstr "" + +msgid "Starts _typing" +msgstr "" + +msgid "P_auses while typing" +msgstr "" + +msgid "Stops t_yping" +msgstr "" + +msgid "Sends a _message" +msgstr "" + +msgid "Ope_n an IM window" +msgstr "" + +msgid "_Pop up a notification" +msgstr "" + +msgid "Send a _message" +msgstr "" + +msgid "E_xecute a command" +msgstr "" + +msgid "P_lay a sound" +msgstr "" + +msgid "Brows_e..." +msgstr "" + +msgid "Br_owse..." +msgstr "" + +msgid "Pre_view" +msgstr "" + +msgid "P_ounce only when my status is not Available" +msgstr "" + +msgid "_Recurring" +msgstr "" + +msgid "Pounce Target" +msgstr "" + +#, c-format +msgid "Started typing" +msgstr "" + +#, c-format +msgid "Paused while typing" +msgstr "" + +#, c-format +msgid "Signed on" +msgstr "" + +#, c-format +msgid "Returned from being idle" +msgstr "" + +#, c-format +msgid "Returned from being away" +msgstr "" + +#, c-format +msgid "Stopped typing" +msgstr "" + +#, c-format +msgid "Signed off" +msgstr "" + +#, c-format +msgid "Became idle" +msgstr "" + +#, c-format +msgid "Went away" +msgstr "" + +#, c-format +msgid "Sent a message" +msgstr "" + +#, c-format +msgid "Unknown.... Please report this!" +msgstr "" + +msgid "Smiley theme failed to unpack." +msgstr "" + +msgid "Install Theme" +msgstr "" + +msgid "" +"Select a smiley theme that you would like to use from the list below. New " +"themes can be installed by dragging and dropping them onto the theme list." +msgstr "" + +msgid "Icon" +msgstr "" + +msgid "Keyboard Shortcuts" +msgstr "" + +msgid "Cl_ose conversations with the Escape key" +msgstr "" + +#. Buddy List Themes +msgid "Buddy List Theme" +msgstr "" + +#. System Tray +msgid "System Tray Icon" +msgstr "" + +msgid "_Show system tray icon:" +msgstr "" + +msgid "On unread messages" +msgstr "" + +msgid "Conversation Window Hiding" +msgstr "" + +msgid "_Hide new IM conversations:" +msgstr "" + +msgid "When away" +msgstr "" + +#. All the tab options! +msgid "Tabs" +msgstr "" + +msgid "Show IMs and chats in _tabbed windows" +msgstr "" + +msgid "Show close b_utton on tabs" +msgstr "" + +msgid "_Placement:" +msgstr "" + +msgid "Top" +msgstr "" + +msgid "Bottom" +msgstr "" + +msgid "Left" +msgstr "" + +msgid "Right" +msgstr "" + +msgid "Left Vertical" +msgstr "" + +msgid "Right Vertical" +msgstr "" + +msgid "N_ew conversations:" +msgstr "" + +msgid "Show _formatting on incoming messages" +msgstr "" + +msgid "Close IMs immediately when the tab is closed" +msgstr "" + +msgid "Show _detailed information" +msgstr "" + +msgid "Enable buddy ic_on animation" +msgstr "" + +msgid "_Notify buddies that you are typing to them" +msgstr "" + +msgid "Highlight _misspelled words" +msgstr "" + +msgid "Use smooth-scrolling" +msgstr "" + +msgid "F_lash window when IMs are received" +msgstr "" + +msgid "Minimi_ze new conversation windows" +msgstr "" + +msgid "Minimum input area height in lines:" +msgstr "" + +msgid "Font" +msgstr "" + +msgid "Use document font from _theme" +msgstr "" + +msgid "Use font from _theme" +msgstr "" + +msgid "Conversation _font:" +msgstr "" + +msgid "Default Formatting" +msgstr "" + +msgid "" +"This is how your outgoing message text will appear when you use protocols " +"that support formatting." +msgstr "" + +msgid "Cannot start proxy configuration program." +msgstr "" + +msgid "Cannot start browser configuration program." +msgstr "" + +msgid "<span style=\"italic\">Example: stunserver.org</span>" +msgstr "" + +msgid "_Autodetect IP address" +msgstr "" + +msgid "Public _IP:" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "_Enable automatic router port forwarding" +msgstr "" + +msgid "_Manually specify range of ports to listen on" +msgstr "" + +msgid "_Start port:" +msgstr "" + +msgid "_End port:" +msgstr "" + +#. TURN server +msgid "Relay Server (TURN)" +msgstr "" + +msgid "Proxy Server & Browser" +msgstr "" + +msgid "<b>Proxy configuration program was not found.</b>" +msgstr "" + +msgid "<b>Browser configuration program was not found.</b>" +msgstr "" + +msgid "" +"Proxy & Browser preferences are configured\n" +"in GNOME Preferences" +msgstr "" + +msgid "Configure _Proxy" +msgstr "" + +msgid "Configure _Browser" +msgstr "" + +msgid "Proxy Server" +msgstr "" + +msgid "No proxy" +msgstr "" + +#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings +msgid "Use remote DNS with SOCKS4 proxies" +msgstr "" + +msgid "_User:" +msgstr "" + +msgid "Seamonkey" +msgstr "" + +msgid "Opera" +msgstr "" + +msgid "Netscape" +msgstr "" + +msgid "Mozilla" +msgstr "" + +msgid "Konqueror" +msgstr "" + +msgid "Desktop Default" +msgstr "" + +msgid "GNOME Default" +msgstr "" + +msgid "Galeon" +msgstr "" + +msgid "Firefox" +msgstr "" + +msgid "Firebird" +msgstr "" + +msgid "Epiphany" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Browser Selection" +msgstr "" + +msgid "_Browser:" +msgstr "" + +msgid "_Open link in:" +msgstr "" + +msgid "Browser default" +msgstr "" + +msgid "Existing window" +msgstr "" + +msgid "New tab" +msgstr "" + +#, c-format +msgid "" +"_Manual:\n" +"(%s for URL)" +msgstr "" + +msgid "Log _format:" +msgstr "" + +msgid "Log all _instant messages" +msgstr "" + +msgid "Log all c_hats" +msgstr "" + +msgid "Log all _status changes to system log" +msgstr "" + +msgid "Sound Selection" +msgstr "" + +#, c-format +msgid "Quietest" +msgstr "" + +#, c-format +msgid "Quieter" +msgstr "" + +#, c-format +msgid "Quiet" +msgstr "" + +#, c-format +msgid "Loud" +msgstr "" + +#, c-format +msgid "Louder" +msgstr "" + +#, c-format +msgid "Loudest" +msgstr "" + +msgid "_Method:" +msgstr "" + +msgid "Console beep" +msgstr "" + +msgid "No sounds" +msgstr "" + +#, c-format +msgid "" +"Sound c_ommand:\n" +"(%s for filename)" +msgstr "" + +msgid "M_ute sounds" +msgstr "" + +msgid "Sounds when conversation has _focus" +msgstr "" + +msgid "_Enable sounds:" +msgstr "" + +msgid "V_olume:" +msgstr "" + +msgid "Play" +msgstr "" + +msgid "_Browse..." +msgstr "" + +msgid "_Reset" +msgstr "" + +msgid "_Report idle time:" +msgstr "" + +msgid "Based on keyboard or mouse use" +msgstr "" + +msgid "_Auto-reply:" +msgstr "" + +msgid "When both away and idle" +msgstr "" + +#. Auto-away stuff +msgid "Auto-away" +msgstr "" + +msgid "_Minutes before becoming idle:" +msgstr "" + +msgid "Change status when _idle" +msgstr "" + +msgid "Change _status to:" +msgstr "" + +#. Signon status stuff +msgid "Status at Startup" +msgstr "" + +msgid "Use status from last _exit at startup" +msgstr "" + +msgid "Status to a_pply at startup:" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Smiley Themes" +msgstr "" + +msgid "Browser" +msgstr "" + +msgid "Status / Idle" +msgstr "" + +msgid "Allow all users to contact me" +msgstr "" + +msgid "Allow only the users on my buddy list" +msgstr "" + +msgid "Allow only the users below" +msgstr "" + +msgid "Block all users" +msgstr "" + +msgid "Block only the users below" +msgstr "" + +msgid "Privacy" +msgstr "" + +msgid "Changes to privacy settings take effect immediately." +msgstr "" + +msgid "Set privacy for:" +msgstr "" + +#. Remove All button +msgid "Remove Al_l" +msgstr "" + +msgid "Permit User" +msgstr "" + +msgid "Type a user you permit to contact you." +msgstr "" + +msgid "Please enter the name of the user you wish to be able to contact you." +msgstr "" + +msgid "_Permit" +msgstr "" + +#, c-format +msgid "Allow %s to contact you?" +msgstr "" + +#, c-format +msgid "Are you sure you wish to allow %s to contact you?" +msgstr "" + +msgid "Block User" +msgstr "" + +msgid "Type a user to block." +msgstr "" + +msgid "Please enter the name of the user you wish to block." +msgstr "" + +#, c-format +msgid "Block %s?" +msgstr "" + +#, c-format +msgid "Are you sure you want to block %s?" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "That file already exists" +msgstr "" + +msgid "Would you like to overwrite it?" +msgstr "" + +msgid "Overwrite" +msgstr "" + +msgid "Choose New Name" +msgstr "" + +msgid "Select Folder..." +msgstr "" + +#. list button +msgid "_Get List" +msgstr "" + +#. add button +msgid "_Add Chat" +msgstr "" + +msgid "Are you sure you want to delete the selected saved statuses?" +msgstr "" + +#. Use button +msgid "_Use" +msgstr "" + +msgid "Title already in use. You must choose a unique title." +msgstr "" + +msgid "Different" +msgstr "" + +msgid "_Title:" +msgstr "" + +msgid "_Status:" +msgstr "" + +#. Different status message expander +msgid "Use a _different status for some accounts" +msgstr "" + +#. Save & Use button +msgid "Sa_ve & Use" +msgstr "" + +#, c-format +msgid "Status for %s" +msgstr "" + +#. +#. * TODO: We should enable/disable the add button based on +#. * whether the user has entered all required data. That +#. * would eliminate the need for this check and provide a +#. * better user experience. +#. +msgid "Custom Smiley" +msgstr "" + +msgid "More Data needed" +msgstr "" + +msgid "Please provide a shortcut to associate with the smiley." +msgstr "" + +#, c-format +msgid "" +"A custom smiley for '%s' already exists. Please use a different shortcut." +msgstr "" + +msgid "Duplicate Shortcut" +msgstr "" + +msgid "Please select an image for the smiley." +msgstr "" + +msgid "Edit Smiley" +msgstr "" + +msgid "Add Smiley" +msgstr "" + +msgid "_Image:" +msgstr "" + +#. Shortcut text +msgid "S_hortcut text:" +msgstr "" + +msgid "Smiley" +msgstr "" + +msgid "Shortcut Text" +msgstr "" + +msgid "Custom Smiley Manager" +msgstr "" + +msgid "Select Buddy Icon" +msgstr "" + +msgid "Click to change your buddyicon for this account." +msgstr "" + +msgid "Click to change your buddyicon for all accounts." +msgstr "" + +msgid "Waiting for network connection" +msgstr "" + +msgid "New status..." +msgstr "" + +msgid "Saved statuses..." +msgstr "" + +msgid "Status Selector" +msgstr "" + +msgid "Google Talk" +msgstr "" + +#, c-format +msgid "The following error has occurred loading %s: %s" +msgstr "" + +msgid "Failed to load image" +msgstr "" + +#, c-format +msgid "Cannot send folder %s." +msgstr "" + +#, c-format +msgid "" +"%s cannot transfer a folder. You will need to send the files within " +"individually." +msgstr "" + +msgid "You have dragged an image" +msgstr "" + +msgid "" +"You can send this image as a file transfer, embed it into this message, or " +"use it as the buddy icon for this user." +msgstr "" + +msgid "Set as buddy icon" +msgstr "" + +msgid "Send image file" +msgstr "" + +msgid "Insert in message" +msgstr "" + +msgid "Would you like to set it as the buddy icon for this user?" +msgstr "" + +msgid "" +"You can send this image as a file transfer, or use it as the buddy icon for " +"this user." +msgstr "" + +msgid "" +"You can insert this image into this message, or use it as the buddy icon for " +"this user" +msgstr "" + +#. I don't know if we really want to do anything here. Most of the desktop item types are crap like +#. * "MIME Type" (I have no clue how that would be a desktop item) and "Comment"... nothing we can really +#. * send. The only logical one is "Application," but do we really want to send a binary and nothing else? +#. * Probably not. I'll just give an error and return. +#. The original patch sent the icon used by the launcher. That's probably wrong +msgid "Cannot send launcher" +msgstr "" + +msgid "" +"You dragged a desktop launcher. Most likely you wanted to send whatever this " +"launcher points to instead of this launcher itself." +msgstr "" + +#, c-format +msgid "" +"<b>File:</b> %s\n" +"<b>File size:</b> %s\n" +"<b>Image size:</b> %dx%d" +msgstr "" + +#, c-format +msgid "The file '%s' is too large for %s. Please try a smaller image.\n" +msgstr "" + +msgid "Icon Error" +msgstr "" + +msgid "Could not set icon" +msgstr "" + +#, c-format +msgid "Failed to open file '%s': %s" +msgstr "" + +#, c-format +msgid "" +"Failed to load image '%s': reason not known, probably a corrupt image file" +msgstr "" + +msgid "_Open Link" +msgstr "" + +msgid "_Copy Link Location" +msgstr "" + +msgid "_Copy Email Address" +msgstr "" + +msgid "Save File" +msgstr "" + +msgid "Select color" +msgstr "" + +msgid "_Alias" +msgstr "" + +msgid "Close _tabs" +msgstr "" + +msgid "_Get Info" +msgstr "" + +msgid "_Invite" +msgstr "" + +msgid "_Modify..." +msgstr "" + +msgid "_Add..." +msgstr "" + +msgid "_Open Mail" +msgstr "" + +msgid "_Edit" +msgstr "" + +msgid "Pidgin Tooltip" +msgstr "" + +msgid "Pidgin smileys" +msgstr "" + +msgid "Penguin Pimps" +msgstr "" + +msgid "Selecting this disables graphical emoticons." +msgstr "" + +msgid "none" +msgstr "" + +msgid "Small" +msgstr "" + +msgid "Smaller versions of the default smilies" +msgstr "" + +msgid "Response Probability:" +msgstr "" + +msgid "Statistics Configuration" +msgstr "" + +#. msg_difference spinner +msgid "Maximum response timeout:" +msgstr "" + +msgid "minutes" +msgstr "" + +#. last_seen spinner +msgid "Maximum last-seen difference:" +msgstr "" + +#. threshold spinner +msgid "Threshold:" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Contact Availability Prediction" +msgstr "" + +#. *< name +#. *< version +msgid "Contact Availability Prediction plugin." +msgstr "" + +#. * summary +msgid "Displays statistical information about your buddies' availability" +msgstr "" + +msgid "Buddy is idle" +msgstr "" + +msgid "Buddy is away" +msgstr "" + +msgid "Buddy is \"extended\" away" +msgstr "" + +#. Not used yet. +msgid "Buddy is mobile" +msgstr "" + +msgid "Buddy is offline" +msgstr "" + +msgid "Point values to use when..." +msgstr "" + +msgid "" +"The buddy with the <i>largest score</i> is the buddy who will have priority " +"in the contact.\n" +msgstr "" + +msgid "Use last buddy when scores are equal" +msgstr "" + +msgid "Point values to use for account..." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Contact Priority" +msgstr "" + +#. *< name +#. *< version +#. *< summary +msgid "" +"Allows for controlling the values associated with different buddy states." +msgstr "" + +#. *< description +msgid "" +"Allows for changing the point values of idle/away/offline states for buddies " +"in contact priority computations." +msgstr "" + +msgid "Conversation Colors" +msgstr "" + +msgid "Customize colors in the conversation window" +msgstr "" + +msgid "Error Messages" +msgstr "" + +msgid "Highlighted Messages" +msgstr "" + +msgid "System Messages" +msgstr "" + +msgid "Sent Messages" +msgstr "" + +msgid "Received Messages" +msgstr "" + +#, c-format +msgid "Select Color for %s" +msgstr "" + +msgid "Ignore incoming format" +msgstr "" + +msgid "Apply in Chats" +msgstr "" + +msgid "Apply in IMs" +msgstr "" + +msgid "By conversation count" +msgstr "" + +msgid "Conversation Placement" +msgstr "" + +#. Translators: "New conversations" should match the text in the preferences dialog and "By conversation count" should be the same text used above +msgid "" +"Note: The preference for \"New conversations\" must be set to \"By " +"conversation count\"." +msgstr "" + +msgid "Number of conversations per window" +msgstr "" + +msgid "Separate IM and Chat windows when placing by number" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "ExtPlacement" +msgstr "" + +#. *< name +#. *< version +msgid "Extra conversation placement options." +msgstr "" + +#. *< summary +#. * description +msgid "" +"Restrict the number of conversations per windows, optionally separating IMs " +"and Chats" +msgstr "" + +#. Configuration frame +msgid "Mouse Gestures Configuration" +msgstr "" + +msgid "Middle mouse button" +msgstr "" + +msgid "Right mouse button" +msgstr "" + +#. "Visual gesture display" checkbox +msgid "_Visual gesture display" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Mouse Gestures" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Provides support for mouse gestures" +msgstr "" + +#. * description +msgid "" +"Allows support for mouse gestures in conversation windows. Drag the middle " +"mouse button to perform certain actions:\n" +" • Drag down and then to the right to close a conversation.\n" +" • Drag up and then to the left to switch to the previous conversation.\n" +" • Drag up and then to the right to switch to the next conversation." +msgstr "" + +msgid "Instant Messaging" +msgstr "" + +#. Add the label. +msgid "Select a person from your address book below, or add a new person." +msgstr "" + +msgid "Group:" +msgstr "" + +#. "New Person" button +msgid "New Person" +msgstr "" + +#. "Select Buddy" button +msgid "Select Buddy" +msgstr "" + +#. Add the label. +msgid "" +"Select a person from your address book to add this buddy to, or create a new " +"person." +msgstr "" + +#. Add the expander +msgid "User _details" +msgstr "" + +#. "Associate Buddy" button +msgid "_Associate Buddy" +msgstr "" + +msgid "Unable to send email" +msgstr "" + +msgid "The evolution executable was not found in the PATH." +msgstr "" + +msgid "An email address was not found for this buddy." +msgstr "" + +msgid "Add to Address Book" +msgstr "" + +msgid "Send Email" +msgstr "" + +#. Configuration frame +msgid "Evolution Integration Configuration" +msgstr "" + +#. Label +msgid "Select all accounts that buddies should be auto-added to." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Evolution Integration" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Provides integration with Evolution." +msgstr "" + +msgid "Please enter the person's information below." +msgstr "" + +msgid "Please enter the buddy's username and account type below." +msgstr "" + +msgid "Account type:" +msgstr "" + +#. Optional Information section +msgid "Optional information:" +msgstr "" + +msgid "First name:" +msgstr "" + +msgid "Last name:" +msgstr "" + +msgid "Email:" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "GTK Signals Test" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Test to see that all ui signals are working properly." +msgstr "" + +#, c-format +msgid "" +"\n" +"<b>Buddy Note</b>: %s" +msgstr "" + +msgid "History" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Iconify on Away" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Iconifies the buddy list and your conversations when you go away." +msgstr "" + +msgid "Mail Checker" +msgstr "" + +msgid "Checks for new local mail." +msgstr "" + +msgid "Adds a small box to the buddy list that shows if you have new mail." +msgstr "" + +msgid "Markerline" +msgstr "" + +msgid "Draw a line to indicate new messages in a conversation." +msgstr "" + +msgid "Jump to markerline" +msgstr "" + +msgid "Draw Markerline in " +msgstr "" + +msgid "_IM windows" +msgstr "" + +msgid "C_hat windows" +msgstr "" + +msgid "" +"A music messaging session has been requested. Please click the MM icon to " +"accept." +msgstr "" + +msgid "Music messaging session confirmed." +msgstr "" + +msgid "Music Messaging" +msgstr "" + +msgid "There was a conflict in running the command:" +msgstr "" + +msgid "Error Running Editor" +msgstr "" + +msgid "The following error has occurred:" +msgstr "" + +#. Configuration frame +msgid "Music Messaging Configuration" +msgstr "" + +msgid "Score Editor Path" +msgstr "" + +msgid "_Apply" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +msgid "Music Messaging Plugin for collaborative composition." +msgstr "" + +#. * summary +msgid "" +"The Music Messaging Plugin allows a number of users to simultaneously work " +"on a piece of music by editting a common score in real-time." +msgstr "" + +#. ---------- "Notify For" ---------- +msgid "Notify For" +msgstr "" + +msgid "\t_Only when someone says your username" +msgstr "" + +msgid "_Focused windows" +msgstr "" + +#. ---------- "Notification Methods" ---------- +msgid "Notification Methods" +msgstr "" + +msgid "Prepend _string into window title:" +msgstr "" + +#. Count method button +msgid "Insert c_ount of new messages into window title" +msgstr "" + +#. Count xprop method button +msgid "Insert count of new message into _X property" +msgstr "" + +#. Urgent method button +msgid "Set window manager \"_URGENT\" hint" +msgstr "" + +msgid "_Flash window" +msgstr "" + +#. Raise window method button +msgid "R_aise conversation window" +msgstr "" + +#. Present conversation method button +msgid "_Present conversation window" +msgstr "" + +#. ---------- "Notification Removals" ---------- +msgid "Notification Removal" +msgstr "" + +#. Remove on focus button +msgid "Remove when conversation window _gains focus" +msgstr "" + +#. Remove on click button +msgid "Remove when conversation window _receives click" +msgstr "" + +#. Remove on type button +msgid "Remove when _typing in conversation window" +msgstr "" + +#. Remove on message send button +msgid "Remove when a _message gets sent" +msgstr "" + +#. Remove on conversation switch button +msgid "Remove on switch to conversation ta_b" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Message Notification" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Provides a variety of ways of notifying you of unread messages." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Pidgin Demonstration Plugin" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "An example plugin that does stuff - see the description." +msgstr "" + +#. * description +msgid "" +"This is a really cool plugin that does a lot of stuff:\n" +"- It tells you who wrote the program when you log in\n" +"- It reverses all incoming text\n" +"- It sends a message to people on your list immediately when they sign on" +msgstr "" + +msgid "Cursor Color" +msgstr "" + +msgid "Secondary Cursor Color" +msgstr "" + +msgid "Hyperlink Color" +msgstr "" + +msgid "Visited Hyperlink Color" +msgstr "" + +msgid "Highlighted Message Name Color" +msgstr "" + +msgid "GtkTreeView Horizontal Separation" +msgstr "" + +msgid "Conversation Entry" +msgstr "" + +msgid "Request Dialog" +msgstr "" + +msgid "Notify Dialog" +msgstr "" + +msgid "Select Color" +msgstr "" + +#, c-format +msgid "Select Interface Font" +msgstr "" + +#, c-format +msgid "Select Font for %s" +msgstr "" + +msgid "GTK+ Interface Font" +msgstr "" + +msgid "GTK+ Text Shortcut Theme" +msgstr "" + +#. +#. for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) { +#. hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); +#. gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); +#. +#. check = pidgin_prefs_checkbox(_(widget_bool_names[i]), +#. widget_bool_prefs_set[i], hbox); +#. gtk_size_group_add_widget(labelsg, check); +#. +#. widget_bool_widgets[i] = pidgin_prefs_checkbox("", widget_bool_prefs[i], hbox); +#. * +#. gtk_size_group_add_widget(widgetsb, widget_bool_widgets[i]); +#. * +#. gtk_widget_set_sensitive(widget_bool_widgets[i], +#. purple_prefs_get_bool(widget_bool_prefs_set[i])); +#. g_signal_connect(G_OBJECT(check), "toggled", +#. G_CALLBACK(pidgin_toggle_sensitive), +#. widget_bool_widgets[i]); +#. } +#. +msgid "Interface colors" +msgstr "" + +msgid "Widget Sizes" +msgstr "" + +msgid "Fonts" +msgstr "" + +msgid "Gtkrc File Tools" +msgstr "" + +#, c-format +msgid "Write settings to %s%sgtkrc-2.0" +msgstr "" + +msgid "Re-read gtkrc files" +msgstr "" + +msgid "Pidgin GTK+ Theme Control" +msgstr "" + +msgid "Provides access to commonly used gtkrc settings." +msgstr "" + +msgid "Raw" +msgstr "" + +msgid "Lets you send raw input to text-based protocols." +msgstr "" + +msgid "" +"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit " +"'Enter' in the entry box to send. Watch the debug window." +msgstr "" + +#, c-format +msgid "You can upgrade to %s %s today." +msgstr "" + +msgid "New Version Available" +msgstr "" + +msgid "Later" +msgstr "" + +msgid "Download Now" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Release Notification" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Checks periodically for new releases." +msgstr "" + +#. * description +msgid "" +"Checks periodically for new releases and notifies the user with the " +"ChangeLog." +msgstr "" + +#. *< major version +#. *< minor version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Send Button" +msgstr "" + +#. *< name +#. *< version +msgid "Conversation Window Send Button." +msgstr "" + +#. *< summary +msgid "" +"Adds a Send button to the entry area of the conversation window. Intended " +"for when no physical keyboard is present." +msgstr "" + +msgid "Duplicate Correction" +msgstr "" + +msgid "The specified word already exists in the correction list." +msgstr "" + +msgid "Text Replacements" +msgstr "" + +msgid "You type" +msgstr "" + +msgid "You send" +msgstr "" + +msgid "Whole words only" +msgstr "" + +msgid "Case sensitive" +msgstr "" + +msgid "Add a new text replacement" +msgstr "" + +msgid "You _type:" +msgstr "" + +msgid "You _send:" +msgstr "" + +#. Created here so it can be passed to whole_words_button_toggled. +msgid "_Exact case match (uncheck for automatic case handling)" +msgstr "" + +msgid "Only replace _whole words" +msgstr "" + +msgid "General Text Replacement Options" +msgstr "" + +msgid "Enable replacement of last word on send" +msgstr "" + +msgid "Text replacement" +msgstr "" + +msgid "Replaces text in outgoing messages according to user-defined rules." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Buddy Ticker" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "A horizontal scrolling version of the buddy list." +msgstr "" + +msgid "Display Timestamps Every" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Timestamp" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Display iChat-style timestamps" +msgstr "" + +#. * description +msgid "Display iChat-style timestamps every N minutes." +msgstr "" + +msgid "Timestamp Format Options" +msgstr "" + +#, c-format +msgid "_Force 24-hour time format" +msgstr "" + +msgid "Show dates in..." +msgstr "" + +msgid "Co_nversations:" +msgstr "" + +msgid "For delayed messages" +msgstr "" + +msgid "For delayed messages and in chats" +msgstr "" + +msgid "_Message Logs:" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Message Timestamp Formats" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Customizes the message timestamp formats." +msgstr "" + +#. * description +msgid "" +"This plugin allows the user to customize conversation and logging message " +"timestamp formats." +msgstr "" + +msgid "Opacity:" +msgstr "" + +#. IM Convo trans options +msgid "IM Conversation Windows" +msgstr "" + +msgid "_IM window transparency" +msgstr "" + +msgid "_Show slider bar in IM window" +msgstr "" + +msgid "Remove IM window transparency on focus" +msgstr "" + +msgid "Always on top" +msgstr "" + +#. Buddy List trans options +msgid "Buddy List Window" +msgstr "" + +msgid "_Buddy List window transparency" +msgstr "" + +msgid "Remove Buddy List window transparency on focus" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Transparency" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Variable Transparency for the buddy list and conversations." +msgstr "" + +#. * description +msgid "" +"This plugin enables variable alpha transparency on conversation windows and " +"the buddy list.\n" +"\n" +"* Note: This plugin requires Win2000 or greater." +msgstr "" + +msgid "GTK+ Runtime Version" +msgstr "" + +#. Autostart +msgid "Startup" +msgstr "" + +#, c-format +msgid "_Start %s on Windows startup" +msgstr "" + +msgid "_Dockable Buddy List" +msgstr "" + +#. Blist On Top +msgid "_Keep Buddy List window on top:" +msgstr "" + +#. XXX: Did this ever work? +msgid "Only when docked" +msgstr "" + +msgid "Windows Pidgin Options" +msgstr "" + +msgid "Options specific to Pidgin for Windows." +msgstr "" + +msgid "" +"Provides options specific to Pidgin for Windows , such as buddy list docking." +msgstr "" + +msgid "<font color='#777777'>Logged out.</font>" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "XMPP Console" +msgstr "" + +msgid "Account: " +msgstr "" + +msgid "<font color='#777777'>Not connected to XMPP</font>" +msgstr "" + +msgid "Insert an <iq/> stanza." +msgstr "" + +msgid "Insert a <presence/> stanza." +msgstr "" + +msgid "Insert a <message/> stanza." +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Send and receive raw XMPP stanzas." +msgstr "" + +#. * description +msgid "This plugin is useful for debbuging XMPP servers or clients." +msgstr ""
--- a/po/lo.po Fri May 22 00:38:45 2009 +0000 +++ b/po/lo.po Tue Jun 09 23:30:18 2009 +0000 @@ -1,25 +1,26 @@ -# SOME DESCRIPTIVE TITLE. +# translation of lo.po to Lao # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +# Anousak Souphavanh <anousak@gmail.com>, 2007, 2009. +msgid "" +msgstr "" +"Project-Id-Version: lo\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-30 10:39-0400\n" -"PO-Revision-Date: 2007-09-28 09:52+0700\n" +"POT-Creation-Date: 2009-05-26 22:29-0700\n" +"PO-Revision-Date: 2009-04-29 09:28+0700\n" "Last-Translator: Anousak Souphavanh <anousak@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"Language-Team: Lao <lo@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #. Translators may want to transliterate the name. #. It is not to be translated. msgid "Finch" -msgstr "" +msgstr "ຟີນຊ໌" #, c-format msgid "%s. Try `%s -h' for more information.\n" @@ -48,40 +49,40 @@ msgstr "ຜິດພາດ" msgid "Account was not added" -msgstr "" +msgstr "ບໍ່ໃດ້ເພີ້ມບັນຊີ " msgid "Username of an account must be non-empty." -msgstr "" +msgstr "ລະຫັດຜູ້ໃຊ້ຕ້ອງໃຫ້ມີຂໍ້ມູນ" msgid "New mail notifications" -msgstr "" +msgstr "ອີເເມວລ໌ໃຫ່ມເຕືອນ" msgid "Remember password" -msgstr "" +msgstr "ຈື່ລະຫັດພານ" msgid "There are no protocol plugins installed." msgstr "" msgid "(You probably forgot to 'make install'.)" -msgstr "" +msgstr "ຄິດວ່າທ່ານລືມຂຽນ 'make install'" msgid "Modify Account" -msgstr "" +msgstr "ປັບບັນຊີ" msgid "New Account" -msgstr "" +msgstr "ບັນຊີໃຫມ່" msgid "Protocol:" -msgstr "" +msgstr "ໂປໂຕໂກນ:" msgid "Username:" -msgstr "" +msgstr "ຊື່ຜູ້ໃຊ້:" msgid "Password:" -msgstr "" +msgstr "ລະຫັດພ່ານ:" msgid "Alias:" -msgstr "" +msgstr "ຊື່ຫລີ້ນ:" #. Register checkbox msgid "Create this account on the server" @@ -90,37 +91,37 @@ #. Cancel button #. Cancel msgid "Cancel" -msgstr "" +msgstr "ຍົກເລີອກ" #. Save button #. Save msgid "Save" -msgstr "" +msgstr "ບັນທຶກ" #, c-format msgid "Are you sure you want to delete %s?" -msgstr "" +msgstr "ເເນ່ທີ່ຈະລຶບ %s?" msgid "Delete Account" -msgstr "" +msgstr "ລຶບບັນຊີ" #. Delete button msgid "Delete" -msgstr "" +msgstr "ລຶບ" msgid "Accounts" -msgstr "" +msgstr "ບັນຊີທົວໄປ" msgid "You can enable/disable accounts from the following list." msgstr "" #. Add button msgid "Add" -msgstr "" +msgstr "ເພີ້ມ" #. Modify button msgid "Modify" -msgstr "" +msgstr "ປັບ" #, c-format msgid "%s%s%s%s has made %s his or her buddy%s%s" @@ -137,20 +138,22 @@ msgstr "" msgid "Authorize" -msgstr "" +msgstr "ອະນຸມັດ" msgid "Deny" -msgstr "" +msgstr "ປະຕິເສດ" #, c-format msgid "" "Online: %d\n" "Total: %d" msgstr "" +"ອອນລາຍ: %d\n" +"ຈໍານວນລວມ: %d" #, c-format msgid "Account: %s (%s)" -msgstr "" +msgstr "ບັນຊີ: %s (%s)" #, c-format msgid "" @@ -1669,6 +1672,8 @@ msgid "+++ %s signed off" msgstr "" +#. Unknown error +#. Unknown error! msgid "Unknown error" msgstr "" @@ -3480,6 +3485,9 @@ msgid "Server does not use any supported authentication method" msgstr "" +msgid "You require encryption, but it is not available on this server." +msgstr "" + msgid "Invalid challenge from server" msgstr "" @@ -3739,6 +3747,13 @@ msgid "Resource" msgstr "" +#, c-format +msgid "%s ago" +msgstr "" + +msgid "Logged off" +msgstr "" + msgid "Middle Name" msgstr "" @@ -3903,7 +3918,14 @@ msgid "Find Rooms" msgstr "" -msgid "You require encryption, but it is not available on this server." +#, fuzzy +msgid "Affiliations:" +msgstr "ຊື່ຫລີ້ນ:" + +msgid "No users found" +msgstr "" + +msgid "Roles:" msgstr "" msgid "Ping timeout" @@ -4354,13 +4376,13 @@ msgstr "" msgid "" -"affiliate <user> <owner|admin|member|outcast|none>: Set a user's " -"affiliation with the room." -msgstr "" - -msgid "" -"role <user> <moderator|participant|visitor|none>: Set a user's " -"role in the room." +"affiliate <owner|admin|member|outcast|none> [nick1] [nick2] ...: Get " +"the users with an affiliation or set users' affiliation with the room." +msgstr "" + +msgid "" +"role <moderator|participant|visitor|none> [nick1] [nick2] ...: Get the " +"users with an role or set users' role with the room." msgstr "" msgid "invite <user> [message]: Invite a user to the room." @@ -5140,28 +5162,20 @@ msgstr "" #, c-format -msgid "%s is not a valid group." -msgstr "" - -msgid "Unknown error." -msgstr "" - -#, c-format -msgid "%s on %s (%s)" -msgstr "" - -#, c-format msgid "%s just sent you a Nudge!" msgstr "" -#. char *adl = g_strndup(payload, len); -#, c-format -msgid "Unknown error (%d)" +#, c-format +msgid "Unknown error (%d): %s" msgstr "" msgid "Unable to add user" msgstr "" +#, c-format +msgid "Unknown error (%d)" +msgstr "" + msgid "The following users are missing from your addressbook" msgstr "" @@ -5188,15 +5202,12 @@ msgid "Service Temporarily Unavailable." msgstr "" +msgid "Unknown error." +msgstr "" + msgid "Mobile message was not sent because it was too long." msgstr "" -msgid "Unable to rename group" -msgstr "" - -msgid "Unable to delete group" -msgstr "" - #, c-format msgid "" "The MSN server will shut down for maintenance in %d minute. You will " @@ -5321,14 +5332,6 @@ msgid "Message may have not been sent because an unknown error occurred:" msgstr "" -#, c-format -msgid "%s has added you to his or her buddy list." -msgstr "" - -#, c-format -msgid "%s has removed you from his or her buddy list." -msgstr "" - msgid "Delete Buddy from Address Book?" msgstr "" @@ -5358,6 +5361,28 @@ msgstr "" #, c-format +msgid "%s is not a valid group." +msgstr "" + +#, c-format +msgid "%s on %s (%s)" +msgstr "" + +msgid "Unable to rename group" +msgstr "" + +msgid "Unable to delete group" +msgstr "" + +#, c-format +msgid "%s has added you to his or her buddy list." +msgstr "" + +#, c-format +msgid "%s has removed you from his or her buddy list." +msgstr "" + +#, c-format msgid "No such user: %s" msgstr "" @@ -5386,6 +5411,8 @@ msgstr "" #. Can't write _()'d strings in array initializers. Workaround. +#. khc: then use N_() in the array initializer and use _() when they are +#. used msgid "New mail messages" msgstr "" @@ -8939,6 +8966,30 @@ msgid "Add buddy rejected" msgstr "" +#. Some error in the received stream +msgid "Received invalid data" +msgstr "" + +#. Password incorrect +msgid "Incorrect Password" +msgstr "" + +#. security lock from too many failed login attempts +msgid "Account locked: Too many failed login attempts" +msgstr "" + +#. the username does not exist +msgid "Username does not exist" +msgstr "" + +#. indicates a lock of some description +msgid "Account locked: See the debug log" +msgstr "" + +#. username or password missing +msgid "Username or password missing" +msgstr "" + #, c-format msgid "" "The Yahoo server has requested the use of an unrecognized authentication " @@ -9776,15 +9827,16 @@ msgid "Please update the necessary fields." msgstr "" -msgid "Room _List" -msgstr "" +#, fuzzy +msgid "A_ccount" +msgstr "ບັນຊີທົວໄປ" msgid "" "Please enter the appropriate information about the chat you would like to " "join.\n" msgstr "" -msgid "_Account:" +msgid "Room _List" msgstr "" msgid "_Block" @@ -10695,6 +10747,9 @@ msgid "Hungarian" msgstr "" +msgid "Armenian" +msgstr "" + msgid "Indonesian" msgstr "" @@ -10791,6 +10846,9 @@ msgid "Swedish" msgstr "" +msgid "Swahili" +msgstr "" + msgid "Tamil" msgstr "" @@ -11183,11 +11241,9 @@ msgid "Save Image" msgstr "" -#, c-format msgid "_Save Image..." msgstr "" -#, c-format msgid "_Add Custom Smiley..." msgstr "" @@ -11551,6 +11607,9 @@ msgid "Pounce on Whom" msgstr "" +msgid "_Account:" +msgstr "" + msgid "_Buddy name:" msgstr "" @@ -12207,6 +12266,9 @@ msgid "Custom Smiley Manager" msgstr "" +msgid "Select Buddy Icon" +msgstr "" + msgid "Click to change your buddyicon for this account." msgstr ""
--- a/po/sl.po Fri May 22 00:38:45 2009 +0000 +++ b/po/sl.po Tue Jun 09 23:30:18 2009 +0000 @@ -6,11 +6,11 @@ # msgid "" msgstr "" -"Project-Id-Version: Pidgin 2.5.5\n" +"Project-Id-Version: Pidgin 2.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-30 10:40-0400\n" -"PO-Revision-Date: 2009-02-22 10:26+0100\n" -"Last-Translator: Martin Srebotnjak <miles@filmsi.net>\n" +"POT-Creation-Date: 2009-05-26 22:19-0700\n" +"PO-Revision-Date: 2009-05-02 16:54+0100\n" +"Last-Translator: Martin Srebotnjak <miles@filmsi.net>\n" "Language-Team: Martin Srebotnjak <miles@filmsi.net>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -876,12 +876,11 @@ msgid "System Log" msgstr "Sistemski dnevnik" -#, fuzzy msgid "Calling ... " -msgstr "Preračunavanje ..." +msgstr "Klicanje ..." msgid "Hangup" -msgstr "" +msgstr "Odloži" #. Number of actions msgid "Accept" @@ -891,25 +890,24 @@ msgstr "Zavrni" msgid "Call in progress." -msgstr "" +msgstr "Klic je v teku." msgid "The call has been terminated." -msgstr "" +msgstr "Klic je bil končan." #, c-format msgid "%s wishes to start an audio session with you." -msgstr "" +msgstr "%s želi z vami začeti zvočno sejo." #, c-format msgid "%s is trying to start an unsupported media session type with you." -msgstr "" - -#, fuzzy +msgstr "%s poskuša z vami začeti sejo v nepodprtem mediju." + msgid "You have rejected the call." -msgstr "Zapustili ste kanal%s%s" +msgstr "Zavrnili ste klic." msgid "call: Make an audio call." -msgstr "" +msgstr "call: Opravite zvočni klic." msgid "Emails" msgstr "E-naslovi" @@ -1566,22 +1564,23 @@ "\n" "Fetching TinyURL..." msgstr "" +"\n" +"Pridobivanje TinyURL ..." msgid "Only create TinyURL for urls of this length or greater" -msgstr "" +msgstr "Ustvari TinyURL le za naslove URL te dolžina ali daljše" msgid "TinyURL (or other) address prefix" -msgstr "" - -#, fuzzy +msgstr "Predpona naslova TinyURL (ali drugega)" + msgid "TinyURL" -msgstr "URL skladbe" +msgstr "TinyURL" msgid "TinyURL plugin" -msgstr "" +msgstr "Vtičnik TinyURL" msgid "When receiving a message with URL(s), TinyURL for easier copying" -msgstr "" +msgstr "Ob prejemu sporočil z URL-ji uporabi TinyURL za enostavnejše kopiranje" msgid "accounts" msgstr "Računi" @@ -1785,6 +1784,8 @@ msgid "+++ %s signed off" msgstr "+++ %s se je odjavil(a)" +#. Unknown error +#. Unknown error! msgid "Unknown error" msgstr "Neznana napaka" @@ -1831,9 +1832,8 @@ msgid "%s left the room (%s)." msgstr "%s nas je zapustil (%s)." -#, fuzzy msgid "Invite to chat" -msgstr "Povabi na konferenčni pogovor" +msgstr "Povabi na klepet" #. Put our happy label in it. msgid "" @@ -2697,9 +2697,8 @@ msgid "Do not ask. Always save in pounce." msgstr "Ne sprašuj. Vedno shrani v opozorilo." -#, fuzzy msgid "One Time Password" -msgstr "Vnesi geslo" +msgstr "Enkratno geslo" #. *< type #. *< ui_requirement @@ -2708,13 +2707,13 @@ #. *< priority #. *< id msgid "One Time Password Support" -msgstr "" +msgstr "Podpora za enkratno geslo" #. *< name #. *< version #. * summary msgid "Enforce that passwords are used only once." -msgstr "" +msgstr "Vsilite, da se gesla uporabijo le enkrat." #. * description msgid "" @@ -2722,6 +2721,9 @@ "are only used in a single successful connection.\n" "Note: The account password must not be saved for this to work." msgstr "" +"Omogoča, da vsilite (posebej za vsak račun), da so neshranjena gesla " +"uporabljena le za posamezno uspešno povezavo.\n" +"Opomba: Geslo računa ni potrebno shraniti, da bi to delovalo." #. *< type #. *< ui_requirement @@ -2962,9 +2964,8 @@ msgstr "Vijolična oseba" #. Creating the options for the protocol -#, fuzzy msgid "Local Port" -msgstr "Okraj" +msgstr "Krajevna vrata" msgid "Bonjour" msgstr "Bonjour" @@ -3473,13 +3474,12 @@ #. We only want to do the following dance if the connection #. has not been successfully completed. If it has, just #. notify the user that their /nick command didn't go. -#, fuzzy, c-format +#, c-format msgid "The nickname \"%s\" is already being used." -msgstr "Ime za pomenek že obstaja" - -#, fuzzy +msgstr "Vzdevek \"%s\" že obstaja." + msgid "Nickname in use" -msgstr "Vzdevek" +msgstr "Vzdevek je zaseden" msgid "Cannot change nick" msgstr "Vzdevka ne morem spremeniti" @@ -3747,6 +3747,9 @@ msgid "Server does not use any supported authentication method" msgstr "Strežnik ne uporablja nobene podprte metode overovitve" +msgid "You require encryption, but it is not available on this server." +msgstr "Zahtevate šifriranje, vendar to na tem strežniku ni na voljo." + msgid "Invalid challenge from server" msgstr "Neveljaven poziv strežnika" @@ -3754,21 +3757,16 @@ msgstr "Napaka SASL" msgid "The BOSH connection manager terminated your session." -msgstr "" - -#, fuzzy +msgstr "Upravitelj povezave BOSH je zaključil vašo sejo." + msgid "No session ID given" -msgstr "Ni podanega razloga" - -#, fuzzy +msgstr "ID seje ni podan" + msgid "Unsupported version of BOSH protocol" -msgstr "Nepodprta različica" - -#, fuzzy +msgstr "Nepodprta različica protokola BOSH" + msgid "Unable to establish a connection with the server" -msgstr "" -"Povezave s strežnikom ni mogoče vzpostaviti:\n" -"%s" +msgstr "Povezave s strežnikom ni mogoče vzpostaviti" #, c-format msgid "" @@ -3778,9 +3776,8 @@ "Povezave s strežnikom ni mogoče vzpostaviti:\n" "%s" -#, fuzzy msgid "Unable to establish SSL connection" -msgstr "Povezave ni mogoče inicializirati" +msgstr "Povezave SSL ni mogoče vzpostaviti" msgid "Unable to create socket" msgstr "Ni mogoče ustvariti vtičnice" @@ -3852,9 +3849,8 @@ msgid "Operating System" msgstr "Operacijski sistem" -#, fuzzy msgid "Local Time" -msgstr "Lokalna datoteka:" +msgstr "Krajevni čas" msgid "Last Activity" msgstr "Zadnja dejavnost" @@ -4015,6 +4011,14 @@ msgid "Resource" msgstr "Vir" +#, c-format +msgid "%s ago" +msgstr "" + +#, fuzzy +msgid "Logged off" +msgstr "Prijavljeni" + msgid "Middle Name" msgstr "Drugo ime" @@ -4181,8 +4185,17 @@ msgid "Find Rooms" msgstr "Najdi sobe" -msgid "You require encryption, but it is not available on this server." -msgstr "Zahtevate šifriranje, vendar to na tem strežniku ni na voljo." +#, fuzzy +msgid "Affiliations:" +msgstr "Psevdonim:" + +#, fuzzy +msgid "No users found" +msgstr "Ni najdenih uporabnikov" + +#, fuzzy +msgid "Roles:" +msgstr "Funkcija" msgid "Ping timeout" msgstr "Časovna prekoračitev pinga" @@ -4195,6 +4208,8 @@ "Could not find alternative XMPP connection methods after failing to connect " "directly.\n" msgstr "" +"Po neuspehu neposredne povezave ni bilo mogoče najti drugih povezovalnih " +"metod XMPP.\n" msgid "Invalid XMPP ID" msgstr "Neveljaven ID za XMPP" @@ -4202,9 +4217,8 @@ msgid "Invalid XMPP ID. Domain must be set." msgstr "Neveljaven ID za XMPP. Domena mora biti določena." -#, fuzzy msgid "Malformed BOSH Connect Server" -msgstr "Povezava na strežnik neuspešna." +msgstr "Nepravilno oblikovan povezovalni strežnik BOSH" #, c-format msgid "Registration of %s@%s successful" @@ -4562,19 +4576,21 @@ msgid "Unable to ping user %s" msgstr "Uporabnika %s ni mogoče pingniti" -#, fuzzy, c-format +#, c-format msgid "Unable to buzz, because there is nothing known about %s." -msgstr "Ni mogoče stresti, saj o uporabniku %s ni ničesar znanega." - -#, fuzzy, c-format +msgstr "Ni mogoče stresti, saj o osebi %s ni ničesar znanega." + +#, c-format msgid "Unable to buzz, because %s might be offline." -msgstr "Ni mogoče stresti, saj je uporabnik %s morda nepovezan." - -#, fuzzy, c-format +msgstr "Ni mogoče stresti, saj je oseba %s morda nepovezana." + +#, c-format msgid "" "Unable to buzz, because %s does not support it or does not wish to receive " "buzzes now." -msgstr "Uporabnika %s ni mogoče stresti, ker tega dejanja ne podpira." +msgstr "" +"Osebe %s ni mogoče stresti, ker tega dejanja ne podpira ali zdaj ne želi " +"prejemati tresenja." #, c-format msgid "Buzzing %s..." @@ -4589,36 +4605,33 @@ msgid "%s has buzzed you!" msgstr "Uporabnik %s vas je stresel." -#, fuzzy, c-format +#, c-format msgid "Unable to initiate media with %s: invalid JID" -msgstr "Sporočila k %s ni mogoče poslati, neveljaven JID" - -#, fuzzy, c-format +msgstr "Medija z %s ni mogoče iniciirati: neveljaven JID" + +#, c-format msgid "Unable to initiate media with %s: user is not online" -msgstr "Datoteke %s ni mogoče poslati, ker uporabnik ni povezan" - -#, fuzzy, c-format +msgstr "Medija z %s ni mogoče iniciirati: uporabnik ni povezan" + +#, c-format msgid "Unable to initiate media with %s: not subscribed to user presence" msgstr "" -"Datoteke %s ni mogoče poslati, ker nimate dostopa do stanja uporabnikove " -"prisotnosti" - -#, fuzzy +"Medija %s ni mogoče iniciirati: niste naročeni na stanja prisotnosti osebe" + msgid "Media Initiation Failed" -msgstr "Napaka pri registraciji" - -#, fuzzy, c-format +msgstr "Iniciacija medija ni uspela" + +#, c-format msgid "" "Please select the resource of %s with which you would like to start a media " "session." -msgstr "Izberite, kateremu viru %s bi radi poslali datoteko" +msgstr "Izberite vir %s, s katerim bi radi začeli medijsko sejo." msgid "Select a Resource" msgstr "Izberite vir" -#, fuzzy msgid "Initiate Media" -msgstr "Začni _pogovor" +msgstr "Iniciiraj medij" msgid "config: Configure a chat room." msgstr "config: Nastavi pogovorno sobo." @@ -4638,16 +4651,18 @@ msgid "ban <user> [reason]: Ban a user from the room." msgstr "ban <uporabnik> [razlog]: Prepovej uporabnika v sobi." -msgid "" -"affiliate <user> <owner|admin|member|outcast|none>: Set a user's " -"affiliation with the room." +#, fuzzy +msgid "" +"affiliate <owner|admin|member|outcast|none> [nick1] [nick2] ...: Get " +"the users with an affiliation or set users' affiliation with the room." msgstr "" "affiliate <uporabnik> <lastnik|skrbnik|član|izločenec|nihče>: " "Nastavitev uporabnikovega statusa v sobi." -msgid "" -"role <user> <moderator|participant|visitor|none>: Set a user's " -"role in the room." +#, fuzzy +msgid "" +"role <moderator|participant|visitor|none> [nick1] [nick2] ...: Get the " +"users with an role or set users' role with the room." msgstr "" "role <uporabnik> <moderator|participant|visitor|none>: " "Nastavitev uporabnikove vloge v sobi." @@ -4773,20 +4788,17 @@ msgid "Error in chat %s" msgstr "Napaka v pomenku %s" -#, fuzzy msgid "An error occured on the in-band bytestream transfer\n" -msgstr "Med odpiranjem datoteke je prišlo do napake." - -#, fuzzy +msgstr "V notranje pasovnem zlogovnem pretoku je prišlo do napake\n" + msgid "Transfer was closed." -msgstr "Prenos datoteke ni uspel" - -#, fuzzy +msgstr "Prenos je bil zaprt." + msgid "Failed to open the file" -msgstr "Datoteke '%s' ni mogoče odpreti: %s" +msgstr "Datoteke ni mogoče odpreti" msgid "Failed to open in-band bytestream" -msgstr "" +msgstr "Znotraj pasovnega zlogovnega pretoka ni uspelo odpreti" #, c-format msgid "Unable to send file to %s, user does not support file transfers" @@ -5459,28 +5471,20 @@ msgstr "Overjanje Windows Live ID: Neveljaven odziv" #, c-format -msgid "%s is not a valid group." -msgstr "%s ni veljavna skupina." - -msgid "Unknown error." -msgstr "Neznana napaka." - -#, c-format -msgid "%s on %s (%s)" -msgstr "%s na %s (%s)" - -#, c-format msgid "%s just sent you a Nudge!" msgstr "Uporabnik %s vam je ravnokar pomežiknil!" -#. char *adl = g_strndup(payload, len); -#, c-format -msgid "Unknown error (%d)" +#, fuzzy, c-format +msgid "Unknown error (%d): %s" msgstr "Neznana napaka (%d)" msgid "Unable to add user" msgstr "Ni mogoče dodati uporabnika" +#, c-format +msgid "Unknown error (%d)" +msgstr "Neznana napaka (%d)" + msgid "The following users are missing from your addressbook" msgstr "Naslednji uporabniki manjkajo v vašem adresarju" @@ -5507,15 +5511,12 @@ msgid "Service Temporarily Unavailable." msgstr "Storitev je trenutno nedosegljiva." +msgid "Unknown error." +msgstr "Neznana napaka." + msgid "Mobile message was not sent because it was too long." msgstr "Mobilnega sporočila ni mogoče poslati, ker je predolgo." -msgid "Unable to rename group" -msgstr "Skupine ni mogoče preimenovati" - -msgid "Unable to delete group" -msgstr "Skupine ni mogoče izbrisati" - #, c-format msgid "" "The MSN server will shut down for maintenance in %d minute. You will " @@ -5670,14 +5671,6 @@ msgid "Message may have not been sent because an unknown error occurred:" msgstr "Sporočila morda ni bilo poslano, ker je prišlo do neznane napake:" -#, c-format -msgid "%s has added you to his or her buddy list." -msgstr "%s vas je dodal(a) na svoj seznam prijateljev." - -#, c-format -msgid "%s has removed you from his or her buddy list." -msgstr "%s vas je odstranil(a) s svojega seznama prijateljev." - msgid "Delete Buddy from Address Book?" msgstr "Želite izbrisati prijatelja iz adresarja?" @@ -5707,6 +5700,28 @@ msgstr "Vtičnik za protokol MSN" #, c-format +msgid "%s is not a valid group." +msgstr "%s ni veljavna skupina." + +#, c-format +msgid "%s on %s (%s)" +msgstr "%s na %s (%s)" + +msgid "Unable to rename group" +msgstr "Skupine ni mogoče preimenovati" + +msgid "Unable to delete group" +msgstr "Skupine ni mogoče izbrisati" + +#, c-format +msgid "%s has added you to his or her buddy list." +msgstr "%s vas je dodal(a) na svoj seznam prijateljev." + +#, c-format +msgid "%s has removed you from his or her buddy list." +msgstr "%s vas je odstranil(a) s svojega seznama prijateljev." + +#, c-format msgid "No such user: %s" msgstr "Uporabnik ne obstaja: %s" @@ -5735,6 +5750,8 @@ msgstr "Izgubljena povezava s strežnikom" #. Can't write _()'d strings in array initializers. Workaround. +#. khc: then use N_() in the array initializer and use _() when they are +#. used msgid "New mail messages" msgstr "Nova prejeta sporočila" @@ -7467,30 +7484,26 @@ msgstr "Opomba" #. callback -#, fuzzy msgid "Buddy Memo" -msgstr "Ikona prijatelja" +msgstr "Zapisek prijatelja" msgid "Change his/her memo as you like" -msgstr "" - -#, fuzzy +msgstr "Spremenite njegov/njen zapisek, kakor vam je drago" + msgid "_Modify" -msgstr "Spremeni" - -#, fuzzy +msgstr "_Spremeni" + msgid "Memo Modify" -msgstr "Spremeni" - -#, fuzzy +msgstr "Spremeni zapisek" + msgid "Server says:" -msgstr "Strežnik je zaposlen" +msgstr "Strežnik pravi:" msgid "Your request was accepted." -msgstr "" +msgstr "Vaša zahteva je bila sprejeta." msgid "Your request was rejected." -msgstr "" +msgstr "Vaša zahteva je bila zavrnjena." #, c-format msgid "%u requires verification" @@ -7798,14 +7811,13 @@ msgstr "<p><b>Nori razvijalci obližev</b>:<br>\n" msgid "<p><b>Acknowledgement</b>:<br>\n" -msgstr "<b>Zahvala</b>:<br>\n" - -#, fuzzy +msgstr "<b>Zahvale</b>:<br>\n" + msgid "<p><b>Scrupulous Testers</b>:<br>\n" -msgstr "<p><b>Prvotni avtor</b>:<br>\n" +msgstr "<p><b>Tankovestni preizkuševalci</b>:<br>\n" msgid "and more, please let me know... thank you!))" -msgstr "" +msgstr "in drugi, prosim, javite se ... hvala!))" msgid "<p><i>And, all the boys in the backroom...</i><br>\n" msgstr "<p><i>In vsi fantje iz ozadja ...</i><br>\n" @@ -7832,9 +7844,8 @@ msgid "About OpenQ" msgstr "O OpenQ" -#, fuzzy msgid "Modify Buddy Memo" -msgstr "Spremeni naslov" +msgstr "Spremeni zapisek prijatelja" #. *< type #. *< ui_requirement @@ -9532,7 +9543,7 @@ msgstr "%s vam je poslal povabilo s spletno kamero, kar še ni podprto." msgid "Your SMS was not delivered" -msgstr "" +msgstr "Vaš SMS ni bil dostavljen" msgid "Your Yahoo! message did not get sent." msgstr "Vaše sporočilo za Yahoo! ni bilo poslano." @@ -9557,6 +9568,34 @@ msgid "Add buddy rejected" msgstr "Dodajanje prijatelja zavrnjeno" +#. Some error in the received stream +#, fuzzy +msgid "Received invalid data" +msgstr "Na povezavi s strežnikom prejeti neveljavni podatki." + +#. Password incorrect +#, fuzzy +msgid "Incorrect Password" +msgstr "Neveljavno geslo" + +#. security lock from too many failed login attempts +msgid "Account locked: Too many failed login attempts" +msgstr "" + +#. the username does not exist +#, fuzzy +msgid "Username does not exist" +msgstr "Uporabnik ne obstaja" + +#. indicates a lock of some description +msgid "Account locked: See the debug log" +msgstr "" + +#. username or password missing +#, fuzzy +msgid "Username or password missing" +msgstr "Neveljavno uporabniško ime ali geslo" + #, c-format msgid "" "The Yahoo server has requested the use of an unrecognized authentication " @@ -10265,12 +10304,13 @@ msgid "Unable to connect to %s: %s" msgstr "Napaka pri povezovanju z %s: %s" -#, fuzzy, c-format +#, c-format msgid "" "Unable to connect to %s: Server requires TLS/SSL, but no TLS/SSL support was " "found." msgstr "" -"Strežnik zahteva TLS/SSL za prijavo. Podpore za TLS/SSL ni mogoče najti." +"Povezava z %s ni uspela: strežnik zahteva TLS/SSL za prijavo, vendar podpore " +"za TLS/SSL ni mogoče najti." #, c-format msgid " - %s" @@ -10309,13 +10349,13 @@ msgid "Error Reading %s" msgstr "Napaka pri branju %s" -#, fuzzy, c-format +#, c-format msgid "" "An error was encountered reading your %s. The file has not been loaded, and " "the old file has been renamed to %s~." msgstr "" -"Pri branju vašega %s je prišlo do napake, zato ni bil naložen. Stara " -"datoteka se je preimenovala v %s~." +"Pri branju vašega %s je prišlo do napake. Datoteka ni bial naložena, stara " +"datoteka pa je bila preimenovana v %s~." msgid "Internet Messenger" msgstr "Spletni sel" @@ -10422,9 +10462,8 @@ msgid "Create _this new account on the server" msgstr "_Ustvari ta nov račun na strežniku" -#, fuzzy msgid "_Proxy" -msgstr "Posredovalni strežnik" +msgstr "_Posredovalni strežnik" msgid "Enabled" msgstr "Omogočen" @@ -10475,16 +10514,17 @@ msgid "Please update the necessary fields." msgstr "Prosimo, posodobite potrebna polja." -msgid "Room _List" -msgstr "Se_znam sob" +#, fuzzy +msgid "A_ccount" +msgstr "Ra_čun:" msgid "" "Please enter the appropriate information about the chat you would like to " "join.\n" msgstr "Vnesite ustrezne informacije o pomenku, ki se mu želite pridružiti.\n" -msgid "_Account:" -msgstr "_Račun:" +msgid "Room _List" +msgstr "Se_znam sob" msgid "_Block" msgstr "_Zavrni" @@ -10501,16 +10541,14 @@ msgid "I_M" msgstr "_Sporoči" -#, fuzzy msgid "_Audio Call" -msgstr "_Dodaj pomenek" +msgstr "_Zvočni klic" msgid "Audio/_Video Call" -msgstr "" - -#, fuzzy +msgstr "Zvočni/_video klic" + msgid "_Video Call" -msgstr "Video.pomenek" +msgstr "_Video klic" msgid "_Send File..." msgstr "_Pošlji datoteko ..." @@ -10647,9 +10685,8 @@ msgid "/Tools/_Certificates" msgstr "/Orodja/_Digitalna potrdila" -#, fuzzy msgid "/Tools/Custom Smile_ys" -msgstr "/Orodja/Smej_ček" +msgstr "/Orodja/Smejč_ki po meri" msgid "/Tools/Plu_gins" msgstr "/Orodja/Vtični_ki" @@ -10780,7 +10817,7 @@ msgstr "po stanju" msgid "By recent log activity" -msgstr "" +msgstr "po zadnji dejavnosti" #, c-format msgid "%s disconnected" @@ -10797,7 +10834,7 @@ msgstr "Ponovno omogoči" msgid "SSL FAQs" -msgstr "" +msgstr "Pogosta vprašanja o SSL" msgid "Welcome back!" msgstr "Dobrodošli nazaj!" @@ -11019,21 +11056,17 @@ msgid "/Conversation/Clea_r Scrollback" msgstr "/Pogovor/Po_čisti pogovor" -#, fuzzy msgid "/Conversation/M_edia" -msgstr "/Pogovor/_Več" - -#, fuzzy +msgstr "/Pogovor/M_ediji" + msgid "/Conversation/Media/_Audio Call" -msgstr "/Pogovor/_Več" - -#, fuzzy +msgstr "/Pogovor/Mediji/_Zvočni klic" + msgid "/Conversation/Media/_Video Call" -msgstr "/Pogovor/_Več" - -#, fuzzy +msgstr "/Pogovor/Mediji/_Video klic" + msgid "/Conversation/Media/Audio\\/Video _Call" -msgstr "/Pogovor/Pokaži _dnevnik ..." +msgstr "/Pogovor/Mediji/Zvočni\\/Video _klic" msgid "/Conversation/Se_nd File..." msgstr "/Pogovor/_Pošlji datoteko ..." @@ -11107,17 +11140,14 @@ msgid "/Conversation/View Log" msgstr "/Pogovor/Pokaži dnevnik" -#, fuzzy msgid "/Conversation/Media/Audio Call" -msgstr "/Pogovor/Več" - -#, fuzzy +msgstr "/Pogovor/Mediji/Zvočni klic" + msgid "/Conversation/Media/Video Call" -msgstr "/Pogovor/Pokaži dnevnik" - -#, fuzzy +msgstr "/Pogovor/Mediji/Video klic" + msgid "/Conversation/Media/Audio\\/Video Call" -msgstr "/Pogovor/Več" +msgstr "/Pogovor/Mediji/Zvočni\\/Video klic" msgid "/Conversation/Send File..." msgstr "/Pogovor/Pošlji datoteko ..." @@ -11304,7 +11334,7 @@ msgstr "Ka-Hing Čung" msgid "voice and video" -msgstr "" +msgstr "glas in video" msgid "support" msgstr "podpora" @@ -11445,9 +11475,8 @@ msgid "Ubuntu Georgian Translators" msgstr "gruzijski prevajalci za Ubuntu" -#, fuzzy msgid "Khmer" -msgstr "Drugo" +msgstr "kmersko" msgid "Kannada" msgstr "kannadsko" @@ -11959,11 +11988,9 @@ msgid "Save Image" msgstr "Shrani sliko" -#, c-format msgid "_Save Image..." msgstr "_Shrani sliko ..." -#, c-format msgid "_Add Custom Smiley..." msgstr "_Dodaj smejčka po meri ..." @@ -12163,7 +12190,7 @@ msgid "%s %s. Try `%s -h' for more information.\n" msgstr "%s %s. Poskusite `%s -h' za več informacij.\n" -#, fuzzy, c-format +#, c-format msgid "" "%s %s\n" "Usage: %s [OPTION]...\n" @@ -12185,6 +12212,7 @@ "\n" " -c, --config=DIR uporabi DIR za nastavitvene datoteke\n" " -d, --debug izpiši sporočila za razhroščevanje na stdout\n" +" -f, --force-online vsili povezanost ne glede na stanje omrežja\n" " -h, --help izpiši to pomoč in končaj program\n" " -m, --multiple ne dovoljuj le enega zagnanega programa\n" " -n, --nologin brez samodejne prijave\n" @@ -12194,7 +12222,7 @@ " --display=DISPLAY zaslon X, ki naj bo uporabljen\n" " -v, --version izpiši trenutno različico in zapri program\n" -#, fuzzy, c-format +#, c-format msgid "" "%s %s\n" "Usage: %s [OPTION]...\n" @@ -12215,6 +12243,7 @@ "\n" " -c, --config=DIR uporabi DIR za nastavitvene datoteke\n" " -d, --debug izpiši sporočila za razhroščevanje na stdout\n" +" -f, --force-online vsili povezanost ne glede na stanje omrežja\n" " -h, --help izpiši to pomoč in končaj program\n" " -m, --multiple ne dovoljuj le enega zagnanega programa\n" " -n, --nologin brez samodejne prijave\n" @@ -12260,22 +12289,21 @@ msgstr "Program se bo zaprl, ker je že zagnan drug odjemalec libpurple.\n" msgid "/_Media" -msgstr "" +msgstr "/_Mediji" msgid "/Media/_Hangup" -msgstr "" - -#, fuzzy +msgstr "/Mediji/_Odloži" + msgid "Calling..." -msgstr "Preračunavanje ..." +msgstr "Klicanje ..." #, c-format msgid "%s wishes to start an audio/video session with you." -msgstr "" +msgstr "%s želi z vami začeti zvočno/video sejo." #, c-format msgid "%s wishes to start a video session with you." -msgstr "" +msgstr "%s želi z vami začeti video sejo." #, c-format msgid "%s has %d new message." @@ -12316,20 +12344,18 @@ msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>" msgstr "<span weight=\"bold\" size=\"larger\">Dobili ste pošto!</span>" -#, fuzzy msgid "New Pounces" -msgstr "Novo opozorilo prijatelja" +msgstr "Nova opozorila prijatelja" msgid "Dismiss" -msgstr "" - -#, fuzzy +msgstr "Opusti" + msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>" -msgstr "<span weight=\"bold\" size=\"larger\">Dobili ste pošto!</span>" - -#, fuzzy +msgstr "" +"<span weight=\"bold\" size=\"larger\">Dobili ste opozorilo prijatelja!</span>" + msgid "No message" -msgstr "Neznano sporočilo" +msgstr "Ni sporočil" msgid "The following plugins will be unloaded." msgstr "Odloženi bodo naslednji vtičniki." @@ -12379,14 +12405,16 @@ msgid "Select a file" msgstr "Izberi datoteko" -#, fuzzy msgid "Modify Buddy Pounce" -msgstr "Uredi opozorilo prijatelja" +msgstr "Spremeni opozorilo prijatelja" #. Create the "Pounce on Whom" frame. msgid "Pounce on Whom" msgstr "Opozori koga" +msgid "_Account:" +msgstr "_Račun:" + msgid "_Buddy name:" msgstr "_Ime prijatelja:" @@ -12453,49 +12481,49 @@ msgid "Pounce Target" msgstr "Tarča opozorila" -#, fuzzy, c-format +#, c-format msgid "Started typing" -msgstr "začne tipkati" - -#, fuzzy, c-format +msgstr "Začel je tipkati" + +#, c-format msgid "Paused while typing" -msgstr "postane med tipkanjem" - -#, fuzzy, c-format +msgstr "Postal je med tipkanjem" + +#, c-format msgid "Signed on" -msgstr "se prijavi" - -#, fuzzy, c-format +msgstr "Prijavil se je" + +#, c-format msgid "Returned from being idle" -msgstr "%s je spet dejaven (%s)" - -#, fuzzy, c-format +msgstr "Postal je spet dejaven" + +#, c-format msgid "Returned from being away" -msgstr "se vrne iz odsotnosti" - -#, fuzzy, c-format +msgstr "Vrnil se je iz odsotnosti" + +#, c-format msgid "Stopped typing" -msgstr "Prenehal tipkati" - -#, fuzzy, c-format +msgstr "Prenehal je tipkati" + +#, c-format msgid "Signed off" -msgstr "se odjavi" - -#, fuzzy, c-format +msgstr "Odjavil se je" + +#, c-format msgid "Became idle" -msgstr "postane nedejaven" - -#, fuzzy, c-format +msgstr "Postal je nedejaven" + +#, c-format msgid "Went away" -msgstr "ob odsotnosti" - -#, fuzzy, c-format +msgstr "Odšel je" + +#, c-format msgid "Sent a message" -msgstr "Pošlji sporočilo" - -#, fuzzy, c-format +msgstr "Poslal je sporočilo" + +#, c-format msgid "Unknown.... Please report this!" -msgstr "Neznan dogodek opozorila. Poročajte o tem!" +msgstr "Neznano ... Poročajte o tem!" msgid "Smiley theme failed to unpack." msgstr "Teme smejčkov ni mogoče razpakirati." @@ -12520,9 +12548,8 @@ msgstr "_Zapri pomenke s tipko Esc" #. Buddy List Themes -#, fuzzy msgid "Buddy List Theme" -msgstr "Seznam prijateljev" +msgstr "Tema seznama prijateljev" #. System Tray msgid "System Tray Icon" @@ -12661,7 +12688,7 @@ #. TURN server msgid "Relay Server (TURN)" -msgstr "" +msgstr "Relejski strežnik (TURN)" msgid "Proxy Server & Browser" msgstr "Posredovalni strežnik in brskalnik" @@ -13023,12 +13050,10 @@ msgid "Please provide a shortcut to associate with the smiley." msgstr "Podajte tipke za bližnjico, ki bodo povezane s smejčkom." -#, fuzzy, c-format +#, c-format msgid "" "A custom smiley for '%s' already exists. Please use a different shortcut." -msgstr "" -"Smejček po meri za izbrano kombinacijo tipk že obstaja. Navedite druge tipke " -"za bližnjico." +msgstr "Smejček po meri za '%s' že obstaja. Navedite druge tipke za bližnjico." msgid "Duplicate Shortcut" msgstr "Podvojena tipka za bližnjico" @@ -13042,25 +13067,26 @@ msgid "Add Smiley" msgstr "Dodaj smejčka" -#, fuzzy msgid "_Image:" -msgstr "Sl_ika" +msgstr "Sl_ika:" #. Shortcut text -#, fuzzy msgid "S_hortcut text:" -msgstr "Tipke za bližnjico" +msgstr "_Besedilo za bližnjico:" msgid "Smiley" msgstr "Smejček" -#, fuzzy msgid "Shortcut Text" -msgstr "Tipke za bližnjico" +msgstr "Besedilo za bližnjico" msgid "Custom Smiley Manager" msgstr "Upravitelj smejčkov po meri" +#, fuzzy +msgid "Select Buddy Icon" +msgstr "Izberi prijatelja" + msgid "Click to change your buddyicon for this account." msgstr "Kliknite, če želite za ta račun spremeniti ikono prijatelja." @@ -13181,9 +13207,8 @@ msgstr "" "Sliko '%s' ni mogoče naložiti: razlog ni znan, najbrž je datoteka okvarjena" -#, fuzzy msgid "_Open Link" -msgstr "_Odpri povezavo v:" +msgstr "_Odpri povezavo" msgid "_Copy Link Location" msgstr "_Kopiraj lokacijo povezave" @@ -14832,9 +14857,6 @@ #~ "prijateljev. Vnesete lahko tudi psevdonim ali vzdevek prijatelja. Kjer bo " #~ "izvedljivo, bo namesto pojavnega imena prikazan vzdevek.\n" -#~ msgid "A_ccount:" -#~ msgstr "Ra_čun:" - #~ msgid "Pounce only when my status is not available" #~ msgstr "Opozori le tedaj, ko moje stanje ni na voljo"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/po/sw.po Tue Jun 09 23:30:18 2009 +0000 @@ -0,0 +1,13972 @@ +# Copyright (C) 2009 +# This file is distributed under the same license as the Pidgin package. +# , 2009. +msgid "" +msgstr "" +"Project-Id-Version: pidgin\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:54-0700\n" +"PO-Revision-Date: 2009-04-16 22:24+0300\n" +"Last-Translator: \n" +"Language-Team: American English <kde-i18n-doc@lists.kde.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 0.2\n" + +#. Translators may want to transliterate the name. +#. It is not to be translated. +#, fuzzy +msgid "Finch" +msgstr "Maliza" + +#, fuzzy, c-format +msgid "%s. Try `%s -h' for more information.\n" +msgstr "\n" + +#, c-format +msgid "" +"%s\n" +"Usage: %s [OPTION]...\n" +"\n" +" -c, --config=DIR use DIR for config files\n" +" -d, --debug print debugging messages to stderr\n" +" -h, --help display this help and exit\n" +" -n, --nologin don't automatically login\n" +" -v, --version display the current version and exit\n" +msgstr "" + +#, c-format +msgid "" +"%s encountered errors migrating your settings from %s to %s. Please " +"investigate and complete the migration by hand. Please report this error at " +"http://developer.pidgin.im" +msgstr "" + +msgid "Error" +msgstr "Hitikafu " + +msgid "Account was not added" +msgstr "" + +msgid "Username of an account must be non-empty." +msgstr "Jina la mtumiaji haliwezi kuwa wazi " + +#, fuzzy +msgid "New mail notifications" +msgstr "Arifisho la Jumla" + +#, fuzzy +msgid "Remember password" +msgstr "Ingiza tena nywila:" + +msgid "There are no protocol plugins installed." +msgstr "" + +msgid "(You probably forgot to 'make install'.)" +msgstr "" + +msgid "Modify Account" +msgstr "" + +msgid "New Account" +msgstr "" + +#, fuzzy +msgid "Protocol:" +msgstr "Itifaki" + +#, fuzzy +msgid "Username:" +msgstr "Jina la mtumiaji" + +msgid "Password:" +msgstr "Nywila:" + +msgid "Alias:" +msgstr "" + +#. Register checkbox +msgid "Create this account on the server" +msgstr "" + +#. Cancel button +#. Cancel +msgid "Cancel" +msgstr "Ghairi" + +#. Save button +#. Save +msgid "Save" +msgstr "Hifadhi" + +#, fuzzy, c-format +msgid "Are you sure you want to delete %s?" +msgstr "Una uhakika unataka kufuta ithibati yako?" + +#, fuzzy +msgid "Delete Account" +msgstr "Futa mwenyeji" + +#. Delete button +#, fuzzy +msgid "Delete" +msgstr "&Futa" + +msgid "Accounts" +msgstr "" + +msgid "You can enable/disable accounts from the following list." +msgstr "" + +#. Add button +msgid "Add" +msgstr "Ongeza" + +#. Modify button +#, fuzzy +msgid "Modify" +msgstr "R&ekebisha" + +#, c-format +msgid "%s%s%s%s has made %s his or her buddy%s%s" +msgstr "" + +msgid "Add buddy to your list?" +msgstr "" + +#, c-format +msgid "%s%s%s%s wants to add %s to his or her buddy list%s%s" +msgstr "" + +msgid "Authorize buddy?" +msgstr "" + +#, fuzzy +msgid "Authorize" +msgstr "Mamlaka" + +msgid "Deny" +msgstr "Kataa" + +#, c-format +msgid "" +"Online: %d\n" +"Total: %d" +msgstr "" + +#, c-format +msgid "Account: %s (%s)" +msgstr "" + +#, c-format +msgid "" +"\n" +"Last Seen: %s ago" +msgstr "" + +#, fuzzy +msgid "Default" +msgstr "chaguo-msingi" + +msgid "You must provide a username for the buddy." +msgstr "" + +msgid "You must provide a group." +msgstr "" + +msgid "You must select an account." +msgstr "" + +msgid "The selected account is not online." +msgstr "" + +msgid "Error adding buddy" +msgstr "" + +msgid "Username" +msgstr "Jina la mtumiaji" + +#, fuzzy +msgid "Alias (optional)" +msgstr "&Barua pepe (Uchaguzi):" + +msgid "Add in group" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "Add Buddy" +msgstr "" + +msgid "Please enter buddy information." +msgstr "" + +#, fuzzy +msgid "Chats" +msgstr "Chad" + +#. Extract their Name and put it in +msgid "Name" +msgstr "Jina" + +msgid "Alias" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "Auto-join" +msgstr "" + +msgid "Add Chat" +msgstr "" + +msgid "You can edit more information from the context menu later." +msgstr "" + +#, fuzzy +msgid "Error adding group" +msgstr "Hitilafu katika Kutuma Taarifa" + +msgid "You must give a name for the group to add." +msgstr "" + +msgid "Add Group" +msgstr "" + +msgid "Enter the name of the group" +msgstr "" + +msgid "Edit Chat" +msgstr "" + +msgid "Please Update the necessary fields." +msgstr "" + +#, fuzzy +msgid "Edit" +msgstr "&Hariri" + +#, fuzzy +msgid "Edit Settings" +msgstr "Vipimo" + +#, fuzzy +msgid "Information" +msgstr "Taarifa Zaidi" + +msgid "Retrieving..." +msgstr "" + +msgid "Get Info" +msgstr "" + +msgid "Add Buddy Pounce" +msgstr "" + +#, fuzzy +msgid "Send File" +msgstr "Tuma Kwa:" + +msgid "Blocked" +msgstr "Imezuiliwa" + +msgid "Show when offline" +msgstr "" + +#, c-format +msgid "Please enter the new name for %s" +msgstr "" + +#, fuzzy +msgid "Rename" +msgstr "&Badili jina" + +msgid "Set Alias" +msgstr "" + +msgid "Enter empty string to reset the name." +msgstr "" + +msgid "Removing this contact will also remove all the buddies in the contact" +msgstr "" + +msgid "Removing this group will also remove all the buddies in the group" +msgstr "" + +#, fuzzy, c-format +msgid "Are you sure you want to remove %s?" +msgstr "Una uhakika unataka kuondoa nywila zote?" + +#. XXX: anything to do with the returned ui-handle? +#, fuzzy +msgid "Confirm Remove" +msgstr "Thibitisha kufunga" + +msgid "Remove" +msgstr "Ondoa" + +#. Buddy List +msgid "Buddy List" +msgstr "" + +msgid "Place tagged" +msgstr "" + +msgid "Toggle Tag" +msgstr "" + +msgid "View Log" +msgstr "" + +#. General +msgid "Nickname" +msgstr "" + +#. Never know what those translations might end up like... +#. Idle stuff +msgid "Idle" +msgstr "" + +msgid "On Mobile" +msgstr "" + +msgid "New..." +msgstr "" + +msgid "Saved..." +msgstr "" + +msgid "Plugins" +msgstr "Programu tumizi" + +msgid "Block/Unblock" +msgstr "" + +msgid "Block" +msgstr "Zuia" + +msgid "Unblock" +msgstr "" + +msgid "" +"Please enter the username or alias of the person you would like to Block/" +"Unblock." +msgstr "" + +#. Not multiline +#. Not masked? +#. No hints? +msgid "OK" +msgstr "Sawa" + +msgid "New Instant Message" +msgstr "" + +msgid "Please enter the username or alias of the person you would like to IM." +msgstr "" + +#, fuzzy +msgid "Channel" +msgstr "Ghairi" + +msgid "Join a Chat" +msgstr "" + +msgid "Please enter the name of the chat you want to join." +msgstr "" + +msgid "Join" +msgstr "" + +msgid "" +"Please enter the username or alias of the person whose log you would like to " +"view." +msgstr "" + +#. Create the "Options" frame. +msgid "Options" +msgstr "Machaguo" + +msgid "Send IM..." +msgstr "" + +msgid "Block/Unblock..." +msgstr "" + +msgid "Join Chat..." +msgstr "" + +msgid "View Log..." +msgstr "" + +msgid "View All Logs" +msgstr "" + +#, fuzzy +msgid "Show" +msgstr "Onyesha:" + +msgid "Empty groups" +msgstr "" + +#, fuzzy +msgid "Offline buddies" +msgstr "Namna ya Nje ya mkondo" + +#, fuzzy +msgid "Sort" +msgstr "&Panga" + +#, fuzzy +msgid "By Status" +msgstr "Hali" + +msgid "Alphabetically" +msgstr "" + +msgid "By Log Size" +msgstr "" + +msgid "Buddy" +msgstr "" + +#, fuzzy +msgid "Chat" +msgstr "Chad" + +#, fuzzy +msgid "Grouping" +msgstr "Hakuna Mpangilio" + +#, fuzzy +msgid "Certificate Import" +msgstr "Hati ina" + +msgid "Specify a hostname" +msgstr "" + +msgid "Type the host name this certificate is for." +msgstr "" + +#, c-format +msgid "" +"File %s could not be imported.\n" +"Make sure that the file is readable and in PEM format.\n" +msgstr "" + +msgid "Certificate Import Error" +msgstr "" + +msgid "X.509 certificate import failed" +msgstr "" + +#, fuzzy +msgid "Select a PEM certificate" +msgstr "Teua Ithibati" + +#, c-format +msgid "" +"Export to file %s failed.\n" +"Check that you have write permission to the target path\n" +msgstr "" + +#, fuzzy +msgid "Certificate Export Error" +msgstr "Ithibati Ipo" + +msgid "X.509 certificate export failed" +msgstr "" + +#, fuzzy +msgid "PEM X.509 Certificate Export" +msgstr "X.509 Ithibati (PEM)" + +#, fuzzy, c-format +msgid "Certificate for %s" +msgstr "Hati ina" + +#, c-format +msgid "" +"Common name: %s\n" +"\n" +"SHA1 fingerprint:\n" +"%s" +msgstr "" + +#, fuzzy +msgid "SSL Host Certificate" +msgstr "Ithibati SSL ya Mteja" + +#, c-format +msgid "Really delete certificate for %s?" +msgstr "" + +msgid "Confirm certificate delete" +msgstr "" + +msgid "Certificate Manager" +msgstr "Meneja Ithibati" + +#. Creating the user splits +msgid "Hostname" +msgstr "" + +#, fuzzy +msgid "Info" +msgstr "Taarifa:" + +#. Close button +msgid "Close" +msgstr "Funga" + +#, fuzzy, c-format +msgid "%s (%s)" +msgstr "%S (%S)" + +#, c-format +msgid "%s disconnected." +msgstr "" + +#, c-format +msgid "" +"%s\n" +"\n" +"Finch will not attempt to reconnect the account until you correct the error " +"and re-enable the account." +msgstr "" + +msgid "Re-enable Account" +msgstr "" + +msgid "" +"The account has disconnected and you are no longer in this chat. You will be " +"automatically rejoined in the chat when the account reconnects." +msgstr "" + +msgid "No such command." +msgstr "" + +msgid "Syntax Error: You typed the wrong number of arguments to that command." +msgstr "" + +msgid "Your command failed for an unknown reason." +msgstr "" + +msgid "That command only works in chats, not IMs." +msgstr "" + +msgid "That command only works in IMs, not chats." +msgstr "" + +msgid "That command doesn't work on this protocol." +msgstr "" + +msgid "Message was not sent, because you are not signed on." +msgstr "" + +#, c-format +msgid "%s (%s -- %s)" +msgstr "" + +#, c-format +msgid "%s [%s]" +msgstr "" + +#, c-format +msgid "" +"\n" +"%s is typing..." +msgstr "" + +msgid "You have left this chat." +msgstr "" + +msgid "Logging started. Future messages in this conversation will be logged." +msgstr "" + +msgid "" +"Logging stopped. Future messages in this conversation will not be logged." +msgstr "" + +#, fuzzy +msgid "Send To" +msgstr "Tuma kwa:" + +#, fuzzy +msgid "Conversation" +msgstr "Unganisho" + +msgid "Clear Scrollback" +msgstr "" + +#, fuzzy +msgid "Show Timestamps" +msgstr "Onyesha Ufafanuzi" + +msgid "Add Buddy Pounce..." +msgstr "" + +msgid "Invite..." +msgstr "" + +msgid "Enable Logging" +msgstr "" + +msgid "Enable Sounds" +msgstr "" + +msgid "<AUTO-REPLY> " +msgstr "" + +#, c-format +msgid "List of %d user:\n" +msgid_plural "List of %d users:\n" +msgstr[0] "" +msgstr[1] "" + +msgid "Supported debug options are: version" +msgstr "" + +msgid "No such command (in this context)." +msgstr "" + +msgid "" +"Use \"/help <command>\" for help on a specific command.\n" +"The following commands are available in this context:\n" +msgstr "" + +#, c-format +msgid "" +"%s is not a valid message class. See '/help msgcolor' for valid message " +"classes." +msgstr "" + +#, c-format +msgid "%s is not a valid color. See '/help msgcolor' for valid colors." +msgstr "" + +msgid "" +"say <message>: Send a message normally as if you weren't using a " +"command." +msgstr "" + +msgid "me <action>: Send an IRC style action to a buddy or chat." +msgstr "" + +msgid "" +"debug <option>: Send various debug information to the current " +"conversation." +msgstr "" + +msgid "clear: Clears the conversation scrollback." +msgstr "" + +msgid "help <command>: Help on a specific command." +msgstr "" + +msgid "users: Show the list of users in the chat." +msgstr "" + +msgid "plugins: Show the plugins window." +msgstr "" + +msgid "buddylist: Show the buddylist." +msgstr "" + +msgid "accounts: Show the accounts window." +msgstr "" + +msgid "debugwin: Show the debug window." +msgstr "" + +msgid "prefs: Show the preference window." +msgstr "" + +msgid "statuses: Show the savedstatuses window." +msgstr "" + +msgid "" +"msgcolor <class> <foreground> <background>: Set the color " +"for different classes of messages in the conversation window.<br> <" +"class>: receive, send, highlight, action, timestamp<br> <foreground/" +"background>: black, red, green, blue, white, gray, darkgray, magenta, " +"cyan, default<br><br>EXAMPLE:<br> msgcolor send cyan default" +msgstr "" + +#, fuzzy +msgid "Unable to open file." +msgstr "Nimeshindwa Kusasisha" + +#, fuzzy +msgid "Debug Window" +msgstr "Dirisha Jipya" + +#. XXX: Setting the GROW_Y for the following widgets don't make sense. But right now +#. * it's necessary to make the width of the debug window resizable ... like I said, +#. * it doesn't make sense. The bug is likely in the packing in gntbox.c. +#. +#, fuzzy +msgid "Clear" +msgstr "&Safisha" + +#, fuzzy +msgid "Filter:" +msgstr "Ch&uja:" + +msgid "Pause" +msgstr "Simamisha" + +#, c-format +msgid "File Transfers - %d%% of %d file" +msgid_plural "File Transfers - %d%% of %d files" +msgstr[0] "" +msgstr[1] "" + +#. Create the window. +msgid "File Transfers" +msgstr "" + +#, fuzzy +msgid "Progress" +msgstr "Hatua:" + +#, fuzzy +msgid "Filename" +msgstr "Jina la faili:" + +msgid "Size" +msgstr "Saizi" + +#, fuzzy +msgid "Speed" +msgstr "Kilishi mkono" + +#, fuzzy +msgid "Remaining" +msgstr "#1 imebakia" + +#. XXX: Use of ggp_str_to_uin() is an ugly hack! +msgid "Status" +msgstr "Hali" + +msgid "Close this window when all transfers finish" +msgstr "" + +msgid "Clear finished transfers" +msgstr "" + +#, fuzzy +msgid "Stop" +msgstr "&Simama" + +msgid "Waiting for transfer to begin" +msgstr "" + +msgid "Canceled" +msgstr "Imeghairishwa" + +msgid "Failed" +msgstr "Imeshindwa" + +#, c-format +msgid "%.2f KiB/s" +msgstr "" + +msgid "Sent" +msgstr "" + +msgid "Received" +msgstr "" + +msgid "Finished" +msgstr "Imemaliza" + +#, c-format +msgid "The file was saved as %s." +msgstr "" + +#, fuzzy +msgid "Sending" +msgstr "kuumbia" + +#, fuzzy +msgid "Receiving" +msgstr "teremua" + +#, c-format +msgid "Conversation in %s on %s" +msgstr "" + +#, c-format +msgid "Conversation with %s on %s" +msgstr "" + +#, fuzzy +msgid "%B %Y" +msgstr "%S %S" + +msgid "" +"System events will only be logged if the \"Log all status changes to system " +"log\" preference is enabled." +msgstr "" + +msgid "" +"Instant messages will only be logged if the \"Log all instant messages\" " +"preference is enabled." +msgstr "" + +msgid "" +"Chats will only be logged if the \"Log all chats\" preference is enabled." +msgstr "" + +#, fuzzy +msgid "No logs were found" +msgstr "Hakuna masasisho yaliyopatikana." + +msgid "Total log size:" +msgstr "" + +#. Search box ********* +msgid "Scroll/Search: " +msgstr "" + +#, c-format +msgid "Conversations in %s" +msgstr "" + +#, c-format +msgid "Conversations with %s" +msgstr "" + +msgid "All Conversations" +msgstr "" + +msgid "System Log" +msgstr "" + +msgid "Calling ... " +msgstr "" + +msgid "Hangup" +msgstr "" + +#. Number of actions +msgid "Accept" +msgstr "" + +#, fuzzy +msgid "Reject" +msgstr "Seti upya" + +msgid "Call in progress." +msgstr "" + +msgid "The call has been terminated." +msgstr "" + +#, c-format +msgid "%s wishes to start an audio session with you." +msgstr "" + +#, c-format +msgid "%s is trying to start an unsupported media session type with you." +msgstr "" + +msgid "You have rejected the call." +msgstr "" + +msgid "call: Make an audio call." +msgstr "" + +#, fuzzy +msgid "Emails" +msgstr "Barua pepe" + +msgid "You have mail!" +msgstr "" + +#, fuzzy +msgid "Sender" +msgstr "Seva" + +msgid "Subject" +msgstr "Mhusika" + +#, c-format +msgid "%s (%s) has %d new message." +msgid_plural "%s (%s) has %d new messages." +msgstr[0] "" +msgstr[1] "" + +#, fuzzy +msgid "New Mail" +msgstr "Tabo mpya" + +#, c-format +msgid "Info for %s" +msgstr "" + +#, fuzzy +msgid "Buddy Information" +msgstr "Fic&ha Taarifa" + +msgid "Continue" +msgstr "Endelea" + +msgid "IM" +msgstr "" + +msgid "Invite" +msgstr "" + +msgid "(none)" +msgstr "" + +msgid "URI" +msgstr "URI" + +msgid "ERROR" +msgstr "HITILAFU" + +msgid "loading plugin failed" +msgstr "" + +msgid "unloading plugin failed" +msgstr "" + +#, c-format +msgid "" +"Name: %s\n" +"Version: %s\n" +"Description: %s\n" +"Author: %s\n" +"Website: %s\n" +"Filename: %s\n" +msgstr "" + +msgid "Plugin need to be loaded before you can configure it." +msgstr "" + +msgid "No configuration options for this plugin." +msgstr "" + +msgid "Error loading plugin" +msgstr "" + +msgid "The selected file is not a valid plugin." +msgstr "" + +msgid "" +"Please open the debug window and try again to see the exact error message." +msgstr "" + +#, fuzzy +msgid "Select plugin to install" +msgstr "Chagua mandhari kusakinisha" + +msgid "You can (un)load plugins from the following list." +msgstr "" + +#, fuzzy +msgid "Install Plugin..." +msgstr "Usakinishaji Programu-jalizi" + +msgid "Configure Plugin" +msgstr "" + +#. copy the preferences to tmp values... +#. * I liked "take affect immediately" Oh well :-( +#. (that should have been "effect," right?) +#. Back to instant-apply! I win! BU-HAHAHA! +#. Create the window +msgid "Preferences" +msgstr "Mapendekezo" + +msgid "Please enter a buddy to pounce." +msgstr "" + +msgid "New Buddy Pounce" +msgstr "" + +msgid "Edit Buddy Pounce" +msgstr "" + +msgid "Pounce Who" +msgstr "" + +#. Account: +msgid "Account:" +msgstr "" + +msgid "Buddy name:" +msgstr "" + +#. Create the "Pounce When Buddy..." frame. +msgid "Pounce When Buddy..." +msgstr "" + +msgid "Signs on" +msgstr "" + +msgid "Signs off" +msgstr "" + +msgid "Goes away" +msgstr "" + +msgid "Returns from away" +msgstr "" + +msgid "Becomes idle" +msgstr "" + +msgid "Is no longer idle" +msgstr "" + +msgid "Starts typing" +msgstr "" + +msgid "Pauses while typing" +msgstr "" + +msgid "Stops typing" +msgstr "" + +msgid "Sends a message" +msgstr "" + +#. Create the "Action" frame. +#, fuzzy +msgid "Action" +msgstr "&Tendo" + +#, fuzzy +msgid "Open an IM window" +msgstr "Fungua dirisha jipya" + +msgid "Pop up a notification" +msgstr "" + +msgid "Send a message" +msgstr "" + +msgid "Execute a command" +msgstr "" + +msgid "Play a sound" +msgstr "" + +msgid "Pounce only when my status is not Available" +msgstr "" + +msgid "Recurring" +msgstr "" + +msgid "Cannot create pounce" +msgstr "" + +msgid "You do not have any accounts." +msgstr "" + +msgid "You must create an account first before you can create a pounce." +msgstr "" + +#, fuzzy, c-format +msgid "Are you sure you want to delete the pounce on %s for %s?" +msgstr "Je una uhakika uantaka kufuta ithibati hizi?" + +msgid "Buddy Pounces" +msgstr "" + +#, c-format +msgid "%s has started typing to you (%s)" +msgstr "" + +#, c-format +msgid "%s has paused while typing to you (%s)" +msgstr "" + +#, c-format +msgid "%s has signed on (%s)" +msgstr "" + +#, c-format +msgid "%s has returned from being idle (%s)" +msgstr "" + +#, c-format +msgid "%s has returned from being away (%s)" +msgstr "" + +#, c-format +msgid "%s has stopped typing to you (%s)" +msgstr "" + +#, c-format +msgid "%s has signed off (%s)" +msgstr "" + +#, c-format +msgid "%s has become idle (%s)" +msgstr "" + +#, c-format +msgid "%s has gone away. (%s)" +msgstr "" + +#, c-format +msgid "%s has sent you a message. (%s)" +msgstr "" + +msgid "Unknown pounce event. Please report this!" +msgstr "" + +msgid "Based on keyboard use" +msgstr "" + +msgid "From last sent message" +msgstr "" + +#, fuzzy +msgid "Never" +msgstr "Seva" + +msgid "Show Idle Time" +msgstr "" + +msgid "Show Offline Buddies" +msgstr "" + +msgid "Notify buddies when you are typing" +msgstr "" + +msgid "Log format" +msgstr "" + +#, fuzzy +msgid "Log IMs" +msgstr "I&ngia" + +msgid "Log chats" +msgstr "" + +msgid "Log status change events" +msgstr "" + +msgid "Report Idle time" +msgstr "" + +#, fuzzy +msgid "Change status when idle" +msgstr "&Badili matini ya ufito hali" + +msgid "Minutes before changing status" +msgstr "" + +#, fuzzy +msgid "Change status to" +msgstr "&Badili matini ya ufito hali" + +#, fuzzy +msgid "Conversations" +msgstr "Unganisho" + +#, fuzzy +msgid "Logging" +msgstr "Inapakia" + +msgid "You must fill all the required fields." +msgstr "" + +msgid "The required fields are underlined." +msgstr "" + +msgid "Not implemented yet." +msgstr "" + +#, fuzzy +msgid "Save File..." +msgstr "&Hifadhi faili" + +#, fuzzy +msgid "Open File..." +msgstr "Fungua Faili" + +msgid "Choose Location..." +msgstr "" + +msgid "Hit 'Enter' to find more rooms of this category." +msgstr "" + +msgid "Get" +msgstr "" + +#. Create the window. +msgid "Room List" +msgstr "" + +msgid "Buddy logs in" +msgstr "" + +msgid "Buddy logs out" +msgstr "" + +msgid "Message received" +msgstr "" + +msgid "Message received begins conversation" +msgstr "" + +#, fuzzy +msgid "Message sent" +msgstr "Ujumbe haujaenda." + +msgid "Person enters chat" +msgstr "" + +msgid "Person leaves chat" +msgstr "" + +msgid "You talk in chat" +msgstr "" + +msgid "Others talk in chat" +msgstr "" + +msgid "Someone says your username in chat" +msgstr "" + +msgid "GStreamer Failure" +msgstr "" + +msgid "GStreamer failed to initialize." +msgstr "" + +#, fuzzy +msgid "(default)" +msgstr "chaguo-msingi" + +msgid "Select Sound File ..." +msgstr "" + +#, fuzzy +msgid "Sound Preferences" +msgstr "&Mapendekezo ya Tovuti" + +#, fuzzy +msgid "Profiles" +msgstr "Mafaili_%S" + +msgid "Automatic" +msgstr "" + +msgid "Console Beep" +msgstr "" + +msgid "Command" +msgstr "" + +msgid "No Sound" +msgstr "" + +msgid "Sound Method" +msgstr "" + +msgid "Method: " +msgstr "" + +#, c-format +msgid "" +"Sound Command\n" +"(%s for filename)" +msgstr "" + +#. Sound options +msgid "Sound Options" +msgstr "" + +msgid "Sounds when conversation has focus" +msgstr "" + +#, fuzzy +msgid "Always" +msgstr "Uliza daima" + +msgid "Only when available" +msgstr "" + +msgid "Only when not available" +msgstr "" + +msgid "Volume(0-100):" +msgstr "" + +#. Sound events +msgid "Sound Events" +msgstr "" + +msgid "Event" +msgstr "" + +#, fuzzy +msgid "File" +msgstr "Faili:" + +#, fuzzy +msgid "Test" +msgstr "Matini" + +msgid "Reset" +msgstr "Seti upya" + +#, fuzzy +msgid "Choose..." +msgstr "Chagua…" + +#, fuzzy, c-format +msgid "Are you sure you want to delete \"%s\"" +msgstr "Una uhakika unataka kufuta ithibati yako?" + +#, fuzzy +msgid "Delete Status" +msgstr "Futa mwenyeji" + +msgid "Saved Statuses" +msgstr "" + +msgid "Title" +msgstr "Jina" + +msgid "Type" +msgstr "Aina" + +#. Statuses are almost all the same. Define a macro to reduce code repetition. +#. PurpleStatusPrimitive +#. id - use default +#. name - use default +#. saveable +#. user_settable +#. not independent +#. Attributes - each status can have a message. +msgid "Message" +msgstr "Ujumbe" + +#. Use +msgid "Use" +msgstr "" + +#, fuzzy +msgid "Invalid title" +msgstr "Kizuizi batili" + +msgid "Please enter a non-empty title for the status." +msgstr "" + +#, fuzzy +msgid "Duplicate title" +msgstr "sifa rudufu" + +msgid "Please enter a different title for the status." +msgstr "" + +#, fuzzy +msgid "Substatus" +msgstr "Hali" + +msgid "Status:" +msgstr "Hali:" + +#, fuzzy +msgid "Message:" +msgstr "Ujumbe" + +#, fuzzy +msgid "Edit Status" +msgstr "Marekani" + +msgid "Use different status for following accounts" +msgstr "" + +#. Save & Use +#, fuzzy +msgid "Save & Use" +msgstr "Hifadhi Kama" + +msgid "Certificates" +msgstr "Hati" + +msgid "Sounds" +msgstr "" + +#, fuzzy +msgid "Statuses" +msgstr "Hali" + +msgid "Error loading the plugin." +msgstr "" + +msgid "Couldn't find X display" +msgstr "" + +msgid "Couldn't find window" +msgstr "" + +msgid "This plugin cannot be loaded because it was not built with X11 support." +msgstr "" + +msgid "GntClipboard" +msgstr "" + +msgid "Clipboard plugin" +msgstr "" + +msgid "" +"When the gnt clipboard contents change, the contents are made available to " +"X, if possible." +msgstr "" + +#, c-format +msgid "%s just signed on" +msgstr "" + +#, c-format +msgid "%s just signed off" +msgstr "" + +#, c-format +msgid "%s sent you a message" +msgstr "" + +#, c-format +msgid "%s said your nick in %s" +msgstr "" + +#, c-format +msgid "%s sent a message in %s" +msgstr "" + +msgid "Buddy signs on/off" +msgstr "" + +msgid "You receive an IM" +msgstr "" + +msgid "Someone speaks in a chat" +msgstr "" + +msgid "Someone says your name in a chat" +msgstr "" + +msgid "Notify with a toaster when" +msgstr "" + +msgid "Beep too!" +msgstr "" + +msgid "Set URGENT for the terminal window." +msgstr "" + +msgid "GntGf" +msgstr "" + +msgid "Toaster plugin" +msgstr "" + +#, c-format +msgid "<b>Conversation with %s on %s:</b><br>" +msgstr "" + +msgid "History Plugin Requires Logging" +msgstr "" + +msgid "" +"Logging can be enabled from Tools -> Preferences -> Logging.\n" +"\n" +"Enabling logs for instant messages and/or chats will activate history for " +"the same conversation type(s)." +msgstr "" + +#, fuzzy +msgid "GntHistory" +msgstr "Historia" + +msgid "Shows recently logged conversations in new conversations." +msgstr "" + +msgid "" +"When a new conversation is opened this plugin will insert the last " +"conversation into the current conversation." +msgstr "" + +#, fuzzy +msgid "Online" +msgstr "Nenda mkondoni" + +msgid "Offline" +msgstr "" + +msgid "Online Buddies" +msgstr "" + +#, fuzzy +msgid "Offline Buddies" +msgstr "Namna ya Nje ya mkondo" + +msgid "Online/Offline" +msgstr "" + +msgid "Meebo" +msgstr "" + +msgid "No Grouping" +msgstr "Hakuna Mpangilio" + +msgid "Nested Subgroup" +msgstr "" + +msgid "Nested Grouping (experimental)" +msgstr "" + +msgid "Provides alternate buddylist grouping options." +msgstr "" + +msgid "Lastlog" +msgstr "" + +#. Translator Note: The "backlog" is the conversation buffer/history. +msgid "lastlog: Searches for a substring in the backlog." +msgstr "" + +msgid "GntLastlog" +msgstr "" + +msgid "Lastlog plugin." +msgstr "" + +#, c-format +msgid "" +"\n" +"Fetching TinyURL..." +msgstr "" + +msgid "Only create TinyURL for urls of this length or greater" +msgstr "" + +msgid "TinyURL (or other) address prefix" +msgstr "" + +msgid "TinyURL" +msgstr "" + +msgid "TinyURL plugin" +msgstr "" + +msgid "When receiving a message with URL(s), TinyURL for easier copying" +msgstr "" + +msgid "accounts" +msgstr "" + +msgid "Password is required to sign on." +msgstr "" + +#, fuzzy, c-format +msgid "Enter password for %s (%s)" +msgstr "Ingiza nywila kwa ajili ya %1$S kwenye %2$S" + +#, fuzzy +msgid "Enter Password" +msgstr "Ingiza nywila mpya:" + +#, fuzzy +msgid "Save password" +msgstr "Nywila Zilizohifadhiwa" + +#, c-format +msgid "Missing protocol plugin for %s" +msgstr "" + +#, fuzzy +msgid "Connection Error" +msgstr "Hitilafu ya Sanidi" + +msgid "New passwords do not match." +msgstr "" + +msgid "Fill out all fields completely." +msgstr "" + +msgid "Original password" +msgstr "" + +#, fuzzy +msgid "New password" +msgstr "Nyilwa mpya:" + +#, fuzzy +msgid "New password (again)" +msgstr "Nywila mpya (tena):" + +#, c-format +msgid "Change password for %s" +msgstr "" + +msgid "Please enter your current password and your new password." +msgstr "" + +#, c-format +msgid "Change user information for %s" +msgstr "" + +msgid "Set User Info" +msgstr "" + +msgid "Unknown" +msgstr "Isiyojulikana" + +msgid "Buddies" +msgstr "" + +msgid "buddy list" +msgstr "" + +msgid "(DOES NOT MATCH)" +msgstr "" + +#. Make messages +#, c-format +msgid "%s has presented the following certificate for just-this-once use:" +msgstr "" + +#, c-format +msgid "" +"Common name: %s %s\n" +"Fingerprint (SHA1): %s" +msgstr "" + +#. TODO: Find what the handle ought to be +msgid "Single-use Certificate Verification" +msgstr "" + +#. Scheme name +#. Pool name +#, fuzzy +msgid "Certificate Authorities" +msgstr "Hatifisha Sera" + +#. Scheme name +#. Pool name +msgid "SSL Peers Cache" +msgstr "" + +#. Make messages +#, fuzzy, c-format +msgid "Accept certificate for %s?" +msgstr "Rekebisha cheli au ithibati ya uaminifu" + +#. TODO: Find what the handle ought to be +#, fuzzy +msgid "SSL Certificate Verification" +msgstr "Kagua Uhalisia wa Hati" + +#, fuzzy +msgid "_View Certificate..." +msgstr "Angalia Hati" + +#. Prompt the user to authenticate the certificate +#. vrq will be completed by user_auth +#, c-format +msgid "" +"The certificate presented by \"%s\" is self-signed. It cannot be " +"automatically checked." +msgstr "" + +#, c-format +msgid "The certificate chain presented for %s is not valid." +msgstr "" + +#. TODO: Make this error either block the ensuing SSL +#. connection error until the user dismisses this one, or +#. stifle it. +#. TODO: Probably wrong. +#. TODO: Probably wrong +#, fuzzy +msgid "SSL Certificate Error" +msgstr "Mamlaka ya Ithibati SSL" + +#, fuzzy +msgid "Invalid certificate chain" +msgstr "Hati Thibati" + +#. vrq will be completed by user_auth +msgid "" +"You have no database of root certificates, so this certificate cannot be " +"validated." +msgstr "" + +#. vrq will be completed by user_auth +msgid "" +"The root certificate this one claims to be issued by is unknown to Pidgin." +msgstr "" + +#, c-format +msgid "" +"The certificate chain presented by %s does not have a valid digital " +"signature from the Certificate Authority from which it claims to have a " +"signature." +msgstr "" + +msgid "Invalid certificate authority signature" +msgstr "" + +#. Prompt the user to authenticate the certificate +#. TODO: Provide the user with more guidance about why he is +#. being prompted +#. vrq will be completed by user_auth +#, c-format +msgid "" +"The certificate presented by \"%s\" claims to be from \"%s\" instead. This " +"could mean that you are not connecting to the service you believe you are." +msgstr "" + +#. Make messages +#, c-format +msgid "" +"Common name: %s\n" +"\n" +"Fingerprint (SHA1): %s\n" +"\n" +"Activation date: %s\n" +"Expiration date: %s\n" +msgstr "" + +#. TODO: Find what the handle ought to be +#, fuzzy +msgid "Certificate Information" +msgstr "Kagua Uhalisia wa Hati" + +#, fuzzy +msgid "Registration Error" +msgstr "Hitilafu ya Sanidi" + +#, fuzzy +msgid "Unregistration Error" +msgstr "Hitilafu ya Sanidi" + +#, c-format +msgid "+++ %s signed on" +msgstr "" + +#, c-format +msgid "+++ %s signed off" +msgstr "" + +#. Unknown error +#. Unknown error! +msgid "Unknown error" +msgstr "Hitilafu isiyojulikana" + +msgid "Unable to send message: The message is too large." +msgstr "" + +#, c-format +msgid "Unable to send message to %s." +msgstr "" + +msgid "The message is too large." +msgstr "" + +#, fuzzy +msgid "Unable to send message." +msgstr "Haiwezi kuongeza moduli" + +msgid "Send Message" +msgstr "" + +msgid "_Send Message" +msgstr "" + +#, c-format +msgid "%s entered the room." +msgstr "" + +#, c-format +msgid "%s [<I>%s</I>] entered the room." +msgstr "" + +#, c-format +msgid "You are now known as %s" +msgstr "" + +#, c-format +msgid "%s is now known as %s" +msgstr "" + +#, c-format +msgid "%s left the room." +msgstr "" + +#, c-format +msgid "%s left the room (%s)." +msgstr "" + +msgid "Invite to chat" +msgstr "" + +#. Put our happy label in it. +msgid "" +"Please enter the name of the user you wish to invite, along with an optional " +"invite message." +msgstr "" + +#, c-format +msgid "Failed to get connection: %s" +msgstr "" + +#, c-format +msgid "Failed to get name: %s" +msgstr "" + +#, c-format +msgid "Failed to get serv name: %s" +msgstr "" + +msgid "Purple's D-BUS server is not running for the reason listed below" +msgstr "" + +#, fuzzy +msgid "No name" +msgstr "Jina la DNS" + +msgid "Unable to create new resolver process\n" +msgstr "" + +msgid "Unable to send request to resolver process\n" +msgstr "" + +#, c-format +msgid "" +"Error resolving %s:\n" +"%s" +msgstr "" + +#, c-format +msgid "Error resolving %s: %d" +msgstr "" + +#, c-format +msgid "" +"Error reading from resolver process:\n" +"%s" +msgstr "" + +#, c-format +msgid "Resolver process exited without answering our request" +msgstr "" + +#, c-format +msgid "Thread creation failure: %s" +msgstr "" + +#, fuzzy +msgid "Unknown reason" +msgstr "Hitilafu isiyojulikana" + +#, c-format +msgid "" +"Error reading %s: \n" +"%s.\n" +msgstr "" + +#, c-format +msgid "" +"Error writing %s: \n" +"%s.\n" +msgstr "" + +#, fuzzy, c-format +msgid "" +"Error accessing %s: \n" +"%s.\n" +msgstr "Hitilafu katika kufikia %S" + +#, fuzzy +msgid "Directory is not writable." +msgstr "Faili %S haliandikiki." + +msgid "Cannot send a file of 0 bytes." +msgstr "" + +msgid "Cannot send a directory." +msgstr "" + +#, c-format +msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n" +msgstr "" + +#, c-format +msgid "%s wants to send you %s (%s)" +msgstr "" + +#, c-format +msgid "%s wants to send you a file" +msgstr "" + +#, c-format +msgid "Accept file transfer request from %s?" +msgstr "" + +#, c-format +msgid "" +"A file is available for download from:\n" +"Remote host: %s\n" +"Remote port: %d" +msgstr "" + +#, c-format +msgid "%s is offering to send file %s" +msgstr "" + +#, c-format +msgid "%s is not a valid filename.\n" +msgstr "" + +#, c-format +msgid "Offering to send %s to %s" +msgstr "" + +#, c-format +msgid "Starting transfer of %s from %s" +msgstr "" + +#, c-format +msgid "Transfer of file %s complete" +msgstr "" + +msgid "File transfer complete" +msgstr "" + +#, c-format +msgid "You canceled the transfer of %s" +msgstr "" + +msgid "File transfer cancelled" +msgstr "" + +#, c-format +msgid "%s canceled the transfer of %s" +msgstr "" + +#, c-format +msgid "%s canceled the file transfer" +msgstr "" + +#, c-format +msgid "File transfer to %s failed." +msgstr "" + +#, c-format +msgid "File transfer from %s failed." +msgstr "" + +msgid "Run the command in a terminal" +msgstr "" + +msgid "The command used to handle \"aim\" URLs, if enabled." +msgstr "" + +msgid "The command used to handle \"gg\" URLs, if enabled." +msgstr "" + +msgid "The command used to handle \"icq\" URLs, if enabled." +msgstr "" + +msgid "The command used to handle \"irc\" URLs, if enabled." +msgstr "" + +msgid "The command used to handle \"msnim\" URLs, if enabled." +msgstr "" + +msgid "The command used to handle \"sip\" URLs, if enabled." +msgstr "" + +msgid "The command used to handle \"xmpp\" URLs, if enabled." +msgstr "" + +msgid "The command used to handle \"ymsgr\" URLs, if enabled." +msgstr "" + +msgid "The handler for \"aim\" URLs" +msgstr "" + +msgid "The handler for \"gg\" URLs" +msgstr "" + +msgid "The handler for \"icq\" URLs" +msgstr "" + +msgid "The handler for \"irc\" URLs" +msgstr "" + +msgid "The handler for \"msnim\" URLs" +msgstr "" + +msgid "The handler for \"sip\" URLs" +msgstr "" + +msgid "The handler for \"xmpp\" URLs" +msgstr "" + +msgid "The handler for \"ymsgr\" URLs" +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"aim\" " +"URLs." +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"gg\" " +"URLs." +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"icq\" " +"URLs." +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"irc\" " +"URLs." +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"msnim\" " +"URLs." +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"sip\" " +"URLs." +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"xmpp\" " +"URLs." +msgstr "" + +msgid "" +"True if the command specified in the \"command\" key should handle \"ymsgr\" " +"URLs." +msgstr "" + +msgid "" +"True if the command used to handle this type of URL should be run in a " +"terminal." +msgstr "" + +msgid "Whether the specified command should handle \"aim\" URLs" +msgstr "" + +msgid "Whether the specified command should handle \"gg\" URLs" +msgstr "" + +msgid "Whether the specified command should handle \"icq\" URLs" +msgstr "" + +msgid "Whether the specified command should handle \"irc\" URLs" +msgstr "" + +msgid "Whether the specified command should handle \"msnim\" URLs" +msgstr "" + +msgid "Whether the specified command should handle \"sip\" URLs" +msgstr "" + +msgid "Whether the specified command should handle \"xmpp\" URLs" +msgstr "" + +msgid "Whether the specified command should handle \"ymsgr\" URLs" +msgstr "" + +msgid "<b><font color=\"red\">The logger has no read function</font></b>" +msgstr "" + +msgid "HTML" +msgstr "" + +msgid "Plain text" +msgstr "" + +msgid "Old flat format" +msgstr "" + +msgid "Logging of this conversation failed." +msgstr "" + +msgid "XML" +msgstr "XML" + +#, c-format +msgid "" +"<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" +"REPLY>:</b></font> %s<br/>\n" +msgstr "" + +#, c-format +msgid "" +"<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" +"REPLY>:</b></font> %s<br/>\n" +msgstr "" + +msgid "<font color=\"red\"><b>Unable to find log path!</b></font>" +msgstr "" + +#, c-format +msgid "<font color=\"red\"><b>Could not read file: %s</b></font>" +msgstr "" + +#, c-format +msgid "(%s) %s <AUTO-REPLY>: %s\n" +msgstr "" + +#, c-format +msgid "You are using %s, but this plugin requires %s." +msgstr "" + +msgid "This plugin has not defined an ID." +msgstr "" + +#, c-format +msgid "Plugin magic mismatch %d (need %d)" +msgstr "" + +#, c-format +msgid "ABI version mismatch %d.%d.x (need %d.%d.x)" +msgstr "" + +msgid "" +"Plugin does not implement all required functions (list_icon, login and close)" +msgstr "" + +#, c-format +msgid "" +"The required plugin %s was not found. Please install this plugin and try " +"again." +msgstr "" + +msgid "Unable to load the plugin" +msgstr "" + +#, c-format +msgid "The required plugin %s was unable to load." +msgstr "" + +msgid "Unable to load your plugin." +msgstr "" + +#, c-format +msgid "%s requires %s, but it failed to unload." +msgstr "" + +msgid "Autoaccept" +msgstr "" + +msgid "Auto-accept file transfer requests from selected users." +msgstr "" + +#, c-format +msgid "Autoaccepted file transfer of \"%s\" from \"%s\" completed." +msgstr "" + +msgid "Autoaccept complete" +msgstr "" + +#, c-format +msgid "When a file-transfer request arrives from %s" +msgstr "" + +msgid "Set Autoaccept Setting" +msgstr "" + +#, fuzzy +msgid "_Save" +msgstr "Hifadhi" + +#, fuzzy +msgid "_Cancel" +msgstr "Ghairi" + +msgid "Ask" +msgstr "" + +msgid "Auto Accept" +msgstr "" + +#, fuzzy +msgid "Auto Reject" +msgstr "Gungu&a Kiotomati" + +msgid "Autoaccept File Transfers..." +msgstr "" + +#. XXX: Is there a better way than this? There really should be. +msgid "" +"Path to save the files in\n" +"(Please provide the full path)" +msgstr "" + +msgid "Automatically reject from users not in buddy list" +msgstr "" + +msgid "" +"Notify with a popup when an autoaccepted file transfer is complete\n" +"(only when there's no conversation with the sender)" +msgstr "" + +msgid "Create a new directory for each user" +msgstr "" + +#, fuzzy +msgid "Notes" +msgstr "Hakuna vitu" + +msgid "Enter your notes below..." +msgstr "" + +msgid "Edit Notes..." +msgstr "" + +#. *< major version +#. *< minor version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Buddy Notes" +msgstr "" + +#. *< name +#. *< version +msgid "Store notes on particular buddies." +msgstr "" + +#. *< summary +msgid "Adds the option to store notes for buddies on your buddy list." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Cipher Test" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Tests the ciphers that ship with libpurple." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "DBus Example" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "DBus Plugin Example" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#, fuzzy +msgid "File Control" +msgstr "Fi&cha Visisimamizi" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Allows control by entering commands in a file." +msgstr "" + +msgid "Minutes" +msgstr "" + +#. This is a cultural reference. Dy'er Mak'er is a song by Led Zeppelin. +#. If that doesn't translate well into your language, drop the 's before translating. +msgid "I'dle Mak'er" +msgstr "" + +msgid "Set Account Idle Time" +msgstr "" + +msgid "_Set" +msgstr "" + +msgid "None of your accounts are idle." +msgstr "" + +msgid "Unset Account Idle Time" +msgstr "" + +msgid "_Unset" +msgstr "" + +msgid "Set Idle Time for All Accounts" +msgstr "" + +msgid "Unset Idle Time for All Idled Accounts" +msgstr "" + +msgid "Allows you to hand-configure how long you've been idle" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "IPC Test Client" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Test plugin IPC support, as a client." +msgstr "" + +#. * description +msgid "" +"Test plugin IPC support, as a client. This locates the server plugin and " +"calls the commands registered." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "IPC Test Server" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Test plugin IPC support, as a server." +msgstr "" + +#. * description +msgid "Test plugin IPC support, as a server. This registers the IPC commands." +msgstr "" + +msgid "Join/Part Hiding Configuration" +msgstr "" + +#, fuzzy +msgid "Minimum Room Size" +msgstr "Upe&ochini wa fonti size:" + +msgid "User Inactivity Timeout (in minutes)" +msgstr "" + +msgid "Apply hiding rules to buddies" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Join/Part Hiding" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Hides extraneous join/part messages." +msgstr "" + +#. * description +msgid "" +"This plugin hides join/part messages in large rooms, except for those users " +"actively taking part in a conversation." +msgstr "" + +#. This is used in the place of a timezone abbreviation if the +#. * offset is way off. The user should never really see it, but +#. * it's here just in case. The parens are to make it clear it's +#. * not a real timezone. +msgid "(UTC)" +msgstr "" + +msgid "User is offline." +msgstr "" + +msgid "Auto-response sent:" +msgstr "" + +#, c-format +msgid "%s has signed off." +msgstr "" + +msgid "One or more messages may have been undeliverable." +msgstr "" + +msgid "You were disconnected from the server." +msgstr "" + +msgid "" +"You are currently disconnected. Messages will not be received unless you are " +"logged in." +msgstr "" + +msgid "Message could not be sent because the maximum length was exceeded." +msgstr "" + +#, fuzzy +msgid "Message could not be sent." +msgstr "Ujumbe haujaenda." + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +msgid "Adium" +msgstr "" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +#, fuzzy +msgid "Fire" +msgstr "Faili:" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +msgid "Messenger Plus!" +msgstr "" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +msgid "QIP" +msgstr "" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +msgid "MSN Messenger" +msgstr "" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +#, fuzzy +msgid "Trillian" +msgstr "Kifriul" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +msgid "aMSN" +msgstr "" + +#. Add general preferences. +msgid "General Log Reading Configuration" +msgstr "" + +msgid "Fast size calculations" +msgstr "" + +msgid "Use name heuristics" +msgstr "" + +#. Add Log Directory preferences. +msgid "Log Directory" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#, fuzzy +msgid "Log Reader" +msgstr "Kichwa cha kushoto" + +#. *< name +#. *< version +#. * summary +msgid "Includes other IM clients' logs in the log viewer." +msgstr "" + +#. * description +msgid "" +"When viewing logs, this plugin will include logs from other IM clients. " +"Currently, this includes Adium, MSN Messenger, and Trillian.\n" +"\n" +"WARNING: This plugin is still alpha code and may crash frequently. Use it " +"at your own risk!" +msgstr "" + +msgid "Mono Plugin Loader" +msgstr "" + +msgid "Loads .NET plugins with Mono." +msgstr "" + +msgid "Add new line in IMs" +msgstr "" + +msgid "Add new line in Chats" +msgstr "" + +#. *< magic +#. *< major version +#. *< minor version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#, fuzzy +msgid "New Line" +msgstr "Dirisha jipya" + +#. *< name +#. *< version +msgid "Prepends a newline to displayed message." +msgstr "" + +#. *< summary +msgid "" +"Prepends a newline to messages so that the rest of the message appears below " +"the username in the conversation window." +msgstr "" + +msgid "Offline Message Emulation" +msgstr "" + +msgid "Save messages sent to an offline user as pounce." +msgstr "" + +msgid "" +"The rest of the messages will be saved as pounce. You can edit/delete the " +"pounce from the `Buddy Pounce' dialog." +msgstr "" + +#, c-format +msgid "" +"\"%s\" is currently offline. Do you want to save the rest of the messages in " +"a pounce and automatically send them when \"%s\" logs back in?" +msgstr "" + +#, fuzzy +msgid "Offline Message" +msgstr "Hifadhi ya nje ya Mkondo" + +msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog" +msgstr "" + +msgid "Yes" +msgstr "Ndiyo" + +msgid "No" +msgstr "Hapana" + +msgid "Save offline messages in pounce" +msgstr "" + +msgid "Do not ask. Always save in pounce." +msgstr "" + +#, fuzzy +msgid "One Time Password" +msgstr "Ingiza Nywila Kuu" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "One Time Password Support" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Enforce that passwords are used only once." +msgstr "" + +#. * description +msgid "" +"Allows you to enforce on a per-account basis that passwords not being saved " +"are only used in a single successful connection.\n" +"Note: The account password must not be saved for this to work." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Perl Plugin Loader" +msgstr "" + +#. *< name +#. *< version +#. *< summary +msgid "Provides support for loading perl plugins." +msgstr "" + +msgid "Psychic Mode" +msgstr "" + +msgid "Psychic mode for incoming conversation" +msgstr "" + +msgid "" +"Causes conversation windows to appear as other users begin to message you. " +"This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" +msgstr "" + +msgid "You feel a disturbance in the force..." +msgstr "" + +msgid "Only enable for users on the buddy list" +msgstr "" + +msgid "Disable when away" +msgstr "" + +msgid "Display notification message in conversations" +msgstr "" + +msgid "Raise psychic conversations" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Signals Test" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Test to see that all signals are working properly." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Simple Plugin" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Tests to see that most things are working." +msgstr "" + +#. Scheme name +#, fuzzy +msgid "X.509 Certificates" +msgstr "X.509 Ithibati (PEM)" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "GNUTLS" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Provides SSL support through GNUTLS." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#, fuzzy +msgid "NSS" +msgstr "RSS" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Provides SSL support through Mozilla NSS." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "SSL" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Provides a wrapper around SSL support libraries." +msgstr "" + +#, c-format +msgid "%s is no longer away." +msgstr "" + +#, c-format +msgid "%s has gone away." +msgstr "" + +#, c-format +msgid "%s has become idle." +msgstr "" + +#, c-format +msgid "%s is no longer idle." +msgstr "" + +#, c-format +msgid "%s has signed on." +msgstr "" + +msgid "Notify When" +msgstr "" + +msgid "Buddy Goes _Away" +msgstr "" + +msgid "Buddy Goes _Idle" +msgstr "" + +msgid "Buddy _Signs On/Off" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Buddy State Notification" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "" +"Notifies in a conversation window when a buddy goes or returns from away or " +"idle." +msgstr "" + +msgid "Tcl Plugin Loader" +msgstr "" + +msgid "Provides support for loading Tcl plugins" +msgstr "" + +msgid "" +"Unable to detect ActiveTCL installation. If you wish to use TCL plugins, " +"install ActiveTCL from http://www.activestate.com\n" +msgstr "" + +msgid "" +"The Apple Bonjour For Windows toolkit wasn't found, see the FAQ at: http://d." +"pidgin.im/BonjourWindows for more information." +msgstr "" + +msgid "Unable to listen for incoming IM connections\n" +msgstr "" + +msgid "" +"Unable to establish connection with the local mDNS server. Is it running?" +msgstr "" + +#, fuzzy +msgid "First name" +msgstr "Ukurasa wa kwanza" + +#, fuzzy +msgid "Last name" +msgstr "Ukurasa wa mwisho" + +msgid "Email" +msgstr "Barua pepe" + +msgid "AIM Account" +msgstr "" + +msgid "XMPP Account" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "Bonjour Protocol Plugin" +msgstr "" + +msgid "Purple Person" +msgstr "" + +#. Creating the options for the protocol +msgid "Local Port" +msgstr "" + +msgid "Bonjour" +msgstr "" + +#, fuzzy, c-format +msgid "%s has closed the conversation." +msgstr "Mwenzi SSL imefunga uunganisho huu" + +msgid "Unable to send the message, the conversation couldn't be started." +msgstr "" + +#, fuzzy +msgid "Cannot open socket" +msgstr "Haiwezi kufungua %S" + +msgid "Could not bind socket to port" +msgstr "" + +msgid "Could not listen on socket" +msgstr "" + +msgid "Error communicating with local mDNSResponder." +msgstr "" + +msgid "Invalid proxy settings" +msgstr "" + +msgid "" +"Either the host name or port number specified for your given proxy type is " +"invalid." +msgstr "" + +#, fuzzy +msgid "Token Error" +msgstr "Hitilafu ya Faili" + +msgid "Unable to fetch the token.\n" +msgstr "" + +msgid "Save Buddylist..." +msgstr "" + +msgid "Your buddylist is empty, nothing was written to the file." +msgstr "" + +msgid "Buddylist saved successfully!" +msgstr "" + +#, c-format +msgid "Couldn't write buddy list for %s to %s" +msgstr "" + +msgid "Couldn't load buddylist" +msgstr "" + +msgid "Load Buddylist..." +msgstr "" + +msgid "Buddylist loaded successfully!" +msgstr "" + +msgid "Save buddylist..." +msgstr "" + +msgid "Load buddylist from file..." +msgstr "" + +msgid "Fill in the registration fields." +msgstr "" + +msgid "Passwords do not match." +msgstr "" + +msgid "Unable to register new account. Error occurred.\n" +msgstr "" + +msgid "New Gadu-Gadu Account Registered" +msgstr "" + +#, fuzzy +msgid "Registration completed successfully!" +msgstr "Sakinisho limemaliza kikamilifu" + +msgid "Password" +msgstr "Nywila" + +msgid "Password (retype)" +msgstr "" + +msgid "Enter current token" +msgstr "" + +msgid "Current token" +msgstr "" + +msgid "Register New Gadu-Gadu Account" +msgstr "" + +msgid "Please, fill in the following fields" +msgstr "" + +msgid "City" +msgstr "" + +msgid "Year of birth" +msgstr "" + +#, fuzzy +msgid "Gender" +msgstr "Katikati" + +msgid "Male or female" +msgstr "" + +#, fuzzy +msgid "Male" +msgstr "Mali" + +msgid "Female" +msgstr "" + +#, fuzzy +msgid "Only online" +msgstr "Baki Mkondoni" + +#, fuzzy +msgid "Find buddies" +msgstr "Ta&futa Masasisho" + +msgid "Please, enter your search criteria below" +msgstr "" + +msgid "Fill in the fields." +msgstr "" + +msgid "Your current password is different from the one that you specified." +msgstr "" + +msgid "Unable to change password. Error occurred.\n" +msgstr "" + +msgid "Change password for the Gadu-Gadu account" +msgstr "" + +msgid "Password was changed successfully!" +msgstr "" + +#, fuzzy +msgid "Current password" +msgstr "Nywila ya sasa hivi:" + +msgid "Please, enter your current password and your new password for UIN: " +msgstr "" + +#, fuzzy +msgid "Change Gadu-Gadu Password" +msgstr "Badilisha Nywila Kuu" + +#, c-format +msgid "Select a chat for buddy: %s" +msgstr "" + +msgid "Add to chat..." +msgstr "" + +#. Global +#, fuzzy +msgid "Available" +msgstr "Haipatikani" + +#. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for +#. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message +#. Away stuff +msgid "Away" +msgstr "" + +#, fuzzy +msgid "UIN" +msgstr "UID" + +#, fuzzy +msgid "First Name" +msgstr "Ukurasa wa kwanza" + +msgid "Birth Year" +msgstr "" + +msgid "Unable to display the search results." +msgstr "" + +msgid "Gadu-Gadu Public Directory" +msgstr "" + +msgid "Search results" +msgstr "Tafuta matokeo" + +#, fuzzy +msgid "No matching users found" +msgstr "Hamna uwiyano sawa na CRL uliopatikana." + +msgid "There are no users matching your search criteria." +msgstr "" + +#, fuzzy +msgid "Unable to read socket" +msgstr "Haiwezi kuongeza moduli" + +msgid "Buddy list downloaded" +msgstr "" + +msgid "Your buddy list was downloaded from the server." +msgstr "" + +msgid "Buddy list uploaded" +msgstr "" + +msgid "Your buddy list was stored on the server." +msgstr "" + +#, fuzzy +msgid "Connection failed." +msgstr "Unganisho Limeshindikana" + +msgid "Add to chat" +msgstr "" + +msgid "Chat _name:" +msgstr "" + +#, fuzzy +msgid "Chat error" +msgstr "Kichamorro" + +msgid "This chat name is already in use" +msgstr "" + +msgid "Not connected to the server." +msgstr "" + +msgid "Find buddies..." +msgstr "" + +#, fuzzy +msgid "Change password..." +msgstr "Badil &Nywila" + +msgid "Upload buddylist to Server" +msgstr "" + +msgid "Download buddylist from Server" +msgstr "" + +msgid "Delete buddylist from Server" +msgstr "" + +msgid "Save buddylist to file..." +msgstr "" + +#. magic +#. major_version +#. minor_version +#. plugin type +#. ui_requirement +#. flags +#. dependencies +#. priority +#. id +#. name +#. version +msgid "Gadu-Gadu Protocol Plugin" +msgstr "" + +#. summary +msgid "Polish popular IM" +msgstr "" + +msgid "Gadu-Gadu User" +msgstr "" + +#, c-format +msgid "Unknown command: %s" +msgstr "" + +#, c-format +msgid "current topic is: %s" +msgstr "" + +#, fuzzy +msgid "No topic is set" +msgstr "Hakuna sifa zilizowekwa." + +msgid "File Transfer Failed" +msgstr "" + +msgid "Could not open a listening port." +msgstr "" + +msgid "Error displaying MOTD" +msgstr "" + +#, fuzzy +msgid "No MOTD available" +msgstr "Haipatikani" + +msgid "There is no MOTD associated with this connection." +msgstr "" + +#, c-format +msgid "MOTD for %s" +msgstr "" + +msgid "Server has disconnected" +msgstr "" + +msgid "View MOTD" +msgstr "" + +msgid "_Channel:" +msgstr "" + +#, fuzzy +msgid "_Password:" +msgstr "Nywila:" + +msgid "IRC nicks may not contain whitespace" +msgstr "" + +#. 1. connect to server +#. connect to the server +#, fuzzy +msgid "Connecting" +msgstr "Inaunganisha…" + +msgid "SSL support unavailable" +msgstr "" + +msgid "Couldn't create socket" +msgstr "" + +msgid "Couldn't connect to host" +msgstr "" + +msgid "Read error" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Topic" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +msgid "IRC Protocol Plugin" +msgstr "" + +#. * summary +msgid "The IRC Protocol Plugin that Sucks Less" +msgstr "" + +#. host to connect to +msgid "Server" +msgstr "Seva" + +#. port to connect to +#, fuzzy +msgid "Port" +msgstr "Lango:" + +#, fuzzy +msgid "Encodings" +msgstr "Kisimba:" + +msgid "Auto-detect incoming UTF-8" +msgstr "" + +#, fuzzy +msgid "Real name" +msgstr "class name" + +#. +#. option = purple_account_option_string_new(_("Quit message"), "quitmsg", IRC_DEFAULT_QUIT); +#. prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); +#. +#, fuzzy +msgid "Use SSL" +msgstr "Tumia %S" + +msgid "Bad mode" +msgstr "" + +#, c-format +msgid "Ban on %s by %s, set %s ago" +msgstr "" + +#, c-format +msgid "Ban on %s" +msgstr "" + +msgid "End of ban list" +msgstr "" + +#, c-format +msgid "You are banned from %s." +msgstr "" + +msgid "Banned" +msgstr "" + +#, c-format +msgid "Cannot ban %s: banlist is full" +msgstr "" + +msgid " <i>(ircop)</i>" +msgstr "" + +msgid " <i>(identified)</i>" +msgstr "" + +#, fuzzy +msgid "Nick" +msgstr "Bofya" + +msgid "Currently on" +msgstr "" + +msgid "Idle for" +msgstr "" + +msgid "Online since" +msgstr "" + +msgid "<b>Defining adjective:</b>" +msgstr "" + +msgid "Glorious" +msgstr "" + +#, c-format +msgid "%s has changed the topic to: %s" +msgstr "" + +#, c-format +msgid "%s has cleared the topic." +msgstr "" + +#, c-format +msgid "The topic for %s is: %s" +msgstr "" + +#, c-format +msgid "Unknown message '%s'" +msgstr "" + +#, fuzzy +msgid "Unknown message" +msgstr "Ukubwa usiojulikana" + +msgid "The IRC server received a message it did not understand." +msgstr "" + +#, c-format +msgid "Users on %s: %s" +msgstr "" + +msgid "Time Response" +msgstr "" + +msgid "The IRC server's local time is:" +msgstr "" + +msgid "No such channel" +msgstr "" + +#. does this happen? +msgid "no such channel" +msgstr "" + +msgid "User is not logged in" +msgstr "" + +msgid "No such nick or channel" +msgstr "" + +#, fuzzy +msgid "Could not send" +msgstr "\"Haikuweza kupakia: \"" + +#, c-format +msgid "Joining %s requires an invitation." +msgstr "" + +msgid "Invitation only" +msgstr "" + +#, c-format +msgid "You have been kicked by %s: (%s)" +msgstr "" + +#. Remove user from channel +#, c-format +msgid "Kicked by %s (%s)" +msgstr "" + +#, c-format +msgid "mode (%s %s) by %s" +msgstr "" + +#, fuzzy +msgid "Invalid nickname" +msgstr "Jina la profaili ni batili" + +msgid "" +"Your selected nickname was rejected by the server. It probably contains " +"invalid characters." +msgstr "" + +msgid "" +"Your selected account name was rejected by the server. It probably contains " +"invalid characters." +msgstr "" + +#. We only want to do the following dance if the connection +#. has not been successfully completed. If it has, just +#. notify the user that their /nick command didn't go. +#, c-format +msgid "The nickname \"%s\" is already being used." +msgstr "" + +msgid "Nickname in use" +msgstr "" + +msgid "Cannot change nick" +msgstr "" + +msgid "Could not change nick" +msgstr "" + +#, c-format +msgid "You have parted the channel%s%s" +msgstr "" + +msgid "Error: invalid PONG from server" +msgstr "" + +#, c-format +msgid "PING reply -- Lag: %lu seconds" +msgstr "" + +#, c-format +msgid "Cannot join %s: Registration is required." +msgstr "" + +msgid "Cannot join channel" +msgstr "" + +msgid "Nick or channel is temporarily unavailable." +msgstr "" + +#, c-format +msgid "Wallops from %s" +msgstr "" + +msgid "action <action to perform>: Perform an action." +msgstr "" + +msgid "" +"away [message]: Set an away message, or use no message to return from being " +"away." +msgstr "" + +msgid "ctcp <nick> <msg>: sends ctcp msg to nick." +msgstr "" + +msgid "chanserv: Send a command to chanserv" +msgstr "" + +msgid "" +"deop <nick1> [nick2] ...: Remove channel operator status from " +"someone. You must be a channel operator to do this." +msgstr "" + +msgid "" +"devoice <nick1> [nick2] ...: Remove channel voice status from " +"someone, preventing them from speaking if the channel is moderated (+m). You " +"must be a channel operator to do this." +msgstr "" + +msgid "" +"invite <nick> [room]: Invite someone to join you in the specified " +"channel, or the current channel." +msgstr "" + +msgid "" +"j <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " +"channels, optionally providing a channel key for each if needed." +msgstr "" + +msgid "" +"join <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " +"channels, optionally providing a channel key for each if needed." +msgstr "" + +msgid "" +"kick <nick> [message]: Remove someone from a channel. You must be a " +"channel operator to do this." +msgstr "" + +msgid "" +"list: Display a list of chat rooms on the network. <i>Warning, some servers " +"may disconnect you upon doing this.</i>" +msgstr "" + +msgid "me <action to perform>: Perform an action." +msgstr "" + +msgid "memoserv: Send a command to memoserv" +msgstr "" + +msgid "" +"mode <+|-><A-Za-z> <nick|channel>: Set or unset a channel " +"or user mode." +msgstr "" + +msgid "" +"msg <nick> <message>: Send a private message to a user (as " +"opposed to a channel)." +msgstr "" + +msgid "names [channel]: List the users currently in a channel." +msgstr "" + +msgid "nick <new nickname>: Change your nickname." +msgstr "" + +msgid "nickserv: Send a command to nickserv" +msgstr "" + +msgid "notice <target<: Send a notice to a user or channel." +msgstr "" + +msgid "" +"op <nick1> [nick2] ...: Grant channel operator status to someone. You " +"must be a channel operator to do this." +msgstr "" + +msgid "" +"operwall <message>: If you don't know what this is, you probably " +"can't use it." +msgstr "" + +msgid "operserv: Send a command to operserv" +msgstr "" + +msgid "" +"part [room] [message]: Leave the current channel, or a specified channel, " +"with an optional message." +msgstr "" + +msgid "" +"ping [nick]: Asks how much lag a user (or the server if no user specified) " +"has." +msgstr "" + +msgid "" +"query <nick> <message>: Send a private message to a user (as " +"opposed to a channel)." +msgstr "" + +msgid "quit [message]: Disconnect from the server, with an optional message." +msgstr "" + +msgid "quote [...]: Send a raw command to the server." +msgstr "" + +msgid "" +"remove <nick> [message]: Remove someone from a room. You must be a " +"channel operator to do this." +msgstr "" + +msgid "time: Displays the current local time at the IRC server." +msgstr "" + +msgid "topic [new topic]: View or change the channel topic." +msgstr "" + +msgid "umode <+|-><A-Za-z>: Set or unset a user mode." +msgstr "" + +msgid "version [nick]: send CTCP VERSION request to a user" +msgstr "" + +msgid "" +"voice <nick1> [nick2] ...: Grant channel voice status to someone. You " +"must be a channel operator to do this." +msgstr "" + +msgid "" +"wallops <message>: If you don't know what this is, you probably can't " +"use it." +msgstr "" + +msgid "whois [server] <nick>: Get information on a user." +msgstr "" + +msgid "whowas <nick>: Get information on a user that has logged off." +msgstr "" + +#, c-format +msgid "Reply time from %s: %lu seconds" +msgstr "" + +msgid "PONG" +msgstr "" + +msgid "CTCP PING reply" +msgstr "" + +msgid "Disconnected." +msgstr "" + +msgid "Unknown Error" +msgstr "Hitilafu isiyojulikana" + +msgid "Ad-Hoc Command Failed" +msgstr "" + +msgid "execute" +msgstr "" + +msgid "Server requires TLS/SSL for login. No TLS/SSL support found." +msgstr "" + +msgid "You require encryption, but no TLS/SSL support found." +msgstr "" + +msgid "Server requires plaintext authentication over an unencrypted stream" +msgstr "" + +#, c-format +msgid "" +"%s requires plaintext authentication over an unencrypted connection. Allow " +"this and continue authentication?" +msgstr "" + +#, fuzzy +msgid "Plaintext Authentication" +msgstr "Ishara ya Uthibitisho Inayoulindwa" + +#, fuzzy +msgid "Invalid response from server." +msgstr "Mwitiko wa bila kutegemea kutoka kwa seva" + +msgid "Server does not use any supported authentication method" +msgstr "" + +msgid "You require encryption, but it is not available on this server." +msgstr "" + +msgid "Invalid challenge from server" +msgstr "" + +#, fuzzy +msgid "SASL error" +msgstr "SSL Seva" + +msgid "The BOSH connection manager terminated your session." +msgstr "" + +msgid "No session ID given" +msgstr "" + +#, fuzzy +msgid "Unsupported version of BOSH protocol" +msgstr "Kivunge kisichokubaliwa" + +#, fuzzy +msgid "Unable to establish a connection with the server" +msgstr "Firefox haiwezi kuzindua unganisho katika seva ya %S." + +#, fuzzy, c-format +msgid "" +"Could not establish a connection with the server:\n" +"%s" +msgstr "Firefox haiwezi kuzindua unganisho katika seva ya %S." + +#, fuzzy +msgid "Unable to establish SSL connection" +msgstr "Haikuweza kuunganishwa" + +#, fuzzy +msgid "Unable to create socket" +msgstr "Haikuweza kuunganishwa" + +#, fuzzy +msgid "Write error" +msgstr "Hitilafu ya Printa" + +#, fuzzy +msgid "Full Name" +msgstr "Jina la faili:" + +msgid "Family Name" +msgstr "" + +msgid "Given Name" +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "Street Address" +msgstr "" + +msgid "Extended Address" +msgstr "" + +#, fuzzy +msgid "Locality" +msgstr "Mahali" + +#, fuzzy +msgid "Region" +msgstr "Reunion" + +msgid "Postal Code" +msgstr "" + +#, fuzzy +msgid "Country" +msgstr "Hesabu" + +#. lots of clients (including purple) do this, but it's +#. * out of spec +msgid "Telephone" +msgstr "" + +#, fuzzy +msgid "Organization Name" +msgstr "Jumuiya(J)" + +#, fuzzy +msgid "Organization Unit" +msgstr "Jumuiya(J)" + +msgid "Role" +msgstr "" + +msgid "Birthday" +msgstr "" + +msgid "Description" +msgstr "Maelezo" + +msgid "Edit XMPP vCard" +msgstr "" + +msgid "" +"All items below are optional. Enter only the information with which you feel " +"comfortable." +msgstr "" + +msgid "Client" +msgstr "Mteja" + +msgid "Operating System" +msgstr "" + +#, fuzzy +msgid "Local Time" +msgstr "faili la kikweti" + +msgid "Last Activity" +msgstr "" + +msgid "Service Discovery Info" +msgstr "" + +msgid "Service Discovery Items" +msgstr "" + +msgid "Extended Stanza Addressing" +msgstr "" + +msgid "Multi-User Chat" +msgstr "" + +msgid "Multi-User Chat Extended Presence Information" +msgstr "" + +msgid "In-Band Bytestreams" +msgstr "" + +msgid "Ad-Hoc Commands" +msgstr "" + +msgid "PubSub Service" +msgstr "" + +msgid "SOCKS5 Bytestreams" +msgstr "" + +msgid "Out of Band Data" +msgstr "" + +msgid "XHTML-IM" +msgstr "" + +msgid "In-Band Registration" +msgstr "" + +#, fuzzy +msgid "User Location" +msgstr "Mapali pa &Tawanyiko:" + +msgid "User Avatar" +msgstr "" + +msgid "Chat State Notifications" +msgstr "" + +msgid "Software Version" +msgstr "" + +msgid "Stream Initiation" +msgstr "" + +msgid "File Transfer" +msgstr "" + +msgid "User Mood" +msgstr "" + +msgid "User Activity" +msgstr "" + +msgid "Entity Capabilities" +msgstr "" + +msgid "Encrypted Session Negotiations" +msgstr "" + +#, fuzzy +msgid "User Tune" +msgstr "Jina la Mtumiaji:" + +msgid "Roster Item Exchange" +msgstr "" + +msgid "Reachability Address" +msgstr "" + +#, fuzzy +msgid "User Profile" +msgstr "Notisi za Mtumiaji" + +msgid "Jingle" +msgstr "" + +msgid "Jingle Audio" +msgstr "" + +#, fuzzy +msgid "User Nickname" +msgstr "Jina la mtumiaji" + +msgid "Jingle ICE UDP" +msgstr "" + +msgid "Jingle ICE TCP" +msgstr "" + +msgid "Jingle Raw UDP" +msgstr "" + +msgid "Jingle Video" +msgstr "" + +msgid "Jingle DTMF" +msgstr "" + +msgid "Message Receipts" +msgstr "" + +msgid "Public Key Publishing" +msgstr "" + +msgid "User Chatting" +msgstr "" + +#, fuzzy +msgid "User Browsing" +msgstr "Kuvinjari kwa kareti" + +#, fuzzy +msgid "User Gaming" +msgstr "Jina la Mtumiaji:" + +msgid "User Viewing" +msgstr "" + +#, fuzzy +msgid "Ping" +msgstr "Chapisha" + +msgid "Stanza Encryption" +msgstr "" + +msgid "Entity Time" +msgstr "" + +msgid "Delayed Delivery" +msgstr "" + +msgid "Collaborative Data Objects" +msgstr "" + +msgid "File Repository and Sharing" +msgstr "" + +msgid "STUN Service Discovery for Jingle" +msgstr "" + +msgid "Simplified Encrypted Session Negotiation" +msgstr "" + +#, fuzzy +msgid "Hop Check" +msgstr "Usikague" + +msgid "Capabilities" +msgstr "" + +msgid "Priority" +msgstr "" + +#, fuzzy +msgid "Resource" +msgstr "#1 rasilimali" + +#, c-format +msgid "%s ago" +msgstr "" + +#, fuzzy +msgid "Logged off" +msgstr "Ingia" + +#, fuzzy +msgid "Middle Name" +msgstr "Jina la Moduli:" + +msgid "Address" +msgstr "Anuani" + +msgid "P.O. Box" +msgstr "" + +msgid "Photo" +msgstr "" + +#, fuzzy +msgid "Logo" +msgstr "Togo" + +msgid "Un-hide From" +msgstr "" + +msgid "Temporarily Hide From" +msgstr "" + +#. && NOT ME +msgid "Cancel Presence Notification" +msgstr "" + +msgid "(Re-)Request authorization" +msgstr "" + +#. if(NOT ME) +#. shouldn't this just happen automatically when the buddy is +#. removed? +#, fuzzy +msgid "Unsubscribe" +msgstr "Jiunge" + +#, fuzzy +msgid "Log In" +msgstr "I&ngia" + +#, fuzzy +msgid "Log Out" +msgstr "O&ndoka" + +msgid "Chatty" +msgstr "" + +msgid "Extended Away" +msgstr "" + +msgid "Do Not Disturb" +msgstr "" + +#, fuzzy +msgid "JID" +msgstr "UID" + +#, fuzzy +msgid "Last Name" +msgstr "Ukurasa wa mwisho" + +#, fuzzy +msgid "The following are the results of your search" +msgstr "Kuki zifuatazo zinalingana na unazotafuta:" + +#. current comment from Jabber User Directory users.jabber.org +msgid "" +"Find a contact by entering the search criteria in the given fields. Note: " +"Each field supports wild card searches (%)" +msgstr "" + +msgid "Directory Query Failed" +msgstr "" + +msgid "Could not query the directory server." +msgstr "" + +#. Try to translate the message (see static message +#. list in jabber_user_dir_comments[]) +#, c-format +msgid "Server Instructions: %s" +msgstr "" + +msgid "Fill in one or more fields to search for any matching XMPP users." +msgstr "" + +msgid "Email Address" +msgstr "Anwani ya Barua pepe" + +msgid "Search for XMPP users" +msgstr "" + +#. "Search" +msgid "Search" +msgstr "Tafuta" + +msgid "Invalid Directory" +msgstr "" + +msgid "Enter a User Directory" +msgstr "" + +msgid "Select a user directory to search" +msgstr "" + +#, fuzzy +msgid "Search Directory" +msgstr "Tafuta historia" + +msgid "_Room:" +msgstr "" + +#, fuzzy +msgid "_Server:" +msgstr "Seva" + +msgid "_Handle:" +msgstr "" + +#, c-format +msgid "%s is not a valid room name" +msgstr "" + +#, fuzzy +msgid "Invalid Room Name" +msgstr "Jina batili la moduli." + +#, c-format +msgid "%s is not a valid server name" +msgstr "" + +#, fuzzy +msgid "Invalid Server Name" +msgstr "Jina batili la moduli." + +#, c-format +msgid "%s is not a valid room handle" +msgstr "" + +msgid "Invalid Room Handle" +msgstr "" + +#, fuzzy +msgid "Configuration error" +msgstr "Hitilafu ya Sanidi" + +#, fuzzy +msgid "Unable to configure" +msgstr "Haikuweza kuunganishwa" + +#, fuzzy +msgid "Room Configuration Error" +msgstr "Hitilafu ya Sanidi" + +msgid "This room is not capable of being configured" +msgstr "" + +#, fuzzy +msgid "Registration error" +msgstr "Hitilafu ya Sanidi" + +msgid "Nick changing not supported in non-MUC chatrooms" +msgstr "" + +msgid "Error retrieving room list" +msgstr "" + +#, fuzzy +msgid "Invalid Server" +msgstr "Anuani batili" + +msgid "Enter a Conference Server" +msgstr "" + +msgid "Select a conference server to query" +msgstr "" + +msgid "Find Rooms" +msgstr "" + +#, fuzzy +msgid "Affiliations:" +msgstr "Machaguo" + +#, fuzzy +msgid "No users found" +msgstr "Hamna uwiyano sawa na CRL uliopatikana." + +msgid "Roles:" +msgstr "" + +msgid "Ping timeout" +msgstr "" + +#, fuzzy +msgid "Read Error" +msgstr "Hitilafu ya Faili" + +#, c-format +msgid "" +"Could not find alternative XMPP connection methods after failing to connect " +"directly.\n" +msgstr "" + +#, fuzzy +msgid "Invalid XMPP ID" +msgstr "Kizuizi batili" + +msgid "Invalid XMPP ID. Domain must be set." +msgstr "" + +msgid "Malformed BOSH Connect Server" +msgstr "" + +#, c-format +msgid "Registration of %s@%s successful" +msgstr "" + +#, c-format +msgid "Registration to %s successful" +msgstr "" + +msgid "Registration Successful" +msgstr "" + +#, fuzzy +msgid "Registration Failed" +msgstr "Usajili wa Chrome Umeshindikana" + +#, c-format +msgid "Registration from %s successfully removed" +msgstr "" + +msgid "Unregistration Successful" +msgstr "" + +#, fuzzy +msgid "Unregistration Failed" +msgstr "Usajili wa Chrome Umeshindikana" + +#, fuzzy +msgid "Already Registered" +msgstr "Ipo" + +msgid "State" +msgstr "Hali" + +msgid "Postal code" +msgstr "" + +#, fuzzy +msgid "Phone" +msgstr "Bila" + +#, fuzzy +msgid "Date" +msgstr "Tarehe:" + +msgid "Unregister" +msgstr "" + +msgid "" +"Please fill out the information below to change your account registration." +msgstr "" + +msgid "Please fill out the information below to register your new account." +msgstr "" + +msgid "Register New XMPP Account" +msgstr "" + +#, fuzzy +msgid "Register" +msgstr "Mwandishi wa habari" + +#, c-format +msgid "Change Account Registration at %s" +msgstr "" + +#, c-format +msgid "Register New Account at %s" +msgstr "" + +#, fuzzy +msgid "Change Registration" +msgstr "Usajili wa Chrome Umeshindikana" + +#, fuzzy +msgid "Error unregistering account" +msgstr "Hitilafu katika kusajili DLL" + +msgid "Account successfully unregistered" +msgstr "" + +msgid "Initializing Stream" +msgstr "" + +msgid "Initializing SSL/TLS" +msgstr "" + +msgid "Authenticating" +msgstr "" + +msgid "Re-initializing Stream" +msgstr "" + +msgid "Server doesn't support blocking" +msgstr "" + +msgid "Not Authorized" +msgstr "" + +msgid "Mood" +msgstr "" + +msgid "Now Listening" +msgstr "" + +msgid "Both" +msgstr "" + +msgid "From (To pending)" +msgstr "" + +#, fuzzy +msgid "From" +msgstr "kutoka" + +#, fuzzy +msgid "To" +msgstr "Kwa:" + +msgid "None (To pending)" +msgstr "" + +msgid "None" +msgstr "Bila" + +#, fuzzy +msgid "Subscription" +msgstr "Maelezo" + +msgid "Mood Text" +msgstr "" + +msgid "Allow Buzz" +msgstr "" + +msgid "Tune Artist" +msgstr "" + +#, fuzzy +msgid "Tune Title" +msgstr "Mada Fupi" + +msgid "Tune Album" +msgstr "" + +msgid "Tune Genre" +msgstr "" + +msgid "Tune Comment" +msgstr "" + +msgid "Tune Track" +msgstr "" + +msgid "Tune Time" +msgstr "" + +msgid "Tune Year" +msgstr "" + +msgid "Tune URL" +msgstr "" + +#, fuzzy +msgid "Password Changed" +msgstr "Badilisho la Nywila limeshindikana" + +#, fuzzy +msgid "Your password has been changed." +msgstr "Nywila yako imesetiwa upya." + +msgid "Error changing password" +msgstr "" + +#, fuzzy +msgid "Password (again)" +msgstr "Nywila mpya (tena):" + +#, fuzzy +msgid "Change XMPP Password" +msgstr "Badil &Nywila" + +msgid "Please enter your new password" +msgstr "" + +msgid "Set User Info..." +msgstr "" + +#. if (js->protocol_options & CHANGE_PASSWORD) { +#, fuzzy +msgid "Change Password..." +msgstr "Badil &Nywila" + +#. } +msgid "Search for Users..." +msgstr "" + +msgid "Bad Request" +msgstr "" + +#, fuzzy +msgid "Conflict" +msgstr "Thibitisha" + +msgid "Feature Not Implemented" +msgstr "" + +msgid "Forbidden" +msgstr "" + +#, fuzzy +msgid "Gone" +msgstr "Bila" + +#, fuzzy +msgid "Internal Server Error" +msgstr "Hitilafu ya ndani ya seva (500)" + +#, fuzzy +msgid "Item Not Found" +msgstr "Faili halipatikani" + +msgid "Malformed XMPP ID" +msgstr "" + +#, fuzzy +msgid "Not Acceptable" +msgstr "Haipatikani" + +msgid "Not Allowed" +msgstr "" + +#, fuzzy +msgid "Payment Required" +msgstr "Nywila inatakiwa" + +msgid "Recipient Unavailable" +msgstr "" + +#, fuzzy +msgid "Registration Required" +msgstr "Uthibitisho unatakiwa" + +#, fuzzy +msgid "Remote Server Not Found" +msgstr "Wakala kompyuta tumishi hapatikani" + +msgid "Remote Server Timeout" +msgstr "" + +msgid "Server Overloaded" +msgstr "" + +msgid "Service Unavailable" +msgstr "" + +#, fuzzy +msgid "Subscription Required" +msgstr "Uthibitisho unatakiwa" + +msgid "Unexpected Request" +msgstr "" + +#, fuzzy +msgid "Authorization Aborted" +msgstr "Sainisho limetibuliwa" + +msgid "Incorrect encoding in authorization" +msgstr "" + +#, fuzzy +msgid "Invalid authzid" +msgstr "Njia batili" + +msgid "Invalid Authorization Mechanism" +msgstr "" + +msgid "Authorization mechanism too weak" +msgstr "" + +msgid "Temporary Authentication Failure" +msgstr "" + +#, fuzzy +msgid "Authentication Failure" +msgstr "Uthibitisho unatakiwa" + +#, fuzzy +msgid "Bad Format" +msgstr "Fomati" + +msgid "Bad Namespace Prefix" +msgstr "" + +msgid "Resource Conflict" +msgstr "" + +#, fuzzy +msgid "Connection Timeout" +msgstr "Muunganiko umepita muda" + +msgid "Host Gone" +msgstr "" + +msgid "Host Unknown" +msgstr "" + +msgid "Improper Addressing" +msgstr "" + +#, fuzzy +msgid "Invalid ID" +msgstr "Kizuizi batili" + +msgid "Invalid Namespace" +msgstr "" + +#, fuzzy +msgid "Invalid XML" +msgstr "Kizuizi batili" + +msgid "Non-matching Hosts" +msgstr "" + +msgid "Policy Violation" +msgstr "" + +#, fuzzy +msgid "Remote Connection Failed" +msgstr "Muunganiko salama umeshindikana" + +msgid "Resource Constraint" +msgstr "" + +msgid "Restricted XML" +msgstr "" + +msgid "See Other Host" +msgstr "" + +msgid "System Shutdown" +msgstr "" + +#, fuzzy +msgid "Undefined Condition" +msgstr "kitu ambacho hakijafafanuliwa" + +#, fuzzy +msgid "Unsupported Encoding" +msgstr "Kivunge kisichokubaliwa" + +#, fuzzy +msgid "Unsupported Stanza Type" +msgstr "Kivunge kisichokubaliwa" + +#, fuzzy +msgid "Unsupported Version" +msgstr "Kivunge kisichokubaliwa" + +msgid "XML Not Well Formed" +msgstr "" + +msgid "Stream Error" +msgstr "" + +#, c-format +msgid "Unable to ban user %s" +msgstr "" + +#, c-format +msgid "Unknown affiliation: \"%s\"" +msgstr "" + +#, c-format +msgid "Unable to affiliate user %s as \"%s\"" +msgstr "" + +#, c-format +msgid "Unknown role: \"%s\"" +msgstr "" + +#, c-format +msgid "Unable to set role \"%s\" for user: %s" +msgstr "" + +#, c-format +msgid "Unable to kick user %s" +msgstr "" + +#, c-format +msgid "Unable to ping user %s" +msgstr "" + +#, c-format +msgid "Unable to buzz, because there is nothing known about %s." +msgstr "" + +#, c-format +msgid "Unable to buzz, because %s might be offline." +msgstr "" + +#, c-format +msgid "" +"Unable to buzz, because %s does not support it or does not wish to receive " +"buzzes now." +msgstr "" + +#, c-format +msgid "Buzzing %s..." +msgstr "" + +#. Yahoo only supports one attention command: the 'buzz'. +#. This is index number YAHOO_BUZZ. +msgid "Buzz" +msgstr "" + +#, c-format +msgid "%s has buzzed you!" +msgstr "" + +#, c-format +msgid "Unable to initiate media with %s: invalid JID" +msgstr "" + +#, c-format +msgid "Unable to initiate media with %s: user is not online" +msgstr "" + +#, c-format +msgid "Unable to initiate media with %s: not subscribed to user presence" +msgstr "" + +msgid "Media Initiation Failed" +msgstr "" + +#, c-format +msgid "" +"Please select the resource of %s with which you would like to start a media " +"session." +msgstr "" + +msgid "Select a Resource" +msgstr "" + +msgid "Initiate Media" +msgstr "" + +msgid "config: Configure a chat room." +msgstr "" + +msgid "configure: Configure a chat room." +msgstr "" + +msgid "part [room]: Leave the room." +msgstr "" + +msgid "register: Register with a chat room." +msgstr "" + +msgid "topic [new topic]: View or change the topic." +msgstr "" + +msgid "ban <user> [reason]: Ban a user from the room." +msgstr "" + +msgid "" +"affiliate <owner|admin|member|outcast|none> [nick1] [nick2] ...: Get " +"the users with an affiliation or set users' affiliation with the room." +msgstr "" + +msgid "" +"role <moderator|participant|visitor|none> [nick1] [nick2] ...: Get the " +"users with an role or set users' role with the room." +msgstr "" + +msgid "invite <user> [message]: Invite a user to the room." +msgstr "" + +msgid "join: <room> [password]: Join a chat on this server." +msgstr "" + +msgid "kick <user> [reason]: Kick a user from the room." +msgstr "" + +msgid "" +"msg <user> <message>: Send a private message to another user." +msgstr "" + +msgid "ping <jid>:\tPing a user/component/server." +msgstr "" + +msgid "buzz: Buzz a user to get their attention" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "XMPP Protocol Plugin" +msgstr "" + +#. Translators: 'domain' is used here in the context of Internet domains, e.g. pidgin.im +#, fuzzy +msgid "Domain" +msgstr "Kikoa:" + +msgid "Require SSL/TLS" +msgstr "" + +msgid "Force old (port 5223) SSL" +msgstr "" + +msgid "Allow plaintext auth over unencrypted streams" +msgstr "" + +#, fuzzy +msgid "Connect port" +msgstr "Unganisho" + +#. TODO: default to automatically try different ports. Make the user be +#. * able to set the first port to try (like LastConnectedPort in Windows client). +#. Account options +msgid "Connect server" +msgstr "" + +msgid "File transfer proxies" +msgstr "" + +#. this should probably be part of global smiley theme settings later on, +#. shared with MSN +msgid "Show Custom Smileys" +msgstr "" + +#, c-format +msgid "%s has left the conversation." +msgstr "" + +#, c-format +msgid "Message from %s" +msgstr "" + +#, c-format +msgid "%s has set the topic to: %s" +msgstr "" + +#, c-format +msgid "The topic is: %s" +msgstr "" + +#, c-format +msgid "Message delivery to %s failed: %s" +msgstr "" + +msgid "XMPP Message Error" +msgstr "" + +#, c-format +msgid "(Code %s)" +msgstr "" + +msgid "XML Parse error" +msgstr "" + +msgid "Unknown Error in presence" +msgstr "" + +msgid "Create New Room" +msgstr "" + +msgid "" +"You are creating a new room. Would you like to configure it, or accept the " +"default settings?" +msgstr "" + +msgid "_Configure Room" +msgstr "" + +#, fuzzy +msgid "_Accept Defaults" +msgstr "Misingi ya mfumo" + +#, c-format +msgid "Error joining chat %s" +msgstr "" + +#, c-format +msgid "Error in chat %s" +msgstr "" + +msgid "An error occured on the in-band bytestream transfer\n" +msgstr "" + +msgid "Transfer was closed." +msgstr "" + +msgid "Failed to open the file" +msgstr "" + +msgid "Failed to open in-band bytestream" +msgstr "" + +#, c-format +msgid "Unable to send file to %s, user does not support file transfers" +msgstr "" + +msgid "File Send Failed" +msgstr "" + +#, c-format +msgid "Unable to send file to %s, invalid JID" +msgstr "" + +#, c-format +msgid "Unable to send file to %s, user is not online" +msgstr "" + +#, c-format +msgid "Unable to send file to %s, not subscribed to user presence" +msgstr "" + +#, c-format +msgid "Please select the resource of %s to which you would like to send a file" +msgstr "" + +msgid "Edit User Mood" +msgstr "" + +msgid "Please select your mood from the list." +msgstr "" + +#, fuzzy +msgid "Set" +msgstr "Sep" + +msgid "Set Mood..." +msgstr "" + +msgid "Set User Nickname" +msgstr "" + +msgid "Please specify a new nickname for you." +msgstr "" + +msgid "" +"This information is visible to all contacts on your contact list, so choose " +"something appropriate." +msgstr "" + +msgid "Set Nickname..." +msgstr "" + +#, fuzzy +msgid "Actions" +msgstr "Machaguo" + +msgid "Select an action" +msgstr "" + +#. only notify the user about problems adding to the friends list +#. * maybe we should do something else for other lists, but it probably +#. * won't cause too many problems if we just ignore it +#, fuzzy, c-format +msgid "Unable to add \"%s\"." +msgstr "Haiwezi kuongeza moduli" + +msgid "Buddy Add error" +msgstr "" + +msgid "The username specified does not exist." +msgstr "" + +#, c-format +msgid "Buddy list synchronization issue in %s (%s)" +msgstr "" + +#, c-format +msgid "" +"%s on the local list is inside the group \"%s\" but not on the server list. " +"Do you want this buddy to be added?" +msgstr "" + +#, c-format +msgid "" +"%s is on the local list but not on the server list. Do you want this buddy " +"to be added?" +msgstr "" + +#, fuzzy, c-format +msgid "Unable to parse message" +msgstr "Haiwezi kuongeza moduli" + +#, c-format +msgid "Syntax Error (probably a client bug)" +msgstr "" + +#, fuzzy, c-format +msgid "Invalid email address" +msgstr "Anuani batili" + +#, fuzzy, c-format +msgid "User does not exist" +msgstr "Faili %S halipo" + +#, c-format +msgid "Fully qualified domain name missing" +msgstr "" + +#, c-format +msgid "Already logged in" +msgstr "" + +#, fuzzy, c-format +msgid "Invalid username" +msgstr "Jina batili la moduli." + +#, fuzzy, c-format +msgid "Invalid friendly name" +msgstr "Jina la profaili ni batili" + +#, c-format +msgid "List full" +msgstr "" + +#, c-format +msgid "Already there" +msgstr "" + +#, c-format +msgid "Not on list" +msgstr "" + +#, fuzzy, c-format +msgid "User is offline" +msgstr "Fanya &kazi nje ya mkondo" + +#, c-format +msgid "Already in the mode" +msgstr "" + +#, c-format +msgid "Already in opposite list" +msgstr "" + +#, c-format +msgid "Too many groups" +msgstr "" + +#, fuzzy, c-format +msgid "Invalid group" +msgstr "Ingizo batili" + +#, c-format +msgid "User not in group" +msgstr "" + +#, c-format +msgid "Group name too long" +msgstr "" + +#, c-format +msgid "Cannot remove group zero" +msgstr "" + +#, c-format +msgid "Tried to add a user to a group that doesn't exist" +msgstr "" + +#, c-format +msgid "Switchboard failed" +msgstr "" + +#, c-format +msgid "Notify transfer failed" +msgstr "" + +#, c-format +msgid "Required fields missing" +msgstr "" + +#, c-format +msgid "Too many hits to a FND" +msgstr "" + +#, fuzzy, c-format +msgid "Not logged in" +msgstr "Hajaingia" + +#, c-format +msgid "Service temporarily unavailable" +msgstr "" + +#, c-format +msgid "Database server error" +msgstr "" + +#, c-format +msgid "Command disabled" +msgstr "" + +#, c-format +msgid "File operation error" +msgstr "" + +#, c-format +msgid "Memory allocation error" +msgstr "" + +#, c-format +msgid "Wrong CHL value sent to server" +msgstr "" + +#, fuzzy, c-format +msgid "Server busy" +msgstr "Seva" + +#, c-format +msgid "Server unavailable" +msgstr "" + +#, c-format +msgid "Peer notification server down" +msgstr "" + +#, c-format +msgid "Database connect error" +msgstr "" + +#, c-format +msgid "Server is going down (abandon ship)" +msgstr "" + +#, fuzzy, c-format +msgid "Error creating connection" +msgstr "Hitilafu kwenye utengenezaji wa saraka:" + +#, c-format +msgid "CVR parameters are either unknown or not allowed" +msgstr "" + +#, fuzzy, c-format +msgid "Unable to write" +msgstr "Nimeshindwa Kusasisha" + +#, c-format +msgid "Session overload" +msgstr "" + +#, c-format +msgid "User is too active" +msgstr "" + +#, c-format +msgid "Too many sessions" +msgstr "" + +#, fuzzy, c-format +msgid "Passport not verified" +msgstr "(Mwandishi hajathibitishwa)" + +#, c-format +msgid "Bad friend file" +msgstr "" + +#, fuzzy, c-format +msgid "Not expected" +msgstr "Hakuna iliyochaguliwa" + +#, c-format +msgid "Friendly name changes too rapidly" +msgstr "" + +#, fuzzy, c-format +msgid "Server too busy" +msgstr "Seva haipatikani" + +#, fuzzy, c-format +msgid "Authentication failed" +msgstr "Uthibitisho unatakiwa" + +#, c-format +msgid "Not allowed when offline" +msgstr "" + +#, c-format +msgid "Not accepting new users" +msgstr "" + +#, c-format +msgid "Kids Passport without parental consent" +msgstr "" + +#, c-format +msgid "Passport account not yet verified" +msgstr "" + +msgid "Passport account suspended" +msgstr "" + +#, c-format +msgid "Bad ticket" +msgstr "" + +#, fuzzy, c-format +msgid "Unknown Error Code %d" +msgstr "Hitilafu isiyojulikana" + +#, c-format +msgid "MSN Error: %s\n" +msgstr "" + +#, fuzzy +msgid "Other Contacts" +msgstr "Lugha nyinginezo" + +msgid "Non-IM Contacts" +msgstr "" + +msgid "Nudge" +msgstr "" + +#, c-format +msgid "%s has nudged you!" +msgstr "" + +#, c-format +msgid "Nudging %s..." +msgstr "" + +#, fuzzy +msgid "Email Address..." +msgstr "Anwani ya Barua pepe" + +msgid "Your new MSN friendly name is too long." +msgstr "" + +msgid "Set your friendly name." +msgstr "" + +msgid "This is the name that other MSN buddies will see you as." +msgstr "" + +msgid "Set your home phone number." +msgstr "" + +msgid "Set your work phone number." +msgstr "" + +msgid "Set your mobile phone number." +msgstr "" + +msgid "Allow MSN Mobile pages?" +msgstr "" + +msgid "" +"Do you want to allow or disallow people on your buddy list to send you MSN " +"Mobile pages to your cell phone or other mobile device?" +msgstr "" + +msgid "Allow" +msgstr "Ruhusu" + +#, fuzzy +msgid "Disallow" +msgstr "Lemaza" + +#, c-format +msgid "Blocked Text for %s" +msgstr "" + +msgid "No text is blocked for this account." +msgstr "" + +#, c-format +msgid "" +"MSN servers are currently blocking the following regular expressions:<br/>%s" +msgstr "" + +msgid "This account does not have email enabled." +msgstr "" + +msgid "Send a mobile message." +msgstr "" + +#, fuzzy +msgid "Page" +msgstr "Ukurasa wa #" + +msgid "Playing a game" +msgstr "" + +#, fuzzy +msgid "Working" +msgstr "Tahadhari:" + +msgid "Has you" +msgstr "" + +msgid "Home Phone Number" +msgstr "" + +msgid "Work Phone Number" +msgstr "" + +msgid "Mobile Phone Number" +msgstr "" + +msgid "Be Right Back" +msgstr "" + +msgid "Busy" +msgstr "" + +msgid "On the Phone" +msgstr "" + +msgid "Out to Lunch" +msgstr "" + +#. primitive +#. ID +#. name - use default +#. saveable +#. should be user_settable some day +#. independent +msgid "Artist" +msgstr "" + +msgid "Album" +msgstr "" + +#, fuzzy +msgid "Game Title" +msgstr "Mada Fupi" + +msgid "Office Title" +msgstr "" + +msgid "Set Friendly Name..." +msgstr "" + +msgid "Set Home Phone Number..." +msgstr "" + +msgid "Set Work Phone Number..." +msgstr "" + +msgid "Set Mobile Phone Number..." +msgstr "" + +msgid "Enable/Disable Mobile Devices..." +msgstr "" + +msgid "Allow/Disallow Mobile Pages..." +msgstr "" + +msgid "View Blocked Text..." +msgstr "" + +msgid "Open Hotmail Inbox" +msgstr "" + +msgid "Send to Mobile" +msgstr "" + +msgid "Initiate _Chat" +msgstr "" + +msgid "SSL support is needed for MSN. Please install a supported SSL library." +msgstr "" + +msgid "Failed to connect to server." +msgstr "" + +msgid "Error retrieving profile" +msgstr "" + +msgid "General" +msgstr "Ujumla" + +msgid "Age" +msgstr "" + +#, fuzzy +msgid "Occupation" +msgstr "Mahali" + +msgid "Location" +msgstr "Mahali" + +msgid "Hobbies and Interests" +msgstr "" + +msgid "A Little About Me" +msgstr "" + +msgid "Social" +msgstr "" + +msgid "Marital Status" +msgstr "" + +msgid "Interests" +msgstr "" + +#, fuzzy +msgid "Pets" +msgstr "Bonyeza" + +msgid "Hometown" +msgstr "" + +msgid "Places Lived" +msgstr "" + +msgid "Fashion" +msgstr "" + +msgid "Humor" +msgstr "" + +msgid "Music" +msgstr "" + +msgid "Favorite Quote" +msgstr "" + +msgid "Contact Info" +msgstr "" + +#, fuzzy +msgid "Personal" +msgstr "Kipersia" + +msgid "Significant Other" +msgstr "" + +msgid "Home Phone" +msgstr "" + +msgid "Home Phone 2" +msgstr "" + +#, fuzzy +msgid "Home Address" +msgstr "Anwani-IP" + +msgid "Personal Mobile" +msgstr "" + +msgid "Home Fax" +msgstr "" + +msgid "Personal Email" +msgstr "" + +msgid "Personal IM" +msgstr "" + +#, fuzzy +msgid "Anniversary" +msgstr "Universal" + +#. Business +msgid "Work" +msgstr "" + +#, fuzzy +msgid "Job Title" +msgstr "Cheo cha &kazi:" + +msgid "Company" +msgstr "" + +msgid "Department" +msgstr "" + +msgid "Profession" +msgstr "" + +msgid "Work Phone" +msgstr "" + +msgid "Work Phone 2" +msgstr "" + +#, fuzzy +msgid "Work Address" +msgstr "Anwani-IP" + +msgid "Work Mobile" +msgstr "" + +msgid "Work Pager" +msgstr "" + +msgid "Work Fax" +msgstr "" + +msgid "Work Email" +msgstr "" + +msgid "Work IM" +msgstr "" + +#, fuzzy +msgid "Start Date" +msgstr "Anzisha Upya Baadae" + +#, fuzzy +msgid "Favorite Things" +msgstr "Vibwedo" + +#, fuzzy +msgid "Last Updated" +msgstr "Sasisho la mara ya mwisho" + +#, fuzzy +msgid "Homepage" +msgstr "Ukurasa wa &Nyumbani:" + +msgid "The user has not created a public profile." +msgstr "" + +msgid "" +"MSN reported not being able to find the user's profile. This either means " +"that the user does not exist, or that the user exists but has not created a " +"public profile." +msgstr "" + +msgid "" +"Could not find any information in the user's profile. The user most likely " +"does not exist." +msgstr "" + +msgid "View web profile" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. *< summary +msgid "Windows Live Messenger Protocol Plugin" +msgstr "" + +msgid "Use HTTP Method" +msgstr "" + +msgid "HTTP Method Server" +msgstr "" + +msgid "Show custom smileys" +msgstr "" + +msgid "nudge: nudge a user to get their attention" +msgstr "" + +msgid "Windows Live ID authentication:Unable to connect" +msgstr "" + +msgid "Windows Live ID authentication:Invalid response" +msgstr "" + +#, c-format +msgid "%s just sent you a Nudge!" +msgstr "" + +#, fuzzy, c-format +msgid "Unknown error (%d): %s" +msgstr "Hitilafu isiyojulikana" + +#, fuzzy +msgid "Unable to add user" +msgstr "Haiwezi kuongeza moduli" + +#, fuzzy, c-format +msgid "Unknown error (%d)" +msgstr "Hitilafu isiyojulikana" + +msgid "The following users are missing from your addressbook" +msgstr "" + +#, c-format +msgid "Unable to add user on %s (%s)" +msgstr "" + +#, c-format +msgid "Unable to block user on %s (%s)" +msgstr "" + +#, c-format +msgid "Unable to permit user on %s (%s)" +msgstr "" + +#, c-format +msgid "%s could not be added because your buddy list is full." +msgstr "" + +#, c-format +msgid "%s is not a valid passport account." +msgstr "" + +msgid "Service Temporarily Unavailable." +msgstr "" + +#, fuzzy +msgid "Unknown error." +msgstr "Hitilafu isiyojulikana" + +msgid "Mobile message was not sent because it was too long." +msgstr "" + +#, c-format +msgid "" +"The MSN server will shut down for maintenance in %d minute. You will " +"automatically be signed out at that time. Please finish any conversations " +"in progress.\n" +"\n" +"After the maintenance has been completed, you will be able to successfully " +"sign in." +msgid_plural "" +"The MSN server will shut down for maintenance in %d minutes. You will " +"automatically be signed out at that time. Please finish any conversations " +"in progress.\n" +"\n" +"After the maintenance has been completed, you will be able to successfully " +"sign in." +msgstr[0] "" +msgstr[1] "" + +msgid "" +"Message was not sent because the system is unavailable. This normally " +"happens when the user is blocked or does not exist." +msgstr "" + +msgid "Message was not sent because messages are being sent too quickly." +msgstr "" + +msgid "Message was not sent because an unknown encoding error occurred." +msgstr "" + +msgid "Message was not sent because an unknown error occurred." +msgstr "" + +msgid "Unable to connect" +msgstr "Haikuweza kuunganishwa" + +msgid "Writing error" +msgstr "" + +msgid "Reading error" +msgstr "" + +#, c-format +msgid "" +"Connection error from %s server:\n" +"%s" +msgstr "" + +msgid "Our protocol is not supported by the server." +msgstr "" + +msgid "Error parsing HTTP." +msgstr "" + +msgid "You have signed on from another location." +msgstr "" + +msgid "The MSN servers are temporarily unavailable. Please wait and try again." +msgstr "" + +msgid "The MSN servers are going down temporarily." +msgstr "" + +#, c-format +msgid "Unable to authenticate: %s" +msgstr "" + +msgid "" +"Your MSN buddy list is temporarily unavailable. Please wait and try again." +msgstr "" + +msgid "Handshaking" +msgstr "" + +msgid "Transferring" +msgstr "" + +msgid "Starting authentication" +msgstr "" + +#, fuzzy +msgid "Getting cookie" +msgstr "Anza" + +#, fuzzy +msgid "Sending cookie" +msgstr "Tuma Habari…" + +msgid "Retrieving buddy list" +msgstr "" + +msgid "Away From Computer" +msgstr "" + +msgid "On The Phone" +msgstr "" + +msgid "Out To Lunch" +msgstr "" + +msgid "Message may have not been sent because a timeout occurred:" +msgstr "" + +msgid "Message could not be sent, not allowed while invisible:" +msgstr "" + +msgid "Message could not be sent because the user is offline:" +msgstr "" + +msgid "Message could not be sent because a connection error occurred:" +msgstr "" + +msgid "Message could not be sent because we are sending too quickly:" +msgstr "" + +msgid "" +"Message could not be sent because we were unable to establish a session with " +"the server. This is likely a server problem, try again in a few minutes:" +msgstr "" + +msgid "" +"Message could not be sent because an error with the switchboard occurred:" +msgstr "" + +msgid "Message may have not been sent because an unknown error occurred:" +msgstr "" + +msgid "Delete Buddy from Address Book?" +msgstr "" + +msgid "Do you want to delete this buddy from your address book as well?" +msgstr "" + +#, fuzzy +msgid "The username specified is invalid." +msgstr "Nambari mstari iliyoingizwa ni batili." + +msgid "This Hotmail account may not be active." +msgstr "" + +#, fuzzy +msgid "Profile URL" +msgstr "Profile Linatumika" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "MSN Protocol Plugin" +msgstr "" + +#, c-format +msgid "%s is not a valid group." +msgstr "" + +#, c-format +msgid "%s on %s (%s)" +msgstr "" + +#, fuzzy +msgid "Unable to rename group" +msgstr "Haiwezi kufuta moduli" + +#, fuzzy +msgid "Unable to delete group" +msgstr "Haiwezi kufuta moduli" + +#, c-format +msgid "%s has added you to his or her buddy list." +msgstr "" + +#, c-format +msgid "%s has removed you from his or her buddy list." +msgstr "" + +#, c-format +msgid "No such user: %s" +msgstr "" + +msgid "User lookup" +msgstr "" + +msgid "Reading challenge" +msgstr "" + +#, fuzzy +msgid "Unexpected challenge length from server" +msgstr "Mwitiko wa bila kutegemea kutoka kwa seva" + +#, fuzzy +msgid "Logging in" +msgstr "Ingia" + +msgid "MySpaceIM - No Username Set" +msgstr "" + +msgid "You appear to have no MySpace username." +msgstr "" + +msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)" +msgstr "" + +msgid "Lost connection with server" +msgstr "" + +#. Can't write _()'d strings in array initializers. Workaround. +#. khc: then use N_() in the array initializer and use _() when they are +#. used +msgid "New mail messages" +msgstr "" + +msgid "New blog comments" +msgstr "" + +msgid "New profile comments" +msgstr "" + +msgid "New friend requests!" +msgstr "" + +msgid "New picture comments" +msgstr "" + +#, fuzzy +msgid "MySpace" +msgstr "Nafasi" + +msgid "IM Friends" +msgstr "" + +#, c-format +msgid "" +"%d buddy was added or updated from the server (including buddies already on " +"the server-side list)" +msgid_plural "" +"%d buddies were added or updated from the server (including buddies already " +"on the server-side list)" +msgstr[0] "" +msgstr[1] "" + +msgid "Add contacts from server" +msgstr "" + +#. The session is now set up, ready to be connected. This emits the +#. * signedOn signal, so clients can now do anything with msimprpl, and +#. * we're ready for it (session key, userid, username all setup). +#, fuzzy +msgid "Connected" +msgstr "Unganisho" + +#, c-format +msgid "Protocol error, code %d: %s" +msgstr "" + +#, c-format +msgid "" +"%s Your password is %d characters, greater than the expected maximum length " +"of %d for MySpaceIM. Please shorten your password at http://profileedit." +"myspace.com/index.cfm?fuseaction=accountSettings.changePassword and try " +"again." +msgstr "" + +msgid "MySpaceIM Error" +msgstr "" + +msgid "Invalid input condition" +msgstr "" + +msgid "Read buffer full (2)" +msgstr "" + +msgid "Unparseable message" +msgstr "" + +#, c-format +msgid "Couldn't connect to host: %s (%d)" +msgstr "" + +msgid "Failed to add buddy" +msgstr "" + +msgid "'addbuddy' command failed." +msgstr "" + +msgid "persist command failed" +msgstr "" + +msgid "Failed to remove buddy" +msgstr "" + +msgid "'delbuddy' command failed" +msgstr "" + +msgid "blocklist command failed" +msgstr "" + +#, fuzzy +msgid "Missing Cipher" +msgstr "Faili linalokosekana" + +msgid "The RC4 cipher could not be found" +msgstr "" + +msgid "" +"Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will " +"not be loaded." +msgstr "" + +msgid "Add friends from MySpace.com" +msgstr "" + +msgid "Importing friends failed" +msgstr "" + +#. TODO: find out how +msgid "Find people..." +msgstr "" + +msgid "Change IM name..." +msgstr "" + +msgid "myim URL handler" +msgstr "" + +msgid "No suitable MySpaceIM account could be found to open this myim URL." +msgstr "" + +msgid "Enable the proper MySpaceIM account and try again." +msgstr "" + +msgid "Show display name in status text" +msgstr "" + +msgid "Show headline in status text" +msgstr "" + +msgid "Send emoticons" +msgstr "" + +msgid "Screen resolution (dots per inch)" +msgstr "" + +msgid "Base font size (points)" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Headline" +msgstr "" + +#, fuzzy +msgid "Song" +msgstr "Kitonga" + +msgid "Total Friends" +msgstr "" + +#, fuzzy +msgid "Client Version" +msgstr "Toleo Jipya" + +msgid "MySpaceIM - Username Available" +msgstr "" + +msgid "This username is available. Would you like to set it?" +msgstr "" + +msgid "ONCE SET, THIS CANNOT BE CHANGED!" +msgstr "" + +msgid "MySpaceIM - Please Set a Username" +msgstr "" + +msgid "This username is unavailable." +msgstr "" + +msgid "Please try another username:" +msgstr "" + +#. Protocol won't log in now without a username set.. Disconnect +msgid "No username set" +msgstr "" + +msgid "Please enter a username to check its availability:" +msgstr "" + +#. TODO: icons for each zap +#. Lots of comments for translators: +#. Zap means "to strike suddenly and forcefully as if with a +#. * projectile or weapon." This term often has an electrical +#. * connotation, for example, "he was zapped by electricity when +#. * he put a fork in the toaster." +msgid "Zap" +msgstr "" + +#, c-format +msgid "%s has zapped you!" +msgstr "" + +#, c-format +msgid "Zapping %s..." +msgstr "" + +#. Whack means "to hit or strike someone with a sharp blow" +#, fuzzy +msgid "Whack" +msgstr "Nyuma" + +#, c-format +msgid "%s has whacked you!" +msgstr "" + +#, c-format +msgid "Whacking %s..." +msgstr "" + +#. Torch means "to set on fire." Don't worry, this doesn't +#. * make a whole lot of sense in English, either. Feel free +#. * to translate it literally. +#, fuzzy +msgid "Torch" +msgstr "Machi" + +#, c-format +msgid "%s has torched you!" +msgstr "" + +#, c-format +msgid "Torching %s..." +msgstr "" + +#. Smooch means "to kiss someone, often enthusiastically" +msgid "Smooch" +msgstr "" + +#, c-format +msgid "%s has smooched you!" +msgstr "" + +#, c-format +msgid "Smooching %s..." +msgstr "" + +#. A hug is a display of affection; wrapping your arms around someone +#, fuzzy +msgid "Hug" +msgstr "Ago" + +#, c-format +msgid "%s has hugged you!" +msgstr "" + +#, c-format +msgid "Hugging %s..." +msgstr "" + +#. Slap means "to hit someone with an open/flat hand" +msgid "Slap" +msgstr "" + +#, c-format +msgid "%s has slapped you!" +msgstr "" + +#, c-format +msgid "Slapping %s..." +msgstr "" + +#. Goose means "to pinch someone on their butt" +#, fuzzy +msgid "Goose" +msgstr "Google" + +#, c-format +msgid "%s has goosed you!" +msgstr "" + +#, c-format +msgid "Goosing %s..." +msgstr "" + +#. A high-five is when two people's hands slap each other +#. * in the air above their heads. It is done to celebrate +#. * something, often a victory, or to congratulate someone. +msgid "High-five" +msgstr "" + +#, c-format +msgid "%s has high-fived you!" +msgstr "" + +#, c-format +msgid "High-fiving %s..." +msgstr "" + +#. We're not entirely sure what the MySpace people mean by +#. * this... but we think it's the equivalent of "prank." Or, for +#. * someone to perform a mischievous trick or practical joke. +msgid "Punk" +msgstr "" + +#, c-format +msgid "%s has punk'd you!" +msgstr "" + +#, c-format +msgid "Punking %s..." +msgstr "" + +#. Raspberry is a slang term for the vibrating sound made +#. * when you stick your tongue out of your mouth with your +#. * lips closed and blow. It is typically done when +#. * gloating or bragging. Nowadays it's a pretty silly +#. * gesture, so it does not carry a harsh negative +#. * connotation. It is generally used in a playful tone +#. * with friends. +msgid "Raspberry" +msgstr "" + +#, c-format +msgid "%s has raspberried you!" +msgstr "" + +#, c-format +msgid "Raspberrying %s..." +msgstr "" + +msgid "Required parameters not passed in" +msgstr "" + +msgid "Unable to write to network" +msgstr "" + +msgid "Unable to read from network" +msgstr "" + +msgid "Error communicating with server" +msgstr "" + +#, fuzzy +msgid "Conference not found" +msgstr "Mstari haujapatikana" + +#, fuzzy +msgid "Conference does not exist" +msgstr "Faili lililohitajiwa halipo" + +#, fuzzy +msgid "A folder with that name already exists" +msgstr "Ufunguo wenye lakabu kama hii tayari upo." + +#, fuzzy +msgid "Not supported" +msgstr "Haujaanza" + +#, fuzzy +msgid "Password has expired" +msgstr "Nywila inatakiwa" + +#, fuzzy +msgid "Incorrect password" +msgstr "Nywila ya sasa hivi:" + +#, fuzzy +msgid "User not found" +msgstr "Seva haipatikani" + +msgid "Account has been disabled" +msgstr "" + +msgid "The server could not access the directory" +msgstr "" + +msgid "Your system administrator has disabled this operation" +msgstr "" + +msgid "The server is unavailable; try again later" +msgstr "" + +msgid "Cannot add a contact to the same folder twice" +msgstr "" + +msgid "Cannot add yourself" +msgstr "" + +msgid "Master archive is misconfigured" +msgstr "" + +msgid "Incorrect username or password" +msgstr "" + +msgid "Could not recognize the host of the username you entered" +msgstr "" + +msgid "" +"Your account has been disabled because too many incorrect passwords were " +"entered" +msgstr "" + +msgid "You cannot add the same person twice to a conversation" +msgstr "" + +msgid "You have reached your limit for the number of contacts allowed" +msgstr "" + +msgid "You have entered an incorrect username" +msgstr "" + +msgid "An error occurred while updating the directory" +msgstr "" + +msgid "Incompatible protocol version" +msgstr "" + +msgid "The user has blocked you" +msgstr "" + +msgid "" +"This evaluation version does not allow more than ten users to log in at one " +"time" +msgstr "" + +msgid "The user is either offline or you are blocked" +msgstr "" + +#, fuzzy, c-format +msgid "Unknown error: 0x%X" +msgstr "Hitilafu isiyojulikana" + +#, c-format +msgid "Login failed (%s)." +msgstr "" + +#, c-format +msgid "Unable to send message. Could not get details for user (%s)." +msgstr "" + +#, c-format +msgid "Unable to add %s to your buddy list (%s)." +msgstr "" + +#. TODO: Improve this! message to who or for what conference? +#, c-format +msgid "Unable to send message (%s)." +msgstr "" + +#, c-format +msgid "Unable to invite user (%s)." +msgstr "" + +#, c-format +msgid "Unable to send message to %s. Could not create the conference (%s)." +msgstr "" + +#, c-format +msgid "Unable to send message. Could not create the conference (%s)." +msgstr "" + +#, c-format +msgid "" +"Unable to move user %s to folder %s in the server side list. Error while " +"creating folder (%s)." +msgstr "" + +#, c-format +msgid "" +"Unable to add %s to your buddy list. Error creating folder in server side " +"list (%s)." +msgstr "" + +#, c-format +msgid "Could not get details for user %s (%s)." +msgstr "" + +#, c-format +msgid "Unable to add user to privacy list (%s)." +msgstr "" + +#, c-format +msgid "Unable to add %s to deny list (%s)." +msgstr "" + +#, c-format +msgid "Unable to add %s to permit list (%s)." +msgstr "" + +#, c-format +msgid "Unable to remove %s from privacy list (%s)." +msgstr "" + +#, c-format +msgid "Unable to change server side privacy settings (%s)." +msgstr "" + +#, c-format +msgid "Unable to create conference (%s)." +msgstr "" + +msgid "Error communicating with server. Closing connection." +msgstr "" + +msgid "Telephone Number" +msgstr "" + +msgid "Personal Title" +msgstr "" + +msgid "Mailstop" +msgstr "" + +msgid "User ID" +msgstr "" + +#. tag = _("DN"); +#. value = nm_user_record_get_dn(user_record); +#. if (value) { +#. purple_notify_user_info_add_pair(user_info, tag, value); +#. } +#. +#, fuzzy +msgid "Full name" +msgstr "Jina la faili:" + +#, c-format +msgid "GroupWise Conference %d" +msgstr "" + +msgid "Authenticating..." +msgstr "" + +#, fuzzy +msgid "Unable to connect to server." +msgstr "Imeshindwa kuipata seva wakala" + +msgid "Waiting for response..." +msgstr "" + +#, c-format +msgid "%s has been invited to this conversation." +msgstr "" + +msgid "Invitation to Conversation" +msgstr "" + +#, c-format +msgid "" +"Invitation from: %s\n" +"\n" +"Sent: %s" +msgstr "" + +#, fuzzy +msgid "Would you like to join the conversation?" +msgstr "Ungependa kuhifadhi faili hili?" + +msgid "You have been logged out because you logged in at another workstation." +msgstr "" + +#, c-format +msgid "" +"%s appears to be offline and did not receive the message that you just sent." +msgstr "" + +msgid "" +"Unable to connect to server. Please enter the address of the server you wish " +"to connect to." +msgstr "" + +msgid "Error. SSL support is not installed." +msgstr "" + +msgid "This conference has been closed. No more messages can be sent." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "Novell GroupWise Messenger Protocol Plugin" +msgstr "" + +msgid "Server address" +msgstr "" + +msgid "Server port" +msgstr "" + +msgid "Could not join chat room" +msgstr "" + +msgid "Invalid chat room name" +msgstr "" + +#, fuzzy +msgid "Server closed the connection." +msgstr "Mwenzi SSL imefunga uunganisho huu" + +#, c-format +msgid "" +"Lost connection with server:\n" +"%s" +msgstr "" + +msgid "Received invalid data on connection with server." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "AIM Protocol Plugin" +msgstr "" + +msgid "ICQ UIN..." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "ICQ Protocol Plugin" +msgstr "" + +#, fuzzy +msgid "Encoding" +msgstr "Kisimba:" + +#, fuzzy +msgid "The remote user has closed the connection." +msgstr "Mwenzi SSL imefunga uunganisho huu" + +msgid "The remote user has declined your request." +msgstr "" + +#, c-format +msgid "Lost connection with the remote user:<br>%s" +msgstr "" + +msgid "Received invalid data on connection with remote user." +msgstr "" + +msgid "Could not establish a connection with the remote user." +msgstr "" + +msgid "Direct IM established" +msgstr "" + +#, c-format +msgid "" +"%s tried to send you a %s file, but we only allow files up to %s over Direct " +"IM. Try using file transfer instead.\n" +msgstr "" + +#, c-format +msgid "File %s is %s, which is larger than the maximum size of %s." +msgstr "" + +#, fuzzy +msgid "Invalid error" +msgstr "Kizuizi batili" + +#, fuzzy +msgid "Invalid SNAC" +msgstr "Kizuizi batili" + +msgid "Rate to host" +msgstr "" + +msgid "Rate to client" +msgstr "" + +msgid "Service unavailable" +msgstr "" + +msgid "Service not defined" +msgstr "" + +msgid "Obsolete SNAC" +msgstr "" + +msgid "Not supported by host" +msgstr "" + +msgid "Not supported by client" +msgstr "" + +msgid "Refused by client" +msgstr "" + +msgid "Reply too big" +msgstr "" + +msgid "Responses lost" +msgstr "" + +#, fuzzy +msgid "Request denied" +msgstr "Ufikio umekataliwa" + +msgid "Busted SNAC payload" +msgstr "" + +msgid "Insufficient rights" +msgstr "" + +msgid "In local permit/deny" +msgstr "" + +msgid "Warning level too high (sender)" +msgstr "" + +msgid "Warning level too high (receiver)" +msgstr "" + +msgid "User temporarily unavailable" +msgstr "" + +#, fuzzy +msgid "No match" +msgstr "%S oanisho" + +msgid "List overflow" +msgstr "" + +msgid "Request ambiguous" +msgstr "" + +msgid "Queue full" +msgstr "" + +msgid "Not while on AOL" +msgstr "" + +msgid "" +"(There was an error receiving this message. The buddy you are speaking with " +"is probably using a different encoding than expected. If you know what " +"encoding he is using, you can specify it in the advanced account options for " +"your AIM/ICQ account.)" +msgstr "" + +#, c-format +msgid "" +"(There was an error receiving this message. Either you and %s have " +"different encodings selected, or %s has a buggy client.)" +msgstr "" + +#. Label +msgid "Buddy Icon" +msgstr "" + +msgid "Voice" +msgstr "" + +msgid "AIM Direct IM" +msgstr "" + +#, fuzzy +msgid "Get File" +msgstr "Mafaili ya Matini" + +#, fuzzy +msgid "Games" +msgstr "Jina" + +#, fuzzy +msgid "Add-Ins" +msgstr "Nyongeza" + +msgid "Send Buddy List" +msgstr "" + +msgid "ICQ Direct Connect" +msgstr "" + +msgid "AP User" +msgstr "" + +msgid "ICQ RTF" +msgstr "" + +msgid "Nihilist" +msgstr "" + +msgid "ICQ Server Relay" +msgstr "" + +msgid "Old ICQ UTF8" +msgstr "" + +msgid "Trillian Encryption" +msgstr "" + +msgid "ICQ UTF8" +msgstr "" + +msgid "Hiptop" +msgstr "" + +#, fuzzy +msgid "Security Enabled" +msgstr "Levo ya Usalama" + +#, fuzzy +msgid "Video Chat" +msgstr "Podikasti Video" + +msgid "iChat AV" +msgstr "" + +#, fuzzy +msgid "Live Video" +msgstr "Hifadhi video" + +#, fuzzy +msgid "Camera" +msgstr "Cameroon" + +msgid "Screen Sharing" +msgstr "" + +msgid "Free For Chat" +msgstr "" + +msgid "Not Available" +msgstr "Haipatikani" + +msgid "Occupied" +msgstr "" + +msgid "Web Aware" +msgstr "" + +msgid "Invisible" +msgstr "" + +msgid "IP Address" +msgstr "Anwani-IP" + +#, fuzzy +msgid "Warning Level" +msgstr "Jumbe za tahadhari" + +msgid "Buddy Comment" +msgstr "" + +#, c-format +msgid "" +"Could not connect to authentication server:\n" +"%s" +msgstr "" + +#, c-format +msgid "" +"Could not connect to BOS server:\n" +"%s" +msgstr "" + +#, fuzzy +msgid "Username sent" +msgstr "Jina la mtumiaji" + +msgid "Connection established, cookie sent" +msgstr "" + +#. TODO: Don't call this with ssi +msgid "Finalizing connection" +msgstr "" + +#, c-format +msgid "" +"Unable to login: Could not sign on as %s because the username is invalid. " +"Usernames must be a valid email address, or start with a letter and contain " +"only letters, numbers and spaces, or contain only numbers." +msgstr "" + +#. Unregistered username +#. uid is not exist +#, fuzzy +msgid "Invalid username." +msgstr "Jina batili la moduli." + +#, fuzzy +msgid "Incorrect password." +msgstr "Nywila ya sasa hivi:" + +#. Suspended account +msgid "Your account is currently suspended." +msgstr "" + +#. service temporarily unavailable +msgid "The AOL Instant Messenger service is temporarily unavailable." +msgstr "" + +#. username connecting too frequently +#. IP address connecting too frequently +msgid "" +"You have been connecting and disconnecting too frequently. Wait ten minutes " +"and try again. If you continue to try, you will need to wait even longer." +msgstr "" + +#, c-format +msgid "The client version you are using is too old. Please upgrade at %s" +msgstr "" + +#, fuzzy +msgid "Could Not Connect" +msgstr "Imeshindwa kuunganisha" + +msgid "Received authorization" +msgstr "" + +#, fuzzy +msgid "The SecurID key entered is invalid." +msgstr "Nambari mstari iliyoingizwa ni batili." + +msgid "Enter SecurID" +msgstr "" + +msgid "Enter the 6 digit number from the digital display." +msgstr "" + +#. * +#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons. +#. +#, fuzzy +msgid "_OK" +msgstr "Sawa" + +#, c-format +msgid "You may be disconnected shortly. If so, check %s for updates." +msgstr "" + +msgid "Unable to get a valid AIM login hash." +msgstr "" + +#, c-format +msgid "You may be disconnected shortly. Check %s for updates." +msgstr "" + +msgid "Unable to get a valid login hash." +msgstr "" + +#, fuzzy +msgid "Password sent" +msgstr "Nywila" + +msgid "Unable to initialize connection" +msgstr "" + +msgid "Please authorize me so I can add you to my buddy list." +msgstr "" + +msgid "Authorization Request Message:" +msgstr "" + +msgid "Please authorize me!" +msgstr "" + +msgid "No reason given." +msgstr "" + +msgid "Authorization Denied Message:" +msgstr "" + +#, c-format +msgid "" +"The user %u has denied your request to add them to your buddy list for the " +"following reason:\n" +"%s" +msgstr "" + +msgid "ICQ authorization denied." +msgstr "" + +#. Someone has granted you authorization +#, c-format +msgid "The user %u has granted your request to add them to your buddy list." +msgstr "" + +#, c-format +msgid "" +"You have received a special message\n" +"\n" +"From: %s [%s]\n" +"%s" +msgstr "" + +#, c-format +msgid "" +"You have received an ICQ page\n" +"\n" +"From: %s [%s]\n" +"%s" +msgstr "" + +#, c-format +msgid "" +"You have received an ICQ email from %s [%s]\n" +"\n" +"Message is:\n" +"%s" +msgstr "" + +#, c-format +msgid "ICQ user %u has sent you a buddy: %s (%s)" +msgstr "" + +msgid "Do you want to add this buddy to your buddy list?" +msgstr "" + +#, fuzzy +msgid "_Add" +msgstr "Ongeza" + +msgid "_Decline" +msgstr "" + +#, c-format +msgid "You missed %hu message from %s because it was invalid." +msgid_plural "You missed %hu messages from %s because they were invalid." +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "You missed %hu message from %s because it was too large." +msgid_plural "You missed %hu messages from %s because they were too large." +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "" +"You missed %hu message from %s because the rate limit has been exceeded." +msgid_plural "" +"You missed %hu messages from %s because the rate limit has been exceeded." +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "" +"You missed %hu message from %s because his/her warning level is too high." +msgid_plural "" +"You missed %hu messages from %s because his/her warning level is too high." +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "You missed %hu message from %s because your warning level is too high." +msgid_plural "" +"You missed %hu messages from %s because your warning level is too high." +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "You missed %hu message from %s for an unknown reason." +msgid_plural "You missed %hu messages from %s for an unknown reason." +msgstr[0] "" +msgstr[1] "" + +#. Data is assumed to be the destination bn +#, c-format +msgid "Unable to send message: %s" +msgstr "" + +#, fuzzy +msgid "Unknown reason." +msgstr "Hitilafu isiyojulikana" + +#, c-format +msgid "Unable to send message to %s:" +msgstr "" + +#, c-format +msgid "User information not available: %s" +msgstr "" + +msgid "Online Since" +msgstr "" + +msgid "Member Since" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Your AIM connection may be lost." +msgstr "" + +#. The conversion failed! +msgid "" +"[Unable to display a message from this user because it contained invalid " +"characters.]" +msgstr "" + +msgid "" +"The last action you attempted could not be performed because you are over " +"the rate limit. Please wait 10 seconds and try again." +msgstr "" + +#, c-format +msgid "You have been disconnected from chat room %s." +msgstr "" + +msgid "Mobile Phone" +msgstr "" + +msgid "Personal Web Page" +msgstr "" + +#. aim_userinfo_t +#. strip_html_tags +#, fuzzy +msgid "Additional Information" +msgstr "Inachunguza taarifa" + +msgid "Zip Code" +msgstr "" + +#, fuzzy +msgid "Work Information" +msgstr "Taarifa Zaidi" + +msgid "Division" +msgstr "" + +#, fuzzy +msgid "Position" +msgstr "Nafasi:" + +msgid "Web Page" +msgstr "" + +msgid "Pop-Up Message" +msgstr "" + +#, c-format +msgid "The following username is associated with %s" +msgid_plural "The following usernames are associated with %s" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "No results found for email address %s" +msgstr "" + +#, c-format +msgid "You should receive an email asking to confirm %s." +msgstr "" + +msgid "Account Confirmation Requested" +msgstr "" + +#, c-format +msgid "" +"Error 0x%04x: Unable to format username because the requested name differs " +"from the original." +msgstr "" + +#, c-format +msgid "Error 0x%04x: Unable to format username because it is invalid." +msgstr "" + +#, c-format +msgid "" +"Error 0x%04x: Unable to format username because the requested name is too " +"long." +msgstr "" + +#, c-format +msgid "" +"Error 0x%04x: Unable to change email address because there is already a " +"request pending for this username." +msgstr "" + +#, c-format +msgid "" +"Error 0x%04x: Unable to change email address because the given address has " +"too many usernames associated with it." +msgstr "" + +#, c-format +msgid "" +"Error 0x%04x: Unable to change email address because the given address is " +"invalid." +msgstr "" + +#, c-format +msgid "Error 0x%04x: Unknown error." +msgstr "" + +msgid "Error Changing Account Info" +msgstr "" + +#, c-format +msgid "The email address for %s is %s" +msgstr "" + +msgid "Account Info" +msgstr "" + +msgid "" +"Your IM Image was not sent. You must be Direct Connected to send IM Images." +msgstr "" + +msgid "Unable to set AIM profile." +msgstr "" + +msgid "" +"You have probably requested to set your profile before the login procedure " +"completed. Your profile remains unset; try setting it again when you are " +"fully connected." +msgstr "" + +#, c-format +msgid "" +"The maximum profile length of %d byte has been exceeded. It has been " +"truncated for you." +msgid_plural "" +"The maximum profile length of %d bytes has been exceeded. It has been " +"truncated for you." +msgstr[0] "" +msgstr[1] "" + +msgid "Profile too long." +msgstr "" + +#, c-format +msgid "" +"The maximum away message length of %d byte has been exceeded. It has been " +"truncated for you." +msgid_plural "" +"The maximum away message length of %d bytes has been exceeded. It has been " +"truncated for you." +msgstr[0] "" +msgstr[1] "" + +msgid "Away message too long." +msgstr "" + +#, c-format +msgid "" +"Could not add the buddy %s because the username is invalid. Usernames must " +"be a valid email address, or start with a letter and contain only letters, " +"numbers and spaces, or contain only numbers." +msgstr "" + +#, fuzzy +msgid "Unable to Add" +msgstr "Nimeshindwa Kusasisha" + +msgid "Unable to Retrieve Buddy List" +msgstr "" + +msgid "" +"The AIM servers were temporarily unable to send your buddy list. Your buddy " +"list is not lost, and will probably become available in a few minutes." +msgstr "" + +msgid "Orphans" +msgstr "" + +#, c-format +msgid "" +"Could not add the buddy %s because you have too many buddies in your buddy " +"list. Please remove one and try again." +msgstr "" + +#, fuzzy +msgid "(no name)" +msgstr "(hakuna lakabu)" + +#, c-format +msgid "Could not add the buddy %s for an unknown reason." +msgstr "" + +#, c-format +msgid "" +"The user %s has given you permission to add him or her to your buddy list. " +"Do you want to add this user?" +msgstr "" + +msgid "Authorization Given" +msgstr "" + +#. Granted +#, c-format +msgid "The user %s has granted your request to add them to your buddy list." +msgstr "" + +msgid "Authorization Granted" +msgstr "" + +#. Denied +#, c-format +msgid "" +"The user %s has denied your request to add them to your buddy list for the " +"following reason:\n" +"%s" +msgstr "" + +#, fuzzy +msgid "Authorization Denied" +msgstr "Uthibitisho unatakiwa" + +msgid "_Exchange:" +msgstr "" + +msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats." +msgstr "" + +msgid "iTunes Music Store Link" +msgstr "" + +#, c-format +msgid "Buddy Comment for %s" +msgstr "" + +msgid "Buddy Comment:" +msgstr "" + +#, c-format +msgid "You have selected to open a Direct IM connection with %s." +msgstr "" + +msgid "" +"Because this reveals your IP address, it may be considered a security risk. " +"Do you wish to continue?" +msgstr "" + +#, fuzzy +msgid "C_onnect" +msgstr "Yaliyomo" + +msgid "Get AIM Info" +msgstr "" + +#. We only do this if the user is in our buddy list +msgid "Edit Buddy Comment" +msgstr "" + +msgid "Get Status Msg" +msgstr "" + +#, fuzzy +msgid "Direct IM" +msgstr "Mwelekeo" + +msgid "Re-request Authorization" +msgstr "" + +msgid "Require authorization" +msgstr "" + +msgid "Web aware (enabling this will cause you to receive SPAM!)" +msgstr "" + +msgid "ICQ Privacy Options" +msgstr "" + +msgid "The new formatting is invalid." +msgstr "" + +msgid "Username formatting can change only capitalization and whitespace." +msgstr "" + +msgid "Change Address To:" +msgstr "" + +msgid "<i>you are not waiting for authorization</i>" +msgstr "" + +msgid "You are awaiting authorization from the following buddies" +msgstr "" + +msgid "" +"You can re-request authorization from these buddies by right-clicking on " +"them and selecting \"Re-request Authorization.\"" +msgstr "" + +msgid "Find Buddy by Email" +msgstr "" + +msgid "Search for a buddy by email address" +msgstr "" + +msgid "Type the email address of the buddy you are searching for." +msgstr "" + +#, fuzzy +msgid "_Search" +msgstr "Tafuta" + +msgid "Set User Info (web)..." +msgstr "" + +#, fuzzy +msgid "Change Password (web)" +msgstr "Badil &Nywila" + +msgid "Configure IM Forwarding (web)" +msgstr "" + +#. ICQ actions +msgid "Set Privacy Options..." +msgstr "" + +#. AIM actions +#, fuzzy +msgid "Confirm Account" +msgstr "Thibitisha kufunga" + +msgid "Display Currently Registered Email Address" +msgstr "" + +msgid "Change Currently Registered Email Address..." +msgstr "" + +msgid "Show Buddies Awaiting Authorization" +msgstr "" + +msgid "Search for Buddy by Email Address..." +msgstr "" + +msgid "Search for Buddy by Information" +msgstr "" + +msgid "" +"Always use AIM/ICQ proxy server for\n" +"file transfers and direct IM (slower,\n" +"but does not reveal your IP address)" +msgstr "" + +msgid "Allow multiple simultaneous logins" +msgstr "" + +#, c-format +msgid "Asking %s to connect to us at %s:%hu for Direct IM." +msgstr "" + +#, c-format +msgid "Attempting to connect to %s:%hu." +msgstr "" + +msgid "Attempting to connect via proxy server." +msgstr "" + +#, c-format +msgid "%s has just asked to directly connect to %s" +msgstr "" + +msgid "" +"This requires a direct connection between the two computers and is necessary " +"for IM Images. Because your IP address will be revealed, this may be " +"considered a privacy risk." +msgstr "" + +msgid "Aquarius" +msgstr "" + +msgid "Pisces" +msgstr "" + +msgid "Aries" +msgstr "" + +#, fuzzy +msgid "Taurus" +msgstr "Kinauru" + +msgid "Gemini" +msgstr "" + +#, fuzzy +msgid "Cancer" +msgstr "Ghairi" + +#, fuzzy +msgid "Leo" +msgstr "Lao" + +msgid "Virgo" +msgstr "" + +#, fuzzy +msgid "Libra" +msgstr "Libya" + +msgid "Scorpio" +msgstr "" + +msgid "Sagittarius" +msgstr "" + +msgid "Capricorn" +msgstr "" + +#, fuzzy +msgid "Rat" +msgstr "Jmosi" + +msgid "Ox" +msgstr "" + +#, fuzzy +msgid "Tiger" +msgstr "Niger" + +#, fuzzy +msgid "Rabbit" +msgstr "Mibbit" + +msgid "Dragon" +msgstr "" + +#, fuzzy +msgid "Snake" +msgstr "Hifadhi" + +#, fuzzy +msgid "Horse" +msgstr "Nyumbani" + +msgid "Goat" +msgstr "" + +#, fuzzy +msgid "Monkey" +msgstr "Jumatatu" + +#, fuzzy +msgid "Rooster" +msgstr "Mwandishi wa habari" + +msgid "Dog" +msgstr "" + +msgid "Pig" +msgstr "" + +#, fuzzy +msgid "Other" +msgstr "Wengine" + +#, fuzzy +msgid "Visible" +msgstr "Lemaza" + +msgid "Friend Only" +msgstr "" + +#, fuzzy +msgid "Private" +msgstr "Faragha" + +msgid "QQ Number" +msgstr "" + +msgid "Country/Region" +msgstr "" + +msgid "Province/State" +msgstr "" + +#, fuzzy +msgid "Zipcode" +msgstr "Folda la Zipu" + +msgid "Phone Number" +msgstr "" + +msgid "Authorize adding" +msgstr "" + +msgid "Cellphone Number" +msgstr "" + +msgid "Personal Introduction" +msgstr "" + +msgid "City/Area" +msgstr "" + +msgid "Publish Mobile" +msgstr "" + +msgid "Publish Contact" +msgstr "" + +#, fuzzy +msgid "College" +msgstr "Kunja" + +msgid "Horoscope" +msgstr "" + +msgid "Zodiac" +msgstr "" + +#, fuzzy +msgid "Blood" +msgstr "Zuia" + +#, fuzzy +msgid "True" +msgstr "Jnne" + +#, fuzzy +msgid "False" +msgstr "si kweli" + +msgid "Modify Contact" +msgstr "" + +#, fuzzy +msgid "Modify Address" +msgstr "Anwani ya Barua pepe" + +msgid "Modify Extended Information" +msgstr "" + +#, fuzzy +msgid "Modify Information" +msgstr "Taarifa Zaidi" + +msgid "Update" +msgstr "Sasisha" + +msgid "Could not change buddy information." +msgstr "" + +#, fuzzy +msgid "Mobile" +msgstr "Moduli" + +#, fuzzy +msgid "Note" +msgstr "Bila" + +#. callback +msgid "Buddy Memo" +msgstr "" + +msgid "Change his/her memo as you like" +msgstr "" + +#, fuzzy +msgid "_Modify" +msgstr "R&ekebisha" + +msgid "Memo Modify" +msgstr "" + +msgid "Server says:" +msgstr "" + +msgid "Your request was accepted." +msgstr "" + +msgid "Your request was rejected." +msgstr "" + +#, c-format +msgid "%u requires verification" +msgstr "" + +msgid "Add buddy question" +msgstr "" + +#, fuzzy +msgid "Enter answer here" +msgstr "Ingiza neno tafuti:" + +#, fuzzy +msgid "Send" +msgstr "Kivenda" + +#, fuzzy +msgid "Invalid answer." +msgstr "Agumenti batili" + +msgid "Authorization denied message:" +msgstr "" + +msgid "Sorry, you're not my style." +msgstr "" + +#, c-format +msgid "%u needs authorization" +msgstr "" + +msgid "Add buddy authorize" +msgstr "" + +msgid "Enter request here" +msgstr "" + +msgid "Would you be my friend?" +msgstr "" + +msgid "QQ Buddy" +msgstr "" + +msgid "Add buddy" +msgstr "" + +msgid "Invalid QQ Number" +msgstr "" + +msgid "Failed sending authorize" +msgstr "" + +#, c-format +msgid "Failed removing buddy %u" +msgstr "" + +#, c-format +msgid "Failed removing me from %d's buddy list" +msgstr "" + +msgid "No reason given" +msgstr "" + +#. only need to get value +#, c-format +msgid "You have been added by %s" +msgstr "" + +#, fuzzy +msgid "Would you like to add him?" +msgstr "Ungependa kuhifadhi faili hili?" + +#, c-format +msgid "Rejected by %s" +msgstr "" + +#, fuzzy, c-format +msgid "Message: %s" +msgstr "Ujumbe" + +msgid "ID: " +msgstr "" + +#, fuzzy +msgid "Group ID" +msgstr "Kusanya kwa:" + +msgid "QQ Qun" +msgstr "" + +msgid "Please enter Qun number" +msgstr "" + +msgid "You can only search for permanent Qun\n" +msgstr "" + +msgid "(Invalid UTF-8 string)" +msgstr "" + +#, fuzzy +msgid "Not member" +msgstr "Novemba" + +#, fuzzy +msgid "Member" +msgstr "Novemba" + +msgid "Requesting" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Notice" +msgstr "" + +#, fuzzy +msgid "Detail" +msgstr "Ufafanuzi" + +msgid "Creator" +msgstr "" + +#, fuzzy +msgid "About me" +msgstr "Kuhusu %S" + +msgid "Category" +msgstr "" + +msgid "The Qun does not allow others to join" +msgstr "" + +msgid "Join QQ Qun" +msgstr "" + +msgid "Input request here" +msgstr "" + +#, c-format +msgid "Successfully joined Qun %s (%u)" +msgstr "" + +#, fuzzy +msgid "Successfully joined Qun" +msgstr "Imesakinishwa kimafanikio %S." + +#, c-format +msgid "Qun %u denied from joining" +msgstr "" + +msgid "QQ Qun Operation" +msgstr "" + +#, fuzzy +msgid "Failed:" +msgstr "Imeshindwa" + +msgid "Join Qun, Unknown Reply" +msgstr "" + +#, fuzzy +msgid "Quit Qun" +msgstr "Funga %s" + +msgid "" +"Note, if you are the creator, \n" +"this operation will eventually remove this Qun." +msgstr "" + +msgid "Sorry, you are not our style" +msgstr "" + +msgid "Successfully changed Qun members" +msgstr "" + +msgid "Successfully changed Qun information" +msgstr "" + +msgid "You have successfully created a Qun" +msgstr "" + +msgid "Would you like to set up detailed information now?" +msgstr "" + +#, fuzzy +msgid "Setup" +msgstr "Sep" + +#, c-format +msgid "%u requested to join Qun %u for %s" +msgstr "" + +#, c-format +msgid "%u request to join Qun %u" +msgstr "" + +#, c-format +msgid "Failed to join Qun %u, operated by admin %u" +msgstr "" + +#, c-format +msgid "<b>Joining Qun %u is approved by admin %u for %s</b>" +msgstr "" + +#, c-format +msgid "<b>Removed buddy %u.</b>" +msgstr "" + +#, c-format +msgid "<b>New buddy %u joined.</b>" +msgstr "" + +#, fuzzy, c-format +msgid "Unknown-%d" +msgstr "Isiyojulikana: %S" + +#, fuzzy +msgid "Level" +msgstr "Lebo" + +msgid " VIP" +msgstr "" + +msgid " TCP" +msgstr "" + +msgid " FromMobile" +msgstr "" + +msgid " BindMobile" +msgstr "" + +#, fuzzy +msgid " Video" +msgstr "Hifadhi video" + +#, fuzzy +msgid " Zone" +msgstr "Bila" + +#, fuzzy +msgid "Flag" +msgstr "Kifulah" + +msgid "Ver" +msgstr "" + +#, fuzzy +msgid "Invalid name" +msgstr "Njia batili" + +msgid "Select icon..." +msgstr "" + +#, c-format +msgid "<b>Login time</b>: %d-%d-%d, %d:%d:%d<br>\n" +msgstr "" + +#, c-format +msgid "<b>Total Online Buddies</b>: %d<br>\n" +msgstr "" + +#, c-format +msgid "<b>Last Refresh</b>: %d-%d-%d, %d:%d:%d<br>\n" +msgstr "" + +#, c-format +msgid "<b>Server</b>: %s<br>\n" +msgstr "" + +#, c-format +msgid "<b>Client Tag</b>: %s<br>\n" +msgstr "" + +#, c-format +msgid "<b>Connection Mode</b>: %s<br>\n" +msgstr "" + +#, c-format +msgid "<b>My Internet IP</b>: %s:%d<br>\n" +msgstr "" + +#, c-format +msgid "<b>Sent</b>: %lu<br>\n" +msgstr "" + +#, c-format +msgid "<b>Resend</b>: %lu<br>\n" +msgstr "" + +#, c-format +msgid "<b>Lost</b>: %lu<br>\n" +msgstr "" + +#, c-format +msgid "<b>Received</b>: %lu<br>\n" +msgstr "" + +#, c-format +msgid "<b>Received Duplicate</b>: %lu<br>\n" +msgstr "" + +#, c-format +msgid "<b>Time</b>: %d-%d-%d, %d:%d:%d<br>\n" +msgstr "" + +#, c-format +msgid "<b>IP</b>: %s<br>\n" +msgstr "" + +#, fuzzy +msgid "Login Information" +msgstr "Taarifa Zaidi" + +msgid "<p><b>Original Author</b>:<br>\n" +msgstr "" + +msgid "<p><b>Code Contributors</b>:<br>\n" +msgstr "" + +msgid "<p><b>Lovely Patch Writers</b>:<br>\n" +msgstr "" + +msgid "<p><b>Acknowledgement</b>:<br>\n" +msgstr "" + +msgid "<p><b>Scrupulous Testers</b>:<br>\n" +msgstr "" + +msgid "and more, please let me know... thank you!))" +msgstr "" + +msgid "<p><i>And, all the boys in the backroom...</i><br>\n" +msgstr "" + +msgid "<i>Feel free to join us!</i> :)" +msgstr "" + +#, c-format +msgid "About OpenQ %s" +msgstr "" + +msgid "Change Icon" +msgstr "" + +#, fuzzy +msgid "Change Password" +msgstr "Badil &Nywila" + +#, fuzzy +msgid "Account Information" +msgstr "Inachunguza taarifa" + +msgid "Update all QQ Quns" +msgstr "" + +msgid "About OpenQ" +msgstr "" + +msgid "Modify Buddy Memo" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "QQ Protocol Plugin" +msgstr "" + +msgid "Auto" +msgstr "" + +#, fuzzy +msgid "Select Server" +msgstr "SSL Seva" + +msgid "QQ2005" +msgstr "" + +msgid "QQ2007" +msgstr "" + +msgid "QQ2008" +msgstr "" + +msgid "Connect by TCP" +msgstr "" + +msgid "Show server notice" +msgstr "" + +msgid "Show server news" +msgstr "" + +msgid "Show chat room when msg comes" +msgstr "" + +msgid "Keep alive interval (seconds)" +msgstr "" + +msgid "Update interval (seconds)" +msgstr "" + +msgid "Cannot decrypt server reply" +msgstr "" + +#, c-format +msgid "Failed requesting token, 0x%02X" +msgstr "" + +#, c-format +msgid "Invalid token len, %d" +msgstr "" + +#. extend redirect used in QQ2006 +msgid "Redirect_EX is not currently supported" +msgstr "" + +#. need activation +#. need activation +#. need activation +#, fuzzy +msgid "Activation required" +msgstr "Uthibitisho unatakiwa" + +#, c-format +msgid "Unknown reply code when logging in (0x%02X)" +msgstr "" + +msgid "Could not decrypt server reply" +msgstr "" + +msgid "Requesting captcha" +msgstr "" + +msgid "Checking captcha" +msgstr "" + +msgid "Failed captcha verification" +msgstr "" + +#, fuzzy +msgid "Captcha Image" +msgstr "Naki&li Picha" + +msgid "Enter code" +msgstr "" + +msgid "QQ Captcha Verification" +msgstr "" + +msgid "Enter the text from the image" +msgstr "" + +#, c-format +msgid "Unknown reply when checking password (0x%02X)" +msgstr "" + +#, c-format +msgid "" +"Unknown reply code when logging in (0x%02X):\n" +"%s" +msgstr "" + +#, fuzzy +msgid "Unable to connect." +msgstr "Haikuweza kuunganishwa" + +#, fuzzy +msgid "Socket error" +msgstr "Hitilafu ya hati" + +msgid "Unable to read from socket" +msgstr "" + +#, fuzzy +msgid "Write Error" +msgstr "Hitilafu ya Printa" + +#, fuzzy +msgid "Connection lost" +msgstr "Unganisho" + +#, fuzzy +msgid "Getting server" +msgstr "Anza" + +msgid "Requesting token" +msgstr "" + +msgid "Couldn't resolve host" +msgstr "" + +msgid "Invalid server or port" +msgstr "" + +#, fuzzy +msgid "Connecting to server" +msgstr "Naunganisha na %1$S…" + +#, fuzzy +msgid "QQ Error" +msgstr "Hitikafu " + +#, c-format +msgid "" +"Server News:\n" +"%s\n" +"%s\n" +"%s" +msgstr "" + +#, c-format +msgid "%s:%s" +msgstr "" + +#, fuzzy, c-format +msgid "From %s:" +msgstr "Kutoka %S" + +#, c-format +msgid "" +"Server notice From %s: \n" +"%s" +msgstr "" + +msgid "Unknown SERVER CMD" +msgstr "" + +#, c-format +msgid "" +"Error reply of %s(0x%02X)\n" +"Room %u, reply 0x%02X" +msgstr "" + +msgid "QQ Qun Command" +msgstr "" + +msgid "Could not decrypt login reply" +msgstr "" + +msgid "Unknown LOGIN CMD" +msgstr "" + +msgid "Unknown CLIENT CMD" +msgstr "" + +#, c-format +msgid "%d has declined the file %s" +msgstr "" + +msgid "File Send" +msgstr "" + +#, c-format +msgid "%d canceled the transfer of %s" +msgstr "" + +msgid "Connection closed (writing)" +msgstr "" + +#, c-format +msgid "<b>Group Title:</b> %s<br>" +msgstr "" + +#, c-format +msgid "<b>Notes Group ID:</b> %s<br>" +msgstr "" + +#, c-format +msgid "Info for Group %s" +msgstr "" + +msgid "Notes Address Book Information" +msgstr "" + +msgid "Invite Group to Conference..." +msgstr "" + +msgid "Get Notes Address Book Info" +msgstr "" + +msgid "Sending Handshake" +msgstr "" + +msgid "Waiting for Handshake Acknowledgement" +msgstr "" + +msgid "Handshake Acknowledged, Sending Login" +msgstr "" + +msgid "Waiting for Login Acknowledgement" +msgstr "" + +msgid "Login Redirected" +msgstr "" + +msgid "Forcing Login" +msgstr "" + +msgid "Login Acknowledged" +msgstr "" + +msgid "Starting Services" +msgstr "" + +#, c-format +msgid "" +"A Sametime administrator has issued the following announcement on server %s" +msgstr "" + +msgid "Sametime Administrator Announcement" +msgstr "" + +#, fuzzy +msgid "Connection reset" +msgstr "Muunganisho ulikataliwa" + +#, fuzzy, c-format +msgid "Error reading from socket: %s" +msgstr "Hitilafu ya upakiaji lahamtindo: %S" + +#. this is a regular connect, error out +#, fuzzy +msgid "Unable to connect to host" +msgstr "Haikuweza kuunganishwa" + +#, c-format +msgid "Announcement from %s" +msgstr "" + +msgid "Conference Closed" +msgstr "" + +msgid "Unable to send message: " +msgstr "" + +msgid "Place Closed" +msgstr "" + +msgid "Microphone" +msgstr "" + +#, fuzzy +msgid "Speakers" +msgstr "Seva" + +#, fuzzy +msgid "Video Camera" +msgstr "Kicheza Video" + +msgid "Supports" +msgstr "" + +msgid "External User" +msgstr "" + +msgid "Create conference with user" +msgstr "" + +#, c-format +msgid "" +"Please enter a topic for the new conference, and an invitation message to be " +"sent to %s" +msgstr "" + +msgid "New Conference" +msgstr "" + +#, fuzzy +msgid "Create" +msgstr "Kicree" + +#, fuzzy +msgid "Available Conferences" +msgstr "Profaili Zipatikanazo" + +msgid "Create New Conference..." +msgstr "" + +msgid "Invite user to a conference" +msgstr "" + +#, c-format +msgid "" +"Select a conference from the list below to send an invite to user %s. Select " +"\"Create New Conference\" if you'd like to create a new conference to invite " +"this user to." +msgstr "" + +msgid "Invite to Conference" +msgstr "" + +msgid "Invite to Conference..." +msgstr "" + +msgid "Send TEST Announcement" +msgstr "" + +msgid "Topic:" +msgstr "" + +msgid "No Sametime Community Server specified" +msgstr "" + +#, c-format +msgid "" +"No host or IP address has been configured for the Meanwhile account %s. " +"Please enter one below to continue logging in." +msgstr "" + +msgid "Meanwhile Connection Setup" +msgstr "" + +msgid "No Sametime Community Server Specified" +msgstr "" + +#, fuzzy +msgid "Connect" +msgstr "Yaliyomo" + +#, c-format +msgid "Unknown (0x%04x)<br>" +msgstr "" + +msgid "Last Known Client" +msgstr "" + +#, fuzzy +msgid "User Name" +msgstr "Jina la Mtumiaji:" + +msgid "Sametime ID" +msgstr "" + +msgid "An ambiguous user ID was entered" +msgstr "" + +#, c-format +msgid "" +"The identifier '%s' may possibly refer to any of the following users. Please " +"select the correct user from the list below to add them to your buddy list." +msgstr "" + +#, fuzzy +msgid "Select User" +msgstr "Chagua &Yote" + +msgid "Unable to add user: user not found" +msgstr "" + +#, c-format +msgid "" +"The identifier '%s' did not match any users in your Sametime community. This " +"entry has been removed from your buddy list." +msgstr "" + +#, c-format +msgid "" +"Error reading file %s: \n" +"%s\n" +msgstr "" + +msgid "Remotely Stored Buddy List" +msgstr "" + +msgid "Buddy List Storage Mode" +msgstr "" + +msgid "Local Buddy List Only" +msgstr "" + +msgid "Merge List from Server" +msgstr "" + +msgid "Merge and Save List to Server" +msgstr "" + +msgid "Synchronize List with Server" +msgstr "" + +#, c-format +msgid "Import Sametime List for Account %s" +msgstr "" + +#, c-format +msgid "Export Sametime List for Account %s" +msgstr "" + +msgid "Unable to add group: group exists" +msgstr "" + +#, c-format +msgid "A group named '%s' already exists in your buddy list." +msgstr "" + +#, fuzzy +msgid "Unable to add group" +msgstr "Haiwezi kuongeza moduli" + +msgid "Possible Matches" +msgstr "" + +msgid "Notes Address Book group results" +msgstr "" + +#, c-format +msgid "" +"The identifier '%s' may possibly refer to any of the following Notes Address " +"Book groups. Please select the correct group from the list below to add it " +"to your buddy list." +msgstr "" + +msgid "Select Notes Address Book" +msgstr "" + +msgid "Unable to add group: group not found" +msgstr "" + +#, c-format +msgid "" +"The identifier '%s' did not match any Notes Address Book groups in your " +"Sametime community." +msgstr "" + +msgid "Notes Address Book Group" +msgstr "" + +msgid "" +"Enter the name of a Notes Address Book group in the field below to add the " +"group and its members to your buddy list." +msgstr "" + +#, fuzzy, c-format +msgid "Search results for '%s'" +msgstr "Majibu ya kutafutwa kwa" + +#, c-format +msgid "" +"The identifier '%s' may possibly refer to any of the following users. You " +"may add these users to your buddy list or send them messages with the action " +"buttons below." +msgstr "" + +#, fuzzy +msgid "Search Results" +msgstr "Tafuta matokeo" + +#, fuzzy +msgid "No matches" +msgstr "%S maoanisho" + +#, c-format +msgid "The identifier '%s' did not match any users in your Sametime community." +msgstr "" + +#, fuzzy +msgid "No Matches" +msgstr "%S maoanisho" + +msgid "Search for a user" +msgstr "" + +msgid "" +"Enter a name or partial ID in the field below to search for matching users " +"in your Sametime community." +msgstr "" + +#, fuzzy +msgid "User Search" +msgstr "Tafuti Mpya" + +msgid "Import Sametime List..." +msgstr "" + +msgid "Export Sametime List..." +msgstr "" + +msgid "Add Notes Address Book Group..." +msgstr "" + +msgid "User Search..." +msgstr "" + +msgid "Force login (ignore server redirects)" +msgstr "" + +#. pretend to be Sametime Connect +msgid "Hide client identity" +msgstr "" + +#, c-format +msgid "User %s is not present in the network" +msgstr "" + +msgid "Key Agreement" +msgstr "Makubaliano Muhimu" + +msgid "Cannot perform the key agreement" +msgstr "" + +msgid "Error occurred during key agreement" +msgstr "" + +#, fuzzy +msgid "Key Agreement failed" +msgstr "Makubaliano Muhimu" + +msgid "Timeout during key agreement" +msgstr "" + +msgid "Key agreement was aborted" +msgstr "" + +msgid "Key agreement is already started" +msgstr "" + +msgid "Key agreement cannot be started with yourself" +msgstr "" + +msgid "The remote user is not present in the network any more" +msgstr "" + +#, c-format +msgid "" +"Key agreement request received from %s. Would you like to perform the key " +"agreement?" +msgstr "" + +#, c-format +msgid "" +"The remote user is waiting key agreement on:\n" +"Remote host: %s\n" +"Remote port: %d" +msgstr "" + +#, fuzzy +msgid "Key Agreement Request" +msgstr "Makubaliano Muhimu" + +msgid "IM With Password" +msgstr "" + +msgid "Cannot set IM key" +msgstr "" + +#, fuzzy +msgid "Set IM Password" +msgstr "Onyesha Nywila" + +#, fuzzy +msgid "Get Public Key" +msgstr "Ufunguo Huria wa Muhusika" + +msgid "Cannot fetch the public key" +msgstr "" + +#, fuzzy +msgid "Show Public Key" +msgstr "Ufunguo Huria wa Muhusika" + +msgid "Could not load public key" +msgstr "" + +#, fuzzy +msgid "User Information" +msgstr "Taarifa Zaidi" + +msgid "Cannot get user information" +msgstr "" + +#, c-format +msgid "The %s buddy is not trusted" +msgstr "" + +msgid "" +"You cannot receive buddy notifications until you import his/her public key. " +"You can use the Get Public Key command to get the public key." +msgstr "" + +#. Open file selector to select the public key. +msgid "Open..." +msgstr "" + +#, c-format +msgid "The %s buddy is not present in the network" +msgstr "" + +msgid "" +"To add the buddy you must import his/her public key. Press Import to import " +"a public key." +msgstr "" + +#, fuzzy +msgid "_Import..." +msgstr "&Leta…" + +msgid "Select correct user" +msgstr "" + +msgid "" +"More than one user was found with the same public key. Select the correct " +"user from the list to add to the buddy list." +msgstr "" + +msgid "" +"More than one user was found with the same name. Select the correct user " +"from the list to add to the buddy list." +msgstr "" + +#, fuzzy +msgid "Detached" +msgstr "Haijakechiwa" + +msgid "Indisposed" +msgstr "" + +msgid "Wake Me Up" +msgstr "" + +msgid "Hyper Active" +msgstr "" + +msgid "Robot" +msgstr "" + +msgid "Happy" +msgstr "" + +#, fuzzy +msgid "Sad" +msgstr "Jm" + +msgid "Angry" +msgstr "" + +msgid "Jealous" +msgstr "" + +#, fuzzy +msgid "Ashamed" +msgstr "Kiassame" + +msgid "Invincible" +msgstr "" + +msgid "In Love" +msgstr "" + +msgid "Sleepy" +msgstr "" + +msgid "Bored" +msgstr "" + +msgid "Excited" +msgstr "" + +msgid "Anxious" +msgstr "" + +#, fuzzy +msgid "User Modes" +msgstr "Jina la Mtumiaji:" + +msgid "Preferred Contact" +msgstr "" + +msgid "Preferred Language" +msgstr "" + +#, fuzzy +msgid "Device" +msgstr "Huduma" + +msgid "Timezone" +msgstr "" + +#, fuzzy +msgid "Geolocation" +msgstr "Mahali" + +msgid "Reset IM Key" +msgstr "" + +msgid "IM with Key Exchange" +msgstr "" + +msgid "IM with Password" +msgstr "" + +msgid "Get Public Key..." +msgstr "" + +msgid "Kill User" +msgstr "" + +msgid "Draw On Whiteboard" +msgstr "" + +msgid "_Passphrase:" +msgstr "" + +#, c-format +msgid "Channel %s does not exist in the network" +msgstr "" + +#, fuzzy +msgid "Channel Information" +msgstr "Inachunguza taarifa" + +msgid "Cannot get channel information" +msgstr "" + +#, c-format +msgid "<b>Channel Name:</b> %s" +msgstr "" + +#, c-format +msgid "<br><b>User Count:</b> %d" +msgstr "" + +#, c-format +msgid "<br><b>Channel Founder:</b> %s" +msgstr "" + +#, c-format +msgid "<br><b>Channel Cipher:</b> %s" +msgstr "" + +#. Definition of HMAC: http://en.wikipedia.org/wiki/HMAC +#, c-format +msgid "<br><b>Channel HMAC:</b> %s" +msgstr "" + +#, c-format +msgid "<br><b>Channel Topic:</b><br>%s" +msgstr "" + +#, c-format +msgid "<br><b>Channel Modes:</b> " +msgstr "" + +#, c-format +msgid "<br><b>Founder Key Fingerprint:</b><br>%s" +msgstr "" + +#, c-format +msgid "<br><b>Founder Key Babbleprint:</b><br>%s" +msgstr "" + +msgid "Add Channel Public Key" +msgstr "" + +#. Add new public key +msgid "Open Public Key..." +msgstr "" + +msgid "Channel Passphrase" +msgstr "" + +msgid "Channel Public Keys List" +msgstr "" + +#, c-format +msgid "" +"Channel authentication is used to secure the channel from unauthorized " +"access. The authentication may be based on passphrase and digital " +"signatures. If passphrase is set, it is required to be able to join. If " +"channel public keys are set then only users whose public keys are listed are " +"able to join." +msgstr "" + +msgid "Channel Authentication" +msgstr "" + +msgid "Add / Remove" +msgstr "" + +#, fuzzy +msgid "Group Name" +msgstr "Kusanya kwa:" + +#, fuzzy +msgid "Passphrase" +msgstr "Nywila" + +#, c-format +msgid "Please enter the %s channel private group name and passphrase." +msgstr "" + +msgid "Add Channel Private Group" +msgstr "" + +#, fuzzy +msgid "User Limit" +msgstr "Jina la Mtumiaji:" + +msgid "Set user limit on channel. Set to zero to reset user limit." +msgstr "" + +msgid "Invite List" +msgstr "" + +msgid "Ban List" +msgstr "" + +msgid "Add Private Group" +msgstr "" + +#, fuzzy +msgid "Reset Permanent" +msgstr "Kudumu" + +#, fuzzy +msgid "Set Permanent" +msgstr "Kudumu" + +msgid "Set User Limit" +msgstr "" + +msgid "Reset Topic Restriction" +msgstr "" + +msgid "Set Topic Restriction" +msgstr "" + +msgid "Reset Private Channel" +msgstr "" + +msgid "Set Private Channel" +msgstr "" + +msgid "Reset Secret Channel" +msgstr "" + +msgid "Set Secret Channel" +msgstr "" + +#, c-format +msgid "" +"You have to join the %s channel before you are able to join the private group" +msgstr "" + +msgid "Join Private Group" +msgstr "" + +msgid "Cannot join private group" +msgstr "" + +msgid "Call Command" +msgstr "" + +msgid "Cannot call command" +msgstr "" + +msgid "Unknown command" +msgstr "" + +msgid "Secure File Transfer" +msgstr "" + +msgid "Error during file transfer" +msgstr "" + +msgid "Remote disconnected" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, fuzzy +msgid "Key agreement failed" +msgstr "Makubaliano Muhimu" + +msgid "Connection timed out" +msgstr "Muunganiko umepita muda" + +#, fuzzy +msgid "Creating connection failed" +msgstr "Muunganiko salama umeshindikana" + +msgid "File transfer session does not exist" +msgstr "" + +msgid "No file transfer session active" +msgstr "" + +msgid "File transfer already started" +msgstr "" + +msgid "Could not perform key agreement for file transfer" +msgstr "" + +msgid "Could not start the file transfer" +msgstr "" + +msgid "Cannot send file" +msgstr "" + +msgid "Error occurred" +msgstr "" + +#, c-format +msgid "%s has changed the topic of <I>%s</I> to: %s" +msgstr "" + +#, c-format +msgid "<I>%s</I> set channel <I>%s</I> modes to: %s" +msgstr "" + +#, c-format +msgid "<I>%s</I> removed all channel <I>%s</I> modes" +msgstr "" + +#, c-format +msgid "<I>%s</I> set <I>%s's</I> modes to: %s" +msgstr "" + +#, c-format +msgid "<I>%s</I> removed all <I>%s's</I> modes" +msgstr "" + +#, c-format +msgid "You have been kicked off <I>%s</I> by <I>%s</I> (%s)" +msgstr "" + +#, c-format +msgid "You have been killed by %s (%s)" +msgstr "" + +#, c-format +msgid "Killed by %s (%s)" +msgstr "" + +msgid "Server signoff" +msgstr "" + +#, fuzzy +msgid "Personal Information" +msgstr "Taarifa Zaidi" + +msgid "Birth Day" +msgstr "" + +msgid "Job Role" +msgstr "" + +#, fuzzy +msgid "Organization" +msgstr "Shirika:" + +#, fuzzy +msgid "Unit" +msgstr "Kizio:" + +msgid "Join Chat" +msgstr "" + +#, c-format +msgid "You are channel founder on <I>%s</I>" +msgstr "" + +#, c-format +msgid "Channel founder on <I>%s</I> is <I>%s</I>" +msgstr "" + +msgid "Real Name" +msgstr "" + +#, fuzzy +msgid "Status Text" +msgstr "M&wambaa Hali" + +msgid "Public Key Fingerprint" +msgstr "" + +msgid "Public Key Babbleprint" +msgstr "" + +msgid "_More..." +msgstr "" + +msgid "Detach From Server" +msgstr "" + +msgid "Cannot detach" +msgstr "" + +msgid "Cannot set topic" +msgstr "" + +msgid "Failed to change nickname" +msgstr "" + +msgid "Roomlist" +msgstr "" + +msgid "Cannot get room list" +msgstr "" + +#, fuzzy +msgid "Network is empty" +msgstr "Muda wa mtandao umeisha" + +msgid "No public key was received" +msgstr "" + +#, fuzzy +msgid "Server Information" +msgstr "Taarifa Zaidi" + +msgid "Cannot get server information" +msgstr "" + +msgid "Server Statistics" +msgstr "" + +msgid "Cannot get server statistics" +msgstr "" + +#, c-format +msgid "" +"Local server start time: %s\n" +"Local server uptime: %s\n" +"Local server clients: %d\n" +"Local server channels: %d\n" +"Local server operators: %d\n" +"Local router operators: %d\n" +"Local cell clients: %d\n" +"Local cell channels: %d\n" +"Local cell servers: %d\n" +"Total clients: %d\n" +"Total channels: %d\n" +"Total servers: %d\n" +"Total routers: %d\n" +"Total server operators: %d\n" +"Total router operators: %d\n" +msgstr "" + +msgid "Network Statistics" +msgstr "" + +#, fuzzy +msgid "Ping failed" +msgstr "Imeshindwa kunakili" + +msgid "Ping reply received from server" +msgstr "" + +msgid "Could not kill user" +msgstr "" + +msgid "WATCH" +msgstr "" + +msgid "Cannot watch user" +msgstr "" + +#, fuzzy +msgid "Resuming session" +msgstr "Rejesha Awamu" + +msgid "Authenticating connection" +msgstr "" + +msgid "Verifying server public key" +msgstr "" + +#, fuzzy +msgid "Passphrase required" +msgstr "Nywila inatakiwa" + +#, c-format +msgid "" +"Received %s's public key. Your local copy does not match this key. Would you " +"still like to accept this public key?" +msgstr "" + +#, c-format +msgid "Received %s's public key. Would you like to accept this public key?" +msgstr "" + +#, c-format +msgid "" +"Fingerprint and babbleprint for the %s key are:\n" +"\n" +"%s\n" +"%s\n" +msgstr "" + +#, fuzzy +msgid "Verify Public Key" +msgstr "Ufunguo Huria wa Muhusika" + +msgid "_View..." +msgstr "" + +#, fuzzy +msgid "Unsupported public key type" +msgstr "Aina ya faili isiyo stahimiliwa." + +msgid "Disconnected by server" +msgstr "" + +msgid "Error during connecting to SILC Server" +msgstr "" + +msgid "Key Exchange failed" +msgstr "" + +msgid "" +"Resuming detached session failed. Press Reconnect to create new connection." +msgstr "" + +#, fuzzy +msgid "Connection failed" +msgstr "Unganisho Limeshindikana" + +msgid "Performing key exchange" +msgstr "" + +#, fuzzy +msgid "Unable to create connection" +msgstr "Haikuweza kuunganishwa" + +msgid "Could not load SILC key pair" +msgstr "" + +#. Progress +#, fuzzy +msgid "Connecting to SILC Server" +msgstr "Inaunganisha kwenye seva ya sasisho…" + +msgid "Out of memory" +msgstr "Nje ya kumbukumbu" + +msgid "Cannot initialize SILC protocol" +msgstr "" + +msgid "Error loading SILC key pair" +msgstr "" + +#, fuzzy, c-format +msgid "Download %s: %s" +msgstr "Inapakua: %S" + +msgid "Your Current Mood" +msgstr "" + +#, fuzzy, c-format +msgid "Normal" +msgstr "&Kawaida" + +msgid "In love" +msgstr "" + +msgid "" +"\n" +"Your Preferred Contact Methods" +msgstr "" + +msgid "SMS" +msgstr "" + +msgid "MMS" +msgstr "" + +msgid "Video conferencing" +msgstr "" + +msgid "Your Current Status" +msgstr "" + +#, fuzzy +msgid "Online Services" +msgstr "Huduma za tovuti" + +msgid "Let others see what services you are using" +msgstr "" + +msgid "Let others see what computer you are using" +msgstr "" + +msgid "Your VCard File" +msgstr "" + +msgid "Timezone (UTC)" +msgstr "" + +msgid "User Online Status Attributes" +msgstr "" + +msgid "" +"You can let other users see your online status information and your personal " +"information. Please fill the information you would like other users to see " +"about yourself." +msgstr "" + +msgid "Message of the Day" +msgstr "" + +msgid "No Message of the Day available" +msgstr "" + +msgid "There is no Message of the Day associated with this connection" +msgstr "" + +msgid "Create New SILC Key Pair" +msgstr "" + +msgid "Passphrases do not match" +msgstr "" + +msgid "Key Pair Generation failed" +msgstr "" + +msgid "Key length" +msgstr "" + +msgid "Public key file" +msgstr "" + +msgid "Private key file" +msgstr "" + +msgid "Passphrase (retype)" +msgstr "" + +msgid "Generate Key Pair" +msgstr "" + +#, fuzzy +msgid "Online Status" +msgstr "Marekani" + +msgid "View Message of the Day" +msgstr "" + +msgid "Create SILC Key Pair..." +msgstr "" + +#, c-format +msgid "User <I>%s</I> is not present in the network" +msgstr "" + +msgid "Topic too long" +msgstr "" + +msgid "You must specify a nick" +msgstr "" + +#, fuzzy, c-format +msgid "channel %s not found" +msgstr "Mstari haujapatikana" + +#, c-format +msgid "channel modes for %s: %s" +msgstr "" + +#, c-format +msgid "no channel modes are set on %s" +msgstr "" + +#, c-format +msgid "Failed to set cmodes for %s" +msgstr "" + +#, c-format +msgid "Unknown command: %s, (may be a client bug)" +msgstr "" + +msgid "part [channel]: Leave the chat" +msgstr "" + +msgid "leave [channel]: Leave the chat" +msgstr "" + +msgid "topic [<new topic>]: View or change the topic" +msgstr "" + +msgid "join <channel> [<password>]: Join a chat on this network" +msgstr "" + +msgid "list: List channels on this network" +msgstr "" + +msgid "whois <nick>: View nick's information" +msgstr "" + +msgid "msg <nick> <message>: Send a private message to a user" +msgstr "" + +msgid "query <nick> [<message>]: Send a private message to a user" +msgstr "" + +msgid "motd: View the server's Message Of The Day" +msgstr "" + +msgid "detach: Detach this session" +msgstr "" + +msgid "quit [message]: Disconnect from the server, with an optional message" +msgstr "" + +msgid "call <command>: Call any silc client command" +msgstr "" + +msgid "kill <nick> [-pubkey|<reason>]: Kill nick" +msgstr "" + +msgid "nick <newnick>: Change your nickname" +msgstr "" + +msgid "whowas <nick>: View nick's information" +msgstr "" + +msgid "" +"cmode <channel> [+|-<modes>] [arguments]: Change or display " +"channel modes" +msgstr "" + +msgid "" +"cumode <channel> +|-<modes> <nick>: Change nick's modes " +"on channel" +msgstr "" + +msgid "umode <usermodes>: Set your modes in the network" +msgstr "" + +msgid "oper <nick> [-pubkey]: Get server operator privileges" +msgstr "" + +msgid "" +"invite <channel> [-|+]<nick>: invite nick or add/remove from " +"channel invite list" +msgstr "" + +msgid "kick <channel> <nick> [comment]: Kick client from channel" +msgstr "" + +msgid "info [server]: View server administrative details" +msgstr "" + +msgid "ban [<channel> +|-<nick>]: Ban client from channel" +msgstr "" + +msgid "getkey <nick|server>: Retrieve client's or server's public key" +msgstr "" + +msgid "stats: View server and network statistics" +msgstr "" + +msgid "ping: Send PING to the connected server" +msgstr "" + +msgid "users <channel>: List users in channel" +msgstr "" + +msgid "" +"names [-count|-ops|-halfops|-voices|-normal] <channel(s)>: List " +"specific users in channel(s)" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +msgid "SILC Protocol Plugin" +msgstr "" + +#. * description +msgid "Secure Internet Live Conferencing (SILC) Protocol" +msgstr "" + +msgid "Network" +msgstr "Mtandao" + +msgid "Public Key file" +msgstr "" + +msgid "Private Key file" +msgstr "" + +msgid "Cipher" +msgstr "" + +msgid "HMAC" +msgstr "" + +msgid "Use Perfect Forward Secrecy" +msgstr "" + +#, fuzzy +msgid "Public key authentication" +msgstr "Ishara ya Uthibitisho Inayoulindwa" + +msgid "Block IMs without Key Exchange" +msgstr "" + +msgid "Block messages to whiteboard" +msgstr "" + +msgid "Automatically open whiteboard" +msgstr "" + +msgid "Digitally sign and verify all messages" +msgstr "" + +msgid "Creating SILC key pair..." +msgstr "" + +msgid "Cannot create SILC key pair\n" +msgstr "" + +#. Hint for translators: Please check the tabulator width here and in +#. the next strings (short strings: 2 tabs, longer strings 1 tab, +#. sum: 3 tabs or 24 characters) +#, c-format +msgid "Real Name: \t%s\n" +msgstr "" + +#, fuzzy, c-format +msgid "User Name: \t%s\n" +msgstr "Jina la Mtumiaji:" + +#, c-format +msgid "Email: \t\t%s\n" +msgstr "" + +#, c-format +msgid "Host Name: \t%s\n" +msgstr "" + +#, fuzzy, c-format +msgid "Organization: \t%s\n" +msgstr "Jumuiya: \"%S\"" + +#, c-format +msgid "Country: \t%s\n" +msgstr "" + +#, c-format +msgid "Algorithm: \t%s\n" +msgstr "" + +#, c-format +msgid "Key Length: \t%d bits\n" +msgstr "" + +#, fuzzy, c-format +msgid "Version: \t%s\n" +msgstr "Toleo la 1" + +#, c-format +msgid "" +"Public Key Fingerprint:\n" +"%s\n" +"\n" +msgstr "" + +#, c-format +msgid "" +"Public Key Babbleprint:\n" +"%s" +msgstr "" + +#, fuzzy +msgid "Public Key Information" +msgstr "Fic&ha Taarifa" + +#, fuzzy +msgid "Paging" +msgstr "Inahifadhi" + +msgid "Video Conferencing" +msgstr "" + +#, fuzzy +msgid "Computer" +msgstr "Imemaliza" + +msgid "PDA" +msgstr "" + +msgid "Terminal" +msgstr "" + +#, c-format +msgid "%s sent message to whiteboard. Would you like to open the whiteboard?" +msgstr "" + +#, c-format +msgid "" +"%s sent message to whiteboard on %s channel. Would you like to open the " +"whiteboard?" +msgstr "" + +msgid "Whiteboard" +msgstr "" + +msgid "No server statistics available" +msgstr "" + +#, c-format +msgid "Failure: Version mismatch, upgrade your client" +msgstr "" + +#, c-format +msgid "Failure: Remote does not trust/support your public key" +msgstr "" + +#, c-format +msgid "Failure: Remote does not support proposed KE group" +msgstr "" + +#, c-format +msgid "Failure: Remote does not support proposed cipher" +msgstr "" + +#, c-format +msgid "Failure: Remote does not support proposed PKCS" +msgstr "" + +#, c-format +msgid "Failure: Remote does not support proposed hash function" +msgstr "" + +#, c-format +msgid "Failure: Remote does not support proposed HMAC" +msgstr "" + +#, c-format +msgid "Failure: Incorrect signature" +msgstr "" + +#, c-format +msgid "Failure: Invalid cookie" +msgstr "" + +#, c-format +msgid "Failure: Authentication failed" +msgstr "" + +msgid "Cannot initialize SILC Client connection" +msgstr "" + +msgid "John Noname" +msgstr "" + +#, c-format +msgid "Could not load SILC key pair: %s" +msgstr "" + +msgid "Could not write" +msgstr "" + +#, fuzzy +msgid "Could not connect" +msgstr "\"Haikuweza kupakia: \"" + +msgid "Unknown server response." +msgstr "" + +msgid "Could not create listen socket" +msgstr "" + +msgid "Could not resolve hostname" +msgstr "" + +msgid "SIP usernames may not contain whitespaces or @ symbols" +msgstr "" + +msgid "SIP connect server not specified" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +msgid "SIP/SIMPLE Protocol Plugin" +msgstr "" + +#. * summary +msgid "The SIP/SIMPLE Protocol Plugin" +msgstr "" + +msgid "Publish status (note: everyone may watch you)" +msgstr "" + +msgid "Use UDP" +msgstr "" + +msgid "Use proxy" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Auth User" +msgstr "" + +msgid "Auth Domain" +msgstr "" + +#, c-format +msgid "%s has sent you a webcam invite, which is not yet supported." +msgstr "" + +msgid "Your SMS was not delivered" +msgstr "" + +msgid "Your Yahoo! message did not get sent." +msgstr "" + +#, c-format +msgid "Yahoo! system message for %s:" +msgstr "" + +#, c-format +msgid "" +"%s has (retroactively) denied your request to add them to your list for the " +"following reason: %s." +msgstr "" + +#, c-format +msgid "%s has (retroactively) denied your request to add them to your list." +msgstr "" + +msgid "Add buddy rejected" +msgstr "" + +#. Some error in the received stream +msgid "Received invalid data" +msgstr "" + +#. Password incorrect +#, fuzzy +msgid "Incorrect Password" +msgstr "Nywila ya sasa hivi:" + +#. security lock from too many failed login attempts +msgid "Account locked: Too many failed login attempts" +msgstr "" + +#. the username does not exist +#, fuzzy +msgid "Username does not exist" +msgstr "Faili %S halipo" + +#. indicates a lock of some description +msgid "Account locked: See the debug log" +msgstr "" + +#. username or password missing +msgid "Username or password missing" +msgstr "" + +#, c-format +msgid "" +"The Yahoo server has requested the use of an unrecognized authentication " +"method. You will probably not be able to successfully sign on to Yahoo. " +"Check %s for updates." +msgstr "" + +msgid "Failed Yahoo! Authentication" +msgstr "" + +#, c-format +msgid "" +"You have tried to ignore %s, but the user is on your buddy list. Clicking " +"\"Yes\" will remove and ignore the buddy." +msgstr "" + +msgid "Ignore buddy?" +msgstr "" + +msgid "Your account is locked, please log in to the Yahoo! website." +msgstr "" + +#, c-format +msgid "Unknown error number %d. Logging into the Yahoo! website may fix this." +msgstr "" + +#, c-format +msgid "Could not add buddy %s to group %s to the server list on account %s." +msgstr "" + +msgid "Could not add buddy to server list" +msgstr "" + +#, c-format +msgid "[ Audible %s/%s/%s.swf ] %s" +msgstr "" + +#, fuzzy +msgid "Received unexpected HTTP response from server." +msgstr "Mwitiko wa bila kutegemea kutoka kwa seva" + +#, fuzzy +msgid "Connection problem" +msgstr "Unganisho Limeshindikana" + +#, c-format +msgid "" +"Lost connection with %s:\n" +"%s" +msgstr "" + +#, c-format +msgid "" +"Could not establish a connection with %s:\n" +"%s" +msgstr "" + +msgid "Not at Home" +msgstr "" + +msgid "Not at Desk" +msgstr "" + +msgid "Not in Office" +msgstr "" + +#, fuzzy +msgid "On Vacation" +msgstr "Fungua &Mahali…" + +msgid "Stepped Out" +msgstr "" + +msgid "Not on server list" +msgstr "" + +#, fuzzy +msgid "Appear Online" +msgstr "Baki Mkondoni" + +msgid "Appear Permanently Offline" +msgstr "" + +#, fuzzy +msgid "Presence" +msgstr "Mapendekezo" + +msgid "Appear Offline" +msgstr "" + +msgid "Don't Appear Permanently Offline" +msgstr "" + +msgid "Join in Chat" +msgstr "" + +msgid "Initiate Conference" +msgstr "" + +msgid "Presence Settings" +msgstr "" + +msgid "Start Doodling" +msgstr "" + +msgid "Activate which ID?" +msgstr "" + +msgid "Join whom in chat?" +msgstr "" + +msgid "Activate ID..." +msgstr "" + +msgid "Join User in Chat..." +msgstr "" + +#, fuzzy +msgid "Open Inbox" +msgstr "Fungua katika:" + +msgid "join <room>: Join a chat room on the Yahoo network" +msgstr "" + +msgid "list: List rooms on the Yahoo network" +msgstr "" + +msgid "doodle: Request user to start a Doodle session" +msgstr "" + +msgid "Yahoo ID..." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "Yahoo Protocol Plugin" +msgstr "" + +msgid "Yahoo Japan" +msgstr "" + +msgid "Pager server" +msgstr "" + +msgid "Japan Pager server" +msgstr "" + +#, fuzzy +msgid "Pager port" +msgstr "Page Down" + +msgid "File transfer server" +msgstr "" + +msgid "Japan file transfer server" +msgstr "" + +msgid "File transfer port" +msgstr "" + +msgid "Chat room locale" +msgstr "" + +msgid "Ignore conference and chatroom invitations" +msgstr "" + +msgid "Chat room list URL" +msgstr "" + +msgid "Yahoo Chat server" +msgstr "" + +msgid "Yahoo Chat port" +msgstr "" + +#. Write a local message to this conversation showing that a request for a +#. * Doodle session has been made +#. +msgid "Sent Doodle request." +msgstr "" + +msgid "Unable to establish file descriptor." +msgstr "" + +#, c-format +msgid "%s is trying to send you a group of %d files.\n" +msgstr "" + +msgid "Yahoo! Japan Profile" +msgstr "" + +#, fuzzy +msgid "Yahoo! Profile" +msgstr "Yahoo! Barua" + +msgid "" +"Sorry, profiles marked as containing adult content are not supported at this " +"time." +msgstr "" + +msgid "" +"If you wish to view this profile, you will need to visit this link in your " +"web browser:" +msgstr "" + +#, fuzzy +msgid "Yahoo! ID" +msgstr "Yahoo! Barua" + +msgid "Hobbies" +msgstr "" + +msgid "Latest News" +msgstr "" + +#, fuzzy +msgid "Home Page" +msgstr "Ukurasa wa &Nyumbani:" + +msgid "Cool Link 1" +msgstr "" + +msgid "Cool Link 2" +msgstr "" + +msgid "Cool Link 3" +msgstr "" + +msgid "Last Update" +msgstr "Sasisho la mara ya mwisho" + +msgid "" +"This profile is in a language or format that is not supported at this time." +msgstr "" + +msgid "" +"Could not retrieve the user's profile. This most likely is a temporary " +"server-side problem. Please try again later." +msgstr "" + +msgid "" +"Could not retrieve the user's profile. This most likely means that the user " +"does not exist; however, Yahoo! sometimes does fail to find a user's " +"profile. If you know that the user exists, please try again later." +msgstr "" + +msgid "The user's profile is empty." +msgstr "" + +#, c-format +msgid "%s declined your conference invitation to room \"%s\" because \"%s\"." +msgstr "" + +msgid "Invitation Rejected" +msgstr "" + +#, fuzzy +msgid "Failed to join chat" +msgstr "Imeshindwa kuunganisha" + +#. -6 +#, fuzzy +msgid "Unknown room" +msgstr "Hitilafu isiyojulikana" + +#. -15 +msgid "Maybe the room is full" +msgstr "" + +#. -35 +msgid "Not available" +msgstr "Haipatikani" + +msgid "" +"Unknown error. You may need to logout and wait five minutes before being " +"able to rejoin a chatroom" +msgstr "" + +#, c-format +msgid "You are now chatting in %s." +msgstr "" + +msgid "Failed to join buddy in chat" +msgstr "" + +msgid "Maybe they're not in a chat?" +msgstr "" + +msgid "Fetching the room list failed." +msgstr "" + +msgid "Voices" +msgstr "" + +msgid "Webcams" +msgstr "" + +msgid "Unable to fetch room list." +msgstr "" + +msgid "User Rooms" +msgstr "" + +msgid "Connection problem with the YCHT server." +msgstr "" + +#, c-format +msgid "" +"Lost connection with server\n" +"%s" +msgstr "" + +msgid "" +"(There was an error converting this message.\t Check the 'Encoding' option " +"in the Account Editor)" +msgstr "" + +#, c-format +msgid "Unable to send to chat %s,%s,%s" +msgstr "" + +msgid "Hidden or not logged-in" +msgstr "" + +#, c-format +msgid "<br>At %s since %s" +msgstr "" + +msgid "Anyone" +msgstr "" + +msgid "_Class:" +msgstr "" + +#, fuzzy +msgid "_Instance:" +msgstr "Imesakinishwa" + +msgid "_Recipient:" +msgstr "" + +#, c-format +msgid "Attempt to subscribe to %s,%s,%s failed" +msgstr "" + +msgid "zlocate <nick>: Locate user" +msgstr "" + +msgid "zl <nick>: Locate user" +msgstr "" + +msgid "instance <instance>: Set the instance to be used on this class" +msgstr "" + +msgid "inst <instance>: Set the instance to be used on this class" +msgstr "" + +msgid "topic <instance>: Set the instance to be used on this class" +msgstr "" + +msgid "sub <class> <instance> <recipient>: Join a new chat" +msgstr "" + +msgid "" +"zi <instance>: Send a message to <message,<i>instance</i>,*>" +msgstr "" + +msgid "" +"zci <class> <instance>: Send a message to <<i>class</i>," +"<i>instance</i>,*>" +msgstr "" + +msgid "" +"zcir <class> <instance> <recipient>: Send a message to <" +"<i>class</i>,<i>instance</i>,<i>recipient</i>>" +msgstr "" + +msgid "" +"zir <instance> <recipient>: Send a message to <MESSAGE," +"<i>instance</i>,<i>recipient</i>>" +msgstr "" + +msgid "zc <class>: Send a message to <<i>class</i>,PERSONAL,*>" +msgstr "" + +#, fuzzy +msgid "Resubscribe" +msgstr "Jiunge" + +msgid "Retrieve subscriptions from server" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "Zephyr Protocol Plugin" +msgstr "" + +msgid "Use tzc" +msgstr "" + +msgid "tzc command" +msgstr "" + +msgid "Export to .anyone" +msgstr "" + +msgid "Export to .zephyr.subs" +msgstr "" + +msgid "Import from .anyone" +msgstr "" + +msgid "Import from .zephyr.subs" +msgstr "" + +#, fuzzy +msgid "Realm" +msgstr "Tayari" + +msgid "Exposure" +msgstr "" + +#, c-format +msgid "" +"Unable to create socket:\n" +"%s" +msgstr "" + +#, c-format +msgid "Unable to parse response from HTTP proxy: %s\n" +msgstr "" + +#, c-format +msgid "HTTP proxy connection error %d" +msgstr "" + +#, c-format +msgid "Access denied: HTTP proxy server forbids port %d tunneling." +msgstr "" + +#, fuzzy, c-format +msgid "Error resolving %s" +msgstr "Hitilafu katika kuhifadhi %S" + +msgid "Could not resolve host name" +msgstr "" + +#, c-format +msgid "Requesting %s's attention..." +msgstr "" + +#, c-format +msgid "%s has requested your attention!" +msgstr "" + +#. * +#. * A wrapper for purple_request_action() that uses @c Yes and @c No buttons. +#. +#, fuzzy +msgid "_Yes" +msgstr "Ndiyo" + +#, fuzzy +msgid "_No" +msgstr "Hapana" + +#. * +#. * A wrapper for purple_request_action() that uses Accept and Cancel buttons. +#. +msgid "_Accept" +msgstr "" + +#. * +#. * The default message to use when the user becomes auto-away. +#. +msgid "I'm not here right now" +msgstr "" + +msgid "saved statuses" +msgstr "" + +#, c-format +msgid "%s is now known as %s.\n" +msgstr "" + +#, c-format +msgid "" +"%s has invited %s to the chat room %s:\n" +"%s" +msgstr "" + +#, c-format +msgid "%s has invited %s to the chat room %s\n" +msgstr "" + +msgid "Accept chat invitation?" +msgstr "" + +#. Shortcut +msgid "Shortcut" +msgstr "" + +msgid "The text-shortcut for the smiley" +msgstr "" + +#. Stored Image +#, fuzzy +msgid "Stored Image" +msgstr "Hifadhi Taswira" + +msgid "Stored Image. (that'll have to do for now)" +msgstr "" + +#, fuzzy +msgid "SSL Connection Failed" +msgstr "Unganisho Limeshindikana" + +msgid "SSL Handshake Failed" +msgstr "" + +msgid "SSL peer presented an invalid certificate" +msgstr "" + +#, fuzzy +msgid "Unknown SSL error" +msgstr "Hitilafu isiyojulikana" + +#, fuzzy +msgid "Unset" +msgstr "Haitumiki" + +msgid "Do not disturb" +msgstr "" + +msgid "Extended away" +msgstr "" + +msgid "Listening to music" +msgstr "" + +#, c-format +msgid "%s (%s) changed status from %s to %s" +msgstr "" + +#, c-format +msgid "%s (%s) is now %s" +msgstr "" + +#, c-format +msgid "%s (%s) is no longer %s" +msgstr "" + +#, c-format +msgid "%s became idle" +msgstr "" + +#, c-format +msgid "%s became unidle" +msgstr "" + +#, c-format +msgid "+++ %s became idle" +msgstr "" + +#, c-format +msgid "+++ %s became unidle" +msgstr "" + +#. +#. * This string determines how some dates are displayed. The default +#. * string "%x %X" shows the date then the time. Translators can +#. * change this to "%X %x" if they want the time to be shown first, +#. * followed by the date. +#. +#, fuzzy, c-format +msgid "%x %X" +msgstr "%S %S" + +msgid "Calculating..." +msgstr "" + +#, fuzzy +msgid "Unknown." +msgstr "Isiyojulikana" + +#, c-format +msgid "%d second" +msgid_plural "%d seconds" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "%s, %d hour" +msgid_plural "%s, %d hours" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "%s, %d minute" +msgid_plural "%s, %d minutes" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "Could not open %s: Redirected too many times" +msgstr "" + +#, fuzzy, c-format +msgid "Unable to connect to %s" +msgstr "Haikuweza kuunganishwa" + +#, c-format +msgid "Error reading from %s: response too long (%d bytes limit)" +msgstr "" + +#, c-format +msgid "" +"Unable to allocate enough memory to hold the contents from %s. The web " +"server may be trying something malicious." +msgstr "" + +#, c-format +msgid "Error reading from %s: %s" +msgstr "" + +#, c-format +msgid "Error writing to %s: %s" +msgstr "" + +#, fuzzy, c-format +msgid "Unable to connect to %s: %s" +msgstr "Haikuweza kuunganishwa" + +#, c-format +msgid "" +"Unable to connect to %s: Server requires TLS/SSL, but no TLS/SSL support was " +"found." +msgstr "" + +#, c-format +msgid " - %s" +msgstr "" + +#, fuzzy, c-format +msgid " (%s)" +msgstr "(%S)" + +#. 10053 +#, c-format +msgid "Connection interrupted by other software on your computer." +msgstr "" + +#. 10054 +#, fuzzy, c-format +msgid "Remote host closed connection." +msgstr "Mwenzi SSL imefunga uunganisho huu" + +#. 10060 +#, fuzzy, c-format +msgid "Connection timed out." +msgstr "Muunganiko umepita muda" + +#. 10061 +#, fuzzy, c-format +msgid "Connection refused." +msgstr "Muunganisho ulikataliwa" + +#. 10048 +#, c-format +msgid "Address already in use." +msgstr "" + +#, fuzzy, c-format +msgid "Error Reading %s" +msgstr "Hitilafu wakati natengeneza %S" + +#, c-format +msgid "" +"An error was encountered reading your %s. The file has not been loaded, and " +"the old file has been renamed to %s~." +msgstr "" + +#, fuzzy +msgid "Internet Messenger" +msgstr "Internet Explorer" + +msgid "Pidgin Internet Messenger" +msgstr "" + +msgid "Send instant messages over multiple protocols" +msgstr "" + +#, fuzzy +msgid "Orientation" +msgstr "Mkao:" + +msgid "The orientation of the tray." +msgstr "" + +#. Build the login options frame. +msgid "Login Options" +msgstr "" + +#, fuzzy +msgid "Pro_tocol:" +msgstr "Itifaki" + +#, fuzzy +msgid "_Username:" +msgstr "Jina la mtumiaji" + +#, fuzzy +msgid "Remember pass_word" +msgstr "Ingiza tena nywila:" + +#. Build the user options frame. +#, fuzzy +msgid "User Options" +msgstr "Machaguo ya Mtandao" + +msgid "_Local alias:" +msgstr "" + +#, fuzzy +msgid "New _mail notifications" +msgstr "Arifisho la Jumla" + +#. Buddy icon +msgid "Use this buddy _icon for this account:" +msgstr "" + +#, fuzzy +msgid "_Advanced" +msgstr "Pevu" + +#, fuzzy +msgid "Use GNOME Proxy Settings" +msgstr "&Tumia vipimo vya wakala vya mfumo" + +#, fuzzy +msgid "Use Global Proxy Settings" +msgstr "&Tumia vipimo vya wakala vya mfumo" + +#, fuzzy +msgid "No Proxy" +msgstr "Hakuna waka&la" + +msgid "HTTP" +msgstr "" + +#, fuzzy +msgid "SOCKS 4" +msgstr "SOC&KS v4" + +#, fuzzy +msgid "SOCKS 5" +msgstr "SOCKS &v5" + +msgid "Use Environmental Settings" +msgstr "" + +#. This is an easter egg. +#. It means one of two things, both intended as humourus: +#. A) your network is really slow and you have nothing better to do than +#. look at butterflies. +#. B)You are looking really closely at something that shouldn't matter. +msgid "If you look real closely" +msgstr "" + +#. This is an easter egg. See the comment on the previous line in the source. +msgid "you can see the butterflies mating" +msgstr "" + +msgid "Proxy _type:" +msgstr "" + +#, fuzzy +msgid "_Host:" +msgstr "Mwenyeji:" + +#, fuzzy +msgid "_Port:" +msgstr "Lango:" + +#, fuzzy +msgid "Pa_ssword:" +msgstr "Nywila:" + +msgid "Unable to save new account" +msgstr "" + +msgid "An account already exists with the specified criteria." +msgstr "" + +msgid "Add Account" +msgstr "" + +msgid "_Basic" +msgstr "" + +msgid "Create _this new account on the server" +msgstr "" + +msgid "_Proxy" +msgstr "" + +msgid "Enabled" +msgstr "Imeamshwa" + +#, fuzzy +msgid "Protocol" +msgstr "Itifaki" + +#, c-format +msgid "" +"<span size='larger' weight='bold'>Welcome to %s!</span>\n" +"\n" +"You have no IM accounts configured. To start connecting with %s press the " +"<b>Add...</b> button below and configure your first account. If you want %s " +"to connect to multiple IM accounts, press <b>Add...</b> again to configure " +"them all.\n" +"\n" +"You can come back to this window to add, edit, or remove accounts from " +"<b>Accounts->Manage Accounts</b> in the Buddy List window" +msgstr "" + +#, c-format +msgid "You have %d contact named %s. Would you like to merge them?" +msgid_plural "" +"You currently have %d contacts named %s. Would you like to merge them?" +msgstr[0] "" +msgstr[1] "" + +msgid "" +"Merging these contacts will cause them to share a single entry on the buddy " +"list and use a single conversation window. You can separate them again by " +"choosing 'Expand' from the contact's context menu" +msgstr "" + +msgid "Please update the necessary fields." +msgstr "" + +#, fuzzy +msgid "A_ccount" +msgstr "hesabu ya matembeleo" + +msgid "" +"Please enter the appropriate information about the chat you would like to " +"join.\n" +msgstr "" + +msgid "Room _List" +msgstr "" + +#, fuzzy +msgid "_Block" +msgstr "Zuia" + +msgid "Un_block" +msgstr "" + +#, fuzzy +msgid "Move to" +msgstr "Sogeza kwenda:" + +msgid "Get _Info" +msgstr "" + +msgid "I_M" +msgstr "" + +msgid "_Audio Call" +msgstr "" + +msgid "Audio/_Video Call" +msgstr "" + +msgid "_Video Call" +msgstr "" + +msgid "_Send File..." +msgstr "" + +msgid "Add Buddy _Pounce..." +msgstr "" + +msgid "View _Log" +msgstr "" + +msgid "Hide when offline" +msgstr "" + +msgid "_Alias..." +msgstr "" + +#, fuzzy +msgid "_Remove" +msgstr "Ondoa" + +msgid "Set Custom Icon" +msgstr "" + +msgid "Remove Custom Icon" +msgstr "" + +msgid "Add _Buddy..." +msgstr "" + +msgid "Add C_hat..." +msgstr "" + +#, fuzzy +msgid "_Delete Group" +msgstr "Futa mwenyeji" + +#, fuzzy +msgid "_Rename" +msgstr "&Badili jina" + +#. join button +msgid "_Join" +msgstr "" + +msgid "Auto-Join" +msgstr "" + +#, fuzzy +msgid "Persistent" +msgstr "Kipersia" + +msgid "_Edit Settings..." +msgstr "" + +#, fuzzy +msgid "_Collapse" +msgstr "Kunja" + +#, fuzzy +msgid "_Expand" +msgstr "Tanua" + +msgid "/Tools/Mute Sounds" +msgstr "" + +msgid "" +"You are not currently signed on with an account that can add that buddy." +msgstr "" + +#. I don't believe this can happen currently, I think +#. * everything that calls this function checks for one of the +#. * above node types first. +#, fuzzy +msgid "Unknown node type" +msgstr "Utambulisho usiojulikana" + +#. Buddies menu +msgid "/_Buddies" +msgstr "" + +msgid "/Buddies/New Instant _Message..." +msgstr "" + +msgid "/Buddies/Join a _Chat..." +msgstr "" + +msgid "/Buddies/Get User _Info..." +msgstr "" + +msgid "/Buddies/View User _Log..." +msgstr "" + +msgid "/Buddies/Sh_ow" +msgstr "" + +msgid "/Buddies/Show/_Offline Buddies" +msgstr "" + +msgid "/Buddies/Show/_Empty Groups" +msgstr "" + +msgid "/Buddies/Show/Buddy _Details" +msgstr "" + +msgid "/Buddies/Show/Idle _Times" +msgstr "" + +msgid "/Buddies/Show/_Protocol Icons" +msgstr "" + +msgid "/Buddies/_Sort Buddies" +msgstr "" + +msgid "/Buddies/_Add Buddy..." +msgstr "" + +msgid "/Buddies/Add C_hat..." +msgstr "" + +msgid "/Buddies/Add _Group..." +msgstr "" + +msgid "/Buddies/_Quit" +msgstr "" + +#. Accounts menu +msgid "/_Accounts" +msgstr "" + +msgid "/Accounts/Manage Accounts" +msgstr "" + +#. Tools +#, fuzzy +msgid "/_Tools" +msgstr "&Zana" + +msgid "/Tools/Buddy _Pounces" +msgstr "" + +#, fuzzy +msgid "/Tools/_Certificates" +msgstr "Ithibati Zako" + +msgid "/Tools/Custom Smile_ys" +msgstr "" + +msgid "/Tools/Plu_gins" +msgstr "" + +msgid "/Tools/Pr_eferences" +msgstr "" + +msgid "/Tools/Pr_ivacy" +msgstr "" + +msgid "/Tools/_File Transfers" +msgstr "" + +msgid "/Tools/R_oom List" +msgstr "" + +msgid "/Tools/System _Log" +msgstr "" + +msgid "/Tools/Mute _Sounds" +msgstr "" + +#. Help +#, fuzzy +msgid "/_Help" +msgstr "Msaada" + +msgid "/Help/Online _Help" +msgstr "" + +msgid "/Help/_Debug Window" +msgstr "" + +msgid "/Help/_About" +msgstr "" + +#, c-format +msgid "<b>Account:</b> %s" +msgstr "" + +#, c-format +msgid "" +"\n" +"<b>Occupants:</b> %d" +msgstr "" + +#, c-format +msgid "" +"\n" +"<b>Topic:</b> %s" +msgstr "" + +#, fuzzy +msgid "(no topic set)" +msgstr "(haijawekwa)" + +msgid "Buddy Alias" +msgstr "" + +msgid "Logged In" +msgstr "Ingia" + +msgid "Last Seen" +msgstr "" + +msgid "Spooky" +msgstr "" + +msgid "Awesome" +msgstr "" + +msgid "Rockin'" +msgstr "" + +msgid "Total Buddies" +msgstr "" + +#, c-format +msgid "Idle %dd %dh %02dm" +msgstr "" + +#, c-format +msgid "Idle %dh %02dm" +msgstr "" + +#, c-format +msgid "Idle %dm" +msgstr "" + +msgid "/Buddies/New Instant Message..." +msgstr "" + +msgid "/Buddies/Join a Chat..." +msgstr "" + +msgid "/Buddies/Get User Info..." +msgstr "" + +msgid "/Buddies/Add Buddy..." +msgstr "" + +msgid "/Buddies/Add Chat..." +msgstr "" + +msgid "/Buddies/Add Group..." +msgstr "" + +msgid "/Tools/Privacy" +msgstr "" + +msgid "/Tools/Room List" +msgstr "" + +#, c-format +msgid "%d unread message from %s\n" +msgid_plural "%d unread messages from %s\n" +msgstr[0] "" +msgstr[1] "" + +#, fuzzy +msgid "Manually" +msgstr "Januari" + +msgid "By status" +msgstr "" + +msgid "By recent log activity" +msgstr "" + +#, c-format +msgid "%s disconnected" +msgstr "" + +#, fuzzy, c-format +msgid "%s disabled" +msgstr "Imelemazwa" + +msgid "Reconnect" +msgstr "" + +msgid "Re-enable" +msgstr "" + +#, fuzzy +msgid "SSL FAQs" +msgstr "SSL CA" + +#, fuzzy +msgid "Welcome back!" +msgstr "Karibu Wanadamu!" + +#, c-format +msgid "%d account was disabled because you signed on from another location:" +msgid_plural "" +"%d accounts were disabled because you signed on from another location:" +msgstr[0] "" +msgstr[1] "" + +msgid "<b>Username:</b>" +msgstr "" + +msgid "<b>Password:</b>" +msgstr "" + +msgid "_Login" +msgstr "" + +msgid "/Accounts" +msgstr "" + +#. Translators: Please maintain the use of -> and <- to refer to menu heirarchy +#, c-format +msgid "" +"<span weight='bold' size='larger'>Welcome to %s!</span>\n" +"\n" +"You have no accounts enabled. Enable your IM accounts from the <b>Accounts</" +"b> window at <b>Accounts->Manage Accounts</b>. Once you enable accounts, " +"you'll be able to sign on, set your status, and talk to your friends." +msgstr "" + +#. set the Show Offline Buddies option. must be done +#. * after the treeview or faceprint gets mad. -Robot101 +#. +msgid "/Buddies/Show/Offline Buddies" +msgstr "" + +msgid "/Buddies/Show/Empty Groups" +msgstr "" + +msgid "/Buddies/Show/Buddy Details" +msgstr "" + +msgid "/Buddies/Show/Idle Times" +msgstr "" + +msgid "/Buddies/Show/Protocol Icons" +msgstr "" + +msgid "Add a buddy.\n" +msgstr "" + +msgid "Buddy's _username:" +msgstr "" + +msgid "(Optional) A_lias:" +msgstr "" + +msgid "Add buddy to _group:" +msgstr "" + +msgid "This protocol does not support chat rooms." +msgstr "" + +msgid "" +"You are not currently signed on with any protocols that have the ability to " +"chat." +msgstr "" + +msgid "" +"Please enter an alias, and the appropriate information about the chat you " +"would like to add to your buddy list.\n" +msgstr "" + +msgid "A_lias:" +msgstr "" + +msgid "_Group:" +msgstr "" + +msgid "Auto_join when account becomes online." +msgstr "" + +msgid "_Remain in chat after window is closed." +msgstr "" + +msgid "Please enter the name of the group to be added." +msgstr "" + +msgid "Enable Account" +msgstr "" + +msgid "<PurpleMain>/Accounts/Enable Account" +msgstr "" + +msgid "<PurpleMain>/Accounts/" +msgstr "" + +#, fuzzy +msgid "_Edit Account" +msgstr "hesabu ya matembeleo" + +#, fuzzy +msgid "No actions available" +msgstr "Haipatikani" + +#, fuzzy +msgid "_Disable" +msgstr "Lemaza" + +#, fuzzy +msgid "/Tools" +msgstr "&Zana" + +msgid "/Buddies/Sort Buddies" +msgstr "" + +#. Widget creation function +#, fuzzy +msgid "SSL Servers" +msgstr "SSL Seva" + +msgid "Unknown command." +msgstr "" + +msgid "That buddy is not on the same protocol as this chat." +msgstr "" + +msgid "" +"You are not currently signed on with an account that can invite that buddy." +msgstr "" + +msgid "Invite Buddy Into Chat Room" +msgstr "" + +msgid "_Buddy:" +msgstr "" + +#, fuzzy +msgid "_Message:" +msgstr "Ujumbe" + +#, c-format +msgid "<h1>Conversation with %s</h1>\n" +msgstr "" + +msgid "Save Conversation" +msgstr "" + +msgid "Find" +msgstr "Tafuta" + +msgid "_Search for:" +msgstr "" + +msgid "Un-Ignore" +msgstr "" + +msgid "Ignore" +msgstr "" + +msgid "Get Away Message" +msgstr "" + +#, fuzzy +msgid "Last said" +msgstr "Ukurasa wa mwisho" + +msgid "Unable to save icon file to disk." +msgstr "" + +#, fuzzy +msgid "Save Icon" +msgstr "Hifadhi Taswira" + +#, fuzzy +msgid "Animate" +msgstr "Fanya hai" + +msgid "Hide Icon" +msgstr "" + +msgid "Save Icon As..." +msgstr "" + +msgid "Set Custom Icon..." +msgstr "" + +msgid "Change Size" +msgstr "" + +msgid "Show All" +msgstr "Onyesha Zote" + +#. Conversation menu +msgid "/_Conversation" +msgstr "" + +msgid "/Conversation/New Instant _Message..." +msgstr "" + +msgid "/Conversation/_Find..." +msgstr "" + +msgid "/Conversation/View _Log" +msgstr "" + +msgid "/Conversation/_Save As..." +msgstr "" + +msgid "/Conversation/Clea_r Scrollback" +msgstr "" + +msgid "/Conversation/M_edia" +msgstr "" + +msgid "/Conversation/Media/_Audio Call" +msgstr "" + +msgid "/Conversation/Media/_Video Call" +msgstr "" + +msgid "/Conversation/Media/Audio\\/Video _Call" +msgstr "" + +msgid "/Conversation/Se_nd File..." +msgstr "" + +msgid "/Conversation/Add Buddy _Pounce..." +msgstr "" + +msgid "/Conversation/_Get Info" +msgstr "" + +msgid "/Conversation/In_vite..." +msgstr "" + +msgid "/Conversation/M_ore" +msgstr "" + +msgid "/Conversation/Al_ias..." +msgstr "" + +msgid "/Conversation/_Block..." +msgstr "" + +msgid "/Conversation/_Unblock..." +msgstr "" + +msgid "/Conversation/_Add..." +msgstr "" + +msgid "/Conversation/_Remove..." +msgstr "" + +msgid "/Conversation/Insert Lin_k..." +msgstr "" + +msgid "/Conversation/Insert Imag_e..." +msgstr "" + +msgid "/Conversation/_Close" +msgstr "" + +#. Options +#, fuzzy +msgid "/_Options" +msgstr "Machaguo" + +msgid "/Options/Enable _Logging" +msgstr "" + +msgid "/Options/Enable _Sounds" +msgstr "" + +msgid "/Options/Show Formatting _Toolbars" +msgstr "" + +msgid "/Options/Show Ti_mestamps" +msgstr "" + +msgid "/Conversation/More" +msgstr "" + +#, fuzzy +msgid "/Options" +msgstr "Machaguo" + +#. The menubar has been deactivated. Make sure the 'More' submenu is regenerated next time +#. * the 'Conversation' menu pops up. +#. Make sure the 'Conversation -> More' menuitems are regenerated whenever +#. * the 'Conversation' menu pops up because the entries can change after the +#. * conversation is created. +#, fuzzy +msgid "/Conversation" +msgstr "Unganisho" + +msgid "/Conversation/View Log" +msgstr "" + +msgid "/Conversation/Media/Audio Call" +msgstr "" + +msgid "/Conversation/Media/Video Call" +msgstr "" + +msgid "/Conversation/Media/Audio\\/Video Call" +msgstr "" + +msgid "/Conversation/Send File..." +msgstr "" + +msgid "/Conversation/Add Buddy Pounce..." +msgstr "" + +msgid "/Conversation/Get Info" +msgstr "" + +msgid "/Conversation/Invite..." +msgstr "" + +msgid "/Conversation/Alias..." +msgstr "" + +msgid "/Conversation/Block..." +msgstr "" + +msgid "/Conversation/Unblock..." +msgstr "" + +msgid "/Conversation/Add..." +msgstr "" + +msgid "/Conversation/Remove..." +msgstr "" + +msgid "/Conversation/Insert Link..." +msgstr "" + +msgid "/Conversation/Insert Image..." +msgstr "" + +msgid "/Options/Enable Logging" +msgstr "" + +msgid "/Options/Enable Sounds" +msgstr "" + +msgid "/Options/Show Formatting Toolbars" +msgstr "" + +msgid "/Options/Show Timestamps" +msgstr "" + +msgid "User is typing..." +msgstr "" + +#, c-format +msgid "" +"\n" +"%s has stopped typing" +msgstr "" + +#. Build the Send To menu +#, fuzzy +msgid "S_end To" +msgstr "Tuma kwa:" + +msgid "_Send" +msgstr "" + +#. Setup the label telling how many people are in the room. +msgid "0 people in room" +msgstr "" + +#, c-format +msgid "%d person in room" +msgid_plural "%d people in room" +msgstr[0] "" +msgstr[1] "" + +msgid "Typing" +msgstr "" + +msgid "Stopped Typing" +msgstr "" + +msgid "Nick Said" +msgstr "" + +#, fuzzy +msgid "Unread Messages" +msgstr "Jumbe za tahadhari" + +msgid "New Event" +msgstr "" + +msgid "clear: Clears all conversation scrollbacks." +msgstr "" + +msgid "Confirm close" +msgstr "Thibitisha kufunga" + +msgid "You have unread messages. Are you sure you want to close the window?" +msgstr "" + +#, fuzzy +msgid "Close other tabs" +msgstr "Funga Tab&o Nyingine" + +#, fuzzy +msgid "Close all tabs" +msgstr "Funga tabo" + +msgid "Detach this tab" +msgstr "" + +#, fuzzy +msgid "Close this tab" +msgstr "Funga ujumbe huu" + +msgid "Close conversation" +msgstr "" + +msgid "Last created window" +msgstr "" + +msgid "Separate IM and Chat windows" +msgstr "" + +msgid "New window" +msgstr "Dirisha jipya" + +msgid "By group" +msgstr "" + +msgid "By account" +msgstr "" + +msgid "Save Debug Log" +msgstr "" + +msgid "Invert" +msgstr "" + +#, fuzzy +msgid "Highlight matches" +msgstr "&Angaza yote" + +msgid "_Icon Only" +msgstr "" + +#, fuzzy +msgid "_Text Only" +msgstr "Kuza Saizi ya Maandishi &Tu" + +msgid "_Both Icon & Text" +msgstr "" + +#, fuzzy +msgid "Filter" +msgstr "Ch&uja:" + +msgid "Right click for more options." +msgstr "" + +msgid "Level " +msgstr "" + +msgid "Select the debug filter level." +msgstr "" + +#, fuzzy +msgid "All" +msgstr "&Yote" + +msgid "Misc" +msgstr "" + +#, fuzzy +msgid "Warning" +msgstr "Tahadhari:" + +#, fuzzy +msgid "Error " +msgstr "Hitikafu " + +#, fuzzy +msgid "Fatal Error" +msgstr "Hitilafu katika kusakinisha" + +msgid "bug master" +msgstr "" + +msgid "artist" +msgstr "" + +#. feel free to not translate this +msgid "Ka-Hing Cheung" +msgstr "" + +msgid "voice and video" +msgstr "" + +msgid "support" +msgstr "" + +msgid "webmaster" +msgstr "" + +msgid "Senior Contributor/QA" +msgstr "" + +msgid "win32 port" +msgstr "" + +msgid "maintainer" +msgstr "" + +msgid "libfaim maintainer" +msgstr "" + +#. If "lazy bum" translates literally into a serious insult, use something else or omit it. +msgid "hacker and designated driver [lazy bum]" +msgstr "" + +msgid "support/QA" +msgstr "" + +msgid "XMPP" +msgstr "" + +msgid "original author" +msgstr "" + +msgid "lead developer" +msgstr "" + +msgid "Afrikaans" +msgstr "Kiafriakansi" + +msgid "Arabic" +msgstr "Kiarabu" + +#, fuzzy +msgid "Belarusian Latin" +msgstr "Kibelarusi" + +msgid "Bulgarian" +msgstr "Kibulgaria" + +msgid "Bengali" +msgstr "Kibengalia" + +msgid "Bosnian" +msgstr "Kibosnia" + +msgid "Catalan" +msgstr "Kicatala" + +msgid "Valencian-Catalan" +msgstr "" + +msgid "Czech" +msgstr "Kiczech" + +msgid "Danish" +msgstr "Kidanishi" + +msgid "German" +msgstr "Kijerumani" + +msgid "Dzongkha" +msgstr "Kidzongkha" + +msgid "Greek" +msgstr "Kigiriki" + +msgid "Australian English" +msgstr "" + +msgid "Canadian English" +msgstr "" + +msgid "British English" +msgstr "" + +msgid "Esperanto" +msgstr "Kiesperanto" + +msgid "Spanish" +msgstr "Kihispania" + +msgid "Estonian" +msgstr "Kiestonia" + +msgid "Euskera(Basque)" +msgstr "" + +msgid "Persian" +msgstr "Kipersia" + +msgid "Finnish" +msgstr "Kifinishi" + +msgid "French" +msgstr "Kifaransa" + +msgid "Irish" +msgstr "Kiirishi" + +msgid "Galician" +msgstr "Kigalacy" + +msgid "Gujarati" +msgstr "Kigujarati" + +msgid "Gujarati Language Team" +msgstr "" + +msgid "Hebrew" +msgstr "Kiebrania" + +msgid "Hindi" +msgstr "Kihindi" + +msgid "Hungarian" +msgstr "Kihungaria" + +msgid "Indonesian" +msgstr "Kindonesia" + +msgid "Italian" +msgstr "Kiitalia" + +msgid "Japanese" +msgstr "Kijapani" + +msgid "Georgian" +msgstr "Kigeorgia" + +msgid "Ubuntu Georgian Translators" +msgstr "" + +msgid "Khmer" +msgstr "Kihemeri" + +msgid "Kannada" +msgstr "Kikanada" + +msgid "Kannada Translation team" +msgstr "" + +msgid "Korean" +msgstr "Kikorea" + +msgid "Kurdish" +msgstr "Kikurdi" + +msgid "Lao" +msgstr "Lao" + +msgid "Lithuanian" +msgstr "Kilithuania" + +msgid "Macedonian" +msgstr "Kimacedonia" + +msgid "Mongolian" +msgstr "Kimongolia" + +msgid "Bokmål Norwegian" +msgstr "" + +msgid "Nepali" +msgstr "Kinepali" + +msgid "Dutch, Flemish" +msgstr "" + +msgid "Norwegian Nynorsk" +msgstr "Kinynorsk cha Norway" + +msgid "Occitan" +msgstr "Kioccita" + +msgid "Punjabi" +msgstr "Kipunjabi" + +msgid "Polish" +msgstr "Kipolishi" + +msgid "Portuguese" +msgstr "Kireno" + +msgid "Portuguese-Brazil" +msgstr "" + +msgid "Pashto" +msgstr "Kipashto" + +msgid "Romanian" +msgstr "Kiromania" + +msgid "Russian" +msgstr "Kirusi" + +msgid "Slovak" +msgstr "Kislovaki" + +msgid "Slovenian" +msgstr "Kislovenia" + +msgid "Albanian" +msgstr "Kialbania" + +msgid "Serbian" +msgstr "Kiserbia" + +msgid "Sinhala" +msgstr "Kisinihala" + +msgid "Swedish" +msgstr "Kiswidi" + +msgid "Swahili Tanzania" +msgstr "" + +msgid "Tamil" +msgstr "Kitamilia" + +msgid "Telugu" +msgstr "Kitelugu" + +msgid "Thai" +msgstr "Kitai" + +msgid "Turkish" +msgstr "Kituruki" + +msgid "Urdu" +msgstr "Kiurdu" + +msgid "Vietnamese" +msgstr "Kivietnamu" + +msgid "T.M.Thanh and the Gnome-Vi Team" +msgstr "" + +msgid "Simplified Chinese" +msgstr "Kichina Rahisi" + +msgid "Hong Kong Chinese" +msgstr "" + +msgid "Traditional Chinese" +msgstr "Kichina Asili" + +msgid "Amharic" +msgstr "Kiamharic" + +#, fuzzy, c-format +msgid "About %s" +msgstr "Kuhusu %S" + +#, c-format +msgid "" +"%s is a graphical modular messaging client based on libpurple which is " +"capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, " +"Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, MySpaceIM, Gadu-Gadu, and " +"QQ all at once. It is written using GTK+.<BR><BR>You may modify and " +"redistribute the program under the terms of the GPL (version 2 or later). A " +"copy of the GPL is contained in the 'COPYING' file distributed with %s. %s " +"is copyrighted by its contributors. See the 'COPYRIGHT' file for the " +"complete list of contributors. We provide no warranty for this program." +"<BR><BR>" +msgstr "" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" +msgstr "" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" +msgstr "" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgstr "" + +#, c-format +msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" +msgstr "" + +msgid "Current Developers" +msgstr "" + +msgid "Crazy Patch Writers" +msgstr "" + +msgid "Retired Developers" +msgstr "" + +msgid "Retired Crazy Patch Writers" +msgstr "" + +msgid "Current Translators" +msgstr "" + +#, fuzzy +msgid "Past Translators" +msgstr "Watafsiri:" + +#, fuzzy +msgid "Debugging Information" +msgstr "Inachunguza taarifa" + +#, fuzzy +msgid "_Name" +msgstr "Jina" + +msgid "_Account" +msgstr "" + +msgid "Get User Info" +msgstr "" + +msgid "" +"Please enter the username or alias of the person whose info you would like " +"to view." +msgstr "" + +msgid "View User Log" +msgstr "" + +msgid "Alias Contact" +msgstr "" + +msgid "Enter an alias for this contact." +msgstr "" + +#, c-format +msgid "Enter an alias for %s." +msgstr "" + +msgid "Alias Buddy" +msgstr "" + +msgid "Alias Chat" +msgstr "" + +msgid "Enter an alias for this chat." +msgstr "" + +#, c-format +msgid "" +"You are about to remove the contact containing %s and %d other buddy from " +"your buddy list. Do you want to continue?" +msgid_plural "" +"You are about to remove the contact containing %s and %d other buddies from " +"your buddy list. Do you want to continue?" +msgstr[0] "" +msgstr[1] "" + +#, fuzzy +msgid "Remove Contact" +msgstr "Ondoa Kuki" + +#, fuzzy +msgid "_Remove Contact" +msgstr "Ondoa Kuki" + +#, c-format +msgid "" +"You are about to merge the group called %s into the group called %s. Do you " +"want to continue?" +msgstr "" + +msgid "Merge Groups" +msgstr "" + +msgid "_Merge Groups" +msgstr "" + +#, c-format +msgid "" +"You are about to remove the group %s and all its members from your buddy " +"list. Do you want to continue?" +msgstr "" + +#, fuzzy +msgid "Remove Group" +msgstr "Ondoa Kuki" + +msgid "_Remove Group" +msgstr "" + +#, fuzzy, c-format +msgid "" +"You are about to remove %s from your buddy list. Do you want to continue?" +msgstr "Unakaribia kufunga tabo ya %S. Unauhakika unataka kuendelea?" + +msgid "Remove Buddy" +msgstr "" + +msgid "_Remove Buddy" +msgstr "" + +#, fuzzy, c-format +msgid "" +"You are about to remove the chat %s from your buddy list. Do you want to " +"continue?" +msgstr "Unakaribia kufunga tabo ya %S. Unauhakika unataka kuendelea?" + +#, fuzzy +msgid "Remove Chat" +msgstr "Ondoa &All" + +msgid "_Remove Chat" +msgstr "" + +msgid "Right-click for more unread messages...\n" +msgstr "" + +msgid "_Change Status" +msgstr "" + +msgid "Show Buddy _List" +msgstr "" + +msgid "_Unread Messages" +msgstr "" + +msgid "New _Message..." +msgstr "" + +msgid "_Accounts" +msgstr "" + +#, fuzzy +msgid "Plu_gins" +msgstr "Programu tumizi" + +#, fuzzy +msgid "Pr_eferences" +msgstr "Mapendekezo" + +msgid "Mute _Sounds" +msgstr "" + +msgid "_Blink on New Message" +msgstr "" + +#, fuzzy +msgid "_Quit" +msgstr "&Funga" + +#, fuzzy +msgid "Not started" +msgstr "Haujaanza" + +msgid "<b>Receiving As:</b>" +msgstr "" + +msgid "<b>Receiving From:</b>" +msgstr "" + +msgid "<b>Sending To:</b>" +msgstr "" + +msgid "<b>Sending As:</b>" +msgstr "" + +msgid "There is no application configured to open this type of file." +msgstr "" + +msgid "An error occurred while opening the file." +msgstr "" + +#, c-format +msgid "Error launching %s: %s" +msgstr "" + +#, fuzzy, c-format +msgid "Error running %s" +msgstr "Hitilafu katika kufungua %S" + +#, c-format +msgid "Process returned error code %d" +msgstr "" + +#, fuzzy +msgid "Filename:" +msgstr "Jina la faili:" + +#, fuzzy +msgid "Local File:" +msgstr "faili la kikweti" + +msgid "Speed:" +msgstr "" + +msgid "Time Elapsed:" +msgstr "Muda Uliotumika:" + +#, fuzzy +msgid "Time Remaining:" +msgstr "#1 imebakia" + +msgid "Close this window when all transfers _finish" +msgstr "" + +msgid "C_lear finished transfers" +msgstr "" + +#. "Download Details" arrow +msgid "File transfer _details" +msgstr "" + +#. Pause button +#, fuzzy +msgid "_Pause" +msgstr "Simamisha" + +#. Resume button +#, fuzzy +msgid "_Resume" +msgstr "Endelea" + +msgid "Paste as Plain _Text" +msgstr "" + +msgid "_Reset formatting" +msgstr "" + +msgid "Disable _smileys in selected text" +msgstr "" + +msgid "Hyperlink color" +msgstr "" + +msgid "Color to draw hyperlinks." +msgstr "" + +msgid "Hyperlink visited color" +msgstr "" + +msgid "Color to draw hyperlinks after it has been visited (or activated)." +msgstr "" + +msgid "Hyperlink prelight color" +msgstr "" + +msgid "Color to draw hyperlinks when mouse is over them." +msgstr "" + +msgid "Sent Message Name Color" +msgstr "" + +msgid "Color to draw the name of a message you sent." +msgstr "" + +msgid "Received Message Name Color" +msgstr "" + +msgid "Color to draw the name of a message you received." +msgstr "" + +msgid "\"Attention\" Name Color" +msgstr "" + +msgid "Color to draw the name of a message you received containing your name." +msgstr "" + +msgid "Action Message Name Color" +msgstr "" + +msgid "Color to draw the name of an action message." +msgstr "" + +msgid "Action Message Name Color for Whispered Message" +msgstr "" + +msgid "Whisper Message Name Color" +msgstr "" + +msgid "Typing notification color" +msgstr "" + +msgid "The color to use for the typing notification font" +msgstr "" + +msgid "Typing notification font" +msgstr "" + +msgid "The font to use for the typing notification" +msgstr "" + +msgid "Enable typing notification" +msgstr "" + +msgid "" +"<span size='larger' weight='bold'>Unrecognized file type</span>\n" +"\n" +"Defaulting to PNG." +msgstr "" + +msgid "" +"Unrecognized file type\n" +"\n" +"Defaulting to PNG." +msgstr "" + +#, c-format +msgid "" +"<span size='larger' weight='bold'>Error saving image</span>\n" +"\n" +"%s" +msgstr "" + +#, fuzzy, c-format +msgid "" +"Error saving image\n" +"\n" +"%s" +msgstr "Hitilafu katika kuhifadhi %S" + +msgid "Save Image" +msgstr "Hifadhi Taswira" + +#, fuzzy +msgid "_Save Image..." +msgstr "Hifadhi Taswira" + +msgid "_Add Custom Smiley..." +msgstr "" + +#, fuzzy +msgid "Select Font" +msgstr "&Uchanguzi" + +msgid "Select Text Color" +msgstr "" + +#, fuzzy +msgid "Select Background Color" +msgstr "Chapisha rangi za usuli" + +#, fuzzy +msgid "_URL" +msgstr "URL" + +#, fuzzy +msgid "_Description" +msgstr "Maelezo" + +msgid "" +"Please enter the URL and description of the link that you want to insert. " +"The description is optional." +msgstr "" + +msgid "Please enter the URL of the link that you want to insert." +msgstr "" + +msgid "Insert Link" +msgstr "" + +msgid "_Insert" +msgstr "" + +#, c-format +msgid "Failed to store image: %s\n" +msgstr "" + +msgid "Insert Image" +msgstr "" + +#, c-format +msgid "" +"This smiley is disabled because a custom smiley exists for this shortcut:\n" +" %s" +msgstr "" + +msgid "Smile!" +msgstr "" + +msgid "_Manage custom smileys" +msgstr "" + +msgid "This theme has no available smileys." +msgstr "" + +#, fuzzy +msgid "_Font" +msgstr "Fonti" + +msgid "Group Items" +msgstr "" + +msgid "Ungroup Items" +msgstr "" + +msgid "Bold" +msgstr "" + +#, fuzzy +msgid "Italic" +msgstr "Kiitalia" + +#, fuzzy +msgid "Underline" +msgstr "Interlingue" + +msgid "Strikethrough" +msgstr "" + +msgid "Increase Font Size" +msgstr "" + +msgid "Decrease Font Size" +msgstr "" + +msgid "Font Face" +msgstr "" + +#, fuzzy +msgid "Background Color" +msgstr "Chapisha rangi za usuli" + +msgid "Foreground Color" +msgstr "" + +msgid "Reset Formatting" +msgstr "" + +msgid "Insert IM Image" +msgstr "" + +msgid "Insert Smiley" +msgstr "" + +msgid "<b>_Bold</b>" +msgstr "" + +msgid "<i>_Italic</i>" +msgstr "" + +msgid "<u>_Underline</u>" +msgstr "" + +msgid "<span strikethrough='true'>Strikethrough</span>" +msgstr "" + +msgid "<span size='larger'>_Larger</span>" +msgstr "" + +#, fuzzy +msgid "_Normal" +msgstr "&Kawaida" + +msgid "<span size='smaller'>_Smaller</span>" +msgstr "" + +#. If we want to show the formatting for the following items, we would +#. * need to update them when formatting changes. The above items don't need +#. * no updating nor nothin' +msgid "_Font face" +msgstr "" + +msgid "Foreground _color" +msgstr "" + +msgid "Bac_kground color" +msgstr "" + +#, fuzzy +msgid "_Image" +msgstr "Taswira" + +msgid "_Link" +msgstr "" + +msgid "_Horizontal rule" +msgstr "" + +msgid "_Smile!" +msgstr "" + +#, fuzzy +msgid "Log Deletion Failed" +msgstr "Unganisho Limeshindikana" + +msgid "Check permissions and try again." +msgstr "" + +#, c-format +msgid "" +"Are you sure you want to permanently delete the log of the conversation with " +"%s which started at %s?" +msgstr "" + +#, c-format +msgid "" +"Are you sure you want to permanently delete the log of the conversation in %" +"s which started at %s?" +msgstr "" + +#, c-format +msgid "" +"Are you sure you want to permanently delete the system log which started at %" +"s?" +msgstr "" + +#, fuzzy +msgid "Delete Log?" +msgstr "Futa mwenyeji" + +#, fuzzy +msgid "Delete Log..." +msgstr "Futa mwenyeji" + +#, c-format +msgid "<span size='larger' weight='bold'>Conversation in %s on %s</span>" +msgstr "" + +#, c-format +msgid "<span size='larger' weight='bold'>Conversation with %s on %s</span>" +msgstr "" + +#. Steal the "HELP" response and use it to trigger browsing to the logs folder +msgid "_Browse logs folder" +msgstr "" + +#, fuzzy, c-format +msgid "%s %s. Try `%s -h' for more information.\n" +msgstr "\n" + +#, c-format +msgid "" +"%s %s\n" +"Usage: %s [OPTION]...\n" +"\n" +" -c, --config=DIR use DIR for config files\n" +" -d, --debug print debugging messages to stdout\n" +" -f, --force-online force online, regardless of network status\n" +" -h, --help display this help and exit\n" +" -m, --multiple do not ensure single instance\n" +" -n, --nologin don't automatically login\n" +" -l, --login[=NAME] enable specified account(s) (optional argument NAME\n" +" specifies account(s) to use, separated by commas.\n" +" Without this only the first account will be enabled).\n" +" --display=DISPLAY X display to use\n" +" -v, --version display the current version and exit\n" +msgstr "" + +#, c-format +msgid "" +"%s %s\n" +"Usage: %s [OPTION]...\n" +"\n" +" -c, --config=DIR use DIR for config files\n" +" -d, --debug print debugging messages to stdout\n" +" -f, --force-online force online, regardless of network status\n" +" -h, --help display this help and exit\n" +" -m, --multiple do not ensure single instance\n" +" -n, --nologin don't automatically login\n" +" -l, --login[=NAME] enable specified account(s) (optional argument NAME\n" +" specifies account(s) to use, separated by commas.\n" +" Without this only the first account will be enabled).\n" +" -v, --version display the current version and exit\n" +msgstr "" + +#, c-format +msgid "" +"%s %s has segfaulted and attempted to dump a core file.\n" +"This is a bug in the software and has happened through\n" +"no fault of your own.\n" +"\n" +"If you can reproduce the crash, please notify the developers\n" +"by reporting a bug at:\n" +"%ssimpleticket/\n" +"\n" +"Please make sure to specify what you were doing at the time\n" +"and post the backtrace from the core file. If you do not know\n" +"how to get the backtrace, please read the instructions at\n" +"%swiki/GetABacktrace\n" +msgstr "" + +#. Translators may want to transliterate the name. +#. It is not to be translated. +#, fuzzy +msgid "Pidgin" +msgstr "Programu-unganishi" + +#, c-format +msgid "Exiting because another libpurple client is already running.\n" +msgstr "" + +#, fuzzy +msgid "/_Media" +msgstr "Media" + +msgid "/Media/_Hangup" +msgstr "" + +msgid "Calling..." +msgstr "" + +#, c-format +msgid "%s wishes to start an audio/video session with you." +msgstr "" + +#, c-format +msgid "%s wishes to start a video session with you." +msgstr "" + +#, c-format +msgid "%s has %d new message." +msgid_plural "%s has %d new messages." +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "<b>%d new email.</b>" +msgid_plural "<b>%d new emails.</b>" +msgstr[0] "" +msgstr[1] "" + +#, c-format +msgid "The browser command \"%s\" is invalid." +msgstr "" + +#, fuzzy +msgid "Unable to open URL" +msgstr "Nimeshindwa Kusasisha" + +#, c-format +msgid "Error launching \"%s\": %s" +msgstr "" + +msgid "" +"The 'Manual' browser command has been chosen, but no command has been set." +msgstr "" + +#, fuzzy +msgid "Open All Messages" +msgstr "Fungua kwenye Tabo zote" + +msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>" +msgstr "" + +msgid "New Pounces" +msgstr "" + +msgid "Dismiss" +msgstr "" + +msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>" +msgstr "" + +#, fuzzy +msgid "No message" +msgstr "Ujumbe" + +#, fuzzy +msgid "The following plugins will be unloaded." +msgstr "Programu-jalizi zifuatazo zinapatikana:" + +msgid "Multiple plugins will be unloaded." +msgstr "" + +#, fuzzy +msgid "Unload Plugins" +msgstr "Kuhusu Program-jalizi" + +msgid "Could not unload plugin" +msgstr "" + +msgid "" +"The plugin could not be unloaded now, but will be disabled at the next " +"startup." +msgstr "" + +#, c-format +msgid "" +"<span foreground=\"red\" weight=\"bold\">Error: %s\n" +"Check the plugin website for an update.</span>" +msgstr "" + +msgid "Author" +msgstr "" + +msgid "<b>Written by:</b>" +msgstr "" + +msgid "<b>Web site:</b>" +msgstr "" + +msgid "<b>Filename:</b>" +msgstr "" + +msgid "Configure Pl_ugin" +msgstr "" + +msgid "<b>Plugin Details</b>" +msgstr "" + +#, fuzzy +msgid "Select a file" +msgstr "Chagua Profaili" + +msgid "Modify Buddy Pounce" +msgstr "" + +#. Create the "Pounce on Whom" frame. +msgid "Pounce on Whom" +msgstr "" + +msgid "_Account:" +msgstr "" + +msgid "_Buddy name:" +msgstr "" + +msgid "Si_gns on" +msgstr "" + +msgid "Signs o_ff" +msgstr "" + +msgid "Goes a_way" +msgstr "" + +msgid "Ret_urns from away" +msgstr "" + +msgid "Becomes _idle" +msgstr "" + +msgid "Is no longer i_dle" +msgstr "" + +msgid "Starts _typing" +msgstr "" + +msgid "P_auses while typing" +msgstr "" + +msgid "Stops t_yping" +msgstr "" + +msgid "Sends a _message" +msgstr "" + +#, fuzzy +msgid "Ope_n an IM window" +msgstr "Fungua dirisha jipya" + +msgid "_Pop up a notification" +msgstr "" + +msgid "Send a _message" +msgstr "" + +msgid "E_xecute a command" +msgstr "" + +msgid "P_lay a sound" +msgstr "" + +#, fuzzy +msgid "Brows_e..." +msgstr "Vinjari…" + +#, fuzzy +msgid "Br_owse..." +msgstr "Vinjari…" + +#, fuzzy +msgid "Pre_view" +msgstr "Hakiki" + +msgid "P_ounce only when my status is not Available" +msgstr "" + +msgid "_Recurring" +msgstr "" + +msgid "Pounce Target" +msgstr "" + +#, c-format +msgid "Started typing" +msgstr "" + +#, c-format +msgid "Paused while typing" +msgstr "" + +#, c-format +msgid "Signed on" +msgstr "" + +#, c-format +msgid "Returned from being idle" +msgstr "" + +#, c-format +msgid "Returned from being away" +msgstr "" + +#, c-format +msgid "Stopped typing" +msgstr "" + +#, c-format +msgid "Signed off" +msgstr "" + +#, c-format +msgid "Became idle" +msgstr "" + +#, c-format +msgid "Went away" +msgstr "" + +#, fuzzy, c-format +msgid "Sent a message" +msgstr "Weka Ukurasa Nyumbani" + +#, c-format +msgid "Unknown.... Please report this!" +msgstr "" + +msgid "Smiley theme failed to unpack." +msgstr "" + +#, fuzzy +msgid "Install Theme" +msgstr "Sakinisha Mandhari" + +msgid "" +"Select a smiley theme that you would like to use from the list below. New " +"themes can be installed by dragging and dropping them onto the theme list." +msgstr "" + +msgid "Icon" +msgstr "Ikoni" + +#, fuzzy +msgid "Keyboard Shortcuts" +msgstr "Uwekaji wa Mikato" + +msgid "Cl_ose conversations with the Escape key" +msgstr "" + +#. Buddy List Themes +msgid "Buddy List Theme" +msgstr "" + +#. System Tray +msgid "System Tray Icon" +msgstr "" + +msgid "_Show system tray icon:" +msgstr "" + +msgid "On unread messages" +msgstr "" + +msgid "Conversation Window Hiding" +msgstr "" + +msgid "_Hide new IM conversations:" +msgstr "" + +msgid "When away" +msgstr "" + +#. All the tab options! +msgid "Tabs" +msgstr "Tabo" + +msgid "Show IMs and chats in _tabbed windows" +msgstr "" + +msgid "Show close b_utton on tabs" +msgstr "" + +msgid "_Placement:" +msgstr "" + +#, fuzzy +msgid "Top" +msgstr "Kwa:" + +#, fuzzy +msgid "Bottom" +msgstr "&Chini:" + +msgid "Left" +msgstr "Kushoto" + +msgid "Right" +msgstr "Kulia" + +msgid "Left Vertical" +msgstr "" + +msgid "Right Vertical" +msgstr "" + +msgid "N_ew conversations:" +msgstr "" + +msgid "Show _formatting on incoming messages" +msgstr "" + +msgid "Close IMs immediately when the tab is closed" +msgstr "" + +msgid "Show _detailed information" +msgstr "" + +msgid "Enable buddy ic_on animation" +msgstr "" + +msgid "_Notify buddies that you are typing to them" +msgstr "" + +msgid "Highlight _misspelled words" +msgstr "" + +#, fuzzy +msgid "Use smooth-scrolling" +msgstr "Tu&mia ubiringizaji taratibu" + +msgid "F_lash window when IMs are received" +msgstr "" + +msgid "Minimi_ze new conversation windows" +msgstr "" + +msgid "Minimum input area height in lines:" +msgstr "" + +#, fuzzy +msgid "Font" +msgstr "Fonti" + +msgid "Use document font from _theme" +msgstr "" + +msgid "Use font from _theme" +msgstr "" + +msgid "Conversation _font:" +msgstr "" + +msgid "Default Formatting" +msgstr "" + +msgid "" +"This is how your outgoing message text will appear when you use protocols " +"that support formatting." +msgstr "" + +msgid "Cannot start proxy configuration program." +msgstr "" + +msgid "Cannot start browser configuration program." +msgstr "" + +msgid "<span style=\"italic\">Example: stunserver.org</span>" +msgstr "" + +msgid "_Autodetect IP address" +msgstr "" + +msgid "Public _IP:" +msgstr "" + +#, fuzzy +msgid "Ports" +msgstr "Lango:" + +msgid "_Enable automatic router port forwarding" +msgstr "" + +msgid "_Manually specify range of ports to listen on" +msgstr "" + +msgid "_Start port:" +msgstr "" + +#, fuzzy +msgid "_End port:" +msgstr "Tuma Kwa:" + +#. TURN server +msgid "Relay Server (TURN)" +msgstr "" + +msgid "Proxy Server & Browser" +msgstr "" + +msgid "<b>Proxy configuration program was not found.</b>" +msgstr "" + +msgid "<b>Browser configuration program was not found.</b>" +msgstr "" + +msgid "" +"Proxy & Browser preferences are configured\n" +"in GNOME Preferences" +msgstr "" + +msgid "Configure _Proxy" +msgstr "" + +msgid "Configure _Browser" +msgstr "" + +msgid "Proxy Server" +msgstr "" + +#, fuzzy +msgid "No proxy" +msgstr "Hakuna waka&la" + +#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings +msgid "Use remote DNS with SOCKS4 proxies" +msgstr "" + +msgid "_User:" +msgstr "" + +msgid "Seamonkey" +msgstr "" + +msgid "Opera" +msgstr "Opera" + +#, fuzzy +msgid "Netscape" +msgstr "Netscape 4" + +msgid "Mozilla" +msgstr "Mozilla" + +msgid "Konqueror" +msgstr "Konqueror" + +#, fuzzy +msgid "Desktop Default" +msgstr "Rejesha Misingi" + +#, fuzzy +msgid "GNOME Default" +msgstr "WPS Msingi" + +msgid "Galeon" +msgstr "Galeon" + +msgid "Firefox" +msgstr "Firefox" + +msgid "Firebird" +msgstr "" + +msgid "Epiphany" +msgstr "Epiphany" + +msgid "Manual" +msgstr "" + +msgid "Browser Selection" +msgstr "" + +#, fuzzy +msgid "_Browser:" +msgstr "Vinjari…" + +msgid "_Open link in:" +msgstr "" + +#, fuzzy +msgid "Browser default" +msgstr "Tumia Msingi" + +msgid "Existing window" +msgstr "" + +msgid "New tab" +msgstr "Tabo mpya" + +#, c-format +msgid "" +"_Manual:\n" +"(%s for URL)" +msgstr "" + +msgid "Log _format:" +msgstr "" + +msgid "Log all _instant messages" +msgstr "" + +msgid "Log all c_hats" +msgstr "" + +msgid "Log all _status changes to system log" +msgstr "" + +#, fuzzy +msgid "Sound Selection" +msgstr "&Uchanguzi" + +#, c-format +msgid "Quietest" +msgstr "" + +#, c-format +msgid "Quieter" +msgstr "" + +#, fuzzy, c-format +msgid "Quiet" +msgstr "&Funga" + +#, fuzzy, c-format +msgid "Loud" +msgstr "&Pakia upya" + +#, fuzzy, c-format +msgid "Louder" +msgstr "folda" + +#, c-format +msgid "Loudest" +msgstr "" + +msgid "_Method:" +msgstr "" + +msgid "Console beep" +msgstr "" + +msgid "No sounds" +msgstr "" + +#, c-format +msgid "" +"Sound c_ommand:\n" +"(%s for filename)" +msgstr "" + +msgid "M_ute sounds" +msgstr "" + +msgid "Sounds when conversation has _focus" +msgstr "" + +msgid "_Enable sounds:" +msgstr "" + +#, fuzzy +msgid "V_olume:" +msgstr "Safu-wima:" + +#, fuzzy +msgid "Play" +msgstr "Che&za" + +#, fuzzy +msgid "_Browse..." +msgstr "Vinjari…" + +#, fuzzy +msgid "_Reset" +msgstr "Seti upya" + +msgid "_Report idle time:" +msgstr "" + +msgid "Based on keyboard or mouse use" +msgstr "" + +msgid "_Auto-reply:" +msgstr "" + +msgid "When both away and idle" +msgstr "" + +#. Auto-away stuff +msgid "Auto-away" +msgstr "" + +msgid "_Minutes before becoming idle:" +msgstr "" + +msgid "Change status when _idle" +msgstr "" + +#, fuzzy +msgid "Change _status to:" +msgstr "&Badili matini ya ufito hali" + +#. Signon status stuff +msgid "Status at Startup" +msgstr "" + +msgid "Use status from last _exit at startup" +msgstr "" + +msgid "Status to a_pply at startup:" +msgstr "" + +msgid "Interface" +msgstr "" + +#, fuzzy +msgid "Smiley Themes" +msgstr "Pata Mandhari" + +#, fuzzy +msgid "Browser" +msgstr "Vinjari…" + +msgid "Status / Idle" +msgstr "" + +msgid "Allow all users to contact me" +msgstr "" + +msgid "Allow only the users on my buddy list" +msgstr "" + +msgid "Allow only the users below" +msgstr "" + +msgid "Block all users" +msgstr "" + +msgid "Block only the users below" +msgstr "" + +msgid "Privacy" +msgstr "Faragha" + +msgid "Changes to privacy settings take effect immediately." +msgstr "" + +msgid "Set privacy for:" +msgstr "" + +#. Remove All button +#, fuzzy +msgid "Remove Al_l" +msgstr "Ondoa &All" + +msgid "Permit User" +msgstr "" + +msgid "Type a user you permit to contact you." +msgstr "" + +msgid "Please enter the name of the user you wish to be able to contact you." +msgstr "" + +msgid "_Permit" +msgstr "" + +#, c-format +msgid "Allow %s to contact you?" +msgstr "" + +#, fuzzy, c-format +msgid "Are you sure you wish to allow %s to contact you?" +msgstr "Una uhakika unataka kuOnyesha nywila zako?" + +#, fuzzy +msgid "Block User" +msgstr "Imezuiliwa" + +msgid "Type a user to block." +msgstr "" + +msgid "Please enter the name of the user you wish to block." +msgstr "" + +#, c-format +msgid "Block %s?" +msgstr "" + +#, c-format +msgid "Are you sure you want to block %s?" +msgstr "" + +msgid "Apply" +msgstr "" + +#, fuzzy +msgid "That file already exists" +msgstr "Ithibati tayari ipo." + +#, fuzzy +msgid "Would you like to overwrite it?" +msgstr "Ungependa kuhifadhi faili hili?" + +msgid "Overwrite" +msgstr "" + +#, fuzzy +msgid "Choose New Name" +msgstr "Jina la Kuki" + +#, fuzzy +msgid "Select Folder..." +msgstr "Fold&a Lililochaguliwa" + +#. list button +msgid "_Get List" +msgstr "" + +#. add button +msgid "_Add Chat" +msgstr "" + +#, fuzzy +msgid "Are you sure you want to delete the selected saved statuses?" +msgstr "Je una uhakika uantaka kufuta ithibati hizi?" + +#. Use button +msgid "_Use" +msgstr "" + +msgid "Title already in use. You must choose a unique title." +msgstr "" + +msgid "Different" +msgstr "" + +#, fuzzy +msgid "_Title:" +msgstr "Jina:" + +#, fuzzy +msgid "_Status:" +msgstr "Hali:" + +#. Different status message expander +msgid "Use a _different status for some accounts" +msgstr "" + +#. Save & Use button +msgid "Sa_ve & Use" +msgstr "" + +#, c-format +msgid "Status for %s" +msgstr "" + +#. +#. * TODO: We should enable/disable the add button based on +#. * whether the user has entered all required data. That +#. * would eliminate the need for this check and provide a +#. * better user experience. +#. +#, fuzzy +msgid "Custom Smiley" +msgstr "Kipimo cha kaida..." + +msgid "More Data needed" +msgstr "" + +msgid "Please provide a shortcut to associate with the smiley." +msgstr "" + +#, c-format +msgid "" +"A custom smiley for '%s' already exists. Please use a different shortcut." +msgstr "" + +#, fuzzy +msgid "Duplicate Shortcut" +msgstr "sifa rudufu" + +msgid "Please select an image for the smiley." +msgstr "" + +msgid "Edit Smiley" +msgstr "" + +msgid "Add Smiley" +msgstr "" + +#, fuzzy +msgid "_Image:" +msgstr "Taswira" + +#. Shortcut text +msgid "S_hortcut text:" +msgstr "" + +msgid "Smiley" +msgstr "" + +msgid "Shortcut Text" +msgstr "" + +msgid "Custom Smiley Manager" +msgstr "" + +#, fuzzy +msgid "Select Buddy Icon" +msgstr "&Uchanguzi" + +msgid "Click to change your buddyicon for this account." +msgstr "" + +msgid "Click to change your buddyicon for all accounts." +msgstr "" + +msgid "Waiting for network connection" +msgstr "" + +msgid "New status..." +msgstr "" + +msgid "Saved statuses..." +msgstr "" + +msgid "Status Selector" +msgstr "" + +msgid "Google Talk" +msgstr "" + +#, c-format +msgid "The following error has occurred loading %s: %s" +msgstr "" + +#, fuzzy +msgid "Failed to load image" +msgstr "Imeshindwa Kuingia" + +#, c-format +msgid "Cannot send folder %s." +msgstr "" + +#, c-format +msgid "" +"%s cannot transfer a folder. You will need to send the files within " +"individually." +msgstr "" + +msgid "You have dragged an image" +msgstr "" + +msgid "" +"You can send this image as a file transfer, embed it into this message, or " +"use it as the buddy icon for this user." +msgstr "" + +msgid "Set as buddy icon" +msgstr "" + +msgid "Send image file" +msgstr "" + +#, fuzzy +msgid "Insert in message" +msgstr "Funga ujumbe huu" + +msgid "Would you like to set it as the buddy icon for this user?" +msgstr "" + +msgid "" +"You can send this image as a file transfer, or use it as the buddy icon for " +"this user." +msgstr "" + +msgid "" +"You can insert this image into this message, or use it as the buddy icon for " +"this user" +msgstr "" + +#. I don't know if we really want to do anything here. Most of the desktop item types are crap like +#. * "MIME Type" (I have no clue how that would be a desktop item) and "Comment"... nothing we can really +#. * send. The only logical one is "Application," but do we really want to send a binary and nothing else? +#. * Probably not. I'll just give an error and return. +#. The original patch sent the icon used by the launcher. That's probably wrong +msgid "Cannot send launcher" +msgstr "" + +msgid "" +"You dragged a desktop launcher. Most likely you wanted to send whatever this " +"launcher points to instead of this launcher itself." +msgstr "" + +#, c-format +msgid "" +"<b>File:</b> %s\n" +"<b>File size:</b> %s\n" +"<b>Image size:</b> %dx%d" +msgstr "" + +#, c-format +msgid "The file '%s' is too large for %s. Please try a smaller image.\n" +msgstr "" + +#, fuzzy +msgid "Icon Error" +msgstr "Hitilafu isiyojulikana" + +msgid "Could not set icon" +msgstr "" + +#, c-format +msgid "Failed to open file '%s': %s" +msgstr "" + +#, c-format +msgid "" +"Failed to load image '%s': reason not known, probably a corrupt image file" +msgstr "" + +#, fuzzy +msgid "_Open Link" +msgstr "Fungua katika:" + +#, fuzzy +msgid "_Copy Link Location" +msgstr "&Nakili Mahali pa Kiungo" + +#, fuzzy +msgid "_Copy Email Address" +msgstr "Nakili Anwani ya Barua-p&epe" + +#, fuzzy +msgid "Save File" +msgstr "&Hifadhi faili" + +#, fuzzy +msgid "Select color" +msgstr "Chagua &Yote" + +msgid "_Alias" +msgstr "" + +#, fuzzy +msgid "Close _tabs" +msgstr "Funga tabo" + +msgid "_Get Info" +msgstr "" + +msgid "_Invite" +msgstr "" + +#, fuzzy +msgid "_Modify..." +msgstr "R&ekebisha" + +msgid "_Add..." +msgstr "" + +#, fuzzy +msgid "_Open Mail" +msgstr "Fungua tabo" + +#, fuzzy +msgid "_Edit" +msgstr "&Hariri" + +msgid "Pidgin Tooltip" +msgstr "" + +msgid "Pidgin smileys" +msgstr "" + +msgid "Penguin Pimps" +msgstr "" + +msgid "Selecting this disables graphical emoticons." +msgstr "" + +#, fuzzy +msgid "none" +msgstr "Bila" + +#, fuzzy +msgid "Small" +msgstr "Kisomali" + +msgid "Smaller versions of the default smilies" +msgstr "" + +msgid "Response Probability:" +msgstr "" + +msgid "Statistics Configuration" +msgstr "" + +#. msg_difference spinner +msgid "Maximum response timeout:" +msgstr "" + +msgid "minutes" +msgstr "" + +#. last_seen spinner +msgid "Maximum last-seen difference:" +msgstr "" + +#. threshold spinner +msgid "Threshold:" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Contact Availability Prediction" +msgstr "" + +#. *< name +#. *< version +msgid "Contact Availability Prediction plugin." +msgstr "" + +#. * summary +msgid "Displays statistical information about your buddies' availability" +msgstr "" + +msgid "Buddy is idle" +msgstr "" + +msgid "Buddy is away" +msgstr "" + +msgid "Buddy is \"extended\" away" +msgstr "" + +#. Not used yet. +msgid "Buddy is mobile" +msgstr "" + +msgid "Buddy is offline" +msgstr "" + +msgid "Point values to use when..." +msgstr "" + +msgid "" +"The buddy with the <i>largest score</i> is the buddy who will have priority " +"in the contact.\n" +msgstr "" + +msgid "Use last buddy when scores are equal" +msgstr "" + +msgid "Point values to use for account..." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Contact Priority" +msgstr "" + +#. *< name +#. *< version +#. *< summary +msgid "" +"Allows for controlling the values associated with different buddy states." +msgstr "" + +#. *< description +msgid "" +"Allows for changing the point values of idle/away/offline states for buddies " +"in contact priority computations." +msgstr "" + +msgid "Conversation Colors" +msgstr "" + +msgid "Customize colors in the conversation window" +msgstr "" + +#, fuzzy +msgid "Error Messages" +msgstr "Ufafanuzi wa Hitilafu" + +msgid "Highlighted Messages" +msgstr "" + +#, fuzzy +msgid "System Messages" +msgstr "Misingi ya mfumo" + +#, fuzzy +msgid "Sent Messages" +msgstr "Jumbe za tahadhari" + +msgid "Received Messages" +msgstr "" + +#, c-format +msgid "Select Color for %s" +msgstr "" + +msgid "Ignore incoming format" +msgstr "" + +msgid "Apply in Chats" +msgstr "" + +msgid "Apply in IMs" +msgstr "" + +msgid "By conversation count" +msgstr "" + +msgid "Conversation Placement" +msgstr "" + +#. Translators: "New conversations" should match the text in the preferences dialog and "By conversation count" should be the same text used above +msgid "" +"Note: The preference for \"New conversations\" must be set to \"By " +"conversation count\"." +msgstr "" + +msgid "Number of conversations per window" +msgstr "" + +msgid "Separate IM and Chat windows when placing by number" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "ExtPlacement" +msgstr "" + +#. *< name +#. *< version +msgid "Extra conversation placement options." +msgstr "" + +#. *< summary +#. * description +msgid "" +"Restrict the number of conversations per windows, optionally separating IMs " +"and Chats" +msgstr "" + +#. Configuration frame +msgid "Mouse Gestures Configuration" +msgstr "" + +msgid "Middle mouse button" +msgstr "" + +msgid "Right mouse button" +msgstr "" + +#. "Visual gesture display" checkbox +msgid "_Visual gesture display" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Mouse Gestures" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Provides support for mouse gestures" +msgstr "" + +#. * description +msgid "" +"Allows support for mouse gestures in conversation windows. Drag the middle " +"mouse button to perform certain actions:\n" +" • Drag down and then to the right to close a conversation.\n" +" • Drag up and then to the left to switch to the previous conversation.\n" +" • Drag up and then to the right to switch to the next conversation." +msgstr "" + +msgid "Instant Messaging" +msgstr "" + +#. Add the label. +msgid "Select a person from your address book below, or add a new person." +msgstr "" + +#, fuzzy +msgid "Group:" +msgstr "Kusanya kwa:" + +#. "New Person" button +#, fuzzy +msgid "New Person" +msgstr "Toleo Jipya" + +#. "Select Buddy" button +msgid "Select Buddy" +msgstr "" + +#. Add the label. +msgid "" +"Select a person from your address book to add this buddy to, or create a new " +"person." +msgstr "" + +#. Add the expander +#, fuzzy +msgid "User _details" +msgstr "Onyesha &ufafanuzi" + +#. "Associate Buddy" button +msgid "_Associate Buddy" +msgstr "" + +#, fuzzy +msgid "Unable to send email" +msgstr "Haiwezi kufuta moduli" + +msgid "The evolution executable was not found in the PATH." +msgstr "" + +msgid "An email address was not found for this buddy." +msgstr "" + +msgid "Add to Address Book" +msgstr "" + +msgid "Send Email" +msgstr "" + +#. Configuration frame +msgid "Evolution Integration Configuration" +msgstr "" + +#. Label +msgid "Select all accounts that buddies should be auto-added to." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Evolution Integration" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Provides integration with Evolution." +msgstr "" + +msgid "Please enter the person's information below." +msgstr "" + +msgid "Please enter the buddy's username and account type below." +msgstr "" + +msgid "Account type:" +msgstr "" + +#. Optional Information section +#, fuzzy +msgid "Optional information:" +msgstr "Taarifa zaidi" + +#, fuzzy +msgid "First name:" +msgstr "Ukurasa wa kwanza" + +#, fuzzy +msgid "Last name:" +msgstr "Ukurasa wa mwisho" + +#, fuzzy +msgid "Email:" +msgstr "Barua pepe" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "GTK Signals Test" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Test to see that all ui signals are working properly." +msgstr "" + +#, c-format +msgid "" +"\n" +"<b>Buddy Note</b>: %s" +msgstr "" + +msgid "History" +msgstr "Historia" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Iconify on Away" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Iconifies the buddy list and your conversations when you go away." +msgstr "" + +msgid "Mail Checker" +msgstr "" + +msgid "Checks for new local mail." +msgstr "" + +msgid "Adds a small box to the buddy list that shows if you have new mail." +msgstr "" + +msgid "Markerline" +msgstr "" + +msgid "Draw a line to indicate new messages in a conversation." +msgstr "" + +msgid "Jump to markerline" +msgstr "" + +msgid "Draw Markerline in " +msgstr "" + +#, fuzzy +msgid "_IM windows" +msgstr "Dirisha jipya" + +msgid "C_hat windows" +msgstr "" + +msgid "" +"A music messaging session has been requested. Please click the MM icon to " +"accept." +msgstr "" + +msgid "Music messaging session confirmed." +msgstr "" + +msgid "Music Messaging" +msgstr "" + +msgid "There was a conflict in running the command:" +msgstr "" + +#, fuzzy +msgid "Error Running Editor" +msgstr "Hitilafu katika Kutuma Taarifa" + +msgid "The following error has occurred:" +msgstr "" + +#. Configuration frame +msgid "Music Messaging Configuration" +msgstr "" + +msgid "Score Editor Path" +msgstr "" + +msgid "_Apply" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +msgid "Music Messaging Plugin for collaborative composition." +msgstr "" + +#. * summary +msgid "" +"The Music Messaging Plugin allows a number of users to simultaneously work " +"on a piece of music by editting a common score in real-time." +msgstr "" + +#. ---------- "Notify For" ---------- +msgid "Notify For" +msgstr "" + +msgid "\t_Only when someone says your username" +msgstr "" + +msgid "_Focused windows" +msgstr "" + +#. ---------- "Notification Methods" ---------- +msgid "Notification Methods" +msgstr "" + +msgid "Prepend _string into window title:" +msgstr "" + +#. Count method button +msgid "Insert c_ount of new messages into window title" +msgstr "" + +#. Count xprop method button +msgid "Insert count of new message into _X property" +msgstr "" + +#. Urgent method button +msgid "Set window manager \"_URGENT\" hint" +msgstr "" + +#, fuzzy +msgid "_Flash window" +msgstr "Dirisha sawa" + +#. Raise window method button +msgid "R_aise conversation window" +msgstr "" + +#. Present conversation method button +msgid "_Present conversation window" +msgstr "" + +#. ---------- "Notification Removals" ---------- +msgid "Notification Removal" +msgstr "" + +#. Remove on focus button +msgid "Remove when conversation window _gains focus" +msgstr "" + +#. Remove on click button +msgid "Remove when conversation window _receives click" +msgstr "" + +#. Remove on type button +msgid "Remove when _typing in conversation window" +msgstr "" + +#. Remove on message send button +msgid "Remove when a _message gets sent" +msgstr "" + +#. Remove on conversation switch button +msgid "Remove on switch to conversation ta_b" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#, fuzzy +msgid "Message Notification" +msgstr "Arifisho la Jumla" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Provides a variety of ways of notifying you of unread messages." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Pidgin Demonstration Plugin" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "An example plugin that does stuff - see the description." +msgstr "" + +#. * description +msgid "" +"This is a really cool plugin that does a lot of stuff:\n" +"- It tells you who wrote the program when you log in\n" +"- It reverses all incoming text\n" +"- It sends a message to people on your list immediately when they sign on" +msgstr "" + +msgid "Cursor Color" +msgstr "" + +msgid "Secondary Cursor Color" +msgstr "" + +msgid "Hyperlink Color" +msgstr "" + +msgid "Visited Hyperlink Color" +msgstr "" + +msgid "Highlighted Message Name Color" +msgstr "" + +msgid "GtkTreeView Horizontal Separation" +msgstr "" + +msgid "Conversation Entry" +msgstr "" + +msgid "Request Dialog" +msgstr "" + +msgid "Notify Dialog" +msgstr "" + +#, fuzzy +msgid "Select Color" +msgstr "Chagua &Yote" + +#, c-format +msgid "Select Interface Font" +msgstr "" + +#, c-format +msgid "Select Font for %s" +msgstr "" + +msgid "GTK+ Interface Font" +msgstr "" + +msgid "GTK+ Text Shortcut Theme" +msgstr "" + +#. +#. for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) { +#. hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); +#. gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); +#. +#. check = pidgin_prefs_checkbox(_(widget_bool_names[i]), +#. widget_bool_prefs_set[i], hbox); +#. gtk_size_group_add_widget(labelsg, check); +#. +#. widget_bool_widgets[i] = pidgin_prefs_checkbox("", widget_bool_prefs[i], hbox); +#. * +#. gtk_size_group_add_widget(widgetsb, widget_bool_widgets[i]); +#. * +#. gtk_widget_set_sensitive(widget_bool_widgets[i], +#. purple_prefs_get_bool(widget_bool_prefs_set[i])); +#. g_signal_connect(G_OBJECT(check), "toggled", +#. G_CALLBACK(pidgin_toggle_sensitive), +#. widget_bool_widgets[i]); +#. } +#. +msgid "Interface colors" +msgstr "" + +msgid "Widget Sizes" +msgstr "" + +msgid "Fonts" +msgstr "Fonti" + +msgid "Gtkrc File Tools" +msgstr "" + +#, c-format +msgid "Write settings to %s%sgtkrc-2.0" +msgstr "" + +msgid "Re-read gtkrc files" +msgstr "" + +msgid "Pidgin GTK+ Theme Control" +msgstr "" + +msgid "Provides access to commonly used gtkrc settings." +msgstr "" + +msgid "Raw" +msgstr "" + +msgid "Lets you send raw input to text-based protocols." +msgstr "" + +msgid "" +"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit " +"'Enter' in the entry box to send. Watch the debug window." +msgstr "" + +#, c-format +msgid "You can upgrade to %s %s today." +msgstr "" + +msgid "New Version Available" +msgstr "Toleo Jipya Linapatikana" + +msgid "Later" +msgstr "Baadae" + +#, fuzzy +msgid "Download Now" +msgstr "Hitilafu ya upakuzi" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#, fuzzy +msgid "Release Notification" +msgstr "Arifisho la Jumla" + +#. *< name +#. *< version +#. * summary +msgid "Checks periodically for new releases." +msgstr "" + +#. * description +msgid "" +"Checks periodically for new releases and notifies the user with the " +"ChangeLog." +msgstr "" + +#. *< major version +#. *< minor version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#, fuzzy +msgid "Send Button" +msgstr "Tuma kwa:" + +#. *< name +#. *< version +msgid "Conversation Window Send Button." +msgstr "" + +#. *< summary +msgid "" +"Adds a Send button to the entry area of the conversation window. Intended " +"for when no physical keyboard is present." +msgstr "" + +msgid "Duplicate Correction" +msgstr "" + +msgid "The specified word already exists in the correction list." +msgstr "" + +msgid "Text Replacements" +msgstr "" + +#, fuzzy +msgid "You type" +msgstr "Aina ya uunganishi" + +msgid "You send" +msgstr "" + +msgid "Whole words only" +msgstr "" + +#, fuzzy +msgid "Case sensitive" +msgstr "(Nyepesi huhisi herufi kubwa au ndogo)" + +msgid "Add a new text replacement" +msgstr "" + +msgid "You _type:" +msgstr "" + +msgid "You _send:" +msgstr "" + +#. Created here so it can be passed to whole_words_button_toggled. +msgid "_Exact case match (uncheck for automatic case handling)" +msgstr "" + +msgid "Only replace _whole words" +msgstr "" + +msgid "General Text Replacement Options" +msgstr "" + +msgid "Enable replacement of last word on send" +msgstr "" + +msgid "Text replacement" +msgstr "" + +msgid "Replaces text in outgoing messages according to user-defined rules." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Buddy Ticker" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "A horizontal scrolling version of the buddy list." +msgstr "" + +msgid "Display Timestamps Every" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#, fuzzy +msgid "Timestamp" +msgstr "Uchapaji wa Muda" + +#. *< name +#. *< version +#. * summary +msgid "Display iChat-style timestamps" +msgstr "" + +#. * description +msgid "Display iChat-style timestamps every N minutes." +msgstr "" + +msgid "Timestamp Format Options" +msgstr "" + +#, c-format +msgid "_Force 24-hour time format" +msgstr "" + +msgid "Show dates in..." +msgstr "" + +msgid "Co_nversations:" +msgstr "" + +msgid "For delayed messages" +msgstr "" + +msgid "For delayed messages and in chats" +msgstr "" + +msgid "_Message Logs:" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Message Timestamp Formats" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Customizes the message timestamp formats." +msgstr "" + +#. * description +msgid "" +"This plugin allows the user to customize conversation and logging message " +"timestamp formats." +msgstr "" + +msgid "Opacity:" +msgstr "" + +#. IM Convo trans options +msgid "IM Conversation Windows" +msgstr "" + +msgid "_IM window transparency" +msgstr "" + +msgid "_Show slider bar in IM window" +msgstr "" + +msgid "Remove IM window transparency on focus" +msgstr "" + +#, fuzzy +msgid "Always on top" +msgstr "&Juu Daima" + +#. Buddy List trans options +msgid "Buddy List Window" +msgstr "" + +msgid "_Buddy List window transparency" +msgstr "" + +msgid "Remove Buddy List window transparency on focus" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Transparency" +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Variable Transparency for the buddy list and conversations." +msgstr "" + +#. * description +msgid "" +"This plugin enables variable alpha transparency on conversation windows and " +"the buddy list.\n" +"\n" +"* Note: This plugin requires Win2000 or greater." +msgstr "" + +msgid "GTK+ Runtime Version" +msgstr "" + +#. Autostart +msgid "Startup" +msgstr "Kila unapoanzisha" + +#, c-format +msgid "_Start %s on Windows startup" +msgstr "" + +msgid "_Dockable Buddy List" +msgstr "" + +#. Blist On Top +msgid "_Keep Buddy List window on top:" +msgstr "" + +#. XXX: Did this ever work? +msgid "Only when docked" +msgstr "" + +msgid "Windows Pidgin Options" +msgstr "" + +msgid "Options specific to Pidgin for Windows." +msgstr "" + +msgid "" +"Provides options specific to Pidgin for Windows , such as buddy list docking." +msgstr "" + +msgid "<font color='#777777'>Logged out.</font>" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#, fuzzy +msgid "XMPP Console" +msgstr "Kiweko cha Hitilafu" + +msgid "Account: " +msgstr "" + +msgid "<font color='#777777'>Not connected to XMPP</font>" +msgstr "" + +msgid "Insert an <iq/> stanza." +msgstr "" + +msgid "Insert a <presence/> stanza." +msgstr "" + +msgid "Insert a <message/> stanza." +msgstr "" + +#. *< name +#. *< version +#. * summary +msgid "Send and receive raw XMPP stanzas." +msgstr "" + +#. * description +msgid "This plugin is useful for debbuging XMPP servers or clients." +msgstr ""
--- a/share/ca-certs/Makefile.am Fri May 22 00:38:45 2009 +0000 +++ b/share/ca-certs/Makefile.am Tue Jun 09 23:30:18 2009 +0000 @@ -4,6 +4,7 @@ CAcert_Class3.pem \ Equifax_Secure_CA.pem \ GTE_CyberTrust_Global_Root.pem \ + StartCom_Certification_Authority.pem \ StartCom_Free_SSL_CA.pem \ Verisign_RSA_Secure_Server_CA.pem \ Verisign_Class3_Primary_CA.pem \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/ca-certs/StartCom_Certification_Authority.pem Tue Jun 09 23:30:18 2009 +0000 @@ -0,0 +1,44 @@ +-----BEGIN CERTIFICATE----- +MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW +MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg +Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9 +MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi +U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh +cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk +pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf +OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C +Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT +Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi +HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM +Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w ++2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ +Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 +Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B +26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID +AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE +FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j +ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js +LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM +BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0 +Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy +dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh +cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh +YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg +dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp +bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ +YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT +TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ +9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8 +jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW +FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz +ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1 +ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L +EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu +L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq +yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC +O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V +um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh +NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14= +-----END CERTIFICATE-----