# HG changeset patch # User Marcus Lundblad # Date 1244485711 0 # Node ID 42c64c41cf879179f82f47430b876e194980ce7f # Parent 33b81994d74c2a2fc980101abc49cb1b4b496e9a# Parent f5222e5ae4686ecbfc74ec3e24db644127abe135 propagate from branch 'im.pidgin.pidgin' (head 46523386d682c917679b3de662d51a5bda0da46b) to branch 'im.pidgin.cpw.attention_ui' (head 39d8ac60b05e7766f90db850144c9e963076cec9) diff -r 33b81994d74c -r 42c64c41cf87 COPYRIGHT --- a/COPYRIGHT Mon May 25 19:27:33 2009 +0000 +++ b/COPYRIGHT Mon Jun 08 18:28:31 2009 +0000 @@ -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 diff -r 33b81994d74c -r 42c64c41cf87 ChangeLog --- a/ChangeLog Mon May 25 19:27:33 2009 +0000 +++ b/ChangeLog Mon Jun 08 18:28:31 2009 +0000 @@ -18,10 +18,17 @@ 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" @@ -39,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 @@ -48,11 +57,14 @@ 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 +). (Sulabh Mahajan) * Addition of MSN buddies to Yahoo accounts by adding them as @@ -82,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. diff -r 33b81994d74c -r 42c64c41cf87 ChangeLog.API --- a/ChangeLog.API Mon May 25 19:27:33 2009 +0000 +++ b/ChangeLog.API Mon Jun 08 18:28:31 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 diff -r 33b81994d74c -r 42c64c41cf87 configure.ac --- a/configure.ac Mon May 25 19:27:33 2009 +0000 +++ b/configure.ac Mon Jun 08 18:28:31 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 diff -r 33b81994d74c -r 42c64c41cf87 finch/finch.c --- a/finch/finch.c Mon May 25 19:27:33 2009 +0000 +++ b/finch/finch.c Mon Jun 08 18:28:31 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; diff -r 33b81994d74c -r 42c64c41cf87 finch/gntblist.c --- a/finch/gntblist.c Mon May 25 19:27:33 2009 +0000 +++ b/finch/gntblist.c Mon Jun 08 18:28:31 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))); diff -r 33b81994d74c -r 42c64c41cf87 finch/gntnotify.c --- a/finch/gntnotify.c Mon May 25 19:27:33 2009 +0000 +++ b/finch/gntnotify.c Mon Jun 08 18:28:31 2009 +0000 @@ -208,6 +208,9 @@ void *ret; static int key = 0; + if (count == 0) + return NULL; + if (!detailed) { g_string_append_printf(message, diff -r 33b81994d74c -r 42c64c41cf87 libpurple/blist.c --- a/libpurple/blist.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/blist.c Mon Jun 08 18:28:31 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; diff -r 33b81994d74c -r 42c64c41cf87 libpurple/conversation.c --- a/libpurple/conversation.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/conversation.c Mon Jun 08 18:28:31 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; @@ -1060,6 +1059,8 @@ "buddy-typing-stopped", im->conv->account, im->conv->name); break; } + + purple_conv_im_update_typing(im); } } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/core.h --- a/libpurple/core.h Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/core.h Mon Jun 08 18:28:31 2009 +0000 @@ -186,6 +186,10 @@ * *
dev_website
*
the UI's development/support website, such as http://developer.pidgin.im.
+ * + *
client_type
+ *
the type of UI (pc, console, phone, handheld, web, bot)
+ * * * * @return A GHashTable with strings for keys and values. This diff -r 33b81994d74c -r 42c64c41cf87 libpurple/media.c --- a/libpurple/media.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/media.c Mon Jun 08 18:28:31 2009 +0000 @@ -43,6 +43,7 @@ #ifdef USE_VV #include +#include /** @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 diff -r 33b81994d74c -r 42c64c41cf87 libpurple/plugins/psychic.c --- a/libpurple/plugins/psychic.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/plugins/psychic.c Mon Jun 08 18:28:31 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); } } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/plugins/signals-test.c --- a/libpurple/plugins/signals-test.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/plugins/signals-test.c Mon Jun 08 18:28:31 2009 +0000 @@ -661,6 +661,32 @@ 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 **************************************************************************/ @@ -830,6 +856,16 @@ 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; @@ -838,8 +874,19 @@ 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; } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/gg/buddylist.c --- a/libpurple/protocols/gg/buddylist.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/gg/buddylist.c Mon Jun 08 18:28:31 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"); diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/gg/buddylist.h --- a/libpurple/protocols/gg/buddylist.h Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/gg/buddylist.h Mon Jun 08 18:28:31 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. diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/gg/gg.c --- a/libpurple/protocols/gg/gg.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/gg/gg.c Mon Jun 08 18:28:31 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; diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/irc/cmds.c --- a/libpurple/protocols/irc/cmds.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/irc/cmds.c Mon Jun 08 18:28:31 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); } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/irc/irc.c --- a/libpurple/protocols/irc/irc.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/irc/irc.c Mon Jun 08 18:28:31 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; } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/irc/msgs.c --- a/libpurple/protocols/irc/msgs.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/irc/msgs.c Mon Jun 08 18:28:31 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); diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/auth.c --- a/libpurple/protocols/jabber/auth.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/auth.c Mon Jun 08 18:28:31 2009 +0000 @@ -989,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); } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/buddy.c --- a/libpurple/protocols/jabber/buddy.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/buddy.c Mon Jun 08 18:28:31 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; } @@ -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; +} diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/buddy.h --- a/libpurple/protocols/jabber/buddy.h Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/buddy.h Mon Jun 08 18:28:31 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_ */ diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/disco.c --- a/libpurple/protocols/jabber/disco.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/disco.c Mon Jun 08 18:28:31 2009 +0000 @@ -1,5 +1,5 @@ /* - * purple - Jabber Protocol Plugin + * purple - Jabber Service Discovery * * Copyright (C) 2003, Nathan Walp * @@ -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 to the ) 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 */ + 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); } + diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/disco.h --- a/libpurple/protocols/jabber/disco.h Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/disco.h Mon Jun 08 18:28:31 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, diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/google.c --- a/libpurple/protocols/jabber/google.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/google.c Mon Jun 08 18:28:31 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; @@ -55,6 +58,7 @@ PurpleMedia *media; JabberStream *js; char *remote_jid; + gboolean video; } GoogleSession; static gboolean @@ -104,9 +108,13 @@ 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,10 +434,10 @@ 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; @@ -390,6 +446,19 @@ 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,8 +547,6 @@ 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); @@ -454,19 +557,22 @@ 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)) { + 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); @@ -667,6 +819,8 @@ purple_notify_emails(js->gc, count, FALSE, NULL, NULL, default_tos, NULL, NULL, NULL); g_free(bare_jid); + } else { + purple_notify_emails(js->gc, count, FALSE, NULL, NULL, NULL, NULL, NULL, NULL); } return; diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/google.h --- a/libpurple/protocols/jabber/google.h Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/google.h Mon Jun 08 18:28:31 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); diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/iq.c --- a/libpurple/protocols/jabber/iq.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/iq.c Mon Jun 08 18:28:31 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); } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/jabber.c --- a/libpurple/protocols/jabber/jabber.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/jabber.c Mon Jun 08 18:28:31 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" @@ -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); @@ -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(jabber_plugin, "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); @@ -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); @@ -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 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); } @@ -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; } @@ -2876,7 +2960,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(); @@ -3116,8 +3200,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; } @@ -3328,9 +3416,26 @@ void jabber_init_plugin(PurplePlugin *plugin) { + 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; - jabber_add_identity("client", "pc", NULL, PACKAGE); + 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); @@ -3382,6 +3487,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 diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/jabber.h --- a/libpurple/protocols/jabber/jabber.h Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/jabber.h Mon Jun 08 18:28:31 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 #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,7 +245,7 @@ char *certificate_CN; /* A purple timeout tag for the keepalive */ - int keepalive_timeout; + guint keepalive_timeout; PurpleSrvResponse *srv_rec; guint 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); @@ -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); diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/jutil.c --- a/libpurple/protocols/jabber/jutil.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/jutil.c Mon Jun 08 18:28:31 2009 +0000 @@ -260,9 +260,10 @@ if (!jid) return FALSE; - equal = (g_str_equal(jid->node, js->user->node) && + equal = (purple_strequal(jid->node, js->user->node) && g_str_equal(jid->domain, js->user->domain) && - jid->resource == NULL); + (jid->resource == NULL || + g_str_equal(jid->resource, js->user->resource))); jabber_id_free(jid); return equal; } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/libxmpp.c --- a/libpurple/protocols/jabber/libxmpp.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/libxmpp.c Mon Jun 08 18:28:31 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" @@ -117,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 */ @@ -135,6 +137,14 @@ 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), @@ -168,6 +178,7 @@ 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, NULL, 2, diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/message.c --- a/libpurple/protocols/jabber/message.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/message.c Mon Jun 08 18:28:31 2009 +0000 @@ -1200,7 +1200,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); @@ -1241,7 +1243,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); diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/parser.c --- a/libpurple/protocols/jabber/parser.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/parser.c Mon Jun 08 18:28:31 2009 +0000 @@ -207,12 +207,6 @@ jabber_parser_free(js); } -void -jabber_parser_close_stream(JabberStream *js) -{ - xmlParseChunk(js->context, "", 16 /* length */, 0); -} - void jabber_parser_free(JabberStream *js) { if (js->context) { xmlParseChunk(js->context, NULL,0,1); diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/parser.h --- a/libpurple/protocols/jabber/parser.h Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/parser.h Mon Jun 08 18:28:31 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); diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/ping.c --- a/libpurple/protocols/jabber/ping.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/ping.c Mon Jun 08 18:28:31 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 diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/presence.c --- a/libpurple/protocols/jabber/presence.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/presence.c Mon Jun 08 18:28:31 2009 +0000 @@ -245,6 +245,7 @@ { xmlnode *show, *status, *presence, *pri, *c; const char *show_string = NULL; + gboolean audio_enabled, video_enabled; presence = xmlnode_new("presence"); @@ -300,9 +301,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; diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/jabber/roster.c --- a/libpurple/protocols/jabber/roster.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/jabber/roster.c Mon Jun 08 18:28:31 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); } } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/msn/msn.c --- a/libpurple/protocols/msn/msn.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/msn/msn.c Mon Jun 08 18:28:31 2009 +0000 @@ -1283,7 +1283,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); } @@ -1382,56 +1382,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) @@ -1449,23 +1429,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. */ @@ -1478,13 +1446,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("", 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); } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/msn/notification.c --- a/libpurple/protocols/msn/notification.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/msn/notification.c Mon Jun 08 18:28:31 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); } @@ -926,8 +948,13 @@ 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); diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/msn/notification.h --- a/libpurple/protocols/msn/notification.h Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/msn/notification.h Mon Jun 08 18:28:31 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); diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/msn/session.c --- a/libpurple/protocols/msn/session.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/msn/session.c Mon Jun 08 18:28:31 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); } } } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/msn/state.c --- a/libpurple/protocols/msn/state.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/msn/state.c Mon Jun 08 18:28:31 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); } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/msn/userlist.c --- a/libpurple/protocols/msn/userlist.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/msn/userlist.c Mon Jun 08 18:28:31 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) { diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/msn/userlist.h --- a/libpurple/protocols/msn/userlist.h Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/msn/userlist.h Mon Jun 08 18:28:31 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); diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/msnp9/session.c --- a/libpurple/protocols/msnp9/session.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/msnp9/session.c Mon Jun 08 18:28:31 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); } } } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/myspace/myspace.c --- a/libpurple/protocols/myspace/myspace.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/myspace/myspace.c Mon Jun 08 18:28:31 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; } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/myspace/myspace.h --- a/libpurple/protocols/myspace/myspace.h Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/myspace/myspace.h Mon Jun 08 18:28:31 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 diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/myspace/zap.c --- a/libpurple/protocols/myspace/zap.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/myspace/zap.c Mon Jun 08 18:28:31 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); diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/oscar/oscar.c --- a/libpurple/protocols/oscar/oscar.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/oscar/oscar.c Mon Jun 08 18:28:31 2009 +0000 @@ -6541,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
", 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)
", text, bname, alias); + else + tmp = g_strdup_printf("%s %s
", text, bname); + g_free(text); + text = tmp; + + num++; } + + buddies = g_slist_delete_link(buddies, buddies); } if (!num) { diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/silc/buddy.c --- a/libpurple/protocols/silc/buddy.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/silc/buddy.c Mon Jun 08 18:28:31 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); } } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/silc/ops.c --- a/libpurple/protocols/silc/ops.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/silc/ops.c Mon Jun 08 18:28:31 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: diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/simple/simple.c --- a/libpurple/protocols/simple/simple.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/simple/simple.c Mon Jun 08 18:28:31 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); } } diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/yahoo/yahoo.c --- a/libpurple/protocols/yahoo/yahoo.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo.c Mon Jun 08 18:28:31 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); @@ -1586,7 +1575,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, @@ -1753,7 +1743,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: @@ -1761,9 +1751,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: @@ -1792,7 +1783,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); } @@ -1828,7 +1822,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); } @@ -3950,8 +3948,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); @@ -4112,8 +4111,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); diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/yahoo/yahoo_aliases.c --- a/libpurple/protocols/yahoo/yahoo_aliases.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_aliases.c Mon Jun 08 18:28:31 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); diff -r 33b81994d74c -r 42c64c41cf87 libpurple/protocols/zephyr/zephyr.c --- a/libpurple/protocols/zephyr/zephyr.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/protocols/zephyr/zephyr.c Mon Jun 08 18:28:31 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;idata; + 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;iproto_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;i0) - 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;i0) + 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); diff -r 33b81994d74c -r 42c64c41cf87 libpurple/proxy.c --- a/libpurple/proxy.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/proxy.c Mon Jun 08 18:28:31 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; diff -r 33b81994d74c -r 42c64c41cf87 libpurple/proxy.h --- a/libpurple/proxy.h Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/proxy.h Mon Jun 08 18:28:31 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 diff -r 33b81994d74c -r 42c64c41cf87 libpurple/server.c --- a/libpurple/server.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/server.c Mon Jun 08 18:28:31 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 { diff -r 33b81994d74c -r 42c64c41cf87 libpurple/theme.c --- a/libpurple/theme.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/theme.c Mon Jun 08 18:28:31 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 diff -r 33b81994d74c -r 42c64c41cf87 libpurple/util.c --- a/libpurple/util.c Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/util.c Mon Jun 08 18:28:31 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(). diff -r 33b81994d74c -r 42c64c41cf87 libpurple/util.h --- a/libpurple/util.h Mon May 25 19:27:33 2009 +0000 +++ b/libpurple/util.h Mon Jun 08 18:28:31 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(). diff -r 33b81994d74c -r 42c64c41cf87 pidgin/gtkblist.c --- a/pidgin/gtkblist.c Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/gtkblist.c Mon Jun 08 18:28:31 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); diff -r 33b81994d74c -r 42c64c41cf87 pidgin/gtkconv.c --- a/pidgin/gtkconv.c Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/gtkconv.c Mon Jun 08 18:28:31 2009 +0000 @@ -5652,38 +5652,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, @@ -5845,7 +5813,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); diff -r 33b81994d74c -r 42c64c41cf87 pidgin/gtkdialogs.c --- a/pidgin/gtkdialogs.c Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/gtkdialogs.c Mon Jun 08 18:28:31 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"}, diff -r 33b81994d74c -r 42c64c41cf87 pidgin/gtkimhtml.c --- a/pidgin/gtkimhtml.c Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/gtkimhtml.c Mon Jun 08 18:28:31 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 { diff -r 33b81994d74c -r 42c64c41cf87 pidgin/gtkmain.c --- a/pidgin/gtkmain.c Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/gtkmain.c Mon Jun 08 18:28:31 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; diff -r 33b81994d74c -r 42c64c41cf87 pidgin/gtknotify.c --- a/pidgin/gtknotify.c Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/gtknotify.c Mon Jun 08 18:28:31 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; diff -r 33b81994d74c -r 42c64c41cf87 pidgin/gtkprefs.c --- a/pidgin/gtkprefs.c Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/gtkprefs.c Mon Jun 08 18:28:31 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); diff -r 33b81994d74c -r 42c64c41cf87 pidgin/gtksmiley.c --- a/pidgin/gtksmiley.c Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/gtksmiley.c Mon Jun 08 18:28:31 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 *****************************************************************************/ diff -r 33b81994d74c -r 42c64c41cf87 pidgin/gtksmiley.h --- a/pidgin/gtksmiley.h Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/gtksmiley.h Mon Jun 08 18:28:31 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 */ diff -r 33b81994d74c -r 42c64c41cf87 pidgin/gtkutils.c --- a/pidgin/gtkutils.c Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/gtkutils.c Mon Jun 08 18:28:31 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 diff -r 33b81994d74c -r 42c64c41cf87 pidgin/pidginstock.c --- a/pidgin/pidginstock.c Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/pidginstock.c Mon Jun 08 18:28:31 2009 +0000 @@ -114,121 +114,122 @@ }; 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 { PIDGIN_STOCK_TOOLBAR_SEND_ATTENTION, "toolbar", "get-attention.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL } }; 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 } }; /***************************************************************************** @@ -288,36 +289,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 * @@ -435,9 +436,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", ""); @@ -457,11 +458,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"); @@ -479,7 +481,6 @@ } } - gtk_widget_destroy(win); g_object_unref(G_OBJECT(icon_factory)); reload_settings(); @@ -494,9 +495,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", ""); @@ -549,8 +550,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"); @@ -593,10 +595,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); @@ -608,7 +610,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)); diff -r 33b81994d74c -r 42c64c41cf87 pidgin/plugins/Makefile.am --- a/pidgin/plugins/Makefile.am Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/plugins/Makefile.am Mon Jun 08 18:28:31 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 diff -r 33b81994d74c -r 42c64c41cf87 pidgin/plugins/convcolors.c --- a/pidgin/plugins/convcolors.c Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/plugins/convcolors.c Mon Jun 08 18:28:31 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 ? "" : "", italic ? "" : "", underline ? "" : "", - t, + rtl ? "" : "", + t, + rtl ? "" : "", bold ? "" : "", italic ? "" : "", underline ? "" : "" diff -r 33b81994d74c -r 42c64c41cf87 pidgin/plugins/disco/Makefile.am --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/plugins/disco/Makefile.am Mon Jun 08 18:28:31 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) diff -r 33b81994d74c -r 42c64c41cf87 pidgin/plugins/disco/gtkdisco.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/plugins/disco/gtkdisco.c Mon Jun 08 18:28:31 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("%s\n%s: %s%s%s", + name = g_markup_escape_text(service->name, -1), + type, + jid = g_markup_escape_text(service->jid, -1), + service->description ? _("\nDescription: ") : "", + 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); +} + diff -r 33b81994d74c -r 42c64c41cf87 pidgin/plugins/disco/gtkdisco.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/plugins/disco/gtkdisco.h Mon Jun 08 18:28:31 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 */ diff -r 33b81994d74c -r 42c64c41cf87 pidgin/plugins/disco/xmppdisco.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/plugins/disco/xmppdisco.c Mon Jun 08 18:28:31 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: + +disco#info: + + + + * 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 ", + 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) diff -r 33b81994d74c -r 42c64c41cf87 pidgin/plugins/disco/xmppdisco.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/plugins/disco/xmppdisco.h Mon Jun 08 18:28:31 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 */ diff -r 33b81994d74c -r 42c64c41cf87 pidgin/plugins/pidginrc.c --- a/pidgin/plugins/pidginrc.c Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/plugins/pidginrc.c Mon Jun 08 18:28:31 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("%s", _("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) diff -r 33b81994d74c -r 42c64c41cf87 pidgin/plugins/themeedit-icon.h --- a/pidgin/plugins/themeedit-icon.h Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/plugins/themeedit-icon.h Mon Jun 08 18:28:31 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 + diff -r 33b81994d74c -r 42c64c41cf87 pidgin/plugins/xmppconsole.c --- a/pidgin/plugins/xmppconsole.c Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/plugins/xmppconsole.c Mon Jun 08 18:28:31 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, "<%s", node_name); + g_string_append_printf(text, + "<" + "%s", + 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, " xmlns='%s'", xmlns); + g_string_append_printf(text, + " xmlns=" + "'%s'", + 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, " %s='%s'", esc, esc2); + g_string_append_printf(text, + " %s=" + "'%s'", + 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, - ">%s", pretty ? "
" : ""); + if (need_end) { + g_string_append_printf(text, + ">%s", + pretty ? "
" : ""); - 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, "</%s>
", node_name); + g_string_append_printf(text, + "</" + "%s" + ">
", + node_name); } else { - g_string_append_printf(text, "/>
"); + g_string_append_printf(text, + "/>
"); } 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("
%s
", 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("", + stanza = g_strdup_printf("", 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, "") - 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("", 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("" + "%s%s%s%s%s%s%s%s%s" + "", + *to ? "to='" : "", + *to ? to : "", + *to ? "'" : "", + g_random_int(), + *type ? "type='" : "", + *type ? type : "", + *type ? "'" : "", - stanza = g_strdup_printf("" - "%s%s%s%s%s%s%s%s%s" - "", - *to ? "to='" : "", - *to ? to : "", - *to ? "'" : "", - g_random_int(), - - *type ? "type='" : "", - *type ? type : "", - *type ? "'" : "", - - *show ? "" : "", - *show ? show : "", - *show ? "" : "", + *show ? "" : "", + *show ? show : "", + *show ? "" : "", - *status ? "" : "", - *status ? status : "", - *status ? "" : "", - - *priority ? "" : "", - *priority ? priority : "", - *priority ? "" : ""); - + *status ? "" : "", + *status ? status : "", + *status ? "" : "", + + *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, "") - 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("" - "%s%s%s%s%s%s%s%s%s" - "", - - *to ? "to='" : "", - *to ? to : "", - *to ? "'" : "", - g_random_int(), - gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_combo)), - - *body ? "" : "", - *body ? body : "", - *body ? "" : "", - - *subject ? "" : "", - *subject ? subject : "", - *subject ? "" : "", - - *thread ? "" : "", - *thread ? thread : "", - *thread ? "" : ""); - + "%s%s%s%s%s%s%s%s%s" + "", + + *to ? "to='" : "", + *to ? to : "", + *to ? "'" : "", + g_random_int(), + gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_combo)), + + *body ? "" : "", + *body ? body : "", + *body ? "" : "", + + *subject ? "" : "", + *subject ? subject : "", + *subject ? "" : "", + + *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, "") - 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), _("Logged out."), 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), _("Not connected to XMPP"), 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, ""); 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), "", + gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), "", _("Insert an 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, ""); 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), "", + gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), "", _("Insert a 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), "", + gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), "", _("Insert a 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 ", /**< author */ - PURPLE_WEBSITE, /**< homepage */ + "Sean Egan ", /**< 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, diff -r 33b81994d74c -r 42c64c41cf87 pidgin/win32/nsis/pidgin-installer.nsi --- a/pidgin/win32/nsis/pidgin-installer.nsi Mon May 25 19:27:33 2009 +0000 +++ b/pidgin/win32/nsis/pidgin-installer.nsi Mon Jun 08 18:28:31 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" diff -r 33b81994d74c -r 42c64c41cf87 po/ChangeLog --- a/po/ChangeLog Mon May 25 19:27:33 2009 +0000 +++ b/po/ChangeLog Mon Jun 08 18:28:31 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) diff -r 33b81994d74c -r 42c64c41cf87 po/ca.po --- a/po/ca.po Mon May 25 19:27:33 2009 +0000 +++ b/po/ca.po Mon Jun 08 18:28:31 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ó \n" "Language-Team: Catalan \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 " diff -r 33b81994d74c -r 42c64c41cf87 po/de.po --- a/po/de.po Mon May 25 19:27:33 2009 +0000 +++ b/po/de.po Mon Jun 08 18:28:31 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 \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 \n" "Language-Team: Deutsch \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:" diff -r 33b81994d74c -r 42c64c41cf87 po/hy.po --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/po/hy.po Mon Jun 08 18:28:31 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 , 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 \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 " " +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.
<" +"class>: receive, send, highlight, action, timestamp
<foreground/" +"background>: black, red, green, blue, white, gray, darkgray, magenta, " +"cyan, default

EXAMPLE:
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 "Conversation with %s on %s:
" +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 [%s] 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 "The logger has no read function" +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 "" +"(%s) %s <AUTO-" +"REPLY>: %s
\n" +msgstr "" + +#, c-format +msgid "" +"(%s) %s <AUTO-" +"REPLY>: %s
\n" +msgstr "" + +msgid "Unable to find log path!" +msgstr "" + +#, c-format +msgid "Could not read file: %s" +msgstr "" + +#, c-format +msgid "(%s) %s : %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 " (ircop)" +msgstr "" + +msgid " (identified)" +msgstr "" + +msgid "Nick" +msgstr "" + +msgid "Currently on" +msgstr "" + +msgid "Idle for" +msgstr "" + +msgid "Online since" +msgstr "" + +msgid "Defining adjective:" +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 : 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. Warning, some servers " +"may disconnect you upon doing this." +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:
%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:
%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 "you are not waiting for authorization" +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 "Joining Qun %u is approved by admin %u for %s" +msgstr "" + +#, c-format +msgid "Removed buddy %u." +msgstr "" + +#, c-format +msgid "New buddy %u joined." +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 "Login time: %d-%d-%d, %d:%d:%d
\n" +msgstr "" + +#, c-format +msgid "Total Online Buddies: %d
\n" +msgstr "" + +#, c-format +msgid "Last Refresh: %d-%d-%d, %d:%d:%d
\n" +msgstr "" + +#, c-format +msgid "Server: %s
\n" +msgstr "" + +#, c-format +msgid "Client Tag: %s
\n" +msgstr "" + +#, c-format +msgid "Connection Mode: %s
\n" +msgstr "" + +#, c-format +msgid "My Internet IP: %s:%d
\n" +msgstr "" + +#, c-format +msgid "Sent: %lu
\n" +msgstr "" + +#, c-format +msgid "Resend: %lu
\n" +msgstr "" + +#, c-format +msgid "Lost: %lu
\n" +msgstr "" + +#, c-format +msgid "Received: %lu
\n" +msgstr "" + +#, c-format +msgid "Received Duplicate: %lu
\n" +msgstr "" + +#, c-format +msgid "Time: %d-%d-%d, %d:%d:%d
\n" +msgstr "" + +#, c-format +msgid "IP: %s
\n" +msgstr "" + +msgid "Login Information" +msgstr "" + +msgid "

Original Author:
\n" +msgstr "" + +msgid "

Code Contributors:
\n" +msgstr "" + +msgid "

Lovely Patch Writers:
\n" +msgstr "" + +msgid "

Acknowledgement:
\n" +msgstr "" + +msgid "

Scrupulous Testers:
\n" +msgstr "" + +msgid "and more, please let me know... thank you!))" +msgstr "" + +msgid "

And, all the boys in the backroom...
\n" +msgstr "" + +msgid "Feel free to join us! :)" +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 "Group Title: %s
" +msgstr "" + +#, c-format +msgid "Notes Group ID: %s
" +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)
" +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 "Channel Name: %s" +msgstr "" + +#, c-format +msgid "
User Count: %d" +msgstr "" + +#, c-format +msgid "
Channel Founder: %s" +msgstr "" + +#, c-format +msgid "
Channel Cipher: %s" +msgstr "" + +#. Definition of HMAC: http://en.wikipedia.org/wiki/HMAC +#, c-format +msgid "
Channel HMAC: %s" +msgstr "" + +#, c-format +msgid "
Channel Topic:
%s" +msgstr "" + +#, c-format +msgid "
Channel Modes: " +msgstr "" + +#, c-format +msgid "
Founder Key Fingerprint:
%s" +msgstr "" + +#, c-format +msgid "
Founder Key Babbleprint:
%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 %s to: %s" +msgstr "" + +#, c-format +msgid "%s set channel %s modes to: %s" +msgstr "" + +#, c-format +msgid "%s removed all channel %s modes" +msgstr "" + +#, c-format +msgid "%s set %s's modes to: %s" +msgstr "" + +#, c-format +msgid "%s removed all %s's modes" +msgstr "" + +#, c-format +msgid "You have been kicked off %s by %s (%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 %s" +msgstr "" + +#, c-format +msgid "Channel founder on %s is %s" +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 %s 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 "
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,instance,*>" +msgstr "" + +msgid "" +"zci <class> <instance>: Send a message to <class," +"instance,*>" +msgstr "" + +msgid "" +"zcir <class> <instance> <recipient>: Send a message to <" +"class,instance,recipient>" +msgstr "" + +msgid "" +"zir <instance> <recipient>: Send a message to <MESSAGE," +"instance,recipient>" +msgstr "" + +msgid "zc <class>: Send a message to <class,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 "" +"Welcome to %s!\n" +"\n" +"You have no IM accounts configured. To start connecting with %s press the " +"Add... button below and configure your first account. If you want %s " +"to connect to multiple IM accounts, press Add... again to configure " +"them all.\n" +"\n" +"You can come back to this window to add, edit, or remove accounts from " +"Accounts->Manage Accounts 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 "Account: %s" +msgstr "" + +#, c-format +msgid "" +"\n" +"Occupants: %d" +msgstr "" + +#, c-format +msgid "" +"\n" +"Topic: %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 "Username:" +msgstr "" + +msgid "Password:" +msgstr "" + +msgid "_Login" +msgstr "" + +msgid "/Accounts" +msgstr "" + +#. Translators: Please maintain the use of -> and <- to refer to menu heirarchy +#, c-format +msgid "" +"Welcome to %s!\n" +"\n" +"You have no accounts enabled. Enable your IM accounts from the Accounts window at Accounts->Manage Accounts. 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 "/Accounts/Enable Account" +msgstr "" + +msgid "/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 "

Conversation with %s

\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+.

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." +"

" +msgstr "" + +#, c-format +msgid "" +"FAQ: http://developer.pidgin.im/wiki/FAQ

" +msgstr "" + +#, c-format +msgid "" +"Help via e-mail: support@pidgin.im

" +msgstr "" + +#, c-format +msgid "" +"IRC Channel: #pidgin on irc.freenode.net

" +msgstr "" + +#, c-format +msgid "XMPP MUC: devel@conference.pidgin.im

" +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 "Receiving As:" +msgstr "" + +msgid "Receiving From:" +msgstr "" + +msgid "Sending To:" +msgstr "" + +msgid "Sending As:" +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 "" +"Unrecognized file type\n" +"\n" +"Defaulting to PNG." +msgstr "" + +msgid "" +"Unrecognized file type\n" +"\n" +"Defaulting to PNG." +msgstr "" + +#, c-format +msgid "" +"Error saving image\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 "_Bold" +msgstr "" + +msgid "_Italic" +msgstr "" + +msgid "_Underline" +msgstr "" + +msgid "Strikethrough" +msgstr "" + +msgid "_Larger" +msgstr "" + +msgid "_Normal" +msgstr "" + +msgid "_Smaller" +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 "Conversation in %s on %s" +msgstr "" + +#, c-format +msgid "Conversation with %s on %s" +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 "%d new email." +msgid_plural "%d new emails." +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 "You have mail!" +msgstr "" + +msgid "New Pounces" +msgstr "" + +msgid "Dismiss" +msgstr "" + +msgid "You have pounced!" +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 "" +"Error: %s\n" +"Check the plugin website for an update." +msgstr "" + +msgid "Author" +msgstr "" + +msgid "Written by:" +msgstr "" + +msgid "Web site:" +msgstr "" + +msgid "Filename:" +msgstr "" + +msgid "Configure Pl_ugin" +msgstr "" + +msgid "Plugin Details" +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 "Example: stunserver.org" +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 "Proxy configuration program was not found." +msgstr "" + +msgid "Browser configuration program was not found." +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 "" +"File: %s\n" +"File size: %s\n" +"Image size: %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 largest score 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" +"Buddy Note: %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 "Logged out." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "XMPP Console" +msgstr "" + +msgid "Account: " +msgstr "" + +msgid "Not connected to XMPP" +msgstr "" + +msgid "Insert an stanza." +msgstr "" + +msgid "Insert a stanza." +msgstr "" + +msgid "Insert a 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 "" diff -r 33b81994d74c -r 42c64c41cf87 po/lo.po --- a/po/lo.po Mon May 25 19:27:33 2009 +0000 +++ b/po/lo.po Mon Jun 08 18:28:31 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 , YEAR. # -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +# Anousak Souphavanh , 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 \n" -"Language-Team: LANGUAGE \n" +"Language-Team: Lao \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 "" diff -r 33b81994d74c -r 42c64c41cf87 po/sl.po --- a/po/sl.po Mon May 25 19:27:33 2009 +0000 +++ b/po/sl.po Mon Jun 08 18:28:31 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 \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 \n" "Language-Team: Martin Srebotnjak \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 "

Nori razvijalci obližev:
\n" msgid "

Acknowledgement:
\n" -msgstr "Zahvala:
\n" - -#, fuzzy +msgstr "Zahvale:
\n" + msgid "

Scrupulous Testers:
\n" -msgstr "

Prvotni avtor:
\n" +msgstr "

Tankovestni preizkuševalci:
\n" msgid "and more, please let me know... thank you!))" -msgstr "" +msgstr "in drugi, prosim, javite se ... hvala!))" msgid "

And, all the boys in the backroom...
\n" msgstr "

In vsi fantje iz ozadja ...
\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 "You have mail!" msgstr "Dobili ste pošto!" -#, fuzzy msgid "New Pounces" -msgstr "Novo opozorilo prijatelja" +msgstr "Nova opozorila prijatelja" msgid "Dismiss" -msgstr "" - -#, fuzzy +msgstr "Opusti" + msgid "You have pounced!" -msgstr "Dobili ste pošto!" - -#, fuzzy +msgstr "" +"Dobili ste opozorilo prijatelja!" + 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" diff -r 33b81994d74c -r 42c64c41cf87 po/sw.po --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/po/sw.po Mon Jun 08 18:28:31 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 \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 " " +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.
<" +"class>: receive, send, highlight, action, timestamp
<foreground/" +"background>: black, red, green, blue, white, gray, darkgray, magenta, " +"cyan, default

EXAMPLE:
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 "Conversation with %s on %s:
" +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 [%s] 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 "The logger has no read function" +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 "" +"(%s) %s <AUTO-" +"REPLY>: %s
\n" +msgstr "" + +#, c-format +msgid "" +"(%s) %s <AUTO-" +"REPLY>: %s
\n" +msgstr "" + +msgid "Unable to find log path!" +msgstr "" + +#, c-format +msgid "Could not read file: %s" +msgstr "" + +#, c-format +msgid "(%s) %s : %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 " (ircop)" +msgstr "" + +msgid " (identified)" +msgstr "" + +#, fuzzy +msgid "Nick" +msgstr "Bofya" + +msgid "Currently on" +msgstr "" + +msgid "Idle for" +msgstr "" + +msgid "Online since" +msgstr "" + +msgid "Defining adjective:" +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 : 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. Warning, some servers " +"may disconnect you upon doing this." +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:
%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:
%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 "you are not waiting for authorization" +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 "Joining Qun %u is approved by admin %u for %s" +msgstr "" + +#, c-format +msgid "Removed buddy %u." +msgstr "" + +#, c-format +msgid "New buddy %u joined." +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 "Login time: %d-%d-%d, %d:%d:%d
\n" +msgstr "" + +#, c-format +msgid "Total Online Buddies: %d
\n" +msgstr "" + +#, c-format +msgid "Last Refresh: %d-%d-%d, %d:%d:%d
\n" +msgstr "" + +#, c-format +msgid "Server: %s
\n" +msgstr "" + +#, c-format +msgid "Client Tag: %s
\n" +msgstr "" + +#, c-format +msgid "Connection Mode: %s
\n" +msgstr "" + +#, c-format +msgid "My Internet IP: %s:%d
\n" +msgstr "" + +#, c-format +msgid "Sent: %lu
\n" +msgstr "" + +#, c-format +msgid "Resend: %lu
\n" +msgstr "" + +#, c-format +msgid "Lost: %lu
\n" +msgstr "" + +#, c-format +msgid "Received: %lu
\n" +msgstr "" + +#, c-format +msgid "Received Duplicate: %lu
\n" +msgstr "" + +#, c-format +msgid "Time: %d-%d-%d, %d:%d:%d
\n" +msgstr "" + +#, c-format +msgid "IP: %s
\n" +msgstr "" + +#, fuzzy +msgid "Login Information" +msgstr "Taarifa Zaidi" + +msgid "

Original Author:
\n" +msgstr "" + +msgid "

Code Contributors:
\n" +msgstr "" + +msgid "

Lovely Patch Writers:
\n" +msgstr "" + +msgid "

Acknowledgement:
\n" +msgstr "" + +msgid "

Scrupulous Testers:
\n" +msgstr "" + +msgid "and more, please let me know... thank you!))" +msgstr "" + +msgid "

And, all the boys in the backroom...
\n" +msgstr "" + +msgid "Feel free to join us! :)" +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 "Group Title: %s
" +msgstr "" + +#, c-format +msgid "Notes Group ID: %s
" +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)
" +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 "Channel Name: %s" +msgstr "" + +#, c-format +msgid "
User Count: %d" +msgstr "" + +#, c-format +msgid "
Channel Founder: %s" +msgstr "" + +#, c-format +msgid "
Channel Cipher: %s" +msgstr "" + +#. Definition of HMAC: http://en.wikipedia.org/wiki/HMAC +#, c-format +msgid "
Channel HMAC: %s" +msgstr "" + +#, c-format +msgid "
Channel Topic:
%s" +msgstr "" + +#, c-format +msgid "
Channel Modes: " +msgstr "" + +#, c-format +msgid "
Founder Key Fingerprint:
%s" +msgstr "" + +#, c-format +msgid "
Founder Key Babbleprint:
%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 %s to: %s" +msgstr "" + +#, c-format +msgid "%s set channel %s modes to: %s" +msgstr "" + +#, c-format +msgid "%s removed all channel %s modes" +msgstr "" + +#, c-format +msgid "%s set %s's modes to: %s" +msgstr "" + +#, c-format +msgid "%s removed all %s's modes" +msgstr "" + +#, c-format +msgid "You have been kicked off %s by %s (%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 %s" +msgstr "" + +#, c-format +msgid "Channel founder on %s is %s" +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 %s 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 "
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,instance,*>" +msgstr "" + +msgid "" +"zci <class> <instance>: Send a message to <class," +"instance,*>" +msgstr "" + +msgid "" +"zcir <class> <instance> <recipient>: Send a message to <" +"class,instance,recipient>" +msgstr "" + +msgid "" +"zir <instance> <recipient>: Send a message to <MESSAGE," +"instance,recipient>" +msgstr "" + +msgid "zc <class>: Send a message to <class,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 "" +"Welcome to %s!\n" +"\n" +"You have no IM accounts configured. To start connecting with %s press the " +"Add... button below and configure your first account. If you want %s " +"to connect to multiple IM accounts, press Add... again to configure " +"them all.\n" +"\n" +"You can come back to this window to add, edit, or remove accounts from " +"Accounts->Manage Accounts 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 "Account: %s" +msgstr "" + +#, c-format +msgid "" +"\n" +"Occupants: %d" +msgstr "" + +#, c-format +msgid "" +"\n" +"Topic: %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 "Username:" +msgstr "" + +msgid "Password:" +msgstr "" + +msgid "_Login" +msgstr "" + +msgid "/Accounts" +msgstr "" + +#. Translators: Please maintain the use of -> and <- to refer to menu heirarchy +#, c-format +msgid "" +"Welcome to %s!\n" +"\n" +"You have no accounts enabled. Enable your IM accounts from the Accounts window at Accounts->Manage Accounts. 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 "/Accounts/Enable Account" +msgstr "" + +msgid "/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 "

Conversation with %s

\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+.

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." +"

" +msgstr "" + +#, c-format +msgid "" +"FAQ: http://developer.pidgin.im/wiki/FAQ

" +msgstr "" + +#, c-format +msgid "" +"Help via e-mail: support@pidgin.im

" +msgstr "" + +#, c-format +msgid "" +"IRC Channel: #pidgin on irc.freenode.net

" +msgstr "" + +#, c-format +msgid "XMPP MUC: devel@conference.pidgin.im

" +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 "Receiving As:" +msgstr "" + +msgid "Receiving From:" +msgstr "" + +msgid "Sending To:" +msgstr "" + +msgid "Sending As:" +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 "" +"Unrecognized file type\n" +"\n" +"Defaulting to PNG." +msgstr "" + +msgid "" +"Unrecognized file type\n" +"\n" +"Defaulting to PNG." +msgstr "" + +#, c-format +msgid "" +"Error saving image\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 "_Bold" +msgstr "" + +msgid "_Italic" +msgstr "" + +msgid "_Underline" +msgstr "" + +msgid "Strikethrough" +msgstr "" + +msgid "_Larger" +msgstr "" + +#, fuzzy +msgid "_Normal" +msgstr "&Kawaida" + +msgid "_Smaller" +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 "Conversation in %s on %s" +msgstr "" + +#, c-format +msgid "Conversation with %s on %s" +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 "%d new email." +msgid_plural "%d new emails." +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 "You have mail!" +msgstr "" + +msgid "New Pounces" +msgstr "" + +msgid "Dismiss" +msgstr "" + +msgid "You have pounced!" +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 "" +"Error: %s\n" +"Check the plugin website for an update." +msgstr "" + +msgid "Author" +msgstr "" + +msgid "Written by:" +msgstr "" + +msgid "Web site:" +msgstr "" + +msgid "Filename:" +msgstr "" + +msgid "Configure Pl_ugin" +msgstr "" + +msgid "Plugin Details" +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 "Example: stunserver.org" +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 "Proxy configuration program was not found." +msgstr "" + +msgid "Browser configuration program was not found." +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 "" +"File: %s\n" +"File size: %s\n" +"Image size: %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 largest score 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" +"Buddy Note: %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 "Logged out." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#, fuzzy +msgid "XMPP Console" +msgstr "Kiweko cha Hitilafu" + +msgid "Account: " +msgstr "" + +msgid "Not connected to XMPP" +msgstr "" + +msgid "Insert an stanza." +msgstr "" + +msgid "Insert a stanza." +msgstr "" + +msgid "Insert a 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 "" diff -r 33b81994d74c -r 42c64c41cf87 share/ca-certs/Makefile.am --- a/share/ca-certs/Makefile.am Mon May 25 19:27:33 2009 +0000 +++ b/share/ca-certs/Makefile.am Mon Jun 08 18:28:31 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 \ diff -r 33b81994d74c -r 42c64c41cf87 share/ca-certs/StartCom_Certification_Authority.pem --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/ca-certs/StartCom_Certification_Authority.pem Mon Jun 08 18:28:31 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-----