Mon, 07 Apr 2014 20:02:22 +0530
Merged default branch
--- a/COPYRIGHT Thu Apr 03 09:37:53 2014 +0530 +++ b/COPYRIGHT Mon Apr 07 20:02:22 2014 +0530 @@ -340,6 +340,7 @@ Simo Mattila Robert Matusewicz Michal Matyska +Rudolfs Mazurs Ryan McCabe Peter McCurdy Kurt McKee @@ -568,6 +569,8 @@ Dmitry Utkin Igor Vlasenko István Váradi +ILDAR Valeev +Cédric Valmary Martijn van Beers Gideon van Melle Arjan van de Ven
--- a/ChangeLog Thu Apr 03 09:37:53 2014 +0530 +++ b/ChangeLog Mon Apr 07 20:02:22 2014 +0530 @@ -92,6 +92,10 @@ Gadu-Gadu: * Updated internal libgadu to version 1.12.0-rc2. + Windows-Specific Changes: + * Updates to dependencies: + * NSS 3.16 and NSPR 4.10.4 + version 2.10.9 (2/2/2014): XMPP: * Fix problems logging into some servers including jabber.org and
--- a/configure.ac Thu Apr 03 09:37:53 2014 +0530 +++ b/configure.ac Mon Apr 07 20:02:22 2014 +0530 @@ -306,7 +306,7 @@ GETTEXT_PACKAGE=pidgin AC_SUBST(GETTEXT_PACKAGE) - ALL_LINGUAS="af am ar ast az be@latin bg bn bn_IN 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 hr hu id it ja ka kk km kn ko ku lt mai mhr mk mn mr my_MM nb ne nl nn oc or 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" + ALL_LINGUAS="af am ar ast az be@latin bg bn bn_IN 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 hr hu id it ja ka kk km kn ko ku lt lv mai mhr mk mn mr my_MM nb ne nl nn oc or pa pl pt_BR pt ps ro ru si sk sl sq sr sr@latin sv sw ta te th tr tt 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 @@ -2604,7 +2604,6 @@ pidgin/pidgin-3-uninstalled.pc pidgin/pixmaps/Makefile pidgin/pixmaps/emotes/default/24/Makefile - pidgin/pixmaps/emotes/none/Makefile pidgin/pixmaps/emotes/small/16/Makefile pidgin/plugins/Makefile pidgin/plugins/cap/Makefile
--- a/doc/reference/libpurple/libpurple-docs.xml Thu Apr 03 09:37:53 2014 +0530 +++ b/doc/reference/libpurple/libpurple-docs.xml Mon Apr 07 20:02:22 2014 +0530 @@ -56,6 +56,7 @@ <xi:include href="xml/imgstore.xml" /> <xi:include href="xml/keyring.xml" /> <xi:include href="xml/log.xml" /> + <xi:include href="xml/memorypool.xml" /> <xi:include href="xml/desktopitem.xml" /> <xi:include href="xml/mime.xml" /> <xi:include href="xml/nat-pmp.xml" /> @@ -77,7 +78,6 @@ <xi:include href="xml/roomlist.xml" /> <xi:include href="xml/savedstatuses.xml" /> <xi:include href="xml/server.xml" /> - <xi:include href="xml/smiley.xml" /> <xi:include href="xml/sound.xml" /> <xi:include href="xml/sslconn.xml" /> <xi:include href="xml/core.xml" /> @@ -86,6 +86,7 @@ <xi:include href="xml/theme.xml" /> <xi:include href="xml/theme-loader.xml" /> <xi:include href="xml/theme-manager.xml" /> + <xi:include href="xml/trie.xml" /> <xi:include href="xml/sound-theme.xml" /> <xi:include href="xml/sound-theme-loader.xml" /> <xi:include href="xml/upnp.xml" /> @@ -114,6 +115,17 @@ </reference> <reference label="b"> + <title>Smiley APIs</title> + + <xi:include href="xml/smiley.xml" /> + <xi:include href="xml/smiley-remote.xml" /> + <xi:include href="xml/smiley-custom.xml" /> + <xi:include href="xml/smiley-list.xml" /> + <xi:include href="xml/smiley-theme.xml" /> + <xi:include href="xml/smiley-parser.xml" /> + </reference> + + <reference label="c"> <title>Media APIs</title> <xi:include href="xml/media.xml" /> @@ -125,7 +137,7 @@ <xi:include href="xml/enum-types.xml" /> </reference> - <reference label="c"> + <reference label="d"> <title>D-Bus Server APIs</title> <xi:include href="xml/dbus-bindings.xml" />
--- a/doc/reference/pidgin/pidgin-docs.xml Thu Apr 03 09:37:53 2014 +0530 +++ b/doc/reference/pidgin/pidgin-docs.xml Mon Apr 07 20:02:22 2014 +0530 @@ -32,7 +32,6 @@ <xi:include href="xml/gtknickcolors.xml" /> <xi:include href="xml/gtkconv-theme.xml" /> <xi:include href="xml/gtkconv-theme-loader.xml" /> - <xi:include href="xml/gtksmiley.xml" /> <xi:include href="xml/gtkdebug.xml" /> <xi:include href="xml/gtkdocklet.xml" /> <xi:include href="xml/gtkdnd-hints.xml" /> @@ -56,8 +55,8 @@ <xi:include href="xml/gtkroomlist.xml" /> <xi:include href="xml/gtksavedstatuses.xml" /> <xi:include href="xml/gtkscrollbook.xml" /> - <xi:include href="xml/smileyparser.xml" /> - <xi:include href="xml/gtkthemes.xml" /> + <xi:include href="xml/gtksmiley-manager.xml" /> + <xi:include href="xml/gtksmiley-theme.xml" /> <xi:include href="xml/gtksound.xml" /> <xi:include href="xml/gtkstatusbox.xml" /> <xi:include href="xml/pidginstock.xml" />
--- a/finch/gntconv.c Thu Apr 03 09:37:53 2014 +0530 +++ b/finch/gntconv.c Mon Apr 07 20:02:22 2014 +0530 @@ -1200,9 +1200,6 @@ finch_chat_update_user, finch_conv_present, /* present */ finch_conv_has_focus, /* has_focus */ - NULL, /* custom_smiley_add */ - NULL, /* custom_smiley_write */ - NULL, /* custom_smiley_close */ NULL, /* send_confirm */ NULL, NULL,
--- a/finch/libgnt/gntbox.c Thu Apr 03 09:37:53 2014 +0530 +++ b/finch/libgnt/gntbox.c Mon Apr 07 20:02:22 2014 +0530 @@ -731,6 +731,11 @@ int height, width; int x, y; + if (G_UNLIKELY(w == NULL)) { + g_warn_if_reached(); + continue; + } + if (GNT_WIDGET_IS_FLAG_SET(w, GNT_WIDGET_INVISIBLE)) continue; @@ -819,6 +824,12 @@ for (iter = box->list; iter; iter = iter->next) { GntWidget *w = iter->data; + + if (G_UNLIKELY(w == NULL)) { + g_warn_if_reached(); + continue; + } + if (GNT_IS_BOX(w)) gnt_box_readjust(GNT_BOX(w)); else
--- a/finch/libgnt/gntmain.c Thu Apr 03 09:37:53 2014 +0530 +++ b/finch/libgnt/gntmain.c Mon Apr 07 20:02:22 2014 +0530 @@ -469,6 +469,7 @@ #ifdef NO_WIDECHAR ascii_only = TRUE; + (void)locale; #else if (locale && (strstr(locale, "UTF") || strstr(locale, "utf"))) { ascii_only = FALSE;
--- a/finch/libgnt/gntmenu.c Thu Apr 03 09:37:53 2014 +0530 +++ b/finch/libgnt/gntmenu.c Mon Apr 07 20:02:22 2014 +0530 @@ -121,6 +121,8 @@ { char trigger[4] = "\0 )\0"; + g_return_if_fail(item != NULL); + if ((trigger[1] = gnt_menuitem_get_trigger(item)) && trigger[1] != ' ') trigger[0] = '(';
--- a/finch/libgnt/gnttextview.c Thu Apr 03 09:37:53 2014 +0530 +++ b/finch/libgnt/gnttextview.c Mon Apr 07 20:02:22 2014 +0530 @@ -335,7 +335,13 @@ GntTextView *view = GNT_TEXT_VIEW(widget); if (text_view_contains(view, select_start)) { GString *clip; + + g_return_val_if_fail(select_start != NULL, TRUE); + select_end = gnt_text_view_get_p(view, x - widget->priv.x, y - widget->priv.y); + + g_return_val_if_fail(select_end != NULL, TRUE); + if (select_end < select_start) { gchar *t = select_start; select_start = select_end; @@ -758,6 +764,12 @@ GList *segs, *snext; GntTextLine *line = iter->data; inext = iter->next; + + if (G_UNLIKELY(line == NULL)) { + g_warn_if_reached(); + continue; + } + for (segs = line->segments; segs; segs = snext) { GntTextSegment *seg = segs->data; snext = segs->next; @@ -771,6 +783,10 @@ /* This segment starts in the middle of the tag */ if (text == NULL) { free_text_segment(seg, NULL); + if (G_UNLIKELY(line == NULL)) { + g_warn_if_reached(); + break; + } line->segments = g_list_delete_link(line->segments, segs); if (line->segments == NULL) { free_text_line(line, NULL);
--- a/finch/libgnt/gnttree.c Thu Apr 03 09:37:53 2014 +0530 +++ b/finch/libgnt/gnttree.c Mon Apr 07 20:02:22 2014 +0530 @@ -1314,7 +1314,8 @@ else tree->root = row; row->next = s; - s->prev = row; /* s cannot be NULL */ + g_return_if_fail(s != NULL); /* s cannot be NULL */ + s->prev = row; row->prev = NULL; newp = g_list_index(tree->list, s) - 1; } else {
--- a/finch/libgnt/gntwm.c Thu Apr 03 09:37:53 2014 +0530 +++ b/finch/libgnt/gntwm.c Mon Apr 07 20:02:22 2014 +0530 @@ -2251,8 +2251,14 @@ void gnt_wm_raise_window(GntWM *wm, GntWidget *widget) { GntWS *ws = gnt_wm_widget_find_workspace(wm, widget); + + g_return_if_fail(wm != NULL); + if (wm->cws != ws) gnt_wm_switch_workspace(wm, g_list_index(wm->workspaces, ws)); + + g_return_if_fail(wm->cws != NULL); + if (widget != wm->cws->ordered->data) { GntWidget *wid = wm->cws->ordered->data; wm->cws->ordered = g_list_bring_to_front(wm->cws->ordered, widget);
--- a/finch/libgnt/wms/irssi.c Thu Apr 03 09:37:53 2014 +0530 +++ b/finch/libgnt/wms/irssi.c Mon Apr 07 20:02:22 2014 +0530 @@ -155,6 +155,9 @@ const char *name; int x, y, w, h; + g_return_if_fail(win != NULL); + g_return_if_fail(wm != NULL); + name = gnt_widget_get_name(win); if (!name || !strstr(name, "conversation-window")) { if (!GNT_IS_MENU(win) && !GNT_WIDGET_IS_FLAG_SET(win, GNT_WIDGET_TRANSIENT)) {
--- a/finch/libgnt/wms/s.c Thu Apr 03 09:37:53 2014 +0530 +++ b/finch/libgnt/wms/s.c Mon Apr 07 20:02:22 2014 +0530 @@ -84,6 +84,9 @@ const char *name; gboolean blist = FALSE; + g_return_if_fail(win != NULL); + g_return_if_fail(wm != NULL); + if (!GNT_IS_MENU(win)) { getmaxyx(stdscr, maxy, maxx);
--- a/libpurple/Makefile.am Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/Makefile.am Mon Apr 07 20:02:22 2014 +0530 @@ -102,6 +102,11 @@ savedstatuses.c \ server.c \ signals.c \ + smiley-custom.c \ + smiley-list.c \ + smiley-parser.c \ + smiley-remote.c \ + smiley-theme.c \ smiley.c \ dnsquery.c \ dnssrv.c\ @@ -178,6 +183,11 @@ savedstatuses.h \ server.h \ signals.h \ + smiley-custom.h \ + smiley-list.h \ + smiley-parser.h \ + smiley-remote.h \ + smiley-theme.h \ smiley.h \ dnsquery.h \ dnssrv.h \ @@ -271,8 +281,8 @@ dbus_exported = dbus-useful.h dbus-define-api.h account.h accounts.h blistnode.h \ blistnodetypes.h buddylist.h buddyicon.h connection.h conversation.h \ conversationtypes.h conversations.h core.h xfer.h log.h notify.h \ - prefs.h presence.h roomlist.h savedstatuses.h smiley.h status.h \ - server.h util.h xmlnode.h protocol.h protocols.h + prefs.h presence.h roomlist.h savedstatuses.h smiley.h smiley-list.h \ + status.h server.h util.h xmlnode.h protocol.h protocols.h purple_build_coreheaders = $(addprefix $(srcdir)/, $(purple_coreheaders)) \ $(addprefix $(srcdir)/ciphers/, $(purple_cipherheaders)) \
--- a/libpurple/Makefile.mingw Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/Makefile.mingw Mon Apr 07 20:02:22 2014 +0530 @@ -102,6 +102,7 @@ media/enum-types.c \ mediamanager.c \ media.c \ + memorypool.c \ mime.c \ nat-pmp.c \ network.c \ @@ -123,6 +124,11 @@ server.c \ signals.c \ smiley.c \ + smiley-custom.c \ + smiley-list.c \ + smiley-parser.c \ + smiley-remote.c \ + smiley-theme.c \ sound-theme-loader.c \ sound-theme.c \ sound.c \ @@ -133,6 +139,7 @@ theme-loader.c \ theme-manager.c \ theme.c \ + trie.c \ upnp.c \ util.c \ version.c \
--- a/libpurple/cipher.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/cipher.c Mon Apr 07 20:02:22 2014 +0530 @@ -51,6 +51,46 @@ return type; } +static const gchar * +purple_cipher_get_name(PurpleCipher *cipher) +{ + PurpleCipherClass *klass; + const gchar *name; + + if (!PURPLE_IS_CIPHER(cipher)) + return "(error: not a cipher)"; + + klass = PURPLE_CIPHER_GET_CLASS(cipher); + if (!klass) + return "(error: unknown cipher class)"; + + name = g_type_name(G_TYPE_FROM_CLASS(klass)); + if (!name) + return "(error: unknown cipher name)"; + + return name; +} + +static const gchar * +purple_hash_get_name(PurpleHash *hash) +{ + PurpleHashClass *klass; + const gchar *name; + + if (!PURPLE_IS_HASH(hash)) + return "(error: not a hash)"; + + klass = PURPLE_HASH_GET_CLASS(hash); + if (!klass) + return "(error: unknown hash class)"; + + name = g_type_name(G_TYPE_FROM_CLASS(klass)); + if (!name) + return "(error: unknown hash name)"; + + return name; +} + void purple_cipher_reset(PurpleCipher *cipher) { PurpleCipherClass *klass = NULL; @@ -59,12 +99,13 @@ klass = PURPLE_CIPHER_GET_CLASS(cipher); - if(klass && klass->reset) + if (klass && klass->reset) klass->reset(cipher); - else - purple_debug_warning("cipher", "the %s cipher does not implement the " - "reset method\n", - g_type_name(G_TYPE_FROM_INSTANCE(cipher))); + else { + purple_debug_warning("cipher", "the %s cipher does not " + "implement the reset method", + purple_cipher_get_name(cipher)); + } } void @@ -75,12 +116,13 @@ klass = PURPLE_CIPHER_GET_CLASS(cipher); - if(klass && klass->reset_state) + if (klass && klass->reset_state) klass->reset_state(cipher); - else - purple_debug_warning("cipher", "the %s cipher does not implement the " - "reset_state method\n", - g_type_name(G_TYPE_FROM_INSTANCE(cipher))); + else { + purple_debug_warning("cipher", "the %s cipher does not " + "implement the reset_state method", + purple_cipher_get_name(cipher)); + } } void @@ -93,12 +135,13 @@ klass = PURPLE_CIPHER_GET_CLASS(cipher); - if(klass && klass->set_iv) + if (klass && klass->set_iv) klass->set_iv(cipher, iv, len); - else - purple_debug_warning("cipher", "the %s cipher does not implement the " - "set_iv method\n", - g_type_name(G_TYPE_FROM_INSTANCE(cipher))); + else { + purple_debug_warning("cipher", "the %s cipher does not " + "implement the set_iv method", + purple_cipher_get_name(cipher)); + } } void @@ -111,12 +154,13 @@ klass = PURPLE_CIPHER_GET_CLASS(cipher); - if(klass && klass->append) + if (klass && klass->append) klass->append(cipher, data, len); - else - purple_debug_warning("cipher", "the %s cipher does not implement the " - "append method\n", - g_type_name(G_TYPE_FROM_INSTANCE(cipher))); + else { + purple_debug_warning("cipher", "the %s cipher does not " + "implement the append method", + purple_cipher_get_name(cipher)); + } } gboolean @@ -128,12 +172,13 @@ klass = PURPLE_CIPHER_GET_CLASS(cipher); - if(klass && klass->digest) + if (klass && klass->digest) return klass->digest(cipher, digest, len); - else - purple_debug_warning("cipher", "the %s cipher does not implement the " - "digest method\n", - g_type_name(G_TYPE_FROM_INSTANCE(cipher))); + else { + purple_debug_warning("cipher", "the %s cipher does not " + "implement the digest method", + purple_cipher_get_name(cipher)); + } return FALSE; } @@ -175,12 +220,13 @@ klass = PURPLE_CIPHER_GET_CLASS(cipher); - if(klass && klass->get_digest_size) + if (klass && klass->get_digest_size) return klass->get_digest_size(cipher); - else - purple_debug_warning("cipher", "the %s cipher does not implement the " - "get_digest_size method\n", - g_type_name(G_TYPE_FROM_INSTANCE(cipher))); + else { + purple_debug_warning("cipher", "the %s cipher does not " + "implement the get_digest_size method", + purple_cipher_get_name(cipher)); + } return FALSE; } @@ -198,12 +244,13 @@ klass = PURPLE_CIPHER_GET_CLASS(cipher); - if(klass && klass->encrypt) + if (klass && klass->encrypt) return klass->encrypt(cipher, input, in_len, output, out_size); - else - purple_debug_warning("cipher", "the %s cipher does not implement the " - "encrypt method\n", - g_type_name(G_TYPE_FROM_INSTANCE(cipher))); + else { + purple_debug_warning("cipher", "the %s cipher does not " + "implement the encrypt method", + purple_cipher_get_name(cipher)); + } return -1; } @@ -220,12 +267,13 @@ klass = PURPLE_CIPHER_GET_CLASS(cipher); - if(klass && klass->decrypt) + if (klass && klass->decrypt) return klass->decrypt(cipher, input, in_len, output, out_size); - else - purple_debug_warning("cipher", "the %s cipher does not implement the " - "decrypt method\n", - g_type_name(G_TYPE_FROM_INSTANCE(cipher))); + else { + purple_debug_warning("cipher", "the %s cipher does not " + "implement the decrypt method", + purple_cipher_get_name(cipher)); + } return -1; } @@ -238,12 +286,13 @@ klass = PURPLE_CIPHER_GET_CLASS(cipher); - if(klass && klass->set_salt) + if (klass && klass->set_salt) klass->set_salt(cipher, salt, len); - else - purple_debug_warning("cipher", "the %s cipher does not implement the " - "set_salt method\n", - g_type_name(G_TYPE_FROM_INSTANCE(cipher))); + else { + purple_debug_warning("cipher", "the %s cipher does not " + "implement the set_salt method", + purple_cipher_get_name(cipher)); + } } void @@ -254,12 +303,13 @@ klass = PURPLE_CIPHER_GET_CLASS(cipher); - if(klass && klass->set_key) + if (klass && klass->set_key) klass->set_key(cipher, key, len); - else - purple_debug_warning("cipher", "the %s cipher does not implement the " - "set_key method\n", - g_type_name(G_TYPE_FROM_INSTANCE(cipher))); + else { + purple_debug_warning("cipher", "the %s cipher does not " + "implement the set_key method", + purple_cipher_get_name(cipher)); + } } size_t @@ -270,12 +320,13 @@ klass = PURPLE_CIPHER_GET_CLASS(cipher); - if(klass && klass->get_key_size) + if (klass && klass->get_key_size) return klass->get_key_size(cipher); - else - purple_debug_warning("cipher", "the %s cipher does not implement the " - "get_key_size method\n", - g_type_name(G_TYPE_FROM_INSTANCE(cipher))); + else { + purple_debug_warning("cipher", "the %s cipher does not " + "implement the get_key_size method", + purple_cipher_get_name(cipher)); + } return -1; } @@ -290,12 +341,13 @@ klass = PURPLE_CIPHER_GET_CLASS(cipher); - if(klass && klass->set_batch_mode) + if (klass && klass->set_batch_mode) klass->set_batch_mode(cipher, mode); - else - purple_debug_warning("cipher", "the %s cipher does not implement the " - "set_batch_mode method\n", - g_type_name(G_TYPE_FROM_INSTANCE(cipher))); + else { + purple_debug_warning("cipher", "the %s cipher does not " + "implement the set_batch_mode method", + purple_cipher_get_name(cipher)); + } } PurpleCipherBatchMode @@ -307,12 +359,13 @@ klass = PURPLE_CIPHER_GET_CLASS(cipher); - if(klass && klass->get_batch_mode) + if (klass && klass->get_batch_mode) return klass->get_batch_mode(cipher); - else - purple_debug_warning("cipher", "the %s cipher does not implement the " - "get_batch_mode method\n", - g_type_name(G_TYPE_FROM_INSTANCE(cipher))); + else { + purple_debug_warning("cipher", "the %s cipher does not " + "implement the get_batch_mode method", + purple_cipher_get_name(cipher)); + } return -1; } @@ -326,12 +379,13 @@ klass = PURPLE_CIPHER_GET_CLASS(cipher); - if(klass && klass->get_block_size) + if (klass && klass->get_block_size) return klass->get_block_size(cipher); - else - purple_debug_warning("cipher", "the %s cipher does not implement the " - "get_block_size method\n", - g_type_name(G_TYPE_FROM_INSTANCE(cipher))); + else { + purple_debug_warning("cipher", "the %s cipher does not " + "implement the get_block_size method", + purple_cipher_get_name(cipher)); + } return -1; } @@ -373,12 +427,12 @@ klass = PURPLE_HASH_GET_CLASS(hash); - if(klass && klass->reset) + if (klass && klass->reset) klass->reset(hash); - else - purple_debug_warning("hash", "the %s hash does not implement the " - "reset method\n", - g_type_name(G_TYPE_FROM_INSTANCE(hash))); + else { + purple_debug_warning("hash", "the %s hash does not implement " + "the reset method", purple_hash_get_name(hash)); + } } void @@ -389,12 +443,12 @@ klass = PURPLE_HASH_GET_CLASS(hash); - if(klass && klass->reset_state) + if (klass && klass->reset_state) klass->reset_state(hash); - else - purple_debug_warning("hash", "the %s hash does not implement the " - "reset_state method\n", - g_type_name(G_TYPE_FROM_INSTANCE(hash))); + else { + purple_debug_warning("hash", "the %s hash does not implement " + "the reset_state method", purple_hash_get_name(hash)); + } } void @@ -407,12 +461,12 @@ klass = PURPLE_HASH_GET_CLASS(hash); - if(klass && klass->append) + if (klass && klass->append) klass->append(hash, data, len); - else - purple_debug_warning("hash", "the %s hash does not implement the " - "append method\n", - g_type_name(G_TYPE_FROM_INSTANCE(hash))); + else { + purple_debug_warning("hash", "the %s hash does not implement " + "the append method", purple_hash_get_name(hash)); + } } gboolean @@ -424,12 +478,12 @@ klass = PURPLE_HASH_GET_CLASS(hash); - if(klass && klass->digest) + if (klass && klass->digest) return klass->digest(hash, digest, len); - else - purple_debug_warning("hash", "the %s hash does not implement the " - "digest method\n", - g_type_name(G_TYPE_FROM_INSTANCE(hash))); + else { + purple_debug_warning("hash", "the %s hash does not implement " + "the digest method", purple_hash_get_name(hash)); + } return FALSE; } @@ -471,12 +525,12 @@ klass = PURPLE_HASH_GET_CLASS(hash); - if(klass && klass->get_digest_size) + if (klass && klass->get_digest_size) return klass->get_digest_size(hash); - else - purple_debug_warning("hash", "the %s hash does not implement the " - "get_digest_size method\n", - g_type_name(G_TYPE_FROM_INSTANCE(hash))); + else { + purple_debug_warning("hash", "the %s hash does not implement " + "the get_digest_size method", purple_hash_get_name(hash)); + } return FALSE; } @@ -490,12 +544,12 @@ klass = PURPLE_HASH_GET_CLASS(hash); - if(klass && klass->get_block_size) + if (klass && klass->get_block_size) return klass->get_block_size(hash); - else - purple_debug_warning("hash", "the %s hash does not implement the " - "get_block_size method\n", - g_type_name(G_TYPE_FROM_INSTANCE(hash))); + else { + purple_debug_warning("hash", "the %s hash does not implement " + "the get_block_size method", purple_hash_get_name(hash)); + } return -1; }
--- a/libpurple/ciphers/aescipher.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/ciphers/aescipher.c Mon Apr 07 20:02:22 2014 +0530 @@ -483,8 +483,9 @@ input_padded = purple_aes_cipher_pad_pkcs7(input, in_len, &out_len); if (out_len > out_size) { - purple_debug_error("cipher-aes", - "Output buffer too small (%d > %d)", out_len, out_size); + purple_debug_error("cipher-aes", "Output buffer too small (%" + G_GSIZE_FORMAT " > %" G_GSIZE_FORMAT ")", + out_len, out_size); memset(input_padded, 0, out_len); g_free(input_padded); return -1;
--- a/libpurple/conversation.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/conversation.c Mon Apr 07 20:02:22 2014 +0530 @@ -34,6 +34,7 @@ #include "protocol.h" #include "request.h" #include "signals.h" +#include "smiley-list.h" #include "util.h" #define PURPLE_CONVERSATION_GET_PRIVATE(obj) \ @@ -60,6 +61,11 @@ PurpleConversationMessage's */ PurpleE2eeState *e2ee_state; /* End-to-end encryption state. */ + + /* The list of remote smileys. This should be per-buddy (PurpleBuddy), + * but we don't have any class for people not on our buddy + * list (PurpleDude?). So, if we have one, we should switch to it. */ + PurpleSmileyList *remote_smileys; }; /* @@ -786,59 +792,6 @@ G_CALLBACK(purple_conversation_send_confirm_cb), _("Cancel"), NULL); } -gboolean -purple_conversation_custom_smiley_add(PurpleConversation *conv, const char *smile, - const char *cksum_type, const char *chksum, - gboolean remote) -{ - PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv); - - g_return_val_if_fail(priv != NULL, FALSE); - - if (smile == NULL || !*smile) { - return FALSE; - } - - /* TODO: check if the icon is in the cache and return false if so */ - /* TODO: add an icon cache (that doesn't suck) */ - if (priv->ui_ops != NULL && priv->ui_ops->custom_smiley_add !=NULL) { - return priv->ui_ops->custom_smiley_add(conv, smile, remote); - } else { - purple_debug_info("conversation", "Could not find add custom smiley function"); - return FALSE; - } - -} - -void -purple_conversation_custom_smiley_write(PurpleConversation *conv, const char *smile, - const guchar *data, gsize size) -{ - PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv); - - g_return_if_fail(priv != NULL); - g_return_if_fail(smile != NULL && *smile); - - if (priv->ui_ops != NULL && priv->ui_ops->custom_smiley_write != NULL) - priv->ui_ops->custom_smiley_write(conv, smile, data, size); - else - purple_debug_info("conversation", "Could not find the smiley write function"); -} - -void -purple_conversation_custom_smiley_close(PurpleConversation *conv, const char *smile) -{ - PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv); - - g_return_if_fail(priv != NULL); - g_return_if_fail(smile != NULL && *smile); - - if (priv->ui_ops != NULL && priv->ui_ops->custom_smiley_close != NULL) - priv->ui_ops->custom_smiley_close(conv, smile); - else - purple_debug_info("conversation", "Could not find custom smiley close function"); -} - GList * purple_conversation_get_extended_menu(PurpleConversation *conv) { @@ -983,6 +936,91 @@ return purple_protocol_client_iface_get_max_message_size(protocol, conv); } +PurpleRemoteSmiley * +purple_conversation_add_remote_smiley(PurpleConversation *conv, + const gchar *shortcut) +{ + PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv); + PurpleSmiley *smiley; + PurpleRemoteSmiley *rsmiley; + + g_return_val_if_fail(priv != NULL, NULL); + g_return_val_if_fail(shortcut != NULL, NULL); + g_return_val_if_fail(shortcut[0] != '\0', NULL); + + if (priv->remote_smileys == NULL) { + priv->remote_smileys = purple_smiley_list_new(); + g_object_set(priv->remote_smileys, + "drop-failed-remotes", TRUE, NULL); + } + + smiley = purple_smiley_list_get_by_shortcut( + priv->remote_smileys, shortcut); + if (smiley && !PURPLE_IS_REMOTE_SMILEY(smiley)) { + purple_debug_warning("conversation", "Invalid type of smiley " + "stored in remote smileys list"); + return NULL; + } + + /* smiley was already added */ + if (smiley) + return NULL; + + rsmiley = g_object_new(PURPLE_TYPE_REMOTE_SMILEY, + "shortcut", shortcut, + "is-ready", FALSE, + NULL); + + if (!purple_smiley_list_add(priv->remote_smileys, + PURPLE_SMILEY(rsmiley))) + { + purple_debug_error("conversation", "failed adding remote " + "smiley to the list"); + g_object_unref(rsmiley); + return NULL; + } + + /* priv->remote_smileys holds the only one ref */ + g_object_unref(rsmiley); + return rsmiley; +} + +PurpleRemoteSmiley * +purple_conversation_get_remote_smiley(PurpleConversation *conv, + const gchar *shortcut) +{ + PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv); + PurpleSmiley *smiley; + + g_return_val_if_fail(priv != NULL, NULL); + g_return_val_if_fail(shortcut != NULL, NULL); + g_return_val_if_fail(shortcut[0] != '\0', NULL); + + if (priv->remote_smileys == NULL) + return NULL; + + smiley = purple_smiley_list_get_by_shortcut( + priv->remote_smileys, shortcut); + if (smiley && !PURPLE_IS_REMOTE_SMILEY(smiley)) { + purple_debug_warning("conversation", "Invalid type of smiley " + "stored in remote smileys list"); + return NULL; + } + + return PURPLE_REMOTE_SMILEY(smiley); +} + +PurpleSmileyList * +purple_conversation_get_remote_smileys(PurpleConversation *conv) +{ + PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv); + + g_return_val_if_fail(priv != NULL, NULL); + + return priv->remote_smileys; +} + + /************************************************************************** * GObject code **************************************************************************/
--- a/libpurple/conversation.h Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/conversation.h Mon Apr 07 20:02:22 2014 +0530 @@ -195,6 +195,8 @@ #include "buddyicon.h" #include "e2ee.h" #include "log.h" +#include "smiley-list.h" +#include "smiley-remote.h" /**************************************************************************/ /** PurpleConversationUiOps */ @@ -236,9 +238,6 @@ * @has_focus: If this UI has a concept of focus (as in a windowing system) and * this conversation has the focus, return %TRUE; otherwise, return * %FALSE. - * @custom_smiley_add: Add a custom smiley - * @custom_smiley_write: Write a custom smiley - * @custom_smiley_close: Close a custom smiley * @send_confirm: Prompt the user for confirmation to send @message. This * function should arrange for the message to be sent if the user * accepts. If this field is %NULL, libpurple will fall back to @@ -283,12 +282,6 @@ void (*present)(PurpleConversation *conv); gboolean (*has_focus)(PurpleConversation *conv); - gboolean (*custom_smiley_add)(PurpleConversation *conv, const char *smile, - gboolean remote); - void (*custom_smiley_write)(PurpleConversation *conv, const char *smile, - const guchar *data, gsize size); - void (*custom_smiley_close)(PurpleConversation *conv, const char *smile); - void (*send_confirm)(PurpleConversation *conv, const char *message); /*< private >*/ @@ -643,58 +636,6 @@ void purple_conversation_send_confirm(PurpleConversation *conv, const char *message); /** - * purple_conversation_custom_smiley_add: - * @conv: The conversation to associate the smiley with. - * @smile: The text associated with the smiley - * @cksum_type: The type of checksum. - * @chksum: The checksum, as a NUL terminated base64 string. - * @remote: %TRUE if the custom smiley is set by the remote user (buddy). - * - * Adds a smiley to the conversation's smiley tree. If this returns - * %TRUE you should call purple_conversation_custom_smiley_write() one or more - * times, and then purple_conversation_custom_smiley_close(). If this returns - * %FALSE, either the conv or smile were invalid, or the icon was - * found in the cache. In either case, calling write or close would - * be an error. - * - * Returns: %TRUE if an icon is expected, else FALSE. Note that - * it is an error to never call purple_conversation_custom_smiley_close if - * this function returns %TRUE, but an error to call it if - * %FALSE is returned. - */ - -gboolean purple_conversation_custom_smiley_add(PurpleConversation *conv, const char *smile, - const char *cksum_type, const char *chksum, - gboolean remote); - -/** - * purple_conversation_custom_smiley_write: - * @conv: The conversation associated with the smiley. - * @smile: The text associated with the smiley. - * @data: The actual image data. - * @size: The length of the data. - * - * Updates the image associated with the current smiley. - */ - -void purple_conversation_custom_smiley_write(PurpleConversation *conv, - const char *smile, - const guchar *data, - gsize size); - -/** - * purple_conversation_custom_smiley_close: - * @conv: The purple conversation associated with the smiley. - * @smile: The text associated with the smiley - * - * Close the custom smiley, all data has been written with - * purple_conversation_custom_smiley_write, and it is no longer valid - * to call that function on that smiley. - */ - -void purple_conversation_custom_smiley_close(PurpleConversation *conv, const char *smile); - -/** * purple_conversation_get_extended_menu: * @conv: The conversation. * @@ -734,6 +675,49 @@ gssize purple_conversation_get_max_message_size(PurpleConversation *conv); +/** + * purple_conversation_add_remote_smiley: + * @conv: The conversation that receives new smiley. + * @shortcut: The shortcut for the new smiley. + * + * Adds new smiley to the list of remote smileys for this conversation. + * The smiley have to be written and closed, when data is ready. + * + * Returns: (transfer none): New smiley, or %NULL if it's already being + * retrieved (or possibly, in case of error). + */ +PurpleRemoteSmiley * +purple_conversation_add_remote_smiley(PurpleConversation *conv, + const gchar *shortcut); + +/** + * purple_conversation_get_remote_smiley: + * @conv: The conversation. + * @shortcut: The shortcut. + * + * Lookups for the remote smiley previously added to this conversation. + * + * You may use this function when you receive the smiley data, but it's + * better just to store and use the reference returned by + * #purple_conversation_add_remote_smiley. + * + * Returns: (transfer none): The smiley, or %NULL if it doesn't exists. + */ +PurpleRemoteSmiley * +purple_conversation_get_remote_smiley(PurpleConversation *conv, + const gchar *shortcut); + +/** + * purple_conversation_get_remote_smileys: + * @conv: The conversation. + * + * Get all remote smileys previously added to this conversation. + * + * Returns: (transfer none): The list of remote smileys. + */ +PurpleSmileyList * +purple_conversation_get_remote_smileys(PurpleConversation *conv); + /**************************************************************************/ /* Conversation Helper API */ /**************************************************************************/
--- a/libpurple/core.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/core.c Mon Apr 07 20:02:22 2014 +0530 @@ -41,7 +41,9 @@ #include "proxy.h" #include "savedstatuses.h" #include "signals.h" -#include "smiley.h" +#include "smiley-custom.h" +#include "smiley-parser.h" +#include "smiley-theme.h" #include "sound.h" #include "sound-theme-loader.h" #include "sslconn.h" @@ -202,7 +204,9 @@ purple_xfers_init(); purple_idle_init(); purple_http_init(); - purple_smileys_init(); + _purple_smiley_custom_init(); + _purple_smiley_parser_init(); + /* * Call this early on to try to auto-detect our IP address and * hopefully save some time later. @@ -249,7 +253,9 @@ purple_ssl_uninit(); /* Save .xml files, remove signals, etc. */ - purple_smileys_uninit(); + _purple_smiley_theme_uninit(); + _purple_smiley_custom_uninit(); + _purple_smiley_parser_uninit(); purple_http_uninit(); purple_idle_uninit(); purple_pounces_uninit();
--- a/libpurple/dbus-server.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/dbus-server.c Mon Apr 07 20:02:22 2014 +0530 @@ -46,6 +46,7 @@ #include "core.h" #include "savedstatuses.h" #include "smiley.h" +#include "smiley-list.h" #include "util.h" #include "xmlnode.h"
--- a/libpurple/example/nullclient.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/example/nullclient.c Mon Apr 07 20:02:22 2014 +0530 @@ -144,9 +144,6 @@ NULL, /* chat_update_user */ NULL, /* present */ NULL, /* has_focus */ - NULL, /* custom_smiley_add */ - NULL, /* custom_smiley_write */ - NULL, /* custom_smiley_close */ NULL, /* send_confirm */ NULL, NULL,
--- a/libpurple/glibcompat.h Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/glibcompat.h Mon Apr 07 20:02:22 2014 +0530 @@ -48,6 +48,34 @@ #endif /* __clang__ */ +#if !GLIB_CHECK_VERSION(2, 36, 0) + +#include <errno.h> +#include <fcntl.h> +#ifndef _WIN32 +#include <unistd.h> +#endif + +static inline gboolean g_close(gint fd, GError **error) +{ + int res; + int errsv; + + res = close(fd); + + if (G_LIKELY(res == 0)) + return TRUE; + if (G_UNLIKELY(errno == EINTR)) + return TRUE; + + errsv = errno; + g_set_error_literal(error, G_FILE_ERROR, + g_file_error_from_errno(errsv), g_strerror(errsv)); + errno = errsv; + + return FALSE; +} + #if !GLIB_CHECK_VERSION(2, 32, 0) #include <glib-object.h> @@ -129,4 +157,6 @@ #endif /* < 2.32.0 */ +#endif /* < 2.36.0 */ + #endif /* _GLIBCOMPAT_H_ */
--- a/libpurple/imgstore.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/imgstore.c Mon Apr 07 20:02:22 2014 +0530 @@ -83,10 +83,23 @@ int purple_imgstore_new_with_id(gpointer data, size_t size, const char *filename) { - PurpleStoredImage *img = purple_imgstore_new(data, size, filename); - if (!img) { - return 0; - } + PurpleStoredImage *image; + int id; + + image = purple_imgstore_new(data, size, filename); + id = purple_imgstore_add_with_id(image); + purple_imgstore_unref(image); + + return id; +} + +int +purple_imgstore_add_with_id(PurpleStoredImage *image) +{ + g_return_val_if_fail(image != NULL, 0); + + if (image->id != 0) + return image->id; /* * Use the next unused id number. We do it in a loop on the @@ -94,12 +107,13 @@ * table still contains entries from the first time around. */ do { - img->id = ++nextid; - } while (img->id == 0 || g_hash_table_lookup(imgstore, &(img->id)) != NULL); + image->id = ++nextid; + } while (image->id == 0 || g_hash_table_lookup(imgstore, &(image->id)) != NULL); - g_hash_table_insert(imgstore, &(img->id), img); + purple_imgstore_ref(image); + g_hash_table_insert(imgstore, &(image->id), image); - return img->id; + return image->id; } PurpleStoredImage *purple_imgstore_find_by_id(int id)
--- a/libpurple/imgstore.h Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/imgstore.h Mon Apr 07 20:02:22 2014 +0530 @@ -33,6 +33,7 @@ */ #include <glib.h> +#include <glib-object.h> #define PURPLE_STORED_IMAGE_PROTOCOL "purple-image:" #define PURPLE_STOCK_IMAGE_PROTOCOL "purple-stock-image:" @@ -45,7 +46,14 @@ */ typedef struct _PurpleStoredImage PurpleStoredImage; -#define PURPLE_TYPE_STORED_IMAGE (purple_imgstore_get_type()) +#define PURPLE_TYPE_STORED_IMAGE (purple_imgstore_get_type()) + +/* TODO: make it a real GObject */ +#if 0 +#define PURPLE_IS_STORED_IMAGE(image) (G_TYPE_CHECK_INSTANCE_TYPE((image), PURPLE_TYPE_STORED_IMAGE)) +#else +#define PURPLE_IS_STORED_IMAGE(image) ((image) != NULL) +#endif G_BEGIN_DECLS @@ -142,6 +150,18 @@ int purple_imgstore_new_with_id(gpointer data, size_t size, const char *filename); /** + * purple_imgstore_add_with_id: + * @image: The image. + * + * Adds previously created #PurpleStoredImage to the local store with newly + * generated id. If it was already in the store, an old id will be returned. + * + * Returns: ID for the image. + */ +int +purple_imgstore_add_with_id(PurpleStoredImage *image); + +/** * purple_imgstore_find_by_id: * @id: The ID for the image. *
--- a/libpurple/internal.h Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/internal.h Mon Apr 07 20:02:22 2014 +0530 @@ -49,6 +49,9 @@ */ #ifdef ENABLE_NLS # include <locale.h> +# ifndef __APPLE_CC__ +# define __APPLE_CC__ 0 +# endif # include <libintl.h> # undef printf # define _(String) ((const char *)dgettext(PACKAGE, String))
--- a/libpurple/memorypool.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/memorypool.c Mon Apr 07 20:02:22 2014 +0530 @@ -33,11 +33,13 @@ (gpointer)((((guintptr)(pointer) - 1) / (padding) + 1) * padding) #define PURPLE_MEMORY_POOL_DEFAULT_BLOCK_SIZE 1024 +#define PURPLE_MEMORY_POOL_DISABLED FALSE typedef struct _PurpleMemoryPoolBlock PurpleMemoryPoolBlock; typedef struct { + gboolean disabled; gulong block_size; PurpleMemoryPoolBlock *first_block; @@ -104,6 +106,11 @@ g_return_val_if_fail(priv != NULL, NULL); + if (priv->disabled) { + /* XXX: this may cause some leaks */ + return g_try_malloc(size); + } + g_return_val_if_fail(alignment <= PURPLE_MEMORY_POOL_BLOCK_PADDING, NULL); g_warn_if_fail(alignment >= 1); if (alignment < 1) @@ -128,6 +135,9 @@ blk = purple_memory_pool_block_new(real_size); g_return_val_if_fail(blk != NULL, NULL); + g_assert((priv->first_block == NULL) == + (priv->last_block == NULL)); + if (priv->first_block == NULL) { priv->first_block = blk; priv->last_block = blk; @@ -137,7 +147,7 @@ } mem = PURPLE_MEMORY_PADDED(blk->available_ptr, alignment); - g_assert(mem + size < blk->end_ptr); + g_assert((guintptr)mem + size < (guintptr)blk->end_ptr); g_assert(mem >= blk->available_ptr); /* gpointer overflow */ } @@ -160,6 +170,7 @@ blk = priv->first_block; priv->first_block = NULL; + priv->last_block = NULL; while (blk) { PurpleMemoryPoolBlock *next = blk->next; g_free(blk); @@ -258,6 +269,15 @@ } static void +purple_memory_pool_init(GTypeInstance *instance, gpointer klass) +{ + PurpleMemoryPool *pool = PURPLE_MEMORY_POOL(instance); + PurpleMemoryPoolPrivate *priv = PURPLE_MEMORY_POOL_GET_PRIVATE(pool); + + priv->disabled = PURPLE_MEMORY_POOL_DISABLED; +} + +static void purple_memory_pool_finalize(GObject *obj) { purple_memory_pool_cleanup(PURPLE_MEMORY_POOL(obj)); @@ -331,6 +351,7 @@ .class_size = sizeof(PurpleMemoryPoolClass), .class_init = (GClassInitFunc)purple_memory_pool_class_init, .instance_size = sizeof(PurpleMemoryPool), + .instance_init = (GInstanceInitFunc)purple_memory_pool_init }; type = g_type_register_static(G_TYPE_OBJECT,
--- a/libpurple/memorypool.h Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/memorypool.h Mon Apr 07 20:02:22 2014 +0530 @@ -22,6 +22,26 @@ #ifndef PURPLE_MEMORY_POOL_H #define PURPLE_MEMORY_POOL_H +/** + * SECTION:memorypool + * @include:memorypool.h + * @section_id: libpurple-memorypool + * @short_description: a container for a large number of small chunks of memory + * @title: Memory pools + * + * A #PurpleMemoryPool allows allocating many small objects within a single + * memory range and releasing them all at once using a single call. This + * prevents memory fragmentation and improves performance when used properly. + * It's purpose is to act as an internal storage for other object private + * structures, like tree nodes, string chunks, list elements. + * + * Current implementation is not optimized for releasing individual objects, + * so it may be extremely inefficient, when misused. On every memory allocation, + * it checks if there is enough space in current block. If there is not enough + * room here, it creates another block of memory. On pool destruction or calling + * #purple_memory_pool_cleanup, the whole block chain will be freed, using only + * one #g_free call for every block. + */ #include <glib-object.h> @@ -40,21 +60,39 @@ typedef struct _PurpleMemoryPool PurpleMemoryPool; typedef struct _PurpleMemoryPoolClass PurpleMemoryPoolClass; +/** + * PurpleMemoryPool: + * + * The memory pool object instance. + */ struct _PurpleMemoryPool { /*< private >*/ GObject parent_instance; }; +/** + * PurpleMemoryPoolClass: + * @palloc: alloates memory for a specific memory pool subclass, + * see #purple_memory_pool_alloc. + * @pfree: frees memory allocated within a pool, see #purple_memory_pool_free. + * May be %NULL. + * @cleanup: frees (or marks as unused) all memory allocated within a pool. + * See #purple_memory_pool_cleanup. + * + * Base class for #PurpleMemoryPool objects. + */ struct _PurpleMemoryPoolClass { /*< private >*/ GObjectClass parent_class; + /*< public >*/ gpointer (*palloc)(PurpleMemoryPool *pool, gsize size, guint alignment); gpointer (*pfree)(PurpleMemoryPool *pool, gpointer mem); void (*cleanup)(PurpleMemoryPool *pool); + /*< private >*/ void (*purple_reserved1)(void); void (*purple_reserved2)(void); void (*purple_reserved3)(void); @@ -63,6 +101,11 @@ G_BEGIN_DECLS +/** + * purple_memory_pool_get_type: + * + * Returns: the #GType for a #PurpleMemoryPool. + */ GType purple_memory_pool_get_type(void); @@ -71,15 +114,15 @@ * * Creates a new memory pool. * - * Returns: The new #PurpleMemoryPool. + * Returns: the new #PurpleMemoryPool. */ PurpleMemoryPool * purple_memory_pool_new(void); /** * purple_memory_pool_set_block_size: - * @pool: The memory pool. - * @block_size: The new default block size. + * @pool: the memory pool. + * @block_size: the new default block size. * * Sets new default block size for a memory pool. You might want to call this * before any allocation, to have it applied to the every created block. @@ -89,47 +132,49 @@ /** * purple_memory_pool_alloc: - * @pool: The memory pool. - * @size: The size of memory to be allocated. - * @alignment: The alignment of memory block (should be a power of two). + * @pool: the memory pool. + * @size: the size of memory to be allocated. + * @alignment: the alignment of memory block (should be a power of two). * * Allocates an aligned memory block within a pool. * * Returns: the pointer to a memory block. This should be freed with - * a call to purple_memory_pool_free. + * a call to #purple_memory_pool_free. */ gpointer purple_memory_pool_alloc(PurpleMemoryPool *pool, gsize size, guint alignment); /** * purple_memory_pool_alloc0: - * @pool: The memory pool. - * @size: The size of memory to be allocated. - * @alignment: The alignment of memory block (should be a power of two). + * @pool: the memory pool. + * @size: the size of memory to be allocated. + * @alignment: the alignment of memory block (should be a power of two). * * Allocates an aligned memory block within a pool and sets its contents to * zeros. * * Returns: the pointer to a memory block. This should be freed with - * a call to purple_memory_pool_free. + * a call to #purple_memory_pool_free. */ gpointer purple_memory_pool_alloc0(PurpleMemoryPool *pool, gsize size, guint alignment); /** * purple_memory_pool_free: - * @pool: The memory pool. - * @mem: The pointer to a memory block. + * @pool: the memory pool. + * @mem: the pointer to a memory block. * * Frees a memory allocated within a memory pool. This can be a no-op in certain - * implementations. Thus, it don't need to be called in every case. + * implementations. Thus, it don't need to be called in every case. Thus, the + * freed memory is wasted until you call #purple_memory_pool_cleanup + * or destroy the @pool. */ void purple_memory_pool_free(PurpleMemoryPool *pool, gpointer mem); /** * purple_memory_pool_cleanup: - * @pool: The memory pool. + * @pool: the memory pool. * * Marks all memory allocated within a memory pool as not used. It may free * resources, but don't have to. @@ -139,14 +184,14 @@ /** * purple_memory_pool_strdup: - * @pool: The memory pool. - * @str: The string to duplicate. + * @pool: the memory pool. + * @str: the string to duplicate. * * Duplicates a string using a memory allocated within a memory pool. If @str is - * %NULL it returns %NULL. The returned string should be freed with g_free() + * %NULL, it returns %NULL. The returned string should be freed with g_free() * when no longer needed. * - * Returns: a newly-allocated copy of @str + * Returns: a newly-allocated copy of @str. */ gchar * purple_memory_pool_strdup(PurpleMemoryPool *pool, const gchar *str);
--- a/libpurple/network.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/network.c Mon Apr 07 20:02:22 2014 +0530 @@ -140,9 +140,9 @@ const char * purple_network_get_local_system_ip(int fd) { - char buffer[1024]; + struct ifreq buffer[100]; + guchar *it, *it_end; static char ip[16]; - char *tmp; struct ifconf ifc; struct ifreq *ifr; struct sockaddr_in *sinptr; @@ -154,21 +154,26 @@ source = socket(PF_INET,SOCK_STREAM, 0); ifc.ifc_len = sizeof(buffer); - ifc.ifc_req = (struct ifreq *)buffer; + ifc.ifc_req = buffer; ioctl(source, SIOCGIFCONF, &ifc); if (fd < 0) close(source); - tmp = buffer; - while (tmp < buffer + ifc.ifc_len) - { - ifr = (struct ifreq *)tmp; - tmp += HX_SIZE_OF_IFREQ(*ifr); + it = (guchar*)buffer; + it_end = it + ifc.ifc_len; + while (it < it_end) { + /* in this case "it" is: + * a) (struct ifreq)-aligned + * b) not aligned, because of OS quirks (see + * _SIZEOF_ADDR_IFREQ), so the OS should deal with it. + */ + ifr = (struct ifreq *)(gpointer)it; + it += HX_SIZE_OF_IFREQ(*ifr); if (ifr->ifr_addr.sa_family == AF_INET) { - sinptr = (struct sockaddr_in *)&ifr->ifr_addr; + sinptr = (struct sockaddr_in *)(gpointer)&ifr->ifr_addr; if (sinptr->sin_addr.s_addr != lhost) { add = ntohl(sinptr->sin_addr.s_addr); @@ -205,21 +210,22 @@ int family = ifa->ifa_addr ? ifa->ifa_addr->sa_family : AF_UNSPEC; char host[INET6_ADDRSTRLEN]; const char *tmp = NULL; + common_sockaddr_t *addr = + (common_sockaddr_t *)(gpointer)ifa->ifa_addr; if ((family != AF_INET && family != AF_INET6) || ifa->ifa_flags & IFF_LOOPBACK) continue; if (family == AF_INET) - tmp = inet_ntop(family, &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr, host, sizeof(host)); + tmp = inet_ntop(family, &addr->in.sin_addr, host, sizeof(host)); else { - struct sockaddr_in6 *sockaddr = (struct sockaddr_in6 *)ifa->ifa_addr; /* Peer-peer link-local communication is a big TODO. I am not sure * how communicating link-local addresses is supposed to work, and * it seems like it would require attempting the cartesian product * of the local and remote interfaces to see if any match (eww). */ - if (!IN6_IS_ADDR_LINKLOCAL(&sockaddr->sin6_addr)) - tmp = inet_ntop(family, &sockaddr->sin6_addr, host, sizeof(host)); + if (!IN6_IS_ADDR_LINKLOCAL(&addr->in6.sin6_addr)) + tmp = inet_ntop(family, &addr->in6.sin6_addr, host, sizeof(host)); } if (tmp != NULL) result = g_list_prepend(result, g_strdup(tmp)); @@ -231,25 +237,28 @@ #else /* HAVE_GETIFADDRS && HAVE_INET_NTOP */ GList *result = NULL; int source = socket(PF_INET,SOCK_STREAM, 0); - char buffer[1024]; - char *tmp; + struct ifreq buffer[100]; + guchar *it, *it_end; struct ifconf ifc; struct ifreq *ifr; ifc.ifc_len = sizeof(buffer); - ifc.ifc_req = (struct ifreq *)buffer; + ifc.ifc_req = buffer; ioctl(source, SIOCGIFCONF, &ifc); close(source); - tmp = buffer; - while (tmp < buffer + ifc.ifc_len) { + it = (guchar*)buffer; + it_end = it + ifc.ifc_len; + while (it < it_end) { char dst[INET_ADDRSTRLEN]; - ifr = (struct ifreq *)tmp; - tmp += HX_SIZE_OF_IFREQ(*ifr); + /* alignment: see purple_network_get_local_system_ip */ + ifr = (struct ifreq *)(gpointer)it; + it += HX_SIZE_OF_IFREQ(*ifr); if (ifr->ifr_addr.sa_family == AF_INET) { - struct sockaddr_in *sinptr = (struct sockaddr_in *)&ifr->ifr_addr; + struct sockaddr_in *sinptr = + (struct sockaddr_in *)(gpointer)&ifr->ifr_addr; inet_ntop(AF_INET, &sinptr->sin_addr, dst, sizeof(dst)); @@ -986,14 +995,14 @@ } if (hosts && g_slist_next(hosts)) { - struct sockaddr *addr = g_slist_next(hosts)->data; + common_sockaddr_t *addr = g_slist_next(hosts)->data; char dst[INET6_ADDRSTRLEN]; - if (addr->sa_family == AF_INET6) { - inet_ntop(addr->sa_family, &((struct sockaddr_in6 *) addr)->sin6_addr, + if (addr->sa.sa_family == AF_INET6) { + inet_ntop(addr->sa.sa_family, &addr->in6.sin6_addr, dst, sizeof(dst)); } else { - inet_ntop(addr->sa_family, &((struct sockaddr_in *) addr)->sin_addr, + inet_ntop(addr->sa.sa_family, &addr->in.sin_addr, dst, sizeof(dst)); }
--- a/libpurple/ntlm.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/ntlm.c Mon Apr 07 20:02:22 2014 +0530 @@ -121,7 +121,7 @@ host_off = sizeof(struct type1_message); dom_off = sizeof(struct type1_message) + hostnamelen; msg = g_malloc0(sizeof(struct type1_message) + hostnamelen + domainlen); - tmsg = (struct type1_message*)msg; + tmsg = (struct type1_message*)(gpointer)msg; tmsg->protocol[0] = 'N'; tmsg->protocol[1] = 'T'; tmsg->protocol[2] = 'L'; @@ -149,19 +149,22 @@ purple_ntlm_parse_type2(const gchar *type2, guint32 *flags) { gsize retlen; - struct type2_message *tmsg; + guchar *buff; + struct type2_message tmsg; static guint8 nonce[8]; - tmsg = (struct type2_message*)purple_base64_decode(type2, &retlen); - if (tmsg != NULL && retlen >= (sizeof(struct type2_message) - 1)) { - memcpy(nonce, tmsg->nonce, 8); + buff = purple_base64_decode(type2, &retlen); + + if (buff != NULL && retlen >= (sizeof(struct type2_message) - 1)) { + memcpy(&tmsg, buff, MIN(retlen, sizeof(tmsg))); + memcpy(nonce, tmsg.nonce, 8); if (flags != NULL) - *flags = GUINT16_FROM_LE(tmsg->flags); + *flags = GUINT16_FROM_LE(tmsg.flags); } else { purple_debug_error("ntlm", "Unable to parse type2 message - returning empty nonce.\n"); memset(nonce, 0, 8); } - g_free(tmsg); + g_free(buff); return nonce; }
--- a/libpurple/plugins/perl/Makefile.am Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/plugins/perl/Makefile.am Mon Apr 07 20:02:22 2014 +0530 @@ -68,7 +68,6 @@ common/SavedStatuses.xs \ common/Server.xs \ common/Signal.xs \ - common/Smiley.xs \ common/Sound.xs \ common/Status.xs \ common/Stringref.xs \
--- a/libpurple/plugins/perl/common/Conversation.xs Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/plugins/perl/common/Conversation.xs Mon Apr 07 20:02:22 2014 +0530 @@ -312,11 +312,6 @@ MODULE = Purple::Conversation PACKAGE = Purple::Conversation PREFIX = purple_conversation_ PROTOTYPES: ENABLE -void -purple_conversation_custom_smiley_close(conv, smile) - Purple::Conversation conv - const char *smile - MODULE = Purple::Conversation PACKAGE = Purple::ChatConversation PREFIX = purple_chat_conversation_ PROTOTYPES: ENABLE
--- a/libpurple/plugins/perl/common/MANIFEST Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/plugins/perl/common/MANIFEST Mon Apr 07 20:02:22 2014 +0530 @@ -27,7 +27,6 @@ SavedStatuses.xs Server.xs Signal.xs -Smiley.xs Sound.xs Status.xs Stringref.xs
--- a/libpurple/plugins/perl/common/Makefile.mingw Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/plugins/perl/common/Makefile.mingw Mon Apr 07 20:02:22 2014 +0530 @@ -69,7 +69,6 @@ SavedStatuses.xs \ Server.xs \ Signal.xs \ - Smiley.xs \ Sound.xs \ Status.xs \ Stringref.xs \
--- a/libpurple/plugins/perl/common/Purple.xs Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/plugins/perl/common/Purple.xs Mon Apr 07 20:02:22 2014 +0530 @@ -31,7 +31,6 @@ PURPLE_PERL_BOOT_PROTO(SavedStatus); PURPLE_PERL_BOOT_PROTO(Serv); PURPLE_PERL_BOOT_PROTO(Signal); -PURPLE_PERL_BOOT_PROTO(Smiley); PURPLE_PERL_BOOT_PROTO(Sound); PURPLE_PERL_BOOT_PROTO(Status); PURPLE_PERL_BOOT_PROTO(Stringref); @@ -72,7 +71,6 @@ PURPLE_PERL_BOOT(SavedStatus); PURPLE_PERL_BOOT(Serv); PURPLE_PERL_BOOT(Signal); - PURPLE_PERL_BOOT(Smiley); PURPLE_PERL_BOOT(Sound); PURPLE_PERL_BOOT(Status); PURPLE_PERL_BOOT(Stringref);
--- a/libpurple/plugins/perl/common/Smiley.xs Thu Apr 03 09:37:53 2014 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -#include "module.h" - -MODULE = Purple::Smiley PACKAGE = Purple::Smiley PREFIX = purple_smiley_ -PROTOTYPES: ENABLE - -Purple::Smiley -purple_smiley_new(img, shortcut) - Purple::StoredImage img - const char * shortcut - -Purple::Smiley -purple_smiley_new_from_file(shortcut, filepath) - const char * shortcut - const char * filepath - -void -purple_smiley_delete(smiley) - Purple::Smiley smiley - -gboolean -purple_smiley_set_shortcut(smiley, shortcut) - Purple::Smiley smiley - const char * shortcut - -void -purple_smiley_set_data(smiley, data, data_len) - Purple::Smiley smiley - guchar * data - size_t data_len - -const char * -purple_smiley_get_shortcut(smiley) - Purple::Smiley smiley - -const char * -purple_smiley_get_checksum(smiley) - Purple::Smiley smiley - -Purple::StoredImage -purple_smiley_get_stored_image(smiley) - Purple::Smiley smiley - -gconstpointer -purple_smiley_get_data(smiley, len) - Purple::Smiley smiley - size_t * len - -const char * -purple_smiley_get_extension(smiley) - Purple::Smiley smiley - - -gchar_own * -purple_smiley_get_full_path(smiley) - Purple::Smiley smiley - - -MODULE = Purple::Smiley PACKAGE = Purple::Smileys PREFIX = purple_smileys_ -PROTOTYPES: ENABLE - -void -purple_smileys_get_all() -PREINIT: - GList *l; -PPCODE: - for (l = purple_smileys_get_all(); l != NULL; l = g_list_delete_link(l, l)) { - XPUSHs(sv_2mortal(purple_perl_bless_object(l->data, "Purple::Smiley"))); - } - -Purple::Smiley -purple_smileys_find_by_shortcut(shortcut) - const char * shortcut - -Purple::Smiley -purple_smileys_find_by_checksum(checksum) - const char * checksum - -const char * -purple_smileys_get_storing_dir() -
--- a/libpurple/plugins/perl/common/typemap Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/plugins/perl/common/typemap Mon Apr 07 20:02:22 2014 +0530 @@ -135,7 +135,6 @@ Purple::Presence T_PurpleObj Purple::AccountPresence T_PurpleObj Purple::BuddyPresence T_PurpleObj -Purple::Smiley T_PurpleObj Purple::Status T_PurpleObj Purple::StatusAttr T_PurpleObj Purple::StatusPrimitive T_IV
--- a/libpurple/protocols/bonjour/mdns_avahi.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/bonjour/mdns_avahi.c Mon Apr 07 20:02:22 2014 +0530 @@ -136,7 +136,7 @@ res = g_slist_find_custom(b_impl->resolvers, r, _find_resolver_data_by_resolver); if (res != NULL) { rd = res->data; - b_impl->resolvers = g_slist_remove_link(b_impl->resolvers, res); + b_impl->resolvers = g_slist_delete_link(b_impl->resolvers, res); /* We've already freed the resolver */ rd->resolver = NULL;
--- a/libpurple/protocols/gg/gg.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/gg/gg.c Mon Apr 07 20:02:22 2014 +0530 @@ -865,7 +865,7 @@ } static void ggp_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, - PurpleGroup *group) + PurpleGroup *group) { GGPInfo *info = purple_connection_get_protocol_data(gc);
--- a/libpurple/protocols/gg/lib/common.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/gg/lib/common.c Mon Apr 07 20:02:22 2014 +0530 @@ -27,9 +27,7 @@ #include "network.h" #include "strman.h" -#ifdef sun -# include <sys/filio.h> -#endif +#include "fileio.h" #include <errno.h> #include <stdarg.h> @@ -253,10 +251,12 @@ struct in_addr *a = addr; struct sockaddr_in myaddr; - gg_debug(GG_DEBUG_FUNCTION, "** gg_connect(%s, %d, %d);\n", inet_ntoa(*a), port, async); + gg_debug(GG_DEBUG_FUNCTION, "** gg_connect(%s, %d, %d);\n", + inet_ntoa(*a), port, async); if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) { - gg_debug(GG_DEBUG_MISC, "// gg_connect() socket() failed (errno=%d, %s)\n", errno, strerror(errno)); + gg_debug(GG_DEBUG_MISC, "// gg_connect() socket() failed " + "(errno=%d, %s)\n", errno, strerror(errno)); return -1; } @@ -266,7 +266,8 @@ myaddr.sin_addr.s_addr = gg_local_ip; if (bind(sock, (struct sockaddr *) &myaddr, sizeof(myaddr)) == -1) { - gg_debug(GG_DEBUG_MISC, "// gg_connect() bind() failed (errno=%d, %s)\n", errno, strerror(errno)); + gg_debug(GG_DEBUG_MISC, "// gg_connect() bind() failed " + "(errno=%d, %s)\n", errno, strerror(errno)); errno2 = errno; close(sock); errno = errno2; @@ -300,7 +301,8 @@ errno = errno2; return -1; } - gg_debug(GG_DEBUG_MISC, "// gg_connect() connect() in progress\n"); + gg_debug(GG_DEBUG_MISC, + "// gg_connect() connect() in progress\n"); } return sock; @@ -575,19 +577,23 @@ if (!gg_proxy_enabled || !gg_proxy_username || !gg_proxy_password) return NULL; - if (!(tmp = malloc((tmp_size = strlen(gg_proxy_username) + strlen(gg_proxy_password) + 2)))) + tmp_size = strlen(gg_proxy_username) + strlen(gg_proxy_password) + 2; + tmp = malloc(tmp_size); + if (!tmp) return NULL; snprintf(tmp, tmp_size, "%s:%s", gg_proxy_username, gg_proxy_password); - if (!(enc = gg_base64_encode(tmp))) { + enc = gg_base64_encode(tmp); + if (!enc) { free(tmp); return NULL; } free(tmp); - if (!(out = malloc(strlen(enc) + 40))) { + out = malloc(strlen(enc) + 40); + if (!out) { free(enc); return NULL; } @@ -831,12 +837,12 @@ char ** gg_strarr_dup(char **strarr) { + size_t i, len, size; + char **it, **out; + if (strarr == NULL) return NULL; - size_t i, len, size; - char **it, **out; - len = 0; for (it = strarr; *it != NULL; it++) len++;
--- a/libpurple/protocols/gg/lib/config.h Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/gg/lib/config.h Mon Apr 07 20:02:22 2014 +0530 @@ -5,7 +5,7 @@ /* libpurple's config */ #include <config.h> -#define GG_LIBGADU_VERSION "1.12.0-dev" +#define GG_LIBGADU_VERSION "1.12.0-rc2" /* Defined if libgadu was compiled for bigendian machine. */ #undef GG_CONFIG_BIGENDIAN
--- a/libpurple/protocols/gg/lib/dcc7.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/gg/lib/dcc7.c Mon Apr 07 20:02:22 2014 +0530 @@ -664,7 +664,10 @@ /* Uwaga: To nie jest ciąg kończony zerem. * Note: This is not a null-terminated string. */ - strncpy((char*) s.filename, (char*) tmp->filename, sizeof(s.filename)); + GG_STATIC_ASSERT( + sizeof(s.filename) == sizeof(tmp->filename) - 1, + filename_sizes_does_not_match); + memcpy((char*)s.filename, (char*)tmp->filename, sizeof(s.filename)); tmp->state = GG_STATE_WAITING_FOR_ACCEPT; tmp->timeout = GG_DCC7_TIMEOUT_FILE_ACK;
--- a/libpurple/protocols/gg/lib/events.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/gg/lib/events.c Mon Apr 07 20:02:22 2014 +0530 @@ -588,6 +588,7 @@ int count = -1; int res; unsigned int i; + struct in_addr *addrs; res = gg_resolver_recv(sess->fd, buf, sizeof(buf)); @@ -622,8 +623,10 @@ /* Sprawdź, czy mamy listę zakończoną INADDR_NONE */ + addrs = (struct in_addr *)(void *)sess->recv_buf; + for (i = 0; i < sess->recv_done / sizeof(struct in_addr); i++) { - if (((struct in_addr*) sess->recv_buf)[i].s_addr == INADDR_NONE) { + if (addrs[i].s_addr == INADDR_NONE) { count = i; break; } @@ -661,7 +664,7 @@ if (i > 0) len += 2; - len += strlen(inet_ntoa(((struct in_addr*) sess->recv_buf)[i])); + len += strlen(inet_ntoa(addrs[i])); } list = malloc(len + 1); @@ -675,7 +678,7 @@ if (i > 0) strcat(list, ", "); - strcat(list, inet_ntoa(((struct in_addr*) sess->recv_buf)[i])); + strcat(list, inet_ntoa(addrs[i])); } gg_debug_session(sess, GG_DEBUG_DUMP, "// gg_watch_fd() resolved: %s\n", list); @@ -687,7 +690,7 @@ gg_close(sess); sess->state = next_state; - sess->resolver_result = (struct in_addr*) sess->recv_buf; + sess->resolver_result = addrs; sess->resolver_count = count; sess->resolver_index = 0; sess->recv_buf = NULL; @@ -1239,7 +1242,9 @@ struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state) { +#if defined(GG_CONFIG_HAVE_GNUTLS) || defined(GG_CONFIG_HAVE_OPENSSL) int valid_hostname = 0; +#endif #ifdef GG_CONFIG_HAVE_GNUTLS unsigned int status; @@ -1436,6 +1441,7 @@ #endif +#if defined(GG_CONFIG_HAVE_GNUTLS) || defined(GG_CONFIG_HAVE_OPENSSL) if (!valid_hostname) { gg_debug_session(sess, GG_DEBUG_MISC, "// WARNING! unable to verify hostname\n"); @@ -1450,6 +1456,7 @@ sess->timeout = GG_DEFAULT_TIMEOUT; return GG_ACTION_WAIT; +#endif } static gg_action_t gg_handle_reading_proxy_gg(struct gg_session *sess,
--- a/libpurple/protocols/gg/lib/handlers.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/gg/lib/handlers.c Mon Apr 07 20:02:22 2014 +0530 @@ -27,10 +27,8 @@ */ #include <ctype.h> -#ifdef sun -# include <sys/filio.h> -#endif - + +#include "fileio.h" #include "network.h" #include "strman.h" #include "libgadu.h"
--- a/libpurple/protocols/gg/lib/internal.h Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/gg/lib/internal.h Mon Apr 07 20:02:22 2014 +0530 @@ -28,17 +28,23 @@ #ifdef _WIN32 # define GG_SIZE_FMT "Iu" +# define _GG_INT64_MODIFIER "I64" +#elif defined(_LP64) +# define GG_SIZE_FMT "zu" +# define _GG_INT64_MODIFIER "l" #else # define GG_SIZE_FMT "zu" +# define _GG_INT64_MODIFIER "ll" #endif + #ifndef PRIu64 -# define PRIu64 "llu" +# define PRIu64 _GG_INT64_MODIFIER "u" #endif #ifndef PRIx64 -# define PRIx64 "llx" +# define PRIx64 _GG_INT64_MODIFIER "x" #endif #ifndef PRId64 -# define PRId64 "lld" +# define PRId64 _GG_INT64_MODIFIER "d" #endif #define GG_LOGIN_PARAMS_HAS_FIELD(glp, member) \ @@ -55,6 +61,11 @@ # define GG_CDECL #endif +#define GG_STATIC_ASSERT(condition, message) \ + { typedef char static_assertion_failed_ ## message \ + [(condition) ? 1 : -1]; static_assertion_failed_ ## message dummy; \ + (void)dummy; } + struct gg_dcc7_relay { uint32_t addr; uint16_t port;
--- a/libpurple/protocols/gg/lib/libgadu.h Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/gg/lib/libgadu.h Mon Apr 07 20:02:22 2014 +0530 @@ -283,7 +283,7 @@ int initial_status; /**< Początkowy status */ int status; /**< Aktualny status */ - char *recv_buf; /**< Bufor na odbierany pakiety */ + char *recv_buf; /**< Bufor na odbierane pakiety. Wskaźnik zawsze maksymalnie wyrównany, tak jak w wyniku działania \c malloc(). */ int recv_done; /**< Liczba wczytanych bajtów pakietu */ int recv_left; /**< Liczba pozostałych do wczytania bajtów pakietu */
--- a/libpurple/protocols/gg/lib/network.h Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/gg/lib/network.h Mon Apr 07 20:02:22 2014 +0530 @@ -31,6 +31,8 @@ #ifdef _WIN32 # include <ws2tcpip.h> # include <winsock2.h> +# include <stdlib.h> +# include <stdio.h> # include <errno.h> /* Obecnie na Win32 tylko MSVC definiuje te typy błędów. Na wypadek, gdyby * jednak Cygwin bądź MinGW zaczęły je definiować, używamy bardziej ogólnych
--- a/libpurple/protocols/gg/lib/protobuf-c.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/gg/lib/protobuf-c.c Mon Apr 07 20:02:22 2014 +0530 @@ -919,7 +919,7 @@ const void *member, uint8_t *out) { - char *array = * (char * const *) member; + void *array = * (char * const *) member; unsigned i; if (field->packed) { @@ -1024,7 +1024,7 @@ for (i = 0; i < count; i++) { rv += required_field_pack (field, array, out + rv); - array += siz; + array = ((char*)array) + siz; } return rv; } @@ -1363,10 +1363,11 @@ } return rv; -goto no_packing_needed; +#if IS_LITTLE_ENDIAN no_packing_needed: buffer->append (buffer, rv, array); return rv; +#endif } static size_t @@ -1901,7 +1902,7 @@ const ProtobufCFieldDescriptor *field = scanned_member->field; size_t *p_n = STRUCT_MEMBER_PTR(size_t, message, field->quantifier_offset); size_t siz = sizeof_elt_in_repeated_array (field->type); - char *array = *(char**)member + siz * (*p_n); + void *array = *(char**)member + siz * (*p_n); const uint8_t *at = scanned_member->data + scanned_member->length_prefix_len; size_t rem = scanned_member->len - scanned_member->length_prefix_len; size_t count = 0; @@ -2028,11 +2029,12 @@ *p_n += count; return TRUE; -goto no_unpacking_needed; +#if IS_LITTLE_ENDIAN no_unpacking_needed: memcpy (array, at, count * siz); *p_n += count; return TRUE; +#endif } static protobuf_c_boolean
--- a/libpurple/protocols/gg/lib/resolver.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/gg/lib/resolver.c Mon Apr 07 20:02:22 2014 +0530 @@ -474,7 +474,8 @@ if (force) kill(data->pid, SIGKILL); - waitpid(data->pid, NULL, WNOHANG); + /* we don't care about child's exit status, just want to clean it up */ + (void)waitpid(data->pid, NULL, WNOHANG); free(data); } @@ -817,10 +818,10 @@ return 0; } -#ifdef _WIN32 +#ifdef GG_CONFIG_HAVE_PTHREAD + type = GG_RESOLVER_PTHREAD; +#elif defined(_WIN32) type = GG_RESOLVER_WIN32; -#elif defined(GG_CONFIG_HAVE_PTHREAD) && defined(GG_CONFIG_PTHREAD_DEFAULT) - type = GG_RESOLVER_PTHREAD; #elif defined(GG_CONFIG_HAVE_FORK) type = GG_RESOLVER_FORK; #endif @@ -944,10 +945,10 @@ return 0; } -#ifdef _WIN32 +#ifdef GG_CONFIG_HAVE_PTHREAD + type = GG_RESOLVER_PTHREAD; +#elif defined(_WIN32) type = GG_RESOLVER_WIN32; -#elif defined(GG_CONFIG_HAVE_PTHREAD) && defined(GG_CONFIG_PTHREAD_DEFAULT) - type = GG_RESOLVER_PTHREAD; #elif defined(GG_CONFIG_HAVE_FORK) type = GG_RESOLVER_FORK; #endif
--- a/libpurple/protocols/gg/lib/sha1.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/gg/lib/sha1.c Mon Apr 07 20:02:22 2014 +0530 @@ -88,13 +88,13 @@ /* blk0() and blk() perform the initial expand. */ /* I got the idea of expanding during the round function from SSLeay */ #ifndef GG_CONFIG_BIGENDIAN -#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) \ - |(rol(block->l[i], 8) & 0x00FF00FF)) +#define blk0(i) (block.l[i] = (rol(block.l[i], 24) & 0xFF00FF00) \ + |(rol(block.l[i], 8) & 0x00FF00FF)) #else -#define blk0(i) block->l[i] +#define blk0(i) block.l[i] #endif -#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ - ^block->l[(i+2)&15]^block->l[i&15], 1)) +#define blk(i) (block.l[i&15] = rol(block.l[(i+13)&15]^block.l[(i+8)&15] \ + ^block.l[(i+2)&15]^block.l[i&15], 1)) /* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ /* style:comma:start-ignore */ @@ -115,10 +115,8 @@ unsigned char c[64]; uint32_t l[16]; } CHAR64LONG16; -CHAR64LONG16* block; -static unsigned char workspace[64]; - block = (CHAR64LONG16*)workspace; - memcpy(block, buffer, 64); + CHAR64LONG16 block; + memcpy(&block, buffer, sizeof(block)); /* Copy context->state[] to working vars */ a = state[0]; b = state[1];
--- a/libpurple/protocols/gg/roster.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/gg/roster.c Mon Apr 07 20:02:22 2014 +0530 @@ -927,7 +927,7 @@ while (group_buddies) { ggp_roster_set_synchronized(gc, group_buddies->data, FALSE); - group_buddies = g_list_remove_link(group_buddies, + group_buddies = g_list_delete_link(group_buddies, group_buddies); } return TRUE;
--- a/libpurple/protocols/irc/irc.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/irc/irc.c Mon Apr 07 20:02:22 2014 +0530 @@ -225,7 +225,7 @@ break; g_string_append_printf(string, "%s ", ib->name); ib->new_online_status = FALSE; - irc->buddies_outstanding = g_list_remove_link(irc->buddies_outstanding, lp); + irc->buddies_outstanding = g_list_delete_link(irc->buddies_outstanding, lp); } if (string->len) {
--- a/libpurple/protocols/irc/msgs.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/irc/msgs.c Mon Apr 07 20:02:22 2014 +0530 @@ -1466,7 +1466,6 @@ PurpleAccount *account = irc->account; PurpleConnection *gc = purple_account_get_connection(account); - gboolean plaintext; gboolean again = FALSE; /* Set up security properties and options */ @@ -1474,6 +1473,8 @@ secprops.security_flags = SASL_SEC_NOANONYMOUS; if (!irc->gsc) { + gboolean plaintext; + secprops.max_ssf = -1; secprops.maxbufsize = 4096; plaintext = purple_account_get_bool(account, "auth_plain_in_clear", FALSE); @@ -1482,7 +1483,6 @@ } else { secprops.max_ssf = 0; secprops.maxbufsize = 0; - plaintext = TRUE; } secprops.property_names = 0;
--- a/libpurple/protocols/jabber/caps.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/jabber/caps.c Mon Apr 07 20:02:22 2014 +0530 @@ -505,6 +505,13 @@ info = value; } else { JabberCapsTuple *n_key = (JabberCapsTuple *)&info->tuple; + + if (G_UNLIKELY(n_key == NULL)) { + g_warn_if_reached(); + jabber_caps_client_info_destroy(info); + return; + } + n_key->node = userdata->node; n_key->ver = userdata->ver; n_key->hash = userdata->hash;
--- a/libpurple/protocols/jabber/message.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/jabber/message.c Mon Apr 07 20:02:22 2014 +0530 @@ -24,6 +24,8 @@ #include "debug.h" #include "notify.h" +#include "smiley-custom.h" +#include "smiley-parser.h" #include "server.h" #include "util.h" #include "adhoccommands.h" @@ -437,7 +439,9 @@ out = g_string_append(out, safe_alt); g_free(safe_alt); } else { - out = g_string_append(out, alt); + gchar *alt_escaped = g_markup_escape_text(alt, -1); + out = g_string_append(out, alt_escaped); + g_free(alt_escaped); } } else { out = g_string_append(out, src); @@ -483,19 +487,61 @@ } static void -jabber_message_request_data_cb(JabberData *data, gchar *alt, - gpointer userdata) +jabber_message_remote_smiley_got(JabberData *data, gchar *alt, gpointer _smiley) { - PurpleConversation *conv = PURPLE_CONVERSATION(userdata); + PurpleRemoteSmiley *smiley = _smiley; + + g_free(alt); /* we really don't need it */ if (data) { - purple_conversation_custom_smiley_write(conv, alt, - jabber_data_get_data(data), - jabber_data_get_size(data)); - purple_conversation_custom_smiley_close(conv, alt); + purple_debug_info("jabber", + "smiley data retrieved successfully"); + purple_remote_smiley_write(smiley, jabber_data_get_data(data), + jabber_data_get_size(data)); + purple_remote_smiley_close(smiley); + } else { + purple_debug_error("jabber", "failed retrieving smiley data"); + purple_remote_smiley_failed(smiley); } - g_free(alt); + g_object_unref(smiley); +} + +static void +jabber_message_remote_smiley_add(JabberStream *js, PurpleConversation *conv, + const gchar *from, const gchar *shortcut, const gchar *cid) +{ + PurpleRemoteSmiley *smiley; + const JabberData *jdata; + + purple_debug_misc("jabber", "about to add remote smiley %s to the conv", + shortcut); + + smiley = purple_conversation_add_remote_smiley(conv, shortcut); + if (!smiley) { + purple_debug_misc("jabber", "smiley was already present"); + return; + } + + /* TODO: cache lookup by "cid" */ + + jdata = jabber_data_find_remote_by_cid(js, from, cid); + if (jdata) { + purple_debug_info("jabber", "smiley data is already known"); + + purple_remote_smiley_write(smiley, jabber_data_get_data(jdata), + jabber_data_get_size(jdata)); + purple_remote_smiley_close(smiley); + } else { + gchar *alt = g_strdup(shortcut); /* it it really necessary? */ + + purple_debug_info("jabber", "smiley data is unknown, " + "need to request it"); + + g_object_ref(smiley); + jabber_data_request(js, cid, from, alt, FALSE, + jabber_message_remote_smiley_got, smiley); + } } void jabber_message_parse(JabberStream *js, PurpleXmlNode *packet) @@ -600,7 +646,7 @@ const PurpleConnection *gc = js->gc; PurpleAccount *account = purple_connection_get_account(gc); PurpleConversation *conv = NULL; - GList *smiley_refs = NULL; + GList *smiley_refs = NULL, *it; gchar *reformatted_xhtml; if (purple_account_get_bool(account, "custom_smileys", TRUE)) { @@ -652,37 +698,19 @@ /* note: if there were no smileys in the incoming message, or if receiving custom smileys is turned off, smiley_refs will be NULL */ - for (; conv && smiley_refs ; smiley_refs = g_list_delete_link(smiley_refs, smiley_refs)) { - JabberSmileyRef *ref = (JabberSmileyRef *) smiley_refs->data; - const gchar *cid = ref->cid; - gchar *alt = g_strdup(ref->alt); + for (it = smiley_refs; it; it = g_list_next(it)) { + JabberSmileyRef *ref = it->data; - purple_debug_info("jabber", - "about to add custom smiley %s to the conv\n", alt); - if (purple_conversation_custom_smiley_add(conv, alt, "cid", cid, - TRUE)) { - const JabberData *data = - jabber_data_find_remote_by_cid(js, from, cid); - /* if data is already known, we write it immediatly */ - if (data) { - purple_debug_info("jabber", - "data is already known\n"); - purple_conversation_custom_smiley_write(conv, alt, - jabber_data_get_data(data), - jabber_data_get_size(data)); - purple_conversation_custom_smiley_close(conv, alt); - } else { - /* we need to request the smiley (data) */ - purple_debug_info("jabber", - "data is unknown, need to request it\n"); - jabber_data_request(js, cid, from, alt, FALSE, - jabber_message_request_data_cb, conv); - } + if (conv) { + jabber_message_remote_smiley_add(js, + conv, from, ref->alt, ref->cid); } + g_free(ref->cid); g_free(ref->alt); g_free(ref); } + g_list_free(smiley_refs); /* Convert all newlines to whitespace. Technically, even regular, non-XML HTML is supposed to ignore newlines, but Pidgin has, as convention * treated \n as a newline for compatibility with other protocols @@ -821,80 +849,6 @@ } } -static GList * -jabber_message_xhtml_find_smileys(const char *xhtml) -{ - GList *smileys = purple_smileys_get_all(); - GList *found_smileys = NULL; - - for (; smileys ; smileys = g_list_delete_link(smileys, smileys)) { - PurpleSmiley *smiley = (PurpleSmiley *) smileys->data; - - const gchar *shortcut = purple_smiley_get_shortcut(smiley); - const gssize len = strlen(shortcut); - - gchar *escaped = g_markup_escape_text(shortcut, len); - const char *pos = strstr(xhtml, escaped); - - if (pos) { - found_smileys = g_list_append(found_smileys, smiley); - } - - g_free(escaped); - } - - return found_smileys; -} - -static gchar * -jabber_message_get_smileyfied_xhtml(const gchar *xhtml, const GList *smileys) -{ - /* create XML element for all smileys (img tags) */ - GString *result = g_string_new(NULL); - int pos = 0; - int length = strlen(xhtml); - - while (pos < length) { - const GList *iterator; - gboolean found_smiley = FALSE; - - for (iterator = smileys ; iterator ; - iterator = g_list_next(iterator)) { - const PurpleSmiley *smiley = (PurpleSmiley *) iterator->data; - const gchar *shortcut = purple_smiley_get_shortcut(smiley); - const gssize len = strlen(shortcut); - gchar *escaped = g_markup_escape_text(shortcut, len); - - if (g_str_has_prefix(&(xhtml[pos]), escaped)) { - /* we found the current smiley at this position */ - const JabberData *data = - jabber_data_find_local_by_alt(shortcut); - PurpleXmlNode *img = jabber_data_get_xhtml_im(data, shortcut); - int len; - gchar *img_text = purple_xmlnode_to_str(img, &len); - - found_smiley = TRUE; - result = g_string_append(result, img_text); - g_free(img_text); - pos += strlen(escaped); - g_free(escaped); - purple_xmlnode_free(img); - break; - } else { - /* cleanup from the before the next round... */ - g_free(escaped); - } - } - if (!found_smiley) { - /* there was no smiley here, just copy one byte */ - result = g_string_append_c(result, xhtml[pos]); - pos++; - } - } - - return g_string_free(result, FALSE); -} - static gboolean jabber_conv_support_custom_smileys(JabberStream *js, PurpleConversation *conv, @@ -926,72 +880,120 @@ } } +static gboolean +jabber_message_smileyify_cb(GString *out, PurpleSmiley *smiley, + PurpleConversation *_empty, gpointer _unused) +{ + const gchar *shortcut; + const JabberData *data; + PurpleXmlNode *smiley_node; + gchar *node_xml; + + shortcut = purple_smiley_get_shortcut(smiley); + data = jabber_data_find_local_by_alt(shortcut); + + if (!data) + return FALSE; + + smiley_node = jabber_data_get_xhtml_im(data, shortcut); + node_xml = purple_xmlnode_to_str(smiley_node, NULL); + + g_string_append(out, node_xml); + + purple_xmlnode_free(smiley_node); + g_free(node_xml); + + return TRUE; +} + static char * jabber_message_smileyfy_xhtml(JabberMessage *jm, const char *xhtml) { PurpleAccount *account = purple_connection_get_account(jm->js->gc); - PurpleConversation *conv = - purple_conversations_find_with_account(jm->to, - account); + GList *found_smileys, *it, *it_next; + PurpleConversation *conv; + gboolean has_too_large_smiley = FALSE; + gchar *smileyfied_xhtml = NULL; - if (jabber_conv_support_custom_smileys(jm->js, conv, jm->to)) { - GList *found_smileys = jabber_message_xhtml_find_smileys(xhtml); + conv = purple_conversations_find_with_account(jm->to, account); - if (found_smileys) { - gchar *smileyfied_xhtml = NULL; - const GList *iterator; - GList *valid_smileys = NULL; - gboolean has_too_large_smiley = FALSE; + if (!jabber_conv_support_custom_smileys(jm->js, conv, jm->to)) + return NULL; - for (iterator = found_smileys; iterator ; - iterator = g_list_next(iterator)) { - PurpleSmiley *smiley = (PurpleSmiley *) iterator->data; - const gchar *shortcut = purple_smiley_get_shortcut(smiley); - const JabberData *data = - jabber_data_find_local_by_alt(shortcut); - PurpleStoredImage *image = purple_smiley_get_stored_image(smiley); + found_smileys = purple_smiley_find(purple_smiley_custom_get_list(), + xhtml, TRUE); + if (!found_smileys) + return NULL; - if (purple_imgstore_get_size(image) <= JABBER_DATA_MAX_SIZE) { - /* the object has not been sent before */ - if (!data) { - const gchar *ext = purple_imgstore_get_extension(image); - JabberStream *js = jm->js; + for (it = found_smileys; it; it = it_next) { + PurpleSmiley *smiley = it->data; + PurpleStoredImage *smiley_image; + gboolean valid = TRUE; - JabberData *new_data = - jabber_data_create_from_data(purple_imgstore_get_data(image), - purple_imgstore_get_size(image), - jabber_message_get_mimetype_from_ext(ext), FALSE, js); - purple_debug_info("jabber", - "cache local smiley alt = %s, cid = %s\n", - shortcut, jabber_data_get_cid(new_data)); - jabber_data_associate_local(new_data, shortcut); - } - valid_smileys = g_list_append(valid_smileys, smiley); - } else { - has_too_large_smiley = TRUE; - purple_debug_warning("jabber", "Refusing to send smiley %s " - "(too large, max is %d)\n", - purple_smiley_get_shortcut(smiley), - JABBER_DATA_MAX_SIZE); - } - } + it_next = g_list_next(it); - if (has_too_large_smiley) { - purple_conversation_write(conv, NULL, - _("A custom smiley in the message is too large to send."), - PURPLE_MESSAGE_ERROR, time(NULL)); - } + smiley_image = purple_smiley_get_image(smiley); + if (!smiley_image) { + valid = FALSE; + purple_debug_warning("jabber", "broken smiley %s", + purple_smiley_get_shortcut(smiley)); + } else if (purple_imgstore_get_size(smiley_image) > + JABBER_DATA_MAX_SIZE) + { + has_too_large_smiley = TRUE; + valid = FALSE; + purple_debug_warning("jabber", "Refusing to send " + "smiley %s (too large, max is %d)", + purple_smiley_get_shortcut(smiley), + JABBER_DATA_MAX_SIZE); + } - smileyfied_xhtml = - jabber_message_get_smileyfied_xhtml(xhtml, valid_smileys); - g_list_free(found_smileys); - g_list_free(valid_smileys); - - return smileyfied_xhtml; - } + if (!valid) + found_smileys = g_list_delete_link(found_smileys, it); } - return NULL; + if (has_too_large_smiley) { + purple_conversation_write(conv, NULL, + _("A custom smiley in the message is too large to send."), + PURPLE_MESSAGE_ERROR, time(NULL)); + } + + if (!found_smileys) + return NULL; + + for (it = found_smileys; it; it = g_list_next(it)) { + PurpleSmiley *smiley = it->data; + PurpleStoredImage *smiley_image; + const gchar *shortcut = purple_smiley_get_shortcut(smiley); + const gchar *mimetype; + JabberData *jdata; + + /* the object has been sent before */ + if (jabber_data_find_local_by_alt(shortcut)) + continue; + + smiley_image = purple_smiley_get_image(smiley); + g_assert(smiley_image != NULL); + + mimetype = jabber_message_get_mimetype_from_ext( + purple_imgstore_get_extension(smiley_image)); + + jdata = jabber_data_create_from_data( + purple_imgstore_get_data(smiley_image), + purple_imgstore_get_size(smiley_image), + mimetype, FALSE, jm->js); + + purple_debug_info("jabber", "cache local smiley alt=%s, cid=%s", + shortcut, jabber_data_get_cid(jdata)); + jabber_data_associate_local(jdata, shortcut); + } + + g_list_free(found_smileys); + + smileyfied_xhtml = purple_smiley_parse_custom(xhtml, + jabber_message_smileyify_cb, NULL); + + return smileyfied_xhtml; } void jabber_message_send(JabberMessage *jm)
--- a/libpurple/protocols/msn/contact.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/msn/contact.c Mon Apr 07 20:02:22 2014 +0530 @@ -698,7 +698,6 @@ g_free(mobile_number); g_free(alias); passport = Name = uid = type = mobile_number = alias = NULL; - mobile = FALSE; if (!(contactId = purple_xmlnode_get_child(contactNode,"contactId")) || !(contactInfo = purple_xmlnode_get_child(contactNode, "contactInfo"))
--- a/libpurple/protocols/msn/msg.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/msn/msg.c Mon Apr 07 20:02:22 2014 +0530 @@ -897,25 +897,31 @@ } static void -got_emoticon(MsnSlpCall *slpcall, - const guchar *data, gsize size) +got_emoticon(MsnSlpCall *slpcall, const guchar *data, gsize size) { PurpleConversation *conv; + PurpleRemoteSmiley *smiley; MsnSwitchBoard *swboard; + const gchar *shortcut; swboard = slpcall->slplink->swboard; conv = swboard->conv; + shortcut = slpcall->data_info; - if (conv) { - /* FIXME: it would be better if we wrote the data as we received it - instead of all at once, calling write multiple times and - close once at the very end - */ - purple_conversation_custom_smiley_write(conv, slpcall->data_info, data, size); - purple_conversation_custom_smiley_close(conv, slpcall->data_info ); - } - if (purple_debug_is_verbose()) - purple_debug_info("msn", "Got smiley: %s\n", slpcall->data_info); + purple_debug_info("msn", "got smiley: %s", shortcut); + + if (!conv) + return; + + smiley = purple_conversation_get_remote_smiley(conv, shortcut); + g_return_if_fail(smiley); + + /* FIXME: it would be better if we wrote the data as we received it + * instead of all at once, calling write multiple times and close once + * at the very end. + */ + purple_remote_smiley_write(smiley, data, size); + purple_remote_smiley_close(smiley); } void msn_emoticon_msg(MsnCmdProc *cmdproc, MsnMessage *msg) @@ -926,7 +932,7 @@ MsnObject *obj; char **tokens; char *smile, *body_str; - const char *body, *who, *sha1; + const char *body, *who; /*, *sha1;*/ guint tok; size_t body_len; @@ -952,6 +958,8 @@ g_free(body_str); for (tok = 0; tok < 9; tok += 2) { + PurpleRemoteSmiley *smiley; + if (tokens[tok] == NULL || tokens[tok + 1] == NULL) { break; } @@ -963,7 +971,9 @@ break; who = msn_object_get_creator(obj); +#if 0 sha1 = msn_object_get_sha1(obj); +#endif slplink = msn_session_get_slplink(session, who); if (slplink->swboard != swboard) { @@ -982,21 +992,28 @@ /* If the conversation doesn't exist then this is a custom smiley * used in the first message in a MSN conversation: we need to create * the conversation now, otherwise the custom smiley won't be shown. - * This happens because every GtkIMHtml has its own smiley tree: if - * the conversation doesn't exist then we cannot associate the new - * smiley with its GtkIMHtml widget. */ + * This happens because every PurpleConversation has its own smiley + * tree: if the conversation doesn't exist then we cannot associate + * the new smiley with its PurpleConversation. */ if (!conv) { conv = PURPLE_CONVERSATION(purple_im_conversation_new(session->account, who)); } - if (purple_conversation_custom_smiley_add(conv, smile, "sha1", sha1, TRUE)) { + smiley = purple_conversation_add_remote_smiley(conv, smile); + if (smiley) { /* if not - it was already present */ + /* TODO: cache lookup by "sha1" */ + + /* XXX: maybe handle end_cb and smiley download failures? */ + purple_debug_info("msn", "requesting smiley: %s", smile); msn_slplink_request_object(slplink, smile, got_emoticon, NULL, obj); } msn_object_destroy(obj, FALSE); obj = NULL; who = NULL; +#if 0 sha1 = NULL; +#endif } g_strfreev(tokens); }
--- a/libpurple/protocols/msn/msn.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/msn/msn.c Mon Apr 07 20:02:22 2014 +0530 @@ -37,6 +37,8 @@ #include "prefs.h" #include "session.h" #include "smiley.h" +#include "smiley-custom.h" +#include "smiley-parser.h" #include "state.h" #include "util.h" #include "cmds.h" @@ -1469,38 +1471,29 @@ static GSList* msn_msg_grab_emoticons(const char *msg, const char *username) { - GSList *list; - GList *smileys; - PurpleSmiley *smiley; - PurpleStoredImage *img; - char *ptr; + GSList *list = NULL; + GList *smileys, *it; MsnEmoticon *emoticon; - int length; - - list = NULL; - smileys = purple_smileys_get_all(); - length = strlen(msg); - - for (; smileys; smileys = g_list_delete_link(smileys, smileys)) { - smiley = smileys->data; - - ptr = g_strstr_len(msg, length, purple_smiley_get_shortcut(smiley)); - - if (!ptr) - continue; - - img = purple_smiley_get_stored_image(smiley); + + smileys = purple_smiley_find(purple_smiley_custom_get_list(), + msg, FALSE); + + for (it = smileys; it; it = g_list_next(it)) { + PurpleSmiley *smiley = it->data; + PurpleStoredImage *img; + + img = purple_smiley_get_image(smiley); emoticon = g_new0(MsnEmoticon, 1); emoticon->smile = g_strdup(purple_smiley_get_shortcut(smiley)); emoticon->ps = smiley; emoticon->obj = msn_object_new_from_image(img, - purple_imgstore_get_filename(img), - username, MSN_OBJECT_EMOTICON); - - purple_imgstore_unref(img); + purple_smiley_get_path(smiley), + username, MSN_OBJECT_EMOTICON); + list = g_slist_prepend(list, emoticon); } + g_list_free(smileys); return list; } @@ -2026,9 +2019,6 @@ char *msgformat; char *msgtext; size_t msglen; - MsnEmoticon *smile; - GSList *smileys; - GString *emoticons = NULL; account = purple_connection_get_account(gc); session = purple_connection_get_protocol_data(gc); @@ -2057,36 +2047,13 @@ msg = msn_message_new_plain(msgtext); msn_message_set_header(msg, "X-MMS-IM-Format", msgformat); - smileys = msn_msg_grab_emoticons(msg->body, username); - while (smileys) { - smile = (MsnEmoticon *)smileys->data; - emoticons = msn_msg_emoticon_add(emoticons, smile); - if (purple_conversation_custom_smiley_add(swboard->conv, smile->smile, - "sha1", purple_smiley_get_checksum(smile->ps), - FALSE)) { - gconstpointer data; - size_t len; - data = purple_smiley_get_data(smile->ps, &len); - purple_conversation_custom_smiley_write(swboard->conv, smile->smile, data, len); - purple_conversation_custom_smiley_close(swboard->conv, smile->smile); - } - msn_emoticon_destroy(smile); - smileys = g_slist_delete_link(smileys, smileys); - } - - if (emoticons) { - msn_send_emoticons(swboard, emoticons); - g_string_free(emoticons, TRUE); - } - msn_switchboard_send_msg(swboard, msg, FALSE); msn_message_unref(msg); g_free(msgformat); g_free(msgtext); - purple_serv_got_chat_in(gc, id, purple_account_get_username(account), flags, - message, time(NULL)); + purple_serv_got_chat_in(gc, id, username, flags, message, time(NULL)); return 0; } @@ -2536,11 +2503,14 @@ if (sect_info) { has_info = TRUE; + has_contact_info = TRUE; +#if 0 + /* it's true, but we don't need these assignments */ sect_info = FALSE; - has_contact_info = TRUE; +#endif } - else - { + else + { /* Remove the section header */ purple_notify_user_info_remove_last_item(user_info); }
--- a/libpurple/protocols/msn/p2p.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/msn/p2p.c Mon Apr 07 20:02:22 2014 +0530 @@ -161,7 +161,9 @@ if (header->data_header_len > 8) { header->data_tlv = msn_tlvlist_read(wire, header->data_header_len - 8); +#if 0 wire += header->data_header_len - 8; +#endif } } @@ -238,7 +240,9 @@ if (data_header_wire != NULL) { memcpy(tmp, data_header_wire, header->data_header_len); +#if 0 tmp += header->data_header_len; +#endif } if (len)
--- a/libpurple/protocols/msn/slpcall.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/msn/slpcall.c Mon Apr 07 20:02:22 2014 +0530 @@ -25,6 +25,7 @@ #include "internal.h" #include "debug.h" #include "smiley.h" +#include "smiley-custom.h" #include "msnutils.h" #include "slpcall.h" @@ -231,33 +232,35 @@ /* XXX: this could be improved if we tracked custom smileys * per-protocol, per-account, per-session or (ideally) per-conversation + * + * Note: it should be tracked on the msn prpl side. */ static PurpleStoredImage * find_valid_emoticon(PurpleAccount *account, const char *path) { - GList *smileys; + GList *smileys, *it; if (!purple_account_get_bool(account, "custom_smileys", TRUE)) return NULL; + smileys = purple_smiley_list_get_unique( + purple_smiley_custom_get_list()); - smileys = purple_smileys_get_all(); + for (it = smileys; it; it = g_list_next(it)) { + PurpleSmiley *smiley = it->data; - for (; smileys; smileys = g_list_delete_link(smileys, smileys)) { - PurpleSmiley *smiley; - PurpleStoredImage *img; + if (g_strcmp0(path, purple_smiley_get_path(smiley)) == 0) { + PurpleStoredImage *img; - smiley = smileys->data; - img = purple_smiley_get_stored_image(smiley); - - if (purple_strequal(path, purple_imgstore_get_filename(img))) { g_list_free(smileys); + img = purple_smiley_get_image(smiley); + purple_imgstore_ref(img); return img; } + } + g_list_free(smileys); - purple_imgstore_unref(img); - } + purple_debug_error("msn", "Received illegal request for file %s", path); - purple_debug_error("msn", "Received illegal request for file %s\n", path); return NULL; }
--- a/libpurple/protocols/mxit/Makefile.mingw Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/mxit/Makefile.mingw Mon Apr 07 20:02:22 2014 +0530 @@ -38,9 +38,8 @@ ## SOURCES, OBJECTS ## C_SRC = actions.c \ - aes.c \ chunk.c \ - cipher.c \ + cipher-mxit.c \ client.c \ filexfer.c \ formcmds.c \
--- a/libpurple/protocols/mxit/chunk.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/mxit/chunk.c Mon Apr 07 20:02:22 2014 +0530 @@ -480,6 +480,9 @@ /* mime type [UTF-8] */ pos += get_utf8_string( &chunkdata[pos], offer->mimetype, sizeof( offer->mimetype ) ); + if (pos > datalen) + purple_debug_warning(MXIT_PLUGIN_ID, "pos > datalen"); + /* timestamp [8 bytes] */ /* not used by libPurple */ @@ -643,6 +646,9 @@ /* status message [UTF-8 string] */ pos += get_utf8_string( &chunkdata[pos], sendfile->statusmsg, sizeof( sendfile->statusmsg ) ); + + if (pos != datalen) + purple_debug_misc(MXIT_PLUGIN_ID, "pos != datalen"); }
--- a/libpurple/protocols/oscar/family_feedbag.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/oscar/family_feedbag.c Mon Apr 07 20:02:22 2014 +0530 @@ -1755,6 +1755,8 @@ /* Unknown */ tmp = byte_stream_get16(bs); + if (!tmp) + purple_debug_warning("oscar", "unknown field missing"); if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) ret = userfunc(od, conn, frame, bn, msg); @@ -1846,6 +1848,8 @@ /* Unknown */ tmp = byte_stream_get16(bs); + if (!tmp) + purple_debug_warning("oscar", "unknown field missing"); if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) ret = userfunc(od, conn, frame, bn, msg); @@ -1950,6 +1954,8 @@ /* Unknown */ tmp = byte_stream_get16(bs); + if (!tmp) + purple_debug_warning("oscar", "unknown field missing"); if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) ret = userfunc(od, conn, frame, bn, reply, msg);
--- a/libpurple/protocols/silc/buddy.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/silc/buddy.c Mon Apr 07 20:02:22 2014 +0530 @@ -1290,6 +1290,8 @@ } } + g_return_if_fail(client_entry != NULL); + /* The client was found. Now get its public key and verify that before adding the buddy. */ memset(&userpk, 0, sizeof(userpk));
--- a/libpurple/protocols/yahoo/yahoo_profile.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/yahoo/yahoo_profile.c Mon Apr 07 20:02:22 2014 +0530 @@ -978,6 +978,8 @@ /* in to purple_markup_strip_html*/ char *fudged_buffer; + g_return_if_fail(strings != NULL); + yd = purple_connection_get_protocol_data(info_data->gc); fudged_buffer = purple_strcasereplace(url_buffer, "</dd>", "</dd><br>"); @@ -989,7 +991,7 @@ purple_debug_misc("yahoo", "url_buffer = %p\n", url_buffer); /* convert to utf8 */ - if (strings && strings->charset) { + if (strings->charset) { p = g_convert(stripped, -1, "utf-8", strings->charset, NULL, NULL, NULL); if (!p) { @@ -1009,7 +1011,7 @@ p = NULL; /* "Last updated" should also be converted to utf8 and with killed */ - if (strings && strings->charset) { + if (strings->charset) { last_updated_utf8_string = g_convert(last_updated_string, -1, "utf-8", strings->charset, NULL, NULL, NULL); yahoo_remove_nonbreaking_spaces(last_updated_utf8_string);
--- a/libpurple/protocols/yahoo/ymsg.h Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/yahoo/ymsg.h Mon Apr 07 20:02:22 2014 +0530 @@ -31,7 +31,7 @@ #include "protocol.h" #include "network.h" -#define YAHOO_PAGER_HOST_REQ_URL "http://vcs1.msg.yahoo.com/capacity" +#define YAHOO_PAGER_HOST_REQ_URL "http://vcs2.msg.yahoo.com/capacity" #define YAHOO_PAGER_HOST_FALLBACK "scsa.msg.yahoo.com" #define YAHOO_PAGER_PORT 5050 #define YAHOO_PAGER_PORT_P2P 5101
--- a/libpurple/protocols/zephyr/Zinternal.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/zephyr/Zinternal.c Mon Apr 07 20:02:22 2014 +0530 @@ -524,15 +524,17 @@ hole = hole->next; } if (lasthole) { - if (!(lasthole->next = (struct _Z_Hole *) - malloc(sizeof(struct _Z_InputQ)))) + struct _Z_InputQ *inputq = malloc(sizeof(struct _Z_InputQ)); + if (!inputq) return (ENOMEM); + lasthole->next = (struct _Z_Hole *)inputq; hole = lasthole->next; } else { - if (!(qptr->holelist = (struct _Z_Hole *) - malloc(sizeof(struct _Z_InputQ)))) + struct _Z_InputQ *inputq = malloc(sizeof(struct _Z_InputQ)); + if (!inputq) return (ENOMEM); + qptr->holelist = (struct _Z_Hole *)inputq; hole = qptr->holelist; } hole->next = NULL; @@ -548,15 +550,17 @@ hole = hole->next; } if (lasthole) { - if (!(lasthole->next = (struct _Z_Hole *) - malloc(sizeof(struct _Z_InputQ)))) + struct _Z_InputQ *inputq = malloc(sizeof(struct _Z_InputQ)); + if (!inputq) return (ENOMEM); + lasthole->next = (struct _Z_Hole *)inputq; hole = lasthole->next; } else { - if (!(qptr->holelist = (struct _Z_Hole *) - malloc(sizeof(struct _Z_InputQ)))) + struct _Z_InputQ *inputq = malloc(sizeof(struct _Z_InputQ)); + if (!inputq) return (ENOMEM); + qptr->holelist = (struct _Z_Hole *)inputq; hole = qptr->holelist; } hole->next = (struct _Z_Hole *) 0;
--- a/libpurple/protocols/zephyr/zephyr.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/protocols/zephyr/zephyr.c Mon Apr 07 20:02:22 2014 +0530 @@ -1440,7 +1440,6 @@ char *tmp = g_strdup_printf("%s", zephyr->username); char *atptr; - z_instance = triple[1]; if (triple[2] == NULL) { recip = g_malloc0(1); } else if (!g_ascii_strcasecmp(triple[2], "%me%")) {
--- a/libpurple/proxy.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/proxy.c Mon Apr 07 20:02:22 2014 +0530 @@ -748,14 +748,14 @@ } static void -proxy_connect_udp_none(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) +proxy_connect_udp_none(PurpleProxyConnectData *connect_data, common_sockaddr_t *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); + connect_data->fd = socket(addr->sa.sa_family, SOCK_DGRAM, 0); if (connect_data->fd < 0) { purple_proxy_connect_data_disconnect_formatted(connect_data, @@ -769,7 +769,7 @@ fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); #endif - if (connect(connect_data->fd, addr, addrlen) != 0) + if (connect(connect_data->fd, &addr->sa, addrlen) != 0) { if ((errno == EINPROGRESS) || (errno == EINTR)) { @@ -810,14 +810,14 @@ } static void -proxy_connect_none(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) +proxy_connect_none(PurpleProxyConnectData *connect_data, common_sockaddr_t *addr, socklen_t addrlen) { int flags; purple_debug_info("proxy", "Connecting to %s:%d with no proxy\n", connect_data->host, connect_data->port); - connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); + connect_data->fd = socket(addr->sa.sa_family, SOCK_STREAM, 0); if (connect_data->fd < 0) { purple_proxy_connect_data_disconnect_formatted(connect_data, @@ -831,7 +831,7 @@ fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); #endif - if (connect(connect_data->fd, addr, addrlen) != 0) + if (connect(connect_data->fd, &addr->sa, addrlen) != 0) { if ((errno == EINPROGRESS) || (errno == EINTR)) { @@ -1258,7 +1258,7 @@ } static void -proxy_connect_http(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) +proxy_connect_http(PurpleProxyConnectData *connect_data, common_sockaddr_t *addr, socklen_t addrlen) { int flags; @@ -1268,7 +1268,7 @@ (purple_proxy_info_get_host(connect_data->gpi) ? purple_proxy_info_get_host(connect_data->gpi) : "(null)"), purple_proxy_info_get_port(connect_data->gpi)); - connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); + connect_data->fd = socket(addr->sa.sa_family, SOCK_STREAM, 0); if (connect_data->fd < 0) { purple_proxy_connect_data_disconnect_formatted(connect_data, @@ -1282,7 +1282,7 @@ fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); #endif - if (connect(connect_data->fd, addr, addrlen) != 0) { + if (connect(connect_data->fd, &addr->sa, addrlen) != 0) { if (errno == EINPROGRESS || errno == EINTR) { purple_debug_info("proxy", "HTTP connection in progress\n"); @@ -1335,7 +1335,7 @@ { PurpleProxyConnectData *connect_data = data; unsigned char packet[9]; - struct sockaddr *addr; + common_sockaddr_t *addr; connect_data->query_data = NULL; @@ -1359,7 +1359,7 @@ packet[1] = 0x01; packet[2] = connect_data->port >> 8; packet[3] = connect_data->port & 0xff; - memcpy(packet + 4, &((struct sockaddr_in *)addr)->sin_addr.s_addr, 4); + memcpy(packet + 4, &addr->in.sin_addr.s_addr, 4); packet[8] = 0x00; g_free(addr); @@ -1452,7 +1452,7 @@ } static void -proxy_connect_socks4(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) +proxy_connect_socks4(PurpleProxyConnectData *connect_data, common_sockaddr_t *addr, socklen_t addrlen) { int flags; @@ -1462,7 +1462,7 @@ purple_proxy_info_get_host(connect_data->gpi), purple_proxy_info_get_port(connect_data->gpi)); - connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); + connect_data->fd = socket(addr->sa.sa_family, SOCK_STREAM, 0); if (connect_data->fd < 0) { purple_proxy_connect_data_disconnect_formatted(connect_data, @@ -1476,7 +1476,7 @@ fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); #endif - if (connect(connect_data->fd, addr, addrlen) != 0) + if (connect(connect_data->fd, &addr->sa, addrlen) != 0) { if ((errno == EINPROGRESS) || (errno == EINTR)) { @@ -2109,7 +2109,7 @@ } static void -proxy_connect_socks5(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) +proxy_connect_socks5(PurpleProxyConnectData *connect_data, common_sockaddr_t *addr, socklen_t addrlen) { int flags; @@ -2119,7 +2119,7 @@ purple_proxy_info_get_host(connect_data->gpi), purple_proxy_info_get_port(connect_data->gpi)); - connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); + connect_data->fd = socket(addr->sa.sa_family, SOCK_STREAM, 0); if (connect_data->fd < 0) { purple_proxy_connect_data_disconnect_formatted(connect_data, @@ -2133,7 +2133,7 @@ fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); #endif - if (connect(connect_data->fd, addr, addrlen) != 0) + if (connect(connect_data->fd, &addr->sa, addrlen) != 0) { if ((errno == EINPROGRESS) || (errno == EINTR)) { @@ -2168,7 +2168,7 @@ static void try_connect(PurpleProxyConnectData *connect_data) { socklen_t addrlen; - struct sockaddr *addr; + common_sockaddr_t *addr; char ipaddr[INET6_ADDRSTRLEN]; addrlen = GPOINTER_TO_INT(connect_data->hosts->data); @@ -2176,15 +2176,14 @@ addr = connect_data->hosts->data; connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); #ifdef HAVE_INET_NTOP - if (addr->sa_family == AF_INET) - inet_ntop(addr->sa_family, &((struct sockaddr_in *)addr)->sin_addr, + if (addr->sa.sa_family == AF_INET) + inet_ntop(addr->sa.sa_family, &addr->in.sin_addr, ipaddr, sizeof(ipaddr)); - else if (addr->sa_family == AF_INET6) - inet_ntop(addr->sa_family, &((struct sockaddr_in6 *)addr)->sin6_addr, + else if (addr->sa.sa_family == AF_INET6) + inet_ntop(addr->sa.sa_family, &addr->in6.sin6_addr, ipaddr, sizeof(ipaddr)); #else - memcpy(ipaddr, inet_ntoa(((struct sockaddr_in *)addr)->sin_addr), - sizeof(ipaddr)); + memcpy(ipaddr, inet_ntoa(addr->in.sin_addr), sizeof(ipaddr)); #endif purple_debug_info("proxy", "Attempting connection to %s\n", ipaddr);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/smiley-custom.c Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,317 @@ +/* purpleOB + * + * Purple 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 "smiley-custom.h" + +#include "debug.h" +#include "util.h" + +#include <glib/gstdio.h> +#include <errno.h> + +#define SMILEYS_DEFAULT_FOLDER "custom_smiley" +#define SMILEYS_INDEX_FILE "smileys.xml" + +static gchar *smileys_dir; +static gchar *smileys_index; + +static PurpleSmileyList *smileys_list; +static gboolean disable_write = FALSE; + +/******************************************************************************* + * XML storage + ******************************************************************************/ + +static void +purple_smiley_custom_load(void) +{ + PurpleXmlNode *root_node, *profile_node, *smileyset_node, *smiley_node; + int got_smileys = 0; + + if (!g_file_test(smileys_index, G_FILE_TEST_EXISTS)) + return; + + root_node = purple_xmlnode_from_file(g_path_get_dirname(smileys_index), + g_path_get_basename(smileys_index), + "custom smileys index", "smiley-custom"); + g_return_if_fail(root_node); + + profile_node = purple_xmlnode_get_child(root_node, "profile"); + if (!profile_node) { + purple_xmlnode_free(root_node); + g_return_if_fail(profile_node); + } + + smileyset_node = purple_xmlnode_get_child(profile_node, "smiley_set"); + if (!smileyset_node) { + purple_xmlnode_free(root_node); + g_return_if_fail(smileyset_node); + } + + smiley_node = purple_xmlnode_get_child(smileyset_node, "smiley"); + while (smiley_node) { + const gchar *shortcut, *file_name; + + shortcut = purple_xmlnode_get_attrib(smiley_node, "shortcut"); + file_name = purple_xmlnode_get_attrib(smiley_node, "filename"); + + if (shortcut && file_name) { + PurpleSmiley *smiley; + gchar *file_path = g_build_filename( + smileys_dir, file_name, NULL); + + smiley = purple_smiley_new(shortcut, file_path); + g_free(file_path); + + if (purple_smiley_list_add(smileys_list, smiley)) { + got_smileys++; + } else { + purple_debug_warning("smiley-custom", + "Couldn't add '%s' smiley", shortcut); + } + g_object_unref(smiley); + } + + smiley_node = purple_xmlnode_get_next_twin(smiley_node); + } + + purple_xmlnode_free(root_node); + + purple_debug_info("smiley-custom", "Loaded %d custom smiley(s)", + got_smileys); +} + +static PurpleXmlNode * +smileys_to_xmlnode(void) +{ + PurpleXmlNode *root_node, *profile_node, *smileyset_node; + GList *smileys, *it; + + root_node = purple_xmlnode_new("smileys"); + purple_xmlnode_set_attrib(root_node, "version", "1.0"); + + profile_node = purple_xmlnode_new("profile"); + purple_xmlnode_insert_child(root_node, profile_node); + purple_xmlnode_set_attrib(profile_node, "name", "Default"); + + smileyset_node = purple_xmlnode_new("smiley_set"); + purple_xmlnode_insert_child(profile_node, smileyset_node); + + smileys = purple_smiley_list_get_all(smileys_list); + + for (it = smileys; it; it = g_list_next(it)) { + PurpleSmiley *smiley = PURPLE_SMILEY(it->data); + PurpleXmlNode *smiley_node; + + smiley_node = purple_xmlnode_new("smiley"); + purple_xmlnode_insert_child(smileyset_node, smiley_node); + purple_xmlnode_set_attrib(smiley_node, "shortcut", + purple_smiley_get_shortcut(smiley)); + purple_xmlnode_set_attrib(smiley_node, "filename", + g_path_get_basename(purple_smiley_get_path(smiley))); + } + + return root_node; +} + +static void +purple_smiley_custom_save(void) +{ + PurpleXmlNode *root_node; + gchar *data; + GError *error = NULL; + + if (disable_write) + return; + + root_node = smileys_to_xmlnode(); + g_return_if_fail(root_node != NULL); + + data = purple_xmlnode_to_formatted_str(root_node, NULL); + g_return_if_fail(data != NULL); + + g_file_set_contents(smileys_index, data, -1, &error); + + g_free(data); + purple_xmlnode_free(root_node); + + if (error) { + purple_debug_error("smiley-custom", + "Error writting custom smileys xml file"); + } +} + +static gchar * +purple_smiley_custom_img_checksum(PurpleStoredImage *img) +{ + g_return_val_if_fail(PURPLE_IS_STORED_IMAGE(img), NULL); + + return g_compute_checksum_for_data(G_CHECKSUM_SHA1, + purple_imgstore_get_data(img), + purple_imgstore_get_size(img)); +} + + +/******************************************************************************* + * API implementation + ******************************************************************************/ + +PurpleSmiley * +purple_smiley_custom_add(PurpleStoredImage *img, const gchar *shortcut) +{ + PurpleSmiley *existing_smiley, *smiley; + gchar *checksum, *file_path; + gchar file_name[256]; + const gchar *file_ext; + GError *error = NULL; + gboolean succ; + + g_return_val_if_fail(PURPLE_IS_STORED_IMAGE(img), NULL); + + existing_smiley = purple_smiley_list_get_by_shortcut( + smileys_list, shortcut); + + purple_imgstore_ref(img); + + if (existing_smiley) { + disable_write = TRUE; + purple_smiley_custom_remove(existing_smiley); + disable_write = FALSE; + } + + checksum = purple_smiley_custom_img_checksum(img); + file_ext = purple_imgstore_get_extension(img); + if (file_ext == NULL || g_strcmp0("icon", file_ext) == 0) { + purple_debug_warning("smiley-custom", "Invalid image type"); + return NULL; + } + + g_snprintf(file_name, sizeof(file_name), "%s.%s", checksum, file_ext); + file_path = g_build_filename(smileys_dir, file_name, NULL); + + g_file_set_contents(file_path, purple_imgstore_get_data(img), + purple_imgstore_get_size(img), &error); + + g_free(checksum); + purple_imgstore_unref(img); + + if (error) { + purple_debug_error("smiley-custom", "Failed writing smiley " + "file %s: %s", file_path, error->message); + g_free(file_path); + return NULL; + } + + smiley = purple_smiley_new(shortcut, file_path); + g_free(file_path); + succ = purple_smiley_list_add(smileys_list, smiley); + g_object_unref(smiley); + + if (!succ) + purple_debug_error("smiley-custom", "Failed adding a smiley"); + + purple_smiley_custom_save(); + + return smiley; +} + +void +purple_smiley_custom_remove(PurpleSmiley *smiley) +{ + PurpleSmiley *existing_smiley; + const gchar *smiley_shortcut, *path; + GList *other_smileys, *it; + gboolean is_unique; + + g_return_if_fail(PURPLE_IS_SMILEY(smiley)); + + smiley_shortcut = purple_smiley_get_shortcut(smiley); + existing_smiley = purple_smiley_list_get_by_shortcut( + smileys_list, smiley_shortcut); + if (existing_smiley == NULL) + return; + if (existing_smiley != smiley) { + purple_debug_warning("smiley-custom", "Smiley is not in store"); + return; + } + + g_object_ref(smiley); + purple_smiley_list_remove(smileys_list, smiley); + + path = purple_smiley_get_path(smiley); + + other_smileys = purple_smiley_list_get_unique(smileys_list); + is_unique = TRUE; + for (it = other_smileys; it; it = g_list_next(it)) { + PurpleSmiley *other = it->data; + if (g_strcmp0(purple_smiley_get_path(other), path) == 0) { + is_unique = FALSE; + break; + } + } + g_list_free(other_smileys); + + if (is_unique) + g_unlink(path); + + g_object_unref(smiley); + + purple_smiley_custom_save(); +} + +PurpleSmileyList * +purple_smiley_custom_get_list(void) +{ + return smileys_list; +} + + +/******************************************************************************* + * Custom smiley subsystem + ******************************************************************************/ + +void +_purple_smiley_custom_init(void) +{ + gint ret; + + smileys_dir = g_build_filename(purple_user_dir(), + SMILEYS_DEFAULT_FOLDER, NULL); + smileys_index = g_build_filename(purple_user_dir(), + SMILEYS_INDEX_FILE, NULL); + smileys_list = purple_smiley_list_new(); + + ret = g_mkdir(smileys_dir, S_IRUSR | S_IWUSR | S_IXUSR); + if (ret != 0 && errno != EEXIST) { + purple_debug_error("smiley-custom", "Failed creating custom " + "smileys directory: %s (%d)", g_strerror(errno), errno); + } + + purple_smiley_custom_load(); +} + +void +_purple_smiley_custom_uninit(void) +{ + g_free(smileys_dir); + g_free(smileys_index); + g_object_unref(smileys_list); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/smiley-custom.h Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,91 @@ +/* purple + * + * Purple 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 _PURPLE_SMILEY_CUSTOM_H_ +#define _PURPLE_SMILEY_CUSTOM_H_ +/** + * SECTION:smiley-custom + * @include:smiley-custom.h + * @section_id: libpurple-smiley-custom + * @short_description: a persistent storage for user-defined smileys + * @title: Custom smileys storage + * + * A custom smiley is a non-standard (not defined by a particular protocol) + * #PurpleSmiley, defined by user. Some protocols support sending such smileys + * for other buddies, that do not have such image on their machine. Protocol + * that supports this feature should set the flag + * @PURPLE_CONNECTION_FLAG_ALLOW_CUSTOM_SMILEY of #PurpleConnectionFlags. + */ + +#include "smiley.h" +#include "smiley-list.h" + +/** + * purple_smiley_custom_add: + * @image: the smiley's image. + * @shortcut: textual representation of a smiley. + * + * Adds a new smiley to the store. The @shortcut should be unique, but the + * @image contents don't have to. + * + * Returns: a new #PurpleSmiley, or %NULL if error occured. + */ +PurpleSmiley * +purple_smiley_custom_add(PurpleStoredImage *image, const gchar *shortcut); + +/** + * purple_smiley_custom_remove: + * @smiley: the smiley to be removed. + * + * Removes a @smiley from the store. If the @smiley file is unique (not used by + * other smileys) it will be removed from a disk. + */ +void +purple_smiley_custom_remove(PurpleSmiley *smiley); + +/** + * purple_smiley_custom_get_list: + * + * Returns the whole list of user-configured custom smileys. + * + * Returns: a #PurpleSmileyList of custom smileys. + */ +PurpleSmileyList * +purple_smiley_custom_get_list(void); + +/** + * _purple_smiley_custom_init: (skip) + * + * Initializes the custom smileys storage subsystem. + * Stability: Private + */ +void +_purple_smiley_custom_init(void); + +/** + * _purple_smiley_custom_uninit: (skip) + * + * Uninitializes the custom smileys storage subsystem. + */ +void +_purple_smiley_custom_uninit(void); + +#endif /* _PURPLE_SMILEY_CUSTOM_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/smiley-list.c Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,386 @@ +/* purple + * + * Purple 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 "smiley-list.h" + +#include "dbus-maybe.h" +#include "debug.h" +#include "smiley-parser.h" +#include "trie.h" + +#define PURPLE_SMILEY_LIST_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_SMILEY_LIST, \ + PurpleSmileyListPrivate)) + +typedef struct { + GList *smileys; + GList *smileys_end; + PurpleTrie *trie; + GHashTable *path_map; + GHashTable *shortcut_map; + + gboolean drop_failed_remotes; +} PurpleSmileyListPrivate; + +enum +{ + PROP_0, + PROP_DROP_FAILED_REMOTES, + PROP_LAST +}; + +static GParamSpec *properties[PROP_LAST]; + +static void +_list_append2(GList **head_p, GList **tail_p, gpointer data) +{ + GList *head = *head_p; + GList *tail = *tail_p; + GList *elem; + + g_return_if_fail((head == NULL) == (tail == NULL)); + g_return_if_fail((tail == NULL) || (tail->next == NULL)); + + elem = g_list_alloc(); + elem->data = data; + elem->prev = tail; + elem->next = NULL; + + if (head) { + tail->next = elem; + *tail_p = elem; + } else + *head_p = *tail_p = elem; +} + +static void +_list_delete_link2(GList **head_p, GList **tail_p, GList *link) +{ + GList *head = *head_p; + GList *tail = *tail_p; + + g_return_if_fail(head != NULL); + g_return_if_fail(tail != NULL); + + if (link == tail) + *tail_p = tail->prev; + *head_p = g_list_delete_link(head, link); +} + +/******************************************************************************* + * API implementation + ******************************************************************************/ + +PurpleSmileyList * +purple_smiley_list_new(void) +{ + return g_object_new(PURPLE_TYPE_SMILEY_LIST, NULL); +} + +static void +remote_smiley_failed(PurpleSmiley *smiley, gpointer _list) +{ + PurpleSmileyList *list = _list; + + purple_debug_info("smiley-list", "remote smiley '%s' has failed, " + "removing it from the list...", + purple_smiley_get_shortcut(smiley)); + + purple_smiley_list_remove(list, smiley); +} + +gboolean +purple_smiley_list_add(PurpleSmileyList *list, PurpleSmiley *smiley) +{ + PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list); + const gchar *smiley_path; + gboolean succ; + gchar *shortcut_escaped; + const gchar *shortcut; + + g_return_val_if_fail(priv != NULL, FALSE); + g_return_val_if_fail(PURPLE_IS_SMILEY(smiley), FALSE); + + if (g_object_get_data(G_OBJECT(smiley), "purple-smiley-list") != NULL) { + purple_debug_warning("smiley-list", + "smiley is already associated with some list"); + return FALSE; + } + + shortcut = purple_smiley_get_shortcut(smiley); + + if (g_hash_table_lookup(priv->shortcut_map, shortcut) != NULL) + return FALSE; + + shortcut_escaped = g_markup_escape_text(shortcut, -1); + succ = purple_trie_add(priv->trie, shortcut_escaped, smiley); + g_free(shortcut_escaped); + if (!succ) + return FALSE; + + g_object_ref(smiley); + _list_append2(&priv->smileys, &priv->smileys_end, smiley); + g_object_set_data(G_OBJECT(smiley), "purple-smiley-list", list); + g_object_set_data(G_OBJECT(smiley), "purple-smiley-list-elem", + priv->smileys_end); + + g_hash_table_insert(priv->shortcut_map, g_strdup(shortcut), smiley); + + /* We don't expect non-remote non-ready smileys, but let's check it just + * to be safe. */ + if (priv->drop_failed_remotes && !purple_smiley_is_ready(smiley) && + PURPLE_IS_REMOTE_SMILEY(smiley)) + { + g_signal_connect_object(smiley, "failed", + G_CALLBACK(remote_smiley_failed), list, 0); + } + + smiley_path = purple_smiley_get_path(smiley); + + /* TODO: add to the table, when the smiley sets the path */ + if (!smiley_path) + return TRUE; + + if (g_hash_table_lookup(priv->path_map, smiley_path) == NULL) { + g_hash_table_insert(priv->path_map, + g_strdup(smiley_path), smiley); + } + + return TRUE; +} + +void +purple_smiley_list_remove(PurpleSmileyList *list, PurpleSmiley *smiley) +{ + PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list); + GList *list_elem, *it; + const gchar *shortcut, *path; + gchar *shortcut_escaped; + + g_return_if_fail(priv != NULL); + g_return_if_fail(PURPLE_IS_SMILEY(smiley)); + + if (g_object_get_data(G_OBJECT(smiley), "purple-smiley-list") != list) { + purple_debug_warning("smiley-list", "remove: invalid list"); + return; + } + + list_elem = g_object_get_data(G_OBJECT(smiley), + "purple-smiley-list-elem"); + + shortcut = purple_smiley_get_shortcut(smiley); + path = purple_smiley_get_path(smiley); + + g_hash_table_remove(priv->shortcut_map, shortcut); + if (path) + g_hash_table_remove(priv->path_map, path); + + shortcut_escaped = g_markup_escape_text(shortcut, -1); + purple_trie_remove(priv->trie, shortcut); + g_free(shortcut_escaped); + + _list_delete_link2(&priv->smileys, &priv->smileys_end, list_elem); + + /* re-add entry to path_map if smiley was not unique */ + for (it = priv->smileys; it && path; it = g_list_next(it)) { + PurpleSmiley *smiley = it->data; + + if (g_strcmp0(purple_smiley_get_path(smiley), path) == 0) { + g_hash_table_insert(priv->path_map, + g_strdup(path), smiley); + break; + } + } + + g_object_set_data(G_OBJECT(smiley), "purple-smiley-list", NULL); + g_object_set_data(G_OBJECT(smiley), "purple-smiley-list-elem", NULL); + g_object_unref(smiley); +} + +gboolean +purple_smiley_list_is_empty(PurpleSmileyList *list) +{ + PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list); + + g_return_val_if_fail(priv != NULL, TRUE); + + return (priv->smileys == NULL); +} + +PurpleSmiley * +purple_smiley_list_get_by_shortcut(PurpleSmileyList *list, + const gchar *shortcut) +{ + PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list); + + g_return_val_if_fail(priv != NULL, NULL); + + return g_hash_table_lookup(priv->shortcut_map, shortcut); +} + +PurpleTrie * +purple_smiley_list_get_trie(PurpleSmileyList *list) +{ + PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list); + + g_return_val_if_fail(priv != NULL, NULL); + + return priv->trie; +} + +GList * +purple_smiley_list_get_unique(PurpleSmileyList *list) +{ + PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list); + + g_return_val_if_fail(priv != NULL, NULL); + + return g_hash_table_get_values(priv->path_map); +} + +GList * +purple_smiley_list_get_all(PurpleSmileyList *list) +{ + PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list); + + g_return_val_if_fail(priv != NULL, NULL); + + return g_hash_table_get_values(priv->shortcut_map); +} + + +/******************************************************************************* + * Object stuff + ******************************************************************************/ + +static void +purple_smiley_list_init(GTypeInstance *instance, gpointer klass) +{ + PurpleSmileyList *sl = PURPLE_SMILEY_LIST(instance); + PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(sl); + + priv->trie = purple_trie_new(); + priv->path_map = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, NULL); + priv->shortcut_map = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, NULL); + + PURPLE_DBUS_REGISTER_POINTER(sl, PurpleSmileyList); +} + +static void +purple_smiley_list_finalize(GObject *obj) +{ + PurpleSmileyList *sl = PURPLE_SMILEY_LIST(obj); + PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(sl); + GList *it; + + g_object_unref(priv->trie); + g_hash_table_destroy(priv->path_map); + g_hash_table_destroy(priv->shortcut_map); + + for (it = priv->smileys; it; it = g_list_next(it)) { + PurpleSmiley *smiley = it->data; + g_object_set_data(G_OBJECT(smiley), "purple-smiley-list", NULL); + g_object_set_data(G_OBJECT(smiley), "purple-smiley-list-elem", NULL); + g_object_unref(smiley); + } + g_list_free(priv->smileys); + + PURPLE_DBUS_UNREGISTER_POINTER(sl); +} + +static void +purple_smiley_list_get_property(GObject *object, guint par_id, GValue *value, + GParamSpec *pspec) +{ + PurpleSmileyList *sl = PURPLE_SMILEY_LIST(object); + PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(sl); + + switch (par_id) { + case PROP_DROP_FAILED_REMOTES: + g_value_set_boolean(value, priv->drop_failed_remotes); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, par_id, pspec); + break; + } +} + +static void +purple_smiley_list_set_property(GObject *object, guint par_id, const GValue *value, + GParamSpec *pspec) +{ + PurpleSmileyList *sl = PURPLE_SMILEY_LIST(object); + PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(sl); + + switch (par_id) { + case PROP_DROP_FAILED_REMOTES: + priv->drop_failed_remotes = g_value_get_boolean(value); + /* XXX: we could scan for remote smiley's on our list + * and change the setting, but we don't care that much. + */ + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, par_id, pspec); + break; + } +} + +static void +purple_smiley_list_class_init(PurpleSmileyListClass *klass) +{ + GObjectClass *gobj_class = G_OBJECT_CLASS(klass); + + g_type_class_add_private(klass, sizeof(PurpleSmileyListPrivate)); + + gobj_class->get_property = purple_smiley_list_get_property; + gobj_class->set_property = purple_smiley_list_set_property; + gobj_class->finalize = purple_smiley_list_finalize; + + properties[PROP_DROP_FAILED_REMOTES] = g_param_spec_boolean( + "drop-failed-remotes", "Drop failed PurpleRemoteSmileys", + "Watch added remote smileys and remove them from the list, " + "if they change their state to failed", FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties(gobj_class, PROP_LAST, properties); +} + +GType +purple_smiley_list_get_type(void) +{ + static GType type = 0; + + if (G_UNLIKELY(type == 0)) { + static const GTypeInfo info = { + .class_size = sizeof(PurpleSmileyListClass), + .class_init = (GClassInitFunc)purple_smiley_list_class_init, + .instance_size = sizeof(PurpleSmileyList), + .instance_init = purple_smiley_list_init, + }; + + type = g_type_register_static(G_TYPE_OBJECT, + "PurpleSmileyList", &info, 0); + } + + return type; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/smiley-list.h Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,193 @@ +/* purple + * + * Purple 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 _PURPLE_SMILEY_LIST_H_ +#define _PURPLE_SMILEY_LIST_H_ +/** + * SECTION:smiley-list + * @include:smiley-list.h + * @section_id: libpurple-smiley-list + * @short_description: a collection of smileys + * @title: Smiley lists + * + * A #PurpleSmileyList is a handy storage for a set of #PurpleSmiley's. + * It holds structures needed for parsing, accessing them by a shortcut, or + * listing (either all, or by unique image). + */ + +#include <glib-object.h> + +#include "smiley.h" +#include "trie.h" + +typedef struct _PurpleSmileyList PurpleSmileyList; +typedef struct _PurpleSmileyListClass PurpleSmileyListClass; + +#define PURPLE_TYPE_SMILEY_LIST (purple_smiley_list_get_type()) +#define PURPLE_SMILEY_LIST(smiley) (G_TYPE_CHECK_INSTANCE_CAST((smiley), PURPLE_TYPE_SMILEY_LIST, PurpleSmileyList)) +#define PURPLE_SMILEY_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_SMILEY_LIST, PurpleSmileyListClass)) +#define PURPLE_IS_SMILEY_LIST(smiley) (G_TYPE_CHECK_INSTANCE_TYPE((smiley), PURPLE_TYPE_SMILEY_LIST)) +#define PURPLE_IS_SMILEY_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_SMILEY_LIST)) +#define PURPLE_SMILEY_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_SMILEY_LIST, PurpleSmileyListClass)) + +/** + * PurpleSmileyList: + * + * A container for #PurpleSmiley's. + */ +struct _PurpleSmileyList +{ + /*< private >*/ + GObject parent; +}; + +/** + * PurpleSmileyListClass: + * + * Base class for #PurpleSmileyList objects. + */ +struct _PurpleSmileyListClass +{ + /*< private >*/ + GObjectClass parent_class; + + void (*purple_reserved1)(void); + void (*purple_reserved2)(void); + void (*purple_reserved3)(void); + void (*purple_reserved4)(void); +}; + +G_BEGIN_DECLS + +/** + * purple_smiley_list_get_type: + * + * Returns: the #GType for a smiley list. + */ +GType +purple_smiley_list_get_type(void); + +/** + * purple_smiley_list_new: + * + * Creates new #PurpleSmileyList. You might prefer using existing lists, like + * #purple_smiley_custom_get_list or #purple_conversation_get_remote_smileys + * (the latter is read-only, accessed with + * #purple_conversation_add_remote_smiley and + * #purple_conversation_get_remote_smiley). + * + * Returns: newly created #PurpleSmileyList. + */ +PurpleSmileyList * +purple_smiley_list_new(void); + +/** + * purple_smiley_list_add: + * @list: the smiley list. + * @smiley: the smiley to be added. + * + * Adds the @smiley to the @list. A particular @smiley can only be added to + * a single @list. Also, a @list can not contain multiple @smiley's with + * the same shortcut. + * + * It increases the reference count of @smiley, if needed. + * + * Returns: %TRUE if the @smiley was successfully added to the list. + */ +gboolean +purple_smiley_list_add(PurpleSmileyList *list, PurpleSmiley *smiley); + +/** + * purple_smiley_list_remove: + * @list: the smiley list. + * @smiley: the smiley to be removed. + * + * Removes a @smiley from the @list. If @smiley's reference count drops to zero, + * it's destroyed. + */ +void +purple_smiley_list_remove(PurpleSmileyList *list, PurpleSmiley *smiley); + +/** + * purple_smiley_list_is_empty: + * @list: the smiley list. + * + * Checks, if the smiley @list is empty. + * + * Returns: %TRUE if the @list is empty, %FALSE otherwise. + */ +gboolean +purple_smiley_list_is_empty(PurpleSmileyList *list); + +/** + * purple_smiley_list_get_by_shortcut: + * @list: the smiley list. + * @shortcut: the textual representation of smiley to lookup. + * + * Retrieves a smiley with the specified @shortcut from the @list. + * + * Returns: a #PurpleSmiley if the smiley was found, %NULL otherwise. + */ +PurpleSmiley * +purple_smiley_list_get_by_shortcut(PurpleSmileyList *list, + const gchar *shortcut); + +/** + * purple_smiley_list_get_trie: + * @list: the smiley list. + * + * Returns the #PurpleTrie for searching of #PurpleSmiley's being kept + * in the @list. It holds markup escaped shortcuts, so if you want to search + * in plain message, you have to escape it first. If you don't do this, it won't + * find smileys containing special characters. + * + * Returns: (transfer none): a #PurpleTrie for contained smileys. + */ +PurpleTrie * +purple_smiley_list_get_trie(PurpleSmileyList *list); + +/** + * purple_smiley_list_get_unique: + * @list_: the smiley list. + * + * Returns the list of smileys with unique image file paths. + * + * Returns: (transfer container): the #GList of unique smileys. Use #g_list_free + * when done using it. + */ +GList * +purple_smiley_list_get_unique(PurpleSmileyList *list_); + +/** + * purple_smiley_list_get_all: + * @list_: the smiley list. + * + * Returns the list of all smileys added to the @list_. + * + * Returns: (transfer container): the #GList of smileys. Use #g_list_free + * when done using it. + */ +GList * +purple_smiley_list_get_all(PurpleSmileyList *list_); + +G_END_DECLS + +#endif /* _PURPLE_SMILEY_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/smiley-parser.c Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,248 @@ +/* purple + * + * Purple 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 "smiley-parser.h" + +#include "smiley-custom.h" +#include "smiley-theme.h" + +#define DISPLAY_OUR_CUSTOM_SMILEYS_FOR_INCOMING_MESSAGES 1 + +typedef struct +{ + union { + struct { + PurpleConversation *conv; + PurpleSmileyParseCb cb; + gpointer ui_data; + } replace; + struct { + GHashTable *found_smileys; + } find; + } job; + + gboolean in_html_tag; +} PurpleSmileyParseData; + +static PurpleTrie *html_sentry; + +static inline void +purple_smiley_parse_check_html(const gchar *word, + PurpleSmileyParseData *parse_data) +{ + if (G_LIKELY(word[0] == '<')) + parse_data->in_html_tag = TRUE; + else if (G_LIKELY(word[0] == '>')) + parse_data->in_html_tag = FALSE; + else + g_return_if_reached(); + g_warn_if_fail(word[1] == '\0'); +} + +static gboolean +purple_smiley_parse_cb(GString *out, const gchar *word, gpointer _smiley, + gpointer _parse_data) +{ + PurpleSmileyParseData *parse_data = _parse_data; + PurpleSmiley *smiley = _smiley; + + /* a special-case for html_sentry */ + if (smiley == NULL) { + purple_smiley_parse_check_html(word, parse_data); + return FALSE; + } + + if (parse_data->in_html_tag) + return FALSE; + + return parse_data->job.replace.cb(out, smiley, + parse_data->job.replace.conv, parse_data->job.replace.ui_data); +} + +/* XXX: this shouldn't be a conv for incoming messages - see + * PurpleConversationPrivate.remote_smileys. + * For outgoing messages, we could pass conv in ui_data (or something). + * Or maybe we should use two distinct functions? + * To be reconsidered when we had PurpleDude-like objects. + */ +gchar * +purple_smiley_parse(PurpleConversation *conv, const gchar *html_message, + gboolean use_remote_smileys, PurpleSmileyParseCb cb, gpointer ui_data) +{ + PurpleSmileyTheme *theme; + PurpleSmileyList *theme_smileys = NULL, *remote_smileys = NULL; + PurpleTrie *theme_trie = NULL, *custom_trie = NULL, *remote_trie = NULL; + GSList *tries = NULL; + GSList tries_sentry, tries_theme, tries_custom, tries_remote; + PurpleSmileyParseData parse_data; + + if (html_message == NULL || html_message[0] == '\0') + return g_strdup(html_message); + + /* get remote smileys */ + if (use_remote_smileys) + remote_smileys = purple_conversation_get_remote_smileys(conv); + if (remote_smileys) + remote_trie = purple_smiley_list_get_trie(remote_smileys); + if (remote_trie && purple_trie_get_size(remote_trie) == 0) + remote_trie = NULL; + + /* get custom smileys */ + if (purple_conversation_get_features(conv) & + PURPLE_CONNECTION_FLAG_ALLOW_CUSTOM_SMILEY) + { + custom_trie = purple_smiley_list_get_trie( + purple_smiley_custom_get_list()); +#if !DISPLAY_OUR_CUSTOM_SMILEYS_FOR_INCOMING_MESSAGES + if (use_remote_smileys) + custom_trie = NULL; +#endif + } + if (custom_trie && purple_trie_get_size(custom_trie) == 0) + custom_trie = NULL; + + /* get theme smileys */ + theme = purple_smiley_theme_get_current(); + if (theme != NULL) + theme_smileys = purple_smiley_theme_get_smileys(theme, ui_data); + if (theme_smileys != NULL) + theme_trie = purple_smiley_list_get_trie(theme_smileys); + + /* we have absolutely no smileys */ + if (theme_trie == NULL && custom_trie == NULL && remote_trie == NULL) + return g_strdup(html_message); + + /* Create a tries list on the stack. */ + tries_sentry.data = html_sentry; + tries_theme.data = theme_trie; + tries_custom.data = custom_trie; + tries_remote.data = remote_trie; + tries_sentry.next = NULL; + tries_theme.next = tries_custom.next = tries_remote.next = NULL; + tries = &tries_sentry; + if (remote_trie != NULL) + g_slist_last(tries)->next = &tries_remote; + if (custom_trie != NULL) + g_slist_last(tries)->next = &tries_custom; + if (theme_trie != NULL) + g_slist_last(tries)->next = &tries_theme; + + parse_data.job.replace.conv = conv; + parse_data.job.replace.cb = cb; + parse_data.job.replace.ui_data = ui_data; + parse_data.in_html_tag = FALSE; + + /* TODO: parse greedily (as much as possible) when PurpleTrie + * provides support for it. */ + return purple_trie_multi_replace(tries, html_message, + purple_smiley_parse_cb, &parse_data); +} + +gchar * +purple_smiley_parse_custom(const gchar *html_message, PurpleSmileyParseCb cb, + gpointer ui_data) +{ + PurpleTrie *custom_trie = NULL; + GSList *tries = NULL; + GSList tries_sentry, tries_custom; + PurpleSmileyParseData parse_data; + + if (html_message == NULL || html_message[0] == '\0') + return g_strdup(html_message); + + custom_trie = purple_smiley_list_get_trie( + purple_smiley_custom_get_list()); + if (!custom_trie || purple_trie_get_size(custom_trie) == 0) + return g_strdup(html_message); + + tries_sentry.data = html_sentry; + tries_custom.data = custom_trie; + tries_sentry.next = &tries_custom; + tries_custom.next = NULL; + tries = &tries_sentry; + + parse_data.job.replace.conv = NULL; + parse_data.job.replace.cb = cb; + parse_data.job.replace.ui_data = ui_data; + parse_data.in_html_tag = FALSE; + + return purple_trie_multi_replace(tries, html_message, + purple_smiley_parse_cb, &parse_data); +} + +static gboolean +smiley_find_cb(const gchar *word, gpointer _smiley, gpointer _found_smileys) +{ + PurpleSmiley *smiley = _smiley; + GHashTable *found_smileys = _found_smileys; + + g_hash_table_insert(found_smileys, smiley, smiley); + + return TRUE; +} + +GList * +purple_smiley_find(PurpleSmileyList *smileys, const gchar *message, + gboolean is_html) +{ + PurpleTrie *trie; + GHashTable *found_smileys; + GList *found_list; + gchar *escaped_message = NULL; + + if (message == NULL || message[0] == '\0') + return NULL; + + if (smileys == NULL || purple_smiley_list_is_empty(smileys)) + return NULL; + + trie = purple_smiley_list_get_trie(smileys); + g_return_val_if_fail(trie != NULL, NULL); + + if (!is_html) + message = escaped_message = g_markup_escape_text(message, -1); + + found_smileys = g_hash_table_new(g_direct_hash, g_direct_equal); + purple_trie_find(trie, message, smiley_find_cb, found_smileys); + + /* TODO: use html_sentry and purple_trie_multi_replace */ + + g_free(escaped_message); + + found_list = g_hash_table_get_values(found_smileys); + g_hash_table_destroy(found_smileys); + + return found_list; +} + +void +_purple_smiley_parser_init(void) +{ + html_sentry = purple_trie_new(); + purple_trie_add(html_sentry, "<", NULL); + purple_trie_add(html_sentry, ">", NULL); +} + +void +_purple_smiley_parser_uninit(void) +{ + g_object_unref(html_sentry); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/smiley-parser.h Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,127 @@ +/* purple + * + * Purple 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 _PURPLE_SMILEY_PARSER_H_ +#define _PURPLE_SMILEY_PARSER_H_ +/** + * SECTION:smiley-parser + * @include:smiley-parser.h + * @section_id: libpurple-smiley-parser + * @short_description: a efficient smiley processor + * @title: Smiley parser + * + * This module is a fast and easy method for searching (and optionally replacing) + * #PurpleSmiley's in a text. It may use all suitable smiley sets to smileyify + * the message in one step. The priority if always the following: remote + * smileys > local custom smileys > theme smileys. + */ + +#include "purple.h" + +/** + * PurpleSmileyParseCb: + * @out: the message buffer. + * @smiley: found smiley. + * @conv: the conversation of a message (or %NULL, if not passed). + * @ui_data: the data being passed to #purple_smiley_parse. + * + * A replace callback for the found @smiley. It should append a HTML tag + * representing the @smiley to the @out string. It must not modify the + * @out string in other way than appending to its end. + * + * If callback decides not to replace a smiley, it must not modify + * @out in any way. + * + * Returns: %TRUE if the smiley was inserted. + */ +typedef gboolean (*PurpleSmileyParseCb)(GString *out, PurpleSmiley *smiley, + PurpleConversation *conv, gpointer ui_data); + +/** + * purple_smiley_parse: + * @conv: the conversation of a message. + * @html_message: the html message, or escaped plain message. + * @use_remote_smileys: %TRUE if remote smileys of @conv should be parsed. + * @cb: the callback to replace smiley text with an image. + * @ui_data: the user data to be passed to @cb and + * #purple_smiley_theme_get_smileys. + * + * Replaces all textual smiley representations with proper smiley images. + * + * The @use_remote_smileys parameter should be %TRUE for incoming messages, + * %FALSE for outgoing. + * + * Returns: (transfer full): the smileyifed message. Should be #g_free'd when + * done using it. Returns %NULL if and only if @html_message was %NULL. + */ +gchar * +purple_smiley_parse(PurpleConversation *conv, const gchar *html_message, + gboolean use_remote_smileys, PurpleSmileyParseCb cb, gpointer ui_data); + +/** + * purple_smiley_parse_custom: + * @html_message: + * @cb: + * @ui_data: + * + * TODO + * + * Returns: TODO + */ +gchar * +purple_smiley_parse_custom(const gchar *html_message, PurpleSmileyParseCb cb, + gpointer ui_data); + +/** + * purple_smiley_find: + * @smileys: the list of smileys to find. + * @message: the message. + * @is_html: %TRUE if the message is HTML, %FALSE if it's plain, unescaped. + * + * Searches for all smileys from the @smileys list present in @message. + * Each smiley is returned only once, regardless how many times it appeared in + * text. However, distinct smileys may share common image file (thus, their + * paths will be the same). + * + * Returns: (transfer container): the #GList of found smileys. Use #g_list_free + * when no longer need it. + */ +GList * +purple_smiley_find(PurpleSmileyList *smileys, const gchar *message, + gboolean is_html); + +/** + * _purple_smiley_parser_init: (skip) + * + * Initializes the smileys parser subsystem. + */ +void +_purple_smiley_parser_init(void); + +/** + * _purple_smiley_parser_uninit: (skip) + * + * Uninitializes the smileys parser subsystem. + */ +void +_purple_smiley_parser_uninit(void); + +#endif /* _PURPLE_SMILEY_PARSER_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/smiley-remote.c Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,243 @@ +/* purple + * + * Purple 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 "glibcompat.h" + +#include "debug.h" +#include "smiley.h" +#include "smiley-remote.h" + +#define PURPLE_REMOTE_SMILEY_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_REMOTE_SMILEY, PurpleRemoteSmileyPrivate)) + +typedef struct { + GString *contents; + PurpleStoredImage *image; /* it's not the same as in parent */ + + gboolean has_failed; +} PurpleRemoteSmileyPrivate; + +enum +{ + PROP_0, + PROP_HAS_FAILED, + PROP_LAST +}; + +enum +{ + SIG_FAILED, + SIG_LAST +}; + +static GObjectClass *parent_class; + +static guint signals[SIG_LAST]; +static GParamSpec *properties[PROP_LAST]; + +/****************************************************************************** + * API implementation + ******************************************************************************/ + +void +purple_remote_smiley_write(PurpleRemoteSmiley *smiley, const guchar *data, + gsize size) +{ + PurpleRemoteSmileyPrivate *priv = + PURPLE_REMOTE_SMILEY_GET_PRIVATE(smiley); + + g_return_if_fail(priv != NULL); + g_return_if_fail(!priv->has_failed); + g_return_if_fail(!purple_smiley_is_ready(PURPLE_SMILEY(smiley))); + g_return_if_fail(data != NULL || size == 0); + + if (size == 0) + return; + + g_string_append_len(priv->contents, (const gchar*)data, size); +} + +void +purple_remote_smiley_close(PurpleRemoteSmiley *smiley) +{ + PurpleRemoteSmileyPrivate *priv = + PURPLE_REMOTE_SMILEY_GET_PRIVATE(smiley); + + g_return_if_fail(priv != NULL); + g_return_if_fail(!priv->has_failed); + g_return_if_fail(!purple_smiley_is_ready(PURPLE_SMILEY(smiley))); + g_return_if_fail(priv->contents != NULL); + g_return_if_fail(priv->image == NULL); + + if (priv->contents->len == 0) { + purple_debug_error("smiley-remote", "Smiley is empty"); + purple_remote_smiley_failed(smiley); + return; + } + + priv->image = purple_imgstore_new(priv->contents->str, + priv->contents->len, NULL); + g_return_if_fail(priv->image != NULL); + g_string_free(priv->contents, FALSE); + priv->contents = NULL; + + g_object_set(smiley, "is-ready", TRUE, NULL); + g_signal_emit_by_name(smiley, "ready"); +} + +void +purple_remote_smiley_failed(PurpleRemoteSmiley *smiley) +{ + PurpleRemoteSmileyPrivate *priv = + PURPLE_REMOTE_SMILEY_GET_PRIVATE(smiley); + + g_return_if_fail(priv != NULL); + g_return_if_fail(!purple_smiley_is_ready(PURPLE_SMILEY(smiley))); + + if (priv->has_failed) + return; + + priv->has_failed = TRUE; + g_object_notify_by_pspec(G_OBJECT(smiley), properties[PROP_HAS_FAILED]); + g_signal_emit(smiley, signals[SIG_FAILED], 0); +} + +static PurpleStoredImage * +purple_remote_smiley_get_image_impl(PurpleSmiley *smiley) +{ + PurpleRemoteSmileyPrivate *priv = + PURPLE_REMOTE_SMILEY_GET_PRIVATE(smiley); + + g_return_val_if_fail(priv != NULL, FALSE); + + if (purple_smiley_get_path(smiley)) + return PURPLE_SMILEY_CLASS(parent_class)->get_image(smiley); + + if (!priv->image) { + purple_debug_error("smiley-remote", + "Remote smiley is not ready yet"); + return NULL; + } + + return priv->image; +} + +/****************************************************************************** + * Object stuff + ******************************************************************************/ + +static void +purple_remote_smiley_init(GTypeInstance *instance, gpointer klass) +{ + PurpleRemoteSmiley *smiley = PURPLE_REMOTE_SMILEY(instance); + PurpleRemoteSmileyPrivate *priv = + PURPLE_REMOTE_SMILEY_GET_PRIVATE(smiley); + + priv->contents = g_string_new(NULL); + priv->has_failed = FALSE; +} + +static void +purple_remote_smiley_finalize(GObject *obj) +{ + PurpleRemoteSmiley *smiley = PURPLE_REMOTE_SMILEY(obj); + PurpleRemoteSmileyPrivate *priv = + PURPLE_REMOTE_SMILEY_GET_PRIVATE(smiley); + + if (priv->contents) + g_string_free(priv->contents, TRUE); + if (priv->image) + purple_imgstore_unref(priv->image); + + G_OBJECT_CLASS(parent_class)->finalize(obj); +} + +static void +purple_remote_smiley_get_property(GObject *object, guint par_id, GValue *value, + GParamSpec *pspec) +{ + PurpleRemoteSmiley *remote_smiley = PURPLE_REMOTE_SMILEY(object); + PurpleRemoteSmileyPrivate *priv = PURPLE_REMOTE_SMILEY_GET_PRIVATE(remote_smiley); + + switch (par_id) { + case PROP_HAS_FAILED: + g_value_set_boolean(value, priv->has_failed); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, par_id, pspec); + break; + } +} + +static void +purple_remote_smiley_class_init(PurpleRemoteSmileyClass *klass) +{ + GObjectClass *gobj_class = G_OBJECT_CLASS(klass); + PurpleSmileyClass *ps_class = PURPLE_SMILEY_CLASS(klass); + + parent_class = g_type_class_peek_parent(klass); + + g_type_class_add_private(klass, sizeof(PurpleRemoteSmileyPrivate)); + + gobj_class->finalize = purple_remote_smiley_finalize; + + ps_class->get_image = purple_remote_smiley_get_image_impl; + + gobj_class->get_property = purple_remote_smiley_get_property; + + properties[PROP_HAS_FAILED] = g_param_spec_boolean("has-failed", + "Has hailed", "The remote host has failed to send the smiley", + FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties(gobj_class, PROP_LAST, properties); + + /** + * PurpleRemoteSmiley::failed: + * @smiley: a smiley that failed to transfer. + * + * Called when a @smiley fails to be transferred. It's guaranteed to be + * fired at most once for a particular @smiley. + */ + signals[SIG_FAILED] = g_signal_new("failed", G_OBJECT_CLASS_TYPE(klass), + 0, 0, NULL, NULL, + g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); +} + +GType +purple_remote_smiley_get_type(void) +{ + static GType type = 0; + + if (G_UNLIKELY(type == 0)) { + static const GTypeInfo info = { + .class_size = sizeof(PurpleRemoteSmileyClass), + .class_init = (GClassInitFunc)purple_remote_smiley_class_init, + .instance_size = sizeof(PurpleRemoteSmiley), + .instance_init = purple_remote_smiley_init, + }; + + type = g_type_register_static(PURPLE_TYPE_SMILEY, + "PurpleRemoteSmiley", &info, 0); + } + + return type; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/smiley-remote.h Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,132 @@ +/* purple + * + * Purple 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 _PURPLE_REMOTE_SMILEY_H_ +#define _PURPLE_REMOTE_SMILEY_H_ +/** + * SECTION:smiley-remote + * @include:smiley-remote.h + * @section_id: libpurple-smiley-remote + * @short_description: smileys sent by a remote client + * @title: Remote smileys + * + * A #PurpleRemoteSmiley is quite handy, if you have received the message with + * custom remote smileys, but haven't received smileys yet. Obviously, it also + * fits for protocols, where a smiley image contents is sent with the message + * and is accessible without a delay - it does not require storing any temporary + * files to the disk. + * + * It handles received image data by storing it in its internal buffer and + * creates image object when needed. + */ + +#include <glib-object.h> + +#include "imgstore.h" +#include "util.h" + +typedef struct _PurpleRemoteSmiley PurpleRemoteSmiley; +typedef struct _PurpleRemoteSmileyClass PurpleRemoteSmileyClass; + +#define PURPLE_TYPE_REMOTE_SMILEY (purple_remote_smiley_get_type()) +#define PURPLE_REMOTE_SMILEY(smiley) (G_TYPE_CHECK_INSTANCE_CAST((smiley), PURPLE_TYPE_REMOTE_SMILEY, PurpleRemoteSmiley)) +#define PURPLE_REMOTE_SMILEY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_REMOTE_SMILEY, PurpleRemoteSmileyClass)) +#define PURPLE_IS_REMOTE_SMILEY(smiley) (G_TYPE_CHECK_INSTANCE_TYPE((smiley), PURPLE_TYPE_REMOTE_SMILEY)) +#define PURPLE_IS_REMOTE_SMILEY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_REMOTE_SMILEY)) +#define PURPLE_REMOTE_SMILEY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_REMOTE_SMILEY, PurpleRemoteSmileyClass)) + +/** + * PurpleRemoteSmiley: + * + * A smiley that was sent by remote client, most probably your buddy. + * + * It shouldn't be created directly. Instead, use + * #purple_conversation_add_remote_smiley. + */ +struct _PurpleRemoteSmiley +{ + /*< private >*/ + PurpleSmiley parent; +}; + +/** + * PurpleRemoteSmileyClass: + * + * Base class for #PurpleRemoteSmiley objects. + */ +struct _PurpleRemoteSmileyClass +{ + /*< private >*/ + PurpleSmileyClass parent_class; + + void (*purple_reserved1)(void); + void (*purple_reserved2)(void); + void (*purple_reserved3)(void); + void (*purple_reserved4)(void); +}; + +G_BEGIN_DECLS + +/** + * purple_remote_smiley_get_type: + * + * Returns: the #GType for a remote smiley. + */ +GType +purple_remote_smiley_get_type(void); + +/** + * purple_remote_smiley_write: + * @smiley: the remote smiley. + * @data: the buffer with image data chunk. + * @size: the size of image contents stored in @data. + * + * Writes next chunk of image data to the receive buffer. + */ +void +purple_remote_smiley_write(PurpleRemoteSmiley *smiley, const guchar *data, + gsize size); + +/** + * purple_remote_smiley_close: + * @smiley: the remote smiley. + * + * Called when all image data was already written using + * #purple_remote_smiley_write and image is ready to be processed. + */ +void +purple_remote_smiley_close(PurpleRemoteSmiley *smiley); + +/** + * purple_remote_smiley_failed: + * @smiley: the remote smiley. + * + * Called when the transfer of image data has failed. This invalidates @smiley + * object, which cannot be used anymore. It's removed from the #PurpleSmileyList + * containing it (depending on its configuration), so the smiley can be + * retrieved again. + */ +void +purple_remote_smiley_failed(PurpleRemoteSmiley *smiley); + +G_END_DECLS + +#endif /* _PURPLE_REMOTE_SMILEY_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/smiley-theme.c Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,97 @@ +/* purple + * + * Purple 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 "smiley-theme.h" + +static PurpleSmileyTheme *current = NULL; + +/******************************************************************************* + * API implementation + ******************************************************************************/ + +PurpleSmileyList * +purple_smiley_theme_get_smileys(PurpleSmileyTheme *theme, gpointer ui_data) +{ + PurpleSmileyThemeClass *klass; + + g_return_val_if_fail(PURPLE_IS_SMILEY_THEME(theme), NULL); + klass = PURPLE_SMILEY_THEME_GET_CLASS(theme); + g_return_val_if_fail(klass != NULL, NULL); + g_return_val_if_fail(klass->get_smileys != NULL, NULL); + + return klass->get_smileys(theme, ui_data); +} + +void +purple_smiley_theme_set_current(PurpleSmileyTheme *theme) +{ + PurpleSmileyThemeClass *klass; + + g_return_if_fail(theme == NULL || PURPLE_IS_SMILEY_THEME(theme)); + + if (theme) + g_object_ref(theme); + if (current) + g_object_unref(current); + current = theme; + + if (!theme) + return; + klass = PURPLE_SMILEY_THEME_GET_CLASS(theme); + g_return_if_fail(klass != NULL); + if (klass->activate) + klass->activate(theme); +} + +PurpleSmileyTheme * +purple_smiley_theme_get_current(void) +{ + return current; +} + +void +_purple_smiley_theme_uninit(void) +{ + purple_smiley_theme_set_current(NULL); +} + + +/******************************************************************************* + * Object stuff + ******************************************************************************/ + +GType +purple_smiley_theme_get_type(void) +{ + static GType type = 0; + + if (G_UNLIKELY(type == 0)) { + static const GTypeInfo info = { + .class_size = sizeof(PurpleSmileyThemeClass), + .instance_size = sizeof(PurpleSmileyTheme), + }; + + type = g_type_register_static(G_TYPE_OBJECT, + "PurpleSmileyTheme", &info, G_TYPE_FLAG_ABSTRACT); + } + + return type; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/smiley-theme.h Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,144 @@ +/* purple + * + * Purple 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 _PURPLE_SMILEY_THEME_H_ +#define _PURPLE_SMILEY_THEME_H_ +/** + * SECTION:smiley-theme + * @include:smiley-theme.h + * @section_id: libpurple-smiley-theme + * @short_description: a categorized set of standard smileys + * @title: Smiley themes + * + * A smiley theme is a set of standard smileys, that may be displayed in user's + * message window instead of their textual representations. It may be + * categorized depending on the selected protocol, as in #PidginSmileyTheme, but + * it's up to the UI to choose behavior. + */ + +#include <glib-object.h> + +#include "smiley.h" +#include "smiley-list.h" + +typedef struct _PurpleSmileyTheme PurpleSmileyTheme; +typedef struct _PurpleSmileyThemeClass PurpleSmileyThemeClass; + +#define PURPLE_TYPE_SMILEY_THEME (purple_smiley_theme_get_type()) +#define PURPLE_SMILEY_THEME(smiley) (G_TYPE_CHECK_INSTANCE_CAST((smiley), PURPLE_TYPE_SMILEY_THEME, PurpleSmileyTheme)) +#define PURPLE_SMILEY_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_SMILEY_THEME, PurpleSmileyThemeClass)) +#define PURPLE_IS_SMILEY_THEME(smiley) (G_TYPE_CHECK_INSTANCE_TYPE((smiley), PURPLE_TYPE_SMILEY_THEME)) +#define PURPLE_IS_SMILEY_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_SMILEY_THEME)) +#define PURPLE_SMILEY_THEME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_SMILEY_THEME, PurpleSmileyThemeClass)) + +/** + * PurpleSmileyTheme: + * + * An abstract class for smiley theme. + */ +struct _PurpleSmileyTheme +{ + /*< private >*/ + GObject parent; +}; + +/** + * PurpleSmileyThemeClass: + * @get_smileys: a callback for getting smiley list based on choosen category. + * The criteria for a category are being passed using the + * @ui_data parameter. + * @activate: a callback being fired after activating the @theme. It may be used + * for loading its contents before using @get_smileys callback. + * + * Base class for #PurpleSmileyTheme objects. + */ +struct _PurpleSmileyThemeClass +{ + /*< private >*/ + GObjectClass parent_class; + + /*< public >*/ + PurpleSmileyList * (*get_smileys)(PurpleSmileyTheme *theme, + gpointer ui_data); + void (*activate)(PurpleSmileyTheme *theme); + + /*< private >*/ + void (*purple_reserved1)(void); + void (*purple_reserved2)(void); + void (*purple_reserved3)(void); + void (*purple_reserved4)(void); +}; + +G_BEGIN_DECLS + +/** + * purple_smiley_theme_get_type: + * + * Returns: the #GType for a smiley list. + */ +GType +purple_smiley_theme_get_type(void); + +/** + * purple_smiley_theme_get_smileys: + * @theme: the smiley theme. + * @ui_data: the UI-passed criteria to choose a smiley set. + * + * Retrieves a smiley category based on UI-provided criteria. + * + * You might want to use <link linkend="libpurple-smiley-parser">smiley + * parser</link> instead. It's mostly for the UI, prpls shouldn't use it. + * + * Returns: (transfer none): a #PurpleSmileyList with standard smileys to use. + */ +PurpleSmileyList * +purple_smiley_theme_get_smileys(PurpleSmileyTheme *theme, gpointer ui_data); + +/** + * purple_smiley_theme_set_current: + * @theme: the smiley theme to be set as currently used. May be %NULL. + * + * Sets the new smiley theme to be used for displaying messages. + */ +void +purple_smiley_theme_set_current(PurpleSmileyTheme *theme); + +/** + * purple_smiley_theme_get_current: + * + * Returns the currently used smiley theme. + * + * Returns: the #PurpleSmileyTheme or %NULL, if none is set. + */ +PurpleSmileyTheme * +purple_smiley_theme_get_current(void); + +/** + * _purple_smiley_theme_uninit: (skip) + * + * Uninitializes the smileys theme subsystem. + */ +void +_purple_smiley_theme_uninit(void); + +G_END_DECLS + +#endif /* _PURPLE_SMILEY_THEME_H_ */
--- a/libpurple/smiley.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/smiley.c Mon Apr 07 20:02:22 2014 +0530 @@ -31,267 +31,123 @@ #define PURPLE_SMILEY_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_SMILEY, PurpleSmileyPrivate)) -/**************************************************************************/ -/* Structs */ -/**************************************************************************/ - typedef struct { - PurpleStoredImage *img; /* The id of the stored image with the - the smiley data. */ - char *shortcut; /* Shortcut associated with the custom - smiley. This field will work as a - unique key by this API. */ - char *checksum; /* The smiley checksum. */ + gchar *shortcut; + gchar *path; + PurpleStoredImage *image; + gboolean is_ready; } PurpleSmileyPrivate; -static GHashTable *smiley_shortcut_index = NULL; /* shortcut (char *) => smiley (PurpleSmiley*) */ -static GHashTable *smiley_checksum_index = NULL; /* checksum (char *) => smiley (PurpleSmiley*) */ - -static guint save_timer = 0; -static gboolean smileys_loaded = FALSE; -static char *smileys_dir = NULL; - -#define SMILEYS_DEFAULT_FOLDER "custom_smiley" -#define SMILEYS_LOG_ID "smileys" - -#define XML_FILE_NAME "smileys.xml" - -#define XML_ROOT_TAG "smileys" -#define XML_PROFILE_TAG "profile" -#define XML_PROFILE_NAME_ATTRIB_TAG "name" -#define XML_ACCOUNT_TAG "account" -#define XML_ACCOUNT_USERID_ATTRIB_TAG "userid" -#define XML_SMILEY_SET_TAG "smiley_set" -#define XML_SMILEY_TAG "smiley" -#define XML_SHORTCUT_ATTRIB_TAG "shortcut" -#define XML_CHECKSUM_ATRIB_TAG "checksum" -#define XML_FILENAME_ATRIB_TAG "filename" - - -/****************************************************************************** - * XML descriptor file layout * - ****************************************************************************** - * - * Although we are creating the profile XML structure here, now we - * won't handle it. - * So, we just add one profile named "default" that has no associated - * account elements, and have only the smiley_set that will contain - * all existent custom smiley. - * - * It's our "Highlander Profile" :-) - * - ****************************************************************************** - * - * <smileys> - * <profile name="john.doe"> - * <account userid="john.doe@jabber.org"> - * <account userid="john.doe@gmail.com"> - * <smiley_set> - * <smiley shortcut="aaa" checksum="xxxxxxxx" filename="file_name1.gif"/> - * <smiley shortcut="bbb" checksum="yyyyyyy" filename="file_name2.gif"/> - * </smiley_set> - * </profile> - * </smiley> - * - *****************************************************************************/ - - -/********************************************************************* - * Forward declarations * - *********************************************************************/ - -static gboolean read_smiley_file(const char *path, guchar **data, size_t *len); - -static char *get_file_full_path(const char *filename); - -static PurpleSmiley *purple_smiley_create(const char *shortcut); - -static void purple_smiley_load_file(const char *shortcut, const char *checksum, - const char *filename); - -static void -purple_smiley_set_data_impl(PurpleSmiley *smiley, guchar *smiley_data, - size_t smiley_data_len); - -static void -purple_smiley_data_store(PurpleStoredImage *stored_img); - -static void -purple_smiley_data_unstore(const char *filename); - -/********************************************************************* - * Writing to disk * - *********************************************************************/ - -static PurpleXmlNode * -smiley_to_xmlnode(PurpleSmiley *smiley) -{ - PurpleSmileyPrivate *priv = NULL; - PurpleXmlNode *smiley_node = NULL; - - smiley_node = purple_xmlnode_new(XML_SMILEY_TAG); - - if (!smiley_node) - return NULL; - - priv = PURPLE_SMILEY_GET_PRIVATE(smiley); - - purple_xmlnode_set_attrib(smiley_node, XML_SHORTCUT_ATTRIB_TAG, - priv->shortcut); - - purple_xmlnode_set_attrib(smiley_node, XML_CHECKSUM_ATRIB_TAG, - priv->checksum); - - purple_xmlnode_set_attrib(smiley_node, XML_FILENAME_ATRIB_TAG, - purple_imgstore_get_filename(priv->img)); - - return smiley_node; -} - -static void -add_smiley_to_main_node(gpointer key, gpointer value, gpointer user_data) -{ - PurpleXmlNode *child_node; - - child_node = smiley_to_xmlnode(value); - purple_xmlnode_insert_child((PurpleXmlNode*)user_data, child_node); -} - -static PurpleXmlNode * -smileys_to_xmlnode(void) -{ - PurpleXmlNode *root_node, *profile_node, *smileyset_node; - - root_node = purple_xmlnode_new(XML_ROOT_TAG); - purple_xmlnode_set_attrib(root_node, "version", "1.0"); - - /* See the top comments above to understand why initial tag elements - * are not being considered by now. */ - profile_node = purple_xmlnode_new(XML_PROFILE_TAG); - if (profile_node) { - purple_xmlnode_set_attrib(profile_node, XML_PROFILE_NAME_ATTRIB_TAG, "Default"); - purple_xmlnode_insert_child(root_node, profile_node); - - smileyset_node = purple_xmlnode_new(XML_SMILEY_SET_TAG); - if (smileyset_node) { - purple_xmlnode_insert_child(profile_node, smileyset_node); - g_hash_table_foreach(smiley_shortcut_index, add_smiley_to_main_node, smileyset_node); - } - } - - return root_node; -} - -static void -sync_smileys(void) -{ - PurpleXmlNode *root_node; - char *data; - - if (!smileys_loaded) { - purple_debug_error(SMILEYS_LOG_ID, "Attempted to save smileys before it " - "was read!\n"); - return; - } - - root_node = smileys_to_xmlnode(); - data = purple_xmlnode_to_formatted_str(root_node, NULL); - purple_util_write_data_to_file(XML_FILE_NAME, data, -1); - - g_free(data); - purple_xmlnode_free(root_node); -} - -static gboolean -save_smileys_cb(gpointer data) -{ - sync_smileys(); - save_timer = 0; - return FALSE; -} - -static void -purple_smileys_save(void) -{ - if (save_timer == 0) - save_timer = purple_timeout_add_seconds(5, save_smileys_cb, NULL); -} - - -/********************************************************************* - * Reading from disk * - *********************************************************************/ - -static void -parse_smiley(PurpleXmlNode *smiley_node) -{ - const char *shortcut = NULL; - const char *checksum = NULL; - const char *filename = NULL; - - shortcut = purple_xmlnode_get_attrib(smiley_node, XML_SHORTCUT_ATTRIB_TAG); - checksum = purple_xmlnode_get_attrib(smiley_node, XML_CHECKSUM_ATRIB_TAG); - filename = purple_xmlnode_get_attrib(smiley_node, XML_FILENAME_ATRIB_TAG); - - if ((shortcut == NULL) || (checksum == NULL) || (filename == NULL)) - return; - - purple_smiley_load_file(shortcut, checksum, filename); -} - -static void -purple_smileys_load(void) -{ - PurpleXmlNode *root_node, *profile_node; - PurpleXmlNode *smileyset_node = NULL; - PurpleXmlNode *smiley_node; - - smileys_loaded = TRUE; - - root_node = purple_util_read_xml_from_file(XML_FILE_NAME, - _(SMILEYS_LOG_ID)); - - if (root_node == NULL) - return; - - /* See the top comments above to understand why initial tag elements - * are not being considered by now. */ - profile_node = purple_xmlnode_get_child(root_node, XML_PROFILE_TAG); - if (profile_node) - smileyset_node = purple_xmlnode_get_child(profile_node, XML_SMILEY_SET_TAG); - - if (smileyset_node) { - smiley_node = purple_xmlnode_get_child(smileyset_node, XML_SMILEY_TAG); - for (; smiley_node != NULL; - smiley_node = purple_xmlnode_get_next_twin(smiley_node)) { - parse_smiley(smiley_node); - } - } - - purple_xmlnode_free(root_node); -} - -/********************************************************************* - * GObject Stuff * - *********************************************************************/ enum { PROP_0, PROP_SHORTCUT, - PROP_IMGSTORE, + PROP_IS_READY, + PROP_PATH, PROP_LAST }; enum { - SIG_DESTROY, + SIG_READY, SIG_LAST }; static guint signals[SIG_LAST]; -static GObjectClass *parent_class; static GParamSpec *properties[PROP_LAST]; +/******************************************************************************* + * API implementation + ******************************************************************************/ + +PurpleSmiley * +purple_smiley_new(const gchar *shortcut, const gchar *path) +{ + g_return_val_if_fail(shortcut != NULL, NULL); + g_return_val_if_fail(path != NULL, NULL); + + return g_object_new(PURPLE_TYPE_SMILEY, + "shortcut", shortcut, + "is-ready", TRUE, + "path", path, + NULL); +} + +const gchar * +purple_smiley_get_shortcut(const PurpleSmiley *smiley) +{ + PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley); + + g_return_val_if_fail(priv != NULL, NULL); + + return priv->shortcut; +} + +gboolean +purple_smiley_is_ready(const PurpleSmiley *smiley) +{ + PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley); + + g_return_val_if_fail(priv != NULL, FALSE); + + return priv->is_ready; +} + +const gchar * +purple_smiley_get_path(PurpleSmiley *smiley) +{ + PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley); + + g_return_val_if_fail(priv != NULL, FALSE); + + return priv->path; +} + +static PurpleStoredImage * +purple_smiley_get_image_impl(PurpleSmiley *smiley) +{ + PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley); + const gchar *path; + + g_return_val_if_fail(priv != NULL, FALSE); + + if (priv->image) + return priv->image; + + path = purple_smiley_get_path(smiley); + + if (!path) { + purple_debug_error("smiley", "Can't get smiley data " + "without a path"); + return NULL; + } + + priv->image = purple_imgstore_new_from_file(path); + if (!priv->image) { + purple_debug_error("smiley", "Couldn't load smiley data "); + return NULL; + } + return priv->image; +} + +PurpleStoredImage * +purple_smiley_get_image(PurpleSmiley *smiley) +{ + PurpleSmileyClass *klass; + + g_return_val_if_fail(PURPLE_IS_SMILEY(smiley), NULL); + klass = PURPLE_SMILEY_GET_CLASS(smiley); + g_return_val_if_fail(klass != NULL, NULL); + g_return_val_if_fail(klass->get_image != NULL, NULL); + + return klass->get_image(smiley); +} + + +/******************************************************************************* + * Object stuff + ******************************************************************************/ + static void purple_smiley_init(GTypeInstance *instance, gpointer klass) { @@ -300,126 +156,106 @@ } static void -purple_smiley_get_property(GObject *object, guint param_id, GValue *value, - GParamSpec *spec) +purple_smiley_finalize(GObject *obj) +{ + PurpleSmiley *smiley = PURPLE_SMILEY(obj); + PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley); + + g_free(priv->shortcut); + g_free(priv->path); + + if (priv->image) + purple_imgstore_unref(priv->image); + + PURPLE_DBUS_UNREGISTER_POINTER(smiley); +} + +static void +purple_smiley_get_property(GObject *object, guint par_id, GValue *value, + GParamSpec *pspec) { PurpleSmiley *smiley = PURPLE_SMILEY(object); PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley); - switch (param_id) { + switch (par_id) { case PROP_SHORTCUT: g_value_set_string(value, priv->shortcut); break; - case PROP_IMGSTORE: - g_value_set_pointer(value, priv->img); + case PROP_IS_READY: + g_value_set_boolean(value, priv->is_ready); + break; + case PROP_PATH: + g_value_set_string(value, priv->path); break; default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, spec); + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, par_id, pspec); break; } } static void -purple_smiley_set_property(GObject *object, guint param_id, const GValue *value, - GParamSpec *spec) +purple_smiley_set_property(GObject *object, guint par_id, const GValue *value, + GParamSpec *pspec) { PurpleSmiley *smiley = PURPLE_SMILEY(object); PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley); - switch (param_id) { + switch (par_id) { case PROP_SHORTCUT: - { - const char *shortcut = g_value_get_string(value); - purple_smiley_set_shortcut(smiley, shortcut); - } + g_free(priv->shortcut); + priv->shortcut = g_strdup(g_value_get_string(value)); break; - case PROP_IMGSTORE: - { - PurpleStoredImage *img = g_value_get_pointer(value); - - purple_imgstore_unref(priv->img); - g_free(priv->checksum); - - priv->img = img; - if (img) { - priv->checksum = g_compute_checksum_for_data( - G_CHECKSUM_SHA1, - purple_imgstore_get_data(img), - purple_imgstore_get_size(img)); - purple_smiley_data_store(img); - } else { - priv->checksum = NULL; - } - } + case PROP_IS_READY: + priv->is_ready = g_value_get_boolean(value); + break; + case PROP_PATH: + g_free(priv->path); + priv->path = g_strdup(g_value_get_string(value)); break; default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, spec); + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, par_id, pspec); break; } } static void -purple_smiley_finalize(GObject *obj) -{ - PurpleSmiley *smiley = PURPLE_SMILEY(obj); - PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley); - - if (g_hash_table_lookup(smiley_shortcut_index, priv->shortcut)) { - g_hash_table_remove(smiley_shortcut_index, priv->shortcut); - g_hash_table_remove(smiley_checksum_index, priv->checksum); - } - - g_free(priv->shortcut); - g_free(priv->checksum); - if (priv->img) - purple_smiley_data_unstore(purple_imgstore_get_filename(priv->img)); - purple_imgstore_unref(priv->img); - - PURPLE_DBUS_UNREGISTER_POINTER(smiley); - - purple_smileys_save(); -} - -static void -purple_smiley_dispose(GObject *gobj) -{ - g_signal_emit(gobj, signals[SIG_DESTROY], 0); - parent_class->dispose(gobj); -} - -static void purple_smiley_class_init(PurpleSmileyClass *klass) { GObjectClass *gobj_class = G_OBJECT_CLASS(klass); - - parent_class = g_type_class_peek_parent(klass); + PurpleSmileyClass *ps_class = PURPLE_SMILEY_CLASS(klass); g_type_class_add_private(klass, sizeof(PurpleSmileyPrivate)); gobj_class->get_property = purple_smiley_get_property; gobj_class->set_property = purple_smiley_set_property; gobj_class->finalize = purple_smiley_finalize; - gobj_class->dispose = purple_smiley_dispose; - /* Shortcut */ + ps_class->get_image = purple_smiley_get_image_impl; + properties[PROP_SHORTCUT] = g_param_spec_string("shortcut", "Shortcut", - "The text-shortcut for the smiley", - NULL, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + "A non-escaped textual representation of a smiley.", NULL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); - /* Stored Image */ - properties[PROP_IMGSTORE] = g_param_spec_pointer("image", "Stored Image", - "Stored Image. (that'll have to do for now)", - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + properties[PROP_IS_READY] = g_param_spec_boolean("is-ready", "Is ready", + "Determines, if a smiley is ready to be displayed.", TRUE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS); + + properties[PROP_PATH] = g_param_spec_string("path", "Path", + "The full path to the smiley image file.", NULL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties(gobj_class, PROP_LAST, properties); - signals[SIG_DESTROY] = g_signal_new("destroy", - G_OBJECT_CLASS_TYPE(klass), - G_SIGNAL_RUN_LAST, - 0, NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); + /** + * PurpleSmiley::ready: + * @smiley: a smiley that became ready. + * + * Called when a @smiley becames ready to be displayed. It's guaranteed to be + * fired at most once for a particular @smiley. + */ + signals[SIG_READY] = g_signal_new("ready", G_OBJECT_CLASS_TYPE(klass), + 0, 0, NULL, NULL, + g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } GType @@ -427,504 +263,17 @@ { static GType type = 0; - if(type == 0) { + if (G_UNLIKELY(type == 0)) { static const GTypeInfo info = { - sizeof(PurpleSmileyClass), - NULL, - NULL, - (GClassInitFunc)purple_smiley_class_init, - NULL, - NULL, - sizeof(PurpleSmiley), - 0, - purple_smiley_init, - NULL, + .class_size = sizeof(PurpleSmileyClass), + .class_init = (GClassInitFunc)purple_smiley_class_init, + .instance_size = sizeof(PurpleSmiley), + .instance_init = purple_smiley_init, }; type = g_type_register_static(G_TYPE_OBJECT, - "PurpleSmiley", - &info, 0); + "PurpleSmiley", &info, 0); } return type; } - -/********************************************************************* - * Other Stuff * - *********************************************************************/ - -static char *get_file_full_path(const char *filename) -{ - char *path; - - path = g_build_filename(purple_smileys_get_storing_dir(), filename, NULL); - - if (!g_file_test(path, G_FILE_TEST_EXISTS)) { - g_free(path); - return NULL; - } - - return path; -} - -static void -purple_smiley_load_file(const char *shortcut, const char *checksum, const char *filename) -{ - PurpleSmiley *smiley = NULL; - PurpleSmileyPrivate *priv = NULL; - guchar *smiley_data; - size_t smiley_data_len; - char *fullpath = NULL; - - g_return_if_fail(shortcut != NULL); - g_return_if_fail(checksum != NULL); - g_return_if_fail(filename != NULL); - - fullpath = get_file_full_path(filename); - if (!fullpath) { - purple_debug_error(SMILEYS_LOG_ID, "Path for filename %s doesn't exist\n", filename); - return; - } - - smiley = purple_smiley_create(shortcut); - if (!smiley) { - g_free(fullpath); - return; - } - - priv = PURPLE_SMILEY_GET_PRIVATE(smiley); - - priv->checksum = g_strdup(checksum); - - if (read_smiley_file(fullpath, &smiley_data, &smiley_data_len)) - purple_smiley_set_data_impl(smiley, smiley_data, - smiley_data_len); - else - purple_smiley_delete(smiley); - - g_free(fullpath); - -} - -static void -purple_smiley_data_store(PurpleStoredImage *stored_img) -{ - const char *dirname; - char *path; - FILE *file = NULL; - - g_return_if_fail(stored_img != NULL); - - if (!smileys_loaded) - return; - - dirname = purple_smileys_get_storing_dir(); - path = g_build_filename(dirname, purple_imgstore_get_filename(stored_img), NULL); - - if (!g_file_test(dirname, G_FILE_TEST_IS_DIR)) { - purple_debug_info(SMILEYS_LOG_ID, "Creating smileys directory.\n"); - - if (g_mkdir(dirname, S_IRUSR | S_IWUSR | S_IXUSR) < 0) { - purple_debug_error(SMILEYS_LOG_ID, - "Unable to create directory %s: %s\n", - dirname, g_strerror(errno)); - } - } - - if ((file = g_fopen(path, "wb")) != NULL) { - if (!fwrite(purple_imgstore_get_data(stored_img), - purple_imgstore_get_size(stored_img), 1, file)) { - purple_debug_error(SMILEYS_LOG_ID, "Error writing %s: %s\n", - path, g_strerror(errno)); - } else { - purple_debug_info(SMILEYS_LOG_ID, "Wrote cache file: %s\n", path); - } - - fclose(file); - } else { - purple_debug_error(SMILEYS_LOG_ID, "Unable to create file %s: %s\n", - path, g_strerror(errno)); - g_free(path); - - return; - } - - g_free(path); -} - -static void -purple_smiley_data_unstore(const char *filename) -{ - const char *dirname; - char *path; - - g_return_if_fail(filename != NULL); - - dirname = purple_smileys_get_storing_dir(); - path = g_build_filename(dirname, filename, NULL); - - if (g_file_test(path, G_FILE_TEST_EXISTS)) { - if (g_unlink(path)) - purple_debug_error(SMILEYS_LOG_ID, "Failed to delete %s: %s\n", - path, g_strerror(errno)); - else - purple_debug_info(SMILEYS_LOG_ID, "Deleted cache file: %s\n", path); - } - - g_free(path); -} - -static gboolean -read_smiley_file(const char *path, guchar **data, size_t *len) -{ - GError *err = NULL; - - if (!g_file_get_contents(path, (gchar **)data, len, &err)) { - purple_debug_error(SMILEYS_LOG_ID, "Error reading %s: %s\n", - path, err->message); - g_error_free(err); - - return FALSE; - } - - return TRUE; -} - -static PurpleStoredImage * -purple_smiley_data_new(guchar *smiley_data, size_t smiley_data_len) -{ - char *filename; - PurpleStoredImage *stored_img; - - g_return_val_if_fail(smiley_data != NULL, NULL); - g_return_val_if_fail(smiley_data_len > 0, NULL); - - filename = purple_util_get_image_filename(smiley_data, smiley_data_len); - - if (filename == NULL) { - g_free(smiley_data); - return NULL; - } - - stored_img = purple_imgstore_new(smiley_data, smiley_data_len, filename); - - g_free(filename); - - return stored_img; -} - -static void -purple_smiley_set_data_impl(PurpleSmiley *smiley, guchar *smiley_data, - size_t smiley_data_len) -{ - PurpleSmileyPrivate *priv = NULL; - PurpleStoredImage *old_img, *new_img; - const char *old_filename = NULL; - const char *new_filename = NULL; - - g_return_if_fail(smiley != NULL); - g_return_if_fail(smiley_data != NULL); - g_return_if_fail(smiley_data_len > 0); - - priv = PURPLE_SMILEY_GET_PRIVATE(smiley); - - old_img = priv->img; - - new_img = purple_smiley_data_new(smiley_data, smiley_data_len); - - g_object_set(G_OBJECT(smiley), "image", new_img, NULL); - - /* If the old and new image files have different names we need - * to unstore old image file. */ - if (!old_img) - return; - - old_filename = purple_imgstore_get_filename(old_img); - new_filename = purple_imgstore_get_filename(priv->img); - - if (g_ascii_strcasecmp(old_filename, new_filename)) - purple_smiley_data_unstore(old_filename); - purple_imgstore_unref(old_img); -} - - -/***************************************************************************** - * Public API functions * - *****************************************************************************/ - -static PurpleSmiley * -purple_smiley_create(const char *shortcut) -{ - PurpleSmiley *smiley; - - smiley = PURPLE_SMILEY(g_object_new(PURPLE_TYPE_SMILEY, "shortcut", shortcut, NULL)); - - return smiley; -} - -PurpleSmiley * -purple_smiley_new(PurpleStoredImage *img, const char *shortcut) -{ - PurpleSmiley *smiley = NULL; - - g_return_val_if_fail(shortcut != NULL, NULL); - g_return_val_if_fail(img != NULL, NULL); - - smiley = purple_smileys_find_by_shortcut(shortcut); - if (smiley) - return smiley; - - smiley = purple_smiley_create(shortcut); - if (!smiley) - return NULL; - - g_object_set(G_OBJECT(smiley), "image", img, NULL); - - return smiley; -} - -static PurpleSmiley * -purple_smiley_new_from_stream(const char *shortcut, guchar *smiley_data, - size_t smiley_data_len) -{ - PurpleSmiley *smiley = NULL; - PurpleSmileyPrivate *priv = NULL; - - g_return_val_if_fail(shortcut != NULL, NULL); - g_return_val_if_fail(smiley_data != NULL, NULL); - g_return_val_if_fail(smiley_data_len > 0, NULL); - - smiley = purple_smileys_find_by_shortcut(shortcut); - if (smiley) - return smiley; - - /* purple_smiley_create() sets shortcut */ - smiley = purple_smiley_create(shortcut); - if (!smiley) - return NULL; - - priv = PURPLE_SMILEY_GET_PRIVATE(smiley); - - purple_smiley_set_data_impl(smiley, smiley_data, smiley_data_len); - purple_smiley_data_store(priv->img); - - return smiley; -} - -PurpleSmiley * -purple_smiley_new_from_file(const char *shortcut, const char *filepath) -{ - PurpleSmiley *smiley = NULL; - guchar *smiley_data; - size_t smiley_data_len; - - g_return_val_if_fail(shortcut != NULL, NULL); - g_return_val_if_fail(filepath != NULL, NULL); - - if (read_smiley_file(filepath, &smiley_data, &smiley_data_len)) { - smiley = purple_smiley_new_from_stream(shortcut, smiley_data, - smiley_data_len); - } - - return smiley; -} - -void -purple_smiley_delete(PurpleSmiley *smiley) -{ - g_return_if_fail(smiley != NULL); - - g_object_unref(smiley); -} - -gboolean -purple_smiley_set_shortcut(PurpleSmiley *smiley, const char *shortcut) -{ - PurpleSmileyPrivate *priv = NULL; - - g_return_val_if_fail(smiley != NULL, FALSE); - g_return_val_if_fail(shortcut != NULL, FALSE); - - /* Check out whether the new shortcut is already being used. */ - if (g_hash_table_lookup(smiley_shortcut_index, shortcut)) - return FALSE; - - priv = PURPLE_SMILEY_GET_PRIVATE(smiley); - - /* Remove the old shortcut. */ - if (priv->shortcut) - g_hash_table_remove(smiley_shortcut_index, priv->shortcut); - - /* Insert the new shortcut. */ - g_hash_table_insert(smiley_shortcut_index, g_strdup(shortcut), smiley); - - g_free(priv->shortcut); - priv->shortcut = g_strdup(shortcut); - - g_object_notify_by_pspec(G_OBJECT(smiley), properties[PROP_SHORTCUT]); - - purple_smileys_save(); - - return TRUE; -} - -void -purple_smiley_set_data(PurpleSmiley *smiley, guchar *smiley_data, - size_t smiley_data_len) -{ - PurpleSmileyPrivate *priv = NULL; - - g_return_if_fail(smiley != NULL); - g_return_if_fail(smiley_data != NULL); - g_return_if_fail(smiley_data_len > 0); - - priv = PURPLE_SMILEY_GET_PRIVATE(smiley); - - /* Remove the previous entry */ - g_hash_table_remove(smiley_checksum_index, priv->checksum); - - /* Update the file data. This also updates the checksum. */ - purple_smiley_set_data_impl(smiley, smiley_data, smiley_data_len); - - /* Reinsert the index item. */ - g_hash_table_insert(smiley_checksum_index, g_strdup(priv->checksum), smiley); - - purple_smileys_save(); -} - -PurpleStoredImage * -purple_smiley_get_stored_image(const PurpleSmiley *smiley) -{ - PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley); - return purple_imgstore_ref(priv->img); -} - -const char *purple_smiley_get_shortcut(const PurpleSmiley *smiley) -{ - PurpleSmileyPrivate *priv = NULL; - - g_return_val_if_fail(smiley != NULL, NULL); - - priv = PURPLE_SMILEY_GET_PRIVATE(smiley); - return priv->shortcut; -} - -const char * -purple_smiley_get_checksum(const PurpleSmiley *smiley) -{ - PurpleSmileyPrivate *priv = NULL; - - g_return_val_if_fail(smiley != NULL, NULL); - - priv = PURPLE_SMILEY_GET_PRIVATE(smiley); - return priv->checksum; -} - -gconstpointer -purple_smiley_get_data(const PurpleSmiley *smiley, size_t *len) -{ - PurpleSmileyPrivate *priv = NULL; - - g_return_val_if_fail(smiley != NULL, NULL); - - priv = PURPLE_SMILEY_GET_PRIVATE(smiley); - - if (priv->img) { - if (len != NULL) - *len = purple_imgstore_get_size(priv->img); - - return purple_imgstore_get_data(priv->img); - } - - return NULL; -} - -const char * -purple_smiley_get_extension(const PurpleSmiley *smiley) -{ - PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley); - - if (priv->img != NULL) - return purple_imgstore_get_extension(priv->img); - - return NULL; -} - -char *purple_smiley_get_full_path(PurpleSmiley *smiley) -{ - PurpleSmileyPrivate *priv = NULL; - - g_return_val_if_fail(smiley != NULL, NULL); - - priv = PURPLE_SMILEY_GET_PRIVATE(smiley); - - if (priv->img == NULL) - return NULL; - - return get_file_full_path(purple_imgstore_get_filename(priv->img)); -} - -static void add_smiley_to_list(gpointer key, gpointer value, gpointer user_data) -{ - GList** returninglist = (GList**)user_data; - - *returninglist = g_list_append(*returninglist, value); -} - -GList * -purple_smileys_get_all(void) -{ - GList *returninglist = NULL; - - g_hash_table_foreach(smiley_shortcut_index, add_smiley_to_list, &returninglist); - - return returninglist; -} - -PurpleSmiley * -purple_smileys_find_by_shortcut(const char *shortcut) -{ - g_return_val_if_fail(shortcut != NULL, NULL); - - return g_hash_table_lookup(smiley_shortcut_index, shortcut); -} - -PurpleSmiley * -purple_smileys_find_by_checksum(const char *checksum) -{ - g_return_val_if_fail(checksum != NULL, NULL); - - return g_hash_table_lookup(smiley_checksum_index, checksum); -} - -const char * -purple_smileys_get_storing_dir(void) -{ - return smileys_dir; -} - -void -purple_smileys_init(void) -{ - smiley_shortcut_index = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); - smiley_checksum_index = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); - - smileys_dir = g_build_filename(purple_user_dir(), SMILEYS_DEFAULT_FOLDER, NULL); - - purple_smileys_load(); -} - -void -purple_smileys_uninit(void) -{ - if (save_timer != 0) { - purple_timeout_remove(save_timer); - save_timer = 0; - sync_smileys(); - } - - g_hash_table_destroy(smiley_shortcut_index); - g_hash_table_destroy(smiley_checksum_index); - g_free(smileys_dir); -} -
--- a/libpurple/smiley.h Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/smiley.h Mon Apr 07 20:02:22 2014 +0530 @@ -16,41 +16,45 @@ * * 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 - * + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ #ifndef _PURPLE_SMILEY_H_ #define _PURPLE_SMILEY_H_ /** * SECTION:smiley + * @include:smiley.h * @section_id: libpurple-smiley - * @short_description: <filename>smiley.h</filename> - * @title: Smiley API + * @short_description: a link between emoticon image and its textual representation + * @title: Smileys + * + * A #PurpleSmiley is a base class for associating emoticon images and their + * textual representation. It's intended for various smiley-related tasks: + * parsing the text against them, displaying in the smiley selector, or handling + * remote data (using #PurpleRemoteSmiley). + * + * The #PurpleSmiley:shortcut is always unescaped, but <link linkend="libpurple-smiley-parser">smiley parser</link> + * may deal with special characters. */ +#include "imgstore.h" + #include <glib-object.h> -#include "imgstore.h" -#include "util.h" - -typedef struct _PurpleSmiley PurpleSmiley; -typedef struct _PurpleSmileyClass PurpleSmileyClass; +typedef struct _PurpleSmiley PurpleSmiley; +typedef struct _PurpleSmileyClass PurpleSmileyClass; -#define PURPLE_TYPE_SMILEY (purple_smiley_get_type ()) -#define PURPLE_SMILEY(smiley) (G_TYPE_CHECK_INSTANCE_CAST ((smiley), PURPLE_TYPE_SMILEY, PurpleSmiley)) -#define PURPLE_SMILEY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PURPLE_TYPE_SMILEY, PurpleSmileyClass)) -#define PURPLE_IS_SMILEY(smiley) (G_TYPE_CHECK_INSTANCE_TYPE ((smiley), PURPLE_TYPE_SMILEY)) -#define PURPLE_IS_SMILEY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PURPLE_TYPE_SMILEY)) -#define PURPLE_SMILEY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PURPLE_TYPE_SMILEY, PurpleSmileyClass)) +#define PURPLE_TYPE_SMILEY (purple_smiley_get_type()) +#define PURPLE_SMILEY(smiley) (G_TYPE_CHECK_INSTANCE_CAST((smiley), PURPLE_TYPE_SMILEY, PurpleSmiley)) +#define PURPLE_SMILEY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_SMILEY, PurpleSmileyClass)) +#define PURPLE_IS_SMILEY(smiley) (G_TYPE_CHECK_INSTANCE_TYPE((smiley), PURPLE_TYPE_SMILEY)) +#define PURPLE_IS_SMILEY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_SMILEY)) +#define PURPLE_SMILEY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_SMILEY, PurpleSmileyClass)) /** * PurpleSmiley: * - * A custom smiley. - * - * This contains everything Purple will ever need to know about a custom smiley. - * Everything. + * A generic smiley. It can either be a theme smiley, or a custom smiley. */ struct _PurpleSmiley { @@ -58,11 +62,22 @@ GObject parent; }; +/** + * PurpleSmileyClass: + * @get_image: gets image contents for a @smiley. May not require + * #PurpleSmiley:path being set. See #purple_smiley_get_image. + * + * Base class for #PurpleSmiley objects. + */ struct _PurpleSmileyClass { /*< private >*/ GObjectClass parent_class; + /*< public >*/ + PurpleStoredImage * (*get_image)(PurpleSmiley *smiley); + + /*< private >*/ void (*purple_reserved1)(void); void (*purple_reserved2)(void); void (*purple_reserved3)(void); @@ -71,222 +86,82 @@ G_BEGIN_DECLS -/**************************************************************************/ -/* Custom Smiley API */ -/**************************************************************************/ - /** * purple_smiley_get_type: * - * Returns: The #GType for a smiley. + * Returns: the #GType for a smiley. */ -GType purple_smiley_get_type(void); +GType +purple_smiley_get_type(void); /** * purple_smiley_new: - * @img: The image associated with the smiley. - * @shortcut: The associated shortcut (e.g. "(homer)"). - * - * Creates a new custom smiley from a PurpleStoredImage. - * - * If a custom smiley with the given shortcut already exists, it - * will be automaticaly returned. + * @shortcut: the smiley shortcut (unescaped). + * @path: the smiley image file path. * - * Returns: The custom smiley. - */ -PurpleSmiley * -purple_smiley_new(PurpleStoredImage *img, const char *shortcut); - -/** - * purple_smiley_new_from_file: - * @shortcut: The associated shortcut (e.g. "(homer)"). - * @filepath: The image file. + * Creates new smiley, which is ready to display (its file exists + * and is a valid image). * - * Creates a new custom smiley, reading the image data from a file. - * - * If a custom smiley with the given shortcut already exists, it - * will be automaticaly returned. - * - * Returns: The custom smiley. + * Returns: the new #PurpleSmiley. */ PurpleSmiley * -purple_smiley_new_from_file(const char *shortcut, const char *filepath); - -/** - * purple_smiley_delete: - * @smiley: The custom smiley. - * - * Destroys the custom smiley and releases the associated resources. - */ -void -purple_smiley_delete(PurpleSmiley *smiley); - -/** - * purple_smiley_set_shortcut: - * @smiley: The custom smiley. - * @shortcut: The new shortcut. A custom smiley with this shortcut - * cannot already be in use. - * - * Changes the custom smiley's shortcut. - * - * Returns: TRUE if the shortcut was changed. FALSE otherwise. - */ -gboolean -purple_smiley_set_shortcut(PurpleSmiley *smiley, const char *shortcut); - -/** - * purple_smiley_set_data: - * @smiley: The custom smiley. - * @smiley_data: The custom smiley data, which the smiley code - * takes ownership of and will free. - * @smiley_data_len: The length of the data in @smiley_data. - * - * Changes the custom smiley's image data. - */ -void -purple_smiley_set_data(PurpleSmiley *smiley, guchar *smiley_data, - size_t smiley_data_len); +purple_smiley_new(const gchar *shortcut, const gchar *path); /** * purple_smiley_get_shortcut: - * @smiley: The custom smiley. - * - * Returns the custom smiley's associated shortcut (e.g. "(homer)"). - * - * Returns: The shortcut. - */ -const char *purple_smiley_get_shortcut(const PurpleSmiley *smiley); - -/** - * purple_smiley_get_checksum: - * @smiley: The custom smiley. + * @smiley: the smiley. * - * Returns the custom smiley data's checksum. - * - * Returns: The checksum. - */ -const char *purple_smiley_get_checksum(const PurpleSmiley *smiley); - -/** - * purple_smiley_get_stored_image: - * @smiley: The custom smiley. - * - * Returns the PurpleStoredImage with the reference counter incremented. - * - * The returned PurpleStoredImage reference counter must be decremented - * when the caller is done using it. + * Returns the @smiley's associated shortcut (e.g. <literal>(homer)</literal> or + * <literal>:-)</literal>). * - * Returns: A PurpleStoredImage. + * Returns: the unescaped shortcut. */ -PurpleStoredImage *purple_smiley_get_stored_image(const PurpleSmiley *smiley); - -/** - * purple_smiley_get_data: - * @smiley: The custom smiley. - * @len: If not %NULL, the length of the image data returned - * will be set in the location pointed to by this. - * - * Returns the custom smiley's data. - * - * Returns: A pointer to the custom smiley data. - */ -gconstpointer purple_smiley_get_data(const PurpleSmiley *smiley, size_t *len); - -/** - * purple_smiley_get_extension: - * @smiley: The custom smiley. - * - * Returns an extension corresponding to the custom smiley's file type. - * - * Returns: The custom smiley's extension, "icon" if unknown, or %NULL if - * the image data has disappeared. - */ -const char *purple_smiley_get_extension(const PurpleSmiley *smiley); +const gchar * +purple_smiley_get_shortcut(const PurpleSmiley *smiley); /** - * purple_smiley_get_full_path: - * @smiley: The custom smiley. + * purple_smiley_is_ready: + * @smiley: the smiley. * - * Returns a full path to an custom smiley. - * - * If the custom smiley has data and the file exists in the cache, this - * will return a full path to the cached file. + * Checks, if the @smiley is ready to be displayed. For #PurpleSmiley it's + * always %TRUE, but for deriving classes it may vary. * - * In general, it is not appropriate to be poking in the file cache - * directly. If you find yourself wanting to use this function, think - * very long and hard about it, and then don't. + * Being ready means either its #PurpleSmiley:path is set and file exists, + * or its contents is available via #purple_smiley_get_image. The latter is + * always true, but not always efficient. * - * Think some more. - * - * Returns: A full path to the file, or %NULL under various conditions. - * The caller should use g_free to free the returned string. + * Returns: %TRUE, if the @smiley is ready to be displayed. */ -char *purple_smiley_get_full_path(PurpleSmiley *smiley); - - -/**************************************************************************/ -/* Custom Smiley Subsystem API */ -/**************************************************************************/ - -/** - * purple_smileys_get_all: - * - * Returns a list of all custom smileys. The caller is responsible for freeing - * the list. - * - * Returns: A list of all custom smileys. - */ -GList * -purple_smileys_get_all(void); +gboolean +purple_smiley_is_ready(const PurpleSmiley *smiley); /** - * purple_smileys_find_by_shortcut: - * @shortcut: The custom smiley's shortcut. + * purple_smiley_get_path: + * @smiley: the smiley. + * + * Returns a full path to a @smiley image file. * - * Returns a custom smiley given its shortcut. + * A @smiley may not be saved to disk (the path will be NULL), but could still be + * accessible using #purple_smiley_get_data. * - * Returns: The custom smiley if found, or %NULL if not found. + * Returns: a full path to the file, or %NULL if it's not stored to the disk + * or an error occured. */ -PurpleSmiley * -purple_smileys_find_by_shortcut(const char *shortcut); - -/** - * purple_smileys_find_by_checksum: - * @checksum: The custom smiley's checksum. - * - * Returns a custom smiley given its checksum. - * - * Returns: The custom smiley if found, or %NULL if not found. - */ -PurpleSmiley * -purple_smileys_find_by_checksum(const char *checksum); +const gchar * +purple_smiley_get_path(PurpleSmiley *smiley); /** - * purple_smileys_get_storing_dir: - * - * Returns the directory used to store custom smiley cached files. + * purple_smiley_get_image: + * @smiley: the smiley. * - * The default directory is PURPLEDIR/custom_smiley. + * Returns (and possibly loads) the image contents for a @smiley. + * If you want to save it, increase a ref count for the returned object. * - * Returns: The directory in which to store custom smileys cached files. + * Returns: (transfer none): the image contents for a @smiley. */ -const char *purple_smileys_get_storing_dir(void); - -/** - * purple_smileys_init: - * - * Initializes the custom smiley subsystem. - */ -void purple_smileys_init(void); - -/** - * purple_smileys_uninit: - * - * Uninitializes the custom smiley subsystem. - */ -void purple_smileys_uninit(void); +PurpleStoredImage * +purple_smiley_get_image(PurpleSmiley *smiley); G_END_DECLS #endif /* _PURPLE_SMILEY_H_ */ -
--- a/libpurple/stun.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/stun.c Mon Apr 07 20:02:22 2014 +0530 @@ -48,6 +48,10 @@ #define ATTRIB_MAPPEDADDRESS 0x0001 +#ifndef _SIZEOF_ADDR_IFREQ +# define _SIZEOF_ADDR_IFREQ(a) sizeof(a) +#endif + struct stun_header { guint16 type; guint16 len; @@ -159,12 +163,13 @@ static void reply_cb(gpointer data, gint source, PurpleInputCondition cond) { struct stun_conn *sc = data; - char buffer[65536]; - char *tmp; + guchar buffer[65536]; + struct ifreq buffer_ifr[1000]; + guchar *it, *it_end; gssize len; struct in_addr in; - struct stun_attrib *attrib; - struct stun_header *hdr; + struct stun_attrib attrib; + struct stun_header hdr; struct ifconf ifc; struct ifreq *ifr; struct sockaddr_in *sinptr; @@ -183,50 +188,50 @@ return; } - hdr = (struct stun_header*) buffer; - if ((gsize)len != (ntohs(hdr->len) + sizeof(struct stun_header))) { + memcpy(&hdr, buffer, sizeof(hdr)); + if ((gsize)len != (ntohs(hdr.len) + sizeof(struct stun_header))) { purple_debug_warning("stun", "got incomplete response\n"); return; } /* wrong transaction */ - if(hdr->transid[0] != sc->packet->transid[0] - || hdr->transid[1] != sc->packet->transid[1] - || hdr->transid[2] != sc->packet->transid[2] - || hdr->transid[3] != sc->packet->transid[3]) { + if(hdr.transid[0] != sc->packet->transid[0] + || hdr.transid[1] != sc->packet->transid[1] + || hdr.transid[2] != sc->packet->transid[2] + || hdr.transid[3] != sc->packet->transid[3]) { purple_debug_warning("stun", "got wrong transid\n"); return; } if(sc->test==1) { - if (hdr->type != MSGTYPE_BINDINGRESPONSE) { + if (hdr.type != MSGTYPE_BINDINGRESPONSE) { purple_debug_warning("stun", "Expected Binding Response, got %d\n", - hdr->type); + hdr.type); return; } - tmp = buffer + sizeof(struct stun_header); - while((buffer + len) > (tmp + sizeof(struct stun_attrib))) { - attrib = (struct stun_attrib*) tmp; - tmp += sizeof(struct stun_attrib); + it = buffer + sizeof(struct stun_header); + while((buffer + len) > (it + sizeof(struct stun_attrib))) { + memcpy(&attrib, it, sizeof(attrib)); + it += sizeof(struct stun_attrib); - if (!((buffer + len) > (tmp + ntohs(attrib->len)))) + if (!((buffer + len) > (it + ntohs(attrib.len)))) break; - if(attrib->type == htons(ATTRIB_MAPPEDADDRESS) - && ntohs(attrib->len) == 8) { + if(attrib.type == htons(ATTRIB_MAPPEDADDRESS) + && ntohs(attrib.len) == 8) { char *ip; /* Skip the first unused byte, * the family(1 byte), and the port(2 bytes); * then read the 4 byte IPv4 address */ - memcpy(&in.s_addr, tmp + 4, 4); + memcpy(&in.s_addr, it + 4, 4); ip = inet_ntoa(in); if(ip) g_strlcpy(nattype.publicip, ip, sizeof(nattype.publicip)); } - tmp += ntohs(attrib->len); + it += ntohs(attrib.len); } purple_debug_info("stun", "got public ip %s\n", nattype.publicip); nattype.status = PURPLE_STUN_STATUS_DISCOVERED; @@ -235,19 +240,19 @@ /* is it a NAT? */ - ifc.ifc_len = sizeof(buffer); - ifc.ifc_req = (struct ifreq *) buffer; + ifc.ifc_len = sizeof(buffer_ifr); + ifc.ifc_req = buffer_ifr; ioctl(source, SIOCGIFCONF, &ifc); - tmp = buffer; - while(tmp < buffer + ifc.ifc_len) { - ifr = (struct ifreq *) tmp; - - tmp += sizeof(struct ifreq); + it = buffer; + it_end = it + ifc.ifc_len; + while (it < it_end) { + ifr = (struct ifreq*)(gpointer)it; + it += _SIZEOF_ADDR_IFREQ(*ifr); if(ifr->ifr_addr.sa_family == AF_INET) { /* we only care about ipv4 interfaces */ - sinptr = (struct sockaddr_in *) &ifr->ifr_addr; + sinptr = (struct sockaddr_in *)(gpointer)&ifr->ifr_addr; if(sinptr->sin_addr.s_addr == in.s_addr) { /* no NAT */ purple_debug_info("stun", "no nat\n");
--- a/libpurple/tests/test_trie.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/tests/test_trie.c Mon Apr 07 20:02:22 2014 +0530 @@ -1,17 +1,55 @@ +/* + * Purple + * + * Purple 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 <string.h> #include "tests.h" #include "../trie.h" +static gint find_sum; + static gboolean test_trie_replace_cb(GString *out, const gchar *word, gpointer word_data, gpointer user_data) { /* the "test" word for the test_trie_replace test */ - if ((int)word_data == 0x1001) + if ((gintptr)word_data == 0x1001) return FALSE; - g_string_append_printf(out, "[%d:%x]", (int)user_data, (int)word_data); + g_string_append_printf(out, "[%d:%x]", + (int)(gintptr)user_data, (int)(gintptr)word_data); + + return TRUE; +} + +static gboolean +test_trie_find_cb(const gchar *word, gpointer word_data, + gpointer user_data) +{ + if ((gintptr)word_data == 0x7004) + return FALSE; + + find_sum += (gintptr)word_data; + find_sum -= (gintptr)user_data * 0x1000; return TRUE; } @@ -23,6 +61,7 @@ gchar *out; trie = purple_trie_new(); + purple_trie_set_reset_on_match(trie, FALSE); purple_trie_add(trie, "test", (gpointer)0x1001); purple_trie_add(trie, "testing", (gpointer)0x1002); @@ -154,6 +193,106 @@ } END_TEST +START_TEST(test_trie_remove) +{ + PurpleTrie *trie; + const gchar *in; + gchar *out; + + trie = purple_trie_new(); + + purple_trie_add(trie, "alice", (gpointer)0x6001); + purple_trie_add(trie, "bob", (gpointer)0x6002); + purple_trie_add(trie, "cherry", (gpointer)0x6003); + + purple_trie_remove(trie, "bob"); + + in = "alice bob cherry"; + + out = purple_trie_replace(trie, in, test_trie_replace_cb, (gpointer)6); + + assert_string_equal("[6:6001] bob [6:6003]", out); + + g_object_unref(trie); + g_free(out); +} +END_TEST + +START_TEST(test_trie_find) +{ + PurpleTrie *trie; + const gchar *in; + gint out; + + trie = purple_trie_new(); + + purple_trie_add(trie, "alice", (gpointer)0x7001); + purple_trie_add(trie, "bob", (gpointer)0x7002); + purple_trie_add(trie, "cherry", (gpointer)0x7003); + purple_trie_add(trie, "al", (gpointer)0x7004); /* not accepted */ + + in = "test alice bob test cherry alice"; + + find_sum = 0; + out = purple_trie_find(trie, in, test_trie_find_cb, (gpointer)7); + + assert_int_equal(4, out); + assert_int_equal(2*1 + 2 + 3, find_sum); + + g_object_unref(trie); +} +END_TEST + +START_TEST(test_trie_find_reset) +{ + PurpleTrie *trie; + const gchar *in; + gint out; + + trie = purple_trie_new(); + purple_trie_set_reset_on_match(trie, TRUE); + + purple_trie_add(trie, "alice", (gpointer)0x8001); + purple_trie_add(trie, "ali", (gpointer)0x8002); + purple_trie_add(trie, "al", (gpointer)0x8003); + + in = "al ali alice"; + + find_sum = 0; + out = purple_trie_find(trie, in, test_trie_find_cb, (gpointer)8); + + assert_int_equal(3, out); + assert_int_equal(3 * 3, find_sum); + + g_object_unref(trie); +} +END_TEST + +START_TEST(test_trie_find_noreset) +{ + PurpleTrie *trie; + const gchar *in; + gint out; + + trie = purple_trie_new(); + purple_trie_set_reset_on_match(trie, FALSE); + + purple_trie_add(trie, "alice", (gpointer)0x9001); + purple_trie_add(trie, "ali", (gpointer)0x9002); + purple_trie_add(trie, "al", (gpointer)0x9003); + + in = "al ali alice"; + + find_sum = 0; + out = purple_trie_find(trie, in, test_trie_find_cb, (gpointer)9); + + assert_int_equal(6, out); + assert_int_equal(3*3 + 2*2 + 1, find_sum); + + g_object_unref(trie); +} +END_TEST + Suite * purple_trie_suite(void) { @@ -165,6 +304,10 @@ tcase_add_test(tc, test_trie_replace_inner); tcase_add_test(tc, test_trie_replace_empty); tcase_add_test(tc, test_trie_multi_replace); + tcase_add_test(tc, test_trie_remove); + tcase_add_test(tc, test_trie_find); + tcase_add_test(tc, test_trie_find_reset); + tcase_add_test(tc, test_trie_find_noreset); suite_add_tcase(s, tc);
--- a/libpurple/trie.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/trie.c Mon Apr 07 20:02:22 2014 +0530 @@ -53,6 +53,7 @@ PurpleMemoryPool *records_str_mempool; PurpleMemoryPool *records_obj_mempool; PurpleTrieRecordList *records; + GHashTable *records_map; gsize records_total_size; PurpleMemoryPool *states_mempool; @@ -61,7 +62,7 @@ struct _PurpleTrieRecord { - const gchar *word; + gchar *word; guint word_len; gpointer data; }; @@ -93,6 +94,7 @@ gboolean reset_on_match; PurpleTrieReplaceCb replace_cb; + PurpleTrieFindCb find_cb; gpointer user_data; } PurpleTrieMachine; @@ -397,7 +399,7 @@ ******************************************************************************/ static void -purple_trie_replace_advance(PurpleTrieMachine *m, const guchar character) +purple_trie_advance(PurpleTrieMachine *m, const guchar character) { /* change state after processing a character */ while (TRUE) { @@ -439,12 +441,35 @@ if (!was_replaced) out->len = str_old_len; + /* XXX */ if (was_replaced || m->reset_on_match) m->state = m->root_state; return was_replaced; } +static gboolean +purple_trie_find_do_discovery(PurpleTrieMachine *m) +{ + gboolean was_accepted; + + /* if we reached a "found" state, let's process it */ + if (!m->state->found_word) + return FALSE; + + if (m->find_cb) { + was_accepted = m->find_cb(m->state->found_word->word, + m->state->found_word->data, m->user_data); + } else { + was_accepted = TRUE; + } + + if (was_accepted && m->reset_on_match) + m->state = m->root_state; + + return was_accepted; +} + gchar * purple_trie_replace(PurpleTrie *trie, const gchar *src, PurpleTrieReplaceCb replace_cb, gpointer user_data) @@ -474,7 +499,7 @@ guchar character = src[i++]; gboolean was_replaced; - purple_trie_replace_advance(&machine, character); + purple_trie_advance(&machine, character); was_replaced = purple_trie_replace_do_replacement(&machine, out); /* We skipped a character without finding any records, @@ -533,7 +558,7 @@ /* Advance every machine and possibly perform a replacement. */ for (m_idx = 0; m_idx < tries_count; m_idx++) { - purple_trie_replace_advance(&machines[m_idx], character); + purple_trie_advance(&machines[m_idx], character); if (was_replaced) continue; was_replaced = purple_trie_replace_do_replacement( @@ -558,20 +583,63 @@ return g_string_free(out, FALSE); } +gulong +purple_trie_find(PurpleTrie *trie, const gchar *src, + PurpleTrieFindCb find_cb, gpointer user_data) +{ + PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie); + PurpleTrieMachine machine; + gulong found_count = 0; + gsize i; + + if (src == NULL) + return 0; + + g_return_val_if_fail(priv != NULL, 0); + + purple_trie_states_build(trie); + + machine.state = priv->root_state; + machine.root_state = priv->root_state; + machine.reset_on_match = priv->reset_on_match; + machine.find_cb = find_cb; + machine.user_data = user_data; + + i = 0; + while (src[i] != '\0') { + guchar character = src[i++]; + gboolean was_found; + + purple_trie_advance(&machine, character); + + was_found = purple_trie_find_do_discovery(&machine); + + if (was_found) + found_count++; + } + + return found_count; +} + /******************************************************************************* * Records ******************************************************************************/ -void +gboolean purple_trie_add(PurpleTrie *trie, const gchar *word, gpointer data) { PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie); PurpleTrieRecord *rec; - g_return_if_fail(priv != NULL); - g_return_if_fail(word != NULL); - g_return_if_fail(word[0] != '\0'); + g_return_val_if_fail(priv != NULL, FALSE); + g_return_val_if_fail(word != NULL, FALSE); + g_return_val_if_fail(word[0] != '\0', FALSE); + + if (g_hash_table_lookup(priv->records_map, word) != NULL) { + purple_debug_warning("trie", "record exists: %s", word); + return FALSE; + } /* Every change in a trie invalidates longest_suffix map. * These prefixes could be updated instead of cleaning the whole graph. @@ -588,8 +656,48 @@ priv->records_total_size += rec->word_len; priv->records = purple_record_list_prepend(priv->records_obj_mempool, priv->records, rec); + g_hash_table_insert(priv->records_map, rec->word, priv->records); + + return TRUE; } +void +purple_trie_remove(PurpleTrie *trie, const gchar *word) +{ + PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie); + PurpleTrieRecordList *it; + + g_return_if_fail(priv != NULL); + g_return_if_fail(word != NULL); + g_return_if_fail(word[0] != '\0'); + + it = g_hash_table_lookup(priv->records_map, word); + if (it == NULL) + return; + + /* see purple_trie_add */ + purple_trie_states_cleanup(trie); + + priv->records_total_size -= it->rec->word_len; + priv->records = purple_record_list_remove(priv->records, it); + g_hash_table_remove(priv->records_map, it->rec->word); + + purple_memory_pool_free(priv->records_str_mempool, it->rec->word); + purple_memory_pool_free(priv->records_obj_mempool, it->rec); + purple_memory_pool_free(priv->records_obj_mempool, it); +} + +guint +purple_trie_get_size(PurpleTrie *trie) +{ + PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie); + + g_return_val_if_fail(priv != NULL, 0); + + return g_hash_table_size(priv->records_map); +} + + /******************************************************************************* * API implementation ******************************************************************************/ @@ -636,6 +744,8 @@ priv->states_mempool = purple_memory_pool_new(); purple_memory_pool_set_block_size(priv->states_mempool, PURPLE_TRIE_STATES_SMALL_POOL_BLOCK_SIZE); + + priv->records_map = g_hash_table_new(g_str_hash, g_str_equal); } static void @@ -643,6 +753,7 @@ { PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(obj); + g_hash_table_destroy(priv->records_map); g_object_unref(priv->records_obj_mempool); g_object_unref(priv->records_str_mempool); g_object_unref(priv->states_mempool); @@ -698,8 +809,11 @@ properties[PROP_RESET_ON_MATCH] = g_param_spec_boolean("reset-on-match", "Reset on match", "Determines, if the search state machine " "should be reset to the initial state on every match. This " - "ensures, that every match is distinct from each other.", TRUE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + "ensures, that every match is distinct from each other. " + "Please note, that it's not well-defined for a replace " + "operation, so it's better to leave this value default, unless " + "you perform only find operations.", TRUE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS); g_object_class_install_properties(obj_class, PROP_LAST, properties); }
--- a/libpurple/trie.h Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/trie.h Mon Apr 07 20:02:22 2014 +0530 @@ -22,6 +22,32 @@ #ifndef PURPLE_TRIE_H #define PURPLE_TRIE_H +/** + * SECTION:trie + * @include:trie.h + * @section_id: libpurple-trie + * @short_description: a structure for linear-time text searching + * @title: Tries + * + * A #PurpleTrie is a structure for quick searching of multiple phrases within + * a text. It's intended for repeated searches of the same set of patterns + * within multiple source texts (or a single, big one). + * + * It's preparation time is <literal>O(p)</literal>, where <literal>p</literal> + * is the total length of searched phrases. In current implementation, the + * internal structure is invalidated after every modification of the + * #PurpleTrie's contents, so it's not efficient to do alternating modifications + * and searches. Search time does not depend on patterns being stored within + * a trie and is always <literal>O(n)</literal>, where <literal>n</literal> is + * the size of a text. + * + * Its main drawback is a significant memory usage - every internal trie node + * needs about 1kB of memory on 32-bit machine and 2kB on 64-bit. Fortunately, + * the trie grows slower when more words (with common prefixes) are added. + * We could avoid invalidating the whole tree when altering it, but it would + * require figuring out, how to update <literal>longest_suffix</literal> fields + * in satisfying time. + */ #include <glib-object.h> @@ -40,12 +66,22 @@ typedef struct _PurpleTrie PurpleTrie; typedef struct _PurpleTrieClass PurpleTrieClass; +/** + * PurpleTrie: + * + * The trie object instance. + */ struct _PurpleTrie { /*< private >*/ GObject parent_instance; }; +/** + * PurpleTrieClass: + * + * Base class for #PurpleTrie objects. + */ struct _PurpleTrieClass { /*< private >*/ @@ -59,22 +95,52 @@ /** * PurpleTrieReplaceCb: - * @out: Currently built output string, append replacement to it. - * @word: Found word. - * @word_data: A user data bound with this word, when added with - * purple_trie_add(). - * @user_data: A user supplied data passed when calling purple_trie_replace(). + * @out: currently built output string, append replacement to it. + * @word: found word. + * @word_data: the user data bound with this word, when added with + * #purple_trie_add. + * @user_data: the user supplied data passed when calling #purple_trie_replace. * - * A funtion called after every found matching substring to be replaced. + * A funtion called on every matching substring to be replaced. * - * Returns: %TRUE, if the word was replaced, %FALSE otherwise. In the second - * case you must not modify @out. + * If you decide to replace the word, append your text to @out and return %TRUE. + * Otherwise, you must not touch @out. In both cases, you must not do any + * operations on @out other than appending text to it. + * + * Returns: %TRUE if the word was replaced, %FALSE otherwise. */ typedef gboolean (*PurpleTrieReplaceCb)(GString *out, const gchar *word, gpointer word_data, gpointer user_data); +/** + * PurpleTrieFindCb: + * @word: found word. + * @word_data: the user data bound with this word, when added with + * #purple_trie_add. + * @user_data: the user data passed when calling #purple_trie_find. + * + * A function called on every matching substring. + * + * You can decide to count the match or not (for the total number of found + * words, that is returned by #purple_trie_find). In both cases you can + * obviously do some processing outside the #PurpleTrie object. + * + * If you decide to count the word and #PurpleTrie:reset-on-match property + * is set, no overlapping words will be found - the processing will skip after + * the end of this word. + * + * Returns: %TRUE if the word should be counter, %FALSE otherwise. + */ +typedef gboolean (*PurpleTrieFindCb)(const gchar *word, gpointer word_data, + gpointer user_data); + G_BEGIN_DECLS +/** + * purple_trie_get_type: + * + * Returns: the #GType for a #PurpleTrie. + */ GType purple_trie_get_type(void); @@ -83,14 +149,14 @@ * * Creates a new trie. * - * Returns: The new #PurpleTrie. + * Returns: the new #PurpleTrie. */ PurpleTrie * purple_trie_new(void); /** * purple_trie_get_reset_on_match: - * @trie: The trie. + * @trie: the trie. * * Checks, if the trie will reset its internal state after every match. * @@ -101,37 +167,76 @@ /** * purple_trie_set_reset_on_match: - * @trie: The trie. + * @trie: the trie. * @reset: %TRUE, if trie should reset, %FALSE otherwise. * * Enables or disables a feature of resetting trie's state after every match. * When enabled, it will not search for overlapping matches. + * + * It's well defined for #purple_trie_find, but not for replace operations. + * Thus, for the latter, it's better to stay with this option enabled, because + * its behavior may be changed in future. */ void purple_trie_set_reset_on_match(PurpleTrie *trie, gboolean reset); /** * purple_trie_add: - * @trie: The trie. - * @word: The word. - * @data: The word-related data (may be %NULL). + * @trie: the trie. + * @word: the word. + * @data: the word-related data (may be %NULL). + * + * Adds a word to the trie. Current implementation doesn't allow for duplicates, + * so please avoid adding those. * - * Adds a word to the trie. + * Please note, that altering a trie invalidates its internal structure, so by + * the occasion of next search, it will be rebuilt. It's done in + * <literal>O(n)</literal>, where n is the total length of strings + * in #PurpleTrie. + * + * Returns: %TRUE if succeeded, %FALSE otherwise. */ -void +gboolean purple_trie_add(PurpleTrie *trie, const gchar *word, gpointer data); /** + * purple_trie_remove: + * @trie: the trie. + * @word: the word. + * + * Removes a word from the trie. Depending on used memory pool, this may not + * free allocated memory (that will be freed when destroying the whole + * collection), so use it wisely. See #purple_memory_pool_free. + * + * Please note, that altering a trie invalidates its internal structure. + * See #purple_trie_add. + */ +void +purple_trie_remove(PurpleTrie *trie, const gchar *word); + +/** + * purple_trie_get_size: + * @trie: the trie. + * + * Returns the number of elements contained in the #PurpleTrie. + * + * Returns: the number of stored words in @trie. + */ +guint +purple_trie_get_size(PurpleTrie *trie); + +/** * purple_trie_replace: - * @trie: The trie. - * @src: The source string. - * @replace_cb: The replacement function. - * @user_data: Custom data to be passed to @replace_cb. + * @trie: the trie. + * @src: the source string. + * @replace_cb: the replacement function. + * @user_data: custom data to be passed to @replace_cb. * * Processes @src string and replaces all occuriences of words added to @trie. - * It's O(strlen(src)), if replace_cb runs in O(strlen(word)). + * It's <literal>O(strlen(src))</literal>, if @replace_cb runs in + * <literal>O(strlen(word))</literal> and #PurpleTrie:reset-on-match is set. * - * Returns: resulting string. Must be g_free'd when you are done using it. + * Returns: resulting string. Must be #g_free'd when you are done using it. */ gchar * purple_trie_replace(PurpleTrie *trie, const gchar *src, @@ -139,24 +244,43 @@ /** * purple_trie_multi_replace: - * @tries: The list of tries. - * @src: The source string. - * @replace_cb: The replacement function. - * @user_data: Custom data to be passed to @replace_cb. + * @tries: the list of tries. + * @src: the source string. + * @replace_cb: the replacement function. + * @user_data: custom data to be passed to @replace_cb. * * Processes @src and replaces all occuriences of words added to tries in list * @tries. Entries added to tries on the beginning of the list have higher * priority, than ones added further. * - * Differend GSList's can be combined to possess common parts, so you can create + * Different #GSList's can be combined to possess common parts, so you can create * a "tree of tries". * - * Returns: resulting string. Must be g_free'd when you are done using it. + * Returns: resulting string. Must be #g_free'd when you are done using it. */ gchar * purple_trie_multi_replace(const GSList *tries, const gchar *src, PurpleTrieReplaceCb replace_cb, gpointer user_data); +/** + * purple_trie_find: + * @trie: the trie. + * @src: the source string. + * @find_cb: the callback for found entries (may be %NULL). + * @user_data: custom data to be passed to @find_cb. + * + * Processes @src string and finds all occuriences of words added to @trie. + * It's <literal>O(strlen(src))</literal>, if find_cb runs + * in <literal>O(1)</literal>. + * + * The word is counted as found if it's found and the callback returns %TRUE. + * + * Returns: the number of found words. + */ +gulong +purple_trie_find(PurpleTrie *trie, const gchar *src, + PurpleTrieFindCb find_cb, gpointer user_data); + G_END_DECLS #endif /* PURPLE_MEMORY_POOL_H */
--- a/libpurple/util.c Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/util.c Mon Apr 07 20:02:22 2014 +0530 @@ -3506,6 +3506,15 @@ } gboolean +purple_str_has_caseprefix(const gchar *s, const gchar *p) +{ + g_return_val_if_fail(s, FALSE); + g_return_val_if_fail(p, FALSE); + + return (g_ascii_strncasecmp(s, p, strlen(p)) == 0); +} + +gboolean purple_str_has_suffix(const char *s, const char *x) { return g_str_has_suffix(s, x); @@ -4970,3 +4979,69 @@ return g_strdup(hash2); } + +#if 0 + +/* Temporarily removed - re-add this when you need ini file support. */ + +#define PURPLE_KEY_FILE_DEFAULT_MAX_SIZE 102400 +#define PURPLE_KEY_FILE_HARD_LIMIT 10485760 + +gboolean +purple_key_file_load_from_ini(GKeyFile *key_file, const gchar *file, + gsize max_size) +{ + const gchar *header = "[default]\n\n"; + int header_len = strlen(header); + int fd; + struct stat st; + gsize file_size, buff_size; + gchar *buff; + GError *error = NULL; + + g_return_val_if_fail(key_file != NULL, FALSE); + g_return_val_if_fail(file != NULL, FALSE); + g_return_val_if_fail(max_size < PURPLE_KEY_FILE_HARD_LIMIT, FALSE); + + if (max_size == 0) + max_size = PURPLE_KEY_FILE_DEFAULT_MAX_SIZE; + + fd = g_open(file, O_RDONLY, S_IREAD); + if (fd == -1) { + purple_debug_error("util", "Failed to read ini file %s", file); + return FALSE; + } + + if (fstat(fd, &st) != 0) { + purple_debug_error("util", "Failed to fstat ini file %s", file); + return FALSE; + } + + file_size = (st.st_size > max_size) ? max_size : st.st_size; + + buff_size = file_size + header_len; + buff = g_new(gchar, buff_size); + memcpy(buff, header, header_len); + if (read(fd, buff + header_len, file_size) != (gssize)file_size) { + purple_debug_error("util", + "Failed to read whole ini file %s", file); + g_close(fd, NULL); + free(buff); + return FALSE; + } + g_close(fd, NULL); + + g_key_file_load_from_data(key_file, buff, buff_size, + G_KEY_FILE_NONE, &error); + + free(buff); + + if (error) { + purple_debug_error("util", "Failed parsing ini file %s: %s", + file, error->message); + return FALSE; + } + + return TRUE; +} +#endif
--- a/libpurple/util.h Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/util.h Mon Apr 07 20:02:22 2014 +0530 @@ -1057,6 +1057,19 @@ gboolean purple_str_has_prefix(const char *s, const char *p); /** + * purple_str_has_caseprefix: + * @s: The string to check. + * @p: The prefix in question. + * + * Compares two strings to see if the first contains the second as + * a proper case-insensitive prefix. + * + * Returns: %TRUE if @p is a prefix of @s, otherwise %FALSE. + */ +gboolean +purple_str_has_caseprefix(const gchar *s, const gchar *p); + +/** * purple_str_has_suffix: * @s: The string to check. * @x: The suffix in question.
--- a/libpurple/win32/wpurpleerror.h Thu Apr 03 09:37:53 2014 +0530 +++ b/libpurple/win32/wpurpleerror.h Mon Apr 07 20:02:22 2014 +0530 @@ -44,6 +44,8 @@ #undef EADDRINUSE #define EADDRINUSE WSAEADDRINUSE +#undef EINPROGRESS +#define EINPROGRESS WSAEINPROGRESS #undef EALREADY #define EALREADY WSAEALREADY #undef EADDRNOTAVAIL
--- a/pidgin/Makefile.am Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/Makefile.am Mon Apr 07 20:02:22 2014 +0530 @@ -75,11 +75,11 @@ gtksavedstatuses.c \ gtkscrollbook.c \ gtksession.c \ - gtksmiley.c \ + gtksmiley-manager.c \ + gtksmiley-theme.c \ gtksound.c \ gtkstatus-icon-theme.c \ gtkstatusbox.c \ - gtkthemes.c \ gtkutils.c \ gtkwebview.c \ gtkwebviewtoolbar.c \ @@ -87,8 +87,7 @@ gtkxfer.c \ libpidgin.c \ minidialog.c \ - pidgintooltip.c \ - smileyparser.c + pidgintooltip.c libpidgin_la_headers = \ gtkaccount.h \ @@ -125,12 +124,12 @@ gtksavedstatuses.h \ gtkscrollbook.h \ gtksession.h \ - gtksmiley.h \ + gtksmiley-manager.h \ + gtksmiley-theme.h \ gtksound.h \ gtkstatus-icon-theme.h \ gtkstatusbox.h \ pidginstock.h \ - gtkthemes.h \ gtkutils.h \ gtkwebview.h \ gtkwebviewtoolbar.h \ @@ -138,8 +137,7 @@ gtkxfer.h \ minidialog.h \ pidgintooltip.h \ - pidgin.h \ - smileyparser.h + pidgin.h pidgin_SOURCES = \ pidgin.c
--- a/pidgin/Makefile.mingw Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/Makefile.mingw Mon Apr 07 20:02:22 2014 +0530 @@ -89,11 +89,11 @@ gtkroomlist.c \ gtksavedstatuses.c \ gtkscrollbook.c \ - gtksmiley.c \ + gtksmiley-manager.c \ + gtksmiley-theme.c \ gtksound.c \ gtkstatus-icon-theme.c \ gtkstatusbox.c \ - gtkthemes.c \ gtkutils.c \ gtkwebview.c \ gtkwebviewtoolbar.c \ @@ -104,7 +104,6 @@ pidgin.c \ pidginstock.c \ pidgintooltip.c \ - smileyparser.c \ win32/gtkwin32dep.c \ win32/untar.c \ win32/wspell.c
--- a/pidgin/gtkaccount.c Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtkaccount.c Mon Apr 07 20:02:22 2014 +0530 @@ -325,7 +325,7 @@ GHashTable *table = NULL; const char *label = NULL; - if(PURPLE_PROTOCOL_IMPLEMENTS(dialog->protocol, CLIENT_IFACE, get_account_text_table)) { + if (PURPLE_PROTOCOL_IMPLEMENTS(dialog->protocol, CLIENT_IFACE, get_account_text_table)) { table = purple_protocol_client_iface_get_account_text_table(dialog->protocol, NULL); label = g_hash_table_lookup(table, "login_label"); @@ -704,7 +704,7 @@ const char *value = NULL; char *c; - if (dialog->account != NULL) { + if (dialog->account != NULL && username != NULL) { if(purple_account_user_split_get_reverse(split)) c = strrchr(username, purple_account_user_split_get_separator(split)); @@ -842,7 +842,7 @@ gtk_container_add(GTK_CONTAINER(button), dialog->icon_entry); gtk_widget_show(dialog->icon_entry); /* TODO: Uh, isn't this next line pretty useless? */ - pidgin_set_accessible_label (dialog->icon_entry, label); + pidgin_set_accessible_label(dialog->icon_entry, GTK_LABEL(label)); purple_imgstore_unref(dialog->icon_img); dialog->icon_img = NULL;
--- a/pidgin/gtkblist.c Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtkblist.c Mon Apr 07 20:02:22 2014 +0530 @@ -54,7 +54,7 @@ #include "gtkroomlist.h" #include "gtkstatusbox.h" #include "gtkscrollbook.h" -#include "gtksmiley.h" +#include "gtksmiley-manager.h" #include "gtkblist-theme.h" #include "gtkblist-theme-loader.h" #include "gtkutils.h"
--- a/pidgin/gtkconv.c Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtkconv.c Mon Apr 07 20:02:22 2014 +0530 @@ -42,6 +42,7 @@ #include "plugins.h" #include "protocol.h" #include "request.h" +#include "smiley-parser.h" #include "theme-loader.h" #include "theme-manager.h" #include "util.h" @@ -60,12 +61,10 @@ #include "gtkpounce.h" #include "gtkprefs.h" #include "gtkprivacy.h" -#include "gtkthemes.h" #include "gtkutils.h" #include "gtkwebview.h" #include "pidginstock.h" #include "pidgintooltip.h" -#include "smileyparser.h" #include "gtknickcolors.h" @@ -139,9 +138,6 @@ #define BUDDYICON_SIZE_MIN 32 #define BUDDYICON_SIZE_MAX 96 -/* Undef this to turn off "custom-smiley" debug messages */ -#define DEBUG_CUSTOM_SMILEY - #define LUMINANCE(c) (float)((0.3*(c.red))+(0.59*(c.green))+(0.11*(c.blue))) /* From http://www.w3.org/TR/AERT#color-contrast */ @@ -2355,7 +2351,6 @@ PidginConversation *gtkconv; PurpleConversation *old_conv; PidginWebView *entry; - const char *protocol_name; PurpleConnectionFlags features; g_return_if_fail(conv != NULL); @@ -2372,13 +2367,14 @@ purple_conversation_close_logs(old_conv); gtkconv->active_conv = conv; + pidgin_webview_switch_active_conversation( + PIDGIN_WEBVIEW(gtkconv->entry), conv); + pidgin_webview_switch_active_conversation( + PIDGIN_WEBVIEW(gtkconv->webview), conv); purple_conversation_set_logging(conv, gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(gtkconv->win->menu->logging))); entry = PIDGIN_WEBVIEW(gtkconv->entry); - protocol_name = purple_account_get_protocol_name(purple_conversation_get_account(conv)); - pidgin_webview_set_protocol_name(entry, protocol_name); - pidgin_webview_set_protocol_name(PIDGIN_WEBVIEW(gtkconv->webview), protocol_name); features = purple_conversation_get_features(conv); if (!(features & PURPLE_CONNECTION_FLAG_HTML)) @@ -5713,8 +5709,6 @@ _pidgin_widget_set_accessible_name(frame, "Message Input"); gtk_widget_set_name(gtkconv->entry, "pidgin_conv_entry"); - pidgin_webview_set_protocol_name(PIDGIN_WEBVIEW(gtkconv->entry), - purple_account_get_protocol_name(purple_conversation_get_account(conv))); g_signal_connect(G_OBJECT(gtkconv->entry), "populate-popup", G_CALLBACK(entry_popup_menu_cb), gtkconv); @@ -5767,8 +5761,9 @@ PidginConversation *gtkconv = NULL; PurpleAccount *buddyaccount; const char *buddyname; - - n = *(PurpleBlistNode **) data; + PurpleBlistNode **data_val = (gpointer)data; + + n = *data_val; if (PURPLE_IS_CONTACT(n)) b = purple_contact_get_priority_buddy((PurpleContact*)n); @@ -6087,6 +6082,10 @@ pidgin_webview_show_toolbar(PIDGIN_WEBVIEW(gtkconv->entry)); else pidgin_webview_hide_toolbar(PIDGIN_WEBVIEW(gtkconv->entry)); + pidgin_webview_switch_active_conversation( + PIDGIN_WEBVIEW(gtkconv->entry), conv); + pidgin_webview_switch_active_conversation( + PIDGIN_WEBVIEW(gtkconv->webview), conv); if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons")) gtk_widget_show(gtkconv->infopane_hbox); @@ -6111,9 +6110,6 @@ { gtkconv->nick_colors = g_array_ref(generated_nick_colors); } - - if (purple_conversation_get_features(conv) & PURPLE_CONNECTION_FLAG_ALLOW_CUSTOM_SMILEY) - pidgin_themes_smiley_themeize_custom(gtkconv->entry); } static void @@ -6584,6 +6580,94 @@ return g_string_free(str, FALSE); } +static gulong +pidgin_smiley_get_unique_id(PurpleSmiley *smiley) +{ + static gulong max_id = 0; + gulong id; + g_return_val_if_fail(smiley != NULL, 0); + + id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(smiley), + "pidgin-conv-smiley-unique-id")); + if (id != 0) + return id; + + id = ++max_id; + + g_object_set_data(G_OBJECT(smiley), "pidgin-conv-smiley-unique-id", + GINT_TO_POINTER(id)); + + return id; +} + +static void +pidgin_conv_remote_smiley_got(PurpleSmiley *smiley, gpointer _conv) +{ + PurpleConversation *conv = _conv; + PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv); + PurpleStoredImage *img; + gulong smiley_id; + int image_id; + gchar *js; + + if (!gtkconv) + return; + + img = purple_smiley_get_image(smiley); + smiley_id = pidgin_smiley_get_unique_id(smiley); + image_id = purple_imgstore_add_with_id(img); + + purple_debug_info("gtkconv", "Smiley '%s' (%ld) is ready for display", + purple_smiley_get_shortcut(smiley), smiley_id); + + js = g_strdup_printf("emoticonIsReady(%ld, '" + PURPLE_STORED_IMAGE_PROTOCOL "%d')", smiley_id, image_id); + pidgin_webview_safe_execute_script( + PIDGIN_WEBVIEW(gtkconv->webview), js); + g_free(js); +} + +static gboolean +pidgin_conv_write_smiley(GString *out, PurpleSmiley *smiley, + PurpleConversation *conv, gpointer _proto_name) +{ + gchar *escaped_shortcut; + const gchar *path = purple_smiley_get_path(smiley); + const gchar *path_prefix = ""; + +#ifdef _WIN32 + path_prefix = "file:///"; +#endif + + escaped_shortcut = g_markup_escape_text( + purple_smiley_get_shortcut(smiley), -1); + + if (purple_smiley_is_ready(smiley) && path) { + g_string_append_printf(out, + "<img class=\"emoticon\" alt=\"%s\" title=\"%s\" " + "src=\"%s%s\" />", escaped_shortcut, + escaped_shortcut, path_prefix, path); + } else if (purple_smiley_is_ready(smiley) && !path) { + PurpleStoredImage *img = purple_smiley_get_image(smiley); + int imgid = purple_imgstore_add_with_id(img); + + g_string_append_printf(out, "<img class=\"emoticon\" " + "alt=\"%s\" title=\"%s\" src=\"" + PURPLE_STORED_IMAGE_PROTOCOL "%d\" />", + escaped_shortcut, escaped_shortcut, imgid); + } else { + g_string_append_printf(out, "<span class=\"emoticon pending " + "emoticon-id-%ld\">%s</span>", + pidgin_smiley_get_unique_id(smiley), escaped_shortcut); + g_signal_connect_object(smiley, "ready", + G_CALLBACK(pidgin_conv_remote_smiley_got), conv, 0); + } + + g_free(escaped_shortcut); + + return TRUE; +} + static void pidgin_conv_write_conv(PurpleConversation *conv, const char *name, const char *alias, const char *message, PurpleMessageFlags flags, @@ -6710,7 +6794,9 @@ gtkconv->last_flags = flags; gtkconv->last_conversed = conv; - smileyed = pidgin_smiley_parse_markup(displaying, purple_account_get_protocol_id(account)); + smileyed = purple_smiley_parse(conv, displaying, (flags & PURPLE_MESSAGE_RECV), + pidgin_conv_write_smiley, + (gpointer)purple_account_get_protocol_name(account)); msg = replace_message_tokens(message_html, conv, name, alias, smileyed, flags, mtime); escape = pidgin_webview_quote_js_string(msg ? msg : ""); script = g_strdup_printf("%s(%s)", func, escape); @@ -6774,12 +6860,6 @@ gtk_font_options |= GTK_IMHTML_USE_POINTSIZE; } - if (!(flags & PURPLE_MESSAGE_RECV) && (purple_conversation_get_features(conv) & PURPLE_CONNECTION_FLAG_ALLOW_CUSTOM_SMILEY)) - { - /* We want to see our own smileys. Need to revert it after send*/ - pidgin_themes_smiley_themeize_custom(gtkconv->webview); - } - /* TODO: These colors should not be hardcoded so log.c can use them */ if (flags & PURPLE_MESSAGE_RAW) { pidgin_webview_append_html(PIDGIN_WEBVIEW(gtkconv->webview), message); @@ -6935,15 +7015,6 @@ gtkconv_set_unseen(gtkconv, unseen); } -#if 0 - if (!(flags & PURPLE_MESSAGE_RECV) && (purple_conversation_get_features(conv) & PURPLE_CONNECTION_FLAG_ALLOW_CUSTOM_SMILEY)) - { - /* Restore the smiley-data */ - pidgin_themes_smiley_themeize(gtkconv->webview); - } -#endif - - /* on rejoin only request message history from after this message */ if (flags & (PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_RECV) && PURPLE_IS_CHAT_CONVERSATION(conv)) { @@ -7202,154 +7273,6 @@ return FALSE; } -static gboolean -add_custom_smiley_for_webview(PidginWebView *webview, const char *sml, const char *smile) -{ - PidginWebViewSmiley *smiley; - - smiley = pidgin_webview_smiley_find(webview, sml, smile); - - if (smiley) { - if (!(pidgin_webview_smiley_get_flags(smiley) & PIDGIN_WEBVIEW_SMILEY_CUSTOM)) - return FALSE; - - pidgin_webview_smiley_reload(smiley); - return TRUE; - } - - smiley = pidgin_webview_smiley_create(NULL, smile, FALSE, - PIDGIN_WEBVIEW_SMILEY_CUSTOM); - pidgin_webview_associate_smiley(webview, sml, smiley); - g_signal_connect_swapped(webview, "destroy", - G_CALLBACK(pidgin_webview_smiley_destroy), smiley); - - return TRUE; -} - -static gboolean -pidgin_conv_custom_smiley_add(PurpleConversation *conv, const char *smile, gboolean remote) -{ - PidginConversation *gtkconv; - struct PidginSmileyList *list; - const char *sml = NULL, *conv_sml; - - if (!conv || !smile || !*smile) { - return FALSE; - } - - /* If smileys are off, return false */ - if (pidgin_themes_smileys_disabled()) - return FALSE; - - /* If possible add this smiley to the current theme. - * The addition is only temporary: custom smilies aren't saved to disk. */ - conv_sml = purple_account_get_protocol_name(purple_conversation_get_account(conv)); - gtkconv = PIDGIN_CONVERSATION(conv); - - for (list = (struct PidginSmileyList *)current_smiley_theme->list; list; list = list->next) { - if (!strcmp(list->sml, conv_sml)) { - sml = list->sml; - break; - } - } - - if (!add_custom_smiley_for_webview(PIDGIN_WEBVIEW(gtkconv->webview), sml, smile)) - return FALSE; - - if (!remote) /* If it's a local custom smiley, then add it for the entry */ - if (!add_custom_smiley_for_webview(PIDGIN_WEBVIEW(gtkconv->entry), sml, smile)) - return FALSE; - - return TRUE; -} - -static void -pidgin_conv_custom_smiley_write(PurpleConversation *conv, const char *smile, - const guchar *data, gsize size) -{ -/* TODO WEBKIT */ -#if 0 - PidginConversation *gtkconv; - GtkIMHtmlSmiley *smiley; - const char *sml; - GError *error = NULL; - - sml = purple_account_get_protocol_name(purple_conversation_get_account(conv)); - gtkconv = PIDGIN_CONVERSATION(conv); - smiley = gtk_imhtml_smiley_get(GTK_IMHTML(gtkconv->imhtml), sml, smile); - - if (!smiley) - return; - - smiley->data = g_realloc(smiley->data, smiley->datasize + size); - g_memmove((guchar *)smiley->data + smiley->datasize, data, size); - smiley->datasize += size; - - if (!smiley->loader) - return; - - if (!gdk_pixbuf_loader_write(smiley->loader, data, size, &error) || error) { - purple_debug_warning("gtkconv", "gdk_pixbuf_loader_write() " - "failed with size=%" G_GSIZE_FORMAT ": %s\n", size, - error ? error->message : "(no error message)"); - if (error) - g_error_free(error); - /* We must stop using the GdkPixbufLoader because trying to load - certain invalid GIFs with at least gdk-pixbuf 2.23.3 can return - a GdkPixbuf that will cause some operations (like - gdk_pixbuf_scale_simple()) to consume memory in an infinite loop. - But we also don't want to set smiley->loader to NULL because our - code might expect it to be set. So create a new loader. */ - g_object_unref(G_OBJECT(smiley->loader)); - smiley->loader = gdk_pixbuf_loader_new(); - } -#endif /* if 0 */ -} - -static void -pidgin_conv_custom_smiley_close(PurpleConversation *conv, const char *smile) -{ -/* TODO WEBKIT */ -#if 0 - PidginConversation *gtkconv; - GtkIMHtmlSmiley *smiley; - const char *sml; - GError *error = NULL; - - g_return_if_fail(conv != NULL); - g_return_if_fail(smile != NULL); - - sml = purple_account_get_protocol_name(purple_conversation_get_account(conv)); - gtkconv = PIDGIN_CONVERSATION(conv); - smiley = gtk_imhtml_smiley_get(GTK_IMHTML(gtkconv->imhtml), sml, smile); - - if (!smiley) - return; - - if (!smiley->loader) - return; - - purple_debug_info("gtkconv", "About to close the smiley pixbuf\n"); - - if (!gdk_pixbuf_loader_close(smiley->loader, &error) || error) { - purple_debug_warning("gtkconv", "gdk_pixbuf_loader_close() " - "failed: %s\n", - error ? error->message : "(no error message)"); - if (error) - g_error_free(error); - /* We must stop using the GdkPixbufLoader because if we tried to - load certain invalid GIFs with all current versions of GDK (as - of 2011-06-15) then it's possible the loader will contain data - that could cause some operations (like gdk_pixbuf_scale_simple()) - to consume memory in an infinite loop. But we also don't want - to set smiley->loader to NULL because our code might expect it - to be set. So create a new loader. */ - g_object_unref(G_OBJECT(smiley->loader)); - smiley->loader = gdk_pixbuf_loader_new(); - } -#endif /* if 0 */ -} - static void pidgin_conv_send_confirm(PurpleConversation *conv, const char *message) { @@ -7491,8 +7414,6 @@ buttons &= ~PIDGIN_WEBVIEW_CUSTOM_SMILEY; pidgin_webview_set_format_functions(PIDGIN_WEBVIEW(gtkconv->entry), buttons); - if (account != NULL) - pidgin_webview_set_protocol_name(PIDGIN_WEBVIEW(gtkconv->entry), purple_account_get_protocol_id(account)); /* Deal with menu items */ gtk_action_set_sensitive(win->menu->view_log, TRUE); @@ -7627,11 +7548,6 @@ } } -#if 0 - if (fields & PIDGIN_CONV_SMILEY_THEME) - pidgin_themes_smiley_themeize(PIDGIN_CONVERSATION(conv)->webview); -#endif - if ((fields & PIDGIN_CONV_COLORIZE_TITLE) || (fields & PIDGIN_CONV_SET_TITLE) || (fields & PIDGIN_CONV_TOPIC)) @@ -7749,7 +7665,7 @@ gtk_label_set_text(GTK_LABEL(gtkconv->menu_label), title); if (pidgin_conv_window_is_active_conversation(conv)) { const char* current_title = gtk_window_get_title(GTK_WINDOW(win->window)); - if (current_title == NULL || strcmp(current_title, title) != 0) + if (current_title == NULL || g_strcmp0(current_title, title) != 0) gtk_window_set_title(GTK_WINDOW(win->window), title); } @@ -7846,9 +7762,6 @@ pidgin_conv_chat_update_user, /* chat_update_user */ pidgin_conv_present_conversation, /* present */ pidgin_conv_has_focus, /* has_focus */ - pidgin_conv_custom_smiley_add, /* custom_smiley_add */ - pidgin_conv_custom_smiley_write, /* custom_smiley_write */ - pidgin_conv_custom_smiley_close, /* custom_smiley_close */ pidgin_conv_send_confirm, /* send_confirm */ NULL, NULL, @@ -8784,6 +8697,7 @@ purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/send_strike", FALSE); purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/spellcheck", TRUE); purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/show_incoming_formatting", TRUE); + /* TODO: it's about *remote* smileys, not local ones */ purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/resize_custom_smileys", TRUE); purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/custom_smileys_size", 96); purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/minimum_entry_lines", 2);
--- a/pidgin/gtkdialogs.c Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtkdialogs.c Mon Apr 07 20:02:22 2014 +0530 @@ -173,7 +173,7 @@ {NULL, NULL, "Wangmo Sherpa", "rinwanshe@yahoo.com"}, {N_("Greek"), "el", "Katsaloulis Panayotis", "panayotis@panayotis.com"}, {NULL, NULL, "Panos Bouklis", "panos@echidna-band.com"}, - {N_("Australian English"), "en_AU", "Peter Lawler", "trans@six-by-nine.com.au"}, + {N_("Australian English"), "en_AU", "Michael Findlay", "keltoiboy@gmail.com"}, {N_("British English"), "en_GB", "Phil Hannent", "phil@hannent.co.uk"}, {N_("Canadian English"), "en_CA", "Adam Weinberger", "adamw@gnome.org"}, {N_("Esperanto"), "eo", "Stéphane Fillod", "fillods@users.sourceforge.net"}, @@ -208,6 +208,7 @@ {NULL, NULL, "Erdal Ronahi", "erdal.ronahi@gmail.com"}, {NULL, NULL, "Rizoyê Xerzî", "rizoxerzi@hotmail.com"}, {N_("Lithuanian"), "lt", "Algimantas Margevičius", "margevicius.algimantas@gmail.com"}, + {N_("Latvian"), "lv", "Rudolfs Mazurs", "rudolfs.mazurs@gmail.com"}, {N_("Maithili"), "mai", "Sangeeta Kumari", "sangeeta_0975@yahoo.com"}, {NULL, NULL, "Rajesh Ranjan", "rajeshkajha@yahoo.com"}, {N_("Meadow Mari"), "mhr", "David Preece", "davidpreece1@gmail.com"}, @@ -222,7 +223,7 @@ {N_("Nepali"), "ne", "Shyam Krishna Bal", NULL}, {N_("Dutch, Flemish"), "nl", "Gideon van Melle", "translations@gvmelle.com"}, {N_("Norwegian Nynorsk"), "nn", "Yngve Spjeld Landro", "l10n@landro.net"}, - {N_("Occitan"), "oc", "Yannig Marchegay", "yannig@marchegay.org"}, + {N_("Occitan"), "oc", "Cédric Valmary", "cvalmary@yahoo.fr"}, {N_("Oriya"), "or", "Manoj Kumar Giri", "giri.manojkr@gmail.com"}, {N_("Punjabi"), "pa", "Amanpreet Singh Alam", "aalam@users.sf.net"}, {N_("Polish"), "pl", "Piotr Drąg", "piotrdrag@gmail.com"}, @@ -246,6 +247,7 @@ {NULL, NULL, "Viveka Nathan K", "vivekanathan@users.sourceforge.net"}, {N_("Telugu"), "te", "Krishnababu Krottapalli", "krottapalli@ymail.com"}, {N_("Thai"), "th", "Isriya Paireepairit", "markpeak@gmail.com"}, + {N_("Tatar"), "tt", "ILDAR Valeev", "v_ildar@bk.ru"}, {N_("Ukranian"), "uk", "Oleksandr Kovalenko", "alx.kovalenko@gmail.com"}, {N_("Urdu"), "ur", "RKVS Raman", "rkvsraman@gmail.com"}, {N_("Vietnamese"), "vi", "Nguyễn Vũ Hưng", "vuhung16plus@gmail.com"}, @@ -274,6 +276,7 @@ {N_("German"), "de", "Daniel Seifert", NULL}, {NULL, NULL, "Karsten Weiss", NULL}, {NULL, NULL, "Jochen Kemnade", NULL}, + {N_("Australian English"), "en_AU", "Peter Lawler", NULL}, {N_("British English"), "en_GB", "Luke Ross", NULL}, {N_("Spanish"), "es", "JM Pérez Cáncer", NULL}, {NULL, NULL, "Nicolás Lichtmaier", NULL}, @@ -311,6 +314,7 @@ {NULL, NULL, "Petter Johan Olsen", NULL}, {NULL, NULL, "Espen Stefansen", NULL}, {N_("Dutch, Flemish"), "nl", "Vincent van Adrighem", NULL}, + {N_("Occitan"), "oc", "Yannig Marchegay", NULL}, {N_("Polish"), "pl", "Krzysztof Foltman", NULL}, {NULL, NULL, "Paweł Godlewski", NULL}, {NULL, NULL, "Piotr Makowski", NULL},
--- a/pidgin/gtklog.c Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtklog.c Mon Apr 07 20:02:22 2014 +0530 @@ -452,7 +452,7 @@ title = g_strdup_printf(_("<span size='larger' weight='bold'>Conversation with %s on %s</span>"), log->name, log_get_date(log)); - gtk_label_set_markup(GTK_LABEL(viewer->label), title); + gtk_label_set_markup(viewer->label, title); g_free(title); } @@ -597,13 +597,13 @@ title_box = gtk_dialog_get_content_area(GTK_DIALOG(lv->window)); /* Label ************/ - lv->label = gtk_label_new(NULL); + lv->label = GTK_LABEL(gtk_label_new(NULL)); text = g_strdup_printf("<span size='larger' weight='bold'>%s</span>", title); - gtk_label_set_markup(GTK_LABEL(lv->label), text); + gtk_label_set_markup(lv->label, text); gtk_misc_set_alignment(GTK_MISC(lv->label), 0, 0); - gtk_box_pack_start(GTK_BOX(title_box), lv->label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(title_box), GTK_WIDGET(lv->label), FALSE, FALSE, 0); g_free(text); /* Pane *************/
--- a/pidgin/gtklog.h Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtklog.h Mon Apr 07 20:02:22 2014 +0530 @@ -61,7 +61,7 @@ PurpleLogReadFlags flags; char *search; - GtkWidget *label; + GtkLabel *label; };
--- a/pidgin/gtknotify.c Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtknotify.c Mon Apr 07 20:02:22 2014 +0530 @@ -789,6 +789,7 @@ g_free(to_text); g_free(from_text); g_free(subject_text); + (void)first; /* If we don't keep track of this, will leak "data" for each of the notifications except the last */ data2 = pidgin_notify_add_mail(mail_dialog->treemodel, account, notification, urls ? *urls : NULL, 0, FALSE, &new_data); @@ -1737,6 +1738,7 @@ button = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE); + gtk_widget_set_sensitive(button, TRUE); gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
--- a/pidgin/gtkpounce.c Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtkpounce.c Mon Apr 07 20:02:22 2014 +0530 @@ -580,7 +580,7 @@ gtk_box_pack_start(GTK_BOX(hbox), dialog->account_menu, FALSE, FALSE, 0); gtk_widget_show(dialog->account_menu); - pidgin_set_accessible_label (dialog->account_menu, label); + pidgin_set_accessible_label(dialog->account_menu, GTK_LABEL(label)); /* Buddy: */ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE); @@ -602,7 +602,7 @@ g_signal_connect(G_OBJECT(dialog->buddy_entry), "changed", G_CALLBACK(buddy_changed_cb), dialog); - pidgin_set_accessible_label (dialog->buddy_entry, label); + pidgin_set_accessible_label(dialog->buddy_entry, GTK_LABEL(label)); if (cur_pounce != NULL) { gtk_entry_set_text(GTK_ENTRY(dialog->buddy_entry),
--- a/pidgin/gtkprefs.c Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtkprefs.c Mon Apr 07 20:02:22 2014 +0530 @@ -48,9 +48,9 @@ #include "gtkdialogs.h" #include "gtkprefs.h" #include "gtksavedstatuses.h" +#include "gtksmiley-theme.h" #include "gtksound.h" #include "gtkstatus-icon-theme.h" -#include "gtkthemes.h" #include "gtkutils.h" #include "gtkwebview.h" #include "pidginstock.h" @@ -587,38 +587,33 @@ static void smileys_refresh_theme_list(void) { - GdkPixbuf *pixbuf; - GSList *themes; + GList *it; GtkTreeIter iter; - - pidgin_themes_smiley_theme_probe(); - - if (!(themes = smiley_themes)) - return; - - while (themes) { - struct PidginSmileyTheme *theme = themes->data; - char *description = get_theme_markup(_(theme->name), FALSE, - _(theme->author), _(theme->desc)); + gchar *description; + + description = get_theme_markup(_("none"), FALSE, _("Penguin Pimps"), + _("Selecting this disables graphical emoticons.")); + gtk_list_store_append(prefs_smiley_themes, &iter); + gtk_list_store_set(prefs_smiley_themes, &iter, + 0, NULL, 1, description, 2, "none", -1); + g_free(description); + + for (it = pidgin_smiley_theme_get_all(); it; it = g_list_next(it)) { + PidginSmileyTheme *theme = it->data; + + description = get_theme_markup( + _(pidgin_smiley_theme_get_name(theme)), FALSE, + _(pidgin_smiley_theme_get_author(theme)), + _(pidgin_smiley_theme_get_description(theme))); + gtk_list_store_append(prefs_smiley_themes, &iter); - - /* - * LEAK - Gentoo memprof thinks pixbuf is leaking here... but it - * looks like it should be ok to me. Anyone know what's up? --Mark - */ - pixbuf = (theme->icon ? pidgin_pixbuf_new_from_file(theme->icon) : NULL); - gtk_list_store_set(prefs_smiley_themes, &iter, - 0, pixbuf, - 1, description, - 2, theme->name, - -1); - - if (pixbuf != NULL) - g_object_unref(G_OBJECT(pixbuf)); + 0, pidgin_smiley_theme_get_icon(theme), + 1, description, + 2, pidgin_smiley_theme_get_name(theme), + -1); g_free(description); - themes = themes->next; } } @@ -1239,9 +1234,10 @@ gtk_tree_model_get(GTK_TREE_MODEL(prefs_smiley_themes), &new_iter, 2, &new_theme, -1); purple_prefs_set_string(PIDGIN_PREFS_ROOT "/smileys/theme", new_theme); + #if 0 -/* TODO: WebKit-ify smileys */ - pidgin_themes_smiley_themeize(sample_webview); + /* TODO: update smileys in sample_webview input box. */ + update_smileys_in_webview_input_box(sample_webview); #endif g_free(new_theme); @@ -1842,9 +1838,11 @@ GtkWidget *iconpref2; GtkWidget *webview; GtkWidget *frame; +#if 0 GtkWidget *hbox; GtkWidget *checkbox; GtkWidget *spin_button; +#endif ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE); gtk_container_set_border_width(GTK_CONTAINER(ret), PIDGIN_HIG_BORDER); @@ -1882,6 +1880,9 @@ #ifdef _WIN32 pidgin_prefs_checkbox(_("F_lash window when IMs are received"), PIDGIN_PREFS_ROOT "/win32/blink_im", vbox); #endif + +#if 0 + /* TODO: it's not implemented */ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE); checkbox = pidgin_prefs_checkbox(_("Resize incoming custom smileys"), @@ -1900,6 +1901,7 @@ G_CALLBACK(pidgin_toggle_sensitive), spin_button); pidgin_add_widget_to_vbox(GTK_BOX(vbox), NULL, NULL, hbox, TRUE, NULL); +#endif pidgin_prefs_labeled_spin_button(vbox, _("Minimum input area height in lines:"), @@ -2471,7 +2473,8 @@ proxy_page(void) { GtkWidget *ret = NULL, *vbox = NULL, *hbox = NULL; - GtkWidget *table = NULL, *entry = NULL, *label = NULL, *proxy_button = NULL; + GtkWidget *table = NULL, *entry = NULL, *proxy_button = NULL; + GtkLabel *label = NULL; GtkWidget *prefs_proxy_frame = NULL; PurpleProxyInfo *proxy_info; @@ -2484,9 +2487,10 @@ gchar *path = NULL; hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE); - label = gtk_label_new(_("Proxy preferences are configured in GNOME preferences")); + label = GTK_LABEL(gtk_label_new(_("Proxy preferences " + "are configured in GNOME preferences"))); gtk_container_add(GTK_CONTAINER(vbox), hbox); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0); hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE); gtk_container_add(GTK_CONTAINER(vbox), hbox); @@ -2504,10 +2508,10 @@ } if (path == NULL) { - label = gtk_label_new(NULL); - gtk_label_set_markup(GTK_LABEL(label), - _("<b>Proxy configuration program was not found.</b>")); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + label = GTK_LABEL(gtk_label_new(NULL)); + gtk_label_set_markup(label, _("<b>Proxy configuration " + "program was not found.</b>")); + gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0); } else { proxy_button = gtk_button_new_with_mnemonic(_("Configure _Proxy")); g_signal_connect(G_OBJECT(proxy_button), "clicked", @@ -2551,12 +2555,13 @@ gtk_table_set_row_spacings(GTK_TABLE(table), 10); gtk_container_add(GTK_CONTAINER(prefs_proxy_subframe), table); - label = gtk_label_new_with_mnemonic(_("_Host:")); + label = GTK_LABEL(gtk_label_new_with_mnemonic(_("_Host:"))); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); - gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); + gtk_table_attach(GTK_TABLE(table), GTK_WIDGET(label), + 0, 1, 0, 1, GTK_FILL, 0, 0, 0); entry = gtk_entry_new(); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry); + gtk_label_set_mnemonic_widget(label, entry); gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 0, 1, GTK_FILL, 0, 0, 0); g_signal_connect(G_OBJECT(entry), "changed", G_CALLBACK(proxy_print_option), (void *)PROXYHOST); @@ -2568,14 +2573,15 @@ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); gtk_box_set_homogeneous(GTK_BOX(hbox), TRUE); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - pidgin_set_accessible_label (entry, label); - - label = gtk_label_new_with_mnemonic(_("P_ort:")); + pidgin_set_accessible_label(entry, label); + + label = GTK_LABEL(gtk_label_new_with_mnemonic(_("P_ort:"))); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); - gtk_table_attach(GTK_TABLE(table), label, 2, 3, 0, 1, GTK_FILL, 0, 0, 0); + gtk_table_attach(GTK_TABLE(table), GTK_WIDGET(label), + 2, 3, 0, 1, GTK_FILL, 0, 0, 0); entry = gtk_spin_button_new_with_range(0, 65535, 1); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry); + gtk_label_set_mnemonic_widget(label, entry); gtk_table_attach(GTK_TABLE(table), entry, 3, 4, 0, 1, GTK_FILL, 0, 0, 0); g_signal_connect(G_OBJECT(entry), "changed", G_CALLBACK(proxy_print_option), (void *)PROXYPORT); @@ -2584,14 +2590,15 @@ gtk_spin_button_set_value(GTK_SPIN_BUTTON(entry), purple_proxy_info_get_port(proxy_info)); } - pidgin_set_accessible_label (entry, label); - - label = gtk_label_new_with_mnemonic(_("User_name:")); + pidgin_set_accessible_label(entry, label); + + label = GTK_LABEL(gtk_label_new_with_mnemonic(_("User_name:"))); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); - gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_FILL, 0, 0, 0); + gtk_table_attach(GTK_TABLE(table), GTK_WIDGET(label), + 0, 1, 1, 2, GTK_FILL, 0, 0, 0); entry = gtk_entry_new(); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry); + gtk_label_set_mnemonic_widget(label, entry); gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 1, 2, GTK_FILL, 0, 0, 0); g_signal_connect(G_OBJECT(entry), "changed", G_CALLBACK(proxy_print_option), (void *)PROXYUSER); @@ -2603,14 +2610,15 @@ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); gtk_box_set_homogeneous(GTK_BOX(hbox), TRUE); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - pidgin_set_accessible_label (entry, label); - - label = gtk_label_new_with_mnemonic(_("Pa_ssword:")); + pidgin_set_accessible_label(entry, label); + + label = GTK_LABEL(gtk_label_new_with_mnemonic(_("Pa_ssword:"))); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); - gtk_table_attach(GTK_TABLE(table), label, 2, 3, 1, 2, GTK_FILL, 0, 0, 0); + gtk_table_attach(GTK_TABLE(table), GTK_WIDGET(label), + 2, 3, 1, 2, GTK_FILL, 0, 0, 0); entry = gtk_entry_new(); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry); + gtk_label_set_mnemonic_widget(label, entry); gtk_table_attach(GTK_TABLE(table), entry, 3, 4, 1, 2, GTK_FILL , 0, 0, 0); gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); g_signal_connect(G_OBJECT(entry), "changed", @@ -2619,7 +2627,7 @@ if (proxy_info != NULL && purple_proxy_info_get_password(proxy_info) != NULL) gtk_entry_set_text(GTK_ENTRY(entry), purple_proxy_info_get_password(proxy_info)); - pidgin_set_accessible_label (entry, label); + pidgin_set_accessible_label(entry, label); proxy_changed_cb("/purple/proxy/type", PURPLE_PREF_STRING, purple_prefs_get_string("/purple/proxy/type"), @@ -4027,8 +4035,12 @@ strcpy(pref + strlen(pref) - strlen("plugin"), "device"); devices = get_vv_element_devices(value); if (g_list_find_custom(devices, purple_prefs_get_string(pref), - (GCompareFunc)strcmp) == NULL) - purple_prefs_set_string(pref, g_list_next(devices)->data); + (GCompareFunc)strcmp) == NULL) + { + GList *next = g_list_next(devices); + if (next) + purple_prefs_set_string(pref, next->data); + } widget = pidgin_prefs_dropdown_from_list(vbox, _("_Device"), PURPLE_PREF_STRING, pref, devices); g_list_free_full(devices, g_free); @@ -4071,8 +4083,12 @@ /* Setup device preference */ devices = get_vv_element_devices(purple_prefs_get_string(plugin_pref)); if (g_list_find_custom(devices, purple_prefs_get_string(device_pref), - (GCompareFunc)strcmp) == NULL) - purple_prefs_set_string(device_pref, g_list_next(devices)->data); + (GCompareFunc)strcmp) == NULL) + { + GList *next = g_list_next(devices); + if (next) + purple_prefs_set_string(device_pref, next->data); + } widget = pidgin_prefs_dropdown_from_list(vbox, _("_Device"), PURPLE_PREF_STRING, device_pref, devices); @@ -4235,15 +4251,24 @@ smiley_theme_pref_cb(const char *name, PurplePrefType type, gconstpointer value, gpointer data) { - const char *themename = value; - GSList *themes; - - for (themes = smiley_themes; themes; themes = themes->next) { - struct PidginSmileyTheme *smile = themes->data; - if (smile->name && strcmp(themename, smile->name) == 0) { - pidgin_themes_load_smiley_theme(smile->path, TRUE); - break; - } + const gchar *theme_name = value; + GList *themes, *it; + + if (g_strcmp0(theme_name, "none") == 0) { + purple_smiley_theme_set_current(NULL); + return; + } + + /* XXX: could be cached when initializing prefs view */ + themes = pidgin_smiley_theme_get_all(); + + for (it = themes; it; it = g_list_next(it)) { + PidginSmileyTheme *theme = it->data; + + if (g_strcmp0(pidgin_smiley_theme_get_name(theme), theme_name)) + continue; + + purple_smiley_theme_set_current(PURPLE_SMILEY_THEME(theme)); } }
--- a/pidgin/gtkrequest.c Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtkrequest.c Mon Apr 07 20:02:22 2014 +0530 @@ -524,7 +524,7 @@ GtkWidget *dialog; GtkWidget *vbox; GtkWidget *hbox; - GtkWidget *label; + GtkLabel *label; GtkWidget *entry; GtkWidget *img; char *label_text; @@ -591,12 +591,12 @@ g_free(primary_esc); g_free(secondary_esc); - label = gtk_label_new(NULL); - - gtk_label_set_markup(GTK_LABEL(label), label_text); - gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); + label = GTK_LABEL(gtk_label_new(NULL)); + + gtk_label_set_markup(label, label_text); + gtk_label_set_line_wrap(label, TRUE); gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(label), FALSE, FALSE, 0); g_free(label_text); @@ -658,7 +658,7 @@ gtk_widget_show_all(vbox); } - pidgin_set_accessible_label (entry, label); + pidgin_set_accessible_label(entry, label); data->u.input.entry = entry; pidgin_auto_parent_window(dialog);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/gtksmiley-manager.c Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,833 @@ +/* + * 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 "http.h" +#include "notify.h" +#include "smiley.h" +#include "smiley-custom.h" +#include "smiley-list.h" + +#include "gtksmiley-manager.h" +#include "gtkutils.h" +#include "pidginstock.h" + +#include "gtk3compat.h" + +typedef struct +{ + PurpleSmiley *smiley; + + gchar *filename; + PurpleStoredImage *new_image; + + GtkDialog *window; + GtkImage *thumbnail; + GtkEntry *shortcut; +} SmileyEditDialog; + +typedef struct +{ + GtkDialog *window; + GtkListStore *model; + GtkTreeView *tree; + + PurpleHttpConnection *running_request; +} SmileyManager; + +enum +{ + SMILEY_LIST_MODEL_ICON, + SMILEY_LIST_MODEL_SHORTCUT, + SMILEY_LIST_MODEL_PURPLESMILEY, + SMILEY_LIST_MODEL_N_COL +}; + +enum +{ + PIDGIN_RESPONSE_MODIFY +}; + +static SmileyManager *smiley_manager = NULL; + +static void +edit_dialog_update_buttons(SmileyEditDialog *edit_dialog); + +static void +manager_list_fill(SmileyManager *manager); + + +/******************************************************************************* + * Custom smiley edit dialog image. + ******************************************************************************/ + +static void +edit_dialog_image_update_thumb(SmileyEditDialog *edit_dialog) +{ + GdkPixbuf *pixbuf = NULL; + + if (edit_dialog->new_image) { + pixbuf = pidgin_pixbuf_from_imgstore(edit_dialog->new_image); + } else if (edit_dialog->filename) { + pixbuf = pidgin_pixbuf_new_from_file(edit_dialog->filename); + if (!pixbuf) { + g_free(edit_dialog->filename); + edit_dialog->filename = NULL; + } + } + + if (pixbuf) { + pixbuf = pidgin_pixbuf_scale_down(pixbuf, 64, 64, + GDK_INTERP_HYPER, TRUE); + } + + if (!pixbuf) { + GtkIconSize icon_size = + gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_SMALL); + pixbuf = gtk_widget_render_icon(GTK_WIDGET(edit_dialog->window), + PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR, icon_size, + "PidginSmileyManager"); + } + g_return_if_fail(pixbuf != NULL); + + gtk_image_set_from_pixbuf(GTK_IMAGE(edit_dialog->thumbnail), pixbuf); + + g_object_unref(G_OBJECT(pixbuf)); +} + +static gboolean +edit_dialog_set_image(SmileyEditDialog *edit_dialog, + PurpleStoredImage *image) +{ + GdkPixbuf *tmp = NULL; + + if (edit_dialog->new_image) + purple_imgstore_unref(edit_dialog->new_image); + + if (edit_dialog->smiley) { + g_object_set_data(G_OBJECT(edit_dialog->smiley), + "pidgin-smiley-manager-list-thumb", NULL); + } + + /* check, if image is valid */ + if (image) + tmp = pidgin_pixbuf_from_imgstore(image); + if (tmp) + g_object_unref(tmp); + else { + purple_imgstore_unref(image); + image = NULL; + } + + edit_dialog->new_image = image; + + edit_dialog_image_update_thumb(edit_dialog); + edit_dialog_update_buttons(edit_dialog); + + return (image != NULL); +} + +static void +edit_dialog_set_shortcut(SmileyEditDialog *edit_dialog, + const gchar *shortcut) +{ + gtk_entry_set_text(edit_dialog->shortcut, shortcut ? shortcut : ""); +} + +static void +edit_dialog_image_choosen(const char *filename, gpointer _edit_dialog) +{ + PurpleStoredImage *image; + SmileyEditDialog *edit_dialog = _edit_dialog; + + if (!filename) + return; + + image = purple_imgstore_new_from_file(filename); + if (!image) + return; + + g_free(edit_dialog->filename); + edit_dialog->filename = NULL; + + if (!edit_dialog_set_image(edit_dialog, image)) + return; + edit_dialog->filename = g_strdup(filename); + + gtk_widget_grab_focus(GTK_WIDGET(edit_dialog->shortcut)); +} + +static void +edit_dialog_image_choose(GtkWidget *widget, gpointer _edit_dialog) +{ + GtkWidget *file_chooser; + file_chooser = pidgin_buddy_icon_chooser_new( + GTK_WINDOW(gtk_widget_get_toplevel(widget)), + edit_dialog_image_choosen, _edit_dialog); + gtk_window_set_title(GTK_WINDOW(file_chooser), _("Custom Smiley")); + gtk_window_set_role(GTK_WINDOW(file_chooser), + "file-selector-custom-smiley"); + gtk_widget_show_all(file_chooser); +} + + +/******************************************************************************* + * Custom smiley edit dialog. + ******************************************************************************/ + +static void +edit_dialog_destroy(GtkWidget *window, gpointer _edit_dialog) +{ + SmileyEditDialog *edit_dialog = _edit_dialog; + + if (edit_dialog->smiley) { + g_object_set_data(G_OBJECT(edit_dialog->smiley), + "pidgin-smiley-manager-edit-dialog", NULL); + g_object_unref(edit_dialog->smiley); + } + + purple_imgstore_unref(edit_dialog->new_image); + + g_free(edit_dialog->filename); + g_free(edit_dialog); +} + +static void +edit_dialog_save(SmileyEditDialog *edit_dialog) +{ + const gchar *shortcut; + PurpleSmiley *existing_smiley; + gboolean shortcut_changed, image_changed; + + shortcut = gtk_entry_get_text(edit_dialog->shortcut); + + existing_smiley = purple_smiley_list_get_by_shortcut( + purple_smiley_custom_get_list(), shortcut); + + if (existing_smiley && existing_smiley != edit_dialog->smiley) { + gchar *msg = g_strdup_printf( + _("A custom smiley for '%s' already exists. " + "Please use a different shortcut."), shortcut); + purple_notify_error(edit_dialog, _("Custom Smiley"), + _("Duplicate Shortcut"), msg, NULL); + g_free(msg); + return; + } + + if (edit_dialog->smiley == NULL) + shortcut_changed = image_changed = TRUE; + else { + shortcut_changed = (g_strcmp0(purple_smiley_get_shortcut( + edit_dialog->smiley), shortcut) != 0); + image_changed = (edit_dialog->new_image != NULL); + } + + if (!shortcut_changed && !image_changed) { + gtk_widget_destroy(GTK_WIDGET(edit_dialog->window)); + return; + } + + if (edit_dialog->new_image == NULL) { + /* We're reading the file and then writing it back - it's not + * efficient, but it's also not really important here. */ + edit_dialog->new_image = purple_imgstore_new_from_file( + purple_smiley_get_path(edit_dialog->smiley)); + g_return_if_fail(edit_dialog->new_image); + } + + if (edit_dialog->smiley) + purple_smiley_custom_remove(edit_dialog->smiley); + purple_smiley_custom_add(edit_dialog->new_image, shortcut); + + if (smiley_manager) + manager_list_fill(smiley_manager); + + gtk_widget_destroy(GTK_WIDGET(edit_dialog->window)); +} + +static void +edit_dialog_update_buttons(SmileyEditDialog *edit_dialog) +{ + gboolean shortcut_ok, image_ok; + + shortcut_ok = (gtk_entry_get_text_length(edit_dialog->shortcut) > 0); + image_ok = (edit_dialog->filename || edit_dialog->new_image); + + gtk_dialog_set_response_sensitive(edit_dialog->window, + GTK_RESPONSE_ACCEPT, shortcut_ok && image_ok); +} + +static void +edit_dialog_shortcut_changed(GtkEditable *shortcut, gpointer _edit_dialog) +{ + SmileyEditDialog *edit_dialog = _edit_dialog; + + edit_dialog_update_buttons(edit_dialog); +} + +static void +edit_dialog_response(GtkDialog *window, gint response_id, + gpointer _edit_dialog) +{ + SmileyEditDialog *edit_dialog = _edit_dialog; + + switch (response_id) { + case GTK_RESPONSE_ACCEPT: + edit_dialog_save(edit_dialog); + break; + case GTK_RESPONSE_DELETE_EVENT: + case GTK_RESPONSE_CANCEL: + gtk_widget_destroy(GTK_WIDGET(edit_dialog->window)); + break; + default: + g_warn_if_reached(); + } +} + +static SmileyEditDialog * +edit_dialog_show(SmileyManager *manager, PurpleSmiley *smiley) +{ + SmileyEditDialog *edit_dialog; + GtkWidget *vbox, *hbox; + GtkLabel *label; + GtkButton *filech; + + if (smiley) { + edit_dialog = g_object_get_data(G_OBJECT(smiley), + "pidgin-smiley-manager-edit-dialog"); + if (edit_dialog) { + gtk_window_present(GTK_WINDOW(edit_dialog->window)); + return edit_dialog; + } + } + + edit_dialog = g_new0(SmileyEditDialog, 1); + + edit_dialog->window = GTK_DIALOG(gtk_dialog_new_with_buttons( + smiley ? _("Edit Smiley") : _("Add Smiley"), + manager ? GTK_WINDOW(manager->window) : NULL, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + smiley ? GTK_STOCK_SAVE : GTK_STOCK_ADD, GTK_RESPONSE_ACCEPT, + NULL)); + gtk_dialog_set_default_response( + edit_dialog->window, GTK_RESPONSE_ACCEPT); + + if (smiley) { + edit_dialog->smiley = smiley; + g_object_set_data(G_OBJECT(smiley), + "pidgin-smiley-manager-edit-dialog", edit_dialog); + g_object_ref(smiley); + } + +#if !GTK_CHECK_VERSION(3,0,0) + gtk_container_set_border_width( + GTK_CONTAINER(edit_dialog->window), PIDGIN_HIG_BORDER); +#endif + + /* The vbox */ +#if GTK_CHECK_VERSION(3,0,0) + vbox = gtk_grid_new(); + gtk_grid_set_row_spacing(GTK_GRID(vbox), PIDGIN_HIG_BORDER); +#else + vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER); +#endif + gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area( + edit_dialog->window)), vbox); + gtk_widget_show(vbox); + + /* The hbox */ +#if GTK_CHECK_VERSION(3,0,0) + hbox = gtk_grid_new(); + gtk_grid_set_column_spacing(GTK_GRID(hbox), PIDGIN_HIG_BORDER); + gtk_grid_attach(GTK_GRID(vbox), hbox, 0, 0, 1, 1); +#else + hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(GTK_VBOX(vbox)), hbox); +#endif + + label = GTK_LABEL(gtk_label_new_with_mnemonic(_("_Image:"))); +#if GTK_CHECK_VERSION(3,0,0) + gtk_grid_attach(GTK_GRID(hbox), GTK_WIDGET(label), 0, 0, 1, 1); +#else + gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0); +#endif + gtk_widget_show(GTK_WIDGET(label)); + + filech = GTK_BUTTON(gtk_button_new()); +#if GTK_CHECK_VERSION(3,0,0) + gtk_grid_attach_next_to(GTK_GRID(hbox), GTK_WIDGET(filech), NULL, + GTK_POS_RIGHT, 1, 1); +#else + gtk_box_pack_end(GTK_BOX(hbox), GTK_WIDGET(filech), FALSE, FALSE, 0); +#endif + pidgin_set_accessible_label(GTK_WIDGET(filech), label); + + edit_dialog->thumbnail = GTK_IMAGE(gtk_image_new()); + gtk_container_add(GTK_CONTAINER(filech), + GTK_WIDGET(edit_dialog->thumbnail)); + + gtk_widget_show_all(hbox); + + /* info */ +#if GTK_CHECK_VERSION(3,0,0) + hbox = gtk_grid_new(); + gtk_grid_set_column_spacing(GTK_GRID(hbox), PIDGIN_HIG_BORDER); + + gtk_grid_attach_next_to(GTK_GRID(vbox), hbox, NULL, + GTK_POS_BOTTOM, 1, 1); +#else + hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(GTK_VBOX(vbox)), hbox); +#endif + + /* Shortcut text */ + label = GTK_LABEL(gtk_label_new_with_mnemonic(_("S_hortcut text:"))); +#if GTK_CHECK_VERSION(3,0,0) + gtk_grid_attach(GTK_GRID(hbox), GTK_WIDGET(label), 0, 0, 1, 1); +#else + gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0); +#endif + gtk_widget_show(GTK_WIDGET(label)); + + edit_dialog->shortcut = GTK_ENTRY(gtk_entry_new()); + gtk_entry_set_activates_default(edit_dialog->shortcut, TRUE); + pidgin_set_accessible_label(GTK_WIDGET(edit_dialog->shortcut), label); + +#if GTK_CHECK_VERSION(3,0,0) + gtk_grid_attach_next_to(GTK_GRID(hbox), + GTK_WIDGET(edit_dialog->shortcut), NULL, GTK_POS_RIGHT, 1, 1); +#else + gtk_box_pack_end(GTK_BOX(hbox), GTK_WIDGET(edit_dialog->shortcut), + FALSE, FALSE, 0); +#endif + + gtk_widget_show(GTK_WIDGET(edit_dialog->shortcut)); + gtk_widget_show(hbox); + gtk_widget_show(GTK_WIDGET(edit_dialog->window)); + + if (smiley) { + edit_dialog->filename = + g_strdup(purple_smiley_get_path(smiley)); + gtk_entry_set_text(edit_dialog->shortcut, + purple_smiley_get_shortcut(smiley)); + } + + edit_dialog_image_update_thumb(edit_dialog); + edit_dialog_update_buttons(edit_dialog); + + g_signal_connect(edit_dialog->window, "response", + G_CALLBACK(edit_dialog_response), edit_dialog); + g_signal_connect(filech, "clicked", + G_CALLBACK(edit_dialog_image_choose), edit_dialog); + g_signal_connect(edit_dialog->shortcut, "changed", + G_CALLBACK(edit_dialog_shortcut_changed), edit_dialog); + + g_signal_connect(edit_dialog->window, "destroy", + G_CALLBACK(edit_dialog_destroy), edit_dialog); + g_signal_connect(edit_dialog->window, "destroy", + G_CALLBACK(purple_notify_close_with_handle), edit_dialog); + + return edit_dialog; +} + +void +pidgin_smiley_manager_add(PurpleStoredImage *image, const gchar *shortcut) +{ + SmileyEditDialog *edit_dialog; + + g_return_if_fail(image != NULL); + + purple_imgstore_ref(image); + + edit_dialog = edit_dialog_show(NULL, NULL); + edit_dialog_set_shortcut(edit_dialog, shortcut); + if (!edit_dialog_set_image(edit_dialog, image)) + gtk_widget_destroy(GTK_WIDGET(edit_dialog->window)); +} + + +/******************************************************************************* + * Custom smiley list Drag-and-drop support. + ******************************************************************************/ + +static void +smiley_list_dnd_url_got(PurpleHttpConnection *http_conn, + PurpleHttpResponse *response, gpointer _manager) +{ + SmileyManager *manager = _manager; + SmileyEditDialog *edit_dialog; + PurpleStoredImage *image; + const gchar *image_data; + size_t image_size; + + g_return_if_fail(manager == smiley_manager); + g_return_if_fail(manager->running_request == http_conn); + manager->running_request = NULL; + + if (!purple_http_response_is_successful(response)) + return; + + image_data = purple_http_response_get_data(response, &image_size); + image = purple_imgstore_new(g_memdup(image_data, image_size), + image_size, NULL); + if (!image) + return; + + edit_dialog = edit_dialog_show(manager, NULL); + if (!edit_dialog_set_image(edit_dialog, image)) + gtk_widget_destroy(GTK_WIDGET(edit_dialog->window)); +} + +static void +smiley_list_dnd_recv(GtkWidget *widget, GdkDragContext *dc, gint x, gint y, + GtkSelectionData *sd, guint info, guint time, gpointer _manager) +{ + SmileyManager *manager = _manager; + gchar content[1024]; + + /* We don't need anything, that is not 8-bit per element (char). */ + if (gtk_selection_data_get_format(sd) != 8) { + gtk_drag_finish(dc, FALSE, FALSE, time); + return; + } + + if (gtk_selection_data_get_length(sd) <= 0) { + gtk_drag_finish(dc, FALSE, FALSE, time); + return; + } + + memset(&content, 0, sizeof(content)); + memcpy(&content, gtk_selection_data_get_data(sd), + MIN((guint)gtk_selection_data_get_length(sd), sizeof(content))); + g_strstrip(content); + if (content[0] == '\0') { + gtk_drag_finish(dc, FALSE, FALSE, time); + return; + } + + /* Well, it looks like the drag event was cool. + * Let's do something with it */ + + if (purple_str_has_caseprefix(content, "file://")) { + SmileyEditDialog *edit_dialog; + PurpleStoredImage *image; + gchar *filename; + + filename = g_filename_from_uri(content, NULL, NULL); + if (!filename || !g_file_test(filename, G_FILE_TEST_EXISTS)) { + purple_debug_warning("gtksmiley-manager", + "dropped file does not exists"); + gtk_drag_finish(dc, FALSE, FALSE, time); + return; + } + + image = purple_imgstore_new_from_file(filename); + if (!image) { + purple_debug_warning("gtksmiley-manager", + "dropped file is not a valid image"); + gtk_drag_finish(dc, FALSE, FALSE, time); + return; + } + edit_dialog = edit_dialog_show(manager, NULL); + if (!edit_dialog_set_image(edit_dialog, image)) { + gtk_widget_destroy(GTK_WIDGET(edit_dialog->window)); + gtk_drag_finish(dc, FALSE, FALSE, time); + return; + } + + gtk_drag_finish(dc, TRUE, FALSE, time); + return; + } + + if (purple_str_has_caseprefix(content, "http://") || + purple_str_has_caseprefix(content, "https://")) + { + purple_http_conn_cancel(smiley_manager-> + running_request); + smiley_manager->running_request = purple_http_get(NULL, + smiley_list_dnd_url_got, manager, content); + + gtk_drag_finish(dc, TRUE, FALSE, time); + return; + } + + gtk_drag_finish(dc, FALSE, FALSE, time); +} + +/******************************************************************************* + * Custom smiley list. + ******************************************************************************/ + +static void +smiley_list_selected(GtkTreeSelection *sel, gpointer _manager) +{ + SmileyManager *manager = _manager; + gboolean sens; + + sens = (gtk_tree_selection_count_selected_rows(sel) > 0); + + gtk_dialog_set_response_sensitive(manager->window, + GTK_RESPONSE_NO, sens); + gtk_dialog_set_response_sensitive(manager->window, + PIDGIN_RESPONSE_MODIFY, sens); +} + +static void +smiley_list_activated(GtkTreeView *tree, GtkTreePath *path, + GtkTreeViewColumn *col, gpointer _manager) +{ + SmileyManager *manager = _manager; + GtkTreeIter iter; + PurpleSmiley *smiley = NULL; + + if (!gtk_tree_model_get_iter( + GTK_TREE_MODEL(manager->model), &iter, path)) + { + return; + } + + gtk_tree_model_get(GTK_TREE_MODEL(manager->model), &iter, + SMILEY_LIST_MODEL_PURPLESMILEY, &smiley, -1); + g_return_if_fail(PURPLE_IS_SMILEY(smiley)); + + edit_dialog_show(manager, smiley); +} + +static void +manager_list_add(SmileyManager *manager, PurpleSmiley *smiley) +{ + GdkPixbuf *smiley_image; + GtkTreeIter iter; + + smiley_image = g_object_get_data(G_OBJECT(smiley), + "pidgin-smiley-manager-list-thumb"); + if (smiley_image == NULL) { + smiley_image = pidgin_pixbuf_new_from_file( + purple_smiley_get_path(smiley)); + smiley_image = pidgin_pixbuf_scale_down(smiley_image, + 22, 22, GDK_INTERP_BILINEAR, TRUE); + g_object_set_data_full(G_OBJECT(smiley), + "pidgin-smiley-manager-list-thumb", + smiley_image, g_object_unref); + } + + gtk_list_store_append(manager->model, &iter); + gtk_list_store_set(manager->model, &iter, + SMILEY_LIST_MODEL_ICON, smiley_image, + SMILEY_LIST_MODEL_SHORTCUT, purple_smiley_get_shortcut(smiley), + SMILEY_LIST_MODEL_PURPLESMILEY, smiley, + -1); +} + +static void +manager_list_fill(SmileyManager *manager) +{ + GList *custom_smileys, *it; + gtk_list_store_clear(manager->model); + + custom_smileys = purple_smiley_list_get_all( + purple_smiley_custom_get_list()); + + for (it = custom_smileys; it; it = g_list_next(it)) { + PurpleSmiley *smiley = it->data; + + manager_list_add(manager, smiley); + } + g_list_free(custom_smileys); +} + +static GtkWidget * +manager_list_create(SmileyManager *manager) +{ + GtkTreeView *tree; + GtkTreeSelection *sel; + GtkCellRenderer *cellrend; + GtkTreeViewColumn *column; + GtkTargetEntry targets[3] = { + {"text/plain", 0, 0}, + {"text/uri-list", 0, 1}, + {"STRING", 0, 2} + }; + + manager->model = gtk_list_store_new(SMILEY_LIST_MODEL_N_COL, + GDK_TYPE_PIXBUF, /* icon */ + G_TYPE_STRING, /* shortcut */ + G_TYPE_OBJECT /* PurpleSmiley */ + ); + + manager->tree = tree = GTK_TREE_VIEW(gtk_tree_view_new_with_model( + GTK_TREE_MODEL(manager->model))); + + gtk_tree_view_set_rules_hint(tree, TRUE); + gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(manager->model), + SMILEY_LIST_MODEL_SHORTCUT, GTK_SORT_ASCENDING); + + g_object_unref(manager->model); + + sel = gtk_tree_view_get_selection(tree); + gtk_tree_selection_set_mode(sel, GTK_SELECTION_MULTIPLE); + + g_signal_connect(sel, "changed", + G_CALLBACK(smiley_list_selected), manager); + g_signal_connect(tree, "row-activated", + G_CALLBACK(smiley_list_activated), manager); + + gtk_drag_dest_set(GTK_WIDGET(tree), GTK_DEST_DEFAULT_MOTION | + GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP, + targets, G_N_ELEMENTS(targets), + GDK_ACTION_COPY | GDK_ACTION_MOVE); + g_signal_connect(tree, "drag-data-received", + G_CALLBACK(smiley_list_dnd_recv), manager); + + gtk_widget_show(GTK_WIDGET(tree)); + + /* setting up columns */ + + column = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(column, _("Smiley")); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_append_column(tree, column); + cellrend = gtk_cell_renderer_pixbuf_new(); + gtk_tree_view_column_pack_start(column, cellrend, FALSE); + gtk_tree_view_column_add_attribute(column, cellrend, + "pixbuf", SMILEY_LIST_MODEL_ICON); + + column = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(column, _("Shortcut Text")); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_append_column(tree, column); + cellrend = gtk_cell_renderer_text_new(); + gtk_tree_view_column_pack_start(column, cellrend, TRUE); + gtk_tree_view_column_add_attribute(column, cellrend, + "text", SMILEY_LIST_MODEL_SHORTCUT); + + manager_list_fill(manager); + + return pidgin_make_scrollable(GTK_WIDGET(tree), GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC, GTK_SHADOW_IN, -1, -1); +} + +/******************************************************************************* + * Custom smiley manager window. + ******************************************************************************/ + +static void +manager_select_cb(GtkWidget *widget, gint resp, SmileyManager *manager) +{ + GtkTreeSelection *selection = NULL; + GList *selected_rows, *selected_smileys = NULL, *it; + GtkTreeModel *model = GTK_TREE_MODEL(manager->model); + + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(manager->tree)); + selected_rows = gtk_tree_selection_get_selected_rows(selection, NULL); + for (it = selected_rows; it; it = g_list_next(it)) { + GtkTreePath *path = it->data; + GtkTreeIter iter; + PurpleSmiley *smiley = NULL; + + if (!gtk_tree_model_get_iter(model, &iter, path)) + continue; + + gtk_tree_model_get(model, &iter, + SMILEY_LIST_MODEL_PURPLESMILEY, &smiley, -1); + if (!smiley) + continue; + + selected_smileys = g_list_prepend(selected_smileys, smiley); + } + g_list_free_full(selected_rows, (GDestroyNotify)gtk_tree_path_free); + + switch (resp) { + case GTK_RESPONSE_YES: + edit_dialog_show(manager, NULL); + break; + case GTK_RESPONSE_NO: + for (it = selected_smileys; it; it = g_list_next(it)) + purple_smiley_custom_remove(it->data); + manager_list_fill(manager); + break; + case GTK_RESPONSE_DELETE_EVENT: + case GTK_RESPONSE_CLOSE: + gtk_widget_destroy(GTK_WIDGET(manager->window)); + purple_http_conn_cancel(manager->running_request); + g_free(manager); + smiley_manager = NULL; + break; + case PIDGIN_RESPONSE_MODIFY: + for (it = selected_smileys; it; it = g_list_next(it)) + edit_dialog_show(manager, it->data); + break; + default: + g_warn_if_reached(); + } + + g_list_free(selected_smileys); +} + +void +pidgin_smiley_manager_show(void) +{ + SmileyManager *manager; + GtkDialog *win; + GtkWidget *sw, *vbox; + + if (smiley_manager) { + gtk_window_present(GTK_WINDOW(smiley_manager->window)); + return; + } + + manager = g_new0(SmileyManager, 1); + smiley_manager = manager; + + manager->window = win = GTK_DIALOG(gtk_dialog_new_with_buttons( + _("Custom Smiley Manager"), NULL, + GTK_DIALOG_DESTROY_WITH_PARENT, + PIDGIN_STOCK_ADD, GTK_RESPONSE_YES, + PIDGIN_STOCK_MODIFY, PIDGIN_RESPONSE_MODIFY, + GTK_STOCK_DELETE, GTK_RESPONSE_NO, + GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, + NULL)); + + gtk_window_set_default_size(GTK_WINDOW(win), 50, 400); + gtk_window_set_role(GTK_WINDOW(win), "custom_smiley_manager"); +#if !GTK_CHECK_VERSION(3,0,0) + gtk_container_set_border_width(GTK_CONTAINER(win), PIDGIN_HIG_BORDER); +#endif + gtk_dialog_set_response_sensitive(win, GTK_RESPONSE_NO, FALSE); + gtk_dialog_set_response_sensitive(win, PIDGIN_RESPONSE_MODIFY, FALSE); + + g_signal_connect(win, "response", + G_CALLBACK(manager_select_cb), manager); + + /* The vbox */ + vbox = gtk_dialog_get_content_area(win); + + /* get the scrolled window with all stuff */ + sw = manager_list_create(manager); + gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); + gtk_widget_show(sw); + + gtk_widget_show(GTK_WIDGET(win)); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/gtksmiley-manager.h Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,60 @@ +/* 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_SMILEY_MANAGER_H_ +#define _PIDGIN_SMILEY_MANAGER_H_ +/** + * SECTION:gtksmiley-manager + * @include:gtksmiley-manager.h + * @section_id: pidgin-smiley-manager + * @short_description: a UI for user-defined smileys management + * @title: Custom smileys manager + * + * This module provides a GTK+ UI that allows the user adding and removing + * custom smileys. See libpurple-smiley-custom section (TODO: how to link this + * to libpurple's docs?). + */ + +G_BEGIN_DECLS + +/** + * pidgin_smiley_manager_show: + * + * Creates and shows the smiley manager window, or requests focus for it, + * if it's already opened. + */ +void +pidgin_smiley_manager_show(void); + +/** + * pidgin_smiley_manager_add: + * @image: the image for a new smiley. + * @shortcut: the textual representation, may be %NULL. + * + * Creates and shows the new dialog for adding a new custom smiley with + * provided image. + */ +void +pidgin_smiley_manager_add(PurpleStoredImage *image, const gchar *shortcut); + +G_END_DECLS + +#endif /* _PIDGIN_SMILEY_MANAGER_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/gtksmiley-theme.c Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,615 @@ +/* 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 "gtksmiley-theme.h" + +#include "internal.h" +#include "glibcompat.h" + +#include "debug.h" + +#include "gtkutils.h" + +#include <glib/gstdio.h> + +#define PIDGIN_SMILEY_THEME_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), PIDGIN_TYPE_SMILEY_THEME, \ + PidginSmileyThemePrivate)) + +#define PIDGIN_SMILEY_THEME_MAX_LINES 1024 +#define PIDGIN_SMILEY_THEME_MAX_TOKENS 1024 + +typedef struct +{ + gchar *path; + + gchar *name; + gchar *desc; + gchar *icon; + gchar *author; + + GdkPixbuf *icon_pixbuf; + + GHashTable *smiley_lists_map; +} PidginSmileyThemePrivate; + +static GObjectClass *parent_class; + +static gchar **probe_dirs; +static GList *smiley_themes = NULL; + +typedef struct +{ + gchar *name; + gchar *desc; + gchar *icon; + gchar *author; + + GList *protocols; +} PidginSmileyThemeIndex; + +typedef struct +{ + gchar *name; + GList *smileys; +} PidginSmileyThemeIndexProtocol; + +typedef struct +{ + gchar *file; + gboolean hidden; + GList *shortcuts; +} PidginSmileyThemeIndexSmiley; + +/******************************************************************************* + * Theme index parsing + ******************************************************************************/ + +static void +pidgin_smiley_theme_index_free(PidginSmileyThemeIndex *index) +{ + GList *it, *it2; + + g_return_if_fail(index != NULL); + + g_free(index->name); + g_free(index->desc); + g_free(index->icon); + g_free(index->author); + + for (it = index->protocols; it; it = g_list_next(it)) { + PidginSmileyThemeIndexProtocol *proto = it->data; + + g_free(proto->name); + for (it2 = proto->smileys; it2; it2 = g_list_next(it2)) { + PidginSmileyThemeIndexSmiley *smiley = it2->data; + + g_free(smiley->file); + g_list_free_full(smiley->shortcuts, g_free); + g_free(smiley); + } + g_list_free(proto->smileys); + g_free(proto); + } + g_list_free(index->protocols); +} + +static PidginSmileyThemeIndex * +pidgin_smiley_theme_index_parse(const gchar *theme_path, gboolean load_contents) +{ + PidginSmileyThemeIndex *index; + PidginSmileyThemeIndexProtocol *proto = NULL; + gchar *index_path; + FILE *file; + int line_no = 0; + gboolean inv_frm = FALSE; + + index_path = g_build_filename(theme_path, "theme", NULL); + file = g_fopen(index_path, "r"); + if (!file) { + purple_debug_error("gtksmiley-theme", + "Failed to open index file %s", index_path); + g_free(index_path); + return NULL; + } + + index = g_new0(PidginSmileyThemeIndex, 1); + + while (!feof(file)) { + PidginSmileyThemeIndexSmiley *smiley; + gchar buff[1024]; + gchar *line, *eqchr; + gchar **split; + int i; + + if (++line_no > PIDGIN_SMILEY_THEME_MAX_LINES) { + purple_debug_warning("gtksmiley-theme", "file too big"); + break; + } + + if (!fgets(buff, sizeof(buff), file)) + break; + + /* strip comments */ + if (buff[0] == '#') + continue; + + g_strstrip(buff); + if (buff[0] == '\0') + continue; + + if (!g_utf8_validate(buff, -1, NULL)) { + purple_debug_error("gtksmiley-theme", + "%s:%d is invalid UTF-8", + index_path, line_no); + continue; + } + + line = buff; + + if (line[0] == '[') { + gchar *end; + + if (!load_contents) + break; + line++; + end = strchr(line, ']'); + if (!end) { + inv_frm = TRUE; + break; + } + + proto = g_new0(PidginSmileyThemeIndexProtocol, 1); + proto->name = g_strndup(line, end - line); + + index->protocols = + g_list_prepend(index->protocols, proto); + + continue; + } + + if ((eqchr = strchr(line, '='))) { + *eqchr = '\0'; + if (g_ascii_strcasecmp(line, "name") == 0) { + g_free(index->name); + index->name = g_strdup(eqchr + 1); + g_strchug(index->name); + continue; + } else if (g_ascii_strcasecmp(line, "description") == 0) { + g_free(index->desc); + index->desc = g_strdup(eqchr + 1); + g_strchug(index->desc); + continue; + } else if (g_ascii_strcasecmp(line, "icon") == 0) { + g_free(index->icon); + index->icon = g_strdup(eqchr + 1); + g_strchug(index->icon); + continue; + } else if (g_ascii_strcasecmp(line, "author") == 0) { + g_free(index->author); + index->author = g_strdup(eqchr + 1); + g_strchug(index->author); + continue; + } + *eqchr = '='; + } + + /* parsing section content */ + + if (proto == NULL) { + inv_frm = FALSE; + break; + } + + smiley = g_new0(PidginSmileyThemeIndexSmiley, 1); + proto->smileys = g_list_prepend(proto->smileys, smiley); + + smiley->hidden = FALSE; + if (line[0] == '!') { + smiley->hidden = TRUE; + line++; + } + + split = g_strsplit_set(line, " \t", + PIDGIN_SMILEY_THEME_MAX_TOKENS); + for (i = 0; split[i]; i++) { + gchar *token = split[i]; + + if (token[0] == '\0') + continue; + if (i == PIDGIN_SMILEY_THEME_MAX_TOKENS - 1) + break; + + if (!smiley->file) { + smiley->file = g_strdup(token); + continue; + } + + smiley->shortcuts = g_list_prepend(smiley->shortcuts, + g_strdup(token)); + } + g_strfreev(split); + smiley->shortcuts = g_list_reverse(smiley->shortcuts); + } + + fclose(file); + + if (inv_frm) { + purple_debug_error("gtksmiley-theme", "%s:%d" + " invalid format", index_path, line_no); + pidgin_smiley_theme_index_free(index); + index = NULL; + } + + g_free(index_path); + return index; +} + +/******************************************************************************* + * Theme loading + ******************************************************************************/ + +static void +pidgin_smiley_theme_load(const gchar *theme_path) +{ + PidginSmileyTheme *theme; + PidginSmileyThemePrivate *priv; + PidginSmileyThemeIndex *index; + GList *it; + + /* it's not super-efficient, but we don't expect huge amount of + * installed themes */ + for (it = smiley_themes; it; it = g_list_next(it)) { + PidginSmileyThemePrivate *priv = + PIDGIN_SMILEY_THEME_GET_PRIVATE(it->data); + + /* theme is already loaded */ + if (g_strcmp0(priv->path, theme_path) == 0) + return; + } + + theme = g_object_new(PIDGIN_TYPE_SMILEY_THEME, NULL); + priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(theme); + + priv->path = g_strdup(theme_path); + + index = pidgin_smiley_theme_index_parse(theme_path, FALSE); + + if (!index->name || index->name[0] == '\0') { + purple_debug_warning("gtksmiley-theme", + "incomplete theme %s", theme_path); + pidgin_smiley_theme_index_free(index); + g_object_unref(theme); + return; + } + + priv->name = g_strdup(index->name); + if (index->desc && index->desc[0]) + priv->desc = g_strdup(index->desc); + if (index->icon && index->icon[0]) + priv->icon = g_strdup(index->icon); + if (index->author && index->author[0]) + priv->author = g_strdup(index->author); + + pidgin_smiley_theme_index_free(index); + + smiley_themes = g_list_append(smiley_themes, theme); +} + +static void +pidgin_smiley_theme_probe(void) +{ + GList *it, *next; + int i; + + /* remove non-existing themes */ + for (it = smiley_themes; it; it = next) { + PidginSmileyTheme *theme = it->data; + PidginSmileyThemePrivate *priv = + PIDGIN_SMILEY_THEME_GET_PRIVATE(theme); + + next = g_list_next(it); + + if (g_file_test(priv->path, G_FILE_TEST_EXISTS)) + continue; + smiley_themes = g_list_delete_link(smiley_themes, it); + g_object_unref(theme); + } + + /* scan for themes */ + for (i = 0; probe_dirs[i]; i++) { + GDir *dir = g_dir_open(probe_dirs[i], 0, NULL); + const gchar *theme_dir_name; + + if (!dir) + continue; + + while ((theme_dir_name = g_dir_read_name(dir))) { + gchar *theme_path; + + /* Ignore Pidgin 2.x.y "none" theme. */ + if (g_strcmp0(theme_dir_name, "none") == 0) + continue; + + theme_path = g_build_filename( + probe_dirs[i], theme_dir_name, NULL); + + if (g_file_test(theme_path, G_FILE_TEST_IS_DIR)) + pidgin_smiley_theme_load(theme_path); + + g_free(theme_path); + } + + g_dir_close(dir); + } +} + + +/******************************************************************************* + * API implementation + ******************************************************************************/ + +const gchar * +pidgin_smiley_theme_get_name(PidginSmileyTheme *theme) +{ + PidginSmileyThemePrivate *priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(theme); + + g_return_val_if_fail(priv != NULL, NULL); + + return priv->name; +} + +const gchar * +pidgin_smiley_theme_get_description(PidginSmileyTheme *theme) +{ + PidginSmileyThemePrivate *priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(theme); + + g_return_val_if_fail(priv != NULL, NULL); + + return priv->desc; +} + +GdkPixbuf * +pidgin_smiley_theme_get_icon(PidginSmileyTheme *theme) +{ + PidginSmileyThemePrivate *priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(theme); + + g_return_val_if_fail(priv != NULL, NULL); + + if (priv->icon == NULL) + return NULL; + + if (!priv->icon_pixbuf) { + gchar *icon_path = g_build_filename( + priv->path, priv->icon, NULL); + priv->icon_pixbuf = pidgin_pixbuf_new_from_file(icon_path); + g_free(icon_path); + } + + return priv->icon_pixbuf; +} + +const gchar * +pidgin_smiley_theme_get_author(PidginSmileyTheme *theme) +{ + PidginSmileyThemePrivate *priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(theme); + + g_return_val_if_fail(priv != NULL, NULL); + + return priv->author; +} + +PurpleSmileyList * +pidgin_smiley_theme_for_conv(PurpleConversation *conv) +{ + PurpleAccount *acc = NULL; + PurpleSmileyTheme *theme; + const gchar *proto_name = NULL; + + theme = purple_smiley_theme_get_current(); + if (theme == NULL) + return NULL; + + if (conv) + acc = purple_conversation_get_account(conv); + if (acc) + proto_name = purple_account_get_protocol_name(acc); + + return purple_smiley_theme_get_smileys(theme, (gpointer)proto_name); +} + +static void +pidgin_smiley_theme_activate_impl(PurpleSmileyTheme *theme) +{ + PidginSmileyThemePrivate *priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(theme); + PidginSmileyThemeIndex *index; + GHashTable *smap; + GList *it, *it2, *it3; + + g_return_if_fail(priv != NULL); + + if (priv->smiley_lists_map) + return; + + priv->smiley_lists_map = smap = g_hash_table_new_full( + g_str_hash, g_str_equal, g_free, g_object_unref); + + index = pidgin_smiley_theme_index_parse(priv->path, TRUE); + + for (it = index->protocols; it; it = g_list_next(it)) { + PidginSmileyThemeIndexProtocol *proto_idx = it->data; + PurpleSmileyList *proto_smileys; + + proto_smileys = g_hash_table_lookup(smap, proto_idx->name); + if (!proto_smileys) { + proto_smileys = purple_smiley_list_new(); + g_hash_table_insert(smap, + g_strdup(proto_idx->name), proto_smileys); + } + + for (it2 = proto_idx->smileys; it2; it2 = g_list_next(it2)) { + PidginSmileyThemeIndexSmiley *smiley_idx = it2->data; + gchar *smiley_path; + + smiley_path = g_build_filename( + priv->path, smiley_idx->file, NULL); + if (!g_file_test(smiley_path, G_FILE_TEST_EXISTS)) { + purple_debug_warning("gtksmiley-theme", + "Smiley %s is missing", smiley_path); + continue; + } + + for (it3 = smiley_idx->shortcuts; it3; + it3 = g_list_next(it3)) + { + PurpleSmiley *smiley; + gchar *shortcut = it3->data; + + smiley = purple_smiley_new( + shortcut, smiley_path); + g_object_set_data(G_OBJECT(smiley), + "pidgin-smiley-hidden", + GINT_TO_POINTER(smiley_idx->hidden)); + purple_smiley_list_add(proto_smileys, smiley); + g_object_unref(smiley); + } + } + } + + pidgin_smiley_theme_index_free(index); +} + +static PurpleSmileyList * +pidgin_smiley_theme_get_smileys_impl(PurpleSmileyTheme *theme, gpointer ui_data) +{ + PidginSmileyThemePrivate *priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(theme); + PurpleSmileyList *smileys = NULL; + + pidgin_smiley_theme_activate_impl(theme); + + if (ui_data) + smileys = g_hash_table_lookup(priv->smiley_lists_map, ui_data); + if (smileys != NULL) + return smileys; + + return g_hash_table_lookup(priv->smiley_lists_map, "default"); +} + +GList * +pidgin_smiley_theme_get_all(void) +{ + pidgin_smiley_theme_probe(); + + return smiley_themes; +} + +void +_pidgin_smiley_theme_init(void) +{ + GList *it; + const gchar *user_smileys_dir; + const gchar *theme_name; + + probe_dirs = g_new0(gchar*, 3); + probe_dirs[0] = g_build_filename( + DATADIR, "pixmaps", "pidgin", "emotes", NULL); + user_smileys_dir = probe_dirs[1] = g_build_filename( + purple_user_dir(), "smileys", NULL); + + if (!g_file_test(user_smileys_dir, G_FILE_TEST_IS_DIR)) + g_mkdir(user_smileys_dir, S_IRUSR | S_IWUSR | S_IXUSR); + + /* setting theme by name (copy-paste from gtkprefs) */ + pidgin_smiley_theme_probe(); + theme_name = purple_prefs_get_string( + PIDGIN_PREFS_ROOT "/smileys/theme"); + for (it = smiley_themes; it; it = g_list_next(it)) { + PidginSmileyTheme *theme = it->data; + + if (g_strcmp0(pidgin_smiley_theme_get_name(theme), theme_name)) + continue; + + purple_smiley_theme_set_current(PURPLE_SMILEY_THEME(theme)); + } +} + +void +_pidgin_smiley_theme_uninit(void) +{ + g_strfreev(probe_dirs); +} + +/******************************************************************************* + * Object stuff + ******************************************************************************/ + +static void +pidgin_smiley_theme_finalize(GObject *obj) +{ + PidginSmileyThemePrivate *priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(obj); + + g_free(priv->path); + g_free(priv->name); + g_free(priv->desc); + g_free(priv->icon); + g_free(priv->author); + if (priv->icon_pixbuf) + g_object_unref(priv->icon_pixbuf); + if (priv->smiley_lists_map) + g_hash_table_destroy(priv->smiley_lists_map); + + G_OBJECT_CLASS(parent_class)->finalize(obj); +} + +static void +pidgin_smiley_theme_class_init(PidginSmileyThemeClass *klass) +{ + GObjectClass *gobj_class = G_OBJECT_CLASS(klass); + PurpleSmileyThemeClass *pst_class = PURPLE_SMILEY_THEME_CLASS(klass); + + parent_class = g_type_class_peek_parent(klass); + + g_type_class_add_private(klass, sizeof(PidginSmileyThemePrivate)); + + gobj_class->finalize = pidgin_smiley_theme_finalize; + + pst_class->get_smileys = pidgin_smiley_theme_get_smileys_impl; + pst_class->activate = pidgin_smiley_theme_activate_impl; +} + +GType +pidgin_smiley_theme_get_type(void) +{ + static GType type = 0; + + if (G_UNLIKELY(type == 0)) { + static const GTypeInfo info = { + .class_size = sizeof(PidginSmileyThemeClass), + .class_init = (GClassInitFunc)pidgin_smiley_theme_class_init, + .instance_size = sizeof(PidginSmileyTheme), + }; + + type = g_type_register_static(PURPLE_TYPE_SMILEY_THEME, + "PidginSmileyTheme", &info, 0); + } + + return type; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/gtksmiley-theme.h Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,174 @@ +/* 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_SMILEY_THEME_H_ +#define _PIDGIN_SMILEY_THEME_H_ +/** + * SECTION:gtksmiley-theme + * @include:gtksmiley-theme.h + * @section_id: pidgin-smiley-theme + * @short_description: a per-protocol categorized sets of standard smileys + * @title: Pidgin's smiley themes + * + * This class implements a per-protocol based #PurpleSmileyTheme. + */ + +#include <glib-object.h> +#include <gdk-pixbuf/gdk-pixbuf.h> + +#include "conversation.h" +#include "smiley-theme.h" + +typedef struct _PidginSmileyTheme PidginSmileyTheme; +typedef struct _PidginSmileyThemeClass PidginSmileyThemeClass; + +#define PIDGIN_TYPE_SMILEY_THEME (pidgin_smiley_theme_get_type()) +#define PIDGIN_SMILEY_THEME(smiley) (G_TYPE_CHECK_INSTANCE_CAST((smiley), PIDGIN_TYPE_SMILEY_THEME, PidginSmileyTheme)) +#define PIDGIN_SMILEY_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PIDGIN_TYPE_SMILEY_THEME, PidginSmileyThemeClass)) +#define PIDGIN_IS_SMILEY_THEME(smiley) (G_TYPE_CHECK_INSTANCE_TYPE((smiley), PIDGIN_TYPE_SMILEY_THEME)) +#define PIDGIN_IS_SMILEY_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PIDGIN_TYPE_SMILEY_THEME)) +#define PIDGIN_SMILEY_THEME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PIDGIN_TYPE_SMILEY_THEME, PidginSmileyThemeClass)) + +/** + * PidginSmileyTheme: + * + * An implementation of a smiley theme. + */ +struct _PidginSmileyTheme +{ + /*< private >*/ + PurpleSmileyTheme parent; +}; + +/** + * PidginSmileyThemeClass: + * + * Base class for #PidginSmileyTheme objects. + */ +struct _PidginSmileyThemeClass +{ + /*< private >*/ + PurpleSmileyThemeClass parent_class; + + void (*pidgin_reserved1)(void); + void (*pidgin_reserved2)(void); + void (*pidgin_reserved3)(void); + void (*pidgin_reserved4)(void); +}; + +G_BEGIN_DECLS + +/** + * pidgin_smiley_theme_get_type: + * + * Returns: the #GType for a smiley list. + */ +GType +pidgin_smiley_theme_get_type(void); + +/** + * pidgin_smiley_theme_get_name: + * @theme: the smiley theme. + * + * Returns the name for a @theme. Valid themes always have the name set. + * + * Returns: (transfer none): the name string, or %NULL if error occured. + */ +const gchar * +pidgin_smiley_theme_get_name(PidginSmileyTheme *theme); + +/** + * pidgin_smiley_theme_get_description: + * @theme: the smiley theme. + * + * Returns the description for a @theme. + * + * Returns: (transfer none): the description string, or %NULL if it's not + * set or error occured. + */ +const gchar * +pidgin_smiley_theme_get_description(PidginSmileyTheme *theme); + +/** + * pidgin_smiley_theme_get_icon: + * @theme: the smiley theme. + * + * Returns the @theme's icon image, possibly loading it from the disk (and + * adding it to the cache). + * + * Returns: (transfer none): the @theme's icon image. + */ +GdkPixbuf * +pidgin_smiley_theme_get_icon(PidginSmileyTheme *theme); + +/** + * pidgin_smiley_theme_get_author: + * @theme: the smiley theme. + * + * Returns the autor of @theme. + * + * Returns: (transfer none): the author string, or %NULL if it's not + * set or error occured. + */ +const gchar * +pidgin_smiley_theme_get_author(PidginSmileyTheme *theme); + +/** + * pidgin_smiley_theme_for_conv: + * @conv: the conversation. + * + * Gets the smiley list for a @conv based on current theme. + * + * Returns: (transfer none): the smiley list, or %NULL if there + * is no smiley theme set. + */ +PurpleSmileyList * +pidgin_smiley_theme_for_conv(PurpleConversation *conv); + +/** + * pidgin_smiley_theme_get_all: + * + * Returns the list of currently available smiley themes. + * + * Returns: (transfer none): the #GList of #PidginSmileyTheme's. + */ +GList * +pidgin_smiley_theme_get_all(void); + +/** + * _pidgin_smiley_theme_init: (skip) + * + * Initializes the Pidgin's smiley theme subsystem. + */ +void +_pidgin_smiley_theme_init(void); + +/** + * _pidgin_smiley_theme_uninit: (skip) + * + * Unitializes the Pidgin's smiley theme subsystem. + */ +void +_pidgin_smiley_theme_uninit(void); + +G_END_DECLS + +#endif /* _PIDGIN_SMILEY_THEME_H_ */
--- a/pidgin/gtksmiley.c Thu Apr 03 09:37:53 2014 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,968 +0,0 @@ -/* - * 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 "pidgin.h" - -#include "debug.h" -#include "http.h" -#include "notify.h" -#include "smiley.h" - -#include "gtksmiley.h" -#include "gtkutils.h" -#include "gtkwebview.h" -#include "pidginstock.h" - -#include "gtk3compat.h" - -#define PIDGIN_RESPONSE_MODIFY 1000 - -struct _PidginSmiley -{ - gint box_count; - PurpleSmiley *smiley; - GtkWidget *parent; - GtkWidget *smile; - GtkWidget *smiley_image; - gchar *filename; - GdkPixbuf *custom_pixbuf; - gpointer data; - gsize datasize; - gint entry_len; -}; - -typedef struct -{ - GtkWidget *window; - - GtkWidget *treeview; - GtkListStore *model; - PurpleHttpConnection *running_request; -} SmileyManager; - -enum -{ - ICON, - SHORTCUT, - SMILEY, - N_COL -}; - -static SmileyManager *smiley_manager = NULL; -static GSList *gtk_smileys = NULL; - -static void -pidgin_smiley_destroy(PidginSmiley *smiley) -{ - if (smiley->smiley) - g_object_set_data(G_OBJECT(smiley->smiley), "edit-dialog", NULL); - gtk_widget_destroy(smiley->parent); - g_free(smiley->filename); - if (smiley->custom_pixbuf) - g_object_unref(G_OBJECT(smiley->custom_pixbuf)); - g_free(smiley); -} - -static PidginSmiley * -pidgin_smiley_ref(PidginSmiley *smiley) -{ - g_return_val_if_fail(smiley != NULL, NULL); - - smiley->box_count++; - - return smiley; -} - -static void -pidgin_smiley_unref(PidginSmiley *smiley) -{ - g_return_if_fail(smiley != NULL); - g_return_if_fail(smiley->box_count >= 0); - - if (!smiley->box_count--) - pidgin_smiley_destroy(smiley); -} - -GType -pidgin_smiley_get_type(void) -{ - static GType type = 0; - - if (type == 0) { - type = g_boxed_type_register_static("PidginSmiley", - (GBoxedCopyFunc)pidgin_smiley_ref, - (GBoxedFreeFunc)pidgin_smiley_unref); - } - - return type; -} - -/****************************************************************************** - * PidginWebViewSmileys stuff - *****************************************************************************/ -/* Perhaps these should be in gtkwebview.c instead. -- sadrul */ -static void add_gtkwebview_to_list(PidginWebViewSmiley *gtksmiley) -{ - gtk_smileys = g_slist_prepend(gtk_smileys, gtksmiley); - - purple_debug_info("gtksmiley", "adding %s to gtk_smileys", - pidgin_webview_smiley_get_smile(gtksmiley)); -} - -static void -shortcut_changed_cb(PurpleSmiley *smiley, gpointer dontcare, - PidginWebViewSmiley *gtksmiley) -{ -#if 0 - g_free(gtksmiley->smile); - gtksmiley->smile = g_strdup(purple_smiley_get_shortcut(smiley)); -#else - purple_debug_fatal("gtksmiley", "shortcut_changed_cb not implemented"); -#endif -} - -static void -image_changed_cb(PurpleSmiley *smiley, gpointer dontcare, - PidginWebViewSmiley *gtksmiley) -{ -#if 0 - const char *file; - - g_free(gtksmiley->file); - - file = purple_imgstore_get_filename(purple_smiley_get_stored_image(smiley)); - gtksmiley->file = g_build_filename(purple_smileys_get_storing_dir(), file, NULL); - pidgin_webview_smiley_reload(gtksmiley); -#else - purple_debug_fatal("gtksmiley", "image_changed_cb not implemented"); -#endif -} - -static PidginWebViewSmiley *smiley_purple_to_gtkwebview(PurpleSmiley *smiley) -{ - PidginWebViewSmiley *gtksmiley; - gchar *filename; - const gchar *file; - - file = purple_imgstore_get_filename(purple_smiley_get_stored_image(smiley)); - - filename = g_build_filename(purple_smileys_get_storing_dir(), file, NULL); - - gtksmiley = pidgin_webview_smiley_create(filename, - purple_smiley_get_shortcut(smiley), FALSE, - PIDGIN_WEBVIEW_SMILEY_CUSTOM); - g_free(filename); - - /* Make sure the shortcut for the PidginWebViewSmiley is updated with - * the PurpleSmiley */ - g_signal_connect(G_OBJECT(smiley), "notify::shortcut", - G_CALLBACK(shortcut_changed_cb), gtksmiley); - - /* And update the pixbuf too when the image is changed */ - g_signal_connect(G_OBJECT(smiley), "notify::image", - G_CALLBACK(image_changed_cb), gtksmiley); - - return gtksmiley; -} - -void pidgin_smiley_del_from_list(PurpleSmiley *smiley) -{ - GSList *list = NULL; - PidginWebViewSmiley *gtksmiley; - - if (gtk_smileys == NULL) - return; - - list = gtk_smileys; - - for (; list; list = list->next) { - gtksmiley = (PidginWebViewSmiley*)list->data; - - if (strcmp(pidgin_webview_smiley_get_smile(gtksmiley), - purple_smiley_get_shortcut(smiley))) - { - continue; - } - - pidgin_webview_smiley_destroy(gtksmiley); - g_signal_handlers_disconnect_matched(G_OBJECT(smiley), G_SIGNAL_MATCH_DATA, - 0, 0, NULL, NULL, gtksmiley); - break; - } - - if (list) - gtk_smileys = g_slist_delete_link(gtk_smileys, list); -} - -void pidgin_smiley_add_to_list(PurpleSmiley *smiley) -{ - PidginWebViewSmiley *gtksmiley; - - gtksmiley = smiley_purple_to_gtkwebview(smiley); - add_gtkwebview_to_list(gtksmiley); - g_signal_connect(G_OBJECT(smiley), "destroy", G_CALLBACK(pidgin_smiley_del_from_list), NULL); -} - -void pidgin_smileys_init(void) -{ - GList *smileys; - PurpleSmiley *smiley; - - if (gtk_smileys != NULL) - return; - - smileys = purple_smileys_get_all(); - - for (; smileys; smileys = g_list_delete_link(smileys, smileys)) { - smiley = (PurpleSmiley*)smileys->data; - - pidgin_smiley_add_to_list(smiley); - } -} - -void pidgin_smileys_uninit(void) -{ - GSList *list; - PidginWebViewSmiley *gtksmiley; - - list = gtk_smileys; - - if (list == NULL) - return; - - for (; list; list = g_slist_delete_link(list, list)) { - gtksmiley = (PidginWebViewSmiley*)list->data; - pidgin_webview_smiley_destroy(gtksmiley); - } - - gtk_smileys = NULL; -} - -GSList *pidgin_smileys_get_all(void) -{ - return gtk_smileys; -} - -/****************************************************************************** - * Manager stuff - *****************************************************************************/ - -static void refresh_list(void); - -/****************************************************************************** - * The Add dialog - ******************************************************************************/ - -static void do_add(GtkWidget *widget, PidginSmiley *s) -{ - const gchar *entry; - PurpleSmiley *emoticon; - - entry = gtk_entry_get_text(GTK_ENTRY(s->smile)); - - emoticon = purple_smileys_find_by_shortcut(entry); - if (emoticon && emoticon != s->smiley) { - gchar *msg; - msg = g_strdup_printf(_("A custom smiley for '%s' already exists. " - "Please use a different shortcut."), entry); - purple_notify_error(s->parent, _("Custom Smiley"), - _("Duplicate Shortcut"), msg, NULL); - g_free(msg); - return; - } - - if (s->smiley) { - if (s->filename) { - gchar *data = NULL; - size_t len; - GError *err = NULL; - - if (!g_file_get_contents(s->filename, &data, &len, &err)) { - purple_debug_error("gtksmiley", "Error reading %s: %s\n", - s->filename, err->message); - g_error_free(err); - - return; - } - purple_smiley_set_data(s->smiley, (guchar*)data, len); - } - purple_smiley_set_shortcut(s->smiley, entry); - } else { - purple_debug_info("gtksmiley", "adding a new smiley\n"); - - if (s->filename == NULL) { - gchar *buffer = NULL; - gsize size = 0; - gchar *filename; - const gchar *dirname = purple_smileys_get_storing_dir(); - - /* since this may be called before purple_smiley_new_* has ever been - called, we create the storing dir, if it doesn't exist yet, to be - able to save the pixbuf before adding the smiley */ - if (!g_file_test(dirname, G_FILE_TEST_IS_DIR)) { - purple_debug_info("gtksmiley", "Creating smileys directory.\n"); - - if (g_mkdir(dirname, S_IRUSR | S_IWUSR | S_IXUSR) < 0) { - purple_debug_error("gtksmiley", - "Unable to create directory %s: %s\n", - dirname, g_strerror(errno)); - } - } - - 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); - g_free(filename); - g_free(buffer); - } - emoticon = purple_smiley_new_from_file(entry, s->filename); - if (emoticon) - pidgin_smiley_add_to_list(emoticon); - } - - if (smiley_manager != NULL) - refresh_list(); - - gtk_widget_destroy(s->parent); -} - -static void do_add_select_cb(GtkWidget *widget, gint resp, PidginSmiley *s) -{ - switch (resp) { - case GTK_RESPONSE_ACCEPT: - do_add(widget, s); - break; - case GTK_RESPONSE_DELETE_EVENT: - case GTK_RESPONSE_CANCEL: - gtk_widget_destroy(s->parent); - break; - default: - purple_debug_error("gtksmiley", "no valid response\n"); - break; - } -} - -static void do_add_file_cb(const char *filename, gpointer data) -{ - PidginSmiley *s = data; - GdkPixbuf *pixbuf; - - if (!filename) - return; - - g_free(s->filename); - s->filename = g_strdup(filename); - pixbuf = pidgin_pixbuf_new_from_file_at_scale(filename, 64, 64, FALSE); - gtk_image_set_from_pixbuf(GTK_IMAGE(s->smiley_image), pixbuf); - if (pixbuf) - g_object_unref(G_OBJECT(pixbuf)); - gtk_widget_grab_focus(s->smile); - - if (s->entry_len > 0) - gtk_dialog_set_response_sensitive(GTK_DIALOG(s->parent), GTK_RESPONSE_ACCEPT, TRUE); -} - -static void -open_image_selector(GtkWidget *widget, PidginSmiley *psmiley) -{ - GtkWidget *file_chooser; - file_chooser = pidgin_buddy_icon_chooser_new(GTK_WINDOW(gtk_widget_get_toplevel(widget)), - do_add_file_cb, psmiley); - gtk_window_set_title(GTK_WINDOW(file_chooser), _("Custom Smiley")); - gtk_window_set_role(GTK_WINDOW(file_chooser), "file-selector-custom-smiley"); - gtk_widget_show_all(file_chooser); -} - -static void -smiley_name_insert_cb(GtkEditable *editable, - gchar *new_text, - gint new_text_length, - gint *position, - gpointer user_data) -{ - PidginSmiley *s = user_data; - if (new_text_length != -1) - s->entry_len += new_text_length; - else - s->entry_len += strlen(new_text); - - if (s->filename != NULL || s->custom_pixbuf != NULL || s->smiley != NULL) - gtk_dialog_set_response_sensitive(GTK_DIALOG(s->parent), GTK_RESPONSE_ACCEPT, TRUE); -} - -static void -smiley_name_delete_cb(GtkEditable *editable, - gint start_pos, - gint end_pos, - gpointer user_data) -{ - PidginSmiley *s = user_data; - s->entry_len -= end_pos - start_pos; - - if (s->entry_len <= 0) - gtk_dialog_set_response_sensitive(GTK_DIALOG(s->parent), GTK_RESPONSE_ACCEPT, FALSE); -} - -PidginSmiley * -pidgin_smiley_edit(GtkWidget *widget, PurpleSmiley *smiley) -{ - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *label; - GtkWidget *filech; - GtkWidget *window; - GdkPixbuf *pixbuf = NULL; - PurpleStoredImage *stored_img; - - PidginSmiley *s = g_new0(PidginSmiley, 1); - s->smiley = smiley; - - window = gtk_dialog_new_with_buttons(smiley ? _("Edit Smiley") : _("Add Smiley"), - widget ? GTK_WINDOW(widget) : NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - smiley ? GTK_STOCK_SAVE : GTK_STOCK_ADD, GTK_RESPONSE_ACCEPT, - NULL); - s->parent = window; - if (smiley) - g_object_set_data(G_OBJECT(smiley), "edit-dialog", window); - -#if !GTK_CHECK_VERSION(3,0,0) - gtk_container_set_border_width(GTK_CONTAINER(window), PIDGIN_HIG_BORDER); -#endif - - gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_ACCEPT); - g_signal_connect(window, "response", G_CALLBACK(do_add_select_cb), s); - - /* The vbox */ -#if GTK_CHECK_VERSION(3,0,0) - vbox = gtk_grid_new(); - gtk_grid_set_row_spacing(GTK_GRID(vbox), PIDGIN_HIG_BORDER); -#else - vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER); -#endif - gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(window))), - vbox); - gtk_widget_show(vbox); - - /* The hbox */ -#if GTK_CHECK_VERSION(3,0,0) - hbox = gtk_grid_new(); - gtk_grid_set_column_spacing(GTK_GRID(hbox), PIDGIN_HIG_BORDER); - gtk_grid_attach(GTK_GRID(vbox), hbox, 0, 0, 1, 1); -#else - hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_VBOX(vbox)), hbox); -#endif - - label = gtk_label_new_with_mnemonic(_("_Image:")); -#if GTK_CHECK_VERSION(3,0,0) - gtk_grid_attach(GTK_GRID(hbox), label, 0, 0, 1, 1); -#else - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); -#endif - gtk_widget_show(label); - - filech = gtk_button_new(); -#if GTK_CHECK_VERSION(3,0,0) - gtk_grid_attach_next_to(GTK_GRID(hbox), filech, NULL, GTK_POS_RIGHT, 1, 1); -#else - gtk_box_pack_end(GTK_BOX(hbox), filech, FALSE, FALSE, 0); -#endif - pidgin_set_accessible_label(filech, label); - - s->smiley_image = gtk_image_new(); - gtk_container_add(GTK_CONTAINER(filech), s->smiley_image); - if (smiley && (stored_img = purple_smiley_get_stored_image(smiley))) { - pixbuf = pidgin_pixbuf_from_imgstore(stored_img); - purple_imgstore_unref(stored_img); - } else { - GtkIconSize icon_size = gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_SMALL); - pixbuf = gtk_widget_render_icon(window, PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR, - icon_size, "PidginSmiley"); - } - - gtk_image_set_from_pixbuf(GTK_IMAGE(s->smiley_image), pixbuf); - if (pixbuf != NULL) - g_object_unref(G_OBJECT(pixbuf)); - g_signal_connect(G_OBJECT(filech), "clicked", G_CALLBACK(open_image_selector), s); - - gtk_widget_show_all(hbox); - - /* info */ -#if GTK_CHECK_VERSION(3,0,0) - hbox = gtk_grid_new(); - gtk_grid_set_column_spacing(GTK_GRID(hbox), PIDGIN_HIG_BORDER); - - gtk_grid_attach_next_to(GTK_GRID(vbox), hbox, NULL, GTK_POS_BOTTOM, 1, 1); -#else - hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_VBOX(vbox)),hbox); -#endif - - /* Shortcut text */ - label = gtk_label_new_with_mnemonic(_("S_hortcut text:")); -#if GTK_CHECK_VERSION(3,0,0) - gtk_grid_attach(GTK_GRID(hbox), label, 0, 0, 1, 1); -#else - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); -#endif - gtk_widget_show(label); - - s->smile = gtk_entry_new(); - gtk_entry_set_activates_default(GTK_ENTRY(s->smile), TRUE); - pidgin_set_accessible_label(s->smile, label); - if (smiley) { - const char *shortcut = purple_smiley_get_shortcut(smiley); - gtk_entry_set_text(GTK_ENTRY(s->smile), shortcut); - s->entry_len = strlen(shortcut); - } - else - gtk_dialog_set_response_sensitive(GTK_DIALOG(window), GTK_RESPONSE_ACCEPT, FALSE); - - /* gtk_entry_get_text_length is 2.14+, so we'll just keep track ourselves */ - g_signal_connect(G_OBJECT(s->smile), "insert-text", G_CALLBACK(smiley_name_insert_cb), s); - g_signal_connect(G_OBJECT(s->smile), "delete-text", G_CALLBACK(smiley_name_delete_cb), s); - -#if GTK_CHECK_VERSION(3,0,0) - gtk_grid_attach_next_to(GTK_GRID(hbox), s->smile, NULL, GTK_POS_RIGHT, 1, 1); -#else - gtk_box_pack_end(GTK_BOX(hbox), s->smile, FALSE, FALSE, 0); -#endif - gtk_widget_show(s->smile); - - gtk_widget_show(hbox); - - gtk_widget_show(GTK_WIDGET(window)); - g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(pidgin_smiley_destroy), s); - g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(purple_notify_close_with_handle), s); - - return s; -} - -void -pidgin_smiley_editor_set_shortcut(PidginSmiley *editor, const gchar *shortcut) -{ - gtk_entry_set_text(GTK_ENTRY(editor->smile), shortcut ? shortcut : ""); -} - -void -pidgin_smiley_editor_set_image(PidginSmiley *editor, GdkPixbuf *image) -{ - if (editor->custom_pixbuf) - g_object_unref(G_OBJECT(editor->custom_pixbuf)); - editor->custom_pixbuf = image ? g_object_ref(G_OBJECT(image)) : NULL; - if (image) { - gtk_image_set_from_pixbuf(GTK_IMAGE(editor->smiley_image), image); - if (editor->entry_len > 0) - gtk_dialog_set_response_sensitive(GTK_DIALOG(editor->parent), - GTK_RESPONSE_ACCEPT, TRUE); - } - else - gtk_dialog_set_response_sensitive(GTK_DIALOG(editor->parent), - GTK_RESPONSE_ACCEPT, FALSE); -} - -void -pidgin_smiley_editor_set_data(PidginSmiley *editor, gpointer data, gsize datasize) -{ - editor->data = data; - editor->datasize = datasize; -} - -/****************************************************************************** - * Delete smiley - *****************************************************************************/ -static void delete_foreach(GtkTreeModel *model, GtkTreePath *path, - GtkTreeIter *iter, gpointer data) -{ - PurpleSmiley *smiley = NULL; - - gtk_tree_model_get(model, iter, - SMILEY, &smiley, - -1); - - if(smiley != NULL) { - g_object_unref(G_OBJECT(smiley)); - pidgin_smiley_del_from_list(smiley); - purple_smiley_delete(smiley); - } -} - -static void append_to_list(GtkTreeModel *model, GtkTreePath *path, - GtkTreeIter *iter, gpointer data) -{ - GList **list = data; - *list = g_list_prepend(*list, gtk_tree_path_copy(path)); -} - -static void smiley_delete(SmileyManager *dialog) -{ - GtkTreeSelection *selection; - GList *list = NULL; - - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview)); - gtk_tree_selection_selected_foreach(selection, delete_foreach, dialog); - gtk_tree_selection_selected_foreach(selection, append_to_list, &list); - - while (list) { - GtkTreeIter iter; - if (gtk_tree_model_get_iter(GTK_TREE_MODEL(dialog->model), &iter, list->data)) - gtk_list_store_remove(GTK_LIST_STORE(dialog->model), &iter); - gtk_tree_path_free(list->data); - list = g_list_delete_link(list, list); - } -} -/****************************************************************************** - * The Smiley Manager - *****************************************************************************/ -static void add_columns(GtkWidget *treeview, SmileyManager *dialog) -{ - GtkCellRenderer *rend; - GtkTreeViewColumn *column; - - /* Icon */ - column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title(column, _("Smiley")); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); - - rend = gtk_cell_renderer_pixbuf_new(); - gtk_tree_view_column_pack_start(column, rend, FALSE); - gtk_tree_view_column_add_attribute(column, rend, "pixbuf", ICON); - - /* Shortcut Text */ - column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title(column, _("Shortcut Text")); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); - - rend = gtk_cell_renderer_text_new(); - gtk_tree_view_column_pack_start(column, rend, TRUE); - gtk_tree_view_column_add_attribute(column, rend, "text", SHORTCUT); -} - -static void store_smiley_add(PurpleSmiley *smiley) -{ - GtkTreeIter iter; - PurpleStoredImage *img; - GdkPixbuf *sized_smiley = NULL; - - if (smiley_manager == NULL) - return; - - img = purple_smiley_get_stored_image(smiley); - - if (img != NULL) { - GdkPixbuf *smiley_image = pidgin_pixbuf_from_imgstore(img); - purple_imgstore_unref(img); - - if (smiley_image != NULL) { - if (gdk_pixbuf_get_width(smiley_image) > 22 || - gdk_pixbuf_get_height(smiley_image) > 22) { - sized_smiley = gdk_pixbuf_scale_simple(smiley_image, - 22, 22, GDK_INTERP_HYPER); - g_object_unref(G_OBJECT(smiley_image)); - } else { - /* don't scale up smaller smileys, avoid blurryness */ - sized_smiley = smiley_image; - } - } - } - - - gtk_list_store_append(smiley_manager->model, &iter); - - gtk_list_store_set(smiley_manager->model, &iter, - ICON, sized_smiley, - SHORTCUT, purple_smiley_get_shortcut(smiley), - SMILEY, smiley, - -1); - - if (sized_smiley != NULL) - g_object_unref(G_OBJECT(sized_smiley)); -} - -static void populate_smiley_list(SmileyManager *dialog) -{ - GList *list; - PurpleSmiley *emoticon; - - gtk_list_store_clear(dialog->model); - - for(list = purple_smileys_get_all(); list != NULL; - list = g_list_delete_link(list, list)) { - emoticon = (PurpleSmiley*)list->data; - - store_smiley_add(emoticon); - } -} - -static void smile_selected_cb(GtkTreeSelection *sel, SmileyManager *dialog) -{ - gint selected; - - selected = gtk_tree_selection_count_selected_rows(sel); - - gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog->window), - GTK_RESPONSE_NO, selected > 0); - - gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog->window), - PIDGIN_RESPONSE_MODIFY, selected > 0); -} - -static void -smiley_edit_iter(SmileyManager *dialog, GtkTreeIter *iter) -{ - PurpleSmiley *smiley = NULL; - GtkWidget *window = NULL; - gtk_tree_model_get(GTK_TREE_MODEL(dialog->model), iter, SMILEY, &smiley, -1); - if ((window = g_object_get_data(G_OBJECT(smiley), "edit-dialog")) != NULL) - gtk_window_present(GTK_WINDOW(window)); - else - pidgin_smiley_edit(gtk_widget_get_toplevel(GTK_WIDGET(dialog->treeview)), smiley); - g_object_unref(G_OBJECT(smiley)); -} - -static void smiley_edit_cb(GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) -{ - GtkTreeIter iter; - SmileyManager *dialog = data; - - gtk_tree_model_get_iter(GTK_TREE_MODEL(dialog->model), &iter, path); - smiley_edit_iter(dialog, &iter); -} - -static void -edit_selected_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) -{ - smiley_edit_iter(data, iter); -} - -static void -smiley_got_url(PurpleHttpConnection *http_conn, PurpleHttpResponse *response, - gpointer _dialog) -{ - SmileyManager *dialog = _dialog; - PidginSmiley *ps; - GdkPixbuf *image; - const gchar *smileydata; - size_t len; - - g_assert(http_conn == smiley_manager->running_request); - smiley_manager->running_request = NULL; - - if (!purple_http_response_is_successful(response)) - return; - - smileydata = purple_http_response_get_data(response, &len); - image = pidgin_pixbuf_from_data((const guchar *)smileydata, len); - if (!image) - return; - - ps = pidgin_smiley_edit(dialog->window, NULL); - pidgin_smiley_editor_set_image(ps, image); - pidgin_smiley_editor_set_data(ps, g_memdup(smileydata, len), len); -} - -static void -smiley_dnd_recv(GtkWidget *widget, GdkDragContext *dc, guint x, guint y, - GtkSelectionData *sd, guint info, guint t, gpointer user_data) -{ - SmileyManager *dialog = user_data; - gchar *name = g_strchomp((gchar *) gtk_selection_data_get_data(sd)); - - if ((gtk_selection_data_get_length(sd) >= 0) - && (gtk_selection_data_get_format(sd) == 8)) { - /* Well, it looks like the drag event was cool. - * Let's do something with it */ - - if (!g_ascii_strncasecmp(name, "file://", 7)) { - GError *converr = NULL; - gchar *tmp; - PidginSmiley *ps; - /* It looks like we're dealing with a local file. Let's - * just try and read it */ - if(!(tmp = g_filename_from_uri(name, NULL, &converr))) { - purple_debug_error("smiley dnd", "%s\n", - (converr ? converr->message : - "g_filename_from_uri error")); - return; - } - ps = pidgin_smiley_edit(dialog->window, NULL); - do_add_file_cb(tmp, ps); - if (gtk_image_get_pixbuf(GTK_IMAGE(ps->smiley_image)) == NULL) - gtk_dialog_response(GTK_DIALOG(ps->parent), GTK_RESPONSE_CANCEL); - g_free(tmp); - } else if (!g_ascii_strncasecmp(name, "http://", 7) || - !g_ascii_strncasecmp(name, "https://", 8)) - { - /* Oo, a web drag and drop. This is where things - * will start to get interesting */ - purple_http_conn_cancel(smiley_manager-> - running_request); - smiley_manager->running_request = purple_http_get(NULL, - smiley_got_url, dialog, name); - } - - gtk_drag_finish(dc, TRUE, FALSE, t); - } - - gtk_drag_finish(dc, FALSE, FALSE, t); -} - -static GtkWidget *smiley_list_create(SmileyManager *dialog) -{ - GtkWidget *treeview; - GtkTreeSelection *sel; - GtkTargetEntry te[3] = { - {"text/plain", 0, 0}, - {"text/uri-list", 0, 1}, - {"STRING", 0, 2} - }; - - /* Create the list model */ - dialog->model = gtk_list_store_new(N_COL, - GDK_TYPE_PIXBUF, /* ICON */ - G_TYPE_STRING, /* SHORTCUT */ - G_TYPE_OBJECT /* SMILEY */ - ); - - /* the actual treeview */ - treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(dialog->model)); - dialog->treeview = treeview; - gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE); - gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(dialog->model), SHORTCUT, GTK_SORT_ASCENDING); - g_object_unref(G_OBJECT(dialog->model)); - - sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)); - gtk_tree_selection_set_mode(sel, GTK_SELECTION_MULTIPLE); - - g_signal_connect(G_OBJECT(sel), "changed", G_CALLBACK(smile_selected_cb), dialog); - g_signal_connect(G_OBJECT(treeview), "row_activated", G_CALLBACK(smiley_edit_cb), dialog); - - gtk_drag_dest_set(treeview, - GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP, - te, G_N_ELEMENTS(te), GDK_ACTION_COPY | GDK_ACTION_MOVE); - g_signal_connect(G_OBJECT(treeview), "drag_data_received", G_CALLBACK(smiley_dnd_recv), dialog); - - gtk_widget_show(treeview); - - add_columns(treeview, dialog); - populate_smiley_list(dialog); - - return pidgin_make_scrollable(treeview, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC, GTK_SHADOW_IN, -1, -1); -} - -static void refresh_list() -{ - populate_smiley_list(smiley_manager); -} - -static void smiley_manager_select_cb(GtkWidget *widget, gint resp, SmileyManager *dialog) -{ - GtkTreeSelection *selection = NULL; - - switch (resp) { - case GTK_RESPONSE_YES: - pidgin_smiley_edit(dialog->window, NULL); - break; - case GTK_RESPONSE_NO: - smiley_delete(dialog); - break; - case GTK_RESPONSE_DELETE_EVENT: - case GTK_RESPONSE_CLOSE: - gtk_widget_destroy(dialog->window); - purple_http_conn_cancel(smiley_manager->running_request); - g_free(smiley_manager); - smiley_manager = NULL; - break; - case PIDGIN_RESPONSE_MODIFY: - /* Find smiley of selection... */ - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview)); - gtk_tree_selection_selected_foreach(selection, edit_selected_cb, dialog); - break; - default: - purple_debug_info("gtksmiley", "No valid selection\n"); - break; - } -} - -void pidgin_smiley_manager_show(void) -{ - SmileyManager *dialog; - GtkWidget *win; - GtkWidget *sw; - GtkWidget *vbox; - - if (smiley_manager) { - gtk_window_present(GTK_WINDOW(smiley_manager->window)); - return; - } - - dialog = g_new0(SmileyManager, 1); - smiley_manager = dialog; - - dialog->window = win = gtk_dialog_new_with_buttons( - _("Custom Smiley Manager"), - NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, - PIDGIN_STOCK_ADD, GTK_RESPONSE_YES, - PIDGIN_STOCK_MODIFY, PIDGIN_RESPONSE_MODIFY, - GTK_STOCK_DELETE, GTK_RESPONSE_NO, - GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, - NULL); - - gtk_window_set_default_size(GTK_WINDOW(win), 50, 400); - gtk_window_set_role(GTK_WINDOW(win), "custom_smiley_manager"); -#if !GTK_CHECK_VERSION(3,0,0) - gtk_container_set_border_width(GTK_CONTAINER(win),PIDGIN_HIG_BORDER); -#endif - gtk_dialog_set_response_sensitive(GTK_DIALOG(win), GTK_RESPONSE_NO, FALSE); - gtk_dialog_set_response_sensitive(GTK_DIALOG(win), - PIDGIN_RESPONSE_MODIFY, FALSE); - - g_signal_connect(win, "response", G_CALLBACK(smiley_manager_select_cb), - dialog); - - /* The vbox */ - vbox = gtk_dialog_get_content_area(GTK_DIALOG(win)); - - /* get the scrolled window with all stuff */ - sw = smiley_list_create(dialog); - gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); - gtk_widget_show(sw); - - gtk_widget_show(win); -} -
--- a/pidgin/gtksmiley.h Thu Apr 03 09:37:53 2014 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -/* 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_GTKSMILEY_H -#define PIDGIN_GTKSMILEY_H -/** - * SECTION:gtksmiley - * @section_id: pidgin-gtksmiley - * @short_description: <filename>gtksmiley.h</filename> - * @title: Custom Smiley API - */ - -#include "smiley.h" - -#define PIDGIN_TYPE_SMILEY (pidgin_smiley_get_type()) - -typedef struct _PidginSmiley PidginSmiley; - -G_BEGIN_DECLS - -/** - * pidgin_smiley_get_type: - * - * Returns: The #GType for the #PidginSmiley boxed structure. - */ -GType pidgin_smiley_get_type(void); - -/** - * pidgin_smiley_add_to_list: - * @smiley: The smiley to be added. - * - * Add a PurpleSmiley to the PidginWebViewSmiley's list to be able to use it - * in pidgin - */ -void pidgin_smiley_add_to_list(PurpleSmiley *smiley); - -/** - * pidgin_smiley_del_from_list: - * @smiley: The smiley to be deleted. - * - * Delete a PurpleSmiley from the PidginWebViewSmiley's list - */ -void pidgin_smiley_del_from_list(PurpleSmiley *smiley); - -/** - * pidgin_smileys_init: - * - * Load the PidginWebViewSmiley list - */ -void pidgin_smileys_init(void); - -/** - * pidgin_smileys_uninit: - * - * Uninit the PidginWebViewSmiley list - */ -void pidgin_smileys_uninit(void); - -/** - * pidgin_smileys_get_all: - * - * Returns a GSList with the PidginWebViewSmiley of each custom smiley - * - * Returns: (transfer none): A PidginWebViewSmiley list - */ -GSList *pidgin_smileys_get_all(void); - -/****************************************************************************** - * Smiley Manager - *****************************************************************************/ -/** - * pidgin_smiley_manager_show: - * - * Displays the Smiley Manager Window - */ -void pidgin_smiley_manager_show(void); - -/** - * pidgin_smiley_edit: - * @widget: The parent widget to be linked or %NULL - * @smiley: The PurpleSmiley to be edited, or %NULL for a new smiley - * - * Shows an editor for a smiley. - * - * See pidgin_smiley_editor_set_shortcut(), pidgin_smiley_editor_set_image(). - * - * Returns: The smiley add dialog - */ -PidginSmiley *pidgin_smiley_edit(GtkWidget *widget, PurpleSmiley *smiley); - -/** - * pidgin_smiley_editor_set_shortcut: - * @editor: A smiley editor dialog (created by pidgin_smiley_edit) - * @shortcut: The shortcut to set - * - * Set the shortcut in a smiley add dialog - */ -void pidgin_smiley_editor_set_shortcut(PidginSmiley *editor, const gchar *shortcut); - -/** - * pidgin_smiley_editor_set_image: - * @editor: A smiley editor dialog - * @image: A GdkPixbuf image - * - * Set the image in a smiley add dialog - */ -void pidgin_smiley_editor_set_image(PidginSmiley *editor, GdkPixbuf *image); - -/** - * pidgin_smiley_editor_set_data: - * @editor: A smiley editor dialog - * @data: A pointer to smiley's data - * @datasize: The size of smiley's data - * - * Sets the image data in a smiley add dialog - */ -void pidgin_smiley_editor_set_data(PidginSmiley *editor, gpointer data, gsize datasize); - -G_END_DECLS - -#endif /* PIDGIN_GTKSMILEY_H */
--- a/pidgin/gtkstatusbox.c Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtkstatusbox.c Mon Apr 07 20:02:22 2014 +0530 @@ -316,9 +316,9 @@ box->icon_box_menu = gtk_menu_new(); - menu_item = pidgin_new_item_from_stock(box->icon_box_menu, _("Select Buddy Icon"), GTK_STOCK_ADD, - G_CALLBACK(choose_buddy_icon_cb), - box, 0, 0, NULL); + pidgin_new_item_from_stock(box->icon_box_menu, + _("Select Buddy Icon"), GTK_STOCK_ADD, + G_CALLBACK(choose_buddy_icon_cb), box, 0, 0, NULL); menu_item = pidgin_new_item_from_stock(box->icon_box_menu, _("Remove"), GTK_STOCK_REMOVE, G_CALLBACK(remove_buddy_icon_cb),
--- a/pidgin/gtkthemes.c Thu Apr 03 09:37:53 2014 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,458 +0,0 @@ -/* - * Themes for 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 "pidgin.h" - -#include "conversation.h" -#include "debug.h" -#include "protocol.h" -#include "util.h" - -#include "gtkconv.h" -#include "gtkdialogs.h" -#include "gtksmiley.h" -#include "gtkthemes.h" -#include "gtkwebview.h" - -GSList *smiley_themes = NULL; -struct PidginSmileyTheme *current_smiley_theme; - -static void pidgin_themes_destroy_smiley_theme_smileys(struct PidginSmileyTheme *theme); - -gboolean pidgin_themes_smileys_disabled() -{ - if (!current_smiley_theme) - return 1; - - return strcmp(current_smiley_theme->name, "none") == 0; -} - -static void -pidgin_themes_destroy_smiley_theme(struct PidginSmileyTheme *theme) -{ - pidgin_themes_destroy_smiley_theme_smileys(theme); - - g_free(theme->name); - g_free(theme->desc); - g_free(theme->author); - g_free(theme->icon); - g_free(theme->path); - g_free(theme); -} - -static void pidgin_themes_remove_theme_dir(const char *theme_dir_name) -{ - GString *str = NULL; - const char *file_name = NULL; - GDir *theme_dir = NULL; - - if ((theme_dir = g_dir_open(theme_dir_name, 0, NULL)) != NULL) { - if ((str = g_string_new(theme_dir_name)) != NULL) { - while ((file_name = g_dir_read_name(theme_dir)) != NULL) { - g_string_printf(str, "%s%s%s", theme_dir_name, G_DIR_SEPARATOR_S, file_name); - g_unlink(str->str); - } - g_string_free(str, TRUE); - } - g_dir_close(theme_dir); - g_rmdir(theme_dir_name); - } -} - -void pidgin_themes_remove_smiley_theme(const char *file) -{ - char *theme_dir = NULL, *last_slash = NULL; - g_return_if_fail(NULL != file); - - if (!g_file_test(file, G_FILE_TEST_EXISTS)) return; - if ((theme_dir = g_strdup(file)) == NULL) return ; - - if ((last_slash = g_strrstr(theme_dir, G_DIR_SEPARATOR_S)) != NULL) { - GSList *iter = NULL; - struct PidginSmileyTheme *theme = NULL, *new_theme = NULL; - - *last_slash = 0; - - /* Delete files on disk */ - pidgin_themes_remove_theme_dir(theme_dir); - - /* Find theme in themes list and remove it */ - for (iter = smiley_themes ; iter ; iter = iter->next) { - theme = ((struct PidginSmileyTheme *)(iter->data)); - if (!strcmp(theme->path, file)) - break ; - } - if (iter) { - if (theme == current_smiley_theme) { - new_theme = ((struct PidginSmileyTheme *)(NULL == iter->next ? (smiley_themes == iter ? NULL : smiley_themes->data) : iter->next->data)); - if (new_theme) - purple_prefs_set_string(PIDGIN_PREFS_ROOT "/smileys/theme", new_theme->name); - else - current_smiley_theme = NULL; - } - smiley_themes = g_slist_delete_link(smiley_themes, iter); - - /* Destroy theme structure */ - pidgin_themes_destroy_smiley_theme(theme); - } - } - - g_free(theme_dir); -} - -static void _pidgin_themes_smiley_themeize(GtkWidget *webview, gboolean custom) -{ - struct PidginSmileyList *list; - if (!current_smiley_theme) - return; - - pidgin_webview_remove_smileys(PIDGIN_WEBVIEW(webview)); - list = current_smiley_theme->list; - while (list) { - char *sml = !strcmp(list->sml, "default") ? NULL : list->sml; - GSList *icons = list->smileys; - while (icons) { - pidgin_webview_associate_smiley(PIDGIN_WEBVIEW(webview), sml, icons->data); - icons = icons->next; - } - - if (custom == TRUE) { - icons = pidgin_smileys_get_all(); - - while (icons) { - pidgin_webview_associate_smiley(PIDGIN_WEBVIEW(webview), sml, icons->data); - icons = icons->next; - } - } - - list = list->next; - } -} - -void -pidgin_themes_smiley_themeize(GtkWidget *webview) -{ - _pidgin_themes_smiley_themeize(webview, FALSE); -} - -void -pidgin_themes_smiley_themeize_custom(GtkWidget *webview) -{ - _pidgin_themes_smiley_themeize(webview, TRUE); -} - -static void -pidgin_themes_destroy_smiley_theme_smileys(struct PidginSmileyTheme *theme) -{ - struct PidginSmileyList *wer; - - for (wer = theme->list; wer != NULL; wer = theme->list) { - while (wer->smileys) { - PidginWebViewSmiley *uio = wer->smileys->data; - pidgin_webview_smiley_destroy(uio); - wer->smileys = g_slist_delete_link(wer->smileys, wer->smileys); - } - theme->list = wer->next; - g_free(wer->sml); - g_free(wer); - } - theme->list = NULL; -} - -static void -pidgin_smiley_themes_remove_non_existing(void) -{ - static struct PidginSmileyTheme *theme = NULL; - GSList *iter = NULL; - - if (!smiley_themes) return ; - - for (iter = smiley_themes ; iter ; iter = iter->next) { - theme = ((struct PidginSmileyTheme *)(iter->data)); - if (!g_file_test(theme->path, G_FILE_TEST_EXISTS)) { - if (theme == current_smiley_theme) - current_smiley_theme = ((struct PidginSmileyTheme *)(NULL == iter->next ? NULL : iter->next->data)); - pidgin_themes_destroy_smiley_theme(theme); - iter->data = NULL; - } - } - /* Remove all elements whose data is NULL */ - smiley_themes = g_slist_remove_all(smiley_themes, NULL); - - if (!current_smiley_theme && smiley_themes) { - struct PidginSmileyTheme *smile = g_slist_last(smiley_themes)->data; - pidgin_themes_load_smiley_theme(smile->path, TRUE); - } -} - -void pidgin_themes_load_smiley_theme(const char *file, gboolean load) -{ - FILE *f = g_fopen(file, "rb"); - char buf[256]; - char *i; - gsize line_nbr = 0; - struct PidginSmileyTheme *theme=NULL; - struct PidginSmileyList *list = NULL; - GSList *lst = smiley_themes; - char *dirname; - - if (!f) - return; - - while (lst) { - struct PidginSmileyTheme *thm = lst->data; - if (!strcmp(thm->path, file)) { - theme = thm; - break; - } - lst = lst->next; - } - - if (theme != NULL && theme == current_smiley_theme) { - /* Don't reload the theme if it is already loaded */ - fclose(f); - return; - } - - if (theme == NULL) { - theme = g_new0(struct PidginSmileyTheme, 1); - theme->path = g_strdup(file); - smiley_themes = g_slist_prepend(smiley_themes, theme); - } - - dirname = g_path_get_dirname(file); - - while (!feof(f)) { - if (!fgets(buf, sizeof(buf), f)) { - break; - } - line_nbr++; - - if (buf[0] == '#' || buf[0] == '\0') - continue; - else { - int len = strlen(buf); - while (len && (buf[len - 1] == '\r' || buf[len - 1] == '\n')) - buf[--len] = '\0'; - if (len == 0) - continue; - } - - if (! g_utf8_validate(buf, -1, NULL)) { - purple_debug_error("gtkthemes", "%s:%" G_GSIZE_FORMAT " is invalid UTF-8\n", file, line_nbr); - continue; - } - - i = buf; - while (isspace(*i)) - i++; - - if (*i == '[' && strchr(i, ']') && load) { - struct PidginSmileyList *child = g_new0(struct PidginSmileyList, 1); - child->sml = g_strndup(i+1, strchr(i, ']') - i - 1); - child->files = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); - - if (theme->list) - list->next = child; - else - theme->list = child; - /* Reverse the Smiley list since it was built in reverse order for efficiency reasons */ - if (list != NULL) - list->smileys = g_slist_reverse(list->smileys); - list = child; - } else if (!g_ascii_strncasecmp(i, "Name=", strlen("Name="))) { - g_free(theme->name); - theme->name = g_strdup(i + strlen("Name=")); - } else if (!g_ascii_strncasecmp(i, "Description=", strlen("Description="))) { - g_free(theme->desc); - theme->desc = g_strdup(i + strlen("Description=")); - } else if (!g_ascii_strncasecmp(i, "Icon=", strlen("Icon="))) { - g_free(theme->icon); - theme->icon = g_build_filename(dirname, i + strlen("Icon="), NULL); - } else if (!g_ascii_strncasecmp(i, "Author=", strlen("Author="))) { - g_free(theme->author); - theme->author = g_strdup(i + strlen("Author=")); - } else if (load && list) { - gboolean hidden = FALSE; - char *sfile = NULL; - - if (*i == '!' && *(i + 1) == ' ') { - hidden = TRUE; - i = i + 2; - } - while (*i) { - char l[64]; - gsize li = 0; - char *next; - while (*i && !isspace(*i) && li < sizeof(l) - 1) { - if (*i == '\\' && *(i+1) != '\0') - i++; - next = g_utf8_next_char(i); - if ((gsize)(next - i) > (sizeof(l) - li -1)) { - break; - } - while (i != next) - l[li++] = *(i++); - } - l[li] = 0; - if (!sfile) { - sfile = g_build_filename(dirname, l, NULL); - } else { - PidginWebViewSmiley *smiley = pidgin_webview_smiley_create(sfile, l, hidden, 0); - list->smileys = g_slist_prepend(list->smileys, smiley); - g_hash_table_insert (list->files, g_strdup(l), g_strdup(sfile)); - } - while (isspace(*i)) - i++; - - } - - - g_free(sfile); - } - } - - /* Reverse the Smiley list since it was built in reverse order for efficiency reasons */ - if (list != NULL) - list->smileys = g_slist_reverse(list->smileys); - - g_free(dirname); - fclose(f); - - if (!theme->name || !theme->desc || !theme->author) { - purple_debug_error("gtkthemes", "Invalid file format, not loading smiley theme from '%s'\n", file); - - smiley_themes = g_slist_remove(smiley_themes, theme); - pidgin_themes_destroy_smiley_theme(theme); - return; - } - - if (load) { - GList *cnv; - - if (current_smiley_theme) - pidgin_themes_destroy_smiley_theme_smileys(current_smiley_theme); - current_smiley_theme = theme; - - for (cnv = purple_conversations_get_all(); cnv != NULL; cnv = cnv->next) { - PurpleConversation *conv = cnv->data; - - if (PIDGIN_IS_PIDGIN_CONVERSATION(conv)) { - /* We want to see our custom smileys on our entry if we write the shortcut */ - pidgin_themes_smiley_themeize_custom(PIDGIN_CONVERSATION(conv)->entry); - } - } - } -} - -void pidgin_themes_smiley_theme_probe() -{ - GDir *dir; - const gchar *file; - gchar *path, *test_path; - int l; - char* probedirs[3]; - - pidgin_smiley_themes_remove_non_existing(); - - probedirs[0] = g_build_filename(DATADIR, "pixmaps", "pidgin", "emotes", NULL); - probedirs[1] = g_build_filename(purple_user_dir(), "smileys", NULL); - probedirs[2] = 0; - for (l=0; probedirs[l]; l++) { - dir = g_dir_open(probedirs[l], 0, NULL); - if (dir) { - while ((file = g_dir_read_name(dir))) { - test_path = g_build_filename(probedirs[l], file, NULL); - if (g_file_test(test_path, G_FILE_TEST_IS_DIR)) { - path = g_build_filename(probedirs[l], file, "theme", NULL); - - /* Here we check to see that the theme has proper syntax. - * We set the second argument to FALSE so that it doesn't load - * the theme yet. - */ - pidgin_themes_load_smiley_theme(path, FALSE); - g_free(path); - } - g_free(test_path); - } - g_dir_close(dir); - } else if (l == 1) { - g_mkdir(probedirs[l], S_IRUSR | S_IWUSR | S_IXUSR); - } - g_free(probedirs[l]); - } - - if (!current_smiley_theme && smiley_themes) { - struct PidginSmileyTheme *smile = smiley_themes->data; - pidgin_themes_load_smiley_theme(smile->path, TRUE); - } -} - -GSList *pidgin_themes_get_proto_smileys(const char *id) { - PurpleProtocol *protocol; - struct PidginSmileyList *list, *def; - - if ((current_smiley_theme == NULL) || (current_smiley_theme->list == NULL)) - return NULL; - - def = list = current_smiley_theme->list; - - if (id == NULL) - return def->smileys; - - protocol = purple_protocols_find(id); - - while (list) { - if (!strcmp(list->sml, "default")) - def = list; - else if (protocol && !strcmp(purple_protocol_get_name(protocol), list->sml)) - break; - - list = list->next; - } - - return list ? list->smileys : def->smileys; -} - -void pidgin_themes_init() -{ - GSList *l; - const char *current_theme = - purple_prefs_get_string(PIDGIN_PREFS_ROOT "/smileys/theme"); - - pidgin_themes_smiley_theme_probe(); - - for (l = smiley_themes; l; l = l->next) { - struct PidginSmileyTheme *smile = l->data; - if (smile->name && strcmp(current_theme, smile->name) == 0) { - pidgin_themes_load_smiley_theme(smile->path, TRUE); - break; - } - } - - /* If we still don't have a smiley theme, choose the first one */ - if (!current_smiley_theme && smiley_themes) { - struct PidginSmileyTheme *smile = smiley_themes->data; - pidgin_themes_load_smiley_theme(smile->path, TRUE); - } -}
--- a/pidgin/gtkthemes.h Thu Apr 03 09:37:53 2014 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* 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 _PIDGINTHEMES_H_ -#define _PIDGINTHEMES_H_ -/** - * SECTION:gtkthemes - * @section_id: pidgin-gtkthemes - * @short_description: <filename>gtkthemes.h</filename> - * @title: Smiley Theme API - */ - -struct PidginSmileyList { - char *sml; - GSList *smileys; - GHashTable *files; /* map from smiley shortcut to filename */ - struct PidginSmileyList *next; -}; - -struct PidginSmileyTheme { - char *path; - char *name; - char *desc; - char *icon; - char *author; - - struct PidginSmileyList *list; -}; - -extern struct PidginSmileyTheme *current_smiley_theme; -extern GSList *smiley_themes; - -G_BEGIN_DECLS - -void pidgin_themes_init(void); - -gboolean pidgin_themes_smileys_disabled(void); - -void pidgin_themes_smiley_themeize(GtkWidget *); - -void pidgin_themes_smiley_themeize_custom(GtkWidget *); - -void pidgin_themes_smiley_theme_probe(void); - -void pidgin_themes_load_smiley_theme(const char *file, gboolean load); - -void pidgin_themes_remove_smiley_theme(const char *file); - -GSList *pidgin_themes_get_proto_smileys(const char *id); - -G_END_DECLS - -#endif /* _PIDGINTHEMES_H_ */
--- a/pidgin/gtkutils.c Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtkutils.c Mon Apr 07 20:02:22 2014 +0530 @@ -58,7 +58,6 @@ #include "gtkdialogs.h" #include "pidginstock.h" #include "gtkrequest.h" -#include "gtkthemes.h" #include "gtkutils.h" #include "gtkwebview.h" #include "gtkwebviewtoolbar.h" @@ -167,8 +166,6 @@ g_return_if_fail(webview != NULL); g_return_if_fail(PIDGIN_IS_WEBVIEW(webview)); - pidgin_themes_smiley_themeize(webview); - #ifdef _WIN32 if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/use_theme_font")) { WebKitWebSettings *settings = webkit_web_settings_new(); @@ -312,7 +309,6 @@ if (editable) { pidgin_webviewtoolbar_attach(PIDGIN_WEBVIEWTOOLBAR(toolbar), webview); - pidgin_webviewtoolbar_associate_smileys(PIDGIN_WEBVIEWTOOLBAR(toolbar), "default"); pidgin_webview_set_toolbar(PIDGIN_WEBVIEW(webview), toolbar); } pidgin_setup_webview(webview); @@ -412,7 +408,7 @@ gtk_widget_add_accelerator(menuitem, "activate", accel, str[0], GDK_MOD1_MASK, GTK_ACCEL_LOCKED); */ - pidgin_set_accessible_label (menuitem, label); + pidgin_set_accessible_label(menuitem, GTK_LABEL(label)); return menuitem; } @@ -459,7 +455,7 @@ pidgin_pixbuf_button_from_stock(const char *text, const char *icon, PidginButtonOrientation style) { - GtkWidget *button, *image, *label, *bbox, *ibox, *lbox = NULL; + GtkWidget *button, *image, *bbox, *ibox, *lbox = NULL; button = gtk_button_new(); @@ -484,12 +480,15 @@ } if (text) { + GtkLabel *label; + gtk_box_pack_start(GTK_BOX(bbox), lbox, TRUE, TRUE, 0); - label = gtk_label_new(NULL); - gtk_label_set_text_with_mnemonic(GTK_LABEL(label), text); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), button); - gtk_box_pack_start(GTK_BOX(lbox), label, FALSE, TRUE, 0); - pidgin_set_accessible_label (button, label); + label = GTK_LABEL(gtk_label_new(NULL)); + gtk_label_set_text_with_mnemonic(label, text); + gtk_label_set_mnemonic_widget(label, button); + gtk_box_pack_start(GTK_BOX(lbox), GTK_WIDGET(label), + FALSE, TRUE, 0); + pidgin_set_accessible_label(button, label); } gtk_widget_show_all(bbox); @@ -544,31 +543,32 @@ GtkWidget * pidgin_make_frame(GtkWidget *parent, const char *title) { - GtkWidget *vbox, *vbox2, *label, *hbox; + GtkWidget *vbox, *vbox2, *hbox; + GtkLabel *label; char *labeltitle; vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE); gtk_box_pack_start(GTK_BOX(parent), vbox, FALSE, FALSE, 0); gtk_widget_show(vbox); - label = gtk_label_new(NULL); + label = GTK_LABEL(gtk_label_new(NULL)); labeltitle = g_strdup_printf("<span weight=\"bold\">%s</span>", title); - gtk_label_set_markup(GTK_LABEL(label), labeltitle); + gtk_label_set_markup(label, labeltitle); g_free(labeltitle); gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); - gtk_widget_show(label); - pidgin_set_accessible_label (vbox, label); + gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(label), FALSE, FALSE, 0); + gtk_widget_show(GTK_WIDGET(label)); + pidgin_set_accessible_label(vbox, label); hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_widget_show(hbox); - label = gtk_label_new(" "); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); - gtk_widget_show(label); + label = GTK_LABEL(gtk_label_new(" ")); + gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0); + gtk_widget_show(GTK_WIDGET(label)); vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE); gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, 0); @@ -1166,7 +1166,7 @@ } void -pidgin_set_accessible_label (GtkWidget *w, GtkWidget *l) +pidgin_set_accessible_label(GtkWidget *w, GtkLabel *l) { AtkObject *acc; const gchar *label_text; @@ -1177,7 +1177,7 @@ /* If this object has no name, set it's name with the label text */ existing_name = atk_object_get_name (acc); if (!existing_name) { - label_text = gtk_label_get_text (GTK_LABEL(l)); + label_text = gtk_label_get_text(l); if (label_text) atk_object_set_name (acc, label_text); } @@ -1186,7 +1186,7 @@ } void -pidgin_set_accessible_relations (GtkWidget *w, GtkWidget *l) +pidgin_set_accessible_relations (GtkWidget *w, GtkLabel *l) { AtkObject *acc, *label; AtkObject *rel_obj[1]; @@ -1194,10 +1194,10 @@ AtkRelation *relation; acc = gtk_widget_get_accessible (w); - label = gtk_widget_get_accessible (l); + label = gtk_widget_get_accessible(GTK_WIDGET(l)); /* Make sure mnemonics work */ - gtk_label_set_mnemonic_widget(GTK_LABEL(l), w); + gtk_label_set_mnemonic_widget(l, w); /* Create the labeled-by relation */ set = atk_object_ref_relation_set (acc); @@ -2889,7 +2889,7 @@ gtk_box_pack_start(GTK_BOX(hbox), widget, expand, TRUE, 0); if (label) { gtk_label_set_mnemonic_widget(GTK_LABEL(label), widget); - pidgin_set_accessible_label (widget, label); + pidgin_set_accessible_label(widget, GTK_LABEL(label)); } if (p_label) @@ -3157,6 +3157,53 @@ return pixbuf; } +GdkPixbuf * +pidgin_pixbuf_scale_down(GdkPixbuf *src, guint max_width, guint max_height, + GdkInterpType interp_type, gboolean preserve_ratio) +{ + guint cur_w, cur_h; + GdkPixbuf *dst; + + g_return_val_if_fail(src != NULL, NULL); + + if (max_width == 0 || max_height == 0) { + g_object_unref(src); + g_return_val_if_reached(NULL); + } + + cur_w = gdk_pixbuf_get_width(src); + cur_h = gdk_pixbuf_get_height(src); + + if (cur_w <= max_width && cur_h <= max_height) + return src; + + /* cur_ratio = cur_w / cur_h + * max_ratio = max_w / max_h + */ + + if (!preserve_ratio) { + cur_w = MIN(cur_w, max_width); + cur_h = MIN(cur_h, max_height); + } else if ((guint64)cur_w * max_height > (guint64)max_width * cur_h) { + /* cur_w / cur_h > max_width / max_height */ + cur_h = (guint64)max_width * cur_h / cur_w; + cur_w = max_width; + } else { + cur_w = (guint64)max_height * cur_w / cur_h; + cur_h = max_height; + } + + if (cur_w <= 0) + cur_w = 1; + if (cur_h <= 0) + cur_h = 1; + + dst = gdk_pixbuf_scale_simple(src, cur_w, cur_h, interp_type); + g_object_unref(src); + + return dst; +} + static void url_copy(GtkWidget *w, gchar *url) {
--- a/pidgin/gtkutils.h Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtkutils.h Mon Apr 07 20:02:22 2014 +0530 @@ -84,8 +84,7 @@ * pidgin_setup_webview: * @webview: The gtkwebview widget to setup. * - * Sets up a gtkwebview widget, loads it with smileys, and sets the - * default signal handlers. + * Sets up a gtkwebview widget and sets the default signal handlers. */ void pidgin_setup_webview(GtkWidget *webview); @@ -483,7 +482,7 @@ * Sets an ATK name for a given widget. Also sets the labelled-by * and label-for ATK relationships. */ -void pidgin_set_accessible_label(GtkWidget *w, GtkWidget *l); +void pidgin_set_accessible_label(GtkWidget *w, GtkLabel *l); /** * pidgin_set_accessible_relations: @@ -492,7 +491,7 @@ * * Sets the labelled-by and label-for ATK relationships. */ -void pidgin_set_accessible_relations(GtkWidget *w, GtkWidget *l); +void pidgin_set_accessible_relations(GtkWidget *w, GtkLabel *l); /** * pidgin_menu_position_func_helper: @@ -946,6 +945,26 @@ GdkPixbuf *pidgin_pixbuf_new_from_file_at_scale(const char *filename, int width, int height, gboolean preserve_aspect_ratio); /** + * pidgin_pixbuf_scale_down: + * @src: The source image. + * @max_width: Maximum width in px. + * @max_height: Maximum height in px. + * @interp_type: Interpolation method. + * @preserve_ratio: %TRUE to preserve image's aspect ratio. + * + * Scales the image to the desired dimensions. If image is smaller, it will be + * returned without modifications. + * + * If new image is created, @src reference cound will be decreased and new image + * with a ref count of 1 will be returned. + * + * Returns: The image with proper sizing. %NULL in case of error. + */ +GdkPixbuf * +pidgin_pixbuf_scale_down(GdkPixbuf *src, guint max_width, guint max_height, + GdkInterpType interp_type, gboolean preserve_ratio); + +/** * pidgin_make_scrollable: * @child: The child widget * @hscrollbar_policy: Horizontal scrolling policy
--- a/pidgin/gtkwebview.c Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtkwebview.c Mon Apr 07 20:02:22 2014 +0530 @@ -24,10 +24,12 @@ #include "debug.h" #include "glibcompat.h" #include "pidgin.h" +#include "pidginstock.h" #include <gdk/gdkkeysyms.h> #include "gtkutils.h" +#include "gtksmiley-manager.h" #include "gtkwebview.h" #include "gtkwebviewtoolbar.h" @@ -85,27 +87,6 @@ gboolean (*context_menu)(PidginWebView *webview, WebKitDOMHTMLAnchorElement *link, GtkWidget *menu); } PidginWebViewProtocol; -struct _PidginWebViewSmiley { - gint box_count; - gchar *smile; - gchar *file; - GdkPixbufAnimation *icon; - gboolean hidden; - GdkPixbufLoader *loader; - GSList *anchors; - PidginWebViewSmileyFlags flags; - PidginWebView *webview; - gpointer data; - gsize datasize; -}; - -typedef struct _GtkSmileyTree GtkSmileyTree; -struct _GtkSmileyTree { - GString *values; - GtkSmileyTree **children; - PidginWebViewSmiley *image; -}; - typedef struct _PidginWebViewPriv { /* Processing queues */ gboolean is_loading; @@ -126,14 +107,12 @@ gboolean block_changed:1; } edit; - /* Smileys */ - char *protocol_name; - GHashTable *smiley_data; - GtkSmileyTree *default_smilies; - /* WebKit inspector */ WebKitWebView *inspector_view; GtkWindow *inspector_win; + + /* Resources cache */ + GHashTable *loaded_images; } PidginWebViewPriv; /****************************************************************************** @@ -142,576 +121,6 @@ static WebKitWebViewClass *parent_class = NULL; -/****************************************************************************** - * Smileys - *****************************************************************************/ - -const char * -pidgin_webview_get_protocol_name(PidginWebView *webview) -{ - PidginWebViewPriv *priv; - - g_return_val_if_fail(webview != NULL, NULL); - - priv = PIDGIN_WEBVIEW_GET_PRIVATE(webview); - return priv->protocol_name; -} - -void -pidgin_webview_set_protocol_name(PidginWebView *webview, const char *protocol_name) -{ - PidginWebViewPriv *priv; - - g_return_if_fail(webview != NULL); - - priv = PIDGIN_WEBVIEW_GET_PRIVATE(webview); - priv->protocol_name = g_strdup(protocol_name); -} - -static GtkSmileyTree * -gtk_smiley_tree_new(void) -{ - return g_new0(GtkSmileyTree, 1); -} - -static void -gtk_smiley_tree_insert(GtkSmileyTree *tree, PidginWebViewSmiley *smiley) -{ - GtkSmileyTree *t = tree; - const char *x = smiley->smile; - - if (!(*x)) - return; - - do { - char *pos; - gsize index; - - if (!t->values) - t->values = g_string_new(""); - - pos = strchr(t->values->str, *x); - if (!pos) { - t->values = g_string_append_c(t->values, *x); - index = t->values->len - 1; - t->children = g_realloc(t->children, t->values->len * sizeof(GtkSmileyTree *)); - t->children[index] = g_new0(GtkSmileyTree, 1); - } else - index = pos - t->values->str; - - t = t->children[index]; - - x++; - } while (*x); - - t->image = smiley; -} - -static void -gtk_smiley_tree_destroy(GtkSmileyTree *tree) -{ - GSList *list = g_slist_prepend(NULL, tree); - - while (list) { - GtkSmileyTree *t = list->data; - gsize i; - list = g_slist_delete_link(list, list); - if (t && t->values) { - for (i = 0; i < t->values->len; i++) - list = g_slist_prepend(list, t->children[i]); - g_string_free(t->values, TRUE); - g_free(t->children); - } - - g_free(t); - } -} - -static void -gtk_smiley_tree_remove(GtkSmileyTree *tree, PidginWebViewSmiley *smiley) -{ - GtkSmileyTree *t = tree; - const gchar *x = smiley->smile; - int len = 0; - - while (*x) { - char *pos; - - if (!t->values) - return; - - pos = strchr(t->values->str, *x); - if (pos) - t = t->children[pos - t->values->str]; - else - return; - - x++; len++; - } - - t->image = NULL; -} - -#if 0 -static int -gtk_smiley_tree_lookup(GtkSmileyTree *tree, const char *text) -{ - GtkSmileyTree *t = tree; - const char *x = text; - int len = 0; - const char *amp; - int alen; - - while (*x) { - char *pos; - - if (!t->values) - break; - - if (*x == '&' && (amp = purple_markup_unescape_entity(x, &alen))) { - gboolean matched = TRUE; - /* Make sure all chars of the unescaped value match */ - while (*(amp + 1)) { - pos = strchr(t->values->str, *amp); - if (pos) - t = t->children[pos - t->values->str]; - else { - matched = FALSE; - break; - } - amp++; - } - if (!matched) - break; - - pos = strchr(t->values->str, *amp); - } - else if (*x == '<') /* Because we're all WYSIWYG now, a '<' char should - * only appear as the start of a tag. Perhaps a - * safer (but costlier) check would be to call - * pidgin_webview_is_tag on it */ - break; - else { - alen = 1; - pos = strchr(t->values->str, *x); - } - - if (pos) - t = t->children[pos - t->values->str]; - else - break; - - x += alen; - len += alen; - } - - if (t->image) - return len; - - return 0; -} -#endif - -static void -pidgin_webview_disassociate_smiley_foreach(gpointer key, gpointer value, - gpointer user_data) -{ - GtkSmileyTree *tree = (GtkSmileyTree *)value; - PidginWebViewSmiley *smiley = (PidginWebViewSmiley *)user_data; - gtk_smiley_tree_remove(tree, smiley); -} - -static void -pidgin_webview_disconnect_smiley(PidginWebView *webview, PidginWebViewSmiley *smiley) -{ - smiley->webview = NULL; - g_signal_handlers_disconnect_matched(webview, G_SIGNAL_MATCH_DATA, 0, 0, - NULL, NULL, smiley); -} - -static void -pidgin_webview_disassociate_smiley(PidginWebViewSmiley *smiley) -{ - if (smiley->webview) { - PidginWebViewPriv *priv = PIDGIN_WEBVIEW_GET_PRIVATE(smiley->webview); - gtk_smiley_tree_remove(priv->default_smilies, smiley); - g_hash_table_foreach(priv->smiley_data, - pidgin_webview_disassociate_smiley_foreach, smiley); - g_signal_handlers_disconnect_matched(smiley->webview, - G_SIGNAL_MATCH_DATA, 0, 0, NULL, - NULL, smiley); - smiley->webview = NULL; - } -} - -void -pidgin_webview_associate_smiley(PidginWebView *webview, const char *sml, - PidginWebViewSmiley *smiley) -{ - GtkSmileyTree *tree; - PidginWebViewPriv *priv; - - g_return_if_fail(webview != NULL); - g_return_if_fail(PIDGIN_IS_WEBVIEW(webview)); - - priv = PIDGIN_WEBVIEW_GET_PRIVATE(webview); - - if (sml == NULL) - tree = priv->default_smilies; - else if (!(tree = g_hash_table_lookup(priv->smiley_data, sml))) { - tree = gtk_smiley_tree_new(); - g_hash_table_insert(priv->smiley_data, g_strdup(sml), tree); - } - - /* need to disconnect old webview, if there is one */ - if (smiley->webview) { - g_signal_handlers_disconnect_matched(smiley->webview, - G_SIGNAL_MATCH_DATA, 0, 0, NULL, - NULL, smiley); - } - - smiley->webview = webview; - - gtk_smiley_tree_insert(tree, smiley); - - /* connect destroy signal for the webview */ - g_signal_connect(webview, "destroy", - G_CALLBACK(pidgin_webview_disconnect_smiley), smiley); -} - -#if 0 -static gboolean -pidgin_webview_is_smiley(PidginWebViewPriv *priv, const char *sml, const char *text, - int *len) -{ - GtkSmileyTree *tree; - - if (!sml) - sml = priv->protocol_name; - - if (!sml || !(tree = g_hash_table_lookup(priv->smiley_data, sml))) - tree = priv->default_smilies; - - if (tree == NULL) - return FALSE; - - *len = gtk_smiley_tree_lookup(tree, text); - return (*len > 0); -} -#endif - -static PidginWebViewSmiley * -pidgin_webview_smiley_get_from_tree(GtkSmileyTree *t, const char *text) -{ - const char *x = text; - char *pos; - - if (t == NULL) - return NULL; - - while (*x) { - if (!t->values) - return NULL; - - pos = strchr(t->values->str, *x); - if (!pos) - return NULL; - - t = t->children[pos - t->values->str]; - x++; - } - - return t->image; -} - -PidginWebViewSmiley * -pidgin_webview_smiley_find(PidginWebView *webview, const char *sml, const char *text) -{ - PidginWebViewPriv *priv; - PidginWebViewSmiley *ret; - - g_return_val_if_fail(webview != NULL, NULL); - - priv = PIDGIN_WEBVIEW_GET_PRIVATE(webview); - - /* Look for custom smileys first */ - if (sml != NULL) { - ret = pidgin_webview_smiley_get_from_tree(g_hash_table_lookup(priv->smiley_data, sml), text); - if (ret != NULL) - return ret; - } - - /* Fall back to check for default smileys */ - return pidgin_webview_smiley_get_from_tree(priv->default_smilies, text); -} - -#if 0 -static GdkPixbufAnimation * -gtk_smiley_get_image(PidginWebViewSmiley *smiley) -{ - if (!smiley->icon) { - if (smiley->file) { - smiley->icon = gdk_pixbuf_animation_new_from_file(smiley->file, NULL); - } else if (smiley->loader) { - smiley->icon = gdk_pixbuf_loader_get_animation(smiley->loader); - if (smiley->icon) - g_object_ref(G_OBJECT(smiley->icon)); - } - } - - return smiley->icon; -} -#endif - -static void -gtk_custom_smiley_allocated(GdkPixbufLoader *loader, gpointer user_data) -{ - PidginWebViewSmiley *smiley; - - smiley = (PidginWebViewSmiley *)user_data; - smiley->icon = gdk_pixbuf_loader_get_animation(loader); - - if (smiley->icon) - g_object_ref(G_OBJECT(smiley->icon)); -} - -static void -gtk_custom_smiley_closed(GdkPixbufLoader *loader, gpointer user_data) -{ - PidginWebViewSmiley *smiley; - GtkWidget *icon = NULL; - GtkTextChildAnchor *anchor = NULL; - GSList *current = NULL; - - smiley = (PidginWebViewSmiley *)user_data; - if (!smiley->webview) { - g_object_unref(G_OBJECT(loader)); - smiley->loader = NULL; - return; - } - - for (current = smiley->anchors; current; current = g_slist_next(current)) { - anchor = GTK_TEXT_CHILD_ANCHOR(current->data); - if (gtk_text_child_anchor_get_deleted(anchor)) - icon = NULL; - else - icon = gtk_image_new_from_animation(smiley->icon); - - if (icon) { - GList *wids; - gtk_widget_show(icon); - - wids = gtk_text_child_anchor_get_widgets(anchor); - -#if 0 - g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_plaintext", - purple_unescape_html(smiley->smile), g_free); - g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_htmltext", - g_strdup(smiley->smile), g_free); -#endif - - if (smiley->webview) { - if (wids) { - GList *children = gtk_container_get_children(GTK_CONTAINER(wids->data)); - g_list_foreach(children, (GFunc)gtk_widget_destroy, NULL); - g_list_free(children); - gtk_container_add(GTK_CONTAINER(wids->data), icon); - } else - gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(smiley->webview), icon, anchor); - } - g_list_free(wids); - } - g_object_unref(anchor); - } - - g_slist_free(smiley->anchors); - smiley->anchors = NULL; - - g_object_unref(G_OBJECT(loader)); - smiley->loader = NULL; -} - -static void -gtk_custom_smiley_size_prepared(GdkPixbufLoader *loader, gint width, gint height, gpointer data) -{ - if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/resize_custom_smileys")) { - int custom_smileys_size = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/custom_smileys_size"); - if (width <= custom_smileys_size && height <= custom_smileys_size) - return; - - if (width >= height) { - height = height * custom_smileys_size / width; - width = custom_smileys_size; - } else { - width = width * custom_smileys_size / height; - height = custom_smileys_size; - } - } - gdk_pixbuf_loader_set_size(loader, width, height); -} - -PidginWebViewSmiley * -pidgin_webview_smiley_create(const char *file, const char *shortcut, gboolean hide, - PidginWebViewSmileyFlags flags) -{ - PidginWebViewSmiley *smiley = g_new0(PidginWebViewSmiley, 1); - smiley->file = g_strdup(file); - smiley->smile = g_strdup(shortcut); - smiley->hidden = hide; - smiley->flags = flags; - smiley->webview = NULL; - pidgin_webview_smiley_reload(smiley); - return smiley; -} - -void -pidgin_webview_smiley_reload(PidginWebViewSmiley *smiley) -{ - if (smiley->icon) - g_object_unref(smiley->icon); - if (smiley->loader) - g_object_unref(smiley->loader); - - smiley->icon = NULL; - smiley->loader = NULL; - - if (smiley->file) { - /* We do not use the pixbuf loader for a smiley that can be loaded - * from a file. (e.g., local custom smileys) - */ - return; - } - - smiley->loader = gdk_pixbuf_loader_new(); - - g_signal_connect(smiley->loader, "area_prepared", - G_CALLBACK(gtk_custom_smiley_allocated), smiley); - g_signal_connect(smiley->loader, "closed", - G_CALLBACK(gtk_custom_smiley_closed), smiley); - g_signal_connect(smiley->loader, "size_prepared", - G_CALLBACK(gtk_custom_smiley_size_prepared), smiley); -} - -const char * -pidgin_webview_smiley_get_smile(const PidginWebViewSmiley *smiley) -{ - return smiley->smile; -} - -const char * -pidgin_webview_smiley_get_file(const PidginWebViewSmiley *smiley) -{ - return smiley->file; -} - -gboolean -pidgin_webview_smiley_get_hidden(const PidginWebViewSmiley *smiley) -{ - return smiley->hidden; -} - -PidginWebViewSmileyFlags -pidgin_webview_smiley_get_flags(const PidginWebViewSmiley *smiley) -{ - return smiley->flags; -} - -void -pidgin_webview_smiley_destroy(PidginWebViewSmiley *smiley) -{ - pidgin_webview_disassociate_smiley(smiley); - g_free(smiley->smile); - g_free(smiley->file); - if (smiley->icon) - g_object_unref(smiley->icon); - if (smiley->loader) - g_object_unref(smiley->loader); - g_free(smiley->data); - g_free(smiley); -} - -void -pidgin_webview_remove_smileys(PidginWebView *webview) -{ - PidginWebViewPriv *priv; - - g_return_if_fail(webview != NULL); - - priv = PIDGIN_WEBVIEW_GET_PRIVATE(webview); - - g_hash_table_destroy(priv->smiley_data); - gtk_smiley_tree_destroy(priv->default_smilies); - priv->smiley_data = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, - (GDestroyNotify)gtk_smiley_tree_destroy); - priv->default_smilies = gtk_smiley_tree_new(); -} - -void -pidgin_webview_insert_smiley(PidginWebView *webview, const char *sml, - const char *smiley) -{ - PidginWebViewPriv *priv; - char *unescaped; - PidginWebViewSmiley *webview_smiley; - - g_return_if_fail(webview != NULL); - - priv = PIDGIN_WEBVIEW_GET_PRIVATE(webview); - - unescaped = purple_unescape_html(smiley); - webview_smiley = pidgin_webview_smiley_find(webview, sml, unescaped); - - if (priv->format_functions & PIDGIN_WEBVIEW_SMILEY) { - char *tmp; - /* TODO Better smiley insertion... */ - tmp = g_strdup_printf("<img isEmoticon src='purple-smiley:%p' alt='%s'>", - webview_smiley, smiley); - pidgin_webview_append_html(webview, tmp); - g_free(tmp); - } else { - pidgin_webview_append_html(webview, smiley); - } - - g_free(unescaped); -} - -/************************************************************************** - * PidginWebViewSmiley GBoxed code - **************************************************************************/ - -static PidginWebViewSmiley * -pidgin_webview_smiley_ref(PidginWebViewSmiley *smiley) -{ - g_return_val_if_fail(smiley != NULL, NULL); - - smiley->box_count++; - - return smiley; -} - -static void -pidgin_webview_smiley_unref(PidginWebViewSmiley *smiley) -{ - g_return_if_fail(smiley != NULL); - g_return_if_fail(smiley->box_count >= 0); - - if (!smiley->box_count--) - pidgin_webview_smiley_destroy(smiley); -} - -GType -pidgin_webview_smiley_get_type(void) -{ - static GType type = 0; - - if (type == 0) { - type = g_boxed_type_register_static("PidginWebViewSmiley", - (GBoxedCopyFunc)pidgin_webview_smiley_ref, - (GBoxedFreeFunc)pidgin_webview_smiley_unref); - } - - return type; -} /****************************************************************************** * Helpers @@ -793,6 +202,48 @@ } static void +webview_resource_loaded(WebKitWebView *web_view, WebKitWebFrame *web_frame, + WebKitWebResource *web_resource, gpointer user_data) +{ + PidginWebViewPriv *priv = PIDGIN_WEBVIEW_GET_PRIVATE(web_view); + const gchar *uri; + GString *data; + PurpleStoredImage *image; + + if (!purple_str_has_caseprefix( + webkit_web_resource_get_mime_type(web_resource), "image/")) + { + return; + } + + uri = webkit_web_resource_get_uri(web_resource); + if (g_hash_table_lookup(priv->loaded_images, uri)) + return; + + data = webkit_web_resource_get_data(web_resource); + if (data->len == 0) + return; + + /* TODO: we could avoid copying data, if uri is a + * PURPLE_STORED_IMAGE_PROTOCOL or PURPLE_STOCK_IMAGE_PROTOCOL */ + image = purple_imgstore_new(g_memdup(data->str, data->len), + data->len, NULL); + g_return_if_fail(image != NULL); + + g_hash_table_insert(priv->loaded_images, g_strdup(uri), image); +} + +static PurpleStoredImage * +webview_resource_get_loaded(WebKitWebView *web_view, const gchar *uri) +{ + PidginWebViewPriv *priv = PIDGIN_WEBVIEW_GET_PRIVATE(web_view); + + g_return_val_if_fail(priv != NULL, NULL); + + return g_hash_table_lookup(priv->loaded_images, uri); +} + +static void process_load_queue_element(PidginWebView *webview) { PidginWebViewPriv *priv = PIDGIN_WEBVIEW_GET_PRIVATE(webview); @@ -1112,31 +563,126 @@ } static void +webview_image_saved(GtkWidget *dialog, gint response, gpointer _unused) +{ + PurpleStoredImage *image; + gchar *filename; + GError *error = NULL; + + if (response != GTK_RESPONSE_ACCEPT) { + gtk_widget_destroy(dialog); + return; + } + + image = g_object_get_data(G_OBJECT(dialog), "pidgin-gtkwebview-image"); + g_return_if_fail(image != NULL); + + filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + g_return_if_fail(filename != NULL); + g_return_if_fail(filename[0] != '\0'); + + g_file_set_contents(filename, purple_imgstore_get_data(image), + purple_imgstore_get_size(image), &error); + if (error) { + purple_debug_error("gtkwebview", "Failed saving image: %s", + error->message); + /* TODO: we should display a notification here */ + } + + g_free(filename); + gtk_widget_destroy(dialog); +} + +static void +webview_image_save(GtkWidget *item, WebKitDOMHTMLImageElement *image_node) +{ + const gchar *src; + WebKitWebView *webview; + PurpleStoredImage *image; + GtkFileChooserDialog *dialog; + gchar *filename; + GtkWidget *parent; + + webview = g_object_get_data(G_OBJECT(image_node), "pidgin-gtkwebview"); + g_return_if_fail(webview != NULL); + + src = webkit_dom_html_image_element_get_src(image_node); /* XXX: a leak or not? */ + image = webview_resource_get_loaded(webview, src); + g_return_if_fail(image != NULL); + + parent = gtk_widget_get_ancestor(item, GTK_TYPE_WINDOW); + dialog = GTK_FILE_CHOOSER_DIALOG(gtk_file_chooser_dialog_new( + _("Save Image"), + parent ? GTK_WINDOW(parent) : NULL, + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, + NULL)); + gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE); + gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); + + /* TODO: use image's file name, if there is one */ + filename = g_strdup_printf(_("image.%s"), + purple_imgstore_get_extension(image)); + gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), filename); + g_free(filename); + + g_signal_connect(G_OBJECT(dialog), "response", + G_CALLBACK(webview_image_saved), NULL); + + purple_imgstore_ref(image); + g_object_set_data_full(G_OBJECT(dialog), "pidgin-gtkwebview-image", + image, (GDestroyNotify)purple_imgstore_unref); + + gtk_widget_show(GTK_WIDGET(dialog)); +} + +static void +webview_image_add_smiley(GtkWidget *item, WebKitDOMHTMLImageElement *image_node) +{ + const gchar *src; + WebKitWebView *webview; + PurpleStoredImage *image; + + src = webkit_dom_html_image_element_get_src(image_node); + webview = g_object_get_data(G_OBJECT(image_node), "pidgin-gtkwebview"); + g_return_if_fail(webview != NULL); + + image = webview_resource_get_loaded(webview, src); + g_return_if_fail(image != NULL); + + pidgin_smiley_manager_add(image, + webkit_dom_html_image_element_get_alt(image_node)); +} + +static void do_popup_menu(WebKitWebView *webview, int button, int time, int context, WebKitDOMNode *node, const char *uri) { GtkWidget *menu; GtkWidget *cut, *copy, *paste, *delete, *select; + gboolean show_clipboard = TRUE; + WebKitDOMHTMLImageElement *image_node = NULL; menu = gtk_menu_new(); g_signal_connect(menu, "selection-done", G_CALLBACK(gtk_widget_destroy), NULL); - if ((context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) - && !(context & WEBKIT_HIT_TEST_RESULT_CONTEXT_SELECTION)) { + if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) { PidginWebViewProtocol *proto = NULL; GList *children; + WebKitDOMNode *link_node = node; - while (node && !WEBKIT_DOM_IS_HTML_ANCHOR_ELEMENT(node)) { - node = webkit_dom_node_get_parent_node(node); + while (link_node && !WEBKIT_DOM_IS_HTML_ANCHOR_ELEMENT(link_node)) { + link_node = webkit_dom_node_get_parent_node(node); } - if (uri && node) + if (uri && link_node) proto = webview_find_protocol(uri, FALSE); if (proto && proto->context_menu) { proto->context_menu(PIDGIN_WEBVIEW(webview), - WEBKIT_DOM_HTML_ANCHOR_ELEMENT(node), menu); + WEBKIT_DOM_HTML_ANCHOR_ELEMENT(link_node), menu); } children = gtk_container_get_children(GTK_CONTAINER(menu)); @@ -1150,7 +696,57 @@ } gtk_widget_show_all(menu); - } else { + show_clipboard = FALSE; + } + + if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE) { + WebKitDOMNode *_image_node = node; + + while (_image_node && !WEBKIT_DOM_IS_HTML_IMAGE_ELEMENT(_image_node)) { + _image_node = webkit_dom_node_get_parent_node(_image_node); + } + if (_image_node) + image_node = WEBKIT_DOM_HTML_IMAGE_ELEMENT(_image_node); + /* don't do it on our theme smileys */ + } + if (image_node && webkit_dom_html_image_element_get_complete(image_node)) { + GtkWidget *menu_item; + int width, height; + + width = webkit_dom_html_image_element_get_width(image_node); + height = webkit_dom_html_image_element_get_height(image_node); + + /* XXX */ + g_object_set_data(G_OBJECT(image_node), "pidgin-gtkwebview", webview); + + menu_item = gtk_image_menu_item_new_with_mnemonic( + _("_Save Image...")); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), + gtk_image_new_from_stock(GTK_STOCK_SAVE, GTK_ICON_SIZE_MENU)); + g_signal_connect_object(G_OBJECT(menu_item), "activate", + G_CALLBACK(webview_image_save), image_node, 0); + gtk_widget_show(menu_item); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); + + /* TODO: check, if it's not *our* custom smiley (use css) */ + if (width <= 96 && height <= 96) { + menu_item = gtk_image_menu_item_new_with_mnemonic( + _("_Add Custom Smiley...")); + gtk_image_menu_item_set_image( + GTK_IMAGE_MENU_ITEM(menu_item), + gtk_image_new_from_stock(GTK_STOCK_ADD, + GTK_ICON_SIZE_MENU)); + g_signal_connect_object(G_OBJECT(menu_item), "activate", + G_CALLBACK(webview_image_add_smiley), + image_node, 0); + gtk_widget_show(menu_item); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); + } + + show_clipboard = FALSE; + } + + if (show_clipboard) { /* Using connect_swapped means we don't need any wrapper functions */ cut = pidgin_new_item_from_stock(menu, _("Cu_t"), GTK_STOCK_CUT, NULL, NULL, 0, 0, NULL); @@ -1211,8 +807,8 @@ pidgin_separator(menu); - inspect = pidgin_new_item_from_stock(menu, _("Inspect _Element"), NULL, - NULL, NULL, 0, 0, NULL); + inspect = pidgin_new_item_from_stock(menu, _("Inspect _Element"), + PIDGIN_STOCK_DEBUG, NULL, NULL, 0, 0, NULL); g_signal_connect_data(G_OBJECT(inspect), "activate", G_CALLBACK(webview_inspector_inspect_element), data, (GClosureNotify)g_free, 0); @@ -1511,7 +1107,6 @@ pidgin_webview_finalize(GObject *webview) { PidginWebViewPriv *priv = PIDGIN_WEBVIEW_GET_PRIVATE(webview); - gpointer temp; if (priv->inspector_win != NULL) gtk_widget_destroy(GTK_WIDGET(priv->inspector_win)); @@ -1520,15 +1115,12 @@ g_source_remove(priv->loader); while (!g_queue_is_empty(priv->load_queue)) { - temp = g_queue_pop_head(priv->load_queue); - temp = g_queue_pop_head(priv->load_queue); - g_free(temp); + g_queue_pop_head(priv->load_queue); + g_free(g_queue_pop_head(priv->load_queue)); } g_queue_free(priv->load_queue); - g_hash_table_destroy(priv->smiley_data); - gtk_smiley_tree_destroy(priv->default_smilies); - g_free(priv->protocol_name); + g_hash_table_destroy(priv->loaded_images); G_OBJECT_CLASS(parent_class)->finalize(G_OBJECT(webview)); } @@ -1674,10 +1266,6 @@ priv->load_queue = g_queue_new(); - priv->smiley_data = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, - (GDestroyNotify)gtk_smiley_tree_destroy); - priv->default_smilies = gtk_smiley_tree_new(); - g_signal_connect(G_OBJECT(webview), "button-press-event", G_CALLBACK(webview_button_pressed), NULL); @@ -1696,11 +1284,17 @@ g_signal_connect(G_OBJECT(webview), "resource-request-starting", G_CALLBACK(webview_resource_loading), NULL); + g_signal_connect(G_OBJECT(webview), "resource-load-finished", + G_CALLBACK(webview_resource_loaded), NULL); + inspector = webkit_web_view_get_inspector(WEBKIT_WEB_VIEW(webview)); g_signal_connect(G_OBJECT(inspector), "inspect-web-view", G_CALLBACK(webview_inspector_create), NULL); g_signal_connect(G_OBJECT(inspector), "show-window", G_CALLBACK(webview_inspector_show), webview); + + priv->loaded_images = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, (GDestroyNotify)purple_imgstore_unref); } GType @@ -2481,3 +2075,15 @@ pidgin_webviewtoolbar_activate(priv->toolbar, action); } +void +pidgin_webview_switch_active_conversation(PidginWebView *webview, + PurpleConversation *conv) +{ + PidginWebViewPriv *priv = PIDGIN_WEBVIEW_GET_PRIVATE(webview); + + g_return_if_fail(priv != NULL); + if (priv->toolbar == NULL) + return; + + pidgin_webviewtoolbar_switch_active_conversation(priv->toolbar, conv); +}
--- a/pidgin/gtkwebview.h Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtkwebview.h Mon Apr 07 20:02:22 2014 +0530 @@ -42,8 +42,6 @@ #define PIDGIN_IS_WEBVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PIDGIN_TYPE_WEBVIEW)) #define PIDGIN_WEBVIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PIDGIN_TYPE_WEBVIEW, PidginWebViewClass)) -#define PIDGIN_TYPE_WEBVIEW_SMILEY (pidgin_webview_smiley_get_type()) - typedef enum { PIDGIN_WEBVIEW_BOLD = 1 << 0, PIDGIN_WEBVIEW_ITALIC = 1 << 1, @@ -64,10 +62,6 @@ } PidginWebViewButtons; typedef enum { - PIDGIN_WEBVIEW_SMILEY_CUSTOM = 1 << 0 -} PidginWebViewSmileyFlags; - -typedef enum { PIDGIN_WEBVIEW_ACTION_BOLD, PIDGIN_WEBVIEW_ACTION_ITALIC, PIDGIN_WEBVIEW_ACTION_UNDERLINE, @@ -90,7 +84,6 @@ typedef struct _PidginWebView PidginWebView; typedef struct _PidginWebViewClass PidginWebViewClass; -typedef struct _PidginWebViewSmiley PidginWebViewSmiley; struct _PidginWebView { @@ -121,13 +114,6 @@ GType pidgin_webview_get_type(void); /** - * pidgin_webview_smiley_get_type: - * - * Returns: The #GType for the #PidginWebViewSmiley boxed structure. - */ -GType pidgin_webview_smiley_get_type(void); - -/** * pidgin_webview_new: * @editable: Whether this PidginWebView will be user-editable * @@ -595,129 +581,6 @@ const char *pidgin_webview_get_protocol_name(PidginWebView *webview); /** - * pidgin_webview_set_protocol_name: - * @webview: The PidginWebView - * @protocol_name: The protocol name to associate with the PidginWebView - * - * Associates a protocol name with a PidginWebView. - */ -void pidgin_webview_set_protocol_name(PidginWebView *webview, const char *protocol_name); - -/** - * pidgin_webview_smiley_create: - * @file: The image file for the smiley - * @shortcut: The key shortcut for the smiley - * @hide: %TRUE if the smiley should be hidden in the smiley dialog, - * %FALSE otherwise - * @flags: The smiley flags - * - * Create a new PidginWebViewSmiley. - * - * Returns: The newly created smiley - */ -PidginWebViewSmiley *pidgin_webview_smiley_create(const char *file, - const char *shortcut, - gboolean hide, - PidginWebViewSmileyFlags flags); - -/** - * pidgin_webview_smiley_reload: - * @smiley: The smiley to reload - * - * Reload the image data for the smiley. - */ -void pidgin_webview_smiley_reload(PidginWebViewSmiley *smiley); - -/** - * pidgin_webview_smiley_destroy: - * @smiley: The smiley to destroy - * - * Destroy a PidginWebViewSmiley. - */ -void pidgin_webview_smiley_destroy(PidginWebViewSmiley *smiley); - -/** - * pidgin_webview_smiley_get_smile: - * @smiley: The smiley - * - * Returns the text associated with a smiley. - * - * Returns: The text - */ -const char *pidgin_webview_smiley_get_smile(const PidginWebViewSmiley *smiley); - -/** - * pidgin_webview_smiley_get_file: - * @smiley: The smiley - * - * Returns the file associated with a smiley. - * - * Returns: The file - */ -const char *pidgin_webview_smiley_get_file(const PidginWebViewSmiley *smiley); - -/** - * pidgin_webview_smiley_get_hidden: - * @smiley: The smiley - * - * Returns the invisibility of a smiley. - * - * Returns: The hidden status - */ -gboolean pidgin_webview_smiley_get_hidden(const PidginWebViewSmiley *smiley); - -/** - * pidgin_webview_smiley_get_flags: - * @smiley: The smiley - * - * Returns the flags associated with a smiley. - * - * Returns: The flags - */ -PidginWebViewSmileyFlags pidgin_webview_smiley_get_flags(const PidginWebViewSmiley *smiley); - -/** - * pidgin_webview_smiley_find: - * @webview: The PidginWebView - * @sml: The name of the smiley category - * @text: The text associated with the smiley - * - * Returns: The smiley object associated with the text. - */ -PidginWebViewSmiley *pidgin_webview_smiley_find(PidginWebView *webview, const char *sml, - const char *text); - -/** - * pidgin_webview_associate_smiley: - * @webview: The PidginWebView - * @sml: The name of the smiley category - * @smiley: The PidginWebViewSmiley to associate - * - * Associates a smiley with a PidginWebView. - */ -void pidgin_webview_associate_smiley(PidginWebView *webview, const char *sml, - PidginWebViewSmiley *smiley); - -/** - * pidgin_webview_remove_smileys: - * @webview: The PidginWebView. - * - * Removes all smileys associated with a PidginWebView. - */ -void pidgin_webview_remove_smileys(PidginWebView *webview); - -/** - * pidgin_webview_insert_smiley: - * @webview: The PidginWebView - * @sml: The category of the smiley - * @smiley: The text of the smiley to insert - * - * Inserts a smiley at the current location or selection in a PidginWebView. - */ -void pidgin_webview_insert_smiley(PidginWebView *webview, const char *sml, - const char *smiley); - -/** * pidgin_webview_show_toolbar: * @webview: The PidginWebView. * @@ -742,6 +605,17 @@ */ void pidgin_webview_activate_toolbar(PidginWebView *webview, PidginWebViewAction action); +/** + * pidgin_webview_switch_active_conversation: + * @webview: The PidginWebView + * @conv: The conversation. + * + * Updates the webview for a new active #PurpleConversation. + */ +void +pidgin_webview_switch_active_conversation(PidginWebView *webview, + PurpleConversation *conv); + /* Do not use. */ void pidgin_webview_set_toolbar(PidginWebView *webview, GtkWidget *toolbar); @@ -749,4 +623,3 @@ G_END_DECLS #endif /* _PIDGIN_WEBVIEW_H_ */ -
--- a/pidgin/gtkwebviewtoolbar.c Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtkwebviewtoolbar.c Mon Apr 07 20:02:22 2014 +0530 @@ -27,13 +27,15 @@ #include "prefs.h" #include "request.h" #include "pidginstock.h" +#include "smiley-custom.h" +#include "smiley-list.h" #include "util.h" #include "debug.h" #include "gtkdialogs.h" #include "gtkwebviewtoolbar.h" -#include "gtksmiley.h" -#include "gtkthemes.h" +#include "gtksmiley-manager.h" +#include "gtksmiley-theme.h" #include "gtkutils.h" #include <gdk/gdkkeysyms.h> @@ -92,7 +94,7 @@ GtkWidget *smiley_dialog; GtkWidget *image_dialog; - char *sml; + gboolean allow_smileys; } PidginWebViewToolbarPriv; /****************************************************************************** @@ -705,136 +707,14 @@ smiley_text = g_object_get_data(G_OBJECT(widget), "smiley_text"); escaped_smiley = g_markup_escape_text(smiley_text, -1); - pidgin_webview_insert_smiley(PIDGIN_WEBVIEW(toolbar->webview), - pidgin_webview_get_protocol_name(PIDGIN_WEBVIEW(toolbar->webview)), - escaped_smiley); + pidgin_webview_append_html(PIDGIN_WEBVIEW(toolbar->webview), + escaped_smiley); g_free(escaped_smiley); close_smiley_dialog(toolbar); } -/* smiley buttons list */ -struct smiley_button_list { - int width, height; - GtkWidget *button; - const PidginWebViewSmiley *smiley; - struct smiley_button_list *next; -}; - -static struct smiley_button_list * -sort_smileys(struct smiley_button_list *ls, PidginWebViewToolbar *toolbar, - int *width, const PidginWebViewSmiley *smiley) -{ - GtkWidget *image; - GtkWidget *button; - GtkRequisition size; - struct smiley_button_list *cur; - struct smiley_button_list *it, *it_last; - const gchar *filename = pidgin_webview_smiley_get_file(smiley); - const gchar *face = pidgin_webview_smiley_get_smile(smiley); - PurpleSmiley *psmiley = NULL; - gboolean supports_custom = (pidgin_webview_get_format_functions(PIDGIN_WEBVIEW(toolbar->webview)) & PIDGIN_WEBVIEW_CUSTOM_SMILEY); - - cur = g_new0(struct smiley_button_list, 1); - it = ls; - it_last = ls; /* list iterators */ - image = gtk_image_new_from_file(filename); - - gtk_widget_get_preferred_size(image, NULL, &size); - - if ((size.width > 24) - && (pidgin_webview_smiley_get_flags(smiley) & PIDGIN_WEBVIEW_SMILEY_CUSTOM)) { - /* This is a custom smiley, let's scale it */ - GdkPixbuf *pixbuf = NULL; - GtkImageType type; - - type = gtk_image_get_storage_type(GTK_IMAGE(image)); - - if (type == GTK_IMAGE_PIXBUF) { - pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(image)); - } else if (type == GTK_IMAGE_ANIMATION) { - GdkPixbufAnimation *animation; - - animation = gtk_image_get_animation(GTK_IMAGE(image)); - - pixbuf = gdk_pixbuf_animation_get_static_image(animation); - } - - if (pixbuf != NULL) { - GdkPixbuf *resized; - resized = gdk_pixbuf_scale_simple(pixbuf, 24, 24, - GDK_INTERP_HYPER); - - gtk_image_set_from_pixbuf(GTK_IMAGE(image), resized); /* This unrefs pixbuf */ - gtk_widget_get_preferred_size(image, NULL, &size); - g_object_unref(G_OBJECT(resized)); - } - } - - (*width) += size.width; - - button = gtk_button_new(); - gtk_container_add(GTK_CONTAINER(button), image); - - g_object_set_data_full(G_OBJECT(button), "smiley_text", g_strdup(face), g_free); - g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(insert_smiley_text), toolbar); - - gtk_widget_set_tooltip_text(button, face); - - /* these look really weird with borders */ - gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); - - psmiley = purple_smileys_find_by_shortcut(face); - /* If this is a "non-custom" smiley, check to see if its shortcut is - "shadowed" by any custom smiley. This can only happen if the connection - is custom smiley-enabled */ - if (supports_custom && psmiley - && !(pidgin_webview_smiley_get_flags(smiley) & PIDGIN_WEBVIEW_SMILEY_CUSTOM)) { - gchar tip[128]; - g_snprintf(tip, sizeof(tip), - _("This smiley is disabled because a custom smiley exists for this shortcut:\n %s"), - face); - gtk_widget_set_tooltip_text(button, tip); - gtk_widget_set_sensitive(button, FALSE); - } else if (psmiley) { - /* Remove the button if the smiley is destroyed */ - g_signal_connect_object(G_OBJECT(psmiley), "destroy", G_CALLBACK(gtk_widget_destroy), - button, G_CONNECT_SWAPPED); - } - - /* set current element to add */ - cur->height = size.height; - cur->width = size.width; - cur->button = button; - cur->smiley = smiley; - cur->next = ls; - - /* check where to insert by height */ - if (ls == NULL) - return cur; - while (it != NULL) { - it_last = it; - it = it->next; - } - cur->next = it; - it_last->next = cur; - return ls; -} - -static gboolean -smiley_is_unique(GSList *list, PidginWebViewSmiley *smiley) -{ - const char *file = pidgin_webview_smiley_get_file(smiley); - while (list) { - PidginWebViewSmiley *cur = (PidginWebViewSmiley *)list->data; - if (!strcmp(pidgin_webview_smiley_get_file(cur), file)) - return FALSE; - list = list->next; - } - return TRUE; -} - static gboolean smiley_dialog_input_cb(GtkWidget *dialog, GdkEvent *event, PidginWebViewToolbar *toolbar) @@ -849,42 +729,147 @@ return FALSE; } +/* returns: total width */ +static gulong +smileys_load_button_thumbs(GList *smileys) +{ + GList *it; + gulong total_width = 0; + + for (it = smileys; it; it = g_list_next(it)) { + PurpleSmiley *smiley = it->data; + GdkPixbuf *pixbuf; + guint width; + + width = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(smiley), + "pidgin-webviewtoolbar-button-width")); + + /* smiley is already loaded */ + if (width > 0) { + total_width += width; + continue; + } + + pixbuf = pidgin_pixbuf_new_from_file( + purple_smiley_get_path(smiley)); + pixbuf = pidgin_pixbuf_scale_down(pixbuf, + 24, 24, GDK_INTERP_BILINEAR, TRUE); + + if (pixbuf) + width = gdk_pixbuf_get_width(pixbuf); + if (width == 0) + width = 1; + + /* XXX: a padding for the button */ + width += 12; + + g_object_set_data(G_OBJECT(smiley), + "pidgin-webviewtoolbar-button-width", + GINT_TO_POINTER(width)); + g_object_set_data_full(G_OBJECT(smiley), + "pidgin-webviewtoolbar-button-image", + pixbuf, g_object_unref); + + total_width += width; + } + + return total_width; +} + static void -add_smiley_list(GtkWidget *container, struct smiley_button_list *list, - int max_width, gboolean custom) +add_smiley_list(PidginWebViewToolbar *toolbar, GtkWidget *container, + GList *smileys, int max_width, PurpleSmileyList *shadow_smileys) { + GList *it; GtkWidget *line; int line_width = 0; - if (!list) + if (!smileys) return; + /* TODO: sort smileys by their position in theme */ + line = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(container), line, FALSE, FALSE, 0); - for (; list; list = list->next) { - if (custom != !!(pidgin_webview_smiley_get_flags(list->smiley) & PIDGIN_WEBVIEW_SMILEY_CUSTOM)) + for (it = smileys; it; it = g_list_next(it)) { + PurpleSmiley *smiley = it->data; + GtkWidget *button; + GdkPixbuf *pixbuf; + GtkImage *image; + guint width; + const gchar *smiley_shortcut; + + smiley_shortcut = purple_smiley_get_shortcut(smiley); + + width = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(smiley), + "pidgin-webviewtoolbar-button-width")); + pixbuf = g_object_get_data(G_OBJECT(smiley), + "pidgin-webviewtoolbar-button-image"); + if (!pixbuf) { + purple_debug_warning("gtkwebviewtoolbar", "Smiley does " + "not exists: %s", smiley_shortcut); continue; - gtk_box_pack_start(GTK_BOX(line), list->button, FALSE, FALSE, 0); - gtk_widget_show(list->button); - line_width += list->width; - if (line_width >= max_width) { - if (list->next) { - line = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_pack_start(GTK_BOX(container), line, FALSE, FALSE, 0); - } + } + + image = GTK_IMAGE(gtk_image_new_from_pixbuf(pixbuf)); + + button = gtk_button_new(); + gtk_container_add(GTK_CONTAINER(button), GTK_WIDGET(image)); + g_object_set_data_full(G_OBJECT(button), "smiley_text", + g_strdup(smiley_shortcut), g_free); + g_signal_connect(G_OBJECT(button), "clicked", + G_CALLBACK(insert_smiley_text), toolbar); + gtk_widget_set_tooltip_text(button, smiley_shortcut); + gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); + + /* Disable theme smileys shadowed by custom smileys. + * There is a case, when a theme smiley have another, + * non-shadowed shortcut. But we won't handle it. + */ + if (shadow_smileys && purple_smiley_list_get_by_shortcut( + shadow_smileys, smiley_shortcut)) + { + gchar tip[1000]; + g_snprintf(tip, sizeof(tip), _("This smiley is " + "disabled because a custom smiley exists for " + "this shortcut:\n %s"), smiley_shortcut); + gtk_widget_set_tooltip_text(button, tip); + gtk_widget_set_sensitive(button, FALSE); + } + + gtk_box_pack_start(GTK_BOX(line), button, FALSE, FALSE, 0); + gtk_widget_show(button); + + line_width += width; + if (line_width >= max_width && g_list_next(it)) { line_width = 0; + line = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_pack_start(GTK_BOX(container), line, FALSE, FALSE, 0); } } + +} + +static void +insert_smiley_manage_cb(GtkButton *button, gpointer _dialog) +{ + GtkWidget *dialog = _dialog; + + gtk_widget_destroy(dialog); + pidgin_smiley_manager_show(); } static void insert_smiley_cb(GtkAction *smiley, PidginWebViewToolbar *toolbar) { - PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); + PidginWebViewToolbarPriv *priv = + PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); + PurpleSmileyList *smileys_from_theme, *smileys_from_custom = NULL; + GList *theme_smileys = NULL, *custom_smileys = NULL, *it, *it_next; + PidginWebViewButtons webview_format; + GtkWidget *dialog, *vbox; GtkWidget *smiley_table = NULL; - GSList *smileys, *unique_smileys = NULL; - const GSList *custom_smileys = NULL; gboolean supports_custom = FALSE; GtkRequisition req; GtkWidget *scrolled, *viewport; @@ -895,95 +880,94 @@ return; } - if (priv->sml) - smileys = pidgin_themes_get_proto_smileys(priv->sml); - else - smileys = pidgin_themes_get_proto_smileys(NULL); + webview_format = pidgin_webview_get_format_functions( + PIDGIN_WEBVIEW(toolbar->webview)); - /* Note: prepend smileys to list to avoid O(n^2) overhead when there is a - large number of smileys... need to reverse the list after for the dialog - to work... */ - while (smileys) { - PidginWebViewSmiley *smiley = (PidginWebViewSmiley *)smileys->data; - if (!pidgin_webview_smiley_get_hidden(smiley)) { - if (smiley_is_unique(unique_smileys, smiley)) { - unique_smileys = g_slist_prepend(unique_smileys, smiley); - } - } - smileys = smileys->next; - } - supports_custom = (pidgin_webview_get_format_functions(PIDGIN_WEBVIEW(toolbar->webview)) & PIDGIN_WEBVIEW_CUSTOM_SMILEY); - if (toolbar->webview && supports_custom) { - const GSList *iterator = NULL; - custom_smileys = pidgin_smileys_get_all(); - - for (iterator = custom_smileys ; iterator ; - iterator = g_slist_next(iterator)) { - PidginWebViewSmiley *smiley = (PidginWebViewSmiley *)iterator->data; - unique_smileys = g_slist_prepend(unique_smileys, smiley); - } + smileys_from_theme = pidgin_smiley_theme_for_conv(priv->active_conv); + if (smileys_from_theme) { + theme_smileys = purple_smiley_list_get_unique( + smileys_from_theme); } - /* we need to reverse the list to get the smileys in the correct order */ - unique_smileys = g_slist_reverse(unique_smileys); + /* remove hidden theme smileys */ + for (it = theme_smileys; it; it = it_next) { + PurpleSmiley *smiley = it->data; + it_next = g_list_next(it); + + if (!g_object_get_data(G_OBJECT(smiley), + "pidgin-smiley-hidden")) + { + continue; + } + + theme_smileys = g_list_delete_link(theme_smileys, it); + } + + supports_custom = (webview_format & PIDGIN_WEBVIEW_CUSTOM_SMILEY); + if (supports_custom) { + smileys_from_custom = purple_smiley_custom_get_list(); + custom_smileys = purple_smiley_list_get_all( + smileys_from_custom); + } dialog = pidgin_create_dialog(_("Smile!"), 0, "smiley_dialog", FALSE); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE); - vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(dialog), FALSE, 0); + vbox = pidgin_dialog_get_vbox_with_properties( + GTK_DIALOG(dialog), FALSE, 0); + + if (theme_smileys != NULL || custom_smileys != NULL) { + guint max_line_width, num_lines, button_width = 0; - if (unique_smileys != NULL) { - struct smiley_button_list *ls; - int max_line_width, num_lines, button_width = 0; + /* Fill the cache (images and their widths). */ + max_line_width = smileys_load_button_thumbs(theme_smileys); + max_line_width += smileys_load_button_thumbs(custom_smileys); + num_lines = sqrt(g_list_length(theme_smileys) + + g_list_length(custom_smileys)); + max_line_width /= num_lines; - /* We use hboxes packed in a vbox */ - ls = NULL; - max_line_width = 0; - num_lines = floor(sqrt(g_slist_length(unique_smileys))); + /* We use hboxes packed in a vbox. */ smiley_table = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + /* Custom smileys manager button. */ if (supports_custom) { - GtkWidget *manage = gtk_button_new_with_mnemonic(_("_Manage custom smileys")); + GtkWidget *manage = gtk_button_new_with_mnemonic( + _("_Manage custom smileys")); GtkRequisition req; g_signal_connect(G_OBJECT(manage), "clicked", - G_CALLBACK(pidgin_smiley_manager_show), NULL); - g_signal_connect_swapped(G_OBJECT(manage), "clicked", - G_CALLBACK(gtk_widget_destroy), dialog); + G_CALLBACK(insert_smiley_manage_cb), dialog); gtk_box_pack_end(GTK_BOX(vbox), manage, FALSE, TRUE, 0); gtk_widget_get_preferred_size(manage, NULL, &req); button_width = req.width; + max_line_width = MAX(button_width, max_line_width); + } else { + max_line_width = MAX(max_line_width, 100); } - /* create list of smileys sorted by height */ - while (unique_smileys) { - PidginWebViewSmiley *smiley = (PidginWebViewSmiley *)unique_smileys->data; - if (!pidgin_webview_smiley_get_hidden(smiley)) { - ls = sort_smileys(ls, toolbar, &max_line_width, smiley); - } - unique_smileys = g_slist_delete_link(unique_smileys, unique_smileys); + /* Add buttons for smileys. */ + if (theme_smileys) { + add_smiley_list(toolbar, smiley_table, theme_smileys, + max_line_width, smileys_from_custom); } - /* The window will be at least as wide as the 'Manage ..' button */ - max_line_width = MAX(button_width, max_line_width / num_lines); - - /* pack buttons of the list */ - add_smiley_list(smiley_table, ls, max_line_width, FALSE); - if (supports_custom) { - gtk_box_pack_start(GTK_BOX(smiley_table), gtk_separator_new(GTK_ORIENTATION_HORIZONTAL), TRUE, FALSE, 0); - add_smiley_list(smiley_table, ls, max_line_width, TRUE); + if (theme_smileys && custom_smileys) { + gtk_box_pack_start(GTK_BOX(smiley_table), + gtk_separator_new(GTK_ORIENTATION_HORIZONTAL), + TRUE, FALSE, 0); } - while (ls) { - struct smiley_button_list *tmp = ls->next; - g_free(ls); - ls = tmp; + if (custom_smileys) { + add_smiley_list(toolbar, smiley_table, custom_smileys, + max_line_width, NULL); } gtk_widget_add_events(dialog, GDK_KEY_PRESS_MASK); - } - else { + } else { smiley_table = gtk_label_new(_("This theme has no available smileys.")); gtk_widget_add_events(dialog, GDK_KEY_PRESS_MASK | GDK_BUTTON_PRESS_MASK); g_signal_connect(G_OBJECT(dialog), "button-press-event", (GCallback)smiley_dialog_input_cb, toolbar); } + g_list_free(theme_smileys); + g_list_free(custom_smileys); + scrolled = pidgin_make_scrollable(smiley_table, GTK_POLICY_NEVER, GTK_POLICY_NEVER, GTK_SHADOW_NONE, -1, -1); gtk_box_pack_start(GTK_BOX(vbox), scrolled, TRUE, TRUE, 0); gtk_widget_show(smiley_table); @@ -1025,6 +1009,40 @@ } static void +update_smiley_button(PidginWebViewToolbar *toolbar) +{ + PidginWebViewToolbarPriv *priv = + PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); + PurpleSmileyList *sl; + gboolean any_smileys; + PidginWebViewButtons webview_format = 0; + + g_return_if_fail(priv != NULL); + + if (toolbar->webview) { + webview_format = pidgin_webview_get_format_functions( + PIDGIN_WEBVIEW(toolbar->webview)); + } + + if (!priv->allow_smileys) { + gtk_action_set_sensitive(priv->smiley, FALSE); + return; + } + + sl = pidgin_smiley_theme_for_conv(priv->active_conv); + /* it's possible, that all theme smileys are hidden, + * but we won't handle it */ + any_smileys = (sl ? !purple_smiley_list_is_empty(sl) : FALSE); + + if (!any_smileys && (webview_format & PIDGIN_WEBVIEW_CUSTOM_SMILEY)) { + sl = purple_smiley_custom_get_list(); + any_smileys = (sl ? !purple_smiley_list_is_empty(sl) : FALSE); + } + + gtk_action_set_sensitive(priv->smiley, any_smileys); +} + +static void send_attention_cb(GtkAction *attention, PidginWebViewToolbar *toolbar) { PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); @@ -1067,8 +1085,9 @@ gtk_action_set_sensitive(priv->image, buttons & PIDGIN_WEBVIEW_IMAGE); gtk_action_set_sensitive(priv->link, buttons & PIDGIN_WEBVIEW_LINK); - gtk_action_set_sensitive(priv->smiley, (buttons & PIDGIN_WEBVIEW_SMILEY) && - pidgin_themes_get_proto_smileys(priv->sml)); + + priv->allow_smileys = !!(buttons & PIDGIN_WEBVIEW_SMILEY); + update_smiley_button(toolbar); } /* we call this when we want to _set_active the toggle button, it'll @@ -1352,8 +1371,6 @@ #endif } - g_free(priv->sml); - if (priv->font_menu) gtk_widget_destroy(priv->font_menu); if (priv->insert_menu) @@ -1606,13 +1623,11 @@ gtk_box_pack_start(GTK_BOX(hbox), priv->wide_view, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox), priv->lean_view, TRUE, TRUE, 0); - priv->sml = NULL; - /* set attention button to be greyed out until we get a conversation */ gtk_action_set_sensitive(priv->attention, FALSE); - gtk_action_set_sensitive(priv->smiley, - pidgin_themes_get_proto_smileys(NULL) != NULL); + priv->allow_smileys = TRUE; + update_smiley_button(toolbar); purple_prefs_connect_callback(toolbar, PIDGIN_PREFS_ROOT "/conversations/toolbar/wide", @@ -1690,15 +1705,6 @@ } void -pidgin_webviewtoolbar_associate_smileys(PidginWebViewToolbar *toolbar, - const char *proto_id) -{ - PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); - g_free(priv->sml); - priv->sml = g_strdup(proto_id); -} - -void pidgin_webviewtoolbar_switch_active_conversation(PidginWebViewToolbar *toolbar, PurpleConversation *conv) { @@ -1714,8 +1720,7 @@ conv && protocol && PURPLE_IS_IM_CONVERSATION(conv) && PURPLE_PROTOCOL_IMPLEMENTS(protocol, ATTENTION_IFACE, send)); - gtk_action_set_sensitive(priv->smiley, - pidgin_themes_get_proto_smileys(priv->sml) != NULL); + update_smiley_button(toolbar); } void @@ -1802,4 +1807,3 @@ gtk_action_activate(act); } -
--- a/pidgin/gtkwebviewtoolbar.h Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/gtkwebviewtoolbar.h Mon Apr 07 20:02:22 2014 +0530 @@ -85,16 +85,6 @@ void pidgin_webviewtoolbar_attach(PidginWebViewToolbar *toolbar, GtkWidget *webview); /** - * pidgin_webviewtoolbar_associate_smileys: - * @toolbar: The PidginWebViewToolbar object - * @proto_id: The ID of the protocol from which smileys are associated - * - * Associate the smileys from a protocol to a PidginWebViewToolbar object - */ -void pidgin_webviewtoolbar_associate_smileys(PidginWebViewToolbar *toolbar, - const char *proto_id); - -/** * pidgin_webviewtoolbar_switch_active_conversation: * @toolbar: The PidginWebViewToolbar object * @conv: The new conversation @@ -117,4 +107,3 @@ G_END_DECLS #endif /* _PIDGINWEBVIEWTOOLBAR_H_ */ -
--- a/pidgin/libpidgin.c Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/libpidgin.c Mon Apr 07 20:02:22 2014 +0530 @@ -64,9 +64,8 @@ #include "gtkroomlist.h" #include "gtksavedstatuses.h" #include "gtksession.h" -#include "gtksmiley.h" +#include "gtksmiley-theme.h" #include "gtksound.h" -#include "gtkthemes.h" #include "gtkutils.h" #include "pidginstock.h" #include "gtkwhiteboard.h" @@ -219,8 +218,6 @@ #endif - pidgin_themes_init(); - pidgin_blist_setup_sort_methods(); #ifndef _WIN32 @@ -286,7 +283,7 @@ pidgin_roomlist_init(); pidgin_log_init(); pidgin_docklet_init(); - pidgin_smileys_init(); + _pidgin_smiley_theme_init(); pidgin_utils_init(); pidgin_medias_init(); pidgin_notify_init(); @@ -305,7 +302,7 @@ /* Uninit */ pidgin_utils_uninit(); pidgin_notify_uninit(); - pidgin_smileys_uninit(); + _pidgin_smiley_theme_uninit(); pidgin_conversations_uninit(); pidgin_status_uninit(); pidgin_docklet_uninit();
--- a/pidgin/pixmaps/Makefile.am Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/pixmaps/Makefile.am Mon Apr 07 20:02:22 2014 +0530 @@ -1,12 +1,11 @@ pidginpixmapdir = $(datadir)/pixmaps/pidgin pidginiconsdir = $(datadir) -SUBDIRS = emotes/default/24 emotes/none emotes/small/16 +SUBDIRS = emotes/default/24 emotes/small/16 if INSTALL_PIXMAPS MAKEFILE_MINGW = \ emotes/default/24/Makefile.mingw \ - emotes/none/Makefile.mingw \ emotes/small/16/Makefile.mingw ANIMATIONS_16 = \
--- a/pidgin/pixmaps/emotes/none/Makefile.am Thu Apr 03 09:37:53 2014 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -pidginsmileypix_in_files = none.theme.in - -if INSTALL_PIXMAPS -pidginsmileypixdir = $(datadir)/pixmaps/pidgin/emotes/none -pidginsmileypix_DATA = theme - -theme: none.theme.in - $(AM_V_GEN) sed -e 's/^_Name=/Name=/' \ - -e 's/^_Description=/Description=/' \ - -e 's/^_Author=/Author=/' \ - $< > $@ -endif - -EXTRA_DIST = \ - $(pidginsmileypix_in_files) \ - Makefile.mingw \ - theme
--- a/pidgin/pixmaps/emotes/none/Makefile.mingw Thu Apr 03 09:37:53 2014 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -# -# Makefile.mingw -# -# Description: Makefile for win32 (mingw) version of Pidgin pixmaps -# - -PIDGIN_TREE_TOP := ../../../.. -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak - -datadir = $(PIDGIN_INSTALL_DIR) --include ./Makefile.am.mingw - -.PHONY: install clean - -install: ./Makefile.am.mingw theme - if test '$(pidginsmileypix_DATA)'; then \ - mkdir -p $(pidginsmileypixdir); \ - cp $(pidginsmileypix_DATA) $(pidginsmileypixdir); \ - fi; - -clean: - rm -f theme ./Makefile.am.mingw - -./Makefile.am.mingw: ./Makefile.am - sed -e 's/^if\ INSTALL_PIXMAPS/ifeq (\$$(INSTALL_PIXMAPS), 1)/' ./Makefile.am > $@ - include $@ -
--- a/pidgin/pixmaps/emotes/none/none.theme.in Thu Apr 03 09:37:53 2014 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -_Name=none -_Description=Selecting this disables graphical emoticons. -_Author=Penguin Pimps
--- a/pidgin/plugins/extplacement.c Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/plugins/extplacement.c Mon Apr 07 20:02:22 2014 +0530 @@ -57,6 +57,13 @@ for (l = pidgin_conv_windows_get_list(); l != NULL; l = l->next) { win = l->data; + if (!conv || !conv->active_conv || + !G_TYPE_FROM_INSTANCE(conv->active_conv)) + { + g_warn_if_reached(); + continue; + } + if (purple_prefs_get_bool("/plugins/gtk/extplacement/placement_number_separate") && G_TYPE_FROM_INSTANCE(pidgin_conv_window_get_active_conversation(win)) != G_TYPE_FROM_INSTANCE(conv->active_conv)) continue;
--- a/pidgin/plugins/perl/Makefile.am Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/plugins/perl/Makefile.am Mon Apr 07 20:02:22 2014 +0530 @@ -21,7 +21,6 @@ common/GtkSession.xs \ common/GtkSound.xs \ common/GtkStatusBox.xs \ - common/GtkThemes.xs \ common/GtkUtils.xs \ common/Makefile.PL.in \ common/Pidgin.pm \
--- a/pidgin/plugins/perl/common/GtkThemes.xs Thu Apr 03 09:37:53 2014 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -#include "gtkmodule.h" - -MODULE = Pidgin::Themes PACKAGE = Pidgin::Themes PREFIX = pidgin_themes_ -PROTOTYPES: ENABLE - -void -pidgin_themes_init() - -gboolean -pidgin_themes_smileys_disabled() - -void -pidgin_themes_smiley_theme_probe() - -void -pidgin_themes_load_smiley_theme(file, load) - const char * file - gboolean load - -# We are dropping IMHtml, so this one should be converted to non-IMHtml -# smiley or dropped. -#void -#pidgin_themes_get_proto_smileys(id) -# const char * id -#PREINIT: -# GSList *l; -#PPCODE: -# for (l = pidgin_themes_get_proto_smileys(id); l != NULL; l = l->next) { -# XPUSHs(sv_2mortal(purple_perl_bless_object(l->data, "Pidgin::IMHtml::Smiley"))); -# }
--- a/pidgin/plugins/perl/common/MANIFEST Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/plugins/perl/common/MANIFEST Mon Apr 07 20:02:22 2014 +0530 @@ -18,7 +18,6 @@ GtkSession.xs GtkSound.xs GtkStatusBox.xs -GtkThemes.xs GtkUtils.xs MANIFEST Pidgin.pm
--- a/pidgin/plugins/perl/common/Makefile.mingw Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/plugins/perl/common/Makefile.mingw Mon Apr 07 20:02:22 2014 +0530 @@ -69,7 +69,6 @@ GtkSavedStatuses.xs \ GtkSound.xs \ GtkStatusBox.xs \ - GtkThemes.xs \ GtkUtils.xs
--- a/pidgin/plugins/perl/common/Pidgin.xs Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/plugins/perl/common/Pidgin.xs Mon Apr 07 20:02:22 2014 +0530 @@ -28,7 +28,6 @@ #endif PIDGIN_PERL_BOOT_PROTO(Sound); PIDGIN_PERL_BOOT_PROTO(StatusBox); -PIDGIN_PERL_BOOT_PROTO(Themes); PIDGIN_PERL_BOOT_PROTO(Utils); PIDGIN_PERL_BOOT_PROTO(Xfer); @@ -57,6 +56,5 @@ #endif PIDGIN_PERL_BOOT(Sound); PIDGIN_PERL_BOOT(StatusBox); - PIDGIN_PERL_BOOT(Themes); PIDGIN_PERL_BOOT(Utils); PIDGIN_PERL_BOOT(Xfer);
--- a/pidgin/plugins/perl/common/gtkmodule.h Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/plugins/perl/common/gtkmodule.h Mon Apr 07 20:02:22 2014 +0530 @@ -43,7 +43,6 @@ #include "gtksession.h" #include "gtksound.h" #include "gtkstatusbox.h" -#include "gtkthemes.h" #include "gtkutils.h" /* gtkaccount.h */
--- a/pidgin/smileyparser.c Thu Apr 03 09:37:53 2014 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,171 +0,0 @@ -/* 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 <gtk/gtk.h> -#include <debug.h> -#include "smileyparser.h" -#include <smiley.h> -#include <string.h> -#include "gtkthemes.h" - -static char * -get_fullpath(const char *filename) -{ - if (g_path_is_absolute(filename)) - return g_strdup(filename); - else - return g_build_path(g_get_current_dir(), filename, NULL); -} - -static void -parse_for_shortcut_plaintext(const char *text, const char *shortcut, const char *file, GString *ret) -{ - const char *tmp = text; - - for (;*tmp;) { - const char *end = strstr(tmp, shortcut); - char *path; - char *escaped_path; - - if (end == NULL) { - g_string_append(ret, tmp); - break; - } - path = get_fullpath(file); - escaped_path = g_markup_escape_text(path, -1); - - g_string_append_len(ret, tmp, end-tmp); - g_string_append_printf(ret,"<img alt='%s' src='%s' />", - shortcut, escaped_path); - g_free(path); - g_free(escaped_path); - g_assert(strlen(tmp) >= strlen(shortcut)); - tmp = end + strlen(shortcut); - } -} - -static char * -parse_for_shortcut(const char *markup, const char *shortcut, const char *file) -{ - GString* ret = g_string_new(""); - char *local_markup = g_strdup(markup); - char *escaped_shortcut = g_markup_escape_text(shortcut, -1); - - char *temp = local_markup; - - for (;*temp;) { - char *end = strchr(temp, '<'); - char *end_of_tag; - - if (!end) { - parse_for_shortcut_plaintext(temp, escaped_shortcut, file, ret); - break; - } - - *end = 0; - parse_for_shortcut_plaintext(temp, escaped_shortcut, file, ret); - *end = '<'; - - /* if this is well-formed, then there should be no '>' within - * the tag. TODO: handle a comment tag better :( */ - end_of_tag = strchr(end, '>'); - if (!end_of_tag) { - g_string_append(ret, end); - break; - } - - g_string_append_len(ret, end, end_of_tag - end + 1); - - temp = end_of_tag + 1; - } - g_free(local_markup); - g_free(escaped_shortcut); - return g_string_free(ret, FALSE); -} - -static char * -parse_for_purple_smiley(const char *markup, PurpleSmiley *smiley) -{ - char *file = purple_smiley_get_full_path(smiley); - char *ret = parse_for_shortcut(markup, purple_smiley_get_shortcut(smiley), file); - g_free(file); - return ret; -} - -static char * -parse_for_smiley_list(const char *markup, GHashTable *smileys) -{ - GHashTableIter iter; - char *key, *value; - char *ret = g_strdup(markup); - - g_hash_table_iter_init(&iter, smileys); - while (g_hash_table_iter_next(&iter, (gpointer *)&key, (gpointer *)&value)) - { - char *temp = parse_for_shortcut(ret, key, value); - g_free(ret); - ret = temp; - } - - return ret; -} - -char * -pidgin_smiley_parse_markup(const char *markup, const char *proto_id) -{ - GList *smileys = purple_smileys_get_all(); - char *temp = g_strdup(markup), *temp2; - struct PidginSmileyList *list; - const char *proto_name = "default"; - - if (proto_id != NULL) { - PurpleProtocol *protocol; - protocol = purple_protocols_find(proto_id); - proto_name = purple_protocol_get_name(protocol); - } - - /* unnecessarily slow, but lets manage for now. */ - for (; smileys; smileys = g_list_next(smileys)) { - temp2 = parse_for_purple_smiley(temp, PURPLE_SMILEY(smileys->data)); - g_free(temp); - temp = temp2; - } - - /* now for each theme smiley, observe that this does look nasty */ - if (!current_smiley_theme) { - purple_debug_warning("smiley", "theme does not exist\n"); - return temp; - } - - for (list = current_smiley_theme->list; list; list = list->next) { - if (g_str_equal(list->sml, "default") || - g_str_equal(list->sml, proto_name)) - { - temp2 = parse_for_smiley_list(temp, list->files); - g_free(temp); - temp = temp2; - } - } - - return temp; -} -
--- a/pidgin/smileyparser.h Thu Apr 03 09:37:53 2014 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* 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_SMILEYPARSER_H_ -#define _PIDGIN_SMILEYPARSER_H_ -/** - * SECTION:smileyparser - * @section_id: pidgin-smileyparser - * @short_description: <filename>smileyparser.h</filename> - * @title: Smiley Parser - */ - -G_BEGIN_DECLS - -char * -pidgin_smiley_parse_markup(const char *markup, const char *sml); - -G_END_DECLS - -#endif /* _PIDGIN_SMILEYPARSER_H_ */
--- a/pidgin/themes/Contents/Resources/main.css Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/themes/Contents/Resources/main.css Mon Apr 07 20:02:22 2014 +0530 @@ -75,3 +75,14 @@ font-weight: bold; } +/* Emoticons */ + +.emoticon +{ + vertical-align: bottom; +} + +.emoticon.pending +{ + cursor: progress; +}
--- a/pidgin/themes/Template.html Thu Apr 03 09:37:53 2014 +0530 +++ b/pidgin/themes/Template.html Mon Apr 07 20:02:22 2014 +0530 @@ -234,64 +234,44 @@ head.appendChild( documentFragment ); } - /* Converts emoticon images to textual emoticons; all emoticons in message if alt is held */ - document.onclick = function imageCheck() { - var node = event.target; - if (node.tagName.toLowerCase() != 'img') + //If true is passed, view will be scrolled down + function alignChat(shouldScroll) { + if (!shouldScroll) return; - imageSwap(node, false); + scrollToBottom(); + /* wait for images to load and scroll again */ + setTimeout(scrollToBottom, 10); } - /* Converts textual emoticons to images if textToImagesFlag is true, otherwise vice versa */ - function imageSwap(node, textToImagesFlag) { + function emoticonIsReady(emoticonId, url) { var shouldScroll = nearBottom(); + var emoticons; - var images = [node]; - if (event.altKey) { - while (node.id != "Chat" && node.parentNode.id != "Chat") - node = node.parentNode; - images = node.querySelectorAll(textToImagesFlag ? "a" : "img"); - } + /* There is a possible race condition: if we call this + * before the span.emoticon.pending is added, the latter + * won't be converted. + * + * We could avoid this, by calling it again using + * setTimeout, but it may affect performance. So, we + * won't do it until anyone complains. + */ - for (var i = 0; i < images.length; i++) { - textToImagesFlag ? textToImage(images[i]) : imageToText(images[i]); + emoticons = document.getElementsByClassName('emoticon-id-' + emoticonId); + for (var i = 0; i < emoticons.length; i++) { + var node = emoticons[i]; + var img = document.createElement('img'); + var alt = node.textContent.trim(); + img.setAttribute('src', url); + img.setAttribute('alt', alt); + img.setAttribute('title', alt); + img.className = 'emoticon'; + node.parentNode.replaceChild(img, node); } alignChat(shouldScroll); } - function textToImage(node) { - if (!node.getAttribute("isEmoticon")) - return; - //Swap the image/text - var img = document.createElement('img'); - img.setAttribute('src', node.getAttribute('src')); - img.setAttribute('alt', node.firstChild.nodeValue); - img.className = node.className; - node.parentNode.replaceChild(img, node); - } - - function imageToText(node) - { - if (client.zoomImage(node) || !node.alt) - return; - var a = document.createElement('a'); - a.setAttribute('onclick', 'imageSwap(this, true)'); - a.setAttribute('src', node.getAttribute('src')); - a.setAttribute('isEmoticon', true); - a.className = node.className; - var text = document.createTextNode(node.alt); - a.appendChild(text); - node.parentNode.replaceChild(a, node); - } - - //If true is passed, view will be scrolled down - function alignChat(shouldScroll) { - if (shouldScroll) - scrollToBottom(); - } - window.onresize = function windowDidResize(){ alignChat(true/*nearBottom()*/); //nearBottom buggy with inactive tabs }
--- a/po/POTFILES.in Thu Apr 03 09:37:53 2014 +0530 +++ b/po/POTFILES.in Mon Apr 07 20:02:22 2014 +0530 @@ -226,7 +226,7 @@ pidgin/gtkrequest.c pidgin/gtkroomlist.c pidgin/gtksavedstatuses.c -pidgin/gtksmiley.c +pidgin/gtksmiley-manager.c pidgin/gtksound.c pidgin/gtkstatusbox.c pidgin/gtkutils.c @@ -239,7 +239,6 @@ pidgin/pidginstock.c pidgin/pidgintooltip.c pidgin/pixmaps/emotes/default/24/default.theme.in -pidgin/pixmaps/emotes/none/none.theme.in pidgin/pixmaps/emotes/small/16/small.theme.in pidgin/plugins/cap/cap.c pidgin/plugins/contact_priority.c
--- a/po/de.po Thu Apr 03 09:37:53 2014 +0530 +++ b/po/de.po Mon Apr 07 20:02:22 2014 +0530 @@ -12,9 +12,9 @@ msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-07-18 21:40+0200\n" -"PO-Revision-Date: 2013-07-18 21:38+0200\n" -"Last-Translator: Jochen Kemnade <jochenkemnade@web.de>\n" +"POT-Creation-Date: 2014-04-01 00:00+0200\n" +"PO-Revision-Date: 2014-03-31 23:50+0200\n" +"Last-Translator: Björn Voigt <bjoern@cs.tu-berlin.de>\n" "Language-Team: German <de@li.org>\n" "Language: de\n" "MIME-Version: 1.0\n" @@ -9962,6 +9962,9 @@ msgid "Start Doodling" msgstr "Anfangen zu malen" +msgid "Activate which ID?" +msgstr "Aktiviere welche ID?" + msgid "Select the ID you want to activate" msgstr "Wählen Sie die ID die Sie aktivieren möchten" @@ -11680,9 +11683,6 @@ msgid "Hungarian" msgstr "Ungarisch" -msgid "Armenian" -msgstr "Armenisch" - msgid "Indonesian" msgstr "Indonesisch" @@ -11698,6 +11698,9 @@ msgid "Ubuntu Georgian Translators" msgstr "Ubuntu-Georgisch-Übersetzer" +msgid "Kazakh" +msgstr "Kasachisch" + msgid "Khmer" msgstr "Khmer" @@ -11713,12 +11716,12 @@ msgid "Kurdish" msgstr "Kurdisch" -msgid "Lao" -msgstr "Laotisch" - msgid "Lithuanian" msgstr "Litauisch" +msgid "Latvian" +msgstr "Lettisch" + msgid "Maithili" msgstr "Maithili" @@ -11737,9 +11740,6 @@ msgid "Marathi" msgstr "Marathi" -msgid "Malay" -msgstr "Malaiisch" - msgid "Burmese" msgstr "Birmanisch" @@ -11815,6 +11815,9 @@ msgid "Thai" msgstr "Thailändisch" +msgid "Tatar" +msgstr "Tatarisch" + msgid "Ukranian" msgstr "Ukrainisch" @@ -11836,6 +11839,15 @@ msgid "Amharic" msgstr "Amharisch" +msgid "Armenian" +msgstr "Armenisch" + +msgid "Lao" +msgstr "Laotisch" + +msgid "Malay" +msgstr "Malaiisch" + msgid "Turkish" msgstr "Türkisch"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/po/lv.po Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,19813 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Pidgin\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-03-18 09:57-0500\n" +"PO-Revision-Date: 2014-03-19 22:22+0000\n" +"Last-Translator: Richard Laager <rlaager@wiktel.com>\n" +"Language-Team: Latvian (http://www.transifex.com/projects/p/pidgin/language/lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" + +#. Translators may want to transliterate the name. +#. It is not to be translated. +#: ../finch/finch.c:66 ../finch/finch.c:336 ../finch/finch.c:365 +#: ../finch/finch.c:454 +msgid "Finch" +msgstr "" + +#: ../finch/finch.c:247 +#, c-format +msgid "%s. Try `%s -h' for more information.\n" +msgstr "" + +#: ../finch/finch.c:249 +#, 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 "" + +#: ../finch/finch.c:363 ../pidgin/gtkmain.c:772 +#, 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 "" + +#. the user did not fill in the captcha +#: ../finch/gntaccount.c:128 ../finch/gntaccount.c:171 +#: ../finch/gntaccount.c:178 ../finch/gntaccount.c:558 ../finch/gntblist.c:647 +#: ../finch/gntblist.c:817 ../finch/gntplugin.c:198 ../finch/gntplugin.c:246 +#: ../finch/gntrequest.c:398 ../finch/gntstatus.c:303 ../finch/gntstatus.c:312 +#: ../finch/plugins/gntclipboard.c:115 ../finch/plugins/gntclipboard.c:121 +#: ../finch/plugins/gntclipboard.c:128 +#: ../libpurple/protocols/jabber/chat.c:812 +#: ../libpurple/protocols/jabber/chat.c:823 +#: ../libpurple/protocols/jabber/jabber.c:2352 +#: ../libpurple/protocols/jabber/jutil.c:708 +#: ../libpurple/protocols/mxit/login.c:526 +#: ../libpurple/protocols/mxit/protocol.c:2543 +#: ../libpurple/protocols/silc/ops.c:77 ../libpurple/protocols/silc/ops.c:1472 +#: ../libpurple/protocols/silc10/ops.c:1451 +#: ../pidgin/plugins/disco/xmppdisco.c:514 +#: ../pidgin/plugins/disco/xmppdisco.c:519 +msgid "Error" +msgstr "" + +#: ../finch/gntaccount.c:129 ../finch/gntaccount.c:171 +#: ../finch/gntaccount.c:178 +msgid "Account was not modified" +msgstr "" + +#: ../finch/gntaccount.c:129 +msgid "Account was not added" +msgstr "" + +#: ../finch/gntaccount.c:130 +msgid "Username of an account must be non-empty." +msgstr "" + +#: ../finch/gntaccount.c:172 +msgid "" +"The account's protocol cannot be changed while it is connected to the " +"server." +msgstr "" + +#: ../finch/gntaccount.c:179 +msgid "" +"The account's username cannot be changed while it is connected to the " +"server." +msgstr "" + +#: ../finch/gntaccount.c:510 +msgid "New mail notifications" +msgstr "" + +#: ../finch/gntaccount.c:520 +msgid "Remember password" +msgstr "" + +#: ../finch/gntaccount.c:559 +msgid "There are no protocol plugins installed." +msgstr "" + +#: ../finch/gntaccount.c:560 +msgid "(You probably forgot to 'make install'.)" +msgstr "" + +#: ../finch/gntaccount.c:570 ../finch/gntconn.c:138 +#: ../pidgin/gtkaccount.c:1576 ../pidgin/gtkblist.c:5127 +msgid "Modify Account" +msgstr "" + +#: ../finch/gntaccount.c:570 +msgid "New Account" +msgstr "" + +#: ../finch/gntaccount.c:596 ../pidgin/gtkft.c:651 +msgid "Protocol:" +msgstr "" + +#: ../finch/gntaccount.c:604 +#: ../pidgin/plugins/gevolution/new_person_dialog.c:288 +msgid "Username:" +msgstr "" + +#: ../finch/gntaccount.c:617 +msgid "Password:" +msgstr "" + +#: ../finch/gntaccount.c:627 +msgid "Alias:" +msgstr "" + +#. Register checkbox +#: ../finch/gntaccount.c:638 +msgid "Create this account on the server" +msgstr "" + +#. Cancel button +#. Cancel +#: ../finch/gntaccount.c:654 ../finch/gntaccount.c:718 +#: ../finch/gntaccount.c:1014 ../finch/gntblist.c:700 ../finch/gntblist.c:806 +#: ../finch/gntblist.c:854 ../finch/gntblist.c:1210 ../finch/gntblist.c:1449 +#: ../finch/gntblist.c:1583 ../finch/gntblist.c:2762 ../finch/gntblist.c:2813 +#: ../finch/gntblist.c:2887 ../finch/gntblist.c:2949 ../finch/gntcertmgr.c:91 +#: ../finch/gntplugin.c:534 ../finch/gntpounce.c:473 ../finch/gntpounce.c:681 +#: ../finch/gntprefs.c:266 ../finch/gntsound.c:1081 ../finch/gntstatus.c:147 +#: ../finch/gntstatus.c:487 ../finch/gntstatus.c:612 +#: ../finch/plugins/gnthistory.c:182 ../libpurple/account.c:1222 +#: ../libpurple/account.c:1585 ../libpurple/account.c:1620 +#: ../libpurple/conversation.c:1311 ../libpurple/conversation.c:2147 +#: ../libpurple/plugins/buddynote.c:51 ../libpurple/protocols/gg/gg.c:336 +#: ../libpurple/protocols/gg/gg.c:391 ../libpurple/protocols/gg/gg.c:456 +#: ../libpurple/protocols/jabber/buddy.c:681 +#: ../libpurple/protocols/jabber/buddy.c:2214 +#: ../libpurple/protocols/jabber/buddy.c:2263 +#: ../libpurple/protocols/jabber/chat.c:922 +#: ../libpurple/protocols/jabber/jabber.c:1467 +#: ../libpurple/protocols/jabber/jabber.c:1478 +#: ../libpurple/protocols/jabber/jabber.c:2558 +#: ../libpurple/protocols/jabber/jabber.c:3422 +#: ../libpurple/protocols/jabber/si.c:1584 +#: ../libpurple/protocols/jabber/usernick.c:83 +#: ../libpurple/protocols/jabber/xdata.c:404 +#: ../libpurple/protocols/msn/msn.c:452 ../libpurple/protocols/msn/msn.c:577 +#: ../libpurple/protocols/msn/msn.c:640 ../libpurple/protocols/msn/msn.c:655 +#: ../libpurple/protocols/msn/msn.c:672 ../libpurple/protocols/msn/msn.c:689 +#: ../libpurple/protocols/msn/msn.c:710 +#: ../libpurple/protocols/mxit/actions.c:314 +#: ../libpurple/protocols/mxit/actions.c:412 +#: ../libpurple/protocols/mxit/login.c:365 +#: ../libpurple/protocols/mxit/login.c:711 +#: ../libpurple/protocols/myspace/user.c:824 +#: ../libpurple/protocols/myspace/user.c:885 +#: ../libpurple/protocols/oscar/oscar.c:5220 +#: ../libpurple/protocols/oscar/peer.c:1071 +#: ../libpurple/protocols/sametime/sametime.c:3471 +#: ../libpurple/protocols/sametime/sametime.c:3557 +#: ../libpurple/protocols/sametime/sametime.c:5456 +#: ../libpurple/protocols/sametime/sametime.c:5546 +#: ../libpurple/protocols/sametime/sametime.c:5671 +#: ../libpurple/protocols/silc/buddy.c:459 +#: ../libpurple/protocols/silc/buddy.c:1084 +#: ../libpurple/protocols/silc/buddy.c:1199 +#: ../libpurple/protocols/silc/chat.c:622 +#: ../libpurple/protocols/silc/chat.c:756 +#: ../libpurple/protocols/silc/ops.c:1832 +#: ../libpurple/protocols/silc/silc.c:1063 +#: ../libpurple/protocols/silc/silc.c:1271 +#: ../libpurple/protocols/silc10/buddy.c:468 +#: ../libpurple/protocols/silc10/buddy.c:1087 +#: ../libpurple/protocols/silc10/buddy.c:1192 +#: ../libpurple/protocols/silc10/chat.c:600 +#: ../libpurple/protocols/silc10/chat.c:730 +#: ../libpurple/protocols/silc10/ops.c:1910 +#: ../libpurple/protocols/silc10/silc.c:761 +#: ../libpurple/protocols/silc10/silc.c:967 +#: ../libpurple/protocols/yahoo/libymsg.c:1369 +#: ../libpurple/protocols/yahoo/libymsg.c:4575 +#: ../libpurple/protocols/yahoo/libymsg.c:4586 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:589 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:600 +#: ../pidgin/gtkaccount.c:1945 ../pidgin/gtkaccount.c:2480 +#: ../pidgin/gtkblist.c:705 ../pidgin/gtkblist.c:3582 +#: ../pidgin/gtkblist.c:7321 ../pidgin/gtkcertmgr.c:195 +#: ../pidgin/gtkdialogs.c:902 ../pidgin/gtkdialogs.c:1041 +#: ../pidgin/gtkdialogs.c:1133 ../pidgin/gtkdialogs.c:1153 +#: ../pidgin/gtkdialogs.c:1177 ../pidgin/gtkdialogs.c:1199 +#: ../pidgin/gtkdialogs.c:1247 ../pidgin/gtkdialogs.c:1288 +#: ../pidgin/gtkdialogs.c:1344 ../pidgin/gtkdialogs.c:1383 +#: ../pidgin/gtkdialogs.c:1410 ../pidgin/gtkimhtmltoolbar.c:451 +#: ../pidgin/gtklog.c:324 ../pidgin/gtkplugin.c:308 ../pidgin/gtkpounce.c:1127 +#: ../pidgin/gtkprivacy.c:497 ../pidgin/gtkprivacy.c:513 +#: ../pidgin/gtkprivacy.c:538 ../pidgin/gtkprivacy.c:552 +#: ../pidgin/gtkrequest.c:301 ../pidgin/gtksavedstatuses.c:317 +#: ../pidgin/gtkstatusbox.c:1611 ../pidgin/gtkutils.c:1620 +#: ../pidgin/gtkutils.c:1640 ../pidgin/plugins/disco/gtkdisco.c:246 +msgid "Cancel" +msgstr "" + +#. Save button +#. Save +#: ../finch/gntaccount.c:658 ../finch/gntcertmgr.c:311 ../finch/gntdebug.c:341 +#: ../finch/gntplugin.c:534 ../finch/gntpounce.c:479 ../finch/gntprefs.c:266 +#: ../finch/gntsound.c:1078 ../finch/gntstatus.c:490 ../finch/gntstatus.c:600 +#: ../libpurple/account.c:1619 ../libpurple/plugins/buddynote.c:50 +#: ../libpurple/protocols/jabber/buddy.c:680 ../pidgin/gtkblist.c:705 +#: ../pidgin/gtkdebug.c:824 ../pidgin/gtkdebug.c:826 +#: ../pidgin/gtkrequest.c:307 +msgid "Save" +msgstr "" + +#: ../finch/gntaccount.c:711 ../pidgin/gtkaccount.c:1936 +#: ../pidgin/gtksavedstatuses.c:305 ../pidgin/gtkstatusbox.c:1605 +#, c-format +msgid "Are you sure you want to delete %s?" +msgstr "" + +#: ../finch/gntaccount.c:714 +msgid "Delete Account" +msgstr "" + +#. Delete button +#: ../finch/gntaccount.c:717 ../finch/gntaccount.c:832 +#: ../finch/gntcertmgr.c:319 ../finch/gntpounce.c:680 ../finch/gntpounce.c:743 +#: ../finch/gntstatus.c:146 ../finch/gntstatus.c:212 +#: ../pidgin/gtkaccount.c:1944 ../pidgin/gtklog.c:323 +#: ../pidgin/gtkpounce.c:1126 ../pidgin/gtkrequest.c:304 +#: ../pidgin/gtksavedstatuses.c:316 ../pidgin/gtkstatusbox.c:1610 +msgid "Delete" +msgstr "" + +#: ../finch/gntaccount.c:793 ../finch/gntblist.c:2628 ../finch/gntui.c:99 +#: ../pidgin/gtkaccount.c:2341 +msgid "Accounts" +msgstr "" + +#: ../finch/gntaccount.c:799 +msgid "You can enable/disable accounts from the following list." +msgstr "" + +#. Add button +#: ../finch/gntaccount.c:823 ../finch/gntaccount.c:1013 +#: ../finch/gntblist.c:699 ../finch/gntblist.c:806 ../finch/gntblist.c:854 +#: ../finch/gntblist.c:3069 ../finch/gntcertmgr.c:306 ../finch/gntnotify.c:452 +#: ../finch/gntpounce.c:727 ../finch/gntroomlist.c:276 +#: ../finch/gntstatus.c:201 ../libpurple/protocols/gg/gg.c:455 +#: ../libpurple/protocols/sametime/sametime.c:5545 +#: ../libpurple/protocols/silc/chat.c:621 +#: ../libpurple/protocols/silc10/chat.c:599 ../pidgin/gtkaccount.c:2479 +#: ../pidgin/gtkblist.c:7320 ../pidgin/gtkconv.c:1692 +#: ../pidgin/gtkrequest.c:305 +msgid "Add" +msgstr "" + +#. Modify button +#: ../finch/gntaccount.c:828 ../finch/gntpounce.c:735 +msgid "Modify" +msgstr "" + +#: ../finch/gntaccount.c:936 ../pidgin/gtkaccount.c:2426 +#, c-format +msgid "%s%s%s%s has made %s his or her buddy%s%s" +msgstr "" + +#: ../finch/gntaccount.c:1009 ../pidgin/gtkaccount.c:2478 +msgid "Add buddy to your list?" +msgstr "" + +#: ../finch/gntaccount.c:1069 +#, c-format +msgid "%s%s%s%s wants to add %s to his or her buddy list%s%s" +msgstr "" + +#: ../finch/gntaccount.c:1094 ../finch/gntaccount.c:1097 +#: ../finch/gntaccount.c:1124 ../pidgin/gtkaccount.c:2611 +msgid "Authorize buddy?" +msgstr "" + +#: ../finch/gntaccount.c:1101 ../finch/gntaccount.c:1128 +#: ../pidgin/gtkaccount.c:2612 +msgid "Authorize" +msgstr "" + +#: ../finch/gntaccount.c:1102 ../finch/gntaccount.c:1129 +#: ../pidgin/gtkaccount.c:2613 +msgid "Deny" +msgstr "" + +#: ../finch/gntblist.c:278 +#, c-format +msgid "" +"Online: %d\n" +"Total: %d" +msgstr "" + +#: ../finch/gntblist.c:287 +#, c-format +msgid "Account: %s (%s)" +msgstr "" + +#: ../finch/gntblist.c:299 +#, c-format +msgid "" +"\n" +"Last Seen: %s ago" +msgstr "" + +#: ../finch/gntblist.c:319 ../pidgin/gtkprefs.c:422 ../pidgin/gtkprefs.c:543 +#: ../pidgin/gtkprefs.c:551 +#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:1 +#: ../pidgin/plugins/vvconfig.c:87 +msgid "Default" +msgstr "" + +#: ../finch/gntblist.c:636 +msgid "You must provide a username for the buddy." +msgstr "" + +#: ../finch/gntblist.c:638 +msgid "You must provide a group." +msgstr "" + +#: ../finch/gntblist.c:640 +msgid "You must select an account." +msgstr "" + +#: ../finch/gntblist.c:642 +msgid "The selected account is not online." +msgstr "" + +#: ../finch/gntblist.c:647 +msgid "Error adding buddy" +msgstr "" + +#: ../finch/gntblist.c:678 ../libpurple/protocols/jabber/jabber.c:1401 +#: ../libpurple/protocols/jabber/jabber.c:1403 +#: ../libpurple/protocols/oscar/oscar.c:3023 +#: ../libpurple/protocols/silc/buddy.c:1552 +#: ../libpurple/protocols/silc/ops.c:1209 +#: ../libpurple/protocols/silc/ops.c:1212 +#: ../libpurple/protocols/silc/ops.c:1348 +#: ../libpurple/protocols/silc/ops.c:1351 +#: ../libpurple/protocols/silc/silc.c:1245 +#: ../libpurple/protocols/silc10/buddy.c:1559 +#: ../libpurple/protocols/silc10/ops.c:1191 +#: ../libpurple/protocols/silc10/ops.c:1194 +#: ../libpurple/protocols/silc10/ops.c:1340 +#: ../libpurple/protocols/silc10/ops.c:1343 +#: ../libpurple/protocols/silc10/silc.c:941 ../pidgin/gtkaccount.c:2018 +#: ../pidgin/gtksavedstatuses.c:951 +msgid "Username" +msgstr "" + +#: ../finch/gntblist.c:681 +msgid "Alias (optional)" +msgstr "" + +#: ../finch/gntblist.c:684 +msgid "Invite message (optional)" +msgstr "" + +#: ../finch/gntblist.c:687 +msgid "Add in group" +msgstr "" + +#: ../finch/gntblist.c:691 ../finch/gntblist.c:785 ../finch/gntblist.c:1794 +#: ../finch/gntblist.c:2743 ../finch/gntblist.c:2799 ../finch/gntblist.c:2874 +#: ../finch/gntblist.c:2934 ../finch/gntnotify.c:192 ../finch/gntstatus.c:578 +#: ../libpurple/plugins/idle.c:149 ../libpurple/plugins/idle.c:186 +#: ../pidgin/gtkblist.c:3779 ../pidgin/gtknotify.c:712 +#: ../pidgin/gtkpounce.c:1278 ../pidgin/plugins/gevolution/gevolution.c:456 +msgid "Account" +msgstr "" + +#: ../finch/gntblist.c:697 ../finch/gntblist.c:1259 +#: ../libpurple/protocols/silc/buddy.c:730 +#: ../libpurple/protocols/silc/buddy.c:1035 +#: ../libpurple/protocols/silc/buddy.c:1080 +#: ../libpurple/protocols/silc/buddy.c:1190 +#: ../libpurple/protocols/silc10/buddy.c:737 +#: ../libpurple/protocols/silc10/buddy.c:1036 +#: ../libpurple/protocols/silc10/buddy.c:1083 +#: ../libpurple/protocols/silc10/buddy.c:1183 +#: ../libpurple/protocols/yahoo/libymsg.c:4383 ../pidgin/gtkblist.c:7083 +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:451 +msgid "Add Buddy" +msgstr "" + +#: ../finch/gntblist.c:697 +msgid "Please enter buddy information." +msgstr "" + +#: ../finch/gntblist.c:753 ../libpurple/blist.c:1495 +msgid "Chats" +msgstr "" + +#. Extract their Name and put it in +#: ../finch/gntblist.c:791 ../finch/gntblist.c:2738 ../finch/gntblist.c:2794 +#: ../finch/gntblist.c:2929 ../finch/gntroomlist.c:300 +#: ../libpurple/protocols/jabber/jabber.c:1424 +#: ../libpurple/protocols/jabber/jabber.c:1428 +#: ../libpurple/protocols/msn/msn.c:529 ../libpurple/protocols/msn/msn.c:2411 +#: ../libpurple/protocols/msn/msn.c:2476 ../libpurple/protocols/msn/msn.c:2503 +#: ../pidgin/gtkplugin.c:765 ../pidgin/gtkroomlist.c:740 +#: ../pidgin/plugins/disco/gtkdisco.c:554 +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:131 +#: ../pidgin/plugins/gevolution/assoc-buddy.c:122 +msgid "Name" +msgstr "" + +#: ../finch/gntblist.c:794 ../finch/gntblist.c:1735 +#: ../libpurple/protocols/gg/gg.c:1569 ../libpurple/protocols/msn/msn.c:2237 +#: ../libpurple/protocols/mxit/profile.c:206 +#: ../libpurple/protocols/silc/chat.c:612 +#: ../libpurple/protocols/silc10/chat.c:590 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:704 +#: ../libpurple/protocols/zephyr/zephyr.c:797 +#: ../libpurple/protocols/zephyr/zephyr.c:1181 ../pidgin/gtkdialogs.c:1152 +#: ../pidgin/gtkdialogs.c:1176 ../pidgin/gtkdialogs.c:1198 +#: ../pidgin/gtkrequest.c:308 +msgid "Alias" +msgstr "" + +#: ../finch/gntblist.c:797 ../finch/gntblist.c:3085 +#: ../pidgin/plugins/themeedit.c:255 +msgid "Group" +msgstr "" + +#: ../finch/gntblist.c:801 ../finch/gntblist.c:1226 +msgid "Auto-join" +msgstr "" + +#: ../finch/gntblist.c:804 ../finch/gntblist.c:1261 ../pidgin/gtkblist.c:7261 +msgid "Add Chat" +msgstr "" + +#: ../finch/gntblist.c:805 +msgid "You can edit more information from the context menu later." +msgstr "" + +#: ../finch/gntblist.c:817 +msgid "Error adding group" +msgstr "" + +#: ../finch/gntblist.c:818 +msgid "You must give a name for the group to add." +msgstr "" + +#: ../finch/gntblist.c:852 ../finch/gntblist.c:1263 +#: ../libpurple/protocols/sametime/sametime.c:5455 +#: ../libpurple/protocols/sametime/sametime.c:5543 ../pidgin/gtkblist.c:7317 +msgid "Add Group" +msgstr "" + +#: ../finch/gntblist.c:852 +msgid "Enter the name of the group" +msgstr "" + +#: ../finch/gntblist.c:1209 ../pidgin/gtkblist.c:704 +msgid "Edit Chat" +msgstr "" + +#: ../finch/gntblist.c:1209 +msgid "Please Update the necessary fields." +msgstr "" + +#: ../finch/gntblist.c:1210 ../finch/gntstatus.c:207 +msgid "Edit" +msgstr "" + +#: ../finch/gntblist.c:1235 +msgid "Edit Settings" +msgstr "" + +#: ../finch/gntblist.c:1271 ../pidgin/gtkutils.c:1003 +msgid "Information" +msgstr "" + +#: ../finch/gntblist.c:1271 ../pidgin/gtkutils.c:1003 +msgid "Retrieving..." +msgstr "" + +#: ../finch/gntblist.c:1336 ../finch/gntconv.c:629 +#: ../libpurple/protocols/silc/chat.c:910 +#: ../libpurple/protocols/silc10/chat.c:883 +msgid "Get Info" +msgstr "" + +#: ../finch/gntblist.c:1340 ../pidgin/gtkpounce.c:535 +msgid "Add Buddy Pounce" +msgstr "" + +#: ../finch/gntblist.c:1347 ../finch/gntconv.c:641 +#: ../libpurple/protocols/jabber/si.c:1584 +#: ../libpurple/protocols/oscar/userinfo.c:58 ../pidgin/gtkconv.c:1631 +msgid "Send File" +msgstr "" + +#: ../finch/gntblist.c:1354 ../libpurple/protocols/gg/gg.c:1628 +#: ../libpurple/protocols/msn/msn.c:1125 +msgid "Blocked" +msgstr "" + +#: ../finch/gntblist.c:1359 +msgid "Show when offline" +msgstr "" + +#: ../finch/gntblist.c:1444 +#, c-format +msgid "Please enter the new name for %s" +msgstr "" + +#: ../finch/gntblist.c:1446 ../finch/gntblist.c:1735 +msgid "Rename" +msgstr "" + +#: ../finch/gntblist.c:1446 +msgid "Set Alias" +msgstr "" + +#: ../finch/gntblist.c:1447 +msgid "Enter empty string to reset the name." +msgstr "" + +#: ../finch/gntblist.c:1561 +msgid "Removing this contact will also remove all the buddies in the contact" +msgstr "" + +#: ../finch/gntblist.c:1569 +msgid "Removing this group will also remove all the buddies in the group" +msgstr "" + +#: ../finch/gntblist.c:1574 +#, c-format +msgid "Are you sure you want to remove %s?" +msgstr "" + +#. XXX: anything to do with the returned ui-handle? +#: ../finch/gntblist.c:1577 +msgid "Confirm Remove" +msgstr "" + +#: ../finch/gntblist.c:1582 ../finch/gntblist.c:1737 ../finch/gntft.c:246 +#: ../pidgin/gtkconv.c:1689 ../pidgin/gtkrequest.c:306 +#: ../pidgin/gtkstatusbox.c:326 +msgid "Remove" +msgstr "" + +#. Buddy List +#: ../finch/gntblist.c:1711 ../finch/gntblist.c:3126 ../finch/gntprefs.c:259 +#: ../finch/gntui.c:100 ../pidgin/gtkblist.c:5768 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:303 +msgid "Buddy List" +msgstr "" + +#: ../finch/gntblist.c:1742 +msgid "Place tagged" +msgstr "" + +#: ../finch/gntblist.c:1747 +msgid "Toggle Tag" +msgstr "" + +#: ../finch/gntblist.c:1751 ../finch/gntblist.c:2943 +msgid "View Log" +msgstr "" + +#. General +#: ../finch/gntblist.c:1787 ../libpurple/protocols/gg/gg.c:307 +#: ../libpurple/protocols/gg/gg.c:801 ../libpurple/protocols/gg/gg.c:873 +#: ../libpurple/protocols/gg/gg.c:2346 +#: ../libpurple/protocols/jabber/buddy.c:353 +#: ../libpurple/protocols/jabber/buddy.c:1050 +#: ../libpurple/protocols/jabber/buddy.c:2004 +#: ../libpurple/protocols/jabber/buddy.c:2197 +#: ../libpurple/protocols/jabber/jabber.c:1321 +#: ../libpurple/protocols/jabber/jabber.c:2375 +#: ../libpurple/protocols/jabber/jabber.c:2399 +#: ../libpurple/protocols/jabber/jabber.c:2415 +#: ../libpurple/protocols/jabber/jabber.c:2431 +#: ../libpurple/protocols/jabber/jabber.c:2445 +#: ../libpurple/protocols/msn/msn.c:2244 ../libpurple/protocols/msn/msn.c:2414 +#: ../libpurple/protocols/silc/buddy.c:1549 +#: ../libpurple/protocols/silc/ops.c:1015 +#: ../libpurple/protocols/silc/ops.c:1198 +#: ../libpurple/protocols/silc/ops.c:1336 +#: ../libpurple/protocols/silc10/buddy.c:1555 +#: ../libpurple/protocols/silc10/ops.c:1036 +#: ../libpurple/protocols/silc10/ops.c:1179 +#: ../libpurple/protocols/silc10/ops.c:1328 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:546 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1065 ../pidgin/gtkblist.c:3803 +msgid "Nickname" +msgstr "" + +#. Never know what those translations might end up like... +#. Idle stuff +#: ../finch/gntblist.c:1809 ../finch/gntprefs.c:262 +#: ../libpurple/protocols/bonjour/bonjour.c:370 +#: ../libpurple/protocols/jabber/buddy.c:748 +#: ../libpurple/protocols/jabber/jabber.c:2240 +#: ../libpurple/protocols/msn/msn.c:1071 ../libpurple/protocols/msn/msn.c:1088 +#: ../libpurple/protocols/msn/msn.c:1095 ../libpurple/protocols/msn/state.c:38 +#: ../libpurple/protocols/novell/novell.c:2848 +#: ../libpurple/protocols/oscar/userinfo.c:499 +#: ../libpurple/protocols/yahoo/libymsg.c:4102 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:709 ../pidgin/gtkblist.c:3831 +#: ../pidgin/gtkblist.c:4286 ../pidgin/gtkprefs.c:2671 +msgid "Idle" +msgstr "" + +#: ../finch/gntblist.c:1823 +msgid "On Mobile" +msgstr "" + +#: ../finch/gntblist.c:2130 ../pidgin/gtkdocklet.c:585 +msgid "New..." +msgstr "" + +#: ../finch/gntblist.c:2137 ../pidgin/gtkdocklet.c:586 +msgid "Saved..." +msgstr "" + +#: ../finch/gntblist.c:2596 ../finch/gntplugin.c:354 ../finch/gntui.c:105 +#: ../pidgin/gtkplugin.c:720 +msgid "Plugins" +msgstr "" + +#: ../finch/gntblist.c:2751 ../finch/gntblist.c:2756 +msgid "Block/Unblock" +msgstr "" + +#: ../finch/gntblist.c:2752 +msgid "Block" +msgstr "" + +#: ../finch/gntblist.c:2753 +msgid "Unblock" +msgstr "" + +#: ../finch/gntblist.c:2758 +msgid "" +"Please enter the username or alias of the person you would like to " +"Block/Unblock." +msgstr "" + +#. Not multiline +#. Not masked? +#. No hints? +#: ../finch/gntblist.c:2761 ../finch/gntblist.c:2812 ../finch/gntblist.c:2948 +#: ../finch/gntcertmgr.c:90 ../finch/gntconn.c:137 ../finch/gntnotify.c:83 +#: ../finch/plugins/gnthistory.c:181 ../libpurple/account.c:1221 +#: ../libpurple/account.c:1584 ../libpurple/protocols/gg/gg.c:335 +#: ../libpurple/protocols/gg/gg.c:390 +#: ../libpurple/protocols/jabber/jabber.c:2557 +#: ../libpurple/protocols/jabber/xdata.c:403 +#: ../libpurple/protocols/msn/msn.c:451 ../libpurple/protocols/msn/msn.c:576 +#: ../libpurple/protocols/msn/msn.c:654 ../libpurple/protocols/msn/msn.c:671 +#: ../libpurple/protocols/msn/msn.c:688 +#: ../libpurple/protocols/mxit/login.c:365 +#: ../libpurple/protocols/myspace/user.c:823 +#: ../libpurple/protocols/myspace/user.c:884 +#: ../libpurple/protocols/oscar/oscar.c:5219 +#: ../libpurple/protocols/silc/buddy.c:458 +#: ../libpurple/protocols/silc/buddy.c:1198 +#: ../libpurple/protocols/silc/chat.c:451 +#: ../libpurple/protocols/silc/chat.c:488 +#: ../libpurple/protocols/silc/chat.c:755 +#: ../libpurple/protocols/silc/ops.c:1305 +#: ../libpurple/protocols/silc/ops.c:1831 +#: ../libpurple/protocols/silc/silc.c:1062 +#: ../libpurple/protocols/silc10/buddy.c:467 +#: ../libpurple/protocols/silc10/buddy.c:1191 +#: ../libpurple/protocols/silc10/chat.c:425 +#: ../libpurple/protocols/silc10/chat.c:464 +#: ../libpurple/protocols/silc10/chat.c:729 +#: ../libpurple/protocols/silc10/ops.c:1297 +#: ../libpurple/protocols/silc10/ops.c:1909 +#: ../libpurple/protocols/silc10/silc.c:760 +#: ../libpurple/protocols/yahoo/libymsg.c:1368 +#: ../libpurple/protocols/yahoo/libymsg.c:4574 +#: ../libpurple/protocols/yahoo/libymsg.c:4585 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:588 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:599 ../pidgin/gtkblist.c:3581 +#: ../pidgin/gtkcertmgr.c:193 ../pidgin/gtkdialogs.c:901 +#: ../pidgin/gtkdialogs.c:1040 ../pidgin/gtkdialogs.c:1132 +#: ../pidgin/gtkrequest.c:300 ../pidgin/gtkutils.c:1619 +#: ../pidgin/gtkutils.c:1639 +msgid "OK" +msgstr "" + +#: ../finch/gntblist.c:2807 ../pidgin/gtkdialogs.c:896 +msgid "New Instant Message" +msgstr "" + +#: ../finch/gntblist.c:2809 ../pidgin/gtkdialogs.c:898 +msgid "Please enter the username or alias of the person you would like to IM." +msgstr "" + +#: ../finch/gntblist.c:2870 +msgid "Channel" +msgstr "" + +#: ../finch/gntblist.c:2882 ../pidgin/gtkblist.c:1136 +msgid "Join a Chat" +msgstr "" + +#: ../finch/gntblist.c:2884 +msgid "Please enter the name of the chat you want to join." +msgstr "" + +#: ../finch/gntblist.c:2886 ../finch/gntnotify.c:461 +msgid "Join" +msgstr "" + +#: ../finch/gntblist.c:2945 ../pidgin/gtkdialogs.c:1129 +msgid "" +"Please enter the username or alias of the person whose log you would like to" +" view." +msgstr "" + +#. Create the "Options" frame. +#: ../finch/gntblist.c:2999 ../finch/gntpounce.c:461 ../pidgin/gtkpounce.c:823 +msgid "Options" +msgstr "" + +#: ../finch/gntblist.c:3005 +msgid "Send IM..." +msgstr "" + +#: ../finch/gntblist.c:3010 +msgid "Block/Unblock..." +msgstr "" + +#: ../finch/gntblist.c:3015 ../pidgin/gtkdocklet.c:712 +msgid "Join Chat..." +msgstr "" + +#: ../finch/gntblist.c:3020 ../finch/gntconv.c:653 +msgid "View Log..." +msgstr "" + +#: ../finch/gntblist.c:3025 +msgid "View All Logs" +msgstr "" + +#: ../finch/gntblist.c:3030 +msgid "Show" +msgstr "" + +#: ../finch/gntblist.c:3035 +msgid "Empty groups" +msgstr "" + +#: ../finch/gntblist.c:3042 +msgid "Offline buddies" +msgstr "" + +#: ../finch/gntblist.c:3049 +msgid "Sort" +msgstr "" + +#: ../finch/gntblist.c:3054 +msgid "By Status" +msgstr "" + +#: ../finch/gntblist.c:3059 ../pidgin/gtkblist.c:4818 +msgid "Alphabetically" +msgstr "" + +#: ../finch/gntblist.c:3064 +msgid "By Log Size" +msgstr "" + +#: ../finch/gntblist.c:3075 ../libpurple/conversation.c:2134 +#: ../pidgin/gtknotify.c:1663 +msgid "Buddy" +msgstr "" + +#: ../finch/gntblist.c:3080 ../libpurple/protocols/oscar/userinfo.c:52 +#: ../libpurple/protocols/silc/silc.c:1008 +#: ../libpurple/protocols/silc/util.c:560 +#: ../libpurple/protocols/silc10/silc.c:704 +#: ../libpurple/protocols/silc10/util.c:553 +#: ../pidgin/plugins/disco/gtkdisco.c:482 +msgid "Chat" +msgstr "" + +#: ../finch/gntblist.c:3090 ../finch/plugins/grouping.c:365 +msgid "Grouping" +msgstr "" + +#: ../finch/gntcertmgr.c:86 ../pidgin/gtkcertmgr.c:186 +msgid "Certificate Import" +msgstr "" + +#: ../finch/gntcertmgr.c:87 ../pidgin/gtkcertmgr.c:187 +msgid "Specify a hostname" +msgstr "" + +#: ../finch/gntcertmgr.c:88 +msgid "Type the host name this certificate is for." +msgstr "" + +#: ../finch/gntcertmgr.c:97 ../pidgin/gtkcertmgr.c:208 +#, c-format +msgid "" +"File %s could not be imported.\n" +"Make sure that the file is readable and in PEM format.\n" +msgstr "" + +#: ../finch/gntcertmgr.c:99 ../pidgin/gtkcertmgr.c:210 +msgid "Certificate Import Error" +msgstr "" + +#: ../finch/gntcertmgr.c:100 ../pidgin/gtkcertmgr.c:211 +msgid "X.509 certificate import failed" +msgstr "" + +#: ../finch/gntcertmgr.c:110 ../pidgin/gtkcertmgr.c:222 +msgid "Select a PEM certificate" +msgstr "" + +#: ../finch/gntcertmgr.c:127 ../pidgin/gtkcertmgr.c:243 +#, c-format +msgid "" +"Export to file %s failed.\n" +"Check that you have write permission to the target path\n" +msgstr "" + +#: ../finch/gntcertmgr.c:129 ../pidgin/gtkcertmgr.c:245 +msgid "Certificate Export Error" +msgstr "" + +#: ../finch/gntcertmgr.c:130 ../pidgin/gtkcertmgr.c:246 +msgid "X.509 certificate export failed" +msgstr "" + +#: ../finch/gntcertmgr.c:159 ../pidgin/gtkcertmgr.c:296 +msgid "PEM X.509 Certificate Export" +msgstr "" + +#: ../finch/gntcertmgr.c:188 +#, c-format +msgid "Certificate for %s" +msgstr "" + +#: ../finch/gntcertmgr.c:195 +#, c-format +msgid "" +"Common name: %s\n" +"\n" +"SHA1 fingerprint:\n" +"%s" +msgstr "" + +#: ../finch/gntcertmgr.c:198 +msgid "SSL Host Certificate" +msgstr "" + +#: ../finch/gntcertmgr.c:233 ../pidgin/gtkcertmgr.c:369 +#, c-format +msgid "Really delete certificate for %s?" +msgstr "" + +#: ../finch/gntcertmgr.c:236 ../pidgin/gtkcertmgr.c:371 +msgid "Confirm certificate delete" +msgstr "" + +#: ../finch/gntcertmgr.c:293 ../pidgin/gtkcertmgr.c:603 +msgid "Certificate Manager" +msgstr "" + +#: ../finch/gntcertmgr.c:298 ../libpurple/protocols/silc/silc.c:1247 +#: ../libpurple/protocols/silc10/silc.c:943 ../pidgin/gtkcertmgr.c:433 +msgid "Hostname" +msgstr "" + +#: ../finch/gntcertmgr.c:315 ../finch/gntnotify.c:455 ../pidgin/gtkconv.c:1668 +#: ../pidgin/gtkdebug.c:940 +msgid "Info" +msgstr "" + +#. Close button +#: ../finch/gntcertmgr.c:324 ../finch/gntft.c:256 ../finch/gntnotify.c:200 +#: ../finch/gntplugin.c:222 ../finch/gntplugin.c:415 ../finch/gntpounce.c:752 +#: ../finch/gntroomlist.c:277 ../finch/gntstatus.c:218 +#: ../libpurple/protocols/msn/msn.c:794 +#: ../libpurple/protocols/mxit/splashscreen.c:207 +#: ../libpurple/protocols/mxit/splashscreen.c:211 +#: ../libpurple/protocols/silc/util.c:386 +#: ../libpurple/protocols/silc10/util.c:377 ../pidgin/gtkaccount.c:2453 +#: ../pidgin/gtkblist.c:5874 ../pidgin/gtkrequest.c:303 +msgid "Close" +msgstr "" + +#: ../finch/gntconn.c:126 +#, c-format +msgid "%s (%s)" +msgstr "" + +#: ../finch/gntconn.c:129 +#, c-format +msgid "%s disconnected." +msgstr "" + +#: ../finch/gntconn.c:130 +#, 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 "" + +#: ../finch/gntconn.c:139 +msgid "Re-enable Account" +msgstr "" + +#: ../finch/gntconv.c:161 +msgid "No such command." +msgstr "" + +#: ../finch/gntconv.c:165 ../pidgin/gtkconv.c:517 +msgid "" +"Syntax Error: You typed the wrong number of arguments to that command." +msgstr "" + +#: ../finch/gntconv.c:170 ../pidgin/gtkconv.c:523 +msgid "Your command failed for an unknown reason." +msgstr "" + +#: ../finch/gntconv.c:175 ../pidgin/gtkconv.c:530 +msgid "That command only works in chats, not IMs." +msgstr "" + +#: ../finch/gntconv.c:178 ../pidgin/gtkconv.c:533 +msgid "That command only works in IMs, not chats." +msgstr "" + +#: ../finch/gntconv.c:182 ../pidgin/gtkconv.c:538 +msgid "That command doesn't work on this protocol." +msgstr "" + +#: ../finch/gntconv.c:190 +msgid "Message was not sent, because you are not signed on." +msgstr "" + +#: ../finch/gntconv.c:267 +#, c-format +msgid "%s (%s -- %s)" +msgstr "" + +#: ../finch/gntconv.c:290 +#, c-format +msgid "%s [%s]" +msgstr "" + +#: ../finch/gntconv.c:295 ../finch/gntconv.c:990 ../pidgin/gtkconv.c:3704 +#, c-format +msgid "" +"\n" +"%s is typing..." +msgstr "" + +#: ../finch/gntconv.c:314 +msgid "You have left this chat." +msgstr "" + +#: ../finch/gntconv.c:382 +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 "" + +#: ../finch/gntconv.c:462 ../pidgin/gtkconv.c:1354 +msgid "Logging started. Future messages in this conversation will be logged." +msgstr "" + +#: ../finch/gntconv.c:466 ../pidgin/gtkconv.c:1362 +msgid "" +"Logging stopped. Future messages in this conversation will not be logged." +msgstr "" + +#: ../finch/gntconv.c:553 +msgid "Send To" +msgstr "" + +#: ../finch/gntconv.c:606 +msgid "Conversation" +msgstr "" + +#: ../finch/gntconv.c:612 +msgid "Clear Scrollback" +msgstr "" + +#: ../finch/gntconv.c:616 ../finch/gntprefs.c:192 +msgid "Show Timestamps" +msgstr "" + +#: ../finch/gntconv.c:634 +msgid "Add Buddy Pounce..." +msgstr "" + +#: ../finch/gntconv.c:648 +msgid "Invite..." +msgstr "" + +#: ../finch/gntconv.c:657 +msgid "Enable Logging" +msgstr "" + +#: ../finch/gntconv.c:663 +msgid "Enable Sounds" +msgstr "" + +#: ../finch/gntconv.c:679 +msgid "You are not connected." +msgstr "" + +#: ../finch/gntconv.c:943 +msgid "<AUTO-REPLY> " +msgstr "" + +#: ../finch/gntconv.c:1083 +#, c-format +msgid "List of %d user:\n" +msgid_plural "List of %d users:\n" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../finch/gntconv.c:1254 ../pidgin/gtkconv.c:356 +msgid "Supported debug options are: plugins version" +msgstr "" + +#: ../finch/gntconv.c:1298 ../pidgin/gtkconv.c:416 +msgid "No such command (in this context)." +msgstr "" + +#: ../finch/gntconv.c:1301 ../pidgin/gtkconv.c:419 +msgid "" +"Use \"/help <command>\" for help on a specific command.\n" +"The following commands are available in this context:\n" +msgstr "" + +#: ../finch/gntconv.c:1345 +#, c-format +msgid "" +"%s is not a valid message class. See '/help msgcolor' for valid message " +"classes." +msgstr "" + +#: ../finch/gntconv.c:1352 ../finch/gntconv.c:1359 +#, c-format +msgid "%s is not a valid color. See '/help msgcolor' for valid colors." +msgstr "" + +#: ../finch/gntconv.c:1415 ../pidgin/gtkconv.c:8081 +msgid "" +"say <message>: Send a message normally as if you weren't using a " +"command." +msgstr "" + +#: ../finch/gntconv.c:1418 ../pidgin/gtkconv.c:8084 +msgid "me <action>: Send an IRC style action to a buddy or chat." +msgstr "" + +#: ../finch/gntconv.c:1421 ../pidgin/gtkconv.c:8087 +msgid "" +"debug <option>: Send various debug information to the current " +"conversation." +msgstr "" + +#: ../finch/gntconv.c:1424 ../pidgin/gtkconv.c:8090 +msgid "clear: Clears the conversation scrollback." +msgstr "" + +#: ../finch/gntconv.c:1427 ../pidgin/gtkconv.c:8096 +msgid "help <command>: Help on a specific command." +msgstr "" + +#: ../finch/gntconv.c:1430 +msgid "users: Show the list of users in the chat." +msgstr "" + +#: ../finch/gntconv.c:1435 +msgid "plugins: Show the plugins window." +msgstr "" + +#: ../finch/gntconv.c:1438 +msgid "buddylist: Show the buddylist." +msgstr "" + +#: ../finch/gntconv.c:1441 +msgid "accounts: Show the accounts window." +msgstr "" + +#: ../finch/gntconv.c:1444 +msgid "debugwin: Show the debug window." +msgstr "" + +#: ../finch/gntconv.c:1447 +msgid "prefs: Show the preference window." +msgstr "" + +#: ../finch/gntconv.c:1450 +msgid "statuses: Show the savedstatuses window." +msgstr "" + +#: ../finch/gntconv.c:1455 ../finch/gntconv.c:1463 +msgid "" +"msgcolor <class> <foreground> <background>: Set the color " +"for different classes of messages in the conversation window.<br> " +"<class>: receive, send, highlight, action, timestamp<br> " +"<foreground/background>: black, red, green, blue, white, gray, " +"darkgray, magenta, cyan, default<br><br>EXAMPLE:<br> msgcolor send cyan " +"default" +msgstr "" + +#: ../finch/gntdebug.c:275 ../pidgin/gtkconv.c:994 ../pidgin/gtkdebug.c:230 +#: ../pidgin/gtkft.c:519 ../pidgin/gtkutils.c:3339 +msgid "Unable to open file." +msgstr "" + +#: ../finch/gntdebug.c:315 ../finch/gntui.c:103 ../pidgin/gtkdebug.c:755 +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. +#: ../finch/gntdebug.c:336 ../pidgin/gtkdebug.c:835 ../pidgin/gtkdebug.c:837 +msgid "Clear" +msgstr "" + +#: ../finch/gntdebug.c:347 +msgid "Filter:" +msgstr "" + +#: ../finch/gntdebug.c:353 ../pidgin/gtkdebug.c:849 ../pidgin/gtkdebug.c:851 +msgid "Pause" +msgstr "" + +#: ../finch/gntft.c:121 ../pidgin/gtkft.c:225 +#, c-format +msgid "File Transfers - %d%% of %d file" +msgid_plural "File Transfers - %d%% of %d files" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Create the window. +#: ../finch/gntft.c:128 ../finch/gntft.c:215 ../finch/gntui.c:104 +#: ../pidgin/gtkft.c:232 ../pidgin/gtkft.c:718 +msgid "File Transfers" +msgstr "" + +#: ../finch/gntft.c:220 ../pidgin/gtkft.c:601 +msgid "Progress" +msgstr "" + +#: ../finch/gntft.c:220 ../pidgin/gtkft.c:608 +msgid "Filename" +msgstr "" + +#: ../finch/gntft.c:220 ../pidgin/gtkft.c:615 +msgid "Size" +msgstr "" + +#: ../finch/gntft.c:220 +msgid "Speed" +msgstr "" + +#: ../finch/gntft.c:220 ../pidgin/gtkft.c:622 +msgid "Remaining" +msgstr "" + +#. XXX: Use of ggp_str_to_uin() is an ugly hack! +#. presence +#: ../finch/gntft.c:220 ../finch/gntstatus.c:549 ../finch/gntstatus.c:578 +#: ../libpurple/protocols/bonjour/bonjour.c:374 +#: ../libpurple/protocols/gg/gg.c:790 ../libpurple/protocols/gg/gg.c:1575 +#: ../libpurple/protocols/gg/gg.c:1583 +#: ../libpurple/protocols/jabber/buddy.c:770 +#: ../libpurple/protocols/jabber/buddy.c:778 +#: ../libpurple/protocols/jabber/buddy.c:849 +#: ../libpurple/protocols/jabber/jabber.c:2225 +#: ../libpurple/protocols/msn/msn.c:1081 ../libpurple/protocols/msn/msn.c:1090 +#: ../libpurple/protocols/msn/msn.c:1094 ../libpurple/protocols/msn/msn.c:1097 +#: ../libpurple/protocols/mxit/mxit.c:342 +#: ../libpurple/protocols/mxit/profile.c:235 +#: ../libpurple/protocols/novell/novell.c:2858 +#: ../libpurple/protocols/oscar/oscar.c:2296 +#: ../libpurple/protocols/oscar/oscar.c:2319 +#: ../libpurple/protocols/oscar/userinfo.c:303 +#: ../libpurple/protocols/sametime/sametime.c:3346 +#: ../libpurple/protocols/sametime/sametime.c:4197 +#: ../libpurple/protocols/yahoo/libymsg.c:4258 ../pidgin/gtkblist.c:3876 +#: ../pidgin/gtkblist.c:3890 ../pidgin/gtkblist.c:3892 +#: ../pidgin/gtksavedstatuses.c:970 ../pidgin/gtksavedstatuses.c:1120 +msgid "Status" +msgstr "" + +#: ../finch/gntft.c:230 +msgid "Close this window when all transfers finish" +msgstr "" + +#: ../finch/gntft.c:237 +msgid "Clear finished transfers" +msgstr "" + +#: ../finch/gntft.c:251 ../finch/gntroomlist.c:274 +msgid "Stop" +msgstr "" + +#: ../finch/gntft.c:324 ../pidgin/gtkft.c:165 ../pidgin/gtkft.c:902 +msgid "Waiting for transfer to begin" +msgstr "" + +#: ../finch/gntft.c:389 ../pidgin/gtkft.c:159 ../pidgin/gtkft.c:983 +msgid "Cancelled" +msgstr "" + +#: ../finch/gntft.c:391 ../pidgin/gtkft.c:985 +msgid "Failed" +msgstr "" + +#: ../finch/gntft.c:436 ../pidgin/gtkft.c:130 +#, c-format +msgid "%.2f KiB/s" +msgstr "" + +#: ../finch/gntft.c:447 +msgid "Sent" +msgstr "" + +#: ../finch/gntft.c:447 +msgid "Received" +msgstr "" + +#: ../finch/gntft.c:448 ../pidgin/gtkft.c:156 ../pidgin/gtkft.c:1047 +msgid "Finished" +msgstr "" + +#: ../finch/gntft.c:450 +#, c-format +msgid "The file was saved as %s." +msgstr "" + +#: ../finch/gntft.c:457 +msgid "Sending" +msgstr "" + +#: ../finch/gntft.c:457 +msgid "Receiving" +msgstr "" + +#: ../finch/gntlog.c:193 +#, c-format +msgid "Conversation in %s on %s" +msgstr "" + +#: ../finch/gntlog.c:196 +#, c-format +msgid "Conversation with %s on %s" +msgstr "" + +#: ../finch/gntlog.c:239 ../pidgin/gtklog.c:504 +msgid "%B %Y" +msgstr "" + +#: ../finch/gntlog.c:279 ../pidgin/gtklog.c:550 +msgid "" +"System events will only be logged if the \"Log all status changes to system " +"log\" preference is enabled." +msgstr "" + +#: ../finch/gntlog.c:283 ../pidgin/gtklog.c:554 +msgid "" +"Instant messages will only be logged if the \"Log all instant messages\" " +"preference is enabled." +msgstr "" + +#: ../finch/gntlog.c:286 ../pidgin/gtklog.c:557 +msgid "Chats will only be logged if the \"Log all chats\" preference is enabled." +msgstr "" + +#: ../finch/gntlog.c:292 ../pidgin/gtklog.c:566 +msgid "No logs were found" +msgstr "" + +#: ../finch/gntlog.c:339 ../pidgin/gtklog.c:643 +msgid "Total log size:" +msgstr "" + +#. Search box ********* +#: ../finch/gntlog.c:347 +msgid "Scroll/Search: " +msgstr "" + +#: ../finch/gntlog.c:405 ../pidgin/gtklog.c:713 +#, c-format +msgid "Conversations in %s" +msgstr "" + +#: ../finch/gntlog.c:413 ../finch/gntlog.c:490 ../pidgin/gtklog.c:721 +#: ../pidgin/gtklog.c:802 +#, c-format +msgid "Conversations with %s" +msgstr "" + +#: ../finch/gntlog.c:415 +msgid "All Conversations" +msgstr "" + +#: ../finch/gntlog.c:515 ../pidgin/gtklog.c:827 +msgid "System Log" +msgstr "" + +#: ../finch/gntmedia.c:159 ../pidgin/gtkmedia.c:339 +msgid "Calling..." +msgstr "" + +#: ../finch/gntmedia.c:160 +msgid "Hangup" +msgstr "" + +#. Number of actions +#: ../finch/gntmedia.c:161 ../libpurple/certificate.c:1405 +msgid "Accept" +msgstr "" + +#: ../finch/gntmedia.c:162 ../libpurple/certificate.c:1406 +msgid "Reject" +msgstr "" + +#: ../finch/gntmedia.c:190 ../pidgin/gtkmedia.c:970 ../pidgin/gtkmedia.c:972 +msgid "Call in progress." +msgstr "" + +#: ../finch/gntmedia.c:242 ../pidgin/gtkmedia.c:949 +msgid "The call has been terminated." +msgstr "" + +#: ../finch/gntmedia.c:270 ../pidgin/gtkmedia.c:635 +#, c-format +msgid "%s wishes to start an audio session with you." +msgstr "" + +#: ../finch/gntmedia.c:274 +#, c-format +msgid "%s is trying to start an unsupported media session type with you." +msgstr "" + +#: ../finch/gntmedia.c:288 ../pidgin/gtkmedia.c:965 +msgid "You have rejected the call." +msgstr "" + +#: ../finch/gntmedia.c:481 +msgid "call: Make an audio call." +msgstr "" + +#: ../finch/gntnotify.c:183 +msgid "Emails" +msgstr "" + +#: ../finch/gntnotify.c:189 ../finch/gntnotify.c:252 +msgid "You have mail!" +msgstr "" + +#: ../finch/gntnotify.c:192 ../pidgin/gtknotify.c:719 +msgid "Sender" +msgstr "" + +#: ../finch/gntnotify.c:192 ../pidgin/gtknotify.c:726 +msgid "Subject" +msgstr "" + +#: ../finch/gntnotify.c:223 +#, c-format +msgid "%s (%s) has %d new message." +msgid_plural "%s (%s) has %d new messages." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../finch/gntnotify.c:252 ../pidgin/gtknotify.c:1596 +msgid "New Mail" +msgstr "" + +#: ../finch/gntnotify.c:358 ../pidgin/gtknotify.c:1155 +#, c-format +msgid "Info for %s" +msgstr "" + +#: ../finch/gntnotify.c:359 ../pidgin/gtknotify.c:1156 +msgid "Buddy Information" +msgstr "" + +#: ../finch/gntnotify.c:449 ../libpurple/protocols/mxit/login.c:711 +#: ../libpurple/protocols/mxit/splashscreen.c:211 +msgid "Continue" +msgstr "" + +#: ../finch/gntnotify.c:458 ../pidgin/gtkconv.c:1618 +#: ../pidgin/gtknotify.c:1638 +msgid "IM" +msgstr "" + +#: ../finch/gntnotify.c:464 ../libpurple/conversation.c:2146 +#: ../libpurple/protocols/sametime/sametime.c:3556 +msgid "Invite" +msgstr "" + +#: ../finch/gntnotify.c:467 +msgid "(none)" +msgstr "" + +#. XXX: The following expects that finch_notify_message gets called. This +#. * may not always happen, e.g. when another plugin sets its own +#. * notify_message. So tread carefully. +#: ../finch/gntnotify.c:493 ../finch/plugins/gnttinyurl.c:370 +msgid "URI" +msgstr "" + +#: ../finch/gntplugin.c:86 ../finch/gntplugin.c:95 +msgid "ERROR" +msgstr "" + +#: ../finch/gntplugin.c:86 +msgid "loading plugin failed" +msgstr "" + +#: ../finch/gntplugin.c:95 +msgid "unloading plugin failed" +msgstr "" + +#: ../finch/gntplugin.c:141 +#, c-format +msgid "" +"Name: %s\n" +"Version: %s\n" +"Description: %s\n" +"Author: %s\n" +"Website: %s\n" +"Filename: %s\n" +msgstr "" + +#: ../finch/gntplugin.c:199 +msgid "Plugin need to be loaded before you can configure it." +msgstr "" + +#: ../finch/gntplugin.c:247 +msgid "No configuration options for this plugin." +msgstr "" + +#: ../finch/gntplugin.c:268 +msgid "Error loading plugin" +msgstr "" + +#: ../finch/gntplugin.c:269 +msgid "The selected file is not a valid plugin." +msgstr "" + +#: ../finch/gntplugin.c:270 +msgid "" +"Please open the debug window and try again to see the exact error message." +msgstr "" + +#: ../finch/gntplugin.c:333 +msgid "Select plugin to install" +msgstr "" + +#: ../finch/gntplugin.c:359 +msgid "You can (un)load plugins from the following list." +msgstr "" + +#: ../finch/gntplugin.c:410 +msgid "Install Plugin..." +msgstr "" + +#: ../finch/gntplugin.c:420 +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 +#: ../finch/gntplugin.c:526 ../finch/gntplugin.c:533 ../finch/gntprefs.c:265 +#: ../finch/gntui.c:108 ../pidgin/gtkprefs.c:2792 +msgid "Preferences" +msgstr "" + +#: ../finch/gntpounce.c:195 ../pidgin/gtkpounce.c:267 +msgid "Please enter a buddy to pounce." +msgstr "" + +#: ../finch/gntpounce.c:340 +msgid "New Buddy Pounce" +msgstr "" + +#: ../finch/gntpounce.c:340 +msgid "Edit Buddy Pounce" +msgstr "" + +#: ../finch/gntpounce.c:345 +msgid "Pounce Who" +msgstr "" + +#. Account: +#: ../finch/gntpounce.c:348 ../finch/gntstatus.c:458 +msgid "Account:" +msgstr "" + +#: ../finch/gntpounce.c:370 +msgid "Buddy name:" +msgstr "" + +#. Create the "Pounce When Buddy..." frame. +#: ../finch/gntpounce.c:388 ../pidgin/gtkpounce.c:603 +msgid "Pounce When Buddy..." +msgstr "" + +#: ../finch/gntpounce.c:390 +msgid "Signs on" +msgstr "" + +#: ../finch/gntpounce.c:391 +msgid "Signs off" +msgstr "" + +#: ../finch/gntpounce.c:392 +msgid "Goes away" +msgstr "" + +#: ../finch/gntpounce.c:393 +msgid "Returns from away" +msgstr "" + +#: ../finch/gntpounce.c:394 +msgid "Becomes idle" +msgstr "" + +#: ../finch/gntpounce.c:395 +msgid "Is no longer idle" +msgstr "" + +#: ../finch/gntpounce.c:396 +msgid "Starts typing" +msgstr "" + +#: ../finch/gntpounce.c:397 +msgid "Pauses while typing" +msgstr "" + +#: ../finch/gntpounce.c:398 +msgid "Stops typing" +msgstr "" + +#: ../finch/gntpounce.c:399 +msgid "Sends a message" +msgstr "" + +#. Create the "Action" frame. +#: ../finch/gntpounce.c:428 ../pidgin/gtkpounce.c:664 +msgid "Action" +msgstr "" + +#: ../finch/gntpounce.c:430 +msgid "Open an IM window" +msgstr "" + +#: ../finch/gntpounce.c:431 +msgid "Pop up a notification" +msgstr "" + +#: ../finch/gntpounce.c:432 +msgid "Send a message" +msgstr "" + +#: ../finch/gntpounce.c:433 +msgid "Execute a command" +msgstr "" + +#: ../finch/gntpounce.c:434 +msgid "Play a sound" +msgstr "" + +#: ../finch/gntpounce.c:462 +msgid "Pounce only when my status is not Available" +msgstr "" + +#: ../finch/gntpounce.c:464 ../pidgin/gtkpounce.c:1291 +msgid "Recurring" +msgstr "" + +#: ../finch/gntpounce.c:632 +msgid "Cannot create pounce" +msgstr "" + +#: ../finch/gntpounce.c:633 +msgid "You do not have any accounts." +msgstr "" + +#: ../finch/gntpounce.c:634 +msgid "You must create an account first before you can create a pounce." +msgstr "" + +#: ../finch/gntpounce.c:676 ../pidgin/gtkpounce.c:1122 +#, c-format +msgid "Are you sure you want to delete the pounce on %s for %s?" +msgstr "" + +#: ../finch/gntpounce.c:710 ../finch/gntui.c:101 ../pidgin/gtkpounce.c:1334 +msgid "Buddy Pounces" +msgstr "" + +#: ../finch/gntpounce.c:817 +#, c-format +msgid "%s has started typing to you (%s)" +msgstr "" + +#: ../finch/gntpounce.c:818 +#, c-format +msgid "%s has paused while typing to you (%s)" +msgstr "" + +#: ../finch/gntpounce.c:819 +#, c-format +msgid "%s has signed on (%s)" +msgstr "" + +#: ../finch/gntpounce.c:820 +#, c-format +msgid "%s has returned from being idle (%s)" +msgstr "" + +#: ../finch/gntpounce.c:821 +#, c-format +msgid "%s has returned from being away (%s)" +msgstr "" + +#: ../finch/gntpounce.c:822 +#, c-format +msgid "%s has stopped typing to you (%s)" +msgstr "" + +#: ../finch/gntpounce.c:823 +#, c-format +msgid "%s has signed off (%s)" +msgstr "" + +#: ../finch/gntpounce.c:824 +#, c-format +msgid "%s has become idle (%s)" +msgstr "" + +#: ../finch/gntpounce.c:825 +#, c-format +msgid "%s has gone away. (%s)" +msgstr "" + +#: ../finch/gntpounce.c:826 +#, c-format +msgid "%s has sent you a message. (%s)" +msgstr "" + +#: ../finch/gntpounce.c:845 +msgid "Unknown pounce event. Please report this!" +msgstr "" + +#: ../finch/gntprefs.c:93 +msgid "Based on keyboard use" +msgstr "" + +#: ../finch/gntprefs.c:95 ../pidgin/gtkprefs.c:2676 +msgid "From last sent message" +msgstr "" + +#: ../finch/gntprefs.c:97 ../pidgin/gtkprefs.c:1348 ../pidgin/gtkprefs.c:1356 +#: ../pidgin/gtkprefs.c:2675 ../pidgin/gtkprefs.c:2711 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:310 +msgid "Never" +msgstr "" + +#: ../finch/gntprefs.c:185 +msgid "Show Idle Time" +msgstr "" + +#: ../finch/gntprefs.c:186 +msgid "Show Offline Buddies" +msgstr "" + +#: ../finch/gntprefs.c:193 +msgid "Notify buddies when you are typing" +msgstr "" + +#: ../finch/gntprefs.c:199 ../finch/plugins/gnthistory.c:157 +msgid "Log format" +msgstr "" + +#: ../finch/gntprefs.c:200 ../finch/plugins/gnthistory.c:147 +msgid "Log IMs" +msgstr "" + +#: ../finch/gntprefs.c:201 ../finch/plugins/gnthistory.c:148 +msgid "Log chats" +msgstr "" + +#: ../finch/gntprefs.c:202 +msgid "Log status change events" +msgstr "" + +#: ../finch/gntprefs.c:208 +msgid "Report Idle time" +msgstr "" + +#: ../finch/gntprefs.c:209 +msgid "Change status when idle" +msgstr "" + +#: ../finch/gntprefs.c:210 +msgid "Minutes before changing status" +msgstr "" + +#: ../finch/gntprefs.c:211 +msgid "Change status to" +msgstr "" + +#: ../finch/gntprefs.c:260 ../pidgin/gtkprefs.c:1458 ../pidgin/gtkprefs.c:2763 +msgid "Conversations" +msgstr "" + +#: ../finch/gntprefs.c:261 ../finch/plugins/gnthistory.c:155 +#: ../pidgin/gtkprefs.c:2197 ../pidgin/gtkprefs.c:2764 +msgid "Logging" +msgstr "" + +#: ../finch/gntrequest.c:399 +msgid "You must fill all the required fields." +msgstr "" + +#: ../finch/gntrequest.c:400 +msgid "The required fields are underlined." +msgstr "" + +#: ../finch/gntrequest.c:661 +msgid "Not implemented yet." +msgstr "" + +#: ../finch/gntrequest.c:766 ../pidgin/gtkrequest.c:1584 +msgid "Save File..." +msgstr "" + +#: ../finch/gntrequest.c:766 ../pidgin/gtkrequest.c:1585 +msgid "Open File..." +msgstr "" + +#: ../finch/gntrequest.c:783 +msgid "Choose Location..." +msgstr "" + +#: ../finch/gntroomlist.c:209 +msgid "Hit 'Enter' to find more rooms of this category." +msgstr "" + +#: ../finch/gntroomlist.c:275 +msgid "Get" +msgstr "" + +#. Create the window. +#: ../finch/gntroomlist.c:287 ../finch/gntui.c:106 ../pidgin/gtkblist.c:7267 +#: ../pidgin/gtkroomlist.c:531 +msgid "Room List" +msgstr "" + +#: ../finch/gntsound.c:97 ../pidgin/gtksound.c:64 +msgid "Buddy logs in" +msgstr "" + +#: ../finch/gntsound.c:98 ../pidgin/gtksound.c:65 +msgid "Buddy logs out" +msgstr "" + +#: ../finch/gntsound.c:99 ../pidgin/gtksound.c:66 +msgid "Message received" +msgstr "" + +#: ../finch/gntsound.c:100 ../pidgin/gtksound.c:67 +msgid "Message received begins conversation" +msgstr "" + +#: ../finch/gntsound.c:101 ../pidgin/gtksound.c:68 +msgid "Message sent" +msgstr "" + +#: ../finch/gntsound.c:102 ../pidgin/gtksound.c:69 +msgid "Person enters chat" +msgstr "" + +#: ../finch/gntsound.c:103 ../pidgin/gtksound.c:70 +msgid "Person leaves chat" +msgstr "" + +#: ../finch/gntsound.c:104 ../pidgin/gtksound.c:71 +msgid "You talk in chat" +msgstr "" + +#: ../finch/gntsound.c:105 ../pidgin/gtksound.c:72 +msgid "Others talk in chat" +msgstr "" + +#: ../finch/gntsound.c:107 ../pidgin/gtksound.c:75 +msgid "Someone says your username in chat" +msgstr "" + +#: ../finch/gntsound.c:108 ../pidgin/gtksound.c:76 +msgid "Attention received" +msgstr "" + +#: ../finch/gntsound.c:384 ../pidgin/gtksound.c:326 +msgid "GStreamer Failure" +msgstr "" + +#: ../finch/gntsound.c:385 ../pidgin/gtksound.c:327 +msgid "GStreamer failed to initialize." +msgstr "" + +#: ../finch/gntsound.c:739 ../finch/gntsound.c:825 ../pidgin/gtkpounce.c:178 +#: ../pidgin/gtkpounce.c:189 ../pidgin/gtkpounce.c:318 +#: ../pidgin/gtkpounce.c:688 ../pidgin/gtkpounce.c:950 +#: ../pidgin/gtkprefs.c:941 ../pidgin/gtkprefs.c:2323 +#: ../pidgin/gtkprefs.c:2421 ../pidgin/gtkprefs.c:2617 +msgid "(default)" +msgstr "" + +#: ../finch/gntsound.c:752 +msgid "Select Sound File ..." +msgstr "" + +#: ../finch/gntsound.c:927 +msgid "Sound Preferences" +msgstr "" + +#: ../finch/gntsound.c:938 +msgid "Profiles" +msgstr "" + +#: ../finch/gntsound.c:977 ../pidgin/gtkprefs.c:2484 +msgid "Automatic" +msgstr "" + +#: ../finch/gntsound.c:980 +msgid "Console Beep" +msgstr "" + +#: ../finch/gntsound.c:981 ../pidgin/gtkprefs.c:2488 +msgid "Command" +msgstr "" + +#: ../finch/gntsound.c:982 +msgid "No Sound" +msgstr "" + +#: ../finch/gntsound.c:984 +msgid "Sound Method" +msgstr "" + +#: ../finch/gntsound.c:989 +msgid "Method: " +msgstr "" + +#: ../finch/gntsound.c:996 +#, c-format +msgid "" +"Sound Command\n" +"(%s for filename)" +msgstr "" + +#. Sound options +#: ../finch/gntsound.c:1004 ../pidgin/gtkprefs.c:2474 +msgid "Sound Options" +msgstr "" + +#: ../finch/gntsound.c:1005 +msgid "Sounds when conversation has focus" +msgstr "" + +#: ../finch/gntsound.c:1013 ../pidgin/gtkprefs.c:1346 +#: ../pidgin/gtkprefs.c:1358 ../pidgin/gtkprefs.c:2519 +#: ../pidgin/plugins/timestamp_format.c:58 +#: ../pidgin/plugins/timestamp_format.c:67 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:311 +msgid "Always" +msgstr "" + +#: ../finch/gntsound.c:1014 ../pidgin/gtkprefs.c:2517 +msgid "Only when available" +msgstr "" + +#: ../finch/gntsound.c:1015 ../pidgin/gtkprefs.c:2518 +msgid "Only when not available" +msgstr "" + +#: ../finch/gntsound.c:1022 +msgid "Volume(0-100):" +msgstr "" + +#. Sound events +#: ../finch/gntsound.c:1041 ../pidgin/gtkprefs.c:2546 +msgid "Sound Events" +msgstr "" + +#: ../finch/gntsound.c:1043 ../pidgin/gtknotify.c:1675 +#: ../pidgin/gtkprefs.c:2600 +msgid "Event" +msgstr "" + +#: ../finch/gntsound.c:1043 +msgid "File" +msgstr "" + +#: ../finch/gntsound.c:1062 +msgid "Test" +msgstr "" + +#: ../finch/gntsound.c:1065 ../pidgin/gtkpounce.c:692 +msgid "Reset" +msgstr "" + +#: ../finch/gntsound.c:1068 +msgid "Choose..." +msgstr "" + +#: ../finch/gntstatus.c:140 +#, c-format +msgid "Are you sure you want to delete \"%s\"" +msgstr "" + +#: ../finch/gntstatus.c:143 +msgid "Delete Status" +msgstr "" + +#: ../finch/gntstatus.c:178 ../pidgin/gtksavedstatuses.c:565 +msgid "Saved Statuses" +msgstr "" + +#. title +#: ../finch/gntstatus.c:185 ../finch/gntstatus.c:541 +#: ../libpurple/protocols/mxit/actions.c:290 ../pidgin/gtksavedstatuses.c:468 +msgid "Title" +msgstr "" + +#: ../finch/gntstatus.c:185 ../pidgin/gtksavedstatuses.c:481 +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. +#: ../finch/gntstatus.c:185 ../finch/gntstatus.c:566 ../finch/gntstatus.c:578 +#: ../libpurple/conversation.c:2139 +#: ../libpurple/protocols/bonjour/bonjour.c:287 +#: ../libpurple/protocols/bonjour/bonjour.c:294 +#: ../libpurple/protocols/bonjour/bonjour.c:376 +#: ../libpurple/protocols/gg/gg.c:828 ../libpurple/protocols/gg/gg.c:1578 +#: ../libpurple/protocols/gg/gg.c:1594 ../libpurple/protocols/gg/gg.c:1604 +#: ../libpurple/protocols/gg/gg.c:1610 ../libpurple/protocols/gg/gg.c:1620 +#: ../libpurple/protocols/gg/gg.c:1629 ../libpurple/protocols/gg/gg.c:1634 +#: ../libpurple/protocols/irc/irc.c:274 +#: ../libpurple/protocols/jabber/jabber.c:2372 +#: ../libpurple/protocols/jabber/jabber.c:2396 +#: ../libpurple/protocols/jabber/jabber.c:2412 +#: ../libpurple/protocols/jabber/jabber.c:2428 +#: ../libpurple/protocols/jabber/jabber.c:2442 +#: ../libpurple/protocols/jabber/jabber.c:2457 +#: ../libpurple/protocols/msn/msn.c:1150 ../libpurple/protocols/msn/msn.c:1156 +#: ../libpurple/protocols/msn/msn.c:1162 ../libpurple/protocols/msn/msn.c:1168 +#: ../libpurple/protocols/msn/msn.c:1173 ../libpurple/protocols/msn/msn.c:1178 +#: ../libpurple/protocols/mxit/roster.c:78 +#: ../libpurple/protocols/myspace/myspace.c:479 +#: ../libpurple/protocols/novell/novell.c:2861 +#: ../libpurple/protocols/novell/novell.c:2964 +#: ../libpurple/protocols/novell/novell.c:2970 +#: ../libpurple/protocols/novell/novell.c:2976 +#: ../libpurple/protocols/oscar/oscar.c:4763 +#: ../libpurple/protocols/oscar/oscar.c:4772 +#: ../libpurple/protocols/oscar/oscar.c:4780 +#: ../libpurple/protocols/oscar/oscar.c:4788 +#: ../libpurple/protocols/oscar/oscar.c:4796 +#: ../libpurple/protocols/oscar/oscar.c:4804 +#: ../libpurple/protocols/oscar/oscar.c:4813 +#: ../libpurple/protocols/oscar/oscar.c:4821 +#: ../libpurple/protocols/oscar/oscar.c:4828 +#: ../libpurple/protocols/oscar/oscar.c:4840 +#: ../libpurple/protocols/oscar/oscar.c:4847 +#: ../libpurple/protocols/oscar/oscar.c:4854 +#: ../libpurple/protocols/sametime/sametime.c:3369 +#: ../libpurple/protocols/sametime/sametime.c:3375 +#: ../libpurple/protocols/sametime/sametime.c:3381 +#: ../libpurple/protocols/sametime/sametime.c:3460 +#: ../libpurple/protocols/silc/buddy.c:1563 +#: ../libpurple/protocols/silc10/buddy.c:1571 +#: ../libpurple/protocols/simple/simple.c:247 +#: ../libpurple/protocols/yahoo/libymsg.c:5098 +#: ../libpurple/protocols/yahoo/libymsg.c:5104 +#: ../libpurple/protocols/yahoo/libymsg.c:5113 +#: ../libpurple/protocols/zephyr/zephyr.c:2348 ../pidgin/gtknotify.c:1683 +#: ../pidgin/gtksavedstatuses.c:496 ../pidgin/gtksavedstatuses.c:985 +msgid "Message" +msgstr "" + +#. Use +#: ../finch/gntstatus.c:196 ../finch/gntstatus.c:595 +msgid "Use" +msgstr "" + +#: ../finch/gntstatus.c:303 +msgid "Invalid title" +msgstr "" + +#: ../finch/gntstatus.c:304 +msgid "Please enter a non-empty title for the status." +msgstr "" + +#: ../finch/gntstatus.c:312 +msgid "Duplicate title" +msgstr "" + +#: ../finch/gntstatus.c:313 +msgid "Please enter a different title for the status." +msgstr "" + +#: ../finch/gntstatus.c:454 +msgid "Substatus" +msgstr "" + +#: ../finch/gntstatus.c:466 ../pidgin/gtkft.c:654 +msgid "Status:" +msgstr "" + +#: ../finch/gntstatus.c:481 +msgid "Message:" +msgstr "" + +#: ../finch/gntstatus.c:530 +msgid "Edit Status" +msgstr "" + +#: ../finch/gntstatus.c:572 +msgid "Use different status for following accounts" +msgstr "" + +#. Save & Use +#: ../finch/gntstatus.c:606 +msgid "Save & Use" +msgstr "" + +#: ../finch/gntui.c:102 +msgid "Certificates" +msgstr "" + +#: ../finch/gntui.c:107 ../pidgin/gtkprefs.c:2768 +msgid "Sounds" +msgstr "" + +#: ../finch/gntui.c:109 +msgid "Statuses" +msgstr "" + +#: ../finch/plugins/gntclipboard.c:115 ../finch/plugins/gntclipboard.c:121 +#: ../finch/plugins/gntclipboard.c:128 +msgid "Error loading the plugin." +msgstr "" + +#: ../finch/plugins/gntclipboard.c:116 +msgid "Couldn't find X display" +msgstr "" + +#: ../finch/plugins/gntclipboard.c:122 +msgid "Couldn't find window" +msgstr "" + +#: ../finch/plugins/gntclipboard.c:129 +msgid "" +"This plugin cannot be loaded because it was not built with X11 support." +msgstr "" + +#: ../finch/plugins/gntclipboard.c:158 +msgid "GntClipboard" +msgstr "" + +#: ../finch/plugins/gntclipboard.c:160 +msgid "Clipboard plugin" +msgstr "" + +#: ../finch/plugins/gntclipboard.c:161 +msgid "" +"When the gnt clipboard contents change, the contents are made available to " +"X, if possible." +msgstr "" + +#: ../finch/plugins/gntgf.c:232 +#, c-format +msgid "%s just signed on" +msgstr "" + +#: ../finch/plugins/gntgf.c:239 +#, c-format +msgid "%s just signed off" +msgstr "" + +#: ../finch/plugins/gntgf.c:247 +#, c-format +msgid "%s sent you a message" +msgstr "" + +#: ../finch/plugins/gntgf.c:266 +#, c-format +msgid "%s said your nick in %s" +msgstr "" + +#: ../finch/plugins/gntgf.c:268 +#, c-format +msgid "%s sent a message in %s" +msgstr "" + +#: ../finch/plugins/gntgf.c:306 +msgid "Buddy signs on/off" +msgstr "" + +#: ../finch/plugins/gntgf.c:307 +msgid "You receive an IM" +msgstr "" + +#: ../finch/plugins/gntgf.c:308 +msgid "Someone speaks in a chat" +msgstr "" + +#: ../finch/plugins/gntgf.c:309 +msgid "Someone says your name in a chat" +msgstr "" + +#: ../finch/plugins/gntgf.c:337 +msgid "Notify with a toaster when" +msgstr "" + +#: ../finch/plugins/gntgf.c:352 +msgid "Beep too!" +msgstr "" + +#: ../finch/plugins/gntgf.c:358 +msgid "Set URGENT for the terminal window." +msgstr "" + +#: ../finch/plugins/gntgf.c:378 +msgid "GntGf" +msgstr "" + +#: ../finch/plugins/gntgf.c:380 ../finch/plugins/gntgf.c:381 +msgid "Toaster plugin" +msgstr "" + +#: ../finch/plugins/gnthistory.c:118 ../pidgin/plugins/history.c:136 +#, c-format +msgid "<b>Conversation with %s on %s:</b><br>" +msgstr "" + +#: ../finch/plugins/gnthistory.c:176 ../pidgin/plugins/history.c:163 +msgid "History Plugin Requires Logging" +msgstr "" + +#: ../finch/plugins/gnthistory.c:177 ../pidgin/plugins/history.c:164 +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 "" + +#: ../finch/plugins/gnthistory.c:221 +msgid "GntHistory" +msgstr "" + +#: ../finch/plugins/gnthistory.c:223 ../pidgin/plugins/history.c:207 +msgid "Shows recently logged conversations in new conversations." +msgstr "" + +#: ../finch/plugins/gnthistory.c:224 ../pidgin/plugins/history.c:208 +msgid "" +"When a new conversation is opened this plugin will insert the last " +"conversation into the current conversation." +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:324 +#, c-format +msgid "" +"\n" +"Fetching TinyURL..." +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:351 +#, c-format +msgid "TinyURL for above: %s" +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:371 +msgid "Please wait while TinyURL fetches a shorter URL ..." +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:438 +msgid "Only create TinyURL for URLs of this length or greater" +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:442 +msgid "TinyURL (or other) address prefix" +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:471 +msgid "TinyURL" +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:473 +msgid "TinyURL plugin" +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:474 +msgid "When receiving a message with URL(s), use TinyURL for easier copying" +msgstr "" + +#: ../finch/plugins/grouping.c:44 ../libpurple/protocols/oscar/oscar.c:181 +msgid "Online" +msgstr "" + +#. primitive, no, id, name +#: ../finch/plugins/grouping.c:46 ../finch/plugins/grouping.c:143 +#: ../libpurple/protocols/gg/gg.c:755 +#: ../libpurple/protocols/jabber/buddy.c:846 +#: ../libpurple/protocols/jabber/jutil.c:702 +#: ../libpurple/protocols/mxit/roster.c:53 +#: ../libpurple/protocols/novell/novell.c:2851 +#: ../libpurple/protocols/oscar/oscar.c:4686 +#: ../libpurple/protocols/oscar/userinfo.c:279 +#: ../libpurple/protocols/yahoo/libymsg.c:4104 ../libpurple/status.c:162 +#: ../pidgin/gtkblist.c:3876 ../pidgin/gtkblist.c:4263 +#: ../pidgin/gtkdocklet.c:564 ../pidgin/gtkstatusbox.c:1100 +#: ../pidgin/plugins/themeedit-icon.c:67 +msgid "Offline" +msgstr "" + +#: ../finch/plugins/grouping.c:115 ../pidgin/gtkblist.c:3912 +msgid "Online Buddies" +msgstr "" + +#: ../finch/plugins/grouping.c:115 +msgid "Offline Buddies" +msgstr "" + +#: ../finch/plugins/grouping.c:125 +msgid "Online/Offline" +msgstr "" + +#: ../finch/plugins/grouping.c:162 +msgid "Meebo" +msgstr "" + +#: ../finch/plugins/grouping.c:211 +msgid "No Grouping" +msgstr "" + +#: ../finch/plugins/grouping.c:292 +msgid "Nested Subgroup" +msgstr "" + +#: ../finch/plugins/grouping.c:324 +msgid "Nested Grouping (experimental)" +msgstr "" + +#: ../finch/plugins/grouping.c:367 ../finch/plugins/grouping.c:368 +msgid "Provides alternate buddylist grouping options." +msgstr "" + +#: ../finch/plugins/lastlog.c:69 +msgid "Lastlog" +msgstr "" + +#. Translator Note: The "backlog" is the conversation buffer/history. +#: ../finch/plugins/lastlog.c:100 +msgid "lastlog: Searches for a substring in the backlog." +msgstr "" + +#: ../finch/plugins/lastlog.c:122 +msgid "GntLastlog" +msgstr "" + +#: ../finch/plugins/lastlog.c:124 ../finch/plugins/lastlog.c:125 +msgid "Lastlog plugin." +msgstr "" + +#: ../libpurple/account.c:972 +msgid "accounts" +msgstr "" + +#: ../libpurple/account.c:1167 ../libpurple/protocols/jabber/auth.c:106 +#: ../libpurple/protocols/jabber/auth_cyrus.c:150 +#: ../libpurple/protocols/silc/silc.c:475 +msgid "Password is required to sign on." +msgstr "" + +#: ../libpurple/account.c:1201 +#, c-format +msgid "Enter password for %s (%s)" +msgstr "" + +#: ../libpurple/account.c:1208 +msgid "Enter Password" +msgstr "" + +#: ../libpurple/account.c:1213 +msgid "Save password" +msgstr "" + +#: ../libpurple/account.c:1250 ../libpurple/connection.c:119 +#: ../libpurple/connection.c:197 +#, c-format +msgid "Missing protocol plugin for %s" +msgstr "" + +#: ../libpurple/account.c:1251 ../libpurple/connection.c:122 +msgid "Connection Error" +msgstr "" + +#: ../libpurple/account.c:1505 ../libpurple/protocols/jabber/jabber.c:2510 +msgid "New passwords do not match." +msgstr "" + +#: ../libpurple/account.c:1518 +msgid "Fill out all fields completely." +msgstr "" + +#: ../libpurple/account.c:1550 +msgid "Original password" +msgstr "" + +#: ../libpurple/account.c:1558 +msgid "New password" +msgstr "" + +#: ../libpurple/account.c:1566 +msgid "New password (again)" +msgstr "" + +#: ../libpurple/account.c:1573 +#, c-format +msgid "Change password for %s" +msgstr "" + +#: ../libpurple/account.c:1581 +msgid "Please enter your current password and your new password." +msgstr "" + +#: ../libpurple/account.c:1612 +#, c-format +msgid "Change user information for %s" +msgstr "" + +#: ../libpurple/account.c:1615 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:587 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:598 +msgid "Set User Info" +msgstr "" + +#: ../libpurple/account.c:1869 +msgid "This protocol does not support setting a public alias." +msgstr "" + +#: ../libpurple/account.c:1909 +msgid "This protocol does not support fetching the public alias." +msgstr "" + +#: ../libpurple/account.c:2207 ../libpurple/protocols/gg/gg.c:772 +#: ../libpurple/protocols/jabber/buddy.c:778 +#: ../libpurple/protocols/jabber/jutil.c:719 +#: ../libpurple/protocols/msn/oim.c:732 +#: ../libpurple/protocols/mxit/profile.c:46 +#: ../libpurple/protocols/mxit/profile.c:239 +#: ../libpurple/protocols/novell/novell.c:2854 ../pidgin/gtkft.c:162 +#: ../pidgin/plugins/disco/gtkdisco.c:470 ../pidgin/plugins/vvconfig.c:147 +msgid "Unknown" +msgstr "" + +#. Changing this string? Look in add_purple_buddy_to_groups +#: ../libpurple/blist.c:585 ../libpurple/blist.c:1599 +#: ../libpurple/blist.c:1847 ../libpurple/blist.c:1849 +#: ../libpurple/protocols/jabber/roster.c:117 +#: ../libpurple/protocols/jabber/roster.c:256 +#: ../libpurple/protocols/myspace/myspace.c:3484 ../pidgin/gtkblist.c:6945 +#: ../pidgin/plugins/gevolution/gevo-util.c:73 +#: ../pidgin/plugins/gevolution/gevolution.c:106 +msgid "Buddies" +msgstr "" + +#: ../libpurple/blist.c:612 +msgid "buddy list" +msgstr "" + +#: ../libpurple/certificate.c:94 +msgid "The certificate is self-signed and cannot be automatically checked." +msgstr "" + +#: ../libpurple/certificate.c:98 +msgid "" +"The certificate is not trusted because no certificate that can verify it is " +"currently trusted." +msgstr "" + +#: ../libpurple/certificate.c:102 +msgid "" +"The certificate is not valid yet. Check that your computer's date and time " +"are accurate." +msgstr "" + +#: ../libpurple/certificate.c:106 +msgid "" +"The certificate has expired and should not be considered valid. Check that " +"your computer's date and time are accurate." +msgstr "" + +#. Translators: "domain" refers to a DNS domain (e.g. talk.google.com) +#: ../libpurple/certificate.c:112 +msgid "The certificate presented is not issued to this domain." +msgstr "" + +#: ../libpurple/certificate.c:115 +msgid "" +"You have no database of root certificates, so this certificate cannot be " +"validated." +msgstr "" + +#: ../libpurple/certificate.c:119 +msgid "The certificate chain presented is invalid." +msgstr "" + +#: ../libpurple/certificate.c:122 +msgid "The certificate has been revoked." +msgstr "" + +#: ../libpurple/certificate.c:126 +msgid "An unknown certificate error occurred." +msgstr "" + +#: ../libpurple/certificate.c:697 +msgid "(DOES NOT MATCH)" +msgstr "" + +#. Make messages +#: ../libpurple/certificate.c:701 +#, c-format +msgid "%s has presented the following certificate for just-this-once use:" +msgstr "" + +#: ../libpurple/certificate.c:702 +#, c-format +msgid "" +"Common name: %s %s\n" +"Fingerprint (SHA1): %s" +msgstr "" + +#. TODO: Find what the handle ought to be +#: ../libpurple/certificate.c:707 +msgid "Single-use Certificate Verification" +msgstr "" + +#. Scheme name +#. Pool name +#: ../libpurple/certificate.c:1087 +msgid "Certificate Authorities" +msgstr "" + +#. Scheme name +#. Pool name +#: ../libpurple/certificate.c:1259 +msgid "SSL Peers Cache" +msgstr "" + +#. Make messages +#: ../libpurple/certificate.c:1390 +#, c-format +msgid "Accept certificate for %s?" +msgstr "" + +#. TODO: Find what the handle ought to be +#: ../libpurple/certificate.c:1396 +msgid "SSL Certificate Verification" +msgstr "" + +#: ../libpurple/certificate.c:1407 +msgid "_View Certificate..." +msgstr "" + +#: ../libpurple/certificate.c:1436 ../libpurple/certificate.c:1455 +#, c-format +msgid "The certificate for %s could not be validated." +msgstr "" + +#. TODO: Probably wrong. +#: ../libpurple/certificate.c:1442 +msgid "SSL Certificate Error" +msgstr "" + +#: ../libpurple/certificate.c:1443 +msgid "Unable to validate certificate" +msgstr "" + +#: ../libpurple/certificate.c:1467 +#, c-format +msgid "" +"The certificate claims to be from \"%s\" instead. This could mean that you " +"are not connecting to the service you believe you are." +msgstr "" + +#. Make messages +#: ../libpurple/certificate.c:2188 +#, 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 +#: ../libpurple/certificate.c:2200 +msgid "Certificate Information" +msgstr "" + +#. show error to user +#: ../libpurple/connection.c:121 ../libpurple/protocols/mxit/login.c:289 +msgid "Registration Error" +msgstr "" + +#: ../libpurple/connection.c:199 +msgid "Unregistration Error" +msgstr "" + +#: ../libpurple/connection.c:359 +#, c-format +msgid "+++ %s signed on" +msgstr "" + +#: ../libpurple/connection.c:390 +#, c-format +msgid "+++ %s signed off" +msgstr "" + +#. Undocumented +#. Unknown error +#: ../libpurple/connection.c:567 ../libpurple/plugin.c:276 +#: ../libpurple/protocols/jabber/buddy.c:2138 +#: ../libpurple/protocols/msn/servconn.c:149 +#: ../libpurple/protocols/msn/session.c:404 +#: ../libpurple/protocols/msn/session.c:417 +#: ../libpurple/protocols/oscar/family_chatnav.c:66 +#: ../libpurple/protocols/oscar/family_icbm.c:64 +#: ../libpurple/protocols/oscar/family_icbm.c:65 +#: ../libpurple/protocols/yahoo/libymsg.c:2022 +#: ../libpurple/protocols/yahoo/libymsg.c:2031 +#: ../libpurple/protocols/yahoo/libymsg.c:2406 +msgid "Unknown error" +msgstr "" + +#: ../libpurple/conversation.c:214 +msgid "Unable to send message: The message is too large." +msgstr "" + +#: ../libpurple/conversation.c:217 ../libpurple/conversation.c:230 +#, c-format +msgid "Unable to send message to %s." +msgstr "" + +#: ../libpurple/conversation.c:218 +msgid "The message is too large." +msgstr "" + +#: ../libpurple/conversation.c:227 ../libpurple/protocols/bonjour/jabber.c:305 +#: ../libpurple/protocols/bonjour/jabber.c:351 +msgid "Unable to send message." +msgstr "" + +#: ../libpurple/conversation.c:1307 +msgid "Send Message" +msgstr "" + +#: ../libpurple/conversation.c:1310 +msgid "_Send Message" +msgstr "" + +#: ../libpurple/conversation.c:1720 +#, c-format +msgid "%s entered the room." +msgstr "" + +#: ../libpurple/conversation.c:1723 +#, c-format +msgid "%s [<I>%s</I>] entered the room." +msgstr "" + +#: ../libpurple/conversation.c:1834 +#, c-format +msgid "You are now known as %s" +msgstr "" + +#: ../libpurple/conversation.c:1854 +#, c-format +msgid "%s is now known as %s" +msgstr "" + +#: ../libpurple/conversation.c:1929 +#, c-format +msgid "%s left the room." +msgstr "" + +#: ../libpurple/conversation.c:1932 +#, c-format +msgid "%s left the room (%s)." +msgstr "" + +#: ../libpurple/conversation.c:2131 ../libpurple/conversation.c:2142 +msgid "Invite to chat" +msgstr "" + +#. Put our happy label in it. +#: ../libpurple/conversation.c:2143 ../pidgin/gtkconv.c:897 +msgid "" +"Please enter the name of the user you wish to invite, along with an optional" +" invite message." +msgstr "" + +#: ../libpurple/dbus-server.c:610 +#, c-format +msgid "Failed to get connection: %s" +msgstr "" + +#: ../libpurple/dbus-server.c:622 +#, c-format +msgid "Failed to get name: %s" +msgstr "" + +#: ../libpurple/dbus-server.c:634 +#, c-format +msgid "Failed to get serv name: %s" +msgstr "" + +#: ../libpurple/dbus-server.h:86 +msgid "Purple's D-BUS server is not running for the reason listed below" +msgstr "" + +#: ../libpurple/desktopitem.c:287 ../libpurple/desktopitem.c:880 +msgid "No name" +msgstr "" + +#: ../libpurple/dnsquery.c:616 +msgid "Unable to create new resolver process\n" +msgstr "" + +#: ../libpurple/dnsquery.c:621 +msgid "Unable to send request to resolver process\n" +msgstr "" + +#: ../libpurple/dnsquery.c:654 ../libpurple/dnsquery.c:785 +#, c-format +msgid "" +"Error resolving %s:\n" +"%s" +msgstr "" + +#: ../libpurple/dnsquery.c:657 ../libpurple/dnsquery.c:799 +#: ../libpurple/dnsquery.c:851 ../libpurple/dnsquery.c:862 +#, c-format +msgid "Error resolving %s: %d" +msgstr "" + +#: ../libpurple/dnsquery.c:681 +#, c-format +msgid "" +"Error reading from resolver process:\n" +"%s" +msgstr "" + +#: ../libpurple/dnsquery.c:685 +#, c-format +msgid "Resolver process exited without answering our request" +msgstr "" + +#: ../libpurple/dnsquery.c:749 +#, c-format +msgid "Error converting %s to punycode: %d" +msgstr "" + +#: ../libpurple/dnsquery.c:824 +#, c-format +msgid "Thread creation failure: %s" +msgstr "" + +#: ../libpurple/dnsquery.c:825 ../libpurple/protocols/oscar/oscar.c:1124 +#: ../libpurple/protocols/oscar/util.c:69 +msgid "Unknown reason" +msgstr "" + +#: ../libpurple/dnsquery.c:899 +msgid "Aborting DNS lookup in Tor Proxy mode." +msgstr "" + +#: ../libpurple/ft.c:346 +#, c-format +msgid "" +"Error reading %s: \n" +"%s.\n" +msgstr "" + +#: ../libpurple/ft.c:350 +#, c-format +msgid "" +"Error writing %s: \n" +"%s.\n" +msgstr "" + +#: ../libpurple/ft.c:354 +#, c-format +msgid "" +"Error accessing %s: \n" +"%s.\n" +msgstr "" + +#: ../libpurple/ft.c:392 +msgid "Directory is not writable." +msgstr "" + +#: ../libpurple/ft.c:406 +msgid "Cannot send a file of 0 bytes." +msgstr "" + +#: ../libpurple/ft.c:415 +msgid "Cannot send a directory." +msgstr "" + +#: ../libpurple/ft.c:423 +#, c-format +msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n" +msgstr "" + +#: ../libpurple/ft.c:442 +msgid "File is not readable." +msgstr "" + +#: ../libpurple/ft.c:506 +#, c-format +msgid "%s wants to send you %s (%s)" +msgstr "" + +#: ../libpurple/ft.c:513 +#, c-format +msgid "%s wants to send you a file" +msgstr "" + +#: ../libpurple/ft.c:562 +#, c-format +msgid "Accept file transfer request from %s?" +msgstr "" + +#: ../libpurple/ft.c:566 +#, c-format +msgid "" +"A file is available for download from:\n" +"Remote host: %s\n" +"Remote port: %d" +msgstr "" + +#: ../libpurple/ft.c:602 +#, c-format +msgid "%s is offering to send file %s" +msgstr "" + +#: ../libpurple/ft.c:661 +#, c-format +msgid "%s is not a valid filename.\n" +msgstr "" + +#: ../libpurple/ft.c:688 +#, c-format +msgid "Offering to send %s to %s" +msgstr "" + +#: ../libpurple/ft.c:699 +#, c-format +msgid "Starting transfer of %s from %s" +msgstr "" + +#: ../libpurple/ft.c:887 +#, c-format +msgid "Transfer of file <A HREF=\"file://%s\">%s</A> complete" +msgstr "" + +#: ../libpurple/ft.c:892 +#, c-format +msgid "Transfer of file %s complete" +msgstr "" + +#: ../libpurple/ft.c:897 +msgid "File transfer complete" +msgstr "" + +#: ../libpurple/ft.c:1511 +#, c-format +msgid "You cancelled the transfer of %s" +msgstr "" + +#: ../libpurple/ft.c:1516 +msgid "File transfer cancelled" +msgstr "" + +#: ../libpurple/ft.c:1574 +#, c-format +msgid "%s cancelled the transfer of %s" +msgstr "" + +#: ../libpurple/ft.c:1579 +#, c-format +msgid "%s cancelled the file transfer" +msgstr "" + +#: ../libpurple/ft.c:1636 +#, c-format +msgid "File transfer to %s failed." +msgstr "" + +#: ../libpurple/ft.c:1638 +#, c-format +msgid "File transfer from %s failed." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:1 +msgid "Run the command in a terminal" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:2 +msgid "The command used to handle \"aim\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:3 +msgid "The command used to handle \"gg\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:4 +msgid "The command used to handle \"icq\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:5 +msgid "The command used to handle \"irc\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:6 +msgid "The command used to handle \"msnim\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:7 +msgid "The command used to handle \"sip\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:8 +msgid "The command used to handle \"xmpp\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:9 +msgid "The command used to handle \"ymsgr\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:10 +msgid "The handler for \"aim\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:11 +msgid "The handler for \"gg\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:12 +msgid "The handler for \"icq\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:13 +msgid "The handler for \"irc\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:14 +msgid "The handler for \"msnim\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:15 +msgid "The handler for \"sip\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:16 +msgid "The handler for \"xmpp\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:17 +msgid "The handler for \"ymsgr\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:18 +msgid "" +"True if the command specified in the \"command\" key should handle \"aim\" " +"URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:19 +msgid "" +"True if the command specified in the \"command\" key should handle \"gg\" " +"URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:20 +msgid "" +"True if the command specified in the \"command\" key should handle \"icq\" " +"URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:21 +msgid "" +"True if the command specified in the \"command\" key should handle \"irc\" " +"URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:22 +msgid "" +"True if the command specified in the \"command\" key should handle \"msnim\"" +" URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:23 +msgid "" +"True if the command specified in the \"command\" key should handle \"sip\" " +"URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:24 +msgid "" +"True if the command specified in the \"command\" key should handle \"xmpp\" " +"URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:25 +msgid "" +"True if the command specified in the \"command\" key should handle \"ymsgr\"" +" URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:26 +msgid "" +"True if the command used to handle this type of URL should be run in a " +"terminal." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:27 +msgid "Whether the specified command should handle \"aim\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:28 +msgid "Whether the specified command should handle \"gg\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:29 +msgid "Whether the specified command should handle \"icq\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:30 +msgid "Whether the specified command should handle \"irc\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:31 +msgid "Whether the specified command should handle \"msnim\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:32 +msgid "Whether the specified command should handle \"sip\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:33 +msgid "Whether the specified command should handle \"xmpp\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:34 +msgid "Whether the specified command should handle \"ymsgr\" URLs" +msgstr "" + +#: ../libpurple/log.c:198 +msgid "<b><font color=\"red\">The logger has no read function</font></b>" +msgstr "" + +#: ../libpurple/log.c:655 +msgid "HTML" +msgstr "" + +#: ../libpurple/log.c:669 +msgid "Plain text" +msgstr "" + +#: ../libpurple/log.c:683 +msgid "Old flat format" +msgstr "" + +#: ../libpurple/log.c:914 +msgid "Logging of this conversation failed." +msgstr "" + +#: ../libpurple/log.c:1357 +msgid "XML" +msgstr "" + +#: ../libpurple/log.c:1444 +#, c-format +msgid "" +"<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" +"REPLY>:</b></font> %s<br/>\n" +msgstr "" + +#: ../libpurple/log.c:1446 +#, c-format +msgid "" +"<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" +"REPLY>:</b></font> %s<br/>\n" +msgstr "" + +#: ../libpurple/log.c:1505 ../libpurple/log.c:1638 +msgid "<font color=\"red\"><b>Unable to find log path!</b></font>" +msgstr "" + +#: ../libpurple/log.c:1517 ../libpurple/log.c:1647 +#, c-format +msgid "<font color=\"red\"><b>Could not read file: %s</b></font>" +msgstr "" + +#: ../libpurple/log.c:1579 +#, c-format +msgid "(%s) %s <AUTO-REPLY>: %s\n" +msgstr "" + +#: ../libpurple/media/backend-fs2.c:880 +msgid "" +"No codecs found. Install some GStreamer codecs found in GStreamer plugins " +"packages." +msgstr "" + +#: ../libpurple/media/backend-fs2.c:889 +msgid "" +"No codecs left. Your codec preferences in fs-codecs.conf are too strict." +msgstr "" + +#: ../libpurple/media/backend-fs2.c:919 +msgid "A non-recoverable Farsight2 error has occurred." +msgstr "" + +#: ../libpurple/media/backend-fs2.c:922 +msgid "A non-recoverable Farstream error has occurred." +msgstr "" + +#: ../libpurple/media/backend-fs2.c:1191 +msgid "Error with your microphone" +msgstr "" + +#: ../libpurple/media/backend-fs2.c:1194 +msgid "Error with your webcam" +msgstr "" + +#: ../libpurple/media/backend-fs2.c:1201 +msgid "Conference error" +msgstr "" + +#: ../libpurple/media/backend-fs2.c:1610 +#, c-format +msgid "Error creating session: %s" +msgstr "" + +#: ../libpurple/plugin.c:355 +#, c-format +msgid "You are using %s, but this plugin requires %s." +msgstr "" + +#: ../libpurple/plugin.c:370 +msgid "This plugin has not defined an ID." +msgstr "" + +#: ../libpurple/plugin.c:438 +#, c-format +msgid "Plugin magic mismatch %d (need %d)" +msgstr "" + +#: ../libpurple/plugin.c:455 +#, c-format +msgid "ABI version mismatch %d.%d.x (need %d.%d.x)" +msgstr "" + +#: ../libpurple/plugin.c:472 +msgid "" +"Plugin does not implement all required functions (list_icon, login and " +"close)" +msgstr "" + +#: ../libpurple/plugin.c:537 +#, c-format +msgid "" +"The required plugin %s was not found. Please install this plugin and try " +"again." +msgstr "" + +#: ../libpurple/plugin.c:542 +msgid "Unable to load the plugin" +msgstr "" + +#: ../libpurple/plugin.c:564 +#, c-format +msgid "The required plugin %s was unable to load." +msgstr "" + +#: ../libpurple/plugin.c:568 +msgid "Unable to load your plugin." +msgstr "" + +#: ../libpurple/plugin.c:655 +#, c-format +msgid "%s requires %s, but it failed to unload." +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:23 +msgid "Autoaccept" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:25 ../libpurple/plugins/autoaccept.c:26 +msgid "Auto-accept file transfer requests from selected users." +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:78 +#, c-format +msgid "Autoaccepted file transfer of \"%s\" from \"%s\" completed." +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:80 +msgid "Autoaccept complete" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:200 +#, c-format +msgid "When a file-transfer request arrives from %s" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:202 +msgid "Set Autoaccept Setting" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:204 +msgid "_Save" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:205 ../libpurple/plugins/idle.c:166 +#: ../libpurple/plugins/idle.c:200 ../libpurple/plugins/idle.c:226 +#: ../libpurple/protocols/mxit/actions.c:502 +#: ../libpurple/protocols/oscar/authorization.c:99 +#: ../libpurple/protocols/oscar/oscar.c:1224 +#: ../libpurple/protocols/oscar/oscar.c:4937 +#: ../libpurple/protocols/oscar/oscar.c:4994 +#: ../libpurple/protocols/oscar/oscar.c:5277 +#: ../libpurple/protocols/oscar/oscar.c:5334 ../libpurple/request.h:1498 +#: ../libpurple/request.h:1508 ../libpurple/request.h:1521 +msgid "_Cancel" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:208 ../libpurple/plugins/autoaccept.c:278 +msgid "Ask" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:209 ../libpurple/plugins/autoaccept.c:279 +msgid "Auto Accept" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:210 ../libpurple/plugins/autoaccept.c:280 +msgid "Auto Reject" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:225 +msgid "Autoaccept File Transfers..." +msgstr "" + +#. XXX: Is there a better way than this? There really should be. +#: ../libpurple/plugins/autoaccept.c:270 +msgid "" +"Path to save the files in\n" +"(Please provide the full path)" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:275 +msgid "" +"When a file-transfer request arrives from a user who is\n" +"*not* on your buddy list:" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:284 +msgid "" +"Notify with a popup when an autoaccepted file transfer is complete\n" +"(only when there's no conversation with the sender)" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:289 +msgid "Create a new directory for each user" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:293 +msgid "Escape the filenames" +msgstr "" + +#: ../libpurple/plugins/buddynote.c:46 ../libpurple/protocols/msn/msn.c:2487 +#: ../libpurple/protocols/msn/msn.c:2517 +msgid "Notes" +msgstr "" + +#: ../libpurple/plugins/buddynote.c:47 +msgid "Enter your notes below..." +msgstr "" + +#: ../libpurple/plugins/buddynote.c:65 +msgid "Edit Notes..." +msgstr "" + +#. *< major version +#. *< minor version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/buddynote.c:90 ../pidgin/plugins/gtkbuddynote.c:76 +msgid "Buddy Notes" +msgstr "" + +#. *< name +#. *< version +#: ../libpurple/plugins/buddynote.c:92 ../pidgin/plugins/gtkbuddynote.c:78 +msgid "Store notes on particular buddies." +msgstr "" + +#. *< summary +#: ../libpurple/plugins/buddynote.c:93 ../pidgin/plugins/gtkbuddynote.c:79 +msgid "Adds the option to store notes for buddies on your buddy list." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/ciphertest.c:264 +msgid "Cipher Test" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/ciphertest.c:267 ../libpurple/plugins/ciphertest.c:269 +msgid "Tests the ciphers that ship with libpurple." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/dbus-example.c:155 +msgid "DBus Example" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/dbus-example.c:158 +#: ../libpurple/plugins/dbus-example.c:160 +msgid "DBus Plugin Example" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/filectl.c:248 +msgid "File Control" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/filectl.c:251 ../libpurple/plugins/filectl.c:253 +msgid "Allows control by entering commands in a file." +msgstr "" + +#: ../libpurple/plugins/idle.c:154 ../libpurple/plugins/idle.c:214 +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. +#: ../libpurple/plugins/idle.c:161 ../libpurple/plugins/idle.c:195 +#: ../libpurple/plugins/idle.c:221 ../libpurple/plugins/idle.c:314 +msgid "I'dle Mak'er" +msgstr "" + +#: ../libpurple/plugins/idle.c:162 ../libpurple/plugins/idle.c:254 +msgid "Set Account Idle Time" +msgstr "" + +#: ../libpurple/plugins/idle.c:165 ../libpurple/plugins/idle.c:225 +msgid "_Set" +msgstr "" + +#: ../libpurple/plugins/idle.c:180 +msgid "None of your accounts are idle." +msgstr "" + +#: ../libpurple/plugins/idle.c:196 ../libpurple/plugins/idle.c:258 +msgid "Unset Account Idle Time" +msgstr "" + +#: ../libpurple/plugins/idle.c:199 +msgid "_Unset" +msgstr "" + +#: ../libpurple/plugins/idle.c:222 ../libpurple/plugins/idle.c:262 +msgid "Set Idle Time for All Accounts" +msgstr "" + +#: ../libpurple/plugins/idle.c:267 +msgid "Unset Idle Time for All Idled Accounts" +msgstr "" + +#: ../libpurple/plugins/idle.c:316 ../libpurple/plugins/idle.c:317 +msgid "Allows you to hand-configure how long you've been idle" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/ipc-test-client.c:87 +msgid "IPC Test Client" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../libpurple/plugins/ipc-test-client.c:90 +msgid "Test plugin IPC support, as a client." +msgstr "" + +#. * description +#: ../libpurple/plugins/ipc-test-client.c:92 +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 +#: ../libpurple/plugins/ipc-test-server.c:74 +msgid "IPC Test Server" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../libpurple/plugins/ipc-test-server.c:77 +msgid "Test plugin IPC support, as a server." +msgstr "" + +#. * description +#: ../libpurple/plugins/ipc-test-server.c:79 +msgid "Test plugin IPC support, as a server. This registers the IPC commands." +msgstr "" + +#: ../libpurple/plugins/joinpart.c:232 +msgid "Hide Joins/Parts" +msgstr "" + +#. Translators: Followed by an input request a number of people +#: ../libpurple/plugins/joinpart.c:237 +msgid "For rooms with more than this many people" +msgstr "" + +#: ../libpurple/plugins/joinpart.c:242 +msgid "If user has not spoken in this many minutes" +msgstr "" + +#: ../libpurple/plugins/joinpart.c:247 +msgid "Apply hiding rules to buddies" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/joinpart.c:277 +msgid "Join/Part Hiding" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../libpurple/plugins/joinpart.c:280 +msgid "Hides extraneous join/part messages." +msgstr "" + +#. * description +#: ../libpurple/plugins/joinpart.c:282 +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. +#: ../libpurple/plugins/log_reader.c:499 +msgid "(UTC)" +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1561 +msgid "User is offline." +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1567 +msgid "Auto-response sent:" +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1582 +#: ../libpurple/plugins/log_reader.c:1585 +#: ../libpurple/plugins/statenotify.c:93 +#, c-format +msgid "%s has signed off." +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1606 +msgid "One or more messages may have been undeliverable." +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1616 +msgid "You were disconnected from the server." +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1624 +msgid "" +"You are currently disconnected. Messages will not be received unless you are" +" logged in." +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1639 +msgid "Message could not be sent because the maximum length was exceeded." +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1644 +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. +#: ../libpurple/plugins/log_reader.c:2726 +#: ../libpurple/plugins/log_reader.c:2882 +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. +#: ../libpurple/plugins/log_reader.c:2739 +#: ../libpurple/plugins/log_reader.c:2887 +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. +#: ../libpurple/plugins/log_reader.c:2751 +#: ../libpurple/plugins/log_reader.c:2891 +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. +#: ../libpurple/plugins/log_reader.c:2765 +#: ../libpurple/plugins/log_reader.c:2896 +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. +#: ../libpurple/plugins/log_reader.c:2777 +#: ../libpurple/plugins/log_reader.c:2900 +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. +#: ../libpurple/plugins/log_reader.c:2789 +#: ../libpurple/plugins/log_reader.c:2904 +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. +#: ../libpurple/plugins/log_reader.c:2801 +#: ../libpurple/plugins/log_reader.c:2908 +msgid "aMSN" +msgstr "" + +#. Add general preferences. +#: ../libpurple/plugins/log_reader.c:2864 +msgid "General Log Reading Configuration" +msgstr "" + +#: ../libpurple/plugins/log_reader.c:2868 +msgid "Fast size calculations" +msgstr "" + +#: ../libpurple/plugins/log_reader.c:2872 +msgid "Use name heuristics" +msgstr "" + +#. Add Log Directory preferences. +#: ../libpurple/plugins/log_reader.c:2878 +msgid "Log Directory" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/log_reader.c:2937 +msgid "Log Reader" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../libpurple/plugins/log_reader.c:2941 +msgid "Includes other IM clients' logs in the log viewer." +msgstr "" + +#. * description +#: ../libpurple/plugins/log_reader.c:2945 +msgid "" +"When viewing logs, this plugin will include logs from other IM clients. Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n" +"\n" +"WARNING: This plugin is still alpha code and may crash frequently. Use it at your own risk!" +msgstr "" + +#: ../libpurple/plugins/mono/loader/mono.c:224 +msgid "Mono Plugin Loader" +msgstr "" + +#: ../libpurple/plugins/mono/loader/mono.c:226 +#: ../libpurple/plugins/mono/loader/mono.c:227 +msgid "Loads .NET plugins with Mono." +msgstr "" + +#: ../libpurple/plugins/newline.c:57 +msgid "Add new line in IMs" +msgstr "" + +#: ../libpurple/plugins/newline.c:61 +msgid "Add new line in Chats" +msgstr "" + +#. *< magic +#. *< major version +#. *< minor version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/newline.c:104 +msgid "New Line" +msgstr "" + +#. *< name +#. *< version +#: ../libpurple/plugins/newline.c:106 +msgid "Prepends a newline to displayed message." +msgstr "" + +#. *< summary +#: ../libpurple/plugins/newline.c:107 +msgid "" +"Prepends a newline to messages so that the rest of the message appears below" +" the username in the conversation window." +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:23 +msgid "Offline Message Emulation" +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:25 ../libpurple/plugins/offlinemsg.c:26 +msgid "Save messages sent to an offline user as pounce." +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:95 +msgid "" +"The rest of the messages will be saved as pounces. You can edit/delete the " +"pounce from the `Buddy Pounce' dialog." +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:156 +#, 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 "" + +#: ../libpurple/plugins/offlinemsg.c:160 +msgid "Offline Message" +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:161 +msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog" +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:165 +#: ../libpurple/protocols/msn/error.c:378 +#: ../libpurple/protocols/msn/msn.c:1123 ../libpurple/protocols/msn/msn.c:1126 +#: ../libpurple/protocols/novell/novell.c:1929 +#: ../libpurple/protocols/silc/buddy.c:318 +#: ../libpurple/protocols/silc/pk.c:114 ../libpurple/protocols/silc/wb.c:309 +#: ../libpurple/protocols/silc10/buddy.c:314 +#: ../libpurple/protocols/silc10/pk.c:119 +#: ../libpurple/protocols/silc10/wb.c:307 ../pidgin/gtkrequest.c:298 +msgid "Yes" +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:166 +#: ../libpurple/protocols/msn/error.c:379 +#: ../libpurple/protocols/msn/msn.c:1123 ../libpurple/protocols/msn/msn.c:1126 +#: ../libpurple/protocols/novell/novell.c:1930 +#: ../libpurple/protocols/silc/buddy.c:319 +#: ../libpurple/protocols/silc/pk.c:115 ../libpurple/protocols/silc/wb.c:310 +#: ../libpurple/protocols/silc10/buddy.c:315 +#: ../libpurple/protocols/silc10/pk.c:120 +#: ../libpurple/protocols/silc10/wb.c:308 ../pidgin/gtkrequest.c:299 +msgid "No" +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:193 +msgid "Save offline messages in pounce" +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:197 +msgid "Do not ask. Always save in pounce." +msgstr "" + +#: ../libpurple/plugins/one_time_password.c:68 +msgid "One Time Password" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/one_time_password.c:123 +msgid "One Time Password Support" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../libpurple/plugins/one_time_password.c:126 +msgid "Enforce that passwords are used only once." +msgstr "" + +#. * description +#: ../libpurple/plugins/one_time_password.c:128 +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 +#: ../libpurple/plugins/perl/perl.c:671 +msgid "Perl Plugin Loader" +msgstr "" + +#. *< name +#. *< version +#. *< summary +#: ../libpurple/plugins/perl/perl.c:673 ../libpurple/plugins/perl/perl.c:674 +msgid "Provides support for loading perl plugins." +msgstr "" + +#: ../libpurple/plugins/psychic.c:20 +msgid "Psychic Mode" +msgstr "" + +#: ../libpurple/plugins/psychic.c:21 +msgid "Psychic mode for incoming conversation" +msgstr "" + +#: ../libpurple/plugins/psychic.c:22 +msgid "" +"Causes conversation windows to appear as other users begin to message you. " +"This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" +msgstr "" + +#: ../libpurple/plugins/psychic.c:72 +msgid "You feel a disturbance in the force..." +msgstr "" + +#: ../libpurple/plugins/psychic.c:92 +msgid "Only enable for users on the buddy list" +msgstr "" + +#: ../libpurple/plugins/psychic.c:97 +msgid "Disable when away" +msgstr "" + +#: ../libpurple/plugins/psychic.c:101 +msgid "Display notification message in conversations" +msgstr "" + +#: ../libpurple/plugins/psychic.c:106 +msgid "Raise psychic conversations" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/signals-test.c:928 +msgid "Signals Test" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/signals-test.c:931 +#: ../libpurple/plugins/signals-test.c:933 +msgid "Test to see that all signals are working properly." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/simple.c:37 +msgid "Simple Plugin" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/simple.c:40 ../libpurple/plugins/simple.c:42 +msgid "Tests to see that most things are working." +msgstr "" + +#. Scheme name +#: ../libpurple/plugins/ssl/ssl-gnutls.c:1148 +#: ../libpurple/plugins/ssl/ssl-nss.c:963 +msgid "X.509 Certificates" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/ssl/ssl-gnutls.c:1224 +msgid "GNUTLS" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/ssl/ssl-gnutls.c:1227 +#: ../libpurple/plugins/ssl/ssl-gnutls.c:1229 +msgid "Provides SSL support through GNUTLS." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/ssl/ssl-nss.c:1040 +msgid "NSS" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/ssl/ssl-nss.c:1043 +#: ../libpurple/plugins/ssl/ssl-nss.c:1045 +msgid "Provides SSL support through Mozilla NSS." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/ssl/ssl.c:94 +msgid "SSL" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/ssl/ssl.c:97 ../libpurple/plugins/ssl/ssl.c:99 +msgid "Provides a wrapper around SSL support libraries." +msgstr "" + +#: ../libpurple/plugins/statenotify.c:63 +#, c-format +msgid "%s is no longer away." +msgstr "" + +#: ../libpurple/plugins/statenotify.c:65 +#, c-format +msgid "%s has gone away." +msgstr "" + +#: ../libpurple/plugins/statenotify.c:75 +#, c-format +msgid "%s has become idle." +msgstr "" + +#: ../libpurple/plugins/statenotify.c:77 +#, c-format +msgid "%s is no longer idle." +msgstr "" + +#: ../libpurple/plugins/statenotify.c:86 +#, c-format +msgid "%s has signed on." +msgstr "" + +#: ../libpurple/plugins/statenotify.c:104 +msgid "Notify When" +msgstr "" + +#: ../libpurple/plugins/statenotify.c:107 +msgid "Buddy Goes _Away" +msgstr "" + +#: ../libpurple/plugins/statenotify.c:110 +msgid "Buddy Goes _Idle" +msgstr "" + +#: ../libpurple/plugins/statenotify.c:113 +msgid "Buddy _Signs On/Off" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/statenotify.c:161 +msgid "Buddy State Notification" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/statenotify.c:164 +#: ../libpurple/plugins/statenotify.c:167 +msgid "" +"Notifies in a conversation window when a buddy goes or returns from away or " +"idle." +msgstr "" + +#: ../libpurple/plugins/tcl/tcl.c:403 +msgid "Tcl Plugin Loader" +msgstr "" + +#: ../libpurple/plugins/tcl/tcl.c:405 ../libpurple/plugins/tcl/tcl.c:406 +msgid "Provides support for loading Tcl plugins" +msgstr "" + +#: ../libpurple/plugins/tcl/tcl.c:489 +msgid "" +"Unable to detect ActiveTCL installation. If you wish to use TCL plugins, " +"install ActiveTCL from http://www.activestate.com\n" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:99 +msgid "" +"Unable to find Apple's \"Bonjour for Windows\" toolkit, see " +"http://d.pidgin.im/BonjourWindows for more information." +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:119 +msgid "Unable to listen for incoming IM connections" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:146 +msgid "" +"Unable to establish connection with the local mDNS server. Is it running?" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:386 +#: ../libpurple/protocols/bonjour/bonjour.c:736 +#: ../libpurple/protocols/gg/gg.c:302 +#: ../libpurple/protocols/jabber/jabber.c:1322 +msgid "First name" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:388 +#: ../libpurple/protocols/bonjour/bonjour.c:739 +#: ../libpurple/protocols/gg/gg.c:297 +#: ../libpurple/protocols/jabber/jabber.c:1323 +msgid "Last name" +msgstr "" + +#. email +#: ../libpurple/protocols/bonjour/bonjour.c:392 +#: ../libpurple/protocols/bonjour/bonjour.c:742 +#: ../libpurple/protocols/jabber/buddy.c:362 +#: ../libpurple/protocols/jabber/buddy.c:1127 +#: ../libpurple/protocols/jabber/buddy.c:1140 +#: ../libpurple/protocols/jabber/buddy.c:2006 +#: ../libpurple/protocols/jabber/jabber.c:1320 +#: ../libpurple/protocols/mxit/actions.c:294 +#: ../libpurple/protocols/silc/ops.c:1054 +#: ../libpurple/protocols/silc/silc.c:1010 +#: ../libpurple/protocols/silc/silc.c:1251 +#: ../libpurple/protocols/silc/util.c:562 +#: ../libpurple/protocols/silc10/ops.c:1075 +#: ../libpurple/protocols/silc10/silc.c:706 +#: ../libpurple/protocols/silc10/silc.c:947 +#: ../libpurple/protocols/silc10/util.c:555 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1060 +msgid "Email" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:395 +#: ../libpurple/protocols/bonjour/bonjour.c:745 +msgid "AIM Account" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:398 +#: ../libpurple/protocols/bonjour/bonjour.c:748 +msgid "XMPP Account" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/bonjour/bonjour.c:557 +#: ../libpurple/protocols/bonjour/bonjour.c:559 +msgid "Bonjour Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:701 +msgid "Purple Person" +msgstr "" + +#. Creating the options for the protocol +#: ../libpurple/protocols/bonjour/bonjour.c:733 +msgid "Local Port" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.h:33 +msgid "Bonjour" +msgstr "" + +#: ../libpurple/protocols/bonjour/jabber.c:398 +#, c-format +msgid "%s has closed the conversation." +msgstr "" + +#: ../libpurple/protocols/bonjour/jabber.c:488 +#: ../libpurple/protocols/bonjour/jabber.c:553 +#: ../libpurple/protocols/bonjour/jabber.c:598 +#: ../libpurple/protocols/bonjour/jabber.c:874 +#: ../libpurple/protocols/bonjour/jabber.c:895 +msgid "Unable to send the message, the conversation couldn't be started." +msgstr "" + +#: ../libpurple/protocols/bonjour/mdns_win32.c:109 +msgid "Error communicating with local mDNSResponder." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:96 ../libpurple/proxy.c:2359 +#: ../libpurple/proxy.c:2427 +msgid "Invalid proxy settings" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:97 ../libpurple/proxy.c:2359 +#: ../libpurple/proxy.c:2427 +msgid "" +"Either the host name or port number specified for your given proxy type is " +"invalid." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:126 ../libpurple/protocols/gg/gg.c:133 +#: ../libpurple/protocols/gg/gg.c:139 +msgid "Save Buddylist..." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:127 +msgid "Your buddylist is empty, nothing was written to the file." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:134 +msgid "Buddylist saved successfully!" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:137 +#, c-format +msgid "Couldn't write buddy list for %s to %s" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:158 ../libpurple/protocols/gg/gg.c:159 +msgid "Couldn't load buddylist" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:175 +msgid "Load Buddylist..." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:176 +msgid "Buddylist loaded successfully!" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:187 +msgid "Save buddylist..." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:197 ../libpurple/protocols/gg/gg.c:2193 +msgid "Load buddylist from file..." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:312 ../libpurple/protocols/gg/gg.c:805 +#: ../libpurple/protocols/gg/gg.c:876 +#: ../libpurple/protocols/jabber/jabber.c:1325 +#: ../libpurple/protocols/oscar/userinfo.c:462 +#: ../libpurple/protocols/oscar/userinfo.c:470 +msgid "City" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:317 +msgid "Year of birth" +msgstr "" + +#. gender +#: ../libpurple/protocols/gg/gg.c:320 ../libpurple/protocols/msn/msn.c:2416 +#: ../libpurple/protocols/mxit/actions.c:245 +#: ../libpurple/protocols/mxit/login.c:349 +#: ../libpurple/protocols/mxit/profile.c:217 +#: ../libpurple/protocols/mxit/profile.c:327 +#: ../libpurple/protocols/myspace/user.c:131 +#: ../libpurple/protocols/oscar/userinfo.c:423 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1090 +msgid "Gender" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:321 +msgid "Male or female" +msgstr "" + +#. 0 +#: ../libpurple/protocols/gg/gg.c:322 +#: ../libpurple/protocols/mxit/actions.c:247 +#: ../libpurple/protocols/mxit/login.c:351 +#: ../libpurple/protocols/mxit/profile.c:217 +#: ../libpurple/protocols/oscar/userinfo.c:423 +msgid "Male" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:323 +#: ../libpurple/protocols/mxit/actions.c:246 +#: ../libpurple/protocols/mxit/login.c:350 +#: ../libpurple/protocols/mxit/profile.c:217 +#: ../libpurple/protocols/oscar/userinfo.c:423 +msgid "Female" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:327 +msgid "Only online" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:331 ../libpurple/protocols/gg/gg.c:332 +msgid "Find buddies" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:333 +msgid "Please, enter your search criteria below" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:375 +msgid "Show status to:" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:376 +msgid "All people" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:377 +msgid "Only buddies" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:386 ../libpurple/protocols/gg/gg.c:387 +#: ../libpurple/protocols/gg/gg.c:2183 +msgid "Change status broadcasting" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:388 +msgid "Please, select who can see your status" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:448 +#, c-format +msgid "Select a chat for buddy: %s" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:451 ../libpurple/protocols/gg/gg.c:452 +msgid "Add to chat..." +msgstr "" + +#. 0 +#. Global +#: ../libpurple/protocols/gg/gg.c:759 +#: ../libpurple/protocols/jabber/jutil.c:703 +#: ../libpurple/protocols/msn/state.c:35 ../libpurple/protocols/msn/state.c:36 +#: ../libpurple/protocols/msn/state.c:43 ../libpurple/protocols/msn/state.c:44 +#: ../libpurple/protocols/mxit/roster.c:54 +#: ../libpurple/protocols/novell/novell.c:2839 +#: ../libpurple/protocols/yahoo/libymsg.c:4106 ../libpurple/status.c:163 +#: ../pidgin/gtkdocklet.c:548 ../pidgin/gtkstatusbox.c:1096 +#: ../pidgin/plugins/themeedit-icon.c:63 +msgid "Available" +msgstr "" + +#. 2 +#: ../libpurple/protocols/gg/gg.c:763 +#: ../libpurple/protocols/jabber/jabber.c:2394 +#: ../libpurple/protocols/jabber/jutil.c:704 +#: ../libpurple/protocols/mxit/roster.c:56 +msgid "Chatty" +msgstr "" + +#. 3 +#: ../libpurple/protocols/gg/gg.c:766 +#: ../libpurple/protocols/jabber/jabber.c:2440 +#: ../libpurple/protocols/jabber/jutil.c:707 +#: ../libpurple/protocols/mxit/roster.c:57 +#: ../libpurple/protocols/oscar/oscar.c:159 +#: ../libpurple/protocols/oscar/oscar.c:4846 +#: ../libpurple/protocols/sametime/sametime.c:3380 +msgid "Do Not Disturb" +msgstr "" + +#. 1 +#. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for +#. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message +#. Away stuff +#: ../libpurple/protocols/gg/gg.c:769 ../libpurple/protocols/irc/irc.c:595 +#: ../libpurple/protocols/irc/msgs.c:427 +#: ../libpurple/protocols/jabber/jutil.c:705 +#: ../libpurple/protocols/mxit/roster.c:55 +#: ../libpurple/protocols/novell/novell.c:2842 +#: ../libpurple/protocols/oscar/oscar.c:165 +#: ../libpurple/protocols/silc/buddy.c:1489 +#: ../libpurple/protocols/silc10/buddy.c:1496 +#: ../libpurple/protocols/yahoo/libymsg.c:4984 +#: ../libpurple/protocols/yahoo/libymsg.c:5071 ../libpurple/status.c:166 +#: ../pidgin/gtkdocklet.c:552 ../pidgin/gtkprefs.c:2707 +#: ../pidgin/gtkstatusbox.c:1097 ../pidgin/plugins/themeedit-icon.c:64 +msgid "Away" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:794 ../libpurple/protocols/gg/gg.c:867 +#: ../libpurple/protocols/oscar/oscar.c:2295 +#: ../libpurple/protocols/oscar/oscar.c:2318 +#: ../libpurple/protocols/oscar/userinfo.c:400 +msgid "UIN" +msgstr "" + +#. first name +#. optional information +#: ../libpurple/protocols/gg/gg.c:797 ../libpurple/protocols/gg/gg.c:870 +#: ../libpurple/protocols/jabber/buddy.c:2000 +#: ../libpurple/protocols/jabber/buddy.c:2187 +#: ../libpurple/protocols/mxit/actions.c:251 +#: ../libpurple/protocols/mxit/profile.c:220 +#: ../libpurple/protocols/mxit/profile.c:323 +#: ../libpurple/protocols/oscar/userinfo.c:411 +#: ../libpurple/protocols/silc/ops.c:1003 +#: ../libpurple/protocols/silc10/ops.c:1024 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:544 +msgid "First Name" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:810 ../libpurple/protocols/gg/gg.c:879 +msgid "Birth Year" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:860 ../libpurple/protocols/gg/gg.c:925 +#: ../libpurple/protocols/oscar/oscar.c:3012 +msgid "Unable to display the search results." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:916 +msgid "Gadu-Gadu Public Directory" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:917 +msgid "Search results" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:957 +msgid "No matching users found" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:958 +msgid "There are no users matching your search criteria." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:1312 ../libpurple/protocols/gg/gg.c:1467 +msgid "Unable to read from socket" +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). +#: ../libpurple/protocols/gg/gg.c:1496 +#: ../libpurple/protocols/myspace/myspace.c:1159 +#: ../libpurple/protocols/sametime/sametime.c:1578 +msgid "Connected" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:1505 ../libpurple/protocols/gg/gg.c:1759 +#: ../libpurple/protocols/silc/silc.c:375 +#: ../libpurple/protocols/silc/silc.c:422 +#: ../libpurple/protocols/silc10/silc.c:164 +msgid "Connection failed" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:1654 +msgid "Add to chat" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:1669 +msgid "Chat _name:" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:1739 +#, c-format +msgid "Unable to resolve hostname '%s': %s" +msgstr "" + +#. 1. connect to server +#. connect to the server +#: ../libpurple/protocols/gg/gg.c:1755 ../libpurple/protocols/irc/irc.c:361 +#: ../libpurple/protocols/jabber/jabber.c:1741 +#: ../libpurple/protocols/msn/session.c:432 +#: ../libpurple/protocols/myspace/myspace.c:2206 +#: ../libpurple/protocols/novell/novell.c:2198 +#: ../libpurple/protocols/oscar/oscar.c:834 +#: ../libpurple/protocols/sametime/sametime.c:3769 +#: ../libpurple/protocols/simple/simple.c:1960 +#: ../libpurple/protocols/yahoo/libymsg.c:3910 +#: ../libpurple/protocols/zephyr/zephyr.c:1584 ../pidgin/gtkstatusbox.c:716 +msgid "Connecting" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2086 +msgid "Chat error" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2087 +msgid "This chat name is already in use" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2170 +msgid "Not connected to the server" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2179 +msgid "Find buddies..." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2189 +msgid "Save buddylist to file..." +msgstr "" + +#. magic +#. major_version +#. minor_version +#. plugin type +#. ui_requirement +#. flags +#. dependencies +#. priority +#. id +#. name +#. version +#: ../libpurple/protocols/gg/gg.c:2297 +msgid "Gadu-Gadu Protocol Plugin" +msgstr "" + +#. summary +#: ../libpurple/protocols/gg/gg.c:2298 +msgid "Polish popular IM" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2347 +msgid "Gadu-Gadu User" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2351 +msgid "GG server" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2363 +#: ../libpurple/protocols/oscar/oscar.c:5742 +msgid "Don't use encryption" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2364 +#: ../libpurple/protocols/jabber/libxmpp.c:277 +#: ../libpurple/protocols/oscar/oscar.c:5740 +msgid "Use encryption if available" +msgstr "" + +#. TODO +#: ../libpurple/protocols/gg/gg.c:2368 +#: ../libpurple/protocols/jabber/libxmpp.c:276 +#: ../libpurple/protocols/oscar/oscar.c:5741 +msgid "Require encryption" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2371 +#: ../libpurple/protocols/jabber/libxmpp.c:286 +#: ../libpurple/protocols/oscar/oscar.c:5766 +msgid "Connection security" +msgstr "" + +#: ../libpurple/protocols/irc/cmds.c:43 +#: ../libpurple/protocols/silc/silc.c:1900 +#: ../libpurple/protocols/silc10/silc.c:1609 +#, c-format +msgid "Unknown command: %s" +msgstr "" + +#: ../libpurple/protocols/irc/cmds.c:536 +#: ../libpurple/protocols/jabber/jabber.c:2863 +#: ../libpurple/protocols/silc/silc.c:1590 +#: ../libpurple/protocols/silc10/silc.c:1299 +#, c-format +msgid "current topic is: %s" +msgstr "" + +#: ../libpurple/protocols/irc/cmds.c:540 +#: ../libpurple/protocols/jabber/jabber.c:2867 +#: ../libpurple/protocols/silc/silc.c:1594 +#: ../libpurple/protocols/silc10/silc.c:1303 +msgid "No topic is set" +msgstr "" + +#: ../libpurple/protocols/irc/dcc_send.c:304 +#: ../libpurple/protocols/irc/dcc_send.c:345 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:327 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:336 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:345 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1216 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1977 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:2074 +msgid "File Transfer Failed" +msgstr "" + +#: ../libpurple/protocols/irc/dcc_send.c:305 +#: ../libpurple/protocols/irc/dcc_send.c:346 +msgid "Unable to open a listening port." +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:77 +msgid "Error displaying MOTD" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:77 +msgid "No MOTD available" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:78 +msgid "There is no MOTD associated with this connection." +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:81 +#, c-format +msgid "MOTD for %s" +msgstr "" + +#. * TODO: Handle this better. Probably requires a PurpleBOSHConnection +#. * buffer that stores what is "being sent" until the +#. * PurpleHTTPConnection reports it is fully sent. +#. TODO: do we really want to disconnect on a failure to write? +#: ../libpurple/protocols/irc/irc.c:129 ../libpurple/protocols/irc/irc.c:174 +#: ../libpurple/protocols/irc/irc.c:693 ../libpurple/protocols/irc/irc.c:724 +#: ../libpurple/protocols/jabber/bosh.c:1044 +#: ../libpurple/protocols/jabber/bosh.c:1100 +#: ../libpurple/protocols/jabber/jabber.c:408 +#: ../libpurple/protocols/jabber/jabber.c:444 +#: ../libpurple/protocols/jabber/jabber.c:671 +#: ../libpurple/protocols/jabber/jabber.c:729 +#: ../libpurple/protocols/myspace/myspace.c:2070 +#: ../libpurple/protocols/oscar/flap_connection.c:474 +#: ../libpurple/protocols/sametime/sametime.c:412 +#: ../libpurple/protocols/sametime/sametime.c:1779 +#: ../libpurple/protocols/simple/simple.c:433 +#: ../libpurple/protocols/yahoo/libymsg.c:3376 +#: ../libpurple/protocols/yahoo/libymsg.c:3530 +#: ../libpurple/protocols/yahoo/ycht.c:476 ../libpurple/proxy.c:948 +#: ../libpurple/proxy.c:1544 ../libpurple/proxy.c:1658 +#: ../libpurple/proxy.c:1893 ../libpurple/proxy.c:1969 +#, c-format +msgid "Lost connection with server: %s" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:289 +msgid "View MOTD" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:301 ../libpurple/protocols/silc/chat.c:34 +#: ../libpurple/protocols/silc10/chat.c:33 +msgid "_Channel:" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:307 +#: ../libpurple/protocols/jabber/chat.c:62 ../pidgin/gtkaccount.c:594 +msgid "_Password:" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:340 +msgid "IRC nick and server may not contain whitespace" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:371 +#: ../libpurple/protocols/jabber/bosh.c:995 +#: ../libpurple/protocols/jabber/jabber.c:1064 +#: ../libpurple/protocols/novell/novell.c:2213 +#: ../libpurple/protocols/yahoo/libymsg.c:2188 +msgid "SSL support unavailable" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:384 +#: ../libpurple/protocols/jabber/bosh.c:1001 +#: ../libpurple/protocols/jabber/jabber.c:794 +#: ../libpurple/protocols/jabber/jabber.c:879 +#: ../libpurple/protocols/msn/msn.c:1379 +#: ../libpurple/protocols/msn/servconn.c:143 +#: ../libpurple/protocols/mxit/http.c:332 +#: ../libpurple/protocols/myspace/myspace.c:2224 +#: ../libpurple/protocols/novell/novell.c:1743 +#: ../libpurple/protocols/oscar/oscar.c:829 +#: ../libpurple/protocols/oscar/oscar.c:1051 +#: ../libpurple/protocols/oscar/oscar.c:1172 +#: ../libpurple/protocols/sametime/sametime.c:3773 +#: ../libpurple/protocols/silc/silc.c:451 +#: ../libpurple/protocols/simple/simple.c:482 +#: ../libpurple/protocols/simple/simple.c:1860 +#: ../libpurple/protocols/yahoo/libymsg.c:3583 +#: ../libpurple/protocols/yahoo/libymsg.c:3771 +#: ../libpurple/protocols/yahoo/libymsg.c:3856 +#: ../libpurple/protocols/yahoo/libymsg.c:3878 +#: ../libpurple/protocols/yahoo/libymsg.c:3891 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:2074 +#: ../libpurple/protocols/yahoo/yahoochat.c:1530 +#: ../libpurple/protocols/yahoo/yahoochat.c:1556 +#: ../libpurple/protocols/yahoo/ycht.c:549 +#: ../libpurple/protocols/yahoo/ycht.c:585 +msgid "Unable to connect" +msgstr "" + +#. this is a regular connect, error out +#: ../libpurple/protocols/irc/irc.c:475 +#: ../libpurple/protocols/myspace/myspace.c:2163 +#: ../libpurple/protocols/oscar/flap_connection.c:479 +#: ../libpurple/protocols/sametime/sametime.c:1804 +#: ../libpurple/protocols/simple/simple.c:452 +#: ../libpurple/protocols/simple/simple.c:1740 +#: ../libpurple/protocols/yahoo/libymsg.c:3465 +#: ../libpurple/protocols/yahoo/libymsg.c:3491 +#, c-format +msgid "Unable to connect: %s" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:702 ../libpurple/protocols/irc/irc.c:733 +#: ../libpurple/protocols/jabber/jabber.c:669 +#: ../libpurple/protocols/jabber/jabber.c:727 +#: ../libpurple/protocols/myspace/myspace.c:2079 +#: ../libpurple/protocols/oscar/flap_connection.c:472 +#: ../libpurple/protocols/sametime/sametime.c:1771 +#: ../libpurple/protocols/yahoo/libymsg.c:3383 +#: ../libpurple/protocols/yahoo/libymsg.c:3537 +#: ../libpurple/protocols/yahoo/ycht.c:482 ../libpurple/proxy.c:937 +#: ../libpurple/proxy.c:1532 ../libpurple/proxy.c:1646 +#: ../libpurple/proxy.c:1882 ../libpurple/proxy.c:1957 +msgid "Server closed the connection" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:869 +#: ../libpurple/protocols/silc/chat.c:1405 +#: ../libpurple/protocols/silc10/chat.c:1426 +#: ../libpurple/protocols/yahoo/yahoochat.c:1613 +msgid "Users" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:872 +#: ../libpurple/protocols/sametime/sametime.c:3457 +#: ../libpurple/protocols/silc/chat.c:1408 +#: ../libpurple/protocols/silc/ops.c:1405 +#: ../libpurple/protocols/silc10/chat.c:1429 +#: ../libpurple/protocols/silc10/ops.c:1382 +#: ../libpurple/protocols/yahoo/yahoochat.c:1622 +msgid "Topic" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#: ../libpurple/protocols/irc/irc.c:1016 +msgid "IRC Protocol Plugin" +msgstr "" + +#. * summary +#: ../libpurple/protocols/irc/irc.c:1017 +msgid "The IRC Protocol Plugin that Sucks Less" +msgstr "" + +#. set up account ID as user:server +#: ../libpurple/protocols/irc/irc.c:1042 ../libpurple/protocols/irc/msgs.c:448 +#: ../libpurple/protocols/msn/msn.c:3025 +#: ../libpurple/protocols/oscar/oscar.c:5754 +#: ../libpurple/protocols/sametime/sametime.c:5783 +#: ../libpurple/protocols/silc/ops.c:1261 +#: ../libpurple/protocols/silc/ops.c:1355 +#: ../libpurple/protocols/silc10/ops.c:1244 +#: ../libpurple/protocols/silc10/ops.c:1347 +#: ../libpurple/protocols/simple/simple.c:2164 +msgid "Server" +msgstr "" + +#. port to connect to +#: ../libpurple/protocols/irc/irc.c:1045 ../libpurple/protocols/msn/msn.c:3030 +#: ../libpurple/protocols/oscar/oscar.c:5757 +#: ../libpurple/protocols/sametime/sametime.c:5792 +#: ../libpurple/protocols/silc/silc.c:2196 +#: ../libpurple/protocols/silc10/silc.c:1910 +msgid "Port" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:1048 +msgid "Encodings" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:1051 +msgid "Auto-detect incoming UTF-8" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:1054 ../libpurple/protocols/irc/msgs.c:439 +msgid "Ident name" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:1057 ../libpurple/protocols/irc/msgs.c:431 +#: ../libpurple/protocols/silc/silc.c:1249 +#: ../libpurple/protocols/silc10/silc.c:945 +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); +#: ../libpurple/protocols/irc/irc.c:1065 +msgid "Use SSL" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:1069 +msgid "Authenticate with SASL" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:1073 +msgid "Allow plaintext SASL auth over unencrypted connection" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:261 +msgid "Bad mode" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:279 +#, c-format +msgid "Ban on %s by %s, set %s ago" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:283 +#, c-format +msgid "Ban on %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:298 +msgid "End of ban list" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:311 +#, c-format +msgid "You are banned from %s." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:312 +msgid "Banned" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:326 +#, c-format +msgid "Cannot ban %s: banlist is full" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:418 +msgid " <i>(ircop)</i>" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:419 +msgid " <i>(identified)</i>" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:420 +#: ../libpurple/protocols/oscar/userinfo.c:401 +#: ../libpurple/protocols/silc/ops.c:1434 +#: ../libpurple/protocols/silc10/ops.c:1414 +msgid "Nick" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:435 +msgid "Login name" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:443 +msgid "Host name" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:454 +#: ../libpurple/protocols/silc/ops.c:1280 +#: ../libpurple/protocols/silc10/ops.c:1272 +msgid "Currently on" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:459 +msgid "Idle for" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:462 +msgid "Online since" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:466 +msgid "<b>Defining adjective:</b>" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:466 +msgid "Glorious" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:613 +#, c-format +msgid "%s has changed the topic to: %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:615 +#, c-format +msgid "%s has cleared the topic." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:623 +#, c-format +msgid "The topic for %s is: %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:655 +#, c-format +msgid "Topic for %s set by %s at %s on %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:669 +#, c-format +msgid "Unknown message '%s'" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:670 +msgid "Unknown message" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:670 +msgid "The IRC server received a message it did not understand." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:691 +#, c-format +msgid "Users on %s: %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:799 +msgid "Time Response" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:800 +msgid "The IRC server's local time is:" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:810 +msgid "No such channel" +msgstr "" + +#. does this happen? +#: ../libpurple/protocols/irc/msgs.c:821 +msgid "no such channel" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:824 +msgid "User is not logged in" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:829 +msgid "No such nick or channel" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:849 +msgid "Could not send" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:900 +#, c-format +msgid "Joining %s requires an invitation." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:901 +msgid "Invitation only" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1030 +#: ../libpurple/protocols/jabber/presence.c:740 +#, c-format +msgid "You have been kicked by %s: (%s)" +msgstr "" + +#. Remove user from channel +#: ../libpurple/protocols/irc/msgs.c:1035 +#: ../libpurple/protocols/jabber/presence.c:747 +#: ../libpurple/protocols/silc/ops.c:726 +#: ../libpurple/protocols/silc10/ops.c:720 +#, c-format +msgid "Kicked by %s (%s)" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1058 +#, c-format +msgid "mode (%s %s) by %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1148 +#: ../libpurple/protocols/irc/msgs.c:1149 +#: ../libpurple/protocols/jabber/jabber.c:2885 +msgid "Invalid nickname" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1150 +msgid "" +"Your selected nickname was rejected by the server. It probably contains " +"invalid characters." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1155 +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. +#: ../libpurple/protocols/irc/msgs.c:1168 +#, c-format +msgid "The nickname \"%s\" is already being used." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1170 +#: ../libpurple/protocols/irc/msgs.c:1171 +msgid "Nickname in use" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1211 +msgid "Cannot change nick" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1211 +msgid "Could not change nick" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1235 +#, c-format +msgid "You have parted the channel%s%s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1274 +msgid "Error: invalid PONG from server" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1276 +#, c-format +msgid "PING reply -- Lag: %lu seconds" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1363 +#, c-format +msgid "Cannot join %s: Registration is required." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1364 +#: ../libpurple/protocols/silc/ops.c:1105 +#: ../libpurple/protocols/silc10/ops.c:1128 +msgid "Cannot join channel" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1394 +msgid "Nick or channel is temporarily unavailable." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1405 +#, c-format +msgid "Wallops from %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1507 +#: ../libpurple/protocols/irc/msgs.c:1630 +#, c-format +msgid "Failed to initialize SASL authentication: %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1528 +msgid "SASL authentication failed: No worthy authentication mechanisms found." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1534 +#: ../libpurple/protocols/irc/msgs.c:1670 +#, c-format +msgid "SASL authentication failed: %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1581 +msgid "" +"SASL authentication failed: Server does not support SASL authentication." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1590 +msgid "SASL authentication failed: Initializing SASL failed." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1720 +#: ../libpurple/protocols/irc/msgs.c:1763 +msgid "Incorrect Password" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1747 +msgid "SASL authentication failed: No worthy mechanisms found" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:141 +msgid "action <action to perform>: Perform an action." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:142 +msgid "authserv: Send a command to authserv" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:143 +msgid "" +"away [message]: Set an away message, or use no message to return from being" +" away." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:144 +msgid "ctcp <nick> <msg>: sends ctcp msg to nick." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:145 +msgid "chanserv: Send a command to chanserv" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:146 +msgid "" +"deop <nick1> [nick2] ...: Remove channel operator status from " +"someone. You must be a channel operator to do this." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:147 +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 "" + +#: ../libpurple/protocols/irc/parse.c:148 +msgid "" +"invite <nick> [room]: Invite someone to join you in the specified " +"channel, or the current channel." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:149 +msgid "" +"j <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " +"channels, optionally providing a channel key for each if needed." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:150 +msgid "" +"join <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " +"channels, optionally providing a channel key for each if needed." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:151 +msgid "" +"kick <nick> [message]: Remove someone from a channel. You must be a " +"channel operator to do this." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:152 +msgid "" +"list: Display a list of chat rooms on the network. <i>Warning, some servers" +" may disconnect you upon doing this.</i>" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:153 +msgid "me <action to perform>: Perform an action." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:154 +msgid "memoserv: Send a command to memoserv" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:155 +msgid "" +"mode <+|-><A-Za-z> <nick|channel>: Set or unset a channel" +" or user mode." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:156 +msgid "" +"msg <nick> <message>: Send a private message to a user (as " +"opposed to a channel)." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:157 +msgid "names [channel]: List the users currently in a channel." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:158 +#: ../libpurple/protocols/jabber/jabber.c:3616 +msgid "nick <new nickname>: Change your nickname." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:159 +msgid "nickserv: Send a command to nickserv" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:160 +msgid "notice <target<: Send a notice to a user or channel." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:161 +msgid "" +"op <nick1> [nick2] ...: Grant channel operator status to someone. You" +" must be a channel operator to do this." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:162 +msgid "" +"operwall <message>: If you don't know what this is, you probably " +"can't use it." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:163 +msgid "operserv: Send a command to operserv" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:164 +msgid "" +"part [room] [message]: Leave the current channel, or a specified channel, " +"with an optional message." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:165 +msgid "" +"ping [nick]: Asks how much lag a user (or the server if no user specified) " +"has." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:166 +msgid "" +"query <nick> <message>: Send a private message to a user (as " +"opposed to a channel)." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:167 +msgid "quit [message]: Disconnect from the server, with an optional message." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:168 +msgid "quote [...]: Send a raw command to the server." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:169 +msgid "" +"remove <nick> [message]: Remove someone from a room. You must be a " +"channel operator to do this." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:170 +msgid "time: Displays the current local time at the IRC server." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:171 +msgid "topic [new topic]: View or change the channel topic." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:172 +msgid "umode <+|-><A-Za-z>: Set or unset a user mode." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:173 +msgid "version [nick]: send CTCP VERSION request to a user" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:174 +msgid "" +"voice <nick1> [nick2] ...: Grant channel voice status to someone. You" +" must be a channel operator to do this." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:175 +msgid "" +"wallops <message>: If you don't know what this is, you probably can't" +" use it." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:176 +msgid "whois [server] <nick>: Get information on a user." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:177 +msgid "whowas <nick>: Get information on a user that has logged off." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:573 +#, c-format +msgid "Reply time from %s: %lu seconds" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:574 +msgid "PONG" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:574 +msgid "CTCP PING reply" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:690 +#: ../libpurple/protocols/irc/parse.c:697 +msgid "Disconnected." +msgstr "" + +#: ../libpurple/protocols/jabber/adhoccommands.c:161 +#: ../libpurple/protocols/jabber/auth.c:199 +#: ../libpurple/protocols/jabber/auth_scram.c:73 +#: ../libpurple/protocols/jabber/jabber.c:1161 +#: ../libpurple/protocols/jabber/jabber.c:1196 +#: ../libpurple/protocols/jabber/jabber.c:2723 +msgid "Unknown Error" +msgstr "" + +#: ../libpurple/protocols/jabber/adhoccommands.c:163 +#: ../libpurple/protocols/jabber/adhoccommands.c:164 +msgid "Ad-Hoc Command Failed" +msgstr "" + +#: ../libpurple/protocols/jabber/adhoccommands.c:198 +msgid "execute" +msgstr "" + +#: ../libpurple/protocols/jabber/auth.c:82 +#: ../libpurple/protocols/jabber/auth_plain.c:80 +msgid "Server requires plaintext authentication over an unencrypted stream" +msgstr "" + +#. This happens when the server sends back jibberish +#. * in the "additional data with success" case. +#. * Seen with Wildfire 3.0.1. +#: ../libpurple/protocols/jabber/auth.c:150 +#: ../libpurple/protocols/jabber/auth.c:399 +#: ../libpurple/protocols/jabber/auth.c:428 +#: ../libpurple/protocols/jabber/auth.c:439 +#: ../libpurple/protocols/jabber/auth.c:484 +#: ../libpurple/protocols/jabber/auth_cyrus.c:538 +#: ../libpurple/protocols/jabber/auth_digest_md5.c:180 +#: ../libpurple/protocols/jabber/jabber.c:158 +msgid "Invalid response from server" +msgstr "" + +#: ../libpurple/protocols/jabber/auth.c:191 +#: ../libpurple/protocols/jabber/auth.c:326 +#: ../libpurple/protocols/jabber/auth_cyrus.c:449 +msgid "Server does not use any supported authentication method" +msgstr "" + +#: ../libpurple/protocols/jabber/auth.c:310 +#: ../libpurple/protocols/jabber/auth_plain.c:94 +#, c-format +msgid "" +"%s requires plaintext authentication over an unencrypted connection. Allow " +"this and continue authentication?" +msgstr "" + +#: ../libpurple/protocols/jabber/auth.c:312 +#: ../libpurple/protocols/jabber/auth.c:313 +#: ../libpurple/protocols/jabber/auth_cyrus.c:264 +#: ../libpurple/protocols/jabber/auth_cyrus.c:265 +#: ../libpurple/protocols/jabber/auth_plain.c:96 +#: ../libpurple/protocols/jabber/auth_plain.c:97 +msgid "Plaintext Authentication" +msgstr "" + +#: ../libpurple/protocols/jabber/auth.c:350 +#: ../libpurple/protocols/jabber/jabber.c:280 +msgid "You require encryption, but it is not available on this server." +msgstr "" + +#: ../libpurple/protocols/jabber/auth.c:410 +#: ../libpurple/protocols/jabber/auth_digest_md5.c:200 +#: ../libpurple/protocols/jabber/auth_digest_md5.c:225 +#: ../libpurple/protocols/jabber/auth_scram.c:464 +#: ../libpurple/protocols/jabber/auth_scram.c:484 +#: ../libpurple/protocols/jabber/auth_scram.c:521 +#: ../libpurple/protocols/jabber/auth_scram.c:555 +msgid "Invalid challenge from server" +msgstr "" + +#: ../libpurple/protocols/jabber/auth.c:444 +msgid "Server thinks authentication is complete, but client does not" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_cyrus.c:39 +msgid "Server may require plaintext authentication over an unencrypted stream" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_cyrus.c:262 +#, c-format +msgid "" +"%s may require plaintext authentication over an unencrypted connection. " +"Allow this and continue authentication?" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_cyrus.c:299 +msgid "SASL authentication failed" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_cyrus.c:472 +#: ../libpurple/protocols/jabber/jabber.c:542 +#: ../libpurple/protocols/jabber/jabber.c:700 +#, c-format +msgid "SASL error: %s" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:55 +msgid "Invalid Encoding" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:57 +msgid "Unsupported Extension" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:59 +msgid "" +"Unexpected response from the server. This may indicate a possible MITM " +"attack" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:61 +msgid "" +"The server does support channel binding, but did not appear to advertise it." +" This indicates a likely MITM attack" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:63 +msgid "Server does not support channel binding" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:65 +msgid "Unsupported channel binding method" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:67 +#: ../libpurple/protocols/novell/nmuser.c:1896 +msgid "User not found" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:69 +msgid "Invalid Username Encoding" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:71 +#: ../libpurple/protocols/jabber/jabber.c:2788 +msgid "Resource Constraint" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:398 +msgid "Unable to canonicalize username" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:409 +msgid "Unable to canonicalize password" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:474 +#: ../libpurple/protocols/jabber/auth_scram.c:546 +msgid "Malicious challenge from server" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:536 +msgid "Unexpected response from server" +msgstr "" + +#: ../libpurple/protocols/jabber/bosh.c:439 +msgid "The BOSH connection manager terminated your session." +msgstr "" + +#: ../libpurple/protocols/jabber/bosh.c:542 +msgid "No session ID given" +msgstr "" + +#: ../libpurple/protocols/jabber/bosh.c:559 +msgid "Unsupported version of BOSH protocol" +msgstr "" + +#: ../libpurple/protocols/jabber/bosh.c:743 +msgid "Unable to establish a connection with the server" +msgstr "" + +#: ../libpurple/protocols/jabber/bosh.c:960 +#, c-format +msgid "Unable to establish a connection with the server: %s" +msgstr "" + +#: ../libpurple/protocols/jabber/bosh.c:990 +#: ../libpurple/protocols/jabber/jabber.c:1059 +msgid "Unable to establish SSL connection" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:350 +#: ../libpurple/protocols/jabber/buddy.c:1024 +#: ../libpurple/protocols/sametime/sametime.c:4175 +#: ../libpurple/protocols/silc/ops.c:999 +#: ../libpurple/protocols/silc10/ops.c:1020 +msgid "Full Name" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:351 +#: ../libpurple/protocols/jabber/buddy.c:1035 +#: ../libpurple/protocols/silc/ops.c:1011 +#: ../libpurple/protocols/silc10/ops.c:1032 +msgid "Family Name" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:352 +#: ../libpurple/protocols/jabber/buddy.c:1037 +msgid "Given Name" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:354 +#: ../libpurple/protocols/jabber/jabber.c:1329 +msgid "URL" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:355 +#: ../libpurple/protocols/jabber/buddy.c:1086 +msgid "Street Address" +msgstr "" + +#. * EXTADD is correct, EXTADR is generated by other +#. * clients. The next time someone reads this, remove +#. * EXTADR. +#: ../libpurple/protocols/jabber/buddy.c:356 +#: ../libpurple/protocols/jabber/buddy.c:1084 +msgid "Extended Address" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:357 +#: ../libpurple/protocols/jabber/buddy.c:1088 +msgid "Locality" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:358 +#: ../libpurple/protocols/jabber/buddy.c:1090 +msgid "Region" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:359 +#: ../libpurple/protocols/jabber/buddy.c:1092 +msgid "Postal Code" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:360 +#: ../libpurple/protocols/jabber/buddy.c:1095 +#: ../libpurple/protocols/mxit/profile.c:222 +#: ../libpurple/protocols/silc/silc.c:1255 +#: ../libpurple/protocols/silc10/silc.c:951 +msgid "Country" +msgstr "" + +#. lots of clients (including purple) do this, but it's +#. * out of spec +#: ../libpurple/protocols/jabber/buddy.c:361 +#: ../libpurple/protocols/jabber/buddy.c:1109 +#: ../libpurple/protocols/jabber/buddy.c:1115 +msgid "Telephone" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:363 +#: ../libpurple/protocols/jabber/buddy.c:1156 +msgid "Organization Name" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:364 +#: ../libpurple/protocols/jabber/buddy.c:1158 +msgid "Organization Unit" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:365 +#: ../libpurple/protocols/jabber/buddy.c:1163 +#: ../libpurple/protocols/msn/msn.c:2504 +#: ../libpurple/protocols/novell/novell.c:1492 +#: ../libpurple/protocols/silc/ops.c:1023 +#: ../libpurple/protocols/silc10/ops.c:1044 +msgid "Job Title" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:366 +#: ../libpurple/protocols/jabber/buddy.c:1165 +msgid "Role" +msgstr "" + +#. birthday +#. birthday (required) +#: ../libpurple/protocols/jabber/buddy.c:367 +#: ../libpurple/protocols/jabber/buddy.c:1053 +#: ../libpurple/protocols/msn/msn.c:2485 +#: ../libpurple/protocols/mxit/actions.c:239 +#: ../libpurple/protocols/mxit/login.c:343 +#: ../libpurple/protocols/mxit/profile.c:214 +#: ../libpurple/protocols/oscar/userinfo.c:444 +msgid "Birthday" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:368 +#: ../libpurple/protocols/jabber/buddy.c:1167 +#: ../libpurple/protocols/jabber/chat.c:911 ../pidgin/gtkblist.c:3888 +#: ../pidgin/gtkplugin.c:590 ../pidgin/plugins/disco/gtkdisco.c:571 +msgid "Description" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:675 +#: ../libpurple/protocols/jabber/buddy.c:676 +msgid "Edit XMPP vCard" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:677 +msgid "" +"All items below are optional. Enter only the information with which you feel" +" comfortable." +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:722 +msgid "Client" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:726 +msgid "Operating System" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:742 +msgid "Local Time" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:773 +#: ../libpurple/protocols/jabber/jabber.c:2371 +#: ../libpurple/protocols/jabber/jabber.c:2395 +#: ../libpurple/protocols/jabber/jabber.c:2411 +#: ../libpurple/protocols/jabber/jabber.c:2427 +#: ../libpurple/protocols/jabber/jabber.c:2441 +msgid "Priority" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:819 +#: ../libpurple/protocols/jabber/jabber.c:3360 +#: ../libpurple/protocols/jabber/libxmpp.c:265 +#: ../libpurple/protocols/jabber/si.c:1571 +msgid "Resource" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:832 +msgid "Uptime" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:836 +msgid "Logged Off" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:837 +#, c-format +msgid "%s ago" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1039 +#: ../libpurple/protocols/silc/ops.c:1007 +#: ../libpurple/protocols/silc10/ops.c:1028 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:547 +msgid "Middle Name" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1072 +#: ../libpurple/protocols/jabber/jabber.c:1324 +#: ../libpurple/protocols/oscar/userinfo.c:461 +#: ../libpurple/protocols/oscar/userinfo.c:469 +#: ../libpurple/protocols/silc/ops.c:1043 +#: ../libpurple/protocols/silc10/ops.c:1064 +msgid "Address" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1077 +msgid "P.O. Box" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1187 +#: ../libpurple/protocols/mxit/profile.c:267 +msgid "Photo" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1187 +msgid "Logo" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1732 +#, c-format +msgid "" +"%s will no longer be able to see your status updates. Do you want to " +"continue?" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1734 +#: ../libpurple/protocols/jabber/buddy.c:1843 +msgid "Cancel Presence Notification" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1831 +msgid "Un-hide From" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1835 +msgid "Temporarily Hide From" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1850 +msgid "(Re-)Request authorization" +msgstr "" + +#. shouldn't this just happen automatically when the buddy is +#. removed? +#: ../libpurple/protocols/jabber/buddy.c:1859 +msgid "Unsubscribe" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1866 +#: ../libpurple/protocols/msn/msn.c:1300 +#: ../libpurple/protocols/novell/novell.c:3428 +msgid "Initiate _Chat" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1883 +msgid "Log In" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1887 +msgid "Log Out" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1998 +msgid "JID" +msgstr "" + +#. last name +#: ../libpurple/protocols/jabber/buddy.c:2002 +#: ../libpurple/protocols/jabber/buddy.c:2192 +#: ../libpurple/protocols/mxit/actions.c:255 +#: ../libpurple/protocols/mxit/profile.c:221 +#: ../libpurple/protocols/mxit/profile.c:325 +#: ../libpurple/protocols/oscar/userinfo.c:412 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:545 +msgid "Last Name" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2034 +msgid "The following are the results of your search" +msgstr "" + +#. current comment from Jabber User Directory users.jabber.org +#: ../libpurple/protocols/jabber/buddy.c:2119 +msgid "" +"Find a contact by entering the search criteria in the given fields. Note: " +"Each field supports wild card searches (%)" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2140 +msgid "Directory Query Failed" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2141 +msgid "Could not query the directory server." +msgstr "" + +#. Try to translate the message (see static message +#. list in jabber_user_dir_comments[]) +#: ../libpurple/protocols/jabber/buddy.c:2175 +#, c-format +msgid "Server Instructions: %s" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2182 +msgid "Fill in one or more fields to search for any matching XMPP users." +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2202 +#: ../libpurple/protocols/novell/novell.c:1496 +#: ../libpurple/protocols/oscar/userinfo.c:413 +#: ../libpurple/protocols/oscar/userinfo.c:417 +msgid "Email Address" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2211 +#: ../libpurple/protocols/jabber/buddy.c:2212 +msgid "Search for XMPP users" +msgstr "" + +#. "Search" +#: ../libpurple/protocols/jabber/buddy.c:2213 +#: ../libpurple/protocols/sametime/sametime.c:5670 +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:476 +#: ../pidgin/plugins/gevolution/assoc-buddy.c:356 +msgid "Search" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2228 +msgid "Invalid Directory" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2258 +msgid "Enter a User Directory" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2259 +msgid "Select a user directory to search" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2262 +msgid "Search Directory" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:44 +#: ../libpurple/protocols/oscar/oscar.c:4406 +#: ../libpurple/protocols/yahoo/yahoochat.c:1162 +msgid "_Room:" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:50 +msgid "_Server:" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:56 +msgid "_Handle:" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:378 +#, c-format +msgid "%s is not a valid room name" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:379 +msgid "Invalid Room Name" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:385 +#, c-format +msgid "%s is not a valid server name" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:386 +#: ../libpurple/protocols/jabber/chat.c:387 +msgid "Invalid Server Name" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:392 +#, c-format +msgid "%s is not a valid room handle" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:393 +#: ../libpurple/protocols/jabber/chat.c:394 +msgid "Invalid Room Handle" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:538 +msgid "Configuration error" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:547 +#: ../libpurple/protocols/jabber/chat.c:691 +msgid "Unable to configure" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:562 +msgid "Room Configuration Error" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:563 +msgid "This room is not capable of being configured" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:613 +#: ../libpurple/protocols/jabber/chat.c:682 +msgid "Registration error" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:758 +msgid "Nick changing not supported in non-MUC chatrooms" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:813 +#: ../libpurple/protocols/jabber/chat.c:824 +#: ../libpurple/protocols/silc/ops.c:1472 +#: ../libpurple/protocols/silc10/ops.c:1451 +msgid "Error retrieving room list" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:872 +#: ../pidgin/plugins/disco/gtkdisco.c:177 +msgid "Invalid Server" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:917 +msgid "Enter a Conference Server" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:918 +msgid "Select a conference server to query" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:921 +msgid "Find Rooms" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:1059 +msgid "Affiliations:" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:1071 +#: ../libpurple/protocols/jabber/chat.c:1166 +msgid "No users found" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:1154 +msgid "Roles:" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:252 ../libpurple/util.c:4212 +msgid "Server requires TLS/SSL, but no TLS/SSL support was found." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:259 +msgid "You require encryption, but no TLS/SSL support was found." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:621 +msgid "Ping timed out" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:945 +#: ../libpurple/protocols/jabber/jabber.c:983 +#: ../libpurple/protocols/jabber/jabber.c:3031 +msgid "Invalid XMPP ID" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:954 +msgid "Invalid XMPP ID. Username portion must be set." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:963 +msgid "Invalid XMPP ID. Domain must be set." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1042 +msgid "Malformed BOSH URL" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1145 +#, c-format +msgid "Registration of %s@%s successful" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1151 +#, c-format +msgid "Registration to %s successful" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1154 +#: ../libpurple/protocols/jabber/jabber.c:1155 +msgid "Registration Successful" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1163 +#: ../libpurple/protocols/jabber/jabber.c:1164 +msgid "Registration Failed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1187 +#, c-format +msgid "Registration from %s successfully removed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1189 +#: ../libpurple/protocols/jabber/jabber.c:1190 +msgid "Unregistration Successful" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1198 +#: ../libpurple/protocols/jabber/jabber.c:1199 +msgid "Unregistration Failed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1326 +#: ../libpurple/protocols/oscar/userinfo.c:463 +#: ../libpurple/protocols/oscar/userinfo.c:471 +msgid "State" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1327 +msgid "Postal code" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1328 +#: ../libpurple/protocols/silc/ops.c:1048 +#: ../libpurple/protocols/silc/silc.c:1012 +#: ../libpurple/protocols/silc/util.c:564 +#: ../libpurple/protocols/silc10/ops.c:1069 +#: ../libpurple/protocols/silc10/silc.c:708 +#: ../libpurple/protocols/silc10/util.c:557 +msgid "Phone" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1330 ../pidgin/gtknotify.c:1691 +msgid "Date" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1359 +#: ../libpurple/protocols/jabber/jabber.c:1360 +msgid "Already Registered" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1410 +#: ../libpurple/protocols/jabber/jabber.c:1414 +#: ../libpurple/protocols/jabber/jabber.c:2543 +msgid "Password" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1446 +msgid "Unregister" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1453 +msgid "" +"Please fill out the information below to change your account registration." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1456 +msgid "Please fill out the information below to register your new account." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1464 +#: ../libpurple/protocols/jabber/jabber.c:1465 +msgid "Register New XMPP Account" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1466 +#: ../libpurple/protocols/jabber/jabber.c:1477 +#: ../pidgin/plugins/disco/gtkdisco.c:307 +#: ../pidgin/plugins/disco/gtkdisco.c:688 +msgid "Register" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1473 +#, c-format +msgid "Change Account Registration at %s" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1474 +#, c-format +msgid "Register New Account at %s" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1477 +msgid "Change Registration" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1525 +#: ../libpurple/protocols/jabber/jabber.c:1526 +msgid "Error unregistering account" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1531 +#: ../libpurple/protocols/jabber/jabber.c:1532 +msgid "Account successfully unregistered" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1745 +msgid "Initializing Stream" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1750 +msgid "Initializing SSL/TLS" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1754 +#: ../libpurple/protocols/msn/session.c:438 +msgid "Authenticating" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1758 +msgid "Re-initializing Stream" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1927 +#: ../libpurple/protocols/jabber/jabber.c:1928 +msgid "Server doesn't support blocking" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2181 +#: ../libpurple/protocols/jabber/jabber.c:2701 +#: ../libpurple/protocols/jabber/jabber.c:2744 +#: ../libpurple/protocols/jabber/jabber.c:2782 +#: ../libpurple/protocols/oscar/oscar.c:4684 +#: ../libpurple/protocols/oscar/userinfo.c:272 +msgid "Not Authorized" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2313 +#: ../libpurple/protocols/jabber/jabber.c:2316 +#: ../libpurple/protocols/jabber/jabber.c:2373 +#: ../libpurple/protocols/jabber/jabber.c:2397 +#: ../libpurple/protocols/jabber/jabber.c:2413 +#: ../libpurple/protocols/jabber/jabber.c:2429 +#: ../libpurple/protocols/jabber/jabber.c:2443 +#: ../libpurple/protocols/mxit/mxit.c:350 +#: ../libpurple/protocols/mxit/profile.c:243 +#: ../libpurple/protocols/mxit/profile.c:245 +#: ../libpurple/protocols/oscar/userinfo.c:298 +#: ../libpurple/protocols/silc/buddy.c:1569 +#: ../libpurple/protocols/silc/ops.c:1224 +#: ../libpurple/protocols/silc10/buddy.c:1577 +#: ../libpurple/protocols/silc10/ops.c:1207 +msgid "Mood" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2326 +#: ../libpurple/protocols/msn/msn.c:1046 +msgid "Now Listening" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2333 +#: ../libpurple/protocols/mxit/roster.c:252 +msgid "Both" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2335 +msgid "From (To pending)" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2337 +msgid "From" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2340 +msgid "To" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2342 +msgid "None (To pending)" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2344 +#: ../libpurple/protocols/mxit/profile.c:245 +#: ../libpurple/protocols/mxit/roster.c:262 ../pidgin/gtkblist.c:3542 +#: ../pidgin/gtkblist.c:3544 ../pidgin/plugins/gevolution/eds-utils.c:73 +#: ../pidgin/plugins/gevolution/eds-utils.c:86 +msgid "None" +msgstr "" + +#. subscription type +#: ../libpurple/protocols/jabber/jabber.c:2347 +#: ../libpurple/protocols/mxit/mxit.c:354 +#: ../libpurple/protocols/mxit/profile.c:252 +msgid "Subscription" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2374 +#: ../libpurple/protocols/jabber/jabber.c:2398 +#: ../libpurple/protocols/jabber/jabber.c:2414 +#: ../libpurple/protocols/jabber/jabber.c:2430 +#: ../libpurple/protocols/jabber/jabber.c:2444 +msgid "Mood Text" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2376 +#: ../libpurple/protocols/jabber/jabber.c:2400 +#: ../libpurple/protocols/jabber/jabber.c:2416 +#: ../libpurple/protocols/jabber/jabber.c:2432 +msgid "Allow Buzz" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2383 +#: ../libpurple/protocols/mxit/roster.c:86 +#: ../libpurple/protocols/oscar/oscar.c:4865 +msgid "Mood Name" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2384 +#: ../libpurple/protocols/oscar/oscar.c:4866 +msgid "Mood Comment" +msgstr "" + +#. primitive +#. ID +#. name - use default +#. saveable +#. should be user_settable some day +#. independent +#: ../libpurple/protocols/jabber/jabber.c:2463 +#: ../libpurple/protocols/msn/msn.c:1196 +#: ../libpurple/protocols/myspace/myspace.c:501 +msgid "Tune Artist" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2464 +#: ../libpurple/protocols/msn/msn.c:1198 +#: ../libpurple/protocols/myspace/myspace.c:502 +msgid "Tune Title" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2465 +#: ../libpurple/protocols/msn/msn.c:1197 +msgid "Tune Album" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2466 +msgid "Tune Genre" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2467 +msgid "Tune Comment" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2468 +msgid "Tune Track" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2469 +msgid "Tune Time" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2470 +msgid "Tune Year" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2471 +msgid "Tune URL" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2484 +msgid "Password Changed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2485 +msgid "Your password has been changed." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2491 +#: ../libpurple/protocols/jabber/jabber.c:2492 +msgid "Error changing password" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2549 +msgid "Password (again)" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2555 +#: ../libpurple/protocols/jabber/jabber.c:2556 +msgid "Change XMPP Password" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2556 +msgid "Please enter your new password" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2570 +#: ../libpurple/protocols/oscar/oscar.c:5485 +#: ../libpurple/protocols/silc/silc.c:1333 +#: ../libpurple/protocols/silc10/silc.c:1029 +#: ../libpurple/protocols/yahoo/libymsg.c:4439 +#: ../libpurple/protocols/yahoo/libymsg.c:4595 +msgid "Set User Info..." +msgstr "" + +#. if (js->protocol_options & CHANGE_PASSWORD) { +#: ../libpurple/protocols/jabber/jabber.c:2575 +#: ../libpurple/protocols/oscar/oscar.c:5496 +#: ../libpurple/protocols/silc/silc.c:1329 +#: ../libpurple/protocols/silc10/silc.c:1025 +msgid "Change Password..." +msgstr "" + +#. } +#: ../libpurple/protocols/jabber/jabber.c:2580 +msgid "Search for Users..." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2680 +msgid "Bad Request" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2683 +msgid "Conflict" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2685 +msgid "Feature Not Implemented" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2687 +msgid "Forbidden" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2689 +msgid "Gone" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2691 +#: ../libpurple/protocols/jabber/jabber.c:2772 +msgid "Internal Server Error" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2693 +msgid "Item Not Found" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2695 +msgid "Malformed XMPP ID" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2697 +msgid "Not Acceptable" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2699 +msgid "Not Allowed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2703 +msgid "Payment Required" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2705 +msgid "Recipient Unavailable" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2709 +msgid "Registration Required" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2711 +msgid "Remote Server Not Found" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2713 +msgid "Remote Server Timeout" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2715 +msgid "Server Overloaded" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2717 +msgid "Service Unavailable" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2719 +msgid "Subscription Required" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2721 +msgid "Unexpected Request" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2729 +msgid "Authorization Aborted" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2731 +msgid "Incorrect encoding in authorization" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2733 +msgid "Invalid authzid" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2735 +msgid "Invalid Authorization Mechanism" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2738 +msgid "Authorization mechanism too weak" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2746 +msgid "Temporary Authentication Failure" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2749 +msgid "Authentication Failure" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2757 +msgid "Bad Format" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2759 +msgid "Bad Namespace Prefix" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2762 +msgid "Resource Conflict" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2764 +#: ../libpurple/protocols/msn/msn.c:232 +msgid "Connection Timeout" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2766 +msgid "Host Gone" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2768 +msgid "Host Unknown" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2770 +msgid "Improper Addressing" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2774 +msgid "Invalid ID" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2776 +msgid "Invalid Namespace" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2778 +msgid "Invalid XML" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2780 +msgid "Non-matching Hosts" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2784 +msgid "Policy Violation" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2786 +msgid "Remote Connection Failed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2790 +msgid "Restricted XML" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2792 +msgid "See Other Host" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2794 +msgid "System Shutdown" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2796 +msgid "Undefined Condition" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2798 +msgid "Unsupported Encoding" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2800 +msgid "Unsupported Stanza Type" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2802 +msgid "Unsupported Version" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2804 +msgid "XML Not Well Formed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2806 +msgid "Stream Error" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2916 +#, c-format +msgid "Unable to ban user %s" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2936 +#, c-format +msgid "Unknown affiliation: \"%s\"" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2946 +#, c-format +msgid "Unable to affiliate user %s as \"%s\"" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2971 +#, c-format +msgid "Unknown role: \"%s\"" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2981 +#, c-format +msgid "Unable to set role \"%s\" for user: %s" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3063 +#, c-format +msgid "Unable to kick user %s" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3100 +#, c-format +msgid "Unable to ping user %s" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3122 +#, c-format +msgid "Unable to buzz, because there is nothing known about %s." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3129 +#, c-format +msgid "Unable to buzz, because %s might be offline." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3153 +#, c-format +msgid "" +"Unable to buzz, because %s does not support it or does not wish to receive " +"buzzes now." +msgstr "" + +#. Yahoo only supports one attention command: the 'buzz'. +#. This is index number YAHOO_BUZZ. +#: ../libpurple/protocols/jabber/jabber.c:3200 +#: ../libpurple/protocols/yahoo/libymsg.c:5520 +msgid "Buzz" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3201 +#: ../libpurple/protocols/yahoo/libymsg.c:5521 +#, c-format +msgid "%s has buzzed you!" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3201 +#: ../libpurple/protocols/yahoo/libymsg.c:5521 +#, c-format +msgid "Buzzing %s..." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3316 +#, c-format +msgid "Unable to initiate media with %s: invalid JID" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3318 +#, c-format +msgid "Unable to initiate media with %s: user is not online" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3320 +#, c-format +msgid "Unable to initiate media with %s: resource is not online" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3322 +#, c-format +msgid "Unable to initiate media with %s: not subscribed to user presence" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3325 +#: ../libpurple/protocols/jabber/jabber.c:3326 +msgid "Media Initiation Failed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3410 +#, c-format +msgid "" +"Please select the resource of %s with which you would like to start a media " +"session." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3420 +#: ../libpurple/protocols/jabber/si.c:1583 +msgid "Select a Resource" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3421 +msgid "Initiate Media" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3591 +msgid "Account does not support PEP, can't set mood" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3604 +msgid "config: Configure a chat room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3610 +msgid "configure: Configure a chat room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3623 +msgid "part [message]: Leave the room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3630 +msgid "register: Register with a chat room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3638 +msgid "topic [new topic]: View or change the topic." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3646 +msgid "ban <user> [reason]: Ban a user from the room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3654 +msgid "" +"affiliate <owner|admin|member|outcast|none> [nick1] [nick2] ...: Get " +"the users with an affiliation or set users' affiliation with the room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3662 +msgid "" +"role <moderator|participant|visitor|none> [nick1] [nick2] ...: Get the" +" users with a role or set users' role with the room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3670 +msgid "invite <user> [message]: Invite a user to the room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3678 +msgid "join: <room[@server]> [password]: Join a chat." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3686 +msgid "kick <user> [reason]: Kick a user from the room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3693 +msgid "" +"msg <user> <message>: Send a private message to another user." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3701 +msgid "ping <jid>:\tPing a user/component/server." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3709 +#: ../libpurple/protocols/yahoo/libyahoo.c:53 +#: ../libpurple/protocols/yahoo/libyahoojp.c:50 +msgid "buzz: Buzz a user to get their attention" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3716 +msgid "mood: Set current user mood" +msgstr "" + +#: ../libpurple/protocols/jabber/jutil.c:706 +#: ../pidgin/plugins/themeedit-icon.c:65 +msgid "Extended Away" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/jabber/libxmpp.c:166 +#: ../libpurple/protocols/jabber/libxmpp.c:168 +msgid "XMPP Protocol Plugin" +msgstr "" + +#. Translators: 'domain' is used here in the context of Internet domains, e.g. +#. pidgin.im +#: ../libpurple/protocols/jabber/libxmpp.c:261 ../pidgin/gtkaccount.c:570 +#: ../pidgin/gtkaccount.c:574 +msgid "Domain" +msgstr "" + +#: ../libpurple/protocols/jabber/libxmpp.c:278 +msgid "Use old-style SSL" +msgstr "" + +#: ../libpurple/protocols/jabber/libxmpp.c:291 +msgid "Allow plaintext auth over unencrypted streams" +msgstr "" + +#: ../libpurple/protocols/jabber/libxmpp.c:296 +#: ../libpurple/protocols/myspace/myspace.c:3633 +#: ../libpurple/protocols/simple/simple.c:2170 +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 +#: ../libpurple/protocols/jabber/libxmpp.c:300 +#: ../libpurple/protocols/myspace/myspace.c:3630 +#: ../libpurple/protocols/silc/silc.c:2192 +#: ../libpurple/protocols/silc10/silc.c:1906 +msgid "Connect server" +msgstr "" + +#: ../libpurple/protocols/jabber/libxmpp.c:305 +msgid "File transfer proxies" +msgstr "" + +#: ../libpurple/protocols/jabber/libxmpp.c:313 +msgid "BOSH URL" +msgstr "" + +#. this should probably be part of global smiley theme settings later on, +#. shared with MSN +#: ../libpurple/protocols/jabber/libxmpp.c:320 +msgid "Show Custom Smileys" +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:102 +#, c-format +msgid "%s has left the conversation." +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:175 +#, c-format +msgid "Message from %s" +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:239 +#, c-format +msgid "%s has set the topic to: %s" +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:241 +#, c-format +msgid "The topic is: %s" +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:289 +#, c-format +msgid "Message delivery to %s failed: %s" +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:292 +msgid "XMPP Message Error" +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:561 +#, c-format +msgid "(Code %s)" +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:984 +msgid "A custom smiley in the message is too large to send." +msgstr "" + +#: ../libpurple/protocols/jabber/parser.c:57 +msgid "XMPP stream header missing" +msgstr "" + +#: ../libpurple/protocols/jabber/parser.c:78 +msgid "XMPP Version Mismatch" +msgstr "" + +#: ../libpurple/protocols/jabber/parser.c:103 +msgid "XMPP stream missing ID" +msgstr "" + +#: ../libpurple/protocols/jabber/parser.c:305 +msgid "XML Parse error" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:555 +#, c-format +msgid "Error joining chat %s" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:558 +#, c-format +msgid "Error in chat %s" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:602 +#: ../libpurple/protocols/jabber/presence.c:603 +msgid "Create New Room" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:604 +msgid "" +"You are creating a new room. Would you like to configure it, or accept the " +"default settings?" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:610 +msgid "_Configure Room" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:611 +msgid "_Accept Defaults" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:736 +msgid "No reason" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:743 +#, c-format +msgid "You have been kicked: (%s)" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:750 +#, c-format +msgid "Kicked (%s)" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:955 +msgid "Unknown Error in presence" +msgstr "" + +#: ../libpurple/protocols/jabber/si.c:1446 +#: ../libpurple/protocols/jabber/si.c:1487 +#, c-format +msgid "Unable to send file to %s, user does not support file transfers" +msgstr "" + +#. not success +#: ../libpurple/protocols/jabber/si.c:1447 +#: ../libpurple/protocols/jabber/si.c:1448 +#: ../libpurple/protocols/jabber/si.c:1488 +#: ../libpurple/protocols/jabber/si.c:1489 +#: ../libpurple/protocols/jabber/si.c:1559 +#: ../libpurple/protocols/mxit/protocol.c:2251 +msgid "File Send Failed" +msgstr "" + +#: ../libpurple/protocols/jabber/si.c:1552 +#, c-format +msgid "Unable to send file to %s, invalid JID" +msgstr "" + +#: ../libpurple/protocols/jabber/si.c:1554 +#, c-format +msgid "Unable to send file to %s, user is not online" +msgstr "" + +#: ../libpurple/protocols/jabber/si.c:1556 +#, c-format +msgid "Unable to send file to %s, not subscribed to user presence" +msgstr "" + +#: ../libpurple/protocols/jabber/si.c:1569 +#, c-format +msgid "" +"Please select the resource of %s to which you would like to send a file" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:34 +msgid "Afraid" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:35 +msgid "Amazed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:36 +msgid "Amorous" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:37 +#: ../libpurple/protocols/mxit/roster.c:138 +#: ../libpurple/protocols/mxit/roster.c:202 +#: ../libpurple/protocols/oscar/family_locate.c:415 +#: ../libpurple/protocols/silc/buddy.c:1510 +#: ../libpurple/protocols/silc/silc.c:987 +#: ../libpurple/protocols/silc/util.c:527 +#: ../libpurple/protocols/silc10/buddy.c:1517 +#: ../libpurple/protocols/silc10/silc.c:683 +#: ../libpurple/protocols/silc10/util.c:519 +msgid "Angry" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:38 +msgid "Annoyed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:39 +#: ../libpurple/protocols/silc/buddy.c:1526 +#: ../libpurple/protocols/silc/silc.c:1003 +#: ../libpurple/protocols/silc/util.c:543 +#: ../libpurple/protocols/silc10/buddy.c:1533 +#: ../libpurple/protocols/silc10/silc.c:699 +#: ../libpurple/protocols/silc10/util.c:535 +msgid "Anxious" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:40 +msgid "Aroused" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:41 +#: ../libpurple/protocols/silc/buddy.c:1514 +#: ../libpurple/protocols/silc/silc.c:991 +#: ../libpurple/protocols/silc/util.c:531 +#: ../libpurple/protocols/silc10/buddy.c:1521 +#: ../libpurple/protocols/silc10/silc.c:687 +#: ../libpurple/protocols/silc10/util.c:523 +msgid "Ashamed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:42 +#: ../libpurple/protocols/mxit/roster.c:148 +#: ../libpurple/protocols/mxit/roster.c:222 +#: ../libpurple/protocols/silc/buddy.c:1522 +#: ../libpurple/protocols/silc/silc.c:999 +#: ../libpurple/protocols/silc/util.c:539 +#: ../libpurple/protocols/silc10/buddy.c:1529 +#: ../libpurple/protocols/silc10/silc.c:695 +#: ../libpurple/protocols/silc10/util.c:531 +msgid "Bored" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:43 +msgid "Brave" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:44 +msgid "Calm" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:45 +msgid "Cautious" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:46 +#: ../libpurple/protocols/mxit/roster.c:149 +#: ../libpurple/protocols/mxit/roster.c:224 +msgid "Cold" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:47 +msgid "Confident" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:48 +#: ../libpurple/protocols/mxit/roster.c:150 +#: ../libpurple/protocols/mxit/roster.c:226 +msgid "Confused" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:49 +msgid "Contemplative" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:50 +msgid "Contented" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:51 +msgid "Cranky" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:52 +msgid "Crazy" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:53 +msgid "Creative" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:54 +msgid "Curious" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:55 +msgid "Dejected" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:56 +msgid "Depressed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:57 +msgid "Disappointed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:58 +msgid "Disgusted" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:59 +msgid "Dismayed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:60 +msgid "Distracted" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:61 +msgid "Embarrassed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:62 +msgid "Envious" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:63 +#: ../libpurple/protocols/mxit/roster.c:139 +#: ../libpurple/protocols/mxit/roster.c:204 +#: ../libpurple/protocols/silc/buddy.c:1524 +#: ../libpurple/protocols/silc/silc.c:1001 +#: ../libpurple/protocols/silc/util.c:541 +#: ../libpurple/protocols/silc10/buddy.c:1531 +#: ../libpurple/protocols/silc10/silc.c:697 +#: ../libpurple/protocols/silc10/util.c:533 +msgid "Excited" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:64 +msgid "Flirtatious" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:65 +msgid "Frustrated" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:66 +msgid "Grateful" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:67 +msgid "Grieving" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:68 +#: ../libpurple/protocols/mxit/roster.c:140 +#: ../libpurple/protocols/mxit/roster.c:206 +msgid "Grumpy" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:69 +msgid "Guilty" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:70 +#: ../libpurple/protocols/mxit/roster.c:141 +#: ../libpurple/protocols/mxit/roster.c:208 +#: ../libpurple/protocols/silc/buddy.c:1506 +#: ../libpurple/protocols/silc/silc.c:983 +#: ../libpurple/protocols/silc/util.c:523 +#: ../libpurple/protocols/silc10/buddy.c:1513 +#: ../libpurple/protocols/silc10/silc.c:679 +#: ../libpurple/protocols/silc10/util.c:515 +msgid "Happy" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:71 +msgid "Hopeful" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:72 +#: ../libpurple/protocols/mxit/roster.c:145 +#: ../libpurple/protocols/mxit/roster.c:216 +msgid "Hot" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:73 +msgid "Humbled" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:74 +msgid "Humiliated" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:75 +#: ../libpurple/protocols/mxit/roster.c:151 +#: ../libpurple/protocols/mxit/roster.c:228 +msgid "Hungry" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:76 +msgid "Hurt" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:77 +msgid "Impressed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:78 +msgid "In awe" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:79 +#: ../libpurple/protocols/mxit/roster.c:142 +#: ../libpurple/protocols/oscar/family_locate.c:426 +#: ../libpurple/protocols/silc/silc.c:995 +#: ../libpurple/protocols/silc10/silc.c:691 +msgid "In love" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:80 +msgid "Indignant" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:81 +msgid "Interested" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:82 +msgid "Intoxicated" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:83 +#: ../libpurple/protocols/mxit/roster.c:143 +#: ../libpurple/protocols/mxit/roster.c:212 +#: ../libpurple/protocols/silc/buddy.c:1516 +#: ../libpurple/protocols/silc/silc.c:993 +#: ../libpurple/protocols/silc/util.c:533 +#: ../libpurple/protocols/silc10/buddy.c:1523 +#: ../libpurple/protocols/silc10/silc.c:689 +#: ../libpurple/protocols/silc10/util.c:525 +msgid "Invincible" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:84 +#: ../libpurple/protocols/silc/buddy.c:1512 +#: ../libpurple/protocols/silc/silc.c:989 +#: ../libpurple/protocols/silc/util.c:529 +#: ../libpurple/protocols/silc10/buddy.c:1519 +#: ../libpurple/protocols/silc10/silc.c:685 +#: ../libpurple/protocols/silc10/util.c:521 +msgid "Jealous" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:85 +msgid "Lonely" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:86 +msgid "Lost" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:87 +msgid "Lucky" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:88 +msgid "Mean" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:89 +msgid "Moody" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:90 +msgid "Nervous" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:91 +msgid "Neutral" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:92 +msgid "Offended" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:93 +msgid "Outraged" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:94 +msgid "Playful" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:95 +msgid "Proud" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:96 +msgid "Relaxed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:97 +msgid "Relieved" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:98 +msgid "Remorseful" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:99 +msgid "Restless" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:100 +#: ../libpurple/protocols/mxit/roster.c:144 +#: ../libpurple/protocols/mxit/roster.c:214 +#: ../libpurple/protocols/silc/buddy.c:1508 +#: ../libpurple/protocols/silc/silc.c:985 +#: ../libpurple/protocols/silc/util.c:525 +#: ../libpurple/protocols/silc10/buddy.c:1515 +#: ../libpurple/protocols/silc10/silc.c:681 +#: ../libpurple/protocols/silc10/util.c:517 +msgid "Sad" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:101 +msgid "Sarcastic" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:102 +msgid "Satisfied" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:103 +msgid "Serious" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:104 +msgid "Shocked" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:105 +msgid "Shy" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:106 +#: ../libpurple/protocols/mxit/roster.c:146 +#: ../libpurple/protocols/mxit/roster.c:218 +#: ../libpurple/protocols/oscar/family_locate.c:418 +msgid "Sick" +msgstr "" + +#. Sleepy / Tired +#: ../libpurple/protocols/jabber/usermood.c:107 +#: ../libpurple/protocols/mxit/roster.c:147 +#: ../libpurple/protocols/mxit/roster.c:220 +#: ../libpurple/protocols/oscar/family_locate.c:428 +#: ../libpurple/protocols/silc/buddy.c:1520 +#: ../libpurple/protocols/silc/silc.c:997 +#: ../libpurple/protocols/silc/util.c:537 +#: ../libpurple/protocols/silc10/buddy.c:1527 +#: ../libpurple/protocols/silc10/silc.c:693 +#: ../libpurple/protocols/silc10/util.c:529 +msgid "Sleepy" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:108 +msgid "Spontaneous" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:109 +#: ../libpurple/protocols/mxit/roster.c:152 +#: ../libpurple/protocols/mxit/roster.c:230 +msgid "Stressed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:110 +msgid "Strong" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:111 +msgid "Surprised" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:112 +msgid "Thankful" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:113 +msgid "Thirsty" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:114 +msgid "Tired" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:115 +msgid "Undefined" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:116 +msgid "Weak" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:117 +msgid "Worried" +msgstr "" + +#: ../libpurple/protocols/jabber/usernick.c:81 +msgid "Set User Nickname" +msgstr "" + +#: ../libpurple/protocols/jabber/usernick.c:81 +msgid "Please specify a new nickname for you." +msgstr "" + +#: ../libpurple/protocols/jabber/usernick.c:82 +msgid "" +"This information is visible to all contacts on your contact list, so choose " +"something appropriate." +msgstr "" + +#: ../libpurple/protocols/jabber/usernick.c:83 +#: ../libpurple/protocols/mxit/actions.c:313 +#: ../libpurple/protocols/mxit/actions.c:411 +msgid "Set" +msgstr "" + +#: ../libpurple/protocols/jabber/usernick.c:103 +msgid "Set Nickname..." +msgstr "" + +#: ../libpurple/protocols/jabber/xdata.c:382 +msgid "Actions" +msgstr "" + +#: ../libpurple/protocols/jabber/xdata.c:384 +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 +#: ../libpurple/protocols/msn/contact.c:1070 +#: ../libpurple/protocols/msn/contact.c:1166 +#: ../libpurple/protocols/msn/userlist.c:523 +#, c-format +msgid "Unable to add \"%s\"." +msgstr "" + +#: ../libpurple/protocols/msn/contact.c:1071 +#: ../libpurple/protocols/msn/contact.c:1167 +msgid "Buddy Add error" +msgstr "" + +#: ../libpurple/protocols/msn/contact.c:1072 +#: ../libpurple/protocols/msn/contact.c:1168 +msgid "The username specified does not exist." +msgstr "" + +#: ../libpurple/protocols/msn/error.c:50 +#: ../libpurple/protocols/myspace/myspace.c:2122 +msgid "Unable to parse message" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:54 +msgid "Syntax Error (probably a client bug)" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:58 +msgid "Invalid email address" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:61 +msgid "User does not exist" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:64 +msgid "Fully qualified domain name missing" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:67 +msgid "Already logged in" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:70 +msgid "Invalid username" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:73 +msgid "Invalid friendly name" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:76 +msgid "List full" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:79 +msgid "Already there" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:83 +msgid "Not on list" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:86 +#: ../libpurple/protocols/zephyr/zephyr.c:759 +msgid "User is offline" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:89 +msgid "Already in the mode" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:93 +msgid "Already in opposite list" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:97 +msgid "Too many groups" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:100 +msgid "Invalid group" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:103 +msgid "User not in group" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:106 +msgid "Group name too long" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:109 +msgid "Cannot remove group zero" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:113 +msgid "Tried to add a user to a group that doesn't exist" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:116 +msgid "Switchboard failed" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:120 +msgid "Notify transfer failed" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:125 +msgid "Required fields missing" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:129 +msgid "Too many hits to a FND" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:133 +#: ../libpurple/protocols/oscar/family_icbm.c:59 +#: ../libpurple/protocols/oscar/util.c:43 +msgid "Not logged in" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:137 +msgid "Service temporarily unavailable" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:140 +msgid "Database server error" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:144 +msgid "Command disabled" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:148 +msgid "File operation error" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:152 +msgid "Memory allocation error" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:156 +msgid "Wrong CHL value sent to server" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:161 +msgid "Server busy" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:164 +#: ../libpurple/protocols/msn/error.c:178 +#: ../libpurple/protocols/msn/error.c:236 +msgid "Server unavailable" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:167 +msgid "Peer notification server down" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:171 +msgid "Database connect error" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:175 +msgid "Server is going down (abandon ship)" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:182 +msgid "Error creating connection" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:186 +msgid "CVR parameters are either unknown or not allowed" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:190 +msgid "Unable to write" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:193 +msgid "Session overload" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:197 +msgid "User is too active" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:200 +msgid "Too many sessions" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:203 +msgid "Passport not verified" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:206 +msgid "Bad friend file" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:210 +msgid "Not expected" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:215 +msgid "Friendly name is changing too rapidly" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:224 +msgid "Server too busy" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:228 +#: ../libpurple/protocols/silc/silc.c:340 +#: ../libpurple/protocols/silc10/ops.c:1713 ../libpurple/proxy.c:1796 +msgid "Authentication failed" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:231 +msgid "Not allowed when offline" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:239 +msgid "Not accepting new users" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:242 +msgid "Kids Passport without parental consent" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:245 +msgid "Passport account not yet verified" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:248 +msgid "Passport account suspended" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:251 +msgid "Bad ticket" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:257 +#, c-format +msgid "Unknown Error Code %d" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:272 +#, c-format +msgid "MSN Error: %s\n" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:355 +#, c-format +msgid "Buddy list synchronization issue in %s (%s)" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:361 +#, 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 "" + +#: ../libpurple/protocols/msn/error.c:369 +#, c-format +msgid "" +"%s is on the local list but not on the server list. Do you want this buddy " +"to be added?" +msgstr "" + +#: ../libpurple/protocols/msn/group.h:36 +msgid "Other Contacts" +msgstr "" + +#: ../libpurple/protocols/msn/group.h:39 +msgid "Non-IM Contacts" +msgstr "" + +#: ../libpurple/protocols/msn/msg.c:835 +#, c-format +msgid "%s sent a wink. <a href='msn-wink://%s'>Click here to play it</a>" +msgstr "" + +#: ../libpurple/protocols/msn/msg.c:841 +#, c-format +msgid "%s sent a wink, but it could not be saved" +msgstr "" + +#: ../libpurple/protocols/msn/msg.c:861 +#, c-format +msgid "%s sent a voice clip. <a href='audio://%s'>Click here to play it</a>" +msgstr "" + +#: ../libpurple/protocols/msn/msg.c:867 +#, c-format +msgid "%s sent a voice clip, but it could not be saved" +msgstr "" + +#: ../libpurple/protocols/msn/msg.c:1154 +#, c-format +msgid "%s sent you a voice chat invite, which is not yet supported." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:137 +msgid "Nudge" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:138 +#, c-format +msgid "%s has nudged you!" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:138 +#, c-format +msgid "Nudging %s..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:151 +#: ../libpurple/protocols/myspace/myspace.c:3002 +msgid "Email Address..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:183 ../libpurple/protocols/msn/msn.c:261 +msgid "Your new MSN friendly name is too long." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:445 +#, c-format +msgid "Set friendly name for %s." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:447 +msgid "Set Friendly Name" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:448 +msgid "This is the name that other MSN buddies will see you as." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:524 +msgid "This Location" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:526 +msgid "This is the name that identifies this location" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:535 +msgid "Other Locations" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:550 +msgid "You can sign out from other locations here" +msgstr "" + +#. TODO: Due to limitations in our current request field API, the +#. following string will show up with a trailing colon. This should +#. be fixed either by adding an "include_colon" boolean, or creating +#. a separate purple_request_field_label_new_without_colon function, +#. or by never automatically adding the colon and requiring that +#. callers add the colon themselves. +#: ../libpurple/protocols/msn/msn.c:565 +msgid "You are not signed in from any other locations." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:632 +msgid "Allow multiple logins?" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:633 +msgid "" +"Do you want to allow or disallow connecting from multiple locations " +"simultaneously?" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:638 ../libpurple/protocols/msn/msn.c:708 +msgid "Allow" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:639 ../libpurple/protocols/msn/msn.c:709 +msgid "Disallow" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:652 +msgid "Set your home phone number." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:669 +msgid "Set your work phone number." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:686 +msgid "Set your mobile phone number." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:701 +msgid "Allow MSN Mobile pages?" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:702 +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 "" + +#: ../libpurple/protocols/msn/msn.c:724 +#, c-format +msgid "Blocked Text for %s" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:726 +msgid "No text is blocked for this account." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:729 +#, c-format +msgid "" +"MSN servers are currently blocking the following regular expressions:<br/>%s" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:750 +msgid "This account does not have email enabled." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:791 +msgid "Send a mobile message." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:793 +msgid "Page" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1049 +msgid "Playing a game" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1052 +#: ../libpurple/protocols/oscar/family_locate.c:446 +msgid "Working" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1122 +msgid "Has you" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1130 +#: ../libpurple/protocols/yahoo/libymsg.c:4273 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:548 +msgid "Home Phone Number" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1134 +#: ../libpurple/protocols/yahoo/libymsg.c:4274 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:549 +msgid "Work Phone Number" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1138 +#: ../libpurple/protocols/yahoo/libymsg.c:4275 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:550 +msgid "Mobile Phone Number" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1161 ../libpurple/protocols/msn/state.c:39 +#: ../libpurple/protocols/yahoo/libymsg.c:4082 +#: ../libpurple/protocols/yahoo/libymsg.c:5108 +msgid "Be Right Back" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1167 ../libpurple/protocols/msn/state.c:37 +#: ../libpurple/protocols/novell/novell.c:2845 +#: ../libpurple/protocols/novell/novell.c:2975 +#: ../libpurple/protocols/oscar/family_locate.c:409 +#: ../libpurple/protocols/silc/buddy.c:1493 +#: ../libpurple/protocols/silc/silc.c:58 +#: ../libpurple/protocols/silc10/buddy.c:1500 +#: ../libpurple/protocols/silc10/silc.c:48 +#: ../libpurple/protocols/yahoo/libymsg.c:4084 +#: ../libpurple/protocols/yahoo/libymsg.c:5112 +#: ../pidgin/plugins/themeedit-icon.c:66 +msgid "Busy" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1172 +#: ../libpurple/protocols/yahoo/libymsg.c:4092 +#: ../libpurple/protocols/yahoo/libymsg.c:5126 +msgid "On the Phone" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1177 +#: ../libpurple/protocols/yahoo/libymsg.c:4096 +#: ../libpurple/protocols/yahoo/libymsg.c:5132 +msgid "Out to Lunch" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1199 +msgid "Game Title" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1200 +msgid "Office Title" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1218 +msgid "Set Friendly Name..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1225 +msgid "View Locations..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1231 +msgid "Set Home Phone Number..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1235 +msgid "Set Work Phone Number..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1239 +msgid "Set Mobile Phone Number..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1245 +msgid "Enable/Disable Mobile Devices..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1250 +msgid "Allow/Disallow Multiple Logins..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1254 +msgid "Allow/Disallow Mobile Pages..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1261 +msgid "View Blocked Text..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1267 +msgid "Open Hotmail Inbox" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1290 +msgid "Send to Mobile" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1338 +msgid "SSL support is needed for MSN. Please install a supported SSL library." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1782 +#, c-format +msgid "" +"Unable to add the buddy %s because the username is invalid. Usernames must " +"be valid email addresses." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1784 +#: ../libpurple/protocols/oscar/oscar.c:3698 +#: ../libpurple/protocols/oscar/oscar.c:4169 +#: ../libpurple/protocols/oscar/oscar.c:4184 +msgid "Unable to Add" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2344 ../libpurple/protocols/msn/msn.c:2686 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:808 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1199 +msgid "Error retrieving profile" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2408 ../pidgin/plugins/convcolors.c:387 +msgid "General" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2415 +#: ../libpurple/protocols/mxit/profile.c:329 +#: ../libpurple/protocols/myspace/user.c:127 +#: ../libpurple/protocols/oscar/userinfo.c:449 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1080 +msgid "Age" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2417 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1095 +msgid "Occupation" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2418 +#: ../libpurple/protocols/myspace/user.c:135 +#: ../libpurple/protocols/novell/novell.c:1486 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1075 +#: ../libpurple/protocols/zephyr/zephyr.c:807 +#: ../libpurple/protocols/zephyr/zephyr.c:1189 +msgid "Location" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2423 ../libpurple/protocols/msn/msn.c:2615 +#: ../libpurple/protocols/msn/msn.c:2621 ../libpurple/protocols/msn/msn.c:2628 +msgid "Hobbies and Interests" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2429 ../libpurple/protocols/msn/msn.c:2549 +#: ../libpurple/protocols/msn/msn.c:2555 ../libpurple/protocols/msn/msn.c:2562 +#: ../libpurple/protocols/msn/msn.c:2570 ../libpurple/protocols/msn/msn.c:2577 +msgid "A Little About Me" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2446 +msgid "Social" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2448 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1085 +msgid "Marital Status" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2449 +msgid "Interests" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2450 +msgid "Pets" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2451 +msgid "Hometown" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2452 +msgid "Places Lived" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2453 +msgid "Fashion" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2454 +msgid "Humor" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2455 +msgid "Music" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2456 ../libpurple/protocols/msn/msn.c:2637 +#: ../libpurple/protocols/msn/msn.c:2643 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1137 +msgid "Favorite Quote" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2473 +msgid "Contact Info" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2474 +msgid "Personal" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2477 +msgid "Significant Other" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2478 +msgid "Home Phone" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2479 +msgid "Home Phone 2" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2480 +#: ../libpurple/protocols/oscar/userinfo.c:459 +msgid "Home Address" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2481 +msgid "Personal Mobile" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2482 +msgid "Home Fax" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2483 +msgid "Personal Email" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2484 +msgid "Personal IM" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2486 +msgid "Anniversary" +msgstr "" + +#. Business +#: ../libpurple/protocols/msn/msn.c:2502 +msgid "Work" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2505 +#: ../libpurple/protocols/oscar/userinfo.c:477 +msgid "Company" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2506 +#: ../libpurple/protocols/novell/novell.c:1488 +msgid "Department" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2507 +msgid "Profession" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2508 +msgid "Work Phone" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2509 +msgid "Work Phone 2" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2510 +#: ../libpurple/protocols/oscar/userinfo.c:467 +msgid "Work Address" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2511 +msgid "Work Mobile" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2512 +msgid "Work Pager" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2513 +msgid "Work Fax" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2514 +msgid "Work Email" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2515 +msgid "Work IM" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2516 +msgid "Start Date" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2586 ../libpurple/protocols/msn/msn.c:2592 +#: ../libpurple/protocols/msn/msn.c:2599 ../libpurple/protocols/msn/msn.c:2606 +msgid "Favorite Things" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2651 +msgid "Last Updated" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2662 +#: ../libpurple/protocols/silc/ops.c:1039 +#: ../libpurple/protocols/silc10/ops.c:1060 +msgid "Homepage" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2688 +msgid "The user has not created a public profile." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2689 +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 "" + +#: ../libpurple/protocols/msn/msn.c:2693 +msgid "" +"Could not find any information in the user's profile. The user most likely " +"does not exist." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2701 +#: ../libpurple/protocols/myspace/user.c:194 +#: ../libpurple/protocols/myspace/user.c:197 +#: ../libpurple/protocols/oscar/userinfo.c:535 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1237 +msgid "View web profile" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. *< summary +#: ../libpurple/protocols/msn/msn.c:2999 ../libpurple/protocols/msn/msn.c:3000 +msgid "Windows Live Messenger Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:3034 +msgid "Use HTTP Method" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:3039 +msgid "HTTP Method Server" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:3044 +msgid "Show custom smileys" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:3049 +msgid "Allow direct connections" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:3054 +msgid "Allow connecting from multiple locations" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:3062 +msgid "nudge: nudge a user to get their attention" +msgstr "" + +#: ../libpurple/protocols/msn/nexus.c:357 +msgid "Windows Live ID authentication:Unable to connect" +msgstr "" + +#: ../libpurple/protocols/msn/nexus.c:364 +msgid "Windows Live ID authentication:Invalid response" +msgstr "" + +#: ../libpurple/protocols/msn/notification.c:824 +msgid "The following users are missing from your addressbook" +msgstr "" + +#: ../libpurple/protocols/msn/notification.c:832 +#: ../libpurple/protocols/msn/notification.c:879 +#, c-format +msgid "Unknown error (%d): %s" +msgstr "" + +#: ../libpurple/protocols/msn/notification.c:836 +#: ../libpurple/protocols/msn/notification.c:860 +#: ../libpurple/protocols/sametime/sametime.c:4472 +msgid "Unable to add user" +msgstr "" + +#. Unknown error! +#: ../libpurple/protocols/msn/notification.c:859 +#: ../libpurple/protocols/msn/notification.c:905 +#: ../libpurple/protocols/yahoo/libymsg.c:2142 +#, c-format +msgid "Unknown error (%d)" +msgstr "" + +#: ../libpurple/protocols/msn/notification.c:883 +#: ../libpurple/protocols/msn/notification.c:906 +msgid "Unable to remove user" +msgstr "" + +#: ../libpurple/protocols/msn/notification.c:1210 +msgid "Mobile message was not sent because it was too long." +msgstr "" + +#: ../libpurple/protocols/msn/notification.c:1212 +msgid "Mobile message was not sent because an unknown error occurred." +msgstr "" + +#: ../libpurple/protocols/msn/notification.c:2234 +#, 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] "" +msgstr[2] "" + +#: ../libpurple/protocols/msn/oim.c:407 +msgid "" +"Message was not sent because the system is unavailable. This normally " +"happens when the user is blocked or does not exist." +msgstr "" + +#: ../libpurple/protocols/msn/oim.c:411 +msgid "Message was not sent because messages are being sent too quickly." +msgstr "" + +#: ../libpurple/protocols/msn/oim.c:414 +msgid "Message was not sent because an unknown encoding error occurred." +msgstr "" + +#: ../libpurple/protocols/msn/oim.c:420 +msgid "Message was not sent because an unknown error occurred." +msgstr "" + +#: ../libpurple/protocols/msn/oim.c:672 +#, c-format +msgid "" +"%s (There was an error receiving this message. Converting the encoding from " +"%s to UTF-8 failed.)" +msgstr "" + +#: ../libpurple/protocols/msn/oim.c:687 +#, c-format +msgid "" +"%s (There was an error receiving this message. The charset was %s, but it " +"was not valid UTF-8.)" +msgstr "" + +#: ../libpurple/protocols/msn/oim.c:691 +#, c-format +msgid "" +"%s (There was an error receiving this message. The charset was missing, but " +"it was not valid UTF-8.)" +msgstr "" + +#: ../libpurple/protocols/msn/servconn.c:145 +msgid "Writing error" +msgstr "" + +#: ../libpurple/protocols/msn/servconn.c:147 +msgid "Reading error" +msgstr "" + +#: ../libpurple/protocols/msn/servconn.c:169 +#, c-format +msgid "" +"Connection error from %s server:\n" +"%s" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:376 +msgid "Our protocol is not supported by the server" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:381 +msgid "Error parsing HTTP" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:385 +#: ../libpurple/protocols/novell/novell.c:2028 +#: ../libpurple/protocols/oscar/flap_connection.c:468 +#: ../libpurple/protocols/yahoo/libymsg.c:169 +msgid "You have signed on from another location" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:391 +msgid "" +"The MSN servers are temporarily unavailable. Please wait and try again." +msgstr "" + +#: ../libpurple/protocols/msn/session.c:397 +msgid "The MSN servers are going down temporarily" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:402 +#, c-format +msgid "Unable to authenticate: %s" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:411 +msgid "" +"Your MSN buddy list is temporarily unavailable. Please wait and try again." +msgstr "" + +#: ../libpurple/protocols/msn/session.c:433 +#: ../libpurple/protocols/msn/session.c:435 +msgid "Handshaking" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:434 +msgid "Transferring" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:436 +msgid "Starting authentication" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:437 +msgid "Getting cookie" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:439 +msgid "Sending cookie" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:440 +msgid "Retrieving buddy list" +msgstr "" + +#: ../libpurple/protocols/msn/slpcall.c:580 +#, c-format +msgid "" +"%s requests to view your webcam, but this request is not yet supported." +msgstr "" + +#: ../libpurple/protocols/msn/slpcall.c:602 +#, c-format +msgid "%s invited you to view his/her webcam, but this is not yet supported." +msgstr "" + +#: ../libpurple/protocols/msn/state.c:40 +msgid "Away From Computer" +msgstr "" + +#: ../libpurple/protocols/msn/state.c:41 +msgid "On The Phone" +msgstr "" + +#: ../libpurple/protocols/msn/state.c:42 +msgid "Out To Lunch" +msgstr "" + +#: ../libpurple/protocols/msn/switchboard.c:464 +msgid "Message may have not been sent because a timeout occurred:" +msgstr "" + +#: ../libpurple/protocols/msn/switchboard.c:500 +msgid "Message could not be sent, not allowed while invisible:" +msgstr "" + +#: ../libpurple/protocols/msn/switchboard.c:504 +msgid "Message could not be sent because the user is offline:" +msgstr "" + +#: ../libpurple/protocols/msn/switchboard.c:508 +msgid "Message could not be sent because a connection error occurred:" +msgstr "" + +#: ../libpurple/protocols/msn/switchboard.c:512 +msgid "Message could not be sent because we are sending too quickly:" +msgstr "" + +#: ../libpurple/protocols/msn/switchboard.c:516 +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 "" + +#: ../libpurple/protocols/msn/switchboard.c:523 +msgid "" +"Message could not be sent because an error with the switchboard occurred:" +msgstr "" + +#: ../libpurple/protocols/msn/switchboard.c:531 +msgid "Message may have not been sent because an unknown error occurred:" +msgstr "" + +#: ../libpurple/protocols/msn/userlist.c:469 +msgid "Delete Buddy from Address Book?" +msgstr "" + +#: ../libpurple/protocols/msn/userlist.c:470 +msgid "Do you want to delete this buddy from your address book as well?" +msgstr "" + +#: ../libpurple/protocols/msn/userlist.c:526 +msgid "The username specified is invalid." +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:64 +msgid "The Display Name you entered is invalid." +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:71 +#: ../libpurple/protocols/mxit/login.c:250 +msgid "" +"The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'." +msgstr "" + +#. show error to user +#: ../libpurple/protocols/mxit/actions.c:200 +msgid "Profile Update Error" +msgstr "" + +#. no profile information yet, so we cannot update +#. (reference: "libpurple/request.h") +#: ../libpurple/protocols/mxit/actions.c:224 +#: ../libpurple/protocols/mxit/actions.c:313 +#: ../libpurple/protocols/oscar/userinfo.c:527 +msgid "Profile" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:224 +msgid "Your profile information is not yet retrieved. Please try again later." +msgstr "" + +#. display name +#. nick name (required) +#: ../libpurple/protocols/mxit/actions.c:235 +#: ../libpurple/protocols/mxit/login.c:338 +#: ../libpurple/protocols/mxit/profile.c:211 +#: ../libpurple/protocols/mxit/profile.c:321 +msgid "Display Name" +msgstr "" + +#. about me +#: ../libpurple/protocols/mxit/actions.c:259 +#: ../libpurple/protocols/mxit/profile.c:225 +msgid "About Me" +msgstr "" + +#. where I live +#: ../libpurple/protocols/mxit/actions.c:263 +#: ../libpurple/protocols/mxit/profile.c:227 +msgid "Where I Live" +msgstr "" + +#. relationship status +#: ../libpurple/protocols/mxit/actions.c:267 +#: ../libpurple/protocols/mxit/profile.c:229 +msgid "Relationship Status" +msgstr "" + +#. mobile number +#: ../libpurple/protocols/mxit/actions.c:298 +msgid "Mobile Number" +msgstr "" + +#. is searchable +#: ../libpurple/protocols/mxit/actions.c:302 +msgid "Can be searched" +msgstr "" + +#. is suggestable +#: ../libpurple/protocols/mxit/actions.c:306 +msgid "Can be suggested" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:313 +msgid "Update your MXit Profile" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:341 +#: ../libpurple/protocols/mxit/login.c:261 +msgid "The PIN you entered is invalid." +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:346 +msgid "The PIN you entered has an invalid length [4-10]." +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:351 +#: ../libpurple/protocols/mxit/login.c:271 +msgid "The PIN is invalid. It should only consist of digits [0-9]." +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:357 +#: ../libpurple/protocols/mxit/login.c:277 +msgid "The two PINs you entered do not match." +msgstr "" + +#. show error to user +#: ../libpurple/protocols/mxit/actions.c:375 +msgid "PIN Update Error" +msgstr "" + +#. pin +#. pin (required) +#: ../libpurple/protocols/mxit/actions.c:401 +#: ../libpurple/protocols/mxit/login.c:355 +msgid "PIN" +msgstr "" + +#. verify pin +#: ../libpurple/protocols/mxit/actions.c:406 +#: ../libpurple/protocols/mxit/login.c:359 +msgid "Verify PIN" +msgstr "" + +#. (reference: "libpurple/request.h") +#: ../libpurple/protocols/mxit/actions.c:411 +msgid "Change PIN" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:411 +msgid "Change MXit PIN" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:429 +msgid "View Splash" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:429 +msgid "There is no splash-screen currently available" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:449 +msgid "About" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:497 +msgid "Search for user" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:498 +msgid "Search for a MXit contact" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:499 +msgid "Type search information" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:501 +#: ../libpurple/protocols/oscar/oscar.c:5333 +msgid "_Search" +msgstr "" + +#. display / change profile +#: ../libpurple/protocols/mxit/actions.c:521 +msgid "Change Profile..." +msgstr "" + +#. change PIN +#: ../libpurple/protocols/mxit/actions.c:525 +msgid "Change PIN..." +msgstr "" + +#. suggested friends +#: ../libpurple/protocols/mxit/actions.c:529 +msgid "Suggested friends..." +msgstr "" + +#. search for contacts +#: ../libpurple/protocols/mxit/actions.c:533 +msgid "Search for contacts..." +msgstr "" + +#. display splash-screen +#: ../libpurple/protocols/mxit/actions.c:537 +msgid "View Splash..." +msgstr "" + +#. display plugin version +#: ../libpurple/protocols/mxit/actions.c:541 +msgid "About..." +msgstr "" + +#. the file is too big +#: ../libpurple/protocols/mxit/filexfer.c:130 +msgid "The file you are trying to send is too large!" +msgstr "" + +#. file read error +#: ../libpurple/protocols/mxit/filexfer.c:178 +msgid "Unable to access the local file" +msgstr "" + +#. file write error +#: ../libpurple/protocols/mxit/filexfer.c:456 +msgid "Unable to save the file" +msgstr "" + +#: ../libpurple/protocols/mxit/http.c:281 +msgid "" +"Unable to connect to the MXit HTTP server. Please check your server " +"settings." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:106 +msgid "Logging In..." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:168 +#: ../libpurple/protocols/mxit/login.c:205 +msgid "" +"Unable to connect to the MXit server. Please check your server settings." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:193 +msgid "Connecting..." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:242 +msgid "The Display Name you entered is too short." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:266 +msgid "The PIN you entered has an invalid length [7-10]." +msgstr "" + +#. mxit login name +#: ../libpurple/protocols/mxit/login.c:333 +msgid "MXit ID" +msgstr "" + +#. show the form to the user to complete +#: ../libpurple/protocols/mxit/login.c:365 +msgid "Register New MXit Account" +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:365 +msgid "Please fill in the following fields:" +msgstr "" + +#. no reply from the WAP site +#: ../libpurple/protocols/mxit/login.c:397 +#: ../libpurple/protocols/mxit/login.c:635 +msgid "Error contacting the MXit WAP site. Please try again later." +msgstr "" + +#. wapserver error +#. server could not find the user +#: ../libpurple/protocols/mxit/login.c:406 +#: ../libpurple/protocols/mxit/login.c:644 +msgid "" +"MXit is currently unable to process the request. Please try again later." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:416 +msgid "Wrong security code entered. Please try again later." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:419 +msgid "Your session has expired. Please try again later." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:422 +msgid "Invalid country selected. Please try again." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:425 +msgid "The MXit ID you entered is not registered. Please register first." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:428 +msgid "The MXit ID you entered is already registered. Please choose another." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:435 +msgid "Internal error. Please try again later." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:526 +msgid "You did not enter the security code" +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:662 +msgid "Security Code" +msgstr "" + +#. ask for input (required) +#: ../libpurple/protocols/mxit/login.c:666 +msgid "Enter Security Code" +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:672 +msgid "Your Country" +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:693 +msgid "Your Language" +msgstr "" + +#. display the form to the user and wait for his/her input +#: ../libpurple/protocols/mxit/login.c:710 +msgid "MXit Authorization" +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:710 +msgid "MXit account validation" +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:732 +msgid "Retrieving User Information..." +msgstr "" + +#: ../libpurple/protocols/mxit/multimx.c:214 +msgid "was kicked" +msgstr "" + +#: ../libpurple/protocols/mxit/multimx.c:229 +msgid "You have been kicked from this MultiMX." +msgstr "" + +#: ../libpurple/protocols/mxit/multimx.c:441 +msgid "_Room Name:" +msgstr "" + +#. Display system message in chat window +#: ../libpurple/protocols/mxit/multimx.c:576 +msgid "You have invited" +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:214 +msgid "Loading menu..." +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:346 +#: ../libpurple/protocols/mxit/profile.c:249 +#: ../libpurple/protocols/mxit/profile.c:272 +msgid "Status Message" +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:358 +msgid "Rejection Message" +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:576 +msgid "No profile available" +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:576 +msgid "This contact does not have a profile." +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:595 +msgid "Your MXit ID..." +msgstr "" + +#. contact is in Deleted, Rejected or None state +#: ../libpurple/protocols/mxit/mxit.c:645 +msgid "Re-Invite" +msgstr "" + +#. Configuration options +#. WAP server (reference: "libpurple/accountopt.h") +#: ../libpurple/protocols/mxit/mxit.c:852 +msgid "WAP Server" +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:855 +msgid "Connect via HTTP" +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:858 +msgid "Enable splash-screen popup" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:48 +msgid "Don't want to say" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:50 +msgid "Single" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:52 +msgid "In a relationship" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:54 +msgid "Engaged" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:56 +msgid "Married" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:58 +msgid "It's complicated" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:60 +msgid "Widowed" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:62 +msgid "Separated" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:64 +msgid "Divorced" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:239 +msgid "Last Online" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:261 +msgid "Invite Message" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:310 +msgid "No results" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:310 +msgid "No contacts found." +msgstr "" + +#. define columns +#: ../libpurple/protocols/mxit/profile.c:319 +msgid "UserId" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:331 +msgid "Where I live" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:358 +#, c-format +msgid "You have %i suggested friend." +msgid_plural "You have %i suggested friends." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../libpurple/protocols/mxit/profile.c:360 +#, c-format +msgid "We found %i contact that matches your search." +msgid_plural "We found %i contacts that match your search." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. we must have lost the connection, so terminate it so that we can reconnect +#: ../libpurple/protocols/mxit/protocol.c:417 +msgid "We have lost the connection to MXit. Please reconnect." +msgstr "" + +#. packet could not be queued for transmission +#: ../libpurple/protocols/mxit/protocol.c:513 +msgid "Message Send Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:513 +msgid "Unable to process your request at this time" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:539 +msgid "Timeout while waiting for a response from the MXit server." +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:1475 +msgid "Successfully Logged In..." +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:1572 +#, c-format +msgid "" +"%s sent you an encrypted message, but it is not supported on this client." +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:1573 +#: ../libpurple/protocols/mxit/protocol.c:2490 +msgid "Message Error" +msgstr "" + +#. could not be decrypted +#: ../libpurple/protocols/mxit/protocol.c:1581 +msgid "An encrypted message was received which could not be decrypted." +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2291 +msgid "Cannot perform redirect using the specified protocol" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2459 +msgid "An internal MXit server error occurred." +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2478 +#, c-format +msgid "Login error: %s (%i)" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2483 +#, c-format +msgid "Logout error: %s (%i)" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2487 +msgid "Contact Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2493 +msgid "Message Sending Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2496 +msgid "Status Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2499 +msgid "Mood Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2510 +msgid "Invitation Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2513 +msgid "Contact Removal Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2517 +msgid "Subscription Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2520 +msgid "Contact Update Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2523 +msgid "File Transfer Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2526 +msgid "Cannot create MultiMx room" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2529 +msgid "MultiMx Invitation Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2533 +msgid "Profile Error" +msgstr "" + +#. bad packet +#: ../libpurple/protocols/mxit/protocol.c:2747 +msgid "Invalid packet received from MXit." +msgstr "" + +#. connection error +#: ../libpurple/protocols/mxit/protocol.c:2812 +msgid "A connection error occurred to MXit. (read stage 0x01)" +msgstr "" + +#. connection closed +#: ../libpurple/protocols/mxit/protocol.c:2817 +msgid "A connection error occurred to MXit. (read stage 0x02)" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2827 +msgid "A connection error occurred to MXit. (read stage 0x03)" +msgstr "" + +#. malformed packet length record (too long) +#: ../libpurple/protocols/mxit/protocol.c:2838 +msgid "A connection error occurred to MXit. (read stage 0x04)" +msgstr "" + +#. connection error +#: ../libpurple/protocols/mxit/protocol.c:2849 +msgid "A connection error occurred to MXit. (read stage 0x05)" +msgstr "" + +#. connection closed +#: ../libpurple/protocols/mxit/protocol.c:2854 +msgid "A connection error occurred to MXit. (read stage 0x06)" +msgstr "" + +#: ../libpurple/protocols/mxit/roster.c:210 +#: ../libpurple/protocols/silc/buddy.c:1518 +#: ../libpurple/protocols/silc/util.c:535 +#: ../libpurple/protocols/silc10/buddy.c:1525 +#: ../libpurple/protocols/silc10/util.c:527 +msgid "In Love" +msgstr "" + +#: ../libpurple/protocols/mxit/roster.c:254 +msgid "Pending" +msgstr "" + +#: ../libpurple/protocols/mxit/roster.c:256 +msgid "Invited" +msgstr "" + +#: ../libpurple/protocols/mxit/roster.c:258 +msgid "Rejected" +msgstr "" + +#: ../libpurple/protocols/mxit/roster.c:260 +msgid "Deleted" +msgstr "" + +#: ../libpurple/protocols/mxit/splashscreen.c:206 +#: ../libpurple/protocols/mxit/splashscreen.c:210 +msgid "MXit Advertising" +msgstr "" + +#: ../libpurple/protocols/mxit/splashscreen.c:207 +msgid "More Information" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:136 +#, c-format +msgid "No such user: %s" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:138 +msgid "User lookup" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:693 +msgid "Reading challenge" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:703 +msgid "Unexpected challenge length from server" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:707 +msgid "Logging in" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:803 +msgid "MySpaceIM - No Username Set" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:804 +msgid "You appear to have no MySpace username." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:805 +msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:840 +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 +#: ../libpurple/protocols/myspace/myspace.c:881 +msgid "New mail messages" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:882 +msgid "New blog comments" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:883 +msgid "New profile comments" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:884 +msgid "New friend requests!" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:885 +msgid "New picture comments" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:909 +msgid "MySpace" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:1011 +msgid "IM Friends" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:1143 +#, 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] "" +msgstr[2] "" + +#: ../libpurple/protocols/myspace/myspace.c:1147 +msgid "Add contacts from server" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:1824 +#, c-format +msgid "Protocol error, code %d: %s" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:1846 +#, c-format +msgid "" +"%s Your password is %zu characters, which is longer than the maximum length " +"of %d. Please shorten your password at " +"http://profileedit.myspace.com/index.cfm?fuseaction=accountSettings.changePassword" +" and try again." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:1859 +#: ../libpurple/protocols/novell/nmuser.c:1921 +msgid "Incorrect username or password" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:1871 +msgid "MySpaceIM Error" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:2032 +msgid "Invalid input condition" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:2657 +#: ../libpurple/protocols/myspace/myspace.c:2691 +msgid "Failed to add buddy" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:2657 +msgid "'addbuddy' command failed." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:2691 +#: ../libpurple/protocols/myspace/myspace.c:2741 +msgid "persist command failed" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:2722 +#: ../libpurple/protocols/myspace/myspace.c:2741 +#: ../libpurple/protocols/myspace/myspace.c:2754 +msgid "Failed to remove buddy" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:2722 +msgid "'delbuddy' command failed" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:2754 +msgid "blocklist command failed" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3100 +msgid "Missing Cipher" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3101 +msgid "The RC4 cipher could not be found" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3102 +msgid "" +"Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will " +"not be loaded." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3129 +#: ../libpurple/protocols/myspace/myspace.c:3192 +msgid "Add friends from MySpace.com" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3130 +msgid "Importing friends failed" +msgstr "" + +#. TODO: find out how +#: ../libpurple/protocols/myspace/myspace.c:3185 +msgid "Find people..." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3188 +msgid "Change IM name..." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3574 +msgid "myim URL handler" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3575 +msgid "No suitable MySpaceIM account could be found to open this myim URL." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3576 +msgid "Enable the proper MySpaceIM account and try again." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3637 +msgid "Show display name in status text" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3640 +msgid "Show headline in status text" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3645 +msgid "Send emoticons" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3650 +msgid "Screen resolution (dots per inch)" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3653 +msgid "Base font size (points)" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:120 +#: ../libpurple/protocols/zephyr/zephyr.c:794 +#: ../libpurple/protocols/zephyr/zephyr.c:1177 +msgid "User" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:140 +msgid "Headline" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:156 +msgid "Song" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:166 +msgid "Total Friends" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:184 +msgid "Client Version" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:632 +#: ../libpurple/protocols/myspace/user.c:786 +msgid "" +"An error occurred while trying to set the username. Please try again, or " +"visit http://editprofile.myspace.com/index.cfm?fuseaction=profile.username " +"to set your username." +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:806 +msgid "MySpaceIM - Username Available" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:807 +msgid "This username is available. Would you like to set it?" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:808 +msgid "ONCE SET, THIS CANNOT BE CHANGED!" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:819 +#: ../libpurple/protocols/myspace/user.c:880 +msgid "MySpaceIM - Please Set a Username" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:820 +msgid "This username is unavailable." +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:821 +msgid "Please try another username:" +msgstr "" + +#. Protocol won't log in now without a username set.. Disconnect +#: ../libpurple/protocols/myspace/user.c:870 +msgid "No username set" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:881 +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." +#: ../libpurple/protocols/myspace/zap.c:44 +#: ../libpurple/protocols/myspace/zap.c:217 +msgid "Zap" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:44 +#, c-format +msgid "%s has zapped you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:45 +#, c-format +msgid "Zapping %s..." +msgstr "" + +#. Whack means "to hit or strike someone with a sharp blow" +#: ../libpurple/protocols/myspace/zap.c:48 +msgid "Whack" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:49 +#, c-format +msgid "%s has whacked you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:49 +#, 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. +#: ../libpurple/protocols/myspace/zap.c:54 +msgid "Torch" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:55 +#, c-format +msgid "%s has torched you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:55 +#, c-format +msgid "Torching %s..." +msgstr "" + +#. Smooch means "to kiss someone, often enthusiastically" +#: ../libpurple/protocols/myspace/zap.c:58 +msgid "Smooch" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:59 +#, c-format +msgid "%s has smooched you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:59 +#, c-format +msgid "Smooching %s..." +msgstr "" + +#. A hug is a display of affection; wrapping your arms around someone +#: ../libpurple/protocols/myspace/zap.c:62 +msgid "Hug" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:62 +#, c-format +msgid "%s has hugged you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:63 +#, c-format +msgid "Hugging %s..." +msgstr "" + +#. Slap means "to hit someone with an open/flat hand" +#: ../libpurple/protocols/myspace/zap.c:66 +msgid "Slap" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:67 +#, c-format +msgid "%s has slapped you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:67 +#, c-format +msgid "Slapping %s..." +msgstr "" + +#. Goose means "to pinch someone on their butt" +#: ../libpurple/protocols/myspace/zap.c:70 +msgid "Goose" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:71 +#, c-format +msgid "%s has goosed you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:71 +#, 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. +#: ../libpurple/protocols/myspace/zap.c:76 +msgid "High-five" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:77 +#, c-format +msgid "%s has high-fived you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:77 +#, 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. +#: ../libpurple/protocols/myspace/zap.c:82 +msgid "Punk" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:83 +#, c-format +msgid "%s has punk'd you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:83 +#, 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. +#: ../libpurple/protocols/myspace/zap.c:92 +msgid "Raspberry" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:93 +#, c-format +msgid "%s has raspberried you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:93 +#, c-format +msgid "Raspberrying %s..." +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1863 +msgid "Required parameters not passed in" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1866 +msgid "Unable to write to network" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1869 +msgid "Unable to read from network" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1872 +msgid "Error communicating with server" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1876 +msgid "Conference not found" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1879 +msgid "Conference does not exist" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1883 +msgid "A folder with that name already exists" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1886 +msgid "Not supported" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1890 +msgid "Password has expired" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1893 +#: ../libpurple/protocols/oscar/clientlogin.c:487 +#: ../libpurple/protocols/oscar/oscar.c:1096 +#: ../libpurple/protocols/simple/simple.c:1127 +#: ../libpurple/protocols/yahoo/libymsg.c:2108 +msgid "Incorrect password" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1899 +msgid "Account has been disabled" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1902 +msgid "The server could not access the directory" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1905 +msgid "Your system administrator has disabled this operation" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1908 +msgid "The server is unavailable; try again later" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1911 +msgid "Cannot add a contact to the same folder twice" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1914 +msgid "Cannot add yourself" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1917 +msgid "Master archive is misconfigured" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1924 +msgid "Could not recognize the host of the username you entered" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1927 +msgid "" +"Your account has been disabled because too many incorrect passwords were " +"entered" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1930 +msgid "You cannot add the same person twice to a conversation" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1934 +msgid "You have reached your limit for the number of contacts allowed" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1937 +msgid "You have entered an incorrect username" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1940 +msgid "An error occurred while updating the directory" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1943 +msgid "Incompatible protocol version" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1946 +msgid "The user has blocked you" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1949 +msgid "" +"This evaluation version does not allow more than ten users to log in at one " +"time" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1952 +msgid "The user is either offline or you are blocked" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1955 +#, c-format +msgid "Unknown error: 0x%X" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:124 +#, c-format +msgid "Unable to login: %s" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:255 +#, c-format +msgid "Unable to send message. Could not get details for user (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:404 +#, c-format +msgid "Unable to add %s to your buddy list (%s)." +msgstr "" + +#. TODO: Improve this! message to who or for what conference? +#: ../libpurple/protocols/novell/novell.c:430 +#, c-format +msgid "Unable to send message (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:501 +#: ../libpurple/protocols/novell/novell.c:993 +#, c-format +msgid "Unable to invite user (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:540 +#, c-format +msgid "Unable to send message to %s. Could not create the conference (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:545 +#, c-format +msgid "Unable to send message. Could not create the conference (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:592 +#, c-format +msgid "" +"Unable to move user %s to folder %s in the server side list. Error while " +"creating folder (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:640 +#, c-format +msgid "" +"Unable to add %s to your buddy list. Error creating folder in server side " +"list (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:713 +#, c-format +msgid "Could not get details for user %s (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:759 +#: ../libpurple/protocols/novell/novell.c:905 +#, c-format +msgid "Unable to add user to privacy list (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:806 +#, c-format +msgid "Unable to add %s to deny list (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:859 +#, c-format +msgid "Unable to add %s to permit list (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:927 +#, c-format +msgid "Unable to remove %s from privacy list (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:950 +#: ../libpurple/protocols/novell/novell.c:1656 +#, c-format +msgid "Unable to change server side privacy settings (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1020 +#, c-format +msgid "Unable to create conference (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1131 +#: ../libpurple/protocols/novell/novell.c:1702 +msgid "Error communicating with server. Closing connection." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1484 +msgid "Telephone Number" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1490 +msgid "Personal Title" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1494 +msgid "Mailstop" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1510 +#: ../libpurple/protocols/sametime/sametime.c:4169 +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); +#. } +#: ../libpurple/protocols/novell/novell.c:1523 +msgid "Full name" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1646 +#, c-format +msgid "GroupWise Conference %d" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1729 +msgid "Authenticating..." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1746 +msgid "Waiting for response..." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1881 +#, c-format +msgid "%s has been invited to this conversation." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1909 +msgid "Invitation to Conversation" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1910 +#, c-format +msgid "" +"Invitation from: %s\n" +"\n" +"Sent: %s" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1912 +msgid "Would you like to join the conversation?" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:2084 +#, c-format +msgid "" +"%s appears to be offline and did not receive the message that you just sent." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:2184 +msgid "" +"Unable to connect to server. Please enter the address of the server to which" +" you wish to connect." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:2521 +msgid "This conference has been closed. No more messages can be sent." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/novell/novell.c:3544 +#: ../libpurple/protocols/novell/novell.c:3546 +msgid "Novell GroupWise Messenger Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:3571 +msgid "Server address" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:3575 +msgid "Server port" +msgstr "" + +#: ../libpurple/protocols/oscar/authorization.c:51 +msgid "Please authorize me so I can add you to my buddy list." +msgstr "" + +#: ../libpurple/protocols/oscar/authorization.c:87 +#: ../libpurple/protocols/oscar/authorization.c:97 +#: ../libpurple/protocols/oscar/oscar.c:1964 +#: ../libpurple/protocols/oscar/oscar.c:4373 +#: ../libpurple/protocols/yahoo/libymsg.c:1367 +msgid "No reason given." +msgstr "" + +#: ../libpurple/protocols/oscar/authorization.c:96 +msgid "Authorization Denied Message:" +msgstr "" + +#. * +#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel +#. buttons. +#: ../libpurple/protocols/oscar/authorization.c:98 +#: ../libpurple/protocols/oscar/oscar.c:1223 +#: ../libpurple/protocols/oscar/oscar.c:4936 +#: ../libpurple/protocols/oscar/oscar.c:5276 ../libpurple/request.h:1498 +msgid "_OK" +msgstr "" + +#: ../libpurple/protocols/oscar/clientlogin.c:116 +#, c-format +msgid "Received unexpected response from %s: %s" +msgstr "" + +#: ../libpurple/protocols/oscar/clientlogin.c:118 +#, c-format +msgid "Received unexpected response from %s" +msgstr "" + +#: ../libpurple/protocols/oscar/clientlogin.c:237 +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 "" + +#: ../libpurple/protocols/oscar/clientlogin.c:283 +#: ../libpurple/protocols/oscar/oscar.c:1298 +msgid "" +"You required encryption in your account settings, but one of the servers " +"doesn't support it." +msgstr "" + +#. Note to translators: The first %s is a URL, the second is an +#. error message. +#: ../libpurple/protocols/oscar/clientlogin.c:337 +#: ../libpurple/protocols/oscar/clientlogin.c:572 +#, c-format +msgid "Error requesting %s: %s" +msgstr "" + +#: ../libpurple/protocols/oscar/clientlogin.c:339 +#: ../libpurple/protocols/oscar/clientlogin.c:574 +msgid "The server returned an empty response" +msgstr "" + +#: ../libpurple/protocols/oscar/clientlogin.c:491 +msgid "" +"Server requested that you fill out a CAPTCHA in order to sign in, but this " +"client does not currently support CAPTCHAs." +msgstr "" + +#: ../libpurple/protocols/oscar/clientlogin.c:496 +msgid "AOL does not allow your screen name to authenticate here" +msgstr "" + +#: ../libpurple/protocols/oscar/encoding.c:133 +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 "" + +#: ../libpurple/protocols/oscar/encoding.c:249 +#, 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 "" + +#: ../libpurple/protocols/oscar/family_chatnav.c:65 +msgid "Could not join chat room" +msgstr "" + +#: ../libpurple/protocols/oscar/family_chatnav.c:66 +msgid "Invalid chat room name" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:58 +#: ../libpurple/protocols/oscar/util.c:39 +msgid "Invalid error" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:60 +msgid "Cannot receive IM due to parental controls" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:61 +msgid "Cannot send SMS without accepting terms" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:62 +msgid "Cannot send SMS" +msgstr "" + +#. SMS_WITHOUT_DISCLAIMER is weird +#: ../libpurple/protocols/oscar/family_icbm.c:63 +msgid "Cannot send SMS to this country" +msgstr "" + +#. Undocumented +#: ../libpurple/protocols/oscar/family_icbm.c:66 +msgid "Cannot send SMS to unknown country" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:67 +msgid "Bot accounts cannot initiate IMs" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:68 +msgid "Bot account cannot IM this user" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:69 +msgid "Bot account reached IM limit" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:70 +msgid "Bot account reached daily IM limit" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:71 +msgid "Bot account reached monthly IM limit" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:72 +msgid "Unable to receive offline messages" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:73 +msgid "Offline message store full" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:172 +#, c-format +msgid "Unable to send message: %s (%s)" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:175 +#, c-format +msgid "Unable to send message: %s" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:180 +#, c-format +msgid "Unable to send message to %s: %s (%s)" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:184 +#, c-format +msgid "Unable to send message to %s: %s" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:408 +msgid "Thinking" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:410 +msgid "Shopping" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:414 +msgid "Questioning" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:416 +msgid "Eating" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:417 +msgid "Watching a movie" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:419 ../pidgin/gtkconv.c:6820 +#: ../pidgin/gtkstatusbox.c:714 +msgid "Typing" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:420 +msgid "At the office" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:421 +msgid "Taking a bath" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:422 +msgid "Watching TV" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:423 +msgid "Having fun" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:424 +msgid "Sleeping" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:425 +msgid "Using a PDA" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:429 +msgid "Meeting friends" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:430 +msgid "On the phone" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:431 +msgid "Surfing" +msgstr "" + +#. "I am mobile." / "John is mobile." +#: ../libpurple/protocols/oscar/family_locate.c:433 ../libpurple/status.c:168 +msgid "Mobile" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:434 +msgid "Searching the web" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:435 +msgid "At a party" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:436 +msgid "Having Coffee" +msgstr "" + +#. Playing video games +#: ../libpurple/protocols/oscar/family_locate.c:438 +msgid "Gaming" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:439 +msgid "Browsing the web" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:440 +msgid "Smoking" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:441 +msgid "Writing" +msgstr "" + +#. Drinking [Alcohol] +#: ../libpurple/protocols/oscar/family_locate.c:443 +msgid "Drinking" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:444 ../libpurple/status.c:169 +msgid "Listening to music" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:445 +msgid "Studying" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:447 +msgid "In the restroom" +msgstr "" + +#: ../libpurple/protocols/oscar/flap_connection.c:477 +#: ../libpurple/proxy.c:1561 ../libpurple/proxy.c:1591 +#: ../libpurple/proxy.c:1671 ../libpurple/proxy.c:1742 +#: ../libpurple/proxy.c:1843 ../libpurple/proxy.c:1982 +msgid "Received invalid data on connection with server" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/oscar/libaim.c:123 +#: ../libpurple/protocols/oscar/libaim.c:125 +msgid "AIM Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/oscar/libicq.c:35 +msgid "ICQ UIN..." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/oscar/libicq.c:133 +#: ../libpurple/protocols/oscar/libicq.c:135 +msgid "ICQ Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/oscar/libicq.c:162 +#: ../libpurple/protocols/yahoo/libyahoo.c:326 +#: ../libpurple/protocols/yahoo/libyahoojp.c:222 +#: ../libpurple/protocols/zephyr/zephyr.c:2990 +msgid "Encoding" +msgstr "" + +#: ../libpurple/protocols/oscar/odc.c:43 +msgid "The remote user has closed the connection." +msgstr "" + +#: ../libpurple/protocols/oscar/odc.c:45 +msgid "The remote user has declined your request." +msgstr "" + +#: ../libpurple/protocols/oscar/odc.c:47 +#, c-format +msgid "Lost connection with the remote user:<br>%s" +msgstr "" + +#: ../libpurple/protocols/oscar/odc.c:50 +msgid "Received invalid data on connection with remote user." +msgstr "" + +#: ../libpurple/protocols/oscar/odc.c:52 +msgid "Unable to establish a connection with the remote user." +msgstr "" + +#: ../libpurple/protocols/oscar/odc.c:563 +msgid "Direct IM established" +msgstr "" + +#: ../libpurple/protocols/oscar/odc.c:602 +#, 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 "" + +#: ../libpurple/protocols/oscar/oft.c:666 +#, c-format +msgid "File %s is %s, which is larger than the maximum size of %s." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:157 +#: ../libpurple/protocols/oscar/oscar.c:4771 +msgid "Free For Chat" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:161 +#: ../libpurple/protocols/oscar/oscar.c:4853 +msgid "Not Available" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:163 +#: ../libpurple/protocols/oscar/oscar.c:4839 +msgid "Occupied" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:167 +msgid "Web Aware" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:169 +#: ../libpurple/protocols/yahoo/libymsg.c:4100 ../libpurple/status.c:165 +#: ../pidgin/gtkdocklet.c:560 ../pidgin/gtkstatusbox.c:1099 +msgid "Invisible" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:171 +#: ../libpurple/protocols/oscar/oscar.c:4779 +msgid "Evil" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:173 +#: ../libpurple/protocols/oscar/oscar.c:4787 +msgid "Depression" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:175 +#: ../libpurple/protocols/oscar/oscar.c:4795 +msgid "At home" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:177 +#: ../libpurple/protocols/oscar/oscar.c:4803 +msgid "At work" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:179 +msgid "At lunch" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:309 +#, c-format +msgid "Unable to connect to authentication server: %s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:317 +#, c-format +msgid "Unable to connect to BOS server: %s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:376 +msgid "Username sent" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:380 +msgid "Connection established, cookie sent" +msgstr "" + +#. TODO: Don't call this with ssi +#: ../libpurple/protocols/oscar/oscar.c:461 +msgid "Finalizing connection" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:737 +#, c-format +msgid "" +"Unable to 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 "" + +#: ../libpurple/protocols/oscar/oscar.c:762 +msgid "" +"You required encryption in your account settings, but encryption is not " +"supported by your system." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:896 +#: ../libpurple/protocols/oscar/oscar.c:937 +#: ../libpurple/protocols/oscar/oscar.c:1010 +#, c-format +msgid "You may be disconnected shortly. If so, check %s for updates." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:900 +#: ../libpurple/protocols/oscar/oscar.c:941 +msgid "Unable to get a valid AIM login hash." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1014 +msgid "Unable to get a valid login hash." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1057 +#: ../libpurple/protocols/oscar/oscar.c:1176 +msgid "Received authorization" +msgstr "" + +#. Unregistered username +#. the username does not exist +#: ../libpurple/protocols/oscar/oscar.c:1090 +#: ../libpurple/protocols/yahoo/libymsg.c:2119 +#: ../libpurple/protocols/yahoo/libymsg.c:2410 +msgid "Username does not exist" +msgstr "" + +#. Suspended account +#: ../libpurple/protocols/oscar/oscar.c:1100 +msgid "Your account is currently suspended" +msgstr "" + +#. service temporarily unavailable +#: ../libpurple/protocols/oscar/oscar.c:1105 +msgid "The AOL Instant Messenger service is temporarily unavailable." +msgstr "" + +#. username connecting too frequently +#: ../libpurple/protocols/oscar/oscar.c:1109 +msgid "" +"Your username has 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 "" + +#. client too old +#: ../libpurple/protocols/oscar/oscar.c:1114 +#, c-format +msgid "The client version you are using is too old. Please upgrade at %s" +msgstr "" + +#. IP address connecting too frequently +#: ../libpurple/protocols/oscar/oscar.c:1121 +msgid "" +"Your IP address has been connecting and disconnecting too frequently. Wait a" +" minute and try again. If you continue to try, you will need to wait even " +"longer." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1204 +msgid "The SecurID key entered is invalid" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1220 +msgid "Enter SecurID" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1221 +msgid "Enter the 6 digit number from the digital display." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1259 +msgid "Password sent" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1350 +msgid "Unable to initialize connection" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1964 +#, c-format +msgid "" +"The user %u has denied your request to add them to your buddy list for the following reason:\n" +"%s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1965 +msgid "ICQ authorization denied." +msgstr "" + +#. Someone has granted you authorization +#: ../libpurple/protocols/oscar/oscar.c:1972 +#, c-format +msgid "The user %u has granted your request to add them to your buddy list." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1980 +#, c-format +msgid "" +"You have received a special message\n" +"\n" +"From: %s [%s]\n" +"%s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1988 +#, c-format +msgid "" +"You have received an ICQ page\n" +"\n" +"From: %s [%s]\n" +"%s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1996 +#, c-format +msgid "" +"You have received an ICQ email from %s [%s]\n" +"\n" +"Message is:\n" +"%s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2030 +#, c-format +msgid "ICQ user %u has sent you a buddy: %s (%s)" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2038 +msgid "Do you want to add this buddy to your buddy list?" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2043 ../pidgin/gtkroomlist.c:325 +#: ../pidgin/plugins/disco/gtkdisco.c:694 +msgid "_Add" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2044 +msgid "_Decline" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2192 +#, 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] "" +msgstr[2] "" + +#: ../libpurple/protocols/oscar/oscar.c:2201 +#, 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] "" +msgstr[2] "" + +#: ../libpurple/protocols/oscar/oscar.c:2210 +#, 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] "" +msgstr[2] "" + +#: ../libpurple/protocols/oscar/oscar.c:2219 +#, 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] "" +msgstr[2] "" + +#: ../libpurple/protocols/oscar/oscar.c:2228 +#, 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] "" +msgstr[2] "" + +#: ../libpurple/protocols/oscar/oscar.c:2237 +#, 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] "" +msgstr[2] "" + +#: ../libpurple/protocols/oscar/oscar.c:2437 +msgid "Your AIM connection may be lost." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2773 +#, c-format +msgid "You have been disconnected from chat room %s." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2843 +msgid "The new formatting is invalid." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2844 +msgid "Username formatting can change only capitalization and whitespace." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2978 +msgid "Pop-Up Message" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3018 +#, c-format +msgid "The following username is associated with %s" +msgid_plural "The following usernames are associated with %s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../libpurple/protocols/oscar/oscar.c:3049 +#, c-format +msgid "No results found for email address %s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3070 +#, c-format +msgid "You should receive an email asking to confirm %s." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3072 +msgid "Account Confirmation Requested" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3105 +#, c-format +msgid "" +"Error 0x%04x: Unable to format username because the requested name differs " +"from the original." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3107 +#, c-format +msgid "Error 0x%04x: Unable to format username because it is invalid." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3109 +#, c-format +msgid "" +"Error 0x%04x: Unable to format username because the requested name is too " +"long." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3111 +#, c-format +msgid "" +"Error 0x%04x: Unable to change email address because there is already a " +"request pending for this username." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3113 +#, c-format +msgid "" +"Error 0x%04x: Unable to change email address because the given address has " +"too many usernames associated with it." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3115 +#, c-format +msgid "" +"Error 0x%04x: Unable to change email address because the given address is " +"invalid." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3117 +#, c-format +msgid "Error 0x%04x: Unknown error." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3119 +msgid "Error Changing Account Info" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3125 +#, c-format +msgid "The email address for %s is %s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3127 +msgid "Account Info" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3315 +msgid "" +"Your IM Image was not sent. You must be Direct Connected to send IM Images." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3542 +msgid "Unable to set AIM profile." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3543 +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 "" + +#: ../libpurple/protocols/oscar/oscar.c:3557 +#, 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] "" +msgstr[2] "" + +#: ../libpurple/protocols/oscar/oscar.c:3562 +msgid "Profile too long." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3591 +#, 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] "" +msgstr[2] "" + +#: ../libpurple/protocols/oscar/oscar.c:3596 +msgid "Away message too long." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3696 +#, c-format +msgid "" +"Unable to 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 "" + +#: ../libpurple/protocols/oscar/oscar.c:3832 +msgid "Unable to Retrieve Buddy List" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3833 +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 "" + +#: ../libpurple/protocols/oscar/oscar.c:4016 +#: ../libpurple/protocols/oscar/oscar.c:4018 +#: ../libpurple/protocols/oscar/oscar.c:4242 +#: ../libpurple/protocols/oscar/oscar.c:4243 +#: ../libpurple/protocols/oscar/oscar.c:4248 +msgid "Orphans" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4167 +#, c-format +msgid "" +"Unable to add the buddy %s because you have too many buddies in your buddy " +"list. Please remove one and try again." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4167 +#: ../libpurple/protocols/oscar/oscar.c:4182 +msgid "(no name)" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4181 +#, c-format +msgid "Unable to add the buddy %s for an unknown reason." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4298 +#, 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 "" + +#: ../libpurple/protocols/oscar/oscar.c:4306 +msgid "Authorization Given" +msgstr "" + +#. Granted +#: ../libpurple/protocols/oscar/oscar.c:4369 +#, c-format +msgid "The user %s has granted your request to add them to your buddy list." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4370 +msgid "Authorization Granted" +msgstr "" + +#. Denied +#: ../libpurple/protocols/oscar/oscar.c:4373 +#, c-format +msgid "" +"The user %s has denied your request to add them to your buddy list for the following reason:\n" +"%s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4374 +msgid "Authorization Denied" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4412 +msgid "_Exchange:" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4528 +msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4765 +msgid "iTunes Music Store Link" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4812 +msgid "Lunch" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4933 +#, c-format +msgid "Buddy Comment for %s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4934 +msgid "Buddy Comment:" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4983 +#, c-format +msgid "You have selected to open a Direct IM connection with %s." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4987 +msgid "" +"Because this reveals your IP address, it may be considered a security risk." +" Do you wish to continue?" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4993 +#: ../libpurple/protocols/oscar/peer.c:1070 +msgid "C_onnect" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5031 +msgid "You closed the connection." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5091 +msgid "Get AIM Info" +msgstr "" + +#. We only do this if the user is in our buddy list +#: ../libpurple/protocols/oscar/oscar.c:5100 +msgid "Edit Buddy Comment" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5108 +msgid "Get X-Status Msg" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5126 +msgid "End Direct IM Session" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5132 +msgid "Direct IM" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5150 +msgid "Re-request Authorization" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5209 +msgid "Require authorization" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5212 +msgid "Web aware (enabling this will cause you to receive SPAM!)" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5217 +msgid "ICQ Privacy Options" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5274 +msgid "Change Address To:" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5307 +msgid "you are not waiting for authorization" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5310 +msgid "You are awaiting authorization from the following buddies" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5311 +msgid "" +"You can re-request authorization from these buddies by right-clicking on " +"them and selecting \"Re-request Authorization.\"" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5328 +msgid "Find Buddy by Email" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5329 +msgid "Search for a buddy by email address" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5330 +msgid "Type the email address of the buddy you are searching for." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5491 +msgid "Set User Info (web)..." +msgstr "" + +#. This only happens when connecting with the old-style BUCP login +#: ../libpurple/protocols/oscar/oscar.c:5503 +msgid "Change Password (web)" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5510 +msgid "Configure IM Forwarding (web)" +msgstr "" + +#. ICQ actions +#: ../libpurple/protocols/oscar/oscar.c:5520 +msgid "Set Privacy Options..." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5524 +msgid "Show Visible List" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5527 +msgid "Show Invisible List" +msgstr "" + +#. AIM actions +#: ../libpurple/protocols/oscar/oscar.c:5533 +msgid "Confirm Account" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5537 +msgid "Display Currently Registered Email Address" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5541 +msgid "Change Currently Registered Email Address..." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5548 +msgid "Show Buddies Awaiting Authorization" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5554 +msgid "Search for Buddy by Email Address..." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5769 +msgid "Use clientLogin" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5774 +msgid "" +"Always use AIM/ICQ proxy server for\n" +"file transfers and direct IM (slower,\n" +"but does not reveal your IP address)" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5779 +msgid "Allow multiple simultaneous logins" +msgstr "" + +#: ../libpurple/protocols/oscar/peer.c:720 +#, c-format +msgid "Asking %s to connect to us at %s:%hu for Direct IM." +msgstr "" + +#: ../libpurple/protocols/oscar/peer.c:805 +#, c-format +msgid "Attempting to connect to %s:%hu." +msgstr "" + +#: ../libpurple/protocols/oscar/peer.c:879 +msgid "Attempting to connect via proxy server." +msgstr "" + +#: ../libpurple/protocols/oscar/peer.c:1058 +#, c-format +msgid "%s has just asked to directly connect to %s" +msgstr "" + +#: ../libpurple/protocols/oscar/peer.c:1062 +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 "" + +#. Label +#: ../libpurple/protocols/oscar/userinfo.c:43 ../pidgin/gtkutils.c:2302 +#: ../pidgin/plugins/gevolution/new_person_dialog.c:331 +msgid "Buddy Icon" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:46 +#: ../pidgin/plugins/themeedit-icon.c:81 +msgid "Voice" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:49 +msgid "AIM Direct IM" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:55 +msgid "Get File" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:62 +msgid "Games" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:66 +msgid "ICQ Xtraz" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:69 +msgid "Add-Ins" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:72 +msgid "Send Buddy List" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:75 +msgid "ICQ Direct Connect" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:78 +msgid "AP User" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:81 +msgid "ICQ RTF" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:84 +msgid "Nihilist" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:87 +msgid "ICQ Server Relay" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:90 +msgid "Old ICQ UTF8" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:93 +msgid "Trillian Encryption" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:96 +msgid "ICQ UTF8" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:99 +msgid "Hiptop" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:102 +msgid "Security Enabled" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:105 +msgid "Video Chat" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:109 +msgid "iChat AV" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:112 +msgid "Live Video" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:115 +msgid "Camera" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:118 +msgid "Screen Sharing" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:344 +#: ../libpurple/protocols/oscar/userinfo.c:408 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:720 ../pidgin/gtkprefs.c:1723 +msgid "IP Address" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:350 +msgid "Warning Level" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:360 +msgid "Buddy Comment" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:370 +#, c-format +msgid "User information not available: %s" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:420 +#: ../libpurple/protocols/silc/util.c:592 +#: ../libpurple/protocols/silc10/util.c:586 +msgid "Mobile Phone" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:451 +msgid "Personal Web Page" +msgstr "" + +#. aim_userinfo_t +#. use_html_status +#: ../libpurple/protocols/oscar/userinfo.c:455 +msgid "Additional Information" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:464 +#: ../libpurple/protocols/oscar/userinfo.c:472 +msgid "Zip Code" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:475 +msgid "Work Information" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:478 +msgid "Division" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:479 +msgid "Position" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:480 +msgid "Web Page" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:508 +msgid "Online Since" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:513 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1184 +msgid "Member Since" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:518 +msgid "Capabilities" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:40 +msgid "Invalid SNAC" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:41 +msgid "Server rate limit exceeded" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:42 +msgid "Client rate limit exceeded" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:44 +msgid "Service unavailable" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:45 +msgid "Service not defined" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:46 +msgid "Obsolete SNAC" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:47 +msgid "Not supported by host" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:48 +msgid "Not supported by client" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:49 +msgid "Refused by client" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:50 +msgid "Reply too big" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:51 +msgid "Responses lost" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:52 +msgid "Request denied" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:53 +msgid "Busted SNAC payload" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:54 +msgid "Insufficient rights" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:55 +msgid "In local permit/deny" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:56 +msgid "Warning level too high (sender)" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:57 +msgid "Warning level too high (receiver)" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:58 +msgid "User temporarily unavailable" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:59 +msgid "No match" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:60 +msgid "List overflow" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:61 +msgid "Request ambiguous" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:62 +msgid "Queue full" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:63 +msgid "Not while on AOL" +msgstr "" + +#. Translators: This string is a menu option that, if selected, will cause +#. you to appear online to the chosen user even when your status is set to +#. Invisible. +#: ../libpurple/protocols/oscar/visibility.c:26 +#: ../libpurple/protocols/yahoo/libymsg.c:4244 +#: ../libpurple/protocols/yahoo/libymsg.c:4320 +msgid "Appear Online" +msgstr "" + +#. Translators: This string is a menu option that, if selected, will cause +#. you to appear offline to the chosen user when your status is set to +#. Invisible (this is the default). +#: ../libpurple/protocols/oscar/visibility.c:31 +msgid "Don't Appear Online" +msgstr "" + +#. Translators: This string is a menu option that, if selected, will cause +#. you to always appear offline to the chosen user (even when your status +#. isn't Invisible). +#: ../libpurple/protocols/oscar/visibility.c:36 +#: ../libpurple/protocols/yahoo/libymsg.c:4326 +msgid "Appear Offline" +msgstr "" + +#. Translators: This string is a menu option that, if selected, will cause +#. you to appear offline to the chosen user if you are invisible, and +#. appear online to the chosen user if you are not invisible (this is the +#. default). +#: ../libpurple/protocols/oscar/visibility.c:42 +msgid "Don't Appear Offline" +msgstr "" + +#: ../libpurple/protocols/oscar/visibility.c:113 +msgid "you have no buddies on this list" +msgstr "" + +#: ../libpurple/protocols/oscar/visibility.c:116 +#, c-format +msgid "" +"You can add a buddy to this list by right-clicking on them and selecting " +"\"%s\"" +msgstr "" + +#: ../libpurple/protocols/oscar/visibility.c:127 +msgid "Visible List" +msgstr "" + +#: ../libpurple/protocols/oscar/visibility.c:128 +msgid "These buddies will see your status when you switch to \"Invisible\"" +msgstr "" + +#: ../libpurple/protocols/oscar/visibility.c:137 +msgid "Invisible List" +msgstr "" + +#: ../libpurple/protocols/oscar/visibility.c:138 +msgid "These buddies will always see you as offline" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1320 +#, c-format +msgid "<b>Group Title:</b> %s<br>" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1321 +#, c-format +msgid "<b>Notes Group ID:</b> %s<br>" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1323 +#, c-format +msgid "Info for Group %s" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1325 +msgid "Notes Address Book Information" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1357 +msgid "Invite Group to Conference..." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1367 +msgid "Get Notes Address Book Info" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1538 +msgid "Sending Handshake" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1543 +msgid "Waiting for Handshake Acknowledgement" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1548 +msgid "Handshake Acknowledged, Sending Login" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1553 +msgid "Waiting for Login Acknowledgement" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1558 +msgid "Login Redirected" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1564 +msgid "Forcing Login" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1568 +msgid "Login Acknowledged" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1573 +msgid "Starting Services" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1710 +#, c-format +msgid "" +"A Sametime administrator has issued the following announcement on server %s" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1715 +msgid "Sametime Administrator Announcement" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1847 +#, c-format +msgid "Announcement from %s" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:2021 +msgid "Conference Closed" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:2486 +msgid "Unable to send message: " +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:2492 +#, c-format +msgid "Unable to send message to %s:" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3042 +msgid "Place Closed" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3312 +msgid "Microphone" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3313 +msgid "Speakers" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3314 +msgid "Video Camera" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3318 +msgid "File Transfer" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3352 +#: ../libpurple/protocols/sametime/sametime.c:4192 +msgid "Supports" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3357 +#: ../libpurple/protocols/sametime/sametime.c:4166 +msgid "External User" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3463 +msgid "Create conference with user" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3464 +#, c-format +msgid "" +"Please enter a topic for the new conference, and an invitation message to be" +" sent to %s" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3468 +msgid "New Conference" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3470 +msgid "Create" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3535 +msgid "Available Conferences" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3541 +msgid "Create New Conference..." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3548 +msgid "Invite user to a conference" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3549 +#, 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 "" + +#: ../libpurple/protocols/sametime/sametime.c:3554 +msgid "Invite to Conference" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3645 +msgid "Invite to Conference..." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3650 +msgid "Send TEST Announcement" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3669 ../pidgin/gtkconv.c:4681 +msgid "Topic:" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3729 +msgid "A server is required to connect this account" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4182 +#, c-format +msgid "Unknown (0x%04x)<br>" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4184 +msgid "Last Known Client" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4348 +#: ../libpurple/protocols/sametime/sametime.c:5565 +msgid "User Name" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4351 +#: ../libpurple/protocols/sametime/sametime.c:5568 +msgid "Sametime ID" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4375 +msgid "An ambiguous user ID was entered" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4376 +#, 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 "" + +#: ../libpurple/protocols/sametime/sametime.c:4381 +msgid "Select User" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4465 +msgid "Unable to add user: user not found" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4467 +#, 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 "" + +#: ../libpurple/protocols/sametime/sametime.c:5056 +#, c-format +msgid "" +"Error reading file %s: \n" +"%s\n" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5205 +msgid "Remotely Stored Buddy List" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5210 +msgid "Buddy List Storage Mode" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5213 +msgid "Local Buddy List Only" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5215 +msgid "Merge List from Server" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5217 +msgid "Merge and Save List to Server" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5219 +msgid "Synchronize List with Server" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5274 +#, c-format +msgid "Import Sametime List for Account %s" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5314 +#, c-format +msgid "Export Sametime List for Account %s" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5368 +msgid "Unable to add group: group exists" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5369 +#, c-format +msgid "A group named '%s' already exists in your buddy list." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5372 +#: ../libpurple/protocols/sametime/sametime.c:5502 +msgid "Unable to add group" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5431 +msgid "Possible Matches" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5447 +msgid "Notes Address Book group results" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5448 +#, 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 "" + +#: ../libpurple/protocols/sametime/sametime.c:5453 +msgid "Select Notes Address Book" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5496 +msgid "Unable to add group: group not found" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5498 +#, c-format +msgid "" +"The identifier '%s' did not match any Notes Address Book groups in your " +"Sametime community." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5539 +msgid "Notes Address Book Group" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5540 +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 "" + +#: ../libpurple/protocols/sametime/sametime.c:5589 +#, c-format +msgid "Search results for '%s'" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5590 +#, 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 "" + +#: ../libpurple/protocols/sametime/sametime.c:5597 ../pidgin/gtknotify.c:972 +msgid "Search Results" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5622 +msgid "No matches" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5623 +#, c-format +msgid "" +"The identifier '%s' did not match any users in your Sametime community." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5627 +msgid "No Matches" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5664 +msgid "Search for a user" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5665 +msgid "" +"Enter a name or partial ID in the field below to search for matching users " +"in your Sametime community." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5668 +msgid "User Search" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5681 +msgid "Import Sametime List..." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5685 +msgid "Export Sametime List..." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5689 +msgid "Add Notes Address Book Group..." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5693 +msgid "User Search..." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5800 +msgid "Force login (ignore server redirects)" +msgstr "" + +#. pretend to be Sametime Connect +#: ../libpurple/protocols/sametime/sametime.c:5810 +msgid "Hide client identity" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:53 +#: ../libpurple/protocols/silc/buddy.c:414 +#: ../libpurple/protocols/silc/buddy.c:542 +#: ../libpurple/protocols/silc/buddy.c:705 +#: ../libpurple/protocols/silc/ft.c:422 +#: ../libpurple/protocols/silc10/buddy.c:52 +#: ../libpurple/protocols/silc10/buddy.c:421 +#: ../libpurple/protocols/silc10/buddy.c:546 +#: ../libpurple/protocols/silc10/buddy.c:712 +#: ../libpurple/protocols/silc10/ft.c:338 +#, c-format +msgid "User %s is not present in the network" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:54 +#: ../libpurple/protocols/silc/buddy.c:111 +#: ../libpurple/protocols/silc/buddy.c:116 +#: ../libpurple/protocols/silc/buddy.c:120 +#: ../libpurple/protocols/silc/buddy.c:125 +#: ../libpurple/protocols/silc/buddy.c:130 +#: ../libpurple/protocols/silc/buddy.c:135 +#: ../libpurple/protocols/silc/buddy.c:255 +#: ../libpurple/protocols/silc10/buddy.c:53 +#: ../libpurple/protocols/silc10/buddy.c:115 +#: ../libpurple/protocols/silc10/buddy.c:120 +#: ../libpurple/protocols/silc10/buddy.c:124 +#: ../libpurple/protocols/silc10/buddy.c:129 +#: ../libpurple/protocols/silc10/buddy.c:134 +#: ../libpurple/protocols/silc10/buddy.c:139 +#: ../libpurple/protocols/silc10/buddy.c:257 +msgid "Key Agreement" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:55 +#: ../libpurple/protocols/silc10/buddy.c:54 +msgid "Cannot perform the key agreement" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:112 +#: ../libpurple/protocols/silc10/buddy.c:116 +msgid "Error occurred during key agreement" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:116 +#: ../libpurple/protocols/silc10/buddy.c:120 +msgid "Key Agreement failed" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:121 +#: ../libpurple/protocols/silc10/buddy.c:125 +msgid "Timeout during key agreement" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:126 +#: ../libpurple/protocols/silc10/buddy.c:130 +msgid "Key agreement was aborted" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:131 +#: ../libpurple/protocols/silc10/buddy.c:135 +msgid "Key agreement is already started" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:136 +#: ../libpurple/protocols/silc10/buddy.c:140 +msgid "Key agreement cannot be started with yourself" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:256 +#: ../libpurple/protocols/silc/buddy.c:387 +#: ../libpurple/protocols/silc/buddy.c:501 +#: ../libpurple/protocols/silc/buddy.c:512 +#: ../libpurple/protocols/silc10/buddy.c:258 +#: ../libpurple/protocols/silc10/buddy.c:389 +#: ../libpurple/protocols/silc10/buddy.c:514 +msgid "The remote user is not present in the network any more" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:299 +#: ../libpurple/protocols/silc10/buddy.c:295 +#, c-format +msgid "" +"Key agreement request received from %s. Would you like to perform the key " +"agreement?" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:303 +#: ../libpurple/protocols/silc10/buddy.c:299 +#, c-format +msgid "" +"The remote user is waiting key agreement on:\n" +"Remote host: %s\n" +"Remote port: %d" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:316 +#: ../libpurple/protocols/silc10/buddy.c:312 +msgid "Key Agreement Request" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:386 +#: ../libpurple/protocols/silc/buddy.c:416 +#: ../libpurple/protocols/silc/buddy.c:456 +#: ../libpurple/protocols/silc10/buddy.c:388 +#: ../libpurple/protocols/silc10/buddy.c:423 +#: ../libpurple/protocols/silc10/buddy.c:465 +msgid "IM With Password" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:417 +#: ../libpurple/protocols/silc10/buddy.c:424 +msgid "Cannot set IM key" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:457 +#: ../libpurple/protocols/silc10/buddy.c:466 +msgid "Set IM Password" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:500 +#: ../libpurple/protocols/silc/buddy.c:511 +#: ../libpurple/protocols/silc/buddy.c:544 +#: ../libpurple/protocols/silc/ops.c:1515 +#: ../libpurple/protocols/silc/ops.c:1526 +#: ../libpurple/protocols/silc10/buddy.c:513 +#: ../libpurple/protocols/silc10/buddy.c:548 +#: ../libpurple/protocols/silc10/ops.c:1494 +#: ../libpurple/protocols/silc10/ops.c:1505 +msgid "Get Public Key" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:545 +#: ../libpurple/protocols/silc/ops.c:1516 +#: ../libpurple/protocols/silc/ops.c:1527 +#: ../libpurple/protocols/silc10/buddy.c:549 +#: ../libpurple/protocols/silc10/ops.c:1495 +#: ../libpurple/protocols/silc10/ops.c:1506 +msgid "Cannot fetch the public key" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:626 +#: ../libpurple/protocols/silc/buddy.c:1668 +#: ../libpurple/protocols/silc10/buddy.c:635 +#: ../libpurple/protocols/silc10/buddy.c:1674 +msgid "Show Public Key" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:627 +#: ../libpurple/protocols/silc/buddy.c:1035 +#: ../libpurple/protocols/silc/chat.c:241 +#: ../libpurple/protocols/silc10/buddy.c:636 +#: ../libpurple/protocols/silc10/buddy.c:1036 +#: ../libpurple/protocols/silc10/chat.c:237 +msgid "Could not load public key" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:706 +#: ../libpurple/protocols/silc/ops.c:1065 +#: ../libpurple/protocols/silc/ops.c:1180 +#: ../libpurple/protocols/silc/ops.c:1302 +#: ../libpurple/protocols/silc/ops.c:1303 +#: ../libpurple/protocols/silc/ops.c:1321 +#: ../libpurple/protocols/silc10/buddy.c:713 +#: ../libpurple/protocols/silc10/ops.c:1087 +#: ../libpurple/protocols/silc10/ops.c:1159 +#: ../libpurple/protocols/silc10/ops.c:1294 +#: ../libpurple/protocols/silc10/ops.c:1295 +#: ../libpurple/protocols/silc10/ops.c:1313 +msgid "User Information" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:707 +#: ../libpurple/protocols/silc/ops.c:1181 +#: ../libpurple/protocols/silc/ops.c:1322 +#: ../libpurple/protocols/silc10/buddy.c:714 +#: ../libpurple/protocols/silc10/ops.c:1160 +#: ../libpurple/protocols/silc10/ops.c:1314 +msgid "Cannot get user information" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:728 +#: ../libpurple/protocols/silc10/buddy.c:735 +#, c-format +msgid "The %s buddy is not trusted" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:731 +#: ../libpurple/protocols/silc10/buddy.c:738 +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. +#: ../libpurple/protocols/silc/buddy.c:1067 +#: ../libpurple/protocols/silc10/buddy.c:1070 +msgid "Open..." +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1078 +#: ../libpurple/protocols/silc10/buddy.c:1081 +#, c-format +msgid "The %s buddy is not present in the network" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1081 +#: ../libpurple/protocols/silc10/buddy.c:1084 +msgid "" +"To add the buddy you must import his/her public key. Press Import to import " +"a public key." +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1085 +#: ../libpurple/protocols/silc10/buddy.c:1088 +msgid "_Import..." +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1191 +#: ../libpurple/protocols/silc10/buddy.c:1184 +msgid "Select correct user" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1193 +#: ../libpurple/protocols/silc10/buddy.c:1186 +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 "" + +#: ../libpurple/protocols/silc/buddy.c:1195 +#: ../libpurple/protocols/silc10/buddy.c:1188 +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 "" + +#: ../libpurple/protocols/silc/buddy.c:1487 +#: ../libpurple/protocols/silc10/buddy.c:1494 +msgid "Detached" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1491 +#: ../libpurple/protocols/silc/silc.c:60 +#: ../libpurple/protocols/silc10/buddy.c:1498 +#: ../libpurple/protocols/silc10/silc.c:50 +msgid "Indisposed" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1495 +#: ../libpurple/protocols/silc/silc.c:62 +#: ../libpurple/protocols/silc10/buddy.c:1502 +#: ../libpurple/protocols/silc10/silc.c:52 +msgid "Wake Me Up" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1497 +#: ../libpurple/protocols/silc/silc.c:54 +#: ../libpurple/protocols/silc10/buddy.c:1504 +#: ../libpurple/protocols/silc10/silc.c:44 +msgid "Hyper Active" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1499 +#: ../libpurple/protocols/silc10/buddy.c:1506 +msgid "Robot" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1557 +#: ../libpurple/protocols/silc/ops.c:1219 +#: ../libpurple/protocols/silc10/buddy.c:1565 +#: ../libpurple/protocols/silc10/ops.c:1202 +msgid "User Modes" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1574 +#: ../libpurple/protocols/silc/ops.c:1236 +#: ../libpurple/protocols/silc10/buddy.c:1582 +#: ../libpurple/protocols/silc10/ops.c:1219 +msgid "Preferred Contact" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1579 +#: ../libpurple/protocols/silc/ops.c:1241 +#: ../libpurple/protocols/silc10/buddy.c:1587 +#: ../libpurple/protocols/silc10/ops.c:1224 +msgid "Preferred Language" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1584 +#: ../libpurple/protocols/silc/ops.c:1246 +#: ../libpurple/protocols/silc10/buddy.c:1592 +#: ../libpurple/protocols/silc10/ops.c:1229 +msgid "Device" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1589 +#: ../libpurple/protocols/silc/ops.c:1251 +#: ../libpurple/protocols/silc10/buddy.c:1597 +#: ../libpurple/protocols/silc10/ops.c:1234 +#: ../libpurple/protocols/silc10/silc.c:747 +#: ../libpurple/protocols/silc10/silc.c:749 +msgid "Timezone" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1594 +#: ../libpurple/protocols/silc/ops.c:1256 +#: ../libpurple/protocols/silc10/buddy.c:1602 +#: ../libpurple/protocols/silc10/ops.c:1239 +msgid "Geolocation" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1651 +#: ../libpurple/protocols/silc10/buddy.c:1656 +msgid "Reset IM Key" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1656 +#: ../libpurple/protocols/silc10/buddy.c:1662 +msgid "IM with Key Exchange" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1661 +#: ../libpurple/protocols/silc10/buddy.c:1667 +msgid "IM with Password" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1674 +#: ../libpurple/protocols/silc10/buddy.c:1680 +msgid "Get Public Key..." +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1681 +#: ../libpurple/protocols/silc/ops.c:1624 +#: ../libpurple/protocols/silc10/buddy.c:1687 +#: ../libpurple/protocols/silc10/ops.c:1624 +msgid "Kill User" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1691 +#: ../libpurple/protocols/silc/chat.c:1004 +#: ../libpurple/protocols/silc10/buddy.c:1697 +#: ../libpurple/protocols/silc10/chat.c:977 +msgid "Draw On Whiteboard" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:40 +#: ../libpurple/protocols/silc10/chat.c:39 +msgid "_Passphrase:" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:81 +#: ../libpurple/protocols/silc10/chat.c:80 +#, c-format +msgid "Channel %s does not exist in the network" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:82 +#: ../libpurple/protocols/silc/chat.c:177 +#: ../libpurple/protocols/silc10/chat.c:81 +#: ../libpurple/protocols/silc10/chat.c:174 +msgid "Channel Information" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:83 +#: ../libpurple/protocols/silc10/chat.c:82 +msgid "Cannot get channel information" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:120 +#: ../libpurple/protocols/silc10/chat.c:119 +#, c-format +msgid "<b>Channel Name:</b> %s" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:123 +#: ../libpurple/protocols/silc10/chat.c:122 +#, c-format +msgid "<br><b>User Count:</b> %d" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:130 +#: ../libpurple/protocols/silc10/chat.c:129 +#, c-format +msgid "<br><b>Channel Founder:</b> %s" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:139 +#: ../libpurple/protocols/silc10/chat.c:138 +#, c-format +msgid "<br><b>Channel Cipher:</b> %s" +msgstr "" + +#. Definition of HMAC: http://en.wikipedia.org/wiki/HMAC +#: ../libpurple/protocols/silc/chat.c:144 +#: ../libpurple/protocols/silc10/chat.c:142 +#, c-format +msgid "<br><b>Channel HMAC:</b> %s" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:149 +#: ../libpurple/protocols/silc10/chat.c:147 +#, c-format +msgid "<br><b>Channel Topic:</b><br>%s" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:154 +#: ../libpurple/protocols/silc10/chat.c:152 +#, c-format +msgid "<br><b>Channel Modes:</b> " +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:168 +#: ../libpurple/protocols/silc10/chat.c:165 +#, c-format +msgid "<br><b>Founder Key Fingerprint:</b><br>%s" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:169 +#: ../libpurple/protocols/silc10/chat.c:166 +#, c-format +msgid "<br><b>Founder Key Babbleprint:</b><br>%s" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:240 +#: ../libpurple/protocols/silc10/chat.c:236 +msgid "Add Channel Public Key" +msgstr "" + +#. Add new public key +#: ../libpurple/protocols/silc/chat.c:308 +#: ../libpurple/protocols/silc10/chat.c:291 +msgid "Open Public Key..." +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:427 +#: ../libpurple/protocols/silc10/chat.c:401 +msgid "Channel Passphrase" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:434 +#: ../libpurple/protocols/silc10/chat.c:408 +msgid "Channel Public Keys List" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:439 +#: ../libpurple/protocols/silc10/chat.c:413 +#, 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 "" + +#: ../libpurple/protocols/silc/chat.c:448 +#: ../libpurple/protocols/silc/chat.c:449 +#: ../libpurple/protocols/silc/chat.c:485 +#: ../libpurple/protocols/silc/chat.c:486 +#: ../libpurple/protocols/silc/chat.c:938 +#: ../libpurple/protocols/silc10/chat.c:422 +#: ../libpurple/protocols/silc10/chat.c:423 +#: ../libpurple/protocols/silc10/chat.c:461 +#: ../libpurple/protocols/silc10/chat.c:462 +#: ../libpurple/protocols/silc10/chat.c:911 +msgid "Channel Authentication" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:450 +#: ../libpurple/protocols/silc/chat.c:487 +#: ../libpurple/protocols/silc10/chat.c:424 +#: ../libpurple/protocols/silc10/chat.c:463 +msgid "Add / Remove" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:603 +#: ../libpurple/protocols/silc10/chat.c:581 +msgid "Group Name" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:607 +#: ../libpurple/protocols/silc/ops.c:1829 +#: ../libpurple/protocols/silc/silc.c:1260 +#: ../libpurple/protocols/silc10/chat.c:585 +#: ../libpurple/protocols/silc10/ops.c:1907 +#: ../libpurple/protocols/silc10/silc.c:956 +msgid "Passphrase" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:618 +#: ../libpurple/protocols/silc10/chat.c:596 +#, c-format +msgid "Please enter the %s channel private group name and passphrase." +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:620 +#: ../libpurple/protocols/silc10/chat.c:598 +msgid "Add Channel Private Group" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:752 +#: ../libpurple/protocols/silc10/chat.c:726 +msgid "User Limit" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:753 +#: ../libpurple/protocols/silc10/chat.c:727 +msgid "Set user limit on channel. Set to zero to reset user limit." +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:918 +#: ../libpurple/protocols/silc10/chat.c:891 +msgid "Invite List" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:923 +#: ../libpurple/protocols/silc10/chat.c:896 +msgid "Ban List" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:931 +#: ../libpurple/protocols/silc10/chat.c:904 +msgid "Add Private Group" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:944 +#: ../libpurple/protocols/silc10/chat.c:917 +msgid "Reset Permanent" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:949 +#: ../libpurple/protocols/silc10/chat.c:922 +msgid "Set Permanent" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:957 +#: ../libpurple/protocols/silc10/chat.c:930 +msgid "Set User Limit" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:963 +#: ../libpurple/protocols/silc10/chat.c:936 +msgid "Reset Topic Restriction" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:968 +#: ../libpurple/protocols/silc10/chat.c:941 +msgid "Set Topic Restriction" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:975 +#: ../libpurple/protocols/silc10/chat.c:948 +msgid "Reset Private Channel" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:980 +#: ../libpurple/protocols/silc10/chat.c:953 +msgid "Set Private Channel" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:987 +#: ../libpurple/protocols/silc10/chat.c:960 +msgid "Reset Secret Channel" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:992 +#: ../libpurple/protocols/silc10/chat.c:965 +msgid "Set Secret Channel" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:1053 +#: ../libpurple/protocols/silc10/chat.c:1102 +#, c-format +msgid "" +"You have to join the %s channel before you are able to join the private " +"group" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:1055 +#: ../libpurple/protocols/silc10/chat.c:1104 +msgid "Join Private Group" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:1056 +#: ../libpurple/protocols/silc10/chat.c:1105 +msgid "Cannot join private group" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:1252 +#: ../libpurple/protocols/silc/silc.c:1462 +#: ../libpurple/protocols/silc10/chat.c:1299 +#: ../libpurple/protocols/silc10/silc.c:1162 +msgid "Call Command" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:1252 +#: ../libpurple/protocols/silc/silc.c:1463 +#: ../libpurple/protocols/silc10/chat.c:1299 +#: ../libpurple/protocols/silc10/silc.c:1162 +msgid "Cannot call command" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:1253 +#: ../libpurple/protocols/silc/silc.c:1464 +#: ../libpurple/protocols/silc10/chat.c:1300 +#: ../libpurple/protocols/silc10/silc.c:1163 +msgid "Unknown command" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:86 ../libpurple/protocols/silc/ft.c:102 +#: ../libpurple/protocols/silc/ft.c:105 ../libpurple/protocols/silc/ft.c:109 +#: ../libpurple/protocols/silc/ft.c:113 ../libpurple/protocols/silc/ft.c:117 +#: ../libpurple/protocols/silc/ft.c:121 ../libpurple/protocols/silc/ft.c:271 +#: ../libpurple/protocols/silc/ft.c:276 ../libpurple/protocols/silc/ft.c:281 +#: ../libpurple/protocols/silc/ft.c:287 ../libpurple/protocols/silc/ft.c:424 +#: ../libpurple/protocols/silc10/ft.c:89 ../libpurple/protocols/silc10/ft.c:92 +#: ../libpurple/protocols/silc10/ft.c:96 +#: ../libpurple/protocols/silc10/ft.c:100 +#: ../libpurple/protocols/silc10/ft.c:104 +#: ../libpurple/protocols/silc10/ft.c:205 +#: ../libpurple/protocols/silc10/ft.c:210 +#: ../libpurple/protocols/silc10/ft.c:215 +#: ../libpurple/protocols/silc10/ft.c:221 +#: ../libpurple/protocols/silc10/ft.c:340 +msgid "Secure File Transfer" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:87 ../libpurple/protocols/silc/ft.c:103 +#: ../libpurple/protocols/silc/ft.c:106 ../libpurple/protocols/silc/ft.c:110 +#: ../libpurple/protocols/silc/ft.c:114 ../libpurple/protocols/silc/ft.c:118 +#: ../libpurple/protocols/silc/ft.c:122 ../libpurple/protocols/silc10/ft.c:90 +#: ../libpurple/protocols/silc10/ft.c:93 ../libpurple/protocols/silc10/ft.c:97 +#: ../libpurple/protocols/silc10/ft.c:101 +#: ../libpurple/protocols/silc10/ft.c:105 +msgid "Error during file transfer" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:88 +msgid "Remote disconnected" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:107 ../libpurple/protocols/silc10/ft.c:94 +msgid "Permission denied" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:111 ../libpurple/protocols/silc10/ft.c:98 +msgid "Key agreement failed" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:115 ../libpurple/protocols/silc/silc.c:352 +#: ../libpurple/protocols/silc10/ops.c:1725 +msgid "Connection timed out" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:119 +msgid "Creating connection failed" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:123 ../libpurple/protocols/silc10/ft.c:102 +msgid "File transfer session does not exist" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:272 ../libpurple/protocols/silc10/ft.c:206 +msgid "No file transfer session active" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:277 ../libpurple/protocols/silc10/ft.c:211 +msgid "File transfer already started" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:282 ../libpurple/protocols/silc10/ft.c:216 +msgid "Could not perform key agreement for file transfer" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:288 ../libpurple/protocols/silc10/ft.c:222 +msgid "Could not start the file transfer" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:425 ../libpurple/protocols/silc10/ft.c:341 +msgid "Cannot send file" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:77 +msgid "Error occurred" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:560 ../libpurple/protocols/silc/ops.c:569 +#: ../libpurple/protocols/silc/ops.c:578 +#: ../libpurple/protocols/silc10/ops.c:554 +#: ../libpurple/protocols/silc10/ops.c:563 +#: ../libpurple/protocols/silc10/ops.c:572 +#, c-format +msgid "%s has changed the topic of <I>%s</I> to: %s" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:644 +#: ../libpurple/protocols/silc10/ops.c:638 +#, c-format +msgid "<I>%s</I> set channel <I>%s</I> modes to: %s" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:648 +#: ../libpurple/protocols/silc10/ops.c:642 +#, c-format +msgid "<I>%s</I> removed all channel <I>%s</I> modes" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:681 +#: ../libpurple/protocols/silc10/ops.c:675 +#, c-format +msgid "<I>%s</I> set <I>%s's</I> modes to: %s" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:689 +#: ../libpurple/protocols/silc10/ops.c:683 +#, c-format +msgid "<I>%s</I> removed all <I>%s's</I> modes" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:718 +#: ../libpurple/protocols/silc10/ops.c:712 +#, c-format +msgid "You have been kicked off <I>%s</I> by <I>%s</I> (%s)" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:745 ../libpurple/protocols/silc/ops.c:750 +#: ../libpurple/protocols/silc/ops.c:755 +#: ../libpurple/protocols/silc10/ops.c:742 +#: ../libpurple/protocols/silc10/ops.c:747 +#: ../libpurple/protocols/silc10/ops.c:752 +#, c-format +msgid "You have been killed by %s (%s)" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:776 ../libpurple/protocols/silc/ops.c:781 +#: ../libpurple/protocols/silc/ops.c:786 +#: ../libpurple/protocols/silc10/ops.c:773 +#: ../libpurple/protocols/silc10/ops.c:778 +#: ../libpurple/protocols/silc10/ops.c:783 +#, c-format +msgid "Killed by %s (%s)" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:823 +#: ../libpurple/protocols/silc10/ops.c:829 +msgid "Server signoff" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:996 +#: ../libpurple/protocols/silc10/ops.c:1017 +msgid "Personal Information" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1019 +#: ../libpurple/protocols/silc10/ops.c:1040 +msgid "Birth Day" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1027 +#: ../libpurple/protocols/silc10/ops.c:1048 +msgid "Job Role" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1031 +#: ../libpurple/protocols/silc/silc.c:1253 +#: ../libpurple/protocols/silc10/ops.c:1052 +#: ../libpurple/protocols/silc10/silc.c:949 +msgid "Organization" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1035 +#: ../libpurple/protocols/silc10/ops.c:1056 +msgid "Unit" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1059 +#: ../libpurple/protocols/silc10/ops.c:1080 +msgid "Note" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1105 +#: ../libpurple/protocols/silc10/ops.c:1128 +msgid "Join Chat" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1139 +#: ../libpurple/protocols/silc10/chat.c:1039 +#, c-format +msgid "You are channel founder on <I>%s</I>" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1143 +#: ../libpurple/protocols/silc10/chat.c:1043 +#, c-format +msgid "Channel founder on <I>%s</I> is <I>%s</I>" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1202 +#: ../libpurple/protocols/silc/ops.c:1340 +#: ../libpurple/protocols/silc10/ops.c:1183 +#: ../libpurple/protocols/silc10/ops.c:1332 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1070 +msgid "Real Name" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1230 +#: ../libpurple/protocols/silc10/ops.c:1213 ../pidgin/gtkblist-theme.c:467 +msgid "Status Text" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1292 +#: ../libpurple/protocols/silc/ops.c:1366 +#: ../libpurple/protocols/silc10/ops.c:1285 +#: ../libpurple/protocols/silc10/ops.c:1357 +msgid "Public Key Fingerprint" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1293 +#: ../libpurple/protocols/silc/ops.c:1367 +#: ../libpurple/protocols/silc10/ops.c:1286 +#: ../libpurple/protocols/silc10/ops.c:1358 +msgid "Public Key Babbleprint" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1306 +#: ../libpurple/protocols/silc10/ops.c:1298 +msgid "_More..." +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1385 +#: ../libpurple/protocols/silc/silc.c:1317 +#: ../libpurple/protocols/silc10/ops.c:1371 +#: ../libpurple/protocols/silc10/silc.c:1013 +msgid "Detach From Server" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1385 +#: ../libpurple/protocols/silc10/ops.c:1371 +msgid "Cannot detach" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1405 +#: ../libpurple/protocols/silc10/ops.c:1382 +msgid "Cannot set topic" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1434 +#: ../libpurple/protocols/silc10/ops.c:1414 +msgid "Failed to change nickname" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1483 +#: ../libpurple/protocols/silc10/ops.c:1462 +msgid "Roomlist" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1483 +#: ../libpurple/protocols/silc10/ops.c:1462 +msgid "Cannot get room list" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1484 +msgid "Network is empty" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1528 +#: ../libpurple/protocols/silc10/ops.c:1507 +msgid "No public key was received" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1540 +#: ../libpurple/protocols/silc/ops.c:1553 +#: ../libpurple/protocols/silc10/ops.c:1519 +#: ../libpurple/protocols/silc10/ops.c:1532 +msgid "Server Information" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1541 +#: ../libpurple/protocols/silc10/ops.c:1520 +msgid "Cannot get server information" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1564 +#: ../libpurple/protocols/silc10/ops.c:1549 +#: ../libpurple/protocols/silc10/ops.c:1558 +msgid "Server Statistics" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1565 +#: ../libpurple/protocols/silc10/ops.c:1550 +msgid "Cannot get server statistics" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1572 +#: ../libpurple/protocols/silc10/ops.c:1581 +#, 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 "" + +#: ../libpurple/protocols/silc/ops.c:1604 +#: ../libpurple/protocols/silc10/ops.c:1604 +msgid "Network Statistics" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1612 +#: ../libpurple/protocols/silc/ops.c:1617 +#: ../libpurple/protocols/silc10/ops.c:1612 +#: ../libpurple/protocols/silc10/ops.c:1617 +msgid "Ping" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1612 +#: ../libpurple/protocols/silc10/ops.c:1612 +msgid "Ping failed" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1617 +#: ../libpurple/protocols/silc10/ops.c:1617 +msgid "Ping reply received from server" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1625 +#: ../libpurple/protocols/silc10/ops.c:1625 +msgid "Could not kill user" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1664 +msgid "WATCH" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1664 +msgid "Cannot watch user" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1740 +#: ../libpurple/protocols/silc/ops.c:1791 +#: ../libpurple/protocols/silc/silc.c:396 +#: ../libpurple/protocols/silc10/ops.c:1817 +#: ../libpurple/protocols/silc10/ops.c:1864 +#: ../libpurple/protocols/silc10/silc.c:194 +msgid "Resuming session" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1742 +#: ../libpurple/protocols/silc10/ops.c:1819 +msgid "Authenticating connection" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1793 +#: ../libpurple/protocols/silc10/ops.c:1866 +msgid "Verifying server public key" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1830 +#: ../libpurple/protocols/silc10/ops.c:1908 +msgid "Passphrase required" +msgstr "" + +#: ../libpurple/protocols/silc/pk.c:99 ../libpurple/protocols/silc10/pk.c:104 +#, 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 "" + +#: ../libpurple/protocols/silc/pk.c:104 ../libpurple/protocols/silc10/pk.c:109 +#, c-format +msgid "Received %s's public key. Would you like to accept this public key?" +msgstr "" + +#: ../libpurple/protocols/silc/pk.c:108 ../libpurple/protocols/silc10/pk.c:113 +#, c-format +msgid "" +"Fingerprint and babbleprint for the %s key are:\n" +"\n" +"%s\n" +"%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/pk.c:111 ../libpurple/protocols/silc/pk.c:140 +#: ../libpurple/protocols/silc10/pk.c:116 +#: ../libpurple/protocols/silc10/pk.c:142 +msgid "Verify Public Key" +msgstr "" + +#: ../libpurple/protocols/silc/pk.c:116 ../libpurple/protocols/silc10/pk.c:121 +msgid "_View..." +msgstr "" + +#: ../libpurple/protocols/silc/pk.c:141 ../libpurple/protocols/silc10/pk.c:143 +msgid "Unsupported public key type" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:321 +#: ../libpurple/protocols/silc10/ops.c:1755 +msgid "Disconnected by server" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:329 +msgid "Error connecting to SILC Server" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:335 +#: ../libpurple/protocols/silc10/ops.c:1707 +msgid "Key Exchange failed" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:345 +#: ../libpurple/protocols/silc10/ops.c:1718 +msgid "" +"Resuming detached session failed. Press Reconnect to create new connection." +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:399 +#: ../libpurple/protocols/silc10/silc.c:197 +msgid "Performing key exchange" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:494 +#: ../libpurple/protocols/silc/silc.c:510 +#: ../libpurple/protocols/silc/silc.c:539 +msgid "Unable to load SILC key pair" +msgstr "" + +#. Progress +#: ../libpurple/protocols/silc/silc.c:524 +#: ../libpurple/protocols/silc10/silc.c:330 +msgid "Connecting to SILC Server" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:570 +#: ../libpurple/protocols/silc10/silc.c:272 +msgid "Out of memory" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:621 +#: ../libpurple/protocols/silc10/silc.c:318 +msgid "Unable to initialize SILC protocol" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:634 +#: ../libpurple/protocols/silc10/silc.c:325 +msgid "Error loading SILC key pair" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:693 +#: ../libpurple/protocols/silc/silc.c:1873 +#: ../libpurple/protocols/silc10/silc.c:405 +#: ../libpurple/protocols/silc10/silc.c:1582 +#, c-format +msgid "Download %s: %s" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:979 +#: ../libpurple/protocols/silc10/silc.c:675 +msgid "Your Current Mood" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:981 +#: ../libpurple/protocols/silc10/silc.c:677 ../pidgin/gtkprefs.c:2383 +#, c-format +msgid "Normal" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1006 +#: ../libpurple/protocols/silc10/silc.c:702 +msgid "" +"\n" +"Your Preferred Contact Methods" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1014 +#: ../libpurple/protocols/silc/util.c:568 +#: ../libpurple/protocols/silc10/silc.c:710 +#: ../libpurple/protocols/silc10/util.c:561 +msgid "SMS" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1016 +#: ../libpurple/protocols/silc/util.c:570 +#: ../libpurple/protocols/silc10/silc.c:712 +#: ../libpurple/protocols/silc10/util.c:563 +msgid "MMS" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1018 +#: ../libpurple/protocols/silc10/silc.c:714 +msgid "Video conferencing" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1023 +#: ../libpurple/protocols/silc10/silc.c:719 +msgid "Your Current Status" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1030 +#: ../libpurple/protocols/silc10/silc.c:726 +msgid "Online Services" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1033 +#: ../libpurple/protocols/silc10/silc.c:729 +msgid "Let others see what services you are using" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1039 +#: ../libpurple/protocols/silc10/silc.c:735 +msgid "Let others see what computer you are using" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1046 +#: ../libpurple/protocols/silc10/silc.c:742 +msgid "Your VCard File" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1052 +msgid "Timezone (UTC)" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1056 +#: ../libpurple/protocols/silc/silc.c:1057 +#: ../libpurple/protocols/silc10/silc.c:754 +#: ../libpurple/protocols/silc10/silc.c:755 +msgid "User Online Status Attributes" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1058 +#: ../libpurple/protocols/silc10/silc.c:756 +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 "" + +#: ../libpurple/protocols/silc/silc.c:1099 +#: ../libpurple/protocols/silc/silc.c:1105 +#: ../libpurple/protocols/silc/silc.c:1731 +#: ../libpurple/protocols/silc10/silc.c:797 +#: ../libpurple/protocols/silc10/silc.c:803 +#: ../libpurple/protocols/silc10/silc.c:1440 +msgid "Message of the Day" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1099 +#: ../libpurple/protocols/silc10/silc.c:797 +msgid "No Message of the Day available" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1100 +#: ../libpurple/protocols/silc/silc.c:1726 +#: ../libpurple/protocols/silc10/silc.c:798 +#: ../libpurple/protocols/silc10/silc.c:1435 +msgid "There is no Message of the Day associated with this connection" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1151 +#: ../libpurple/protocols/silc/silc.c:1197 +#: ../libpurple/protocols/silc/silc.c:1268 +#: ../libpurple/protocols/silc/silc.c:1269 +#: ../libpurple/protocols/silc10/silc.c:849 +#: ../libpurple/protocols/silc10/silc.c:893 +#: ../libpurple/protocols/silc10/silc.c:964 +#: ../libpurple/protocols/silc10/silc.c:965 +msgid "Create New SILC Key Pair" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1151 +#: ../libpurple/protocols/silc10/silc.c:849 +msgid "Passphrases do not match" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1197 +#: ../libpurple/protocols/silc10/silc.c:893 +msgid "Key Pair Generation failed" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1236 +#: ../libpurple/protocols/silc10/silc.c:932 +msgid "Key length" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1238 +#: ../libpurple/protocols/silc10/silc.c:934 +msgid "Public key file" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1240 +#: ../libpurple/protocols/silc10/silc.c:936 +msgid "Private key file" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1263 +#: ../libpurple/protocols/silc10/silc.c:959 +msgid "Passphrase (retype)" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1270 +#: ../libpurple/protocols/silc10/silc.c:966 +msgid "Generate Key Pair" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1313 +#: ../libpurple/protocols/silc10/silc.c:1009 +msgid "Online Status" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1321 +#: ../libpurple/protocols/silc10/silc.c:1017 +msgid "View Message of the Day" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1325 +#: ../libpurple/protocols/silc10/silc.c:1021 +msgid "Create SILC Key Pair..." +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1419 +#: ../libpurple/protocols/silc10/silc.c:1120 +#, c-format +msgid "User <I>%s</I> is not present in the network" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1602 +#: ../libpurple/protocols/silc10/silc.c:1311 +msgid "Topic too long" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1683 +#: ../libpurple/protocols/silc10/silc.c:1392 +msgid "You must specify a nick" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1785 +#: ../libpurple/protocols/silc10/silc.c:1494 +#, c-format +msgid "channel %s not found" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1790 +#: ../libpurple/protocols/silc10/silc.c:1499 +#, c-format +msgid "channel modes for %s: %s" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1792 +#: ../libpurple/protocols/silc10/silc.c:1501 +#, c-format +msgid "no channel modes are set on %s" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1805 +#: ../libpurple/protocols/silc10/silc.c:1514 +#, c-format +msgid "Failed to set cmodes for %s" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1835 +#: ../libpurple/protocols/silc10/silc.c:1544 +#, c-format +msgid "Unknown command: %s, (may be a client bug)" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1916 +#: ../libpurple/protocols/silc10/silc.c:1625 +msgid "part [channel]: Leave the chat" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1920 +#: ../libpurple/protocols/silc10/silc.c:1629 +msgid "leave [channel]: Leave the chat" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1924 +#: ../libpurple/protocols/silc10/silc.c:1633 +msgid "topic [<new topic>]: View or change the topic" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1929 +#: ../libpurple/protocols/silc10/silc.c:1638 +msgid "join <channel> [<password>]: Join a chat on this network" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1933 +#: ../libpurple/protocols/silc10/silc.c:1642 +msgid "list: List channels on this network" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1937 +#: ../libpurple/protocols/silc10/silc.c:1646 +msgid "whois <nick>: View nick's information" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1941 +#: ../libpurple/protocols/silc10/silc.c:1650 +#: ../libpurple/protocols/zephyr/zephyr.c:2701 +msgid "msg <nick> <message>: Send a private message to a user" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1945 +#: ../libpurple/protocols/silc10/silc.c:1654 +msgid "" +"query <nick> [<message>]: Send a private message to a user" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1949 +#: ../libpurple/protocols/silc10/silc.c:1658 +msgid "motd: View the server's Message Of The Day" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1953 +#: ../libpurple/protocols/silc10/silc.c:1662 +msgid "detach: Detach this session" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1957 +#: ../libpurple/protocols/silc10/silc.c:1666 +msgid "quit [message]: Disconnect from the server, with an optional message" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1961 +#: ../libpurple/protocols/silc10/silc.c:1670 +msgid "call <command>: Call any silc client command" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1967 +#: ../libpurple/protocols/silc10/silc.c:1676 +msgid "kill <nick> [-pubkey|<reason>]: Kill nick" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1971 +#: ../libpurple/protocols/silc10/silc.c:1680 +msgid "nick <newnick>: Change your nickname" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1975 +#: ../libpurple/protocols/silc10/silc.c:1684 +msgid "whowas <nick>: View nick's information" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1979 +#: ../libpurple/protocols/silc10/silc.c:1688 +msgid "" +"cmode <channel> [+|-<modes>] [arguments]: Change or display " +"channel modes" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1983 +#: ../libpurple/protocols/silc10/silc.c:1692 +msgid "" +"cumode <channel> +|-<modes> <nick>: Change nick's modes " +"on channel" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1987 +#: ../libpurple/protocols/silc10/silc.c:1696 +msgid "umode <usermodes>: Set your modes in the network" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1991 +#: ../libpurple/protocols/silc10/silc.c:1700 +msgid "oper <nick> [-pubkey]: Get server operator privileges" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1995 +#: ../libpurple/protocols/silc10/silc.c:1704 +msgid "" +"invite <channel> [-|+]<nick>: invite nick or add/remove from " +"channel invite list" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1999 +#: ../libpurple/protocols/silc10/silc.c:1708 +msgid "kick <channel> <nick> [comment]: Kick client from channel" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2003 +#: ../libpurple/protocols/silc10/silc.c:1712 +msgid "info [server]: View server administrative details" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2007 +#: ../libpurple/protocols/silc10/silc.c:1716 +msgid "ban [<channel> +|-<nick>]: Ban client from channel" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2011 +#: ../libpurple/protocols/silc10/silc.c:1720 +msgid "getkey <nick|server>: Retrieve client's or server's public key" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2015 +#: ../libpurple/protocols/silc10/silc.c:1724 +msgid "stats: View server and network statistics" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2019 +#: ../libpurple/protocols/silc10/silc.c:1728 +msgid "ping: Send PING to the connected server" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2024 +#: ../libpurple/protocols/silc10/silc.c:1733 +msgid "users <channel>: List users in channel" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2028 +#: ../libpurple/protocols/silc10/silc.c:1737 +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 +#: ../libpurple/protocols/silc/silc.c:2145 +#: ../libpurple/protocols/silc10/silc.c:1868 +msgid "SILC Protocol Plugin" +msgstr "" + +#. * description +#: ../libpurple/protocols/silc/silc.c:2147 +#: ../libpurple/protocols/silc10/silc.c:1870 +msgid "Secure Internet Live Conferencing (SILC) Protocol" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2188 +#: ../libpurple/protocols/silc10/silc.c:1902 ../pidgin/gtkprefs.c:2765 +msgid "Network" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2199 +#: ../libpurple/protocols/silc10/silc.c:1913 +msgid "Public Key file" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2203 +#: ../libpurple/protocols/silc10/silc.c:1917 +msgid "Private Key file" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2213 +#: ../libpurple/protocols/silc10/silc.c:1927 +msgid "Cipher" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2223 +#: ../libpurple/protocols/silc10/silc.c:1937 +msgid "HMAC" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2226 +msgid "Use Perfect Forward Secrecy" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2230 +#: ../libpurple/protocols/silc10/silc.c:1940 +msgid "Public key authentication" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2233 +#: ../libpurple/protocols/silc10/silc.c:1943 +msgid "Block IMs without Key Exchange" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2236 +#: ../libpurple/protocols/silc10/silc.c:1946 +msgid "Block messages to whiteboard" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2239 +#: ../libpurple/protocols/silc10/silc.c:1949 +msgid "Automatically open whiteboard" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2242 +#: ../libpurple/protocols/silc10/silc.c:1952 +msgid "Digitally sign and verify all messages" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:208 +#: ../libpurple/protocols/silc/util.c:251 +#: ../libpurple/protocols/silc10/util.c:207 +#: ../libpurple/protocols/silc10/util.c:247 +msgid "Creating SILC key pair..." +msgstr "" + +#: ../libpurple/protocols/silc/util.c:217 +#: ../libpurple/protocols/silc/util.c:260 +msgid "Unable to create SILC key pair" +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) +#: ../libpurple/protocols/silc/util.c:364 +#: ../libpurple/protocols/silc10/util.c:355 +#, c-format +msgid "Real Name: \t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:366 +#: ../libpurple/protocols/silc10/util.c:357 +#, c-format +msgid "User Name: \t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:368 +#: ../libpurple/protocols/silc10/util.c:359 +#, c-format +msgid "Email: \t\t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:370 +#: ../libpurple/protocols/silc10/util.c:361 +#, c-format +msgid "Host Name: \t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:372 +#: ../libpurple/protocols/silc10/util.c:363 +#, c-format +msgid "Organization: \t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:374 +#: ../libpurple/protocols/silc10/util.c:365 +#, c-format +msgid "Country: \t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:375 +#: ../libpurple/protocols/silc10/util.c:366 +#, c-format +msgid "Algorithm: \t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:376 +#: ../libpurple/protocols/silc10/util.c:367 +#, c-format +msgid "Key Length: \t%d bits\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:378 +#, c-format +msgid "Version: \t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:380 +#: ../libpurple/protocols/silc10/util.c:369 +#, c-format +msgid "" +"Public Key Fingerprint:\n" +"%s\n" +"\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:381 +#: ../libpurple/protocols/silc10/util.c:370 +#, c-format +msgid "" +"Public Key Babbleprint:\n" +"%s" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:383 +#: ../libpurple/protocols/silc/util.c:384 +#: ../libpurple/protocols/silc10/util.c:374 +#: ../libpurple/protocols/silc10/util.c:375 +msgid "Public Key Information" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:566 +#: ../libpurple/protocols/silc10/util.c:559 +msgid "Paging" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:572 +#: ../libpurple/protocols/silc10/util.c:565 +msgid "Video Conferencing" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:590 +#: ../libpurple/protocols/silc10/util.c:584 +msgid "Computer" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:594 +#: ../libpurple/protocols/silc10/util.c:588 +msgid "PDA" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:596 +#: ../libpurple/protocols/silc10/util.c:590 +msgid "Terminal" +msgstr "" + +#: ../libpurple/protocols/silc/wb.c:289 ../libpurple/protocols/silc10/wb.c:287 +#, c-format +msgid "%s sent message to whiteboard. Would you like to open the whiteboard?" +msgstr "" + +#: ../libpurple/protocols/silc/wb.c:293 ../libpurple/protocols/silc10/wb.c:291 +#, c-format +msgid "" +"%s sent message to whiteboard on %s channel. Would you like to open the " +"whiteboard?" +msgstr "" + +#: ../libpurple/protocols/silc/wb.c:307 ../libpurple/protocols/silc10/wb.c:305 +msgid "Whiteboard" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1559 +msgid "No server statistics available" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1701 +msgid "Error during connecting to SILC Server" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1937 +#, c-format +msgid "Failure: Version mismatch, upgrade your client" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1940 +#, c-format +msgid "Failure: Remote does not trust/support your public key" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1943 +#, c-format +msgid "Failure: Remote does not support proposed KE group" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1946 +#, c-format +msgid "Failure: Remote does not support proposed cipher" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1949 +#, c-format +msgid "Failure: Remote does not support proposed PKCS" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1952 +#, c-format +msgid "Failure: Remote does not support proposed hash function" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1955 +#, c-format +msgid "Failure: Remote does not support proposed HMAC" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1957 +#, c-format +msgid "Failure: Incorrect signature" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1959 +#, c-format +msgid "Failure: Invalid cookie" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1970 +#, c-format +msgid "Failure: Authentication failed" +msgstr "" + +#: ../libpurple/protocols/silc10/silc.c:186 +msgid "Unable to initialize SILC Client connection" +msgstr "" + +#: ../libpurple/protocols/silc10/silc.c:295 +msgid "John Noname" +msgstr "" + +#: ../libpurple/protocols/silc10/silc.c:339 +#, c-format +msgid "Unable to load SILC key pair: %s" +msgstr "" + +#: ../libpurple/protocols/silc10/silc.c:362 +msgid "Unable to create connection" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:1142 +msgid "Unknown server response" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:1780 +#: ../libpurple/protocols/simple/simple.c:1830 +#: ../libpurple/protocols/simple/simple.c:1845 +#: ../libpurple/protocols/simple/simple.c:1900 +msgid "Unable to create listen socket" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:1809 +#: ../libpurple/protocols/simple/simple.c:1911 ../libpurple/proxy.c:2240 +msgid "Unable to resolve hostname" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:1929 +msgid "SIP usernames may not contain whitespaces or @ symbols" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:1948 +msgid "SIP connect server not specified" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#: ../libpurple/protocols/simple/simple.c:2138 +msgid "SIP/SIMPLE Protocol Plugin" +msgstr "" + +#. * summary +#: ../libpurple/protocols/simple/simple.c:2139 +msgid "The SIP/SIMPLE Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:2167 +msgid "Publish status (note: everyone may watch you)" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:2173 +msgid "Use UDP" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:2175 +msgid "Use proxy" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:2177 ../pidgin/gtkprefs.c:2766 +msgid "Proxy" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:2179 +msgid "Auth User" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:2181 +msgid "Auth Domain" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:44 +#: ../libpurple/protocols/yahoo/libyahoojp.c:41 +msgid "join <room>: Join a chat room on the Yahoo network" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:49 +#: ../libpurple/protocols/yahoo/libyahoojp.c:46 +msgid "list: List rooms on the Yahoo network" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:57 +#: ../libpurple/protocols/yahoo/libyahoojp.c:54 +msgid "doodle: Request user to start a Doodle session" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:166 +msgid "Yahoo ID..." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/yahoo/libyahoo.c:289 +#: ../libpurple/protocols/yahoo/libyahoo.c:291 +msgid "Yahoo! Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:314 +#: ../libpurple/protocols/yahoo/libyahoojp.c:210 +msgid "Pager port" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:317 +#: ../libpurple/protocols/yahoo/libyahoojp.c:213 +msgid "File transfer server" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:320 +#: ../libpurple/protocols/yahoo/libyahoojp.c:216 +msgid "File transfer port" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:323 +#: ../libpurple/protocols/yahoo/libyahoojp.c:219 +msgid "Chat room locale" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:329 +#: ../libpurple/protocols/yahoo/libyahoojp.c:225 +msgid "Ignore conference and chatroom invitations" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:332 +#: ../libpurple/protocols/yahoo/libyahoojp.c:228 +msgid "Use account proxy for HTTP and HTTPS connections" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:336 +#: ../libpurple/protocols/yahoo/libyahoojp.c:232 +msgid "Chat room list URL" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoojp.c:62 +msgid "Yahoo JAPAN ID..." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/yahoo/libyahoojp.c:185 +#: ../libpurple/protocols/yahoo/libyahoojp.c:187 +msgid "Yahoo! JAPAN Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:928 +#, c-format +msgid "%s has sent you a webcam invite, which is not yet supported." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:1004 +msgid "Your SMS was not delivered" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:1150 +msgid "Your Yahoo! message did not get sent." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:1266 +#, c-format +msgid "Yahoo! system message for %s:" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:1366 +msgid "Authorization denied message:" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:1384 +#, c-format +msgid "" +"%s has (retroactively) denied your request to add them to your list for the " +"following reason: %s." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:1387 +#, c-format +msgid "%s has (retroactively) denied your request to add them to your list." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:1389 +msgid "Add buddy rejected" +msgstr "" + +#. Some error in the received stream +#: ../libpurple/protocols/yahoo/libymsg.c:2017 +#: ../libpurple/protocols/yahoo/libymsg.c:2100 +msgid "Received invalid data" +msgstr "" + +#. security lock from too many failed login attempts +#: ../libpurple/protocols/yahoo/libymsg.c:2113 +msgid "" +"Account locked: Too many failed login attempts. Logging into the Yahoo! " +"website may fix this." +msgstr "" + +#. indicates a lock of some description +#: ../libpurple/protocols/yahoo/libymsg.c:2124 +msgid "" +"Account locked: Unknown reason. Logging into the Yahoo! website may fix " +"this." +msgstr "" + +#. indicates a lock due to logging in too frequently +#: ../libpurple/protocols/yahoo/libymsg.c:2130 +msgid "" +"Account locked: You have been logging in too frequently. Wait a few minutes" +" before trying to connect again. Logging into the Yahoo! website may help." +msgstr "" + +#. username or password missing +#: ../libpurple/protocols/yahoo/libymsg.c:2137 +msgid "Username or password missing" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2256 +#, 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 "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2260 +msgid "Failed Yahoo! Authentication" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2351 +#, 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 "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2354 +msgid "Ignore buddy?" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2432 +msgid "Invalid username or password" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2436 +msgid "" +"Your account has been locked due to too many failed login attempts. Please " +"try logging into the Yahoo! website." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2443 +msgid "Unknown error 52. Reconnecting should fix this." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2447 +msgid "" +"Error 1013: The username you have entered is invalid. The most common cause" +" of this error is entering your email address instead of your Yahoo! ID." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2453 +#, c-format +msgid "Unknown error number %d. Logging into the Yahoo! website may fix this." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2547 +#, c-format +msgid "Unable to add buddy %s to group %s to the server list on account %s." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2550 +msgid "Unable to add buddy to server list" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:3207 +#, c-format +msgid "[ Audible %s/%s/%s.swf ] %s" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:3553 +msgid "Received unexpected HTTP response from server" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:3609 +#, c-format +msgid "Lost connection with %s: %s" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:3634 +#, c-format +msgid "Unable to establish a connection with %s: %s" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:3851 +msgid "Unable to connect: The server returned an empty response." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:3885 +msgid "" +"Unable to connect: The server's response did not contain the necessary " +"information" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4086 +#: ../libpurple/protocols/yahoo/libymsg.c:5117 +msgid "Not at Home" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4088 +#: ../libpurple/protocols/yahoo/libymsg.c:5120 +msgid "Not at Desk" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4090 +#: ../libpurple/protocols/yahoo/libymsg.c:5123 +msgid "Not in Office" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4094 +#: ../libpurple/protocols/yahoo/libymsg.c:5129 +msgid "On Vacation" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4098 +#: ../libpurple/protocols/yahoo/libymsg.c:5135 +msgid "Stepped Out" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4196 +#: ../libpurple/protocols/yahoo/libymsg.c:4227 +msgid "Not on server list" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4247 +#: ../libpurple/protocols/yahoo/libymsg.c:4341 +msgid "Appear Permanently Offline" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4263 +msgid "Presence" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4335 +msgid "Don't Appear Permanently Offline" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4394 +msgid "Join in Chat" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4400 +msgid "Initiate Conference" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4428 +msgid "Presence Settings" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4433 +msgid "Start Doodling" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4572 +msgid "Select the ID you want to activate" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4583 +msgid "Join whom in chat?" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4599 +msgid "Activate ID..." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4603 +msgid "Join User in Chat..." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4608 +msgid "Open Inbox" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4635 +#: ../libpurple/protocols/yahoo/libymsg.c:4732 +msgid "Can't send SMS. Unable to obtain mobile carrier." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4665 +#: ../libpurple/protocols/yahoo/libymsg.c:4796 +msgid "Can't send SMS. Unknown mobile carrier." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4787 +msgid "Getting mobile carrier to send the SMS." +msgstr "" + +#. Write a local message to this conversation showing that a request for a +#. * Doodle session has been made +#: ../libpurple/protocols/yahoo/yahoo_doodle.c:97 +msgid "Sent Doodle request." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:167 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:247 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1313 +msgid "Unable to connect." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:328 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:337 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:346 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1217 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1978 +msgid "Unable to establish file descriptor." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1863 +#, c-format +msgid "%s is trying to send you a group of %d files.\n" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_packet.c:306 +msgid "Write Error" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:797 +msgid "Yahoo! Japan Profile" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:798 +msgid "Yahoo! Profile" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:838 +msgid "" +"Sorry, profiles marked as containing adult content are not supported at this" +" time." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:840 +msgid "" +"If you wish to view this profile, you will need to visit this link in your " +"web browser:" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1032 +msgid "Yahoo! ID" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1108 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1112 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1116 +msgid "Hobbies" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1126 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1130 +msgid "Latest News" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1151 +msgid "Home Page" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1166 +msgid "Cool Link 1" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1171 +msgid "Cool Link 2" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1175 +msgid "Cool Link 3" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1189 +msgid "Last Update" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1202 +msgid "" +"This profile is in a language or format that is not supported at this time." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1219 +msgid "" +"Could not retrieve the user's profile. This most likely is a temporary " +"server-side problem. Please try again later." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1222 +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 "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1228 +msgid "The user's profile is empty." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:269 +#, c-format +msgid "%s has declined to join." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:507 +msgid "Failed to join chat" +msgstr "" + +#. -6 +#: ../libpurple/protocols/yahoo/yahoochat.c:510 +msgid "Unknown room" +msgstr "" + +#. -15 +#: ../libpurple/protocols/yahoo/yahoochat.c:513 +msgid "Maybe the room is full" +msgstr "" + +#. -35 +#: ../libpurple/protocols/yahoo/yahoochat.c:516 +msgid "Not available" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:520 +msgid "" +"Unknown error. You may need to logout and wait five minutes before being " +"able to rejoin a chatroom" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:628 +#, c-format +msgid "You are now chatting in %s." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:834 +msgid "Failed to join buddy in chat" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:835 +msgid "Maybe they're not in a chat?" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:1530 +#: ../libpurple/protocols/yahoo/yahoochat.c:1556 +msgid "Fetching the room list failed." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:1616 +msgid "Voices" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:1619 +msgid "Webcams" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:1630 +#: ../libpurple/protocols/yahoo/yahoochat.c:1701 +msgid "Connection problem" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:1630 +#: ../libpurple/protocols/yahoo/yahoochat.c:1701 +msgid "Unable to fetch room list." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:1693 +msgid "User Rooms" +msgstr "" + +#: ../libpurple/protocols/yahoo/ycht.c:457 +msgid "Connection problem with the YCHT server" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:357 +msgid "" +"(There was an error converting this message.\t Check the 'Encoding' option " +"in the Account Editor)" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:755 +#, c-format +msgid "Unable to send to chat %s,%s,%s" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:800 +#: ../libpurple/protocols/zephyr/zephyr.c:1184 +msgid "Hidden or not logged-in" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:806 +#: ../libpurple/protocols/zephyr/zephyr.c:1186 +#, c-format +msgid "<br>At %s since %s" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:1509 +#: ../libpurple/protocols/zephyr/zephyr.c:1510 +msgid "Anyone" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2365 +msgid "_Class:" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2371 +msgid "_Instance:" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2377 +msgid "_Recipient:" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2388 +#, c-format +msgid "Attempt to subscribe to %s,%s,%s failed" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2706 +msgid "zlocate <nick>: Locate user" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2711 +msgid "zl <nick>: Locate user" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2716 +msgid "instance <instance>: Set the instance to be used on this class" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2721 +msgid "inst <instance>: Set the instance to be used on this class" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2726 +msgid "topic <instance>: Set the instance to be used on this class" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2732 +msgid "sub <class> <instance> <recipient>: Join a new chat" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2737 +msgid "" +"zi <instance>: Send a message to <message,<i>instance</i>,*>" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2743 +msgid "" +"zci <class> <instance>: Send a message to " +"<<i>class</i>,<i>instance</i>,*>" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2749 +msgid "" +"zcir <class> <instance> <recipient>: Send a message to " +"<<i>class</i>,<i>instance</i>,<i>recipient</i>>" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2755 +msgid "" +"zir <instance> <recipient>: Send a message to " +"<MESSAGE,<i>instance</i>,<i>recipient</i>>" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2760 +msgid "zc <class>: Send a message to <<i>class</i>,PERSONAL,*>" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2836 +msgid "Resubscribe" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2839 +msgid "Retrieve subscriptions from server" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/zephyr/zephyr.c:2939 +#: ../libpurple/protocols/zephyr/zephyr.c:2941 +msgid "Zephyr Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2966 +msgid "Use tzc" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2969 +msgid "tzc command" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2972 +msgid "Export to .anyone" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2975 +msgid "Export to .zephyr.subs" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2978 +msgid "Import from .anyone" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2981 +msgid "Import from .zephyr.subs" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2984 +msgid "Realm" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2987 +msgid "Exposure" +msgstr "" + +#: ../libpurple/proxy.c:754 ../libpurple/proxy.c:816 ../libpurple/proxy.c:1269 +#: ../libpurple/proxy.c:1463 ../libpurple/proxy.c:2123 +#, c-format +msgid "Unable to create socket: %s" +msgstr "" + +#: ../libpurple/proxy.c:1002 ../libpurple/proxy.c:1023 +#, c-format +msgid "Unable to parse response from HTTP proxy: %s" +msgstr "" + +#: ../libpurple/proxy.c:1056 ../libpurple/proxy.c:1118 +#: ../libpurple/proxy.c:1147 +#, c-format +msgid "HTTP proxy connection error %d" +msgstr "" + +#: ../libpurple/proxy.c:1143 +#, c-format +msgid "Access denied: HTTP proxy server forbids port %d tunneling" +msgstr "" + +#: ../libpurple/proxy.c:1343 +#, c-format +msgid "Error resolving %s" +msgstr "" + +#: ../libpurple/prpl.c:454 +#, c-format +msgid "Requesting %s's attention..." +msgstr "" + +#: ../libpurple/prpl.c:500 +#, c-format +msgid "%s has requested your attention!" +msgstr "" + +#. * +#. * A wrapper for purple_request_action() that uses @c Yes and @c No buttons. +#: ../libpurple/request.h:1488 ../pidgin/gtkblist.c:563 +msgid "_Yes" +msgstr "" + +#: ../libpurple/request.h:1488 ../pidgin/gtkblist.c:563 +msgid "_No" +msgstr "" + +#. * +#. * A wrapper for purple_request_action() that uses Accept and Cancel +#. buttons. +#. * +#. * A wrapper for purple_request_action_with_icon() that uses Accept and +#. Cancel +#. * buttons. +#: ../libpurple/request.h:1508 ../libpurple/request.h:1521 +msgid "_Accept" +msgstr "" + +#. * +#. * The default message to use when the user becomes auto-away. +#: ../libpurple/savedstatuses.c:48 +msgid "I'm not here right now" +msgstr "" + +#: ../libpurple/savedstatuses.c:537 +msgid "saved statuses" +msgstr "" + +#: ../libpurple/server.c:265 +#, c-format +msgid "%s is now known as %s.\n" +msgstr "" + +#: ../libpurple/server.c:821 +#, c-format +msgid "" +"%s has invited %s to the chat room %s:\n" +"%s" +msgstr "" + +#: ../libpurple/server.c:826 +#, c-format +msgid "%s has invited %s to the chat room %s\n" +msgstr "" + +#: ../libpurple/server.c:830 +msgid "Accept chat invitation?" +msgstr "" + +#. Shortcut +#: ../libpurple/smiley.c:406 +msgid "Shortcut" +msgstr "" + +#: ../libpurple/smiley.c:407 +msgid "The text-shortcut for the smiley" +msgstr "" + +#. Stored Image +#: ../libpurple/smiley.c:413 +msgid "Stored Image" +msgstr "" + +#: ../libpurple/smiley.c:414 +msgid "Stored Image. (that'll have to do for now)" +msgstr "" + +#: ../libpurple/sslconn.c:176 +msgid "SSL Connection Failed" +msgstr "" + +#: ../libpurple/sslconn.c:178 +msgid "SSL Handshake Failed" +msgstr "" + +#: ../libpurple/sslconn.c:180 +msgid "SSL peer presented an invalid certificate" +msgstr "" + +#: ../libpurple/sslconn.c:183 +msgid "Unknown SSL error" +msgstr "" + +#: ../libpurple/status.c:161 +msgid "Unset" +msgstr "" + +#: ../libpurple/status.c:164 ../pidgin/gtkdocklet.c:556 +#: ../pidgin/gtkstatusbox.c:1098 +msgid "Do not disturb" +msgstr "" + +#: ../libpurple/status.c:167 +msgid "Extended away" +msgstr "" + +#: ../libpurple/status.c:170 +msgid "Feeling" +msgstr "" + +#: ../libpurple/status.c:619 +#, c-format +msgid "%s (%s) changed status from %s to %s" +msgstr "" + +#: ../libpurple/status.c:631 +#, c-format +msgid "%s (%s) is now %s" +msgstr "" + +#: ../libpurple/status.c:638 +#, c-format +msgid "%s (%s) is no longer %s" +msgstr "" + +#: ../libpurple/status.c:1265 +#, c-format +msgid "%s became idle" +msgstr "" + +#: ../libpurple/status.c:1285 +#, c-format +msgid "%s became unidle" +msgstr "" + +#: ../libpurple/status.c:1351 +#, c-format +msgid "+++ %s became idle" +msgstr "" + +#: ../libpurple/status.c:1353 +#, 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. +#: ../libpurple/util.c:643 +#, c-format +msgid "%x %X" +msgstr "" + +#: ../libpurple/util.c:3294 +msgid "Calculating..." +msgstr "" + +#: ../libpurple/util.c:3297 +msgid "Unknown." +msgstr "" + +#: ../libpurple/util.c:3323 +#, c-format +msgid "%d second" +msgid_plural "%d seconds" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../libpurple/util.c:3335 +#, c-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../libpurple/util.c:3343 +#, c-format +msgid "%s, %d hour" +msgid_plural "%s, %d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../libpurple/util.c:3349 +#, c-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../libpurple/util.c:3357 +#, c-format +msgid "%s, %d minute" +msgid_plural "%s, %d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../libpurple/util.c:3363 +#, c-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../libpurple/util.c:3644 +#, c-format +msgid "Could not open %s: Redirected too many times" +msgstr "" + +#: ../libpurple/util.c:3694 ../libpurple/util.c:4228 +#, c-format +msgid "Unable to connect to %s" +msgstr "" + +#: ../libpurple/util.c:3834 +#, c-format +msgid "Error reading from %s: response too long (%d bytes limit)" +msgstr "" + +#: ../libpurple/util.c:3901 ../libpurple/util.c:3921 +#, c-format +msgid "" +"Unable to allocate enough memory to hold the contents from %s. The web " +"server may be trying something malicious." +msgstr "" + +#: ../libpurple/util.c:3955 +#, c-format +msgid "Error reading from %s: %s" +msgstr "" + +#: ../libpurple/util.c:4079 +#, c-format +msgid "Error writing to %s: %s" +msgstr "" + +#: ../libpurple/util.c:4110 ../libpurple/util.c:4140 ../libpurple/util.c:4210 +#, c-format +msgid "Unable to connect to %s: %s" +msgstr "" + +#: ../libpurple/util.c:5085 +#, c-format +msgid " - %s" +msgstr "" + +#: ../libpurple/util.c:5091 +#, c-format +msgid " (%s)" +msgstr "" + +#. 10053 +#: ../libpurple/win32/libc_interface.c:364 +msgid "Connection interrupted by other software on your computer." +msgstr "" + +#. 10054 +#: ../libpurple/win32/libc_interface.c:367 +msgid "Remote host closed connection." +msgstr "" + +#. 10060 +#: ../libpurple/win32/libc_interface.c:370 +msgid "Connection timed out." +msgstr "" + +#. 10061 +#: ../libpurple/win32/libc_interface.c:373 +msgid "Connection refused." +msgstr "" + +#. 10048 +#: ../libpurple/win32/libc_interface.c:376 +msgid "Address already in use." +msgstr "" + +#: ../libpurple/xmlnode.c:793 +#, c-format +msgid "Error Reading %s" +msgstr "" + +#: ../libpurple/xmlnode.c:794 +#, 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 "" + +#: ../pidgin.desktop.in.h:1 +msgid "" +"Chat over IM. Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more" +msgstr "" + +#: ../pidgin.desktop.in.h:2 +msgid "Internet Messenger" +msgstr "" + +#: ../pidgin.desktop.in.h:3 +msgid "Pidgin Internet Messenger" +msgstr "" + +#. Build the login options frame. +#: ../pidgin/gtkaccount.c:448 +msgid "Login Options" +msgstr "" + +#: ../pidgin/gtkaccount.c:473 +msgid "Pro_tocol:" +msgstr "" + +#: ../pidgin/gtkaccount.c:486 ../pidgin/gtkaccount.c:1129 +msgid "_Username:" +msgstr "" + +#: ../pidgin/gtkaccount.c:599 +msgid "Remember pass_word" +msgstr "" + +#. Build the user options frame. +#: ../pidgin/gtkaccount.c:654 +msgid "User Options" +msgstr "" + +#: ../pidgin/gtkaccount.c:667 +msgid "_Local alias:" +msgstr "" + +#: ../pidgin/gtkaccount.c:671 +msgid "New _mail notifications" +msgstr "" + +#. Buddy icon +#: ../pidgin/gtkaccount.c:676 +msgid "Use this buddy _icon for this account:" +msgstr "" + +#: ../pidgin/gtkaccount.c:808 +msgid "Ad_vanced" +msgstr "" + +#: ../pidgin/gtkaccount.c:993 +msgid "Use GNOME Proxy Settings" +msgstr "" + +#: ../pidgin/gtkaccount.c:994 +msgid "Use Global Proxy Settings" +msgstr "" + +#: ../pidgin/gtkaccount.c:1000 +msgid "No Proxy" +msgstr "" + +#: ../pidgin/gtkaccount.c:1006 ../pidgin/gtkprefs.c:2085 +msgid "SOCKS 4" +msgstr "" + +#: ../pidgin/gtkaccount.c:1012 ../pidgin/gtkprefs.c:2086 +msgid "SOCKS 5" +msgstr "" + +#: ../pidgin/gtkaccount.c:1018 ../pidgin/gtkprefs.c:2087 +msgid "Tor/Privacy (SOCKS5)" +msgstr "" + +#: ../pidgin/gtkaccount.c:1024 ../pidgin/gtkprefs.c:2088 +msgid "HTTP" +msgstr "" + +#: ../pidgin/gtkaccount.c:1030 ../pidgin/gtkprefs.c:2089 +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. +#: ../pidgin/gtkaccount.c:1075 +msgid "If you look real closely" +msgstr "" + +#. This is an easter egg. See the comment on the previous line in the source. +#: ../pidgin/gtkaccount.c:1078 +msgid "you can see the butterflies mating" +msgstr "" + +#: ../pidgin/gtkaccount.c:1108 +msgid "Proxy _type:" +msgstr "" + +#: ../pidgin/gtkaccount.c:1117 ../pidgin/gtkprefs.c:2105 +msgid "_Host:" +msgstr "" + +#: ../pidgin/gtkaccount.c:1121 +msgid "_Port:" +msgstr "" + +#: ../pidgin/gtkaccount.c:1138 ../pidgin/gtkprefs.c:2157 +msgid "Pa_ssword:" +msgstr "" + +#: ../pidgin/gtkaccount.c:1207 +msgid "Use _silence suppression" +msgstr "" + +#: ../pidgin/gtkaccount.c:1212 +msgid "_Voice and Video" +msgstr "" + +#: ../pidgin/gtkaccount.c:1301 +msgid "Unable to save new account" +msgstr "" + +#: ../pidgin/gtkaccount.c:1302 +msgid "An account already exists with the specified criteria." +msgstr "" + +#: ../pidgin/gtkaccount.c:1576 +msgid "Add Account" +msgstr "" + +#: ../pidgin/gtkaccount.c:1593 +msgid "_Basic" +msgstr "" + +#: ../pidgin/gtkaccount.c:1601 +msgid "Create _this new account on the server" +msgstr "" + +#: ../pidgin/gtkaccount.c:1618 +msgid "P_roxy" +msgstr "" + +#: ../pidgin/gtkaccount.c:2010 ../pidgin/gtkplugin.c:752 +#: ../pidgin/plugins/convcolors.c:343 +msgid "Enabled" +msgstr "" + +#: ../pidgin/gtkaccount.c:2038 +msgid "Protocol" +msgstr "" + +#: ../pidgin/gtkaccount.c:2225 +#, c-format +msgid "" +"<span size='larger' weight='bold'>Welcome to %s!</span>\n" +"\n" +"You have no IM accounts configured. To start connecting with %s press the <b>Add...</b> button below and configure your first account. If you want %s to connect to multiple IM accounts, press <b>Add...</b> again to configure them all.\n" +"\n" +"You can come back to this window to add, edit, or remove accounts from <b>Accounts->Manage Accounts</b> in the Buddy List window" +msgstr "" + +#: ../pidgin/gtkaccount.c:2575 +#, c-format +msgid "" +"<a href=\"viewinfo\">%s</a>%s%s%s wants to add you (%s) to his or her buddy " +"list%s%s" +msgstr "" + +#: ../pidgin/gtkaccount.c:2588 +#, c-format +msgid "%s%s%s%s wants to add you (%s) to his or her buddy list%s%s" +msgstr "" + +#: ../pidgin/gtkaccount.c:2622 +msgid "Send Instant Message" +msgstr "" + +#. Buddy List +#: ../pidgin/gtkblist-theme.c:370 ../pidgin/gtkimhtmltoolbar.c:1234 +msgid "Background Color" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:371 +msgid "The background color for the buddy list" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:375 +msgid "Layout" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:376 +msgid "The layout of icons, name, and status of the buddy list" +msgstr "" + +#. Group +#. Note to translators: These two strings refer to the background color +#. of a buddy list group when in its expanded state +#: ../pidgin/gtkblist-theme.c:384 +msgid "Expanded Background Color" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:385 +msgid "The background color of an expanded group" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list group when in its expanded state +#: ../pidgin/gtkblist-theme.c:391 +msgid "Expanded Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:392 +msgid "The text information for when a group is expanded" +msgstr "" + +#. Note to translators: These two strings refer to the background color +#. of a buddy list group when in its collapsed state +#: ../pidgin/gtkblist-theme.c:398 +msgid "Collapsed Background Color" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:399 +msgid "The background color of a collapsed group" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list group when in its collapsed state +#: ../pidgin/gtkblist-theme.c:405 +msgid "Collapsed Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:406 +msgid "The text information for when a group is collapsed" +msgstr "" + +#. Buddy +#. Note to translators: These two strings refer to the background color +#. of a buddy list contact or chat room +#: ../pidgin/gtkblist-theme.c:413 +msgid "Contact/Chat Background Color" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:414 +msgid "The background color of a contact or chat" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list contact when in its expanded state +#: ../pidgin/gtkblist-theme.c:420 +msgid "Contact Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:421 +msgid "The text information for when a contact is expanded" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list buddy when it is online +#: ../pidgin/gtkblist-theme.c:427 +msgid "Online Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:428 +msgid "The text information for when a buddy is online" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list buddy when it is away +#: ../pidgin/gtkblist-theme.c:434 +msgid "Away Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:435 +msgid "The text information for when a buddy is away" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list buddy when it is offline +#: ../pidgin/gtkblist-theme.c:441 +msgid "Offline Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:442 +msgid "The text information for when a buddy is offline" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list buddy when it is idle +#: ../pidgin/gtkblist-theme.c:448 +msgid "Idle Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:449 +msgid "The text information for when a buddy is idle" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list buddy when they have sent you a new message +#: ../pidgin/gtkblist-theme.c:455 +msgid "Message Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:456 +msgid "The text information for when a buddy has an unread message" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list buddy when they have sent you a new message +#: ../pidgin/gtkblist-theme.c:462 +msgid "Message (Nick Said) Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:463 +msgid "" +"The text information for when a chat has an unread message that mentions " +"your nickname" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:468 +msgid "The text information for a buddy's status" +msgstr "" + +#: ../pidgin/gtkblist.c:560 +#, 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] "" +msgstr[2] "" + +#: ../pidgin/gtkblist.c:561 +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 "" + +#: ../pidgin/gtkblist.c:704 +msgid "Please update the necessary fields." +msgstr "" + +#: ../pidgin/gtkblist.c:1016 +msgid "A_ccount" +msgstr "" + +#: ../pidgin/gtkblist.c:1137 +msgid "" +"Please enter the appropriate information about the chat you would like to " +"join.\n" +msgstr "" + +#: ../pidgin/gtkblist.c:1142 +msgid "Room _List" +msgstr "" + +#: ../pidgin/gtkblist.c:1404 ../pidgin/gtkprivacy.c:537 +#: ../pidgin/gtkprivacy.c:551 +msgid "_Block" +msgstr "" + +#: ../pidgin/gtkblist.c:1404 +msgid "Un_block" +msgstr "" + +#: ../pidgin/gtkblist.c:1447 +msgid "Move to" +msgstr "" + +#: ../pidgin/gtkblist.c:1491 +msgid "Get _Info" +msgstr "" + +#: ../pidgin/gtkblist.c:1494 ../pidgin/pidginstock.c:86 +msgid "I_M" +msgstr "" + +#: ../pidgin/gtkblist.c:1503 +msgid "_Audio Call" +msgstr "" + +#: ../pidgin/gtkblist.c:1508 +msgid "Audio/_Video Call" +msgstr "" + +#: ../pidgin/gtkblist.c:1512 +msgid "_Video Call" +msgstr "" + +#: ../pidgin/gtkblist.c:1524 +msgid "_Send File..." +msgstr "" + +#: ../pidgin/gtkblist.c:1531 +msgid "Add Buddy _Pounce..." +msgstr "" + +#: ../pidgin/gtkblist.c:1536 ../pidgin/gtkblist.c:1540 +#: ../pidgin/gtkblist.c:1753 ../pidgin/gtkblist.c:1780 +msgid "View _Log" +msgstr "" + +#: ../pidgin/gtkblist.c:1546 ../pidgin/gtkblist.c:1726 +msgid "Hide When Offline" +msgstr "" + +#: ../pidgin/gtkblist.c:1546 ../pidgin/gtkblist.c:1726 +msgid "Show When Offline" +msgstr "" + +#: ../pidgin/gtkblist.c:1560 ../pidgin/gtkblist.c:1569 +#: ../pidgin/gtkblist.c:1763 ../pidgin/gtkblist.c:1786 +msgid "_Alias..." +msgstr "" + +#: ../pidgin/gtkblist.c:1563 ../pidgin/gtkblist.c:1571 +#: ../pidgin/gtkblist.c:1765 ../pidgin/gtkblist.c:1788 +msgid "_Remove" +msgstr "" + +#: ../pidgin/gtkblist.c:1696 +msgid "Set Custom Icon" +msgstr "" + +#: ../pidgin/gtkblist.c:1700 ../pidgin/gtkconv.c:2929 +msgid "Remove Custom Icon" +msgstr "" + +#: ../pidgin/gtkblist.c:1714 +msgid "Add _Buddy..." +msgstr "" + +#: ../pidgin/gtkblist.c:1717 +msgid "Add C_hat..." +msgstr "" + +#: ../pidgin/gtkblist.c:1720 +msgid "_Delete Group" +msgstr "" + +#: ../pidgin/gtkblist.c:1722 +msgid "_Rename" +msgstr "" + +#. join button +#: ../pidgin/gtkblist.c:1747 ../pidgin/gtkroomlist.c:323 +#: ../pidgin/gtkroomlist.c:588 ../pidgin/pidginstock.c:84 +msgid "_Join" +msgstr "" + +#: ../pidgin/gtkblist.c:1749 +msgid "Auto-Join" +msgstr "" + +#: ../pidgin/gtkblist.c:1751 +msgid "Persistent" +msgstr "" + +#: ../pidgin/gtkblist.c:1761 +msgid "_Edit Settings..." +msgstr "" + +#: ../pidgin/gtkblist.c:1795 ../pidgin/gtkblist.c:1820 +msgid "_Collapse" +msgstr "" + +#: ../pidgin/gtkblist.c:1825 +msgid "_Expand" +msgstr "" + +#: ../pidgin/gtkblist.c:2072 ../pidgin/gtkblist.c:2084 +#: ../pidgin/gtkblist.c:6001 ../pidgin/gtkblist.c:6014 +msgid "/Tools/Mute Sounds" +msgstr "" + +#: ../pidgin/gtkblist.c:2530 ../pidgin/gtkconv.c:5190 +#: ../pidgin/gtkpounce.c:448 +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. +#: ../pidgin/gtkblist.c:2899 +msgid "Unknown node type" +msgstr "" + +#: ../pidgin/gtkblist.c:3540 +msgid "Please select your mood from the list" +msgstr "" + +#: ../pidgin/gtkblist.c:3574 +msgid "Message (optional)" +msgstr "" + +#: ../pidgin/gtkblist.c:3579 +msgid "Edit User Mood" +msgstr "" + +#. NOTE: Do not set any accelerator to Control+O. It is mapped by +#. gtk_blist_key_press_cb to "Get User Info" on the selected buddy. +#. Buddies menu +#: ../pidgin/gtkblist.c:3604 +msgid "/_Buddies" +msgstr "" + +#: ../pidgin/gtkblist.c:3605 +msgid "/Buddies/New Instant _Message..." +msgstr "" + +#: ../pidgin/gtkblist.c:3606 +msgid "/Buddies/Join a _Chat..." +msgstr "" + +#: ../pidgin/gtkblist.c:3607 +msgid "/Buddies/Get User _Info..." +msgstr "" + +#: ../pidgin/gtkblist.c:3608 +msgid "/Buddies/View User _Log..." +msgstr "" + +#: ../pidgin/gtkblist.c:3610 +msgid "/Buddies/Sh_ow" +msgstr "" + +#: ../pidgin/gtkblist.c:3611 +msgid "/Buddies/Show/_Offline Buddies" +msgstr "" + +#: ../pidgin/gtkblist.c:3612 +msgid "/Buddies/Show/_Empty Groups" +msgstr "" + +#: ../pidgin/gtkblist.c:3613 +msgid "/Buddies/Show/Buddy _Details" +msgstr "" + +#: ../pidgin/gtkblist.c:3614 +msgid "/Buddies/Show/Idle _Times" +msgstr "" + +#: ../pidgin/gtkblist.c:3615 +msgid "/Buddies/Show/_Protocol Icons" +msgstr "" + +#: ../pidgin/gtkblist.c:3616 +msgid "/Buddies/_Sort Buddies" +msgstr "" + +#: ../pidgin/gtkblist.c:3618 +msgid "/Buddies/_Add Buddy..." +msgstr "" + +#: ../pidgin/gtkblist.c:3619 +msgid "/Buddies/Add C_hat..." +msgstr "" + +#: ../pidgin/gtkblist.c:3620 +msgid "/Buddies/Add _Group..." +msgstr "" + +#: ../pidgin/gtkblist.c:3622 +msgid "/Buddies/_Quit" +msgstr "" + +#. Accounts menu +#: ../pidgin/gtkblist.c:3625 +msgid "/_Accounts" +msgstr "" + +#: ../pidgin/gtkblist.c:3626 ../pidgin/gtkblist.c:8008 +msgid "/Accounts/Manage Accounts" +msgstr "" + +#. Tools +#: ../pidgin/gtkblist.c:3629 +msgid "/_Tools" +msgstr "" + +#: ../pidgin/gtkblist.c:3630 +msgid "/Tools/Buddy _Pounces" +msgstr "" + +#: ../pidgin/gtkblist.c:3631 +msgid "/Tools/_Certificates" +msgstr "" + +#: ../pidgin/gtkblist.c:3632 +msgid "/Tools/Custom Smile_ys" +msgstr "" + +#: ../pidgin/gtkblist.c:3633 +msgid "/Tools/Plu_gins" +msgstr "" + +#: ../pidgin/gtkblist.c:3634 +msgid "/Tools/Pr_eferences" +msgstr "" + +#: ../pidgin/gtkblist.c:3635 +msgid "/Tools/Pr_ivacy" +msgstr "" + +#: ../pidgin/gtkblist.c:3636 +msgid "/Tools/Set _Mood" +msgstr "" + +#: ../pidgin/gtkblist.c:3638 +msgid "/Tools/_File Transfers" +msgstr "" + +#: ../pidgin/gtkblist.c:3639 +msgid "/Tools/R_oom List" +msgstr "" + +#: ../pidgin/gtkblist.c:3640 +msgid "/Tools/System _Log" +msgstr "" + +#: ../pidgin/gtkblist.c:3642 +msgid "/Tools/Mute _Sounds" +msgstr "" + +#. Help +#: ../pidgin/gtkblist.c:3644 +msgid "/_Help" +msgstr "" + +#: ../pidgin/gtkblist.c:3645 +msgid "/Help/Online _Help" +msgstr "" + +#: ../pidgin/gtkblist.c:3647 +msgid "/Help/_Build Information" +msgstr "" + +#: ../pidgin/gtkblist.c:3648 +msgid "/Help/_Debug Window" +msgstr "" + +#: ../pidgin/gtkblist.c:3649 +msgid "/Help/De_veloper Information" +msgstr "" + +#: ../pidgin/gtkblist.c:3650 +msgid "/Help/_Plugin Information" +msgstr "" + +#: ../pidgin/gtkblist.c:3651 +msgid "/Help/_Translator Information" +msgstr "" + +#: ../pidgin/gtkblist.c:3653 +msgid "/Help/_About" +msgstr "" + +#: ../pidgin/gtkblist.c:3685 +#, c-format +msgid "<b>Account:</b> %s" +msgstr "" + +#: ../pidgin/gtkblist.c:3704 +#, c-format +msgid "" +"\n" +"<b>Occupants:</b> %d" +msgstr "" + +#: ../pidgin/gtkblist.c:3710 +#, c-format +msgid "" +"\n" +"<b>Topic:</b> %s" +msgstr "" + +#: ../pidgin/gtkblist.c:3710 +msgid "(no topic set)" +msgstr "" + +#: ../pidgin/gtkblist.c:3791 +msgid "Buddy Alias" +msgstr "" + +#: ../pidgin/gtkblist.c:3820 +msgid "Logged In" +msgstr "" + +#: ../pidgin/gtkblist.c:3866 +msgid "Last Seen" +msgstr "" + +#: ../pidgin/gtkblist.c:3888 +msgid "Spooky" +msgstr "" + +#: ../pidgin/gtkblist.c:3890 +msgid "Awesome" +msgstr "" + +#: ../pidgin/gtkblist.c:3892 +msgid "Rockin'" +msgstr "" + +#: ../pidgin/gtkblist.c:3922 +msgid "Total Buddies" +msgstr "" + +#: ../pidgin/gtkblist.c:4279 +#, c-format +msgid "Idle %dd %dh %02dm" +msgstr "" + +#: ../pidgin/gtkblist.c:4281 +#, c-format +msgid "Idle %dh %02dm" +msgstr "" + +#: ../pidgin/gtkblist.c:4283 +#, c-format +msgid "Idle %dm" +msgstr "" + +#: ../pidgin/gtkblist.c:4472 +msgid "/Buddies/New Instant Message..." +msgstr "" + +#: ../pidgin/gtkblist.c:4473 ../pidgin/gtkblist.c:4506 +msgid "/Buddies/Join a Chat..." +msgstr "" + +#: ../pidgin/gtkblist.c:4474 +msgid "/Buddies/Get User Info..." +msgstr "" + +#: ../pidgin/gtkblist.c:4475 +msgid "/Buddies/Add Buddy..." +msgstr "" + +#: ../pidgin/gtkblist.c:4476 ../pidgin/gtkblist.c:4509 +msgid "/Buddies/Add Chat..." +msgstr "" + +#: ../pidgin/gtkblist.c:4477 +msgid "/Buddies/Add Group..." +msgstr "" + +#: ../pidgin/gtkblist.c:4512 +msgid "/Tools/Privacy" +msgstr "" + +#: ../pidgin/gtkblist.c:4515 +msgid "/Tools/Room List" +msgstr "" + +#: ../pidgin/gtkblist.c:4647 ../pidgin/gtkdocklet.c:158 +#: ../pidgin/gtkdocklet.c:163 +#, c-format +msgid "%d unread message from %s\n" +msgid_plural "%d unread messages from %s\n" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../pidgin/gtkblist.c:4817 +msgid "Manually" +msgstr "" + +#: ../pidgin/gtkblist.c:4819 +msgid "By status" +msgstr "" + +#: ../pidgin/gtkblist.c:4820 +msgid "By recent log activity" +msgstr "" + +#: ../pidgin/gtkblist.c:5118 +#, c-format +msgid "%s disconnected" +msgstr "" + +#: ../pidgin/gtkblist.c:5120 +#, c-format +msgid "%s disabled" +msgstr "" + +#: ../pidgin/gtkblist.c:5124 +msgid "Reconnect" +msgstr "" + +#: ../pidgin/gtkblist.c:5124 ../pidgin/gtkblist.c:5226 +msgid "Re-enable" +msgstr "" + +#: ../pidgin/gtkblist.c:5137 +msgid "SSL FAQs" +msgstr "" + +#: ../pidgin/gtkblist.c:5224 +msgid "Welcome back!" +msgstr "" + +#: ../pidgin/gtkblist.c:5260 +#, 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] "" +msgstr[2] "" + +#: ../pidgin/gtkblist.c:5534 +msgid "<b>Username:</b>" +msgstr "" + +#: ../pidgin/gtkblist.c:5541 +msgid "<b>Password:</b>" +msgstr "" + +#: ../pidgin/gtkblist.c:5552 +msgid "_Login" +msgstr "" + +#: ../pidgin/gtkblist.c:5806 +msgid "/Accounts" +msgstr "" + +#. Translators: Please maintain the use of -> and <- to refer to menu +#. heirarchy +#: ../pidgin/gtkblist.c:5820 +#, c-format +msgid "" +"<span weight='bold' size='larger'>Welcome to %s!</span>\n" +"\n" +"You have no accounts enabled. Enable your IM accounts from the <b>Accounts</b> window at <b>Accounts->Manage Accounts</b>. Once you enable accounts, you'll be able to sign on, set your status, and talk to your friends." +msgstr "" + +#. set the Show Offline Buddies option. must be done +#. * after the treeview or faceprint gets mad. -Robot101 +#: ../pidgin/gtkblist.c:5995 +msgid "/Buddies/Show/Offline Buddies" +msgstr "" + +#: ../pidgin/gtkblist.c:5998 +msgid "/Buddies/Show/Empty Groups" +msgstr "" + +#: ../pidgin/gtkblist.c:6004 +msgid "/Buddies/Show/Buddy Details" +msgstr "" + +#: ../pidgin/gtkblist.c:6007 +msgid "/Buddies/Show/Idle Times" +msgstr "" + +#: ../pidgin/gtkblist.c:6010 +msgid "/Buddies/Show/Protocol Icons" +msgstr "" + +#: ../pidgin/gtkblist.c:7084 +msgid "Add a buddy.\n" +msgstr "" + +#: ../pidgin/gtkblist.c:7099 +msgid "Buddy's _username:" +msgstr "" + +#: ../pidgin/gtkblist.c:7116 +msgid "(Optional) A_lias:" +msgstr "" + +#: ../pidgin/gtkblist.c:7127 +msgid "(Optional) _Invite message:" +msgstr "" + +#: ../pidgin/gtkblist.c:7132 +msgid "Add buddy to _group:" +msgstr "" + +#: ../pidgin/gtkblist.c:7237 +msgid "This protocol does not support chat rooms." +msgstr "" + +#: ../pidgin/gtkblist.c:7253 +msgid "" +"You are not currently signed on with any protocols that have the ability to " +"chat." +msgstr "" + +#: ../pidgin/gtkblist.c:7262 +msgid "" +"Please enter an alias, and the appropriate information about the chat you " +"would like to add to your buddy list.\n" +msgstr "" + +#: ../pidgin/gtkblist.c:7283 +msgid "A_lias:" +msgstr "" + +#: ../pidgin/gtkblist.c:7290 +msgid "_Group:" +msgstr "" + +#: ../pidgin/gtkblist.c:7294 +msgid "Auto_join when account connects." +msgstr "" + +#: ../pidgin/gtkblist.c:7295 +msgid "_Remain in chat after window is closed." +msgstr "" + +#: ../pidgin/gtkblist.c:7318 +msgid "Please enter the name of the group to be added." +msgstr "" + +#: ../pidgin/gtkblist.c:8022 +msgid "Enable Account" +msgstr "" + +#: ../pidgin/gtkblist.c:8027 +msgid "<PurpleMain>/Accounts/Enable Account" +msgstr "" + +#: ../pidgin/gtkblist.c:8081 +msgid "<PurpleMain>/Accounts/" +msgstr "" + +#: ../pidgin/gtkblist.c:8102 +msgid "_Edit Account" +msgstr "" + +#: ../pidgin/gtkblist.c:8120 +msgid "Set _Mood..." +msgstr "" + +#: ../pidgin/gtkblist.c:8130 ../pidgin/gtkconv.c:3345 +#: ../pidgin/gtkimhtml.c:1862 +msgid "No actions available" +msgstr "" + +#: ../pidgin/gtkblist.c:8137 +msgid "_Disable" +msgstr "" + +#: ../pidgin/gtkblist.c:8155 +msgid "/Tools" +msgstr "" + +#: ../pidgin/gtkblist.c:8226 +msgid "/Buddies/Sort Buddies" +msgstr "" + +#: ../pidgin/gtkcertmgr.c:188 +msgid "Type the host name for this certificate." +msgstr "" + +#. Widget creation function +#: ../pidgin/gtkcertmgr.c:531 +msgid "SSL Servers" +msgstr "" + +#: ../pidgin/gtkconv.c:510 +msgid "Unknown command." +msgstr "" + +#: ../pidgin/gtkconv.c:794 ../pidgin/gtkconv.c:821 +msgid "That buddy is not on the same protocol as this chat." +msgstr "" + +#: ../pidgin/gtkconv.c:815 +msgid "" +"You are not currently signed on with an account that can invite that buddy." +msgstr "" + +#: ../pidgin/gtkconv.c:867 +msgid "Invite Buddy Into Chat Room" +msgstr "" + +#: ../pidgin/gtkconv.c:918 +msgid "_Buddy:" +msgstr "" + +#: ../pidgin/gtkconv.c:931 ../pidgin/gtksavedstatuses.c:1152 +#: ../pidgin/gtksavedstatuses.c:1465 +msgid "_Message:" +msgstr "" + +#: ../pidgin/gtkconv.c:1002 +#, c-format +msgid "<h1>Conversation with %s</h1>\n" +msgstr "" + +#: ../pidgin/gtkconv.c:1040 +msgid "Save Conversation" +msgstr "" + +#: ../pidgin/gtkconv.c:1655 +msgid "Un-Ignore" +msgstr "" + +#: ../pidgin/gtkconv.c:1658 +msgid "Ignore" +msgstr "" + +#: ../pidgin/gtkconv.c:1678 +msgid "Get Away Message" +msgstr "" + +#: ../pidgin/gtkconv.c:1701 +msgid "Last Said" +msgstr "" + +#: ../pidgin/gtkconv.c:2747 +msgid "Unable to save icon file to disk." +msgstr "" + +#: ../pidgin/gtkconv.c:2842 +msgid "Save Icon" +msgstr "" + +#: ../pidgin/gtkconv.c:2900 +msgid "Animate" +msgstr "" + +#: ../pidgin/gtkconv.c:2905 +msgid "Hide Icon" +msgstr "" + +#: ../pidgin/gtkconv.c:2908 +msgid "Save Icon As..." +msgstr "" + +#: ../pidgin/gtkconv.c:2912 +msgid "Set Custom Icon..." +msgstr "" + +#: ../pidgin/gtkconv.c:2916 +msgid "Change Size" +msgstr "" + +#: ../pidgin/gtkconv.c:3051 +msgid "Show All" +msgstr "" + +#. Conversation menu +#: ../pidgin/gtkconv.c:3070 +msgid "/_Conversation" +msgstr "" + +#: ../pidgin/gtkconv.c:3072 +msgid "/Conversation/New Instant _Message..." +msgstr "" + +#: ../pidgin/gtkconv.c:3074 +msgid "/Conversation/Join a _Chat..." +msgstr "" + +#: ../pidgin/gtkconv.c:3079 +msgid "/Conversation/_Find..." +msgstr "" + +#: ../pidgin/gtkconv.c:3081 +msgid "/Conversation/View _Log" +msgstr "" + +#: ../pidgin/gtkconv.c:3082 +msgid "/Conversation/_Save As..." +msgstr "" + +#: ../pidgin/gtkconv.c:3084 +msgid "/Conversation/Clea_r Scrollback" +msgstr "" + +#: ../pidgin/gtkconv.c:3089 +msgid "/Conversation/M_edia" +msgstr "" + +#: ../pidgin/gtkconv.c:3091 +msgid "/Conversation/Media/_Audio Call" +msgstr "" + +#: ../pidgin/gtkconv.c:3093 +msgid "/Conversation/Media/_Video Call" +msgstr "" + +#: ../pidgin/gtkconv.c:3095 +msgid "/Conversation/Media/Audio\\/Video _Call" +msgstr "" + +#: ../pidgin/gtkconv.c:3099 +msgid "/Conversation/Se_nd File..." +msgstr "" + +#: ../pidgin/gtkconv.c:3100 +msgid "/Conversation/Get _Attention" +msgstr "" + +#: ../pidgin/gtkconv.c:3101 +msgid "/Conversation/Add Buddy _Pounce..." +msgstr "" + +#: ../pidgin/gtkconv.c:3103 +msgid "/Conversation/_Get Info" +msgstr "" + +#: ../pidgin/gtkconv.c:3105 +msgid "/Conversation/In_vite..." +msgstr "" + +#: ../pidgin/gtkconv.c:3107 +msgid "/Conversation/M_ore" +msgstr "" + +#: ../pidgin/gtkconv.c:3111 +msgid "/Conversation/Al_ias..." +msgstr "" + +#: ../pidgin/gtkconv.c:3113 +msgid "/Conversation/_Block..." +msgstr "" + +#: ../pidgin/gtkconv.c:3115 +msgid "/Conversation/_Unblock..." +msgstr "" + +#: ../pidgin/gtkconv.c:3117 +msgid "/Conversation/_Add..." +msgstr "" + +#: ../pidgin/gtkconv.c:3119 +msgid "/Conversation/_Remove..." +msgstr "" + +#: ../pidgin/gtkconv.c:3124 +msgid "/Conversation/Insert Lin_k..." +msgstr "" + +#: ../pidgin/gtkconv.c:3126 +msgid "/Conversation/Insert Imag_e..." +msgstr "" + +#: ../pidgin/gtkconv.c:3132 +msgid "/Conversation/_Close" +msgstr "" + +#. Options +#: ../pidgin/gtkconv.c:3136 +msgid "/_Options" +msgstr "" + +#: ../pidgin/gtkconv.c:3137 +msgid "/Options/Enable _Logging" +msgstr "" + +#: ../pidgin/gtkconv.c:3138 +msgid "/Options/Enable _Sounds" +msgstr "" + +#: ../pidgin/gtkconv.c:3140 +msgid "/Options/Show Formatting _Toolbars" +msgstr "" + +#: ../pidgin/gtkconv.c:3141 +msgid "/Options/Show Ti_mestamps" +msgstr "" + +#: ../pidgin/gtkconv.c:3333 +msgid "/Conversation/More" +msgstr "" + +#: ../pidgin/gtkconv.c:3389 +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. +#: ../pidgin/gtkconv.c:3425 ../pidgin/gtkconv.c:3457 +msgid "/Conversation" +msgstr "" + +#: ../pidgin/gtkconv.c:3465 +msgid "/Conversation/View Log" +msgstr "" + +#: ../pidgin/gtkconv.c:3470 +msgid "/Conversation/Media/Audio Call" +msgstr "" + +#: ../pidgin/gtkconv.c:3473 +msgid "/Conversation/Media/Video Call" +msgstr "" + +#: ../pidgin/gtkconv.c:3476 +msgid "/Conversation/Media/Audio\\/Video Call" +msgstr "" + +#: ../pidgin/gtkconv.c:3483 +msgid "/Conversation/Send File..." +msgstr "" + +#: ../pidgin/gtkconv.c:3487 +msgid "/Conversation/Get Attention" +msgstr "" + +#: ../pidgin/gtkconv.c:3490 +msgid "/Conversation/Add Buddy Pounce..." +msgstr "" + +#: ../pidgin/gtkconv.c:3496 +msgid "/Conversation/Get Info" +msgstr "" + +#: ../pidgin/gtkconv.c:3500 +msgid "/Conversation/Invite..." +msgstr "" + +#: ../pidgin/gtkconv.c:3506 +msgid "/Conversation/Alias..." +msgstr "" + +#: ../pidgin/gtkconv.c:3510 +msgid "/Conversation/Block..." +msgstr "" + +#: ../pidgin/gtkconv.c:3514 +msgid "/Conversation/Unblock..." +msgstr "" + +#: ../pidgin/gtkconv.c:3518 +msgid "/Conversation/Add..." +msgstr "" + +#: ../pidgin/gtkconv.c:3522 +msgid "/Conversation/Remove..." +msgstr "" + +#: ../pidgin/gtkconv.c:3528 +msgid "/Conversation/Insert Link..." +msgstr "" + +#: ../pidgin/gtkconv.c:3532 +msgid "/Conversation/Insert Image..." +msgstr "" + +#: ../pidgin/gtkconv.c:3538 +msgid "/Options/Enable Logging" +msgstr "" + +#: ../pidgin/gtkconv.c:3541 +msgid "/Options/Enable Sounds" +msgstr "" + +#: ../pidgin/gtkconv.c:3554 +msgid "/Options/Show Formatting Toolbars" +msgstr "" + +#: ../pidgin/gtkconv.c:3557 +msgid "/Options/Show Timestamps" +msgstr "" + +#: ../pidgin/gtkconv.c:3635 +msgid "User is typing..." +msgstr "" + +#: ../pidgin/gtkconv.c:3706 +#, c-format +msgid "" +"\n" +"%s has stopped typing" +msgstr "" + +#. Build the Send To menu +#: ../pidgin/gtkconv.c:3885 ../pidgin/gtkconv.c:8615 +msgid "S_end To" +msgstr "" + +#: ../pidgin/gtkconv.c:4579 ../pidgin/plugins/sendbutton.c:61 +msgid "_Send" +msgstr "" + +#. Setup the label telling how many people are in the room. +#: ../pidgin/gtkconv.c:4748 +msgid "0 people in room" +msgstr "" + +#: ../pidgin/gtkconv.c:4903 +msgid "Close Find bar" +msgstr "" + +#: ../pidgin/gtkconv.c:4905 +msgid "Find:" +msgstr "" + +#: ../pidgin/gtkconv.c:6173 ../pidgin/gtkconv.c:6291 +#, c-format +msgid "%d person in room" +msgid_plural "%d people in room" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../pidgin/gtkconv.c:6824 +msgid "Stopped Typing" +msgstr "" + +#: ../pidgin/gtkconv.c:6827 +msgid "Nick Said" +msgstr "" + +#: ../pidgin/gtkconv.c:6830 +msgid "Unread Messages" +msgstr "" + +#: ../pidgin/gtkconv.c:6836 +msgid "New Event" +msgstr "" + +#: ../pidgin/gtkconv.c:7602 +msgid "" +"The account has disconnected and you are no longer in this chat. You will " +"automatically rejoin the chat when the account reconnects." +msgstr "" + +#: ../pidgin/gtkconv.c:8093 +msgid "clear: Clears all conversation scrollbacks." +msgstr "" + +#: ../pidgin/gtkconv.c:8298 +msgid "Confirm close" +msgstr "" + +#: ../pidgin/gtkconv.c:8330 +msgid "You have unread messages. Are you sure you want to close the window?" +msgstr "" + +#: ../pidgin/gtkconv.c:8953 +msgid "Close other tabs" +msgstr "" + +#: ../pidgin/gtkconv.c:8959 +msgid "Close all tabs" +msgstr "" + +#: ../pidgin/gtkconv.c:8967 +msgid "Detach this tab" +msgstr "" + +#: ../pidgin/gtkconv.c:8973 +msgid "Close this tab" +msgstr "" + +#: ../pidgin/gtkconv.c:9478 +msgid "Close conversation" +msgstr "" + +#: ../pidgin/gtkconv.c:10068 +msgid "Last created window" +msgstr "" + +#: ../pidgin/gtkconv.c:10070 +msgid "Separate IM and Chat windows" +msgstr "" + +#: ../pidgin/gtkconv.c:10072 ../pidgin/gtkprefs.c:1989 +msgid "New window" +msgstr "" + +#: ../pidgin/gtkconv.c:10074 +msgid "By group" +msgstr "" + +#: ../pidgin/gtkconv.c:10076 +msgid "By account" +msgstr "" + +#: ../pidgin/gtkdebug.c:178 ../pidgin/gtkdebug.c:812 ../pidgin/gtkdebug.c:814 +msgid "Find" +msgstr "" + +#: ../pidgin/gtkdebug.c:206 +msgid "_Search for:" +msgstr "" + +#: ../pidgin/gtkdebug.c:245 +msgid "Save Debug Log" +msgstr "" + +#: ../pidgin/gtkdebug.c:645 +msgid "Invert" +msgstr "" + +#: ../pidgin/gtkdebug.c:648 +msgid "Highlight matches" +msgstr "" + +#: ../pidgin/gtkdebug.c:715 +msgid "_Icon Only" +msgstr "" + +#: ../pidgin/gtkdebug.c:716 +msgid "_Text Only" +msgstr "" + +#: ../pidgin/gtkdebug.c:717 +msgid "_Both Icon & Text" +msgstr "" + +#: ../pidgin/gtkdebug.c:865 ../pidgin/gtkdebug.c:867 ../pidgin/gtkdebug.c:869 +msgid "Filter" +msgstr "" + +#: ../pidgin/gtkdebug.c:889 ../pidgin/gtkdebug.c:891 +msgid "Right click for more options." +msgstr "" + +#: ../pidgin/gtkdebug.c:925 +msgid "Level " +msgstr "" + +#: ../pidgin/gtkdebug.c:931 ../pidgin/gtkdebug.c:933 +msgid "Select the debug filter level." +msgstr "" + +#: ../pidgin/gtkdebug.c:938 +msgid "All" +msgstr "" + +#: ../pidgin/gtkdebug.c:939 +msgid "Misc" +msgstr "" + +#: ../pidgin/gtkdebug.c:941 +msgid "Warning" +msgstr "" + +#: ../pidgin/gtkdebug.c:942 +msgid "Error " +msgstr "" + +#: ../pidgin/gtkdebug.c:943 +msgid "Fatal Error" +msgstr "" + +#: ../pidgin/gtkdialogs.c:78 +msgid "artist" +msgstr "" + +#: ../pidgin/gtkdialogs.c:87 +msgid "voice and video" +msgstr "" + +#: ../pidgin/gtkdialogs.c:89 +msgid "support" +msgstr "" + +#: ../pidgin/gtkdialogs.c:91 ../pidgin/gtkdialogs.c:119 +msgid "webmaster" +msgstr "" + +#: ../pidgin/gtkdialogs.c:110 +msgid "win32 port" +msgstr "" + +#. Translators: This is a person's name. For most languages we recommend +#. not translating it. +#: ../pidgin/gtkdialogs.c:114 +msgid "Ka-Hing Cheung" +msgstr "" + +#: ../pidgin/gtkdialogs.c:115 ../pidgin/gtkdialogs.c:117 +msgid "maintainer" +msgstr "" + +#: ../pidgin/gtkdialogs.c:118 +msgid "libfaim maintainer" +msgstr "" + +#. If "lazy bum" translates literally into a serious insult, use something +#. else or omit it. +#: ../pidgin/gtkdialogs.c:123 +msgid "hacker and designated driver [lazy bum]" +msgstr "" + +#: ../pidgin/gtkdialogs.c:127 +msgid "support/QA" +msgstr "" + +#: ../pidgin/gtkdialogs.c:128 +msgid "XMPP" +msgstr "" + +#: ../pidgin/gtkdialogs.c:129 +msgid "original author" +msgstr "" + +#: ../pidgin/gtkdialogs.c:131 +msgid "lead developer" +msgstr "" + +#: ../pidgin/gtkdialogs.c:142 +msgid "Senior Contributor/QA" +msgstr "" + +#: ../pidgin/gtkdialogs.c:150 ../pidgin/gtkdialogs.c:151 +msgid "Afrikaans" +msgstr "" + +#: ../pidgin/gtkdialogs.c:152 ../pidgin/gtkdialogs.c:262 +msgid "Arabic" +msgstr "" + +#: ../pidgin/gtkdialogs.c:153 +msgid "Assamese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:154 +msgid "Asturian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:155 +msgid "Belarusian Latin" +msgstr "" + +#: ../pidgin/gtkdialogs.c:156 ../pidgin/gtkdialogs.c:157 +#: ../pidgin/gtkdialogs.c:263 +msgid "Bulgarian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:158 ../pidgin/gtkdialogs.c:159 +#: ../pidgin/gtkdialogs.c:160 ../pidgin/gtkdialogs.c:264 +#: ../pidgin/gtkdialogs.c:265 +msgid "Bengali" +msgstr "" + +#: ../pidgin/gtkdialogs.c:161 +msgid "Bengali-India" +msgstr "" + +#: ../pidgin/gtkdialogs.c:162 +msgid "Bosnian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:163 ../pidgin/gtkdialogs.c:266 +#: ../pidgin/gtkdialogs.c:267 +msgid "Catalan" +msgstr "" + +#: ../pidgin/gtkdialogs.c:164 ../pidgin/gtkdialogs.c:165 +msgid "Valencian-Catalan" +msgstr "" + +#: ../pidgin/gtkdialogs.c:166 ../pidgin/gtkdialogs.c:268 +#: ../pidgin/gtkdialogs.c:269 +msgid "Czech" +msgstr "" + +#: ../pidgin/gtkdialogs.c:167 ../pidgin/gtkdialogs.c:270 +#: ../pidgin/gtkdialogs.c:271 +msgid "Danish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:168 ../pidgin/gtkdialogs.c:272 +#: ../pidgin/gtkdialogs.c:273 +msgid "German" +msgstr "" + +#: ../pidgin/gtkdialogs.c:169 ../pidgin/gtkdialogs.c:170 +#: ../pidgin/gtkdialogs.c:171 +msgid "Dzongkha" +msgstr "" + +#: ../pidgin/gtkdialogs.c:172 ../pidgin/gtkdialogs.c:173 +msgid "Greek" +msgstr "" + +#: ../pidgin/gtkdialogs.c:174 +msgid "Australian English" +msgstr "" + +#: ../pidgin/gtkdialogs.c:175 ../pidgin/gtkdialogs.c:274 +msgid "British English" +msgstr "" + +#: ../pidgin/gtkdialogs.c:176 +msgid "Canadian English" +msgstr "" + +#: ../pidgin/gtkdialogs.c:177 +msgid "Esperanto" +msgstr "" + +#: ../pidgin/gtkdialogs.c:178 ../pidgin/gtkdialogs.c:275 +#: ../pidgin/gtkdialogs.c:276 ../pidgin/gtkdialogs.c:277 +#: ../pidgin/gtkdialogs.c:278 +msgid "Spanish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:179 +msgid "Estonian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:180 ../pidgin/gtkdialogs.c:279 +#: ../pidgin/gtkdialogs.c:280 +msgid "Basque" +msgstr "" + +#: ../pidgin/gtkdialogs.c:181 ../pidgin/gtkdialogs.c:182 +#: ../pidgin/gtkdialogs.c:183 +msgid "Persian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:184 ../pidgin/gtkdialogs.c:281 +#: ../pidgin/gtkdialogs.c:282 +msgid "Finnish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:185 ../pidgin/gtkdialogs.c:283 +#: ../pidgin/gtkdialogs.c:284 ../pidgin/gtkdialogs.c:285 +#: ../pidgin/gtkdialogs.c:286 +msgid "French" +msgstr "" + +#: ../pidgin/gtkdialogs.c:186 ../pidgin/gtkdialogs.c:187 +msgid "Irish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:188 ../pidgin/gtkdialogs.c:189 +#: ../pidgin/gtkdialogs.c:287 +msgid "Galician" +msgstr "" + +#: ../pidgin/gtkdialogs.c:190 ../pidgin/gtkdialogs.c:191 +msgid "Gujarati" +msgstr "" + +#: ../pidgin/gtkdialogs.c:191 +msgid "Gujarati Language Team" +msgstr "" + +#: ../pidgin/gtkdialogs.c:192 ../pidgin/gtkdialogs.c:288 +msgid "Hebrew" +msgstr "" + +#: ../pidgin/gtkdialogs.c:193 ../pidgin/gtkdialogs.c:194 +#: ../pidgin/gtkdialogs.c:289 +msgid "Hindi" +msgstr "" + +#: ../pidgin/gtkdialogs.c:195 +msgid "Croatian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:196 ../pidgin/gtkdialogs.c:290 +msgid "Hungarian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:197 +msgid "Indonesian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:198 ../pidgin/gtkdialogs.c:292 +msgid "Italian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:199 ../pidgin/gtkdialogs.c:293 +#: ../pidgin/gtkdialogs.c:294 ../pidgin/gtkdialogs.c:295 +#: ../pidgin/gtkdialogs.c:296 +msgid "Japanese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:200 ../pidgin/gtkdialogs.c:297 +msgid "Georgian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:200 +msgid "Ubuntu Georgian Translators" +msgstr "" + +#: ../pidgin/gtkdialogs.c:201 +msgid "Kazakh" +msgstr "" + +#: ../pidgin/gtkdialogs.c:202 +msgid "Khmer" +msgstr "" + +#: ../pidgin/gtkdialogs.c:203 +msgid "Kannada" +msgstr "" + +#: ../pidgin/gtkdialogs.c:203 +msgid "Kannada Translation team" +msgstr "" + +#: ../pidgin/gtkdialogs.c:204 ../pidgin/gtkdialogs.c:298 +#: ../pidgin/gtkdialogs.c:299 +msgid "Korean" +msgstr "" + +#: ../pidgin/gtkdialogs.c:205 ../pidgin/gtkdialogs.c:206 +#: ../pidgin/gtkdialogs.c:207 +msgid "Kurdish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:208 ../pidgin/gtkdialogs.c:301 +#: ../pidgin/gtkdialogs.c:302 ../pidgin/gtkdialogs.c:303 +msgid "Lithuanian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:209 ../pidgin/gtkdialogs.c:210 +msgid "Maithili" +msgstr "" + +#: ../pidgin/gtkdialogs.c:211 +msgid "Meadow Mari" +msgstr "" + +#: ../pidgin/gtkdialogs.c:212 ../pidgin/gtkdialogs.c:213 +#: ../pidgin/gtkdialogs.c:214 ../pidgin/gtkdialogs.c:304 +msgid "Macedonian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:215 +msgid "Malayalam" +msgstr "" + +#: ../pidgin/gtkdialogs.c:216 +msgid "Mongolian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:217 +msgid "Marathi" +msgstr "" + +#: ../pidgin/gtkdialogs.c:218 +msgid "Burmese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:219 ../pidgin/gtkdialogs.c:306 +#: ../pidgin/gtkdialogs.c:307 ../pidgin/gtkdialogs.c:308 +msgid "Bokmål Norwegian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:220 +msgid "Nepali" +msgstr "" + +#: ../pidgin/gtkdialogs.c:221 ../pidgin/gtkdialogs.c:309 +msgid "Dutch, Flemish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:222 +msgid "Norwegian Nynorsk" +msgstr "" + +#: ../pidgin/gtkdialogs.c:223 +msgid "Occitan" +msgstr "" + +#: ../pidgin/gtkdialogs.c:224 +msgid "Oriya" +msgstr "" + +#: ../pidgin/gtkdialogs.c:225 +msgid "Punjabi" +msgstr "" + +#: ../pidgin/gtkdialogs.c:226 ../pidgin/gtkdialogs.c:310 +#: ../pidgin/gtkdialogs.c:311 ../pidgin/gtkdialogs.c:312 +#: ../pidgin/gtkdialogs.c:313 ../pidgin/gtkdialogs.c:314 +msgid "Polish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:227 ../pidgin/gtkdialogs.c:315 +msgid "Portuguese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:228 ../pidgin/gtkdialogs.c:316 +#: ../pidgin/gtkdialogs.c:317 +msgid "Portuguese-Brazil" +msgstr "" + +#: ../pidgin/gtkdialogs.c:229 +msgid "Pashto" +msgstr "" + +#: ../pidgin/gtkdialogs.c:230 ../pidgin/gtkdialogs.c:231 +msgid "Romanian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:232 ../pidgin/gtkdialogs.c:318 +#: ../pidgin/gtkdialogs.c:319 ../pidgin/gtkdialogs.c:320 +msgid "Russian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:233 ../pidgin/gtkdialogs.c:234 +#: ../pidgin/gtkdialogs.c:321 ../pidgin/gtkdialogs.c:322 +#: ../pidgin/gtkdialogs.c:323 +msgid "Slovak" +msgstr "" + +#: ../pidgin/gtkdialogs.c:235 ../pidgin/gtkdialogs.c:324 +msgid "Slovenian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:236 +msgid "Albanian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:237 ../pidgin/gtkdialogs.c:325 +#: ../pidgin/gtkdialogs.c:326 +msgid "Serbian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:238 +msgid "Serbian Latin" +msgstr "" + +#: ../pidgin/gtkdialogs.c:239 ../pidgin/gtkdialogs.c:240 +msgid "Sinhala" +msgstr "" + +#: ../pidgin/gtkdialogs.c:241 ../pidgin/gtkdialogs.c:327 +#: ../pidgin/gtkdialogs.c:328 +msgid "Swedish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:242 +msgid "Swahili" +msgstr "" + +#: ../pidgin/gtkdialogs.c:243 ../pidgin/gtkdialogs.c:244 +msgid "Tamil" +msgstr "" + +#: ../pidgin/gtkdialogs.c:245 ../pidgin/gtkdialogs.c:329 +msgid "Telugu" +msgstr "" + +#: ../pidgin/gtkdialogs.c:246 +msgid "Thai" +msgstr "" + +#: ../pidgin/gtkdialogs.c:247 +msgid "Ukranian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:248 +msgid "Urdu" +msgstr "" + +#: ../pidgin/gtkdialogs.c:249 ../pidgin/gtkdialogs.c:332 +msgid "Vietnamese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:250 ../pidgin/gtkdialogs.c:333 +#: ../pidgin/gtkdialogs.c:334 +msgid "Simplified Chinese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:251 ../pidgin/gtkdialogs.c:252 +#: ../pidgin/gtkdialogs.c:253 +msgid "Hong Kong Chinese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:254 ../pidgin/gtkdialogs.c:255 +#: ../pidgin/gtkdialogs.c:335 +msgid "Traditional Chinese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:261 +msgid "Amharic" +msgstr "" + +#: ../pidgin/gtkdialogs.c:291 +msgid "Armenian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:300 +msgid "Lao" +msgstr "" + +#: ../pidgin/gtkdialogs.c:305 +msgid "Malay" +msgstr "" + +#: ../pidgin/gtkdialogs.c:330 ../pidgin/gtkdialogs.c:331 +msgid "Turkish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:332 +msgid "T.M.Thanh and the Gnome-Vi Team" +msgstr "" + +#: ../pidgin/gtkdialogs.c:510 +#, c-format +msgid "" +"%s is a messaging client based on libpurple which is capable of connecting " +"to multiple messaging services at once. %s is written in C using GTK+. %s " +"is released, and may be modified and redistributed, under the terms of the " +"GPL version 2 (or later). A copy of the GPL is distributed with %s. %s is " +"copyrighted by its contributors, a list of whom is also distributed with %s." +" There is no warranty for %s.<BR><BR>" +msgstr "" + +#: ../pidgin/gtkdialogs.c:520 +#, c-format +msgid "" +"<FONT SIZE=\"4\"><B>Helpful Resources</B></FONT><BR>\t<A " +"HREF=\"%s\">Website</A><BR>\t<A HREF=\"%s\">Frequently Asked " +"Questions</A><BR>\tIRC Channel: #pidgin on irc.freenode.net<BR>\tXMPP MUC: " +"devel@conference.pidgin.im<BR><BR>" +msgstr "" + +#: ../pidgin/gtkdialogs.c:534 +msgid "" +"<font size=\"4\"><b>Help from other Pidgin users</b></font> is available by " +"e-mailing <a " +"href=\"mailto:support@pidgin.im\">support@pidgin.im</a><br/>This is a " +"<b>public</b> mailing list! (<a " +"href=\"http://pidgin.im/pipermail/support/\">archive</a>)<br/>We can't help " +"with third-party protocols or plugins!<br/>This list's primary language is " +"<b>English</b>. You are welcome to post in another language, but the " +"responses may be less helpful.<br/>" +msgstr "" + +#: ../pidgin/gtkdialogs.c:544 +#, c-format +msgid "About %s" +msgstr "" + +#: ../pidgin/gtkdialogs.c:566 +msgid "Build Information" +msgstr "" + +#. End of not to be translated section +#: ../pidgin/gtkdialogs.c:735 +#, c-format +msgid "%s Build Information" +msgstr "" + +#: ../pidgin/gtkdialogs.c:756 +msgid "Current Developers" +msgstr "" + +#: ../pidgin/gtkdialogs.c:762 +msgid "Crazy Patch Writers" +msgstr "" + +#: ../pidgin/gtkdialogs.c:768 +msgid "Retired Developers" +msgstr "" + +#: ../pidgin/gtkdialogs.c:774 +msgid "Retired Crazy Patch Writers" +msgstr "" + +#: ../pidgin/gtkdialogs.c:777 +#, c-format +msgid "%s Developer Information" +msgstr "" + +#: ../pidgin/gtkdialogs.c:798 +msgid "Current Translators" +msgstr "" + +#: ../pidgin/gtkdialogs.c:804 +msgid "Past Translators" +msgstr "" + +#: ../pidgin/gtkdialogs.c:807 +#, c-format +msgid "%s Translator Information" +msgstr "" + +#: ../pidgin/gtkdialogs.c:818 +#, c-format +msgid "%s Plugin Information" +msgstr "" + +#: ../pidgin/gtkdialogs.c:827 +msgid "Plugin Information" +msgstr "" + +#: ../pidgin/gtkdialogs.c:883 ../pidgin/gtkdialogs.c:1022 +#: ../pidgin/gtkdialogs.c:1103 +msgid "_Name" +msgstr "" + +#: ../pidgin/gtkdialogs.c:888 ../pidgin/gtkdialogs.c:1027 +#: ../pidgin/gtkdialogs.c:1108 +msgid "_Account" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1035 +msgid "Get User Info" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1037 +msgid "" +"Please enter the username or alias of the person whose info you would like " +"to view." +msgstr "" + +#: ../pidgin/gtkdialogs.c:1127 +msgid "View User Log" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1149 +msgid "Alias Contact" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1150 +msgid "Enter an alias for this contact." +msgstr "" + +#: ../pidgin/gtkdialogs.c:1172 +#, c-format +msgid "Enter an alias for %s." +msgstr "" + +#: ../pidgin/gtkdialogs.c:1174 +msgid "Alias Buddy" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1195 +msgid "Alias Chat" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1196 +msgid "Enter an alias for this chat." +msgstr "" + +#: ../pidgin/gtkdialogs.c:1235 +#, 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] "" +msgstr[2] "" + +#: ../pidgin/gtkdialogs.c:1243 +msgid "Remove Contact" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1246 +msgid "_Remove Contact" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1277 +#, c-format +msgid "" +"You are about to merge the group called %s into the group called %s. Do you " +"want to continue?" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1284 +msgid "Merge Groups" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1287 +msgid "_Merge Groups" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1337 +#, 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 "" + +#: ../pidgin/gtkdialogs.c:1340 +msgid "Remove Group" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1343 +msgid "_Remove Group" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1376 +#, c-format +msgid "" +"You are about to remove %s from your buddy list. Do you want to continue?" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1379 +msgid "Remove Buddy" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1382 +msgid "_Remove Buddy" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1403 +#, c-format +msgid "" +"You are about to remove the chat %s from your buddy list. Do you want to " +"continue?" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1406 +msgid "Remove Chat" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1409 +msgid "_Remove Chat" +msgstr "" + +#: ../pidgin/gtkdocklet.c:155 +msgid "Right-click for more unread messages...\n" +msgstr "" + +#: ../pidgin/gtkdocklet.c:536 +msgid "_Change Status" +msgstr "" + +#: ../pidgin/gtkdocklet.c:682 +msgid "Show Buddy _List" +msgstr "" + +#: ../pidgin/gtkdocklet.c:687 +msgid "_Unread Messages" +msgstr "" + +#: ../pidgin/gtkdocklet.c:708 +msgid "New _Message..." +msgstr "" + +#: ../pidgin/gtkdocklet.c:722 +msgid "_Accounts" +msgstr "" + +#: ../pidgin/gtkdocklet.c:723 +msgid "Plu_gins" +msgstr "" + +#: ../pidgin/gtkdocklet.c:724 +msgid "Pr_eferences" +msgstr "" + +#: ../pidgin/gtkdocklet.c:728 +msgid "Mute _Sounds" +msgstr "" + +#: ../pidgin/gtkdocklet.c:735 +msgid "_Blink on New Message" +msgstr "" + +#: ../pidgin/gtkdocklet.c:745 +msgid "_Quit" +msgstr "" + +#: ../pidgin/gtkft.c:150 +msgid "Not started" +msgstr "" + +#: ../pidgin/gtkft.c:272 +msgid "<b>Receiving As:</b>" +msgstr "" + +#: ../pidgin/gtkft.c:274 +msgid "<b>Receiving From:</b>" +msgstr "" + +#: ../pidgin/gtkft.c:278 +msgid "<b>Sending To:</b>" +msgstr "" + +#: ../pidgin/gtkft.c:280 +msgid "<b>Sending As:</b>" +msgstr "" + +#: ../pidgin/gtkft.c:474 ../pidgin/gtkutils.c:3296 +msgid "There is no application configured to open this type of file." +msgstr "" + +#: ../pidgin/gtkft.c:479 ../pidgin/gtkutils.c:3301 +msgid "An error occurred while opening the file." +msgstr "" + +#: ../pidgin/gtkft.c:516 ../pidgin/gtkutils.c:3337 +#, c-format +msgid "Error launching %s: %s" +msgstr "" + +#: ../pidgin/gtkft.c:525 ../pidgin/gtkutils.c:3345 +#, c-format +msgid "Error running %s" +msgstr "" + +#: ../pidgin/gtkft.c:526 ../pidgin/gtkutils.c:3346 +#, c-format +msgid "Process returned error code %d" +msgstr "" + +#: ../pidgin/gtkft.c:652 +msgid "Filename:" +msgstr "" + +#: ../pidgin/gtkft.c:653 +msgid "Local File:" +msgstr "" + +#: ../pidgin/gtkft.c:655 +msgid "Speed:" +msgstr "" + +#: ../pidgin/gtkft.c:656 +msgid "Time Elapsed:" +msgstr "" + +#: ../pidgin/gtkft.c:657 +msgid "Time Remaining:" +msgstr "" + +#: ../pidgin/gtkft.c:741 +msgid "Close this window when all transfers _finish" +msgstr "" + +#: ../pidgin/gtkft.c:751 +msgid "C_lear finished transfers" +msgstr "" + +#. "Download Details" arrow +#: ../pidgin/gtkft.c:760 +msgid "File transfer _details" +msgstr "" + +#: ../pidgin/gtkimhtml.c:951 +msgid "Paste as Plain _Text" +msgstr "" + +#: ../pidgin/gtkimhtml.c:968 ../pidgin/gtkimhtmltoolbar.c:1352 +msgid "_Reset formatting" +msgstr "" + +#: ../pidgin/gtkimhtml.c:976 +msgid "Disable _smileys in selected text" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1603 +msgid "Hyperlink color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1604 +msgid "Color to draw hyperlinks." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1607 +msgid "Hyperlink visited color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1608 +msgid "Color to draw hyperlink after it has been visited (or activated)." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1611 +msgid "Hyperlink prelight color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1612 +msgid "Color to draw hyperlinks when mouse is over them." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1615 ../pidgin/plugins/pidginrc.c:57 +msgid "Sent Message Name Color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1616 +msgid "Color to draw the name of a message you sent." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1619 ../pidgin/plugins/pidginrc.c:58 +msgid "Received Message Name Color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1620 +msgid "Color to draw the name of a message you received." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1623 +msgid "\"Attention\" Name Color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1624 +msgid "Color to draw the name of a message you received containing your name." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1627 ../pidgin/plugins/pidginrc.c:60 +msgid "Action Message Name Color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1628 +msgid "Color to draw the name of an action message." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1631 +msgid "Action Message Name Color for Whispered Message" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1632 +msgid "Color to draw the name of a whispered action message." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1635 +msgid "Whisper Message Name Color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1636 +msgid "Color to draw the name of a whispered message." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1645 +msgid "Typing notification color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1646 +msgid "The color to use for the typing notification" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1649 +msgid "Typing notification font" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1650 +msgid "The font to use for the typing notification" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1653 ../pidgin/gtkimhtml.c:1654 +msgid "Enable typing notification" +msgstr "" + +#: ../pidgin/gtkimhtml.c:3781 +msgid "" +"<span size='larger' weight='bold'>Unrecognized file type</span>\n" +"\n" +"Defaulting to PNG." +msgstr "" + +#: ../pidgin/gtkimhtml.c:3811 +#, c-format +msgid "" +"<span size='larger' weight='bold'>Error saving image</span>\n" +"\n" +"%s" +msgstr "" + +#: ../pidgin/gtkimhtml.c:3858 +msgid "Save Image" +msgstr "" + +#: ../pidgin/gtkimhtml.c:3904 +msgid "_Save Image..." +msgstr "" + +#: ../pidgin/gtkimhtml.c:3914 +msgid "_Add Custom Smiley..." +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:177 ../pidgin/plugins/themeedit.c:127 +msgid "Select Font" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:257 +msgid "Select Text Color" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:337 +msgid "Select Background Color" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:426 +msgid "_URL" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:434 +msgid "_Description" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:437 +msgid "" +"Please enter the URL and description of the link that you want to insert. " +"The description is optional." +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:441 +msgid "Please enter the URL of the link that you want to insert." +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:446 ../pidgin/gtkimhtmltoolbar.c:1239 +msgid "Insert Link" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:450 ../pidgin/gtkimhtmltoolbar.c:1422 +msgid "_Insert" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:515 +#, c-format +msgid "Failed to store image: %s\n" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:540 +msgid "Insert Image" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:673 +#, c-format +msgid "" +"This smiley is disabled because a custom smiley exists for this shortcut:\n" +" %s" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:804 +msgid "Smile!" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:819 +msgid "_Manage custom smileys" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:856 +msgid "This theme has no available smileys." +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:971 ../pidgin/gtkimhtmltoolbar.c:1377 +msgid "_Font" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1192 +msgid "Group Items" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1192 +msgid "Ungroup Items" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1224 ../pidgin/plugins/convcolors.c:358 +msgid "Bold" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1225 ../pidgin/plugins/convcolors.c:367 +msgid "Italic" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1226 ../pidgin/plugins/convcolors.c:376 +msgid "Underline" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1227 +msgid "Strikethrough" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1229 +msgid "Increase Font Size" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1230 +msgid "Decrease Font Size" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1232 +msgid "Font Face" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1233 +msgid "Foreground Color" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1236 +msgid "Reset Formatting" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1238 +msgid "Insert IM Image" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1241 +msgid "Insert Smiley" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1266 +msgid "Send Attention" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1337 +msgid "<b>_Bold</b>" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1338 +msgid "<i>_Italic</i>" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1339 +msgid "<u>_Underline</u>" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1340 +msgid "<span strikethrough='true'>Strikethrough</span>" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1341 +msgid "<span size='larger'>_Larger</span>" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1343 +msgid "_Normal" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1345 +msgid "<span size='smaller'>_Smaller</span>" +msgstr "" + +#. If we want to show the formatting for the following items, we would +#. * need to update them when formatting changes. The above items don't need +#. * no updating nor nothin' +#: ../pidgin/gtkimhtmltoolbar.c:1349 +msgid "_Font face" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1350 +msgid "Foreground _color" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1351 +msgid "Bac_kground color" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1430 +msgid "_Image" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1438 +msgid "_Link" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1446 +msgid "_Horizontal rule" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1468 +msgid "_Smile!" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1490 +msgid "_Attention!" +msgstr "" + +#: ../pidgin/gtklog.c:245 +msgid "Log Deletion Failed" +msgstr "" + +#: ../pidgin/gtklog.c:246 +msgid "Check permissions and try again." +msgstr "" + +#: ../pidgin/gtklog.c:289 +#, c-format +msgid "" +"Are you sure you want to permanently delete the log of the conversation with" +" %s which started at %s?" +msgstr "" + +#: ../pidgin/gtklog.c:300 +#, c-format +msgid "" +"Are you sure you want to permanently delete the log of the conversation in " +"%s which started at %s?" +msgstr "" + +#: ../pidgin/gtklog.c:305 +#, c-format +msgid "" +"Are you sure you want to permanently delete the system log which started at " +"%s?" +msgstr "" + +#: ../pidgin/gtklog.c:320 +msgid "Delete Log?" +msgstr "" + +#: ../pidgin/gtklog.c:331 +msgid "Delete Log..." +msgstr "" + +#: ../pidgin/gtklog.c:451 +#, c-format +msgid "<span size='larger' weight='bold'>Conversation in %s on %s</span>" +msgstr "" + +#: ../pidgin/gtklog.c:454 +#, c-format +msgid "<span size='larger' weight='bold'>Conversation with %s on %s</span>" +msgstr "" + +#. Steal the "HELP" response and use it to trigger browsing to the logs folder +#: ../pidgin/gtklog.c:581 +msgid "_Browse logs folder" +msgstr "" + +#: ../pidgin/gtkmain.c:428 +#, c-format +msgid "%s %s. Try `%s -h' for more information.\n" +msgstr "" + +#: ../pidgin/gtkmain.c:432 +#, c-format +msgid "" +"Usage: %s [OPTION]...\n" +"\n" +msgstr "" + +#: ../pidgin/gtkmain.c:434 +msgid "DIR" +msgstr "" + +#: ../pidgin/gtkmain.c:434 +msgid "use DIR for config files" +msgstr "" + +#: ../pidgin/gtkmain.c:436 +msgid "print debugging messages to stdout" +msgstr "" + +#: ../pidgin/gtkmain.c:438 +msgid "force online, regardless of network status" +msgstr "" + +#: ../pidgin/gtkmain.c:440 +msgid "display this help and exit" +msgstr "" + +#: ../pidgin/gtkmain.c:442 +msgid "allow multiple instances" +msgstr "" + +#: ../pidgin/gtkmain.c:444 +msgid "don't automatically login" +msgstr "" + +#: ../pidgin/gtkmain.c:446 +msgid "NAME" +msgstr "" + +#: ../pidgin/gtkmain.c:447 +msgid "" +"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)." +msgstr "" + +#: ../pidgin/gtkmain.c:454 +msgid "X display to use" +msgstr "" + +#: ../pidgin/gtkmain.c:457 +msgid "display the current version and exit" +msgstr "" + +#: ../pidgin/gtkmain.c:546 +#, 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 "" + +#: ../pidgin/gtkmain.c:834 +#, c-format +msgid "Exiting because another libpurple client is already running.\n" +msgstr "" + +#: ../pidgin/gtkmedia.c:271 +msgid "_Media" +msgstr "" + +#: ../pidgin/gtkmedia.c:272 +msgid "_Hangup" +msgstr "" + +#: ../pidgin/gtkmedia.c:632 +#, c-format +msgid "%s wishes to start an audio/video session with you." +msgstr "" + +#: ../pidgin/gtkmedia.c:638 +#, c-format +msgid "%s wishes to start a video session with you." +msgstr "" + +#: ../pidgin/gtkmedia.c:644 +msgid "Incoming Call" +msgstr "" + +#: ../pidgin/gtkmedia.c:792 +msgid "_Hold" +msgstr "" + +#: ../pidgin/gtkmedia.c:863 ../pidgin/pidginstock.c:92 +msgid "_Pause" +msgstr "" + +#: ../pidgin/gtkmedia.c:881 +msgid "_Mute" +msgstr "" + +#: ../pidgin/gtknotify.c:752 +#, c-format +msgid "%s has %d new message." +msgid_plural "%s has %d new messages." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../pidgin/gtknotify.c:781 +#, c-format +msgid "<b>%d new email.</b>" +msgid_plural "<b>%d new emails.</b>" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../pidgin/gtknotify.c:1215 +#, c-format +msgid "The browser command \"%s\" is invalid." +msgstr "" + +#: ../pidgin/gtknotify.c:1217 ../pidgin/gtknotify.c:1253 +#: ../pidgin/gtknotify.c:1439 +msgid "Unable to open URL" +msgstr "" + +#: ../pidgin/gtknotify.c:1250 +#, c-format +msgid "Error launching \"%s\": %s" +msgstr "" + +#: ../pidgin/gtknotify.c:1440 +msgid "" +"The 'Manual' browser command has been chosen, but no command has been set." +msgstr "" + +#: ../pidgin/gtknotify.c:1449 +msgid "Unable to open URL: the 'Manual' browser command seems invalid." +msgstr "" + +#: ../pidgin/gtknotify.c:1524 +msgid "No message" +msgstr "" + +#: ../pidgin/gtknotify.c:1602 +msgid "Open All Messages" +msgstr "" + +#: ../pidgin/gtknotify.c:1632 +msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>" +msgstr "" + +#: ../pidgin/gtknotify.c:1635 +msgid "New Pounces" +msgstr "" + +#. Translators: Make sure you translate "Dismiss" differently than +#. "close"! This string is used in the "You have pounced" dialog +#. that appears when one of your Buddy Pounces is triggered. In +#. this context "Dismiss" means "I acknowledge that I've seen that +#. this pounce was triggered--remove it from this list." Translating +#. it as "Remove" is acceptable if you can't think of a more precise +#. word. +#: ../pidgin/gtknotify.c:1654 +msgid "Dismiss" +msgstr "" + +#: ../pidgin/gtknotify.c:1699 +msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>" +msgstr "" + +#: ../pidgin/gtkplugin.c:284 +msgid "The following plugins will be unloaded." +msgstr "" + +#: ../pidgin/gtkplugin.c:303 +msgid "Multiple plugins will be unloaded." +msgstr "" + +#: ../pidgin/gtkplugin.c:307 +msgid "Unload Plugins" +msgstr "" + +#: ../pidgin/gtkplugin.c:324 +msgid "Could not unload plugin" +msgstr "" + +#: ../pidgin/gtkplugin.c:325 +msgid "" +"The plugin could not be unloaded now, but will be disabled at the next " +"startup." +msgstr "" + +#: ../pidgin/gtkplugin.c:462 +#, c-format +msgid "" +"<span foreground=\"red\" weight=\"bold\">Error: %s\n" +"Check the plugin website for an update.</span>" +msgstr "" + +#: ../pidgin/gtkplugin.c:591 +msgid "Author" +msgstr "" + +#: ../pidgin/gtkplugin.c:669 +msgid "<b>Written by:</b>" +msgstr "" + +#: ../pidgin/gtkplugin.c:689 +msgid "<b>Web site:</b>" +msgstr "" + +#: ../pidgin/gtkplugin.c:698 +msgid "<b>Filename:</b>" +msgstr "" + +#: ../pidgin/gtkplugin.c:725 +msgid "Configure Pl_ugin" +msgstr "" + +#: ../pidgin/gtkplugin.c:787 +msgid "<b>Plugin Details</b>" +msgstr "" + +#: ../pidgin/gtkpounce.c:158 +msgid "Select a file" +msgstr "" + +#: ../pidgin/gtkpounce.c:535 +msgid "Modify Buddy Pounce" +msgstr "" + +#. Create the "Pounce on Whom" frame. +#: ../pidgin/gtkpounce.c:550 +msgid "Pounce on Whom" +msgstr "" + +#: ../pidgin/gtkpounce.c:557 ../pidgin/gtkroomlist.c:548 +#: ../pidgin/plugins/disco/gtkdisco.c:653 +msgid "_Account:" +msgstr "" + +#: ../pidgin/gtkpounce.c:577 +msgid "_Buddy name:" +msgstr "" + +#: ../pidgin/gtkpounce.c:611 +msgid "Si_gns on" +msgstr "" + +#: ../pidgin/gtkpounce.c:613 +msgid "Signs o_ff" +msgstr "" + +#: ../pidgin/gtkpounce.c:615 +msgid "Goes a_way" +msgstr "" + +#: ../pidgin/gtkpounce.c:617 +msgid "Ret_urns from away" +msgstr "" + +#: ../pidgin/gtkpounce.c:619 +msgid "Becomes _idle" +msgstr "" + +#: ../pidgin/gtkpounce.c:621 +msgid "Is no longer i_dle" +msgstr "" + +#: ../pidgin/gtkpounce.c:623 +msgid "Starts _typing" +msgstr "" + +#: ../pidgin/gtkpounce.c:625 +msgid "P_auses while typing" +msgstr "" + +#: ../pidgin/gtkpounce.c:627 +msgid "Stops t_yping" +msgstr "" + +#: ../pidgin/gtkpounce.c:629 +msgid "Sends a _message" +msgstr "" + +#: ../pidgin/gtkpounce.c:672 +msgid "Ope_n an IM window" +msgstr "" + +#: ../pidgin/gtkpounce.c:674 +msgid "_Pop up a notification" +msgstr "" + +#: ../pidgin/gtkpounce.c:676 +msgid "Send a _message" +msgstr "" + +#: ../pidgin/gtkpounce.c:678 +msgid "E_xecute a command" +msgstr "" + +#: ../pidgin/gtkpounce.c:680 +msgid "P_lay a sound" +msgstr "" + +#: ../pidgin/gtkpounce.c:686 +msgid "Brows_e..." +msgstr "" + +#: ../pidgin/gtkpounce.c:690 +msgid "Br_owse..." +msgstr "" + +#: ../pidgin/gtkpounce.c:691 ../pidgin/gtkprefs.c:2625 +msgid "Pre_view" +msgstr "" + +#: ../pidgin/gtkpounce.c:831 +msgid "P_ounce only when my status is not Available" +msgstr "" + +#: ../pidgin/gtkpounce.c:836 +msgid "_Recurring" +msgstr "" + +#: ../pidgin/gtkpounce.c:1256 +msgid "Pounce Target" +msgstr "" + +#: ../pidgin/gtkpounce.c:1430 +msgid "Started typing" +msgstr "" + +#: ../pidgin/gtkpounce.c:1432 +msgid "Paused while typing" +msgstr "" + +#: ../pidgin/gtkpounce.c:1434 +msgid "Signed on" +msgstr "" + +#: ../pidgin/gtkpounce.c:1436 +msgid "Returned from being idle" +msgstr "" + +#: ../pidgin/gtkpounce.c:1438 +msgid "Returned from being away" +msgstr "" + +#: ../pidgin/gtkpounce.c:1440 +msgid "Stopped typing" +msgstr "" + +#: ../pidgin/gtkpounce.c:1442 +msgid "Signed off" +msgstr "" + +#: ../pidgin/gtkpounce.c:1444 +msgid "Became idle" +msgstr "" + +#: ../pidgin/gtkpounce.c:1446 +msgid "Went away" +msgstr "" + +#: ../pidgin/gtkpounce.c:1448 +msgid "Sent a message" +msgstr "" + +#: ../pidgin/gtkpounce.c:1449 +msgid "Unknown.... Please report this!" +msgstr "" + +#: ../pidgin/gtkprefs.c:358 +msgid "(Custom)" +msgstr "" + +#: ../pidgin/gtkprefs.c:423 ../pidgin/gtkprefs.c:543 ../pidgin/gtkprefs.c:551 +#: ../pidgin/pixmaps/emotes/none/none.theme.in.h:1 +msgid "Penguin Pimps" +msgstr "" + +#: ../pidgin/gtkprefs.c:424 +msgid "The default Pidgin sound theme" +msgstr "" + +#: ../pidgin/gtkprefs.c:544 +msgid "The default Pidgin buddy list theme" +msgstr "" + +#: ../pidgin/gtkprefs.c:552 +msgid "The default Pidgin status icon theme" +msgstr "" + +#: ../pidgin/gtkprefs.c:691 ../pidgin/gtkprefs.c:699 +msgid "Theme failed to unpack." +msgstr "" + +#: ../pidgin/gtkprefs.c:740 ../pidgin/gtkprefs.c:781 +msgid "Theme failed to load." +msgstr "" + +#: ../pidgin/gtkprefs.c:784 +msgid "Theme failed to copy." +msgstr "" + +#: ../pidgin/gtkprefs.c:1085 +msgid "Theme Selections" +msgstr "" + +#. Instructions +#: ../pidgin/gtkprefs.c:1088 +msgid "" +"Select a theme that you would like to use from the lists below.\n" +"New themes can be installed by dragging and dropping them onto the theme list." +msgstr "" + +#: ../pidgin/gtkprefs.c:1102 +msgid "Buddy List Theme:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1108 +msgid "Status Icon Theme:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1114 +msgid "Sound Theme:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1120 +msgid "Smiley Theme:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1293 +msgid "Keyboard Shortcuts" +msgstr "" + +#: ../pidgin/gtkprefs.c:1313 +msgid "Cl_ose conversations with the Escape key" +msgstr "" + +#. System Tray +#: ../pidgin/gtkprefs.c:1343 +msgid "System Tray Icon" +msgstr "" + +#: ../pidgin/gtkprefs.c:1344 +msgid "_Show system tray icon:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1347 +msgid "On unread messages" +msgstr "" + +#: ../pidgin/gtkprefs.c:1353 +msgid "Conversation Window" +msgstr "" + +#: ../pidgin/gtkprefs.c:1354 +msgid "_Hide new IM conversations:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1357 ../pidgin/gtkprefs.c:2712 +msgid "When away" +msgstr "" + +#: ../pidgin/gtkprefs.c:1364 +msgid "Minimi_ze new conversation windows" +msgstr "" + +#. All the tab options! +#: ../pidgin/gtkprefs.c:1368 +msgid "Tabs" +msgstr "" + +#: ../pidgin/gtkprefs.c:1370 +msgid "Show IMs and chats in _tabbed windows" +msgstr "" + +#: ../pidgin/gtkprefs.c:1384 +msgid "Show close b_utton on tabs" +msgstr "" + +#: ../pidgin/gtkprefs.c:1387 +msgid "_Placement:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1389 +msgid "Top" +msgstr "" + +#: ../pidgin/gtkprefs.c:1390 +msgid "Bottom" +msgstr "" + +#: ../pidgin/gtkprefs.c:1391 +msgid "Left" +msgstr "" + +#: ../pidgin/gtkprefs.c:1392 +msgid "Right" +msgstr "" + +#: ../pidgin/gtkprefs.c:1393 +msgid "Left Vertical" +msgstr "" + +#: ../pidgin/gtkprefs.c:1394 +msgid "Right Vertical" +msgstr "" + +#: ../pidgin/gtkprefs.c:1400 +msgid "N_ew conversations:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1460 +msgid "Show _formatting on incoming messages" +msgstr "" + +#: ../pidgin/gtkprefs.c:1462 +msgid "Close IMs immediately when the tab is closed" +msgstr "" + +#: ../pidgin/gtkprefs.c:1465 +msgid "Show _detailed information" +msgstr "" + +#: ../pidgin/gtkprefs.c:1467 +msgid "Enable buddy ic_on animation" +msgstr "" + +#: ../pidgin/gtkprefs.c:1474 +msgid "_Notify buddies that you are typing to them" +msgstr "" + +#: ../pidgin/gtkprefs.c:1477 +msgid "Highlight _misspelled words" +msgstr "" + +#: ../pidgin/gtkprefs.c:1481 +msgid "Use smooth-scrolling" +msgstr "" + +#: ../pidgin/gtkprefs.c:1484 +msgid "F_lash window when IMs are received" +msgstr "" + +#: ../pidgin/gtkprefs.c:1488 +msgid "Resize incoming custom smileys" +msgstr "" + +#: ../pidgin/gtkprefs.c:1492 +msgid "Maximum size:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1506 +msgid "Minimum input area height in lines:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1514 +msgid "Font" +msgstr "" + +#: ../pidgin/gtkprefs.c:1516 +msgid "Use font from _theme" +msgstr "" + +#: ../pidgin/gtkprefs.c:1527 +msgid "Conversation _font:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1537 +msgid "Default Formatting" +msgstr "" + +#: ../pidgin/gtkprefs.c:1555 +msgid "" +"This is how your outgoing message text will appear when you use protocols " +"that support formatting." +msgstr "" + +#: ../pidgin/gtkprefs.c:1657 +msgid "Cannot start proxy configuration program." +msgstr "" + +#: ../pidgin/gtkprefs.c:1670 +msgid "Cannot start browser configuration program." +msgstr "" + +#: ../pidgin/gtkprefs.c:1705 +msgid "Disabled" +msgstr "" + +#: ../pidgin/gtkprefs.c:1707 +#, c-format +msgid "Use _automatically detected IP address: %s" +msgstr "" + +#: ../pidgin/gtkprefs.c:1733 +msgid "ST_UN server:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1745 +msgid "<span style=\"italic\">Example: stunserver.org</span>" +msgstr "" + +#: ../pidgin/gtkprefs.c:1760 +msgid "Public _IP:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1772 +msgid "Ports" +msgstr "" + +#: ../pidgin/gtkprefs.c:1775 +msgid "_Enable automatic router port forwarding" +msgstr "" + +#: ../pidgin/gtkprefs.c:1780 +msgid "_Manually specify range of ports to listen on:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1783 +msgid "_Start:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1790 +msgid "_End:" +msgstr "" + +#. TURN server +#: ../pidgin/gtkprefs.c:1802 +msgid "Relay Server (TURN)" +msgstr "" + +#: ../pidgin/gtkprefs.c:1812 +msgid "_TURN server:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1815 +msgid "_UDP Port:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1818 +msgid "T_CP Port:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1821 +msgid "Use_rname:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1823 +msgid "Pass_word:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1854 +msgid "Seamonkey" +msgstr "" + +#: ../pidgin/gtkprefs.c:1855 +msgid "Opera" +msgstr "" + +#: ../pidgin/gtkprefs.c:1856 +msgid "Netscape" +msgstr "" + +#: ../pidgin/gtkprefs.c:1857 +msgid "Mozilla" +msgstr "" + +#: ../pidgin/gtkprefs.c:1858 +msgid "Konqueror" +msgstr "" + +#: ../pidgin/gtkprefs.c:1859 +msgid "Google Chrome" +msgstr "" + +#. Do not move the line below. Code below expects gnome-open to be in +#. * this list immediately after xdg-open! +#: ../pidgin/gtkprefs.c:1862 +msgid "Desktop Default" +msgstr "" + +#: ../pidgin/gtkprefs.c:1863 +msgid "GNOME Default" +msgstr "" + +#: ../pidgin/gtkprefs.c:1864 +msgid "Galeon" +msgstr "" + +#: ../pidgin/gtkprefs.c:1865 +msgid "Firefox" +msgstr "" + +#: ../pidgin/gtkprefs.c:1866 +msgid "Firebird" +msgstr "" + +#: ../pidgin/gtkprefs.c:1867 +msgid "Epiphany" +msgstr "" + +#. Translators: please do not translate "chromium-browser" here! +#: ../pidgin/gtkprefs.c:1869 +msgid "Chromium (chromium-browser)" +msgstr "" + +#. Translators: please do not translate "chrome" here! +#: ../pidgin/gtkprefs.c:1871 +msgid "Chromium (chrome)" +msgstr "" + +#: ../pidgin/gtkprefs.c:1880 +msgid "Manual" +msgstr "" + +#: ../pidgin/gtkprefs.c:1936 +msgid "Browser Selection" +msgstr "" + +#: ../pidgin/gtkprefs.c:1942 +msgid "Browser preferences are configured in GNOME preferences" +msgstr "" + +#: ../pidgin/gtkprefs.c:1961 +msgid "<b>Browser configuration program was not found.</b>" +msgstr "" + +#: ../pidgin/gtkprefs.c:1964 +msgid "Configure _Browser" +msgstr "" + +#: ../pidgin/gtkprefs.c:1977 +msgid "_Browser:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1985 +msgid "_Open link in:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1987 +msgid "Browser default" +msgstr "" + +#: ../pidgin/gtkprefs.c:1988 +msgid "Existing window" +msgstr "" + +#: ../pidgin/gtkprefs.c:1990 +msgid "New tab" +msgstr "" + +#: ../pidgin/gtkprefs.c:2007 +#, c-format +msgid "" +"_Manual:\n" +"(%s for URL)" +msgstr "" + +#: ../pidgin/gtkprefs.c:2031 +msgid "Proxy Server" +msgstr "" + +#: ../pidgin/gtkprefs.c:2038 +msgid "Proxy preferences are configured in GNOME preferences" +msgstr "" + +#: ../pidgin/gtkprefs.c:2060 +msgid "<b>Proxy configuration program was not found.</b>" +msgstr "" + +#: ../pidgin/gtkprefs.c:2063 +msgid "Configure _Proxy" +msgstr "" + +#. This is a global option that affects SOCKS4 usage even with +#. * account-specific proxy settings +#: ../pidgin/gtkprefs.c:2078 +msgid "Use remote _DNS with SOCKS4 proxies" +msgstr "" + +#: ../pidgin/gtkprefs.c:2082 +msgid "Proxy t_ype:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2084 +msgid "No proxy" +msgstr "" + +#: ../pidgin/gtkprefs.c:2123 +msgid "P_ort:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2139 +msgid "User_name:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2200 +msgid "Log _format:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2205 +msgid "Log all _instant messages" +msgstr "" + +#: ../pidgin/gtkprefs.c:2207 +msgid "Log all c_hats" +msgstr "" + +#: ../pidgin/gtkprefs.c:2209 +msgid "Log all _status changes to system log" +msgstr "" + +#: ../pidgin/gtkprefs.c:2366 +msgid "Sound Selection" +msgstr "" + +#: ../pidgin/gtkprefs.c:2377 +#, c-format +msgid "Quietest" +msgstr "" + +#: ../pidgin/gtkprefs.c:2379 +#, c-format +msgid "Quieter" +msgstr "" + +#: ../pidgin/gtkprefs.c:2381 +#, c-format +msgid "Quiet" +msgstr "" + +#: ../pidgin/gtkprefs.c:2385 +#, c-format +msgid "Loud" +msgstr "" + +#: ../pidgin/gtkprefs.c:2387 +#, c-format +msgid "Louder" +msgstr "" + +#: ../pidgin/gtkprefs.c:2389 +#, c-format +msgid "Loudest" +msgstr "" + +#: ../pidgin/gtkprefs.c:2480 +msgid "_Method:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2482 +msgid "Console beep" +msgstr "" + +#: ../pidgin/gtkprefs.c:2489 +msgid "No sounds" +msgstr "" + +#: ../pidgin/gtkprefs.c:2502 +#, c-format +msgid "" +"Sound c_ommand:\n" +"(%s for filename)" +msgstr "" + +#: ../pidgin/gtkprefs.c:2510 +msgid "M_ute sounds" +msgstr "" + +#: ../pidgin/gtkprefs.c:2513 +msgid "Sounds when conversation has _focus" +msgstr "" + +#: ../pidgin/gtkprefs.c:2515 +msgid "_Enable sounds:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2532 +msgid "V_olume:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2593 +msgid "Play" +msgstr "" + +#: ../pidgin/gtkprefs.c:2621 +msgid "_Browse..." +msgstr "" + +#: ../pidgin/gtkprefs.c:2629 +msgid "_Reset" +msgstr "" + +#: ../pidgin/gtkprefs.c:2673 +msgid "_Report idle time:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2678 +msgid "Based on keyboard or mouse use" +msgstr "" + +#: ../pidgin/gtkprefs.c:2685 +msgid "_Minutes before becoming idle:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2691 +msgid "Change to this status when _idle:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2709 +msgid "_Auto-reply:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2713 +msgid "When both away and idle" +msgstr "" + +#. Signon status stuff +#: ../pidgin/gtkprefs.c:2719 +msgid "Status at Startup" +msgstr "" + +#: ../pidgin/gtkprefs.c:2721 +msgid "Use status from last _exit at startup" +msgstr "" + +#: ../pidgin/gtkprefs.c:2730 +msgid "Status to a_pply at startup:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2754 +msgid "Interface" +msgstr "" + +#: ../pidgin/gtkprefs.c:2760 +msgid "Browser" +msgstr "" + +#: ../pidgin/gtkprefs.c:2769 +msgid "Status / Idle" +msgstr "" + +#: ../pidgin/gtkprefs.c:2770 +msgid "Themes" +msgstr "" + +#: ../pidgin/gtkprivacy.c:81 +msgid "Allow all users to contact me" +msgstr "" + +#: ../pidgin/gtkprivacy.c:82 +msgid "Allow only the users on my buddy list" +msgstr "" + +#: ../pidgin/gtkprivacy.c:83 +msgid "Allow only the users below" +msgstr "" + +#: ../pidgin/gtkprivacy.c:84 +msgid "Block all users" +msgstr "" + +#: ../pidgin/gtkprivacy.c:85 +msgid "Block only the users below" +msgstr "" + +#: ../pidgin/gtkprivacy.c:343 +msgid "Privacy" +msgstr "" + +#: ../pidgin/gtkprivacy.c:353 +msgid "Changes to privacy settings take effect immediately." +msgstr "" + +#: ../pidgin/gtkprivacy.c:362 +msgid "Set privacy for:" +msgstr "" + +#. Remove All button +#: ../pidgin/gtkprivacy.c:405 +msgid "Remove Al_l" +msgstr "" + +#: ../pidgin/gtkprivacy.c:491 ../pidgin/gtkprivacy.c:508 +msgid "Permit User" +msgstr "" + +#: ../pidgin/gtkprivacy.c:492 +msgid "Type a user you permit to contact you." +msgstr "" + +#: ../pidgin/gtkprivacy.c:493 +msgid "Please enter the name of the user you wish to be able to contact you." +msgstr "" + +#: ../pidgin/gtkprivacy.c:496 ../pidgin/gtkprivacy.c:512 +msgid "_Permit" +msgstr "" + +#: ../pidgin/gtkprivacy.c:502 +#, c-format +msgid "Allow %s to contact you?" +msgstr "" + +#: ../pidgin/gtkprivacy.c:504 +#, c-format +msgid "Are you sure you wish to allow %s to contact you?" +msgstr "" + +#: ../pidgin/gtkprivacy.c:533 ../pidgin/gtkprivacy.c:547 +msgid "Block User" +msgstr "" + +#: ../pidgin/gtkprivacy.c:534 +msgid "Type a user to block." +msgstr "" + +#: ../pidgin/gtkprivacy.c:535 +msgid "Please enter the name of the user you wish to block." +msgstr "" + +#: ../pidgin/gtkprivacy.c:543 +#, c-format +msgid "Block %s?" +msgstr "" + +#: ../pidgin/gtkprivacy.c:545 +#, c-format +msgid "Are you sure you want to block %s?" +msgstr "" + +#: ../pidgin/gtkrequest.c:302 +msgid "Apply" +msgstr "" + +#: ../pidgin/gtkrequest.c:1552 +msgid "That file already exists" +msgstr "" + +#: ../pidgin/gtkrequest.c:1553 +msgid "Would you like to overwrite it?" +msgstr "" + +#: ../pidgin/gtkrequest.c:1556 +msgid "Overwrite" +msgstr "" + +#: ../pidgin/gtkrequest.c:1557 +msgid "Choose New Name" +msgstr "" + +#: ../pidgin/gtkrequest.c:1656 +msgid "Select Folder..." +msgstr "" + +#. list button +#: ../pidgin/gtkroomlist.c:571 +msgid "_Get List" +msgstr "" + +#. add button +#: ../pidgin/gtkroomlist.c:579 +msgid "_Add Chat" +msgstr "" + +#: ../pidgin/gtksavedstatuses.c:309 +msgid "Are you sure you want to delete the selected saved statuses?" +msgstr "" + +#. Use button +#: ../pidgin/gtksavedstatuses.c:584 ../pidgin/gtksavedstatuses.c:1212 +msgid "_Use" +msgstr "" + +#: ../pidgin/gtksavedstatuses.c:728 +msgid "Title already in use. You must choose a unique title." +msgstr "" + +#: ../pidgin/gtksavedstatuses.c:941 +msgid "Different" +msgstr "" + +#: ../pidgin/gtksavedstatuses.c:1139 +msgid "_Title:" +msgstr "" + +#: ../pidgin/gtksavedstatuses.c:1147 ../pidgin/gtksavedstatuses.c:1431 +msgid "_Status:" +msgstr "" + +#. Different status message expander +#: ../pidgin/gtksavedstatuses.c:1165 +msgid "Use a _different status for some accounts" +msgstr "" + +#. Save & Use button +#: ../pidgin/gtksavedstatuses.c:1219 +msgid "Sa_ve & Use" +msgstr "" + +#: ../pidgin/gtksavedstatuses.c:1415 +#, c-format +msgid "Status for %s" +msgstr "" + +#: ../pidgin/gtksmiley.c:236 +#, c-format +msgid "" +"A custom smiley for '%s' already exists. Please use a different shortcut." +msgstr "" + +#: ../pidgin/gtksmiley.c:238 ../pidgin/gtksmiley.c:351 +msgid "Custom Smiley" +msgstr "" + +#: ../pidgin/gtksmiley.c:239 +msgid "Duplicate Shortcut" +msgstr "" + +#: ../pidgin/gtksmiley.c:400 +msgid "Edit Smiley" +msgstr "" + +#: ../pidgin/gtksmiley.c:400 +msgid "Add Smiley" +msgstr "" + +#: ../pidgin/gtksmiley.c:424 +msgid "_Image:" +msgstr "" + +#. Shortcut text +#: ../pidgin/gtksmiley.c:455 +msgid "S_hortcut text:" +msgstr "" + +#: ../pidgin/gtksmiley.c:569 +msgid "Smiley" +msgstr "" + +#: ../pidgin/gtksmiley.c:579 +msgid "Shortcut Text" +msgstr "" + +#: ../pidgin/gtksmiley.c:864 +msgid "Custom Smiley Manager" +msgstr "" + +#: ../pidgin/gtkstatusbox.c:322 +msgid "Select Buddy Icon" +msgstr "" + +#: ../pidgin/gtkstatusbox.c:455 +msgid "Click to change your buddyicon for this account." +msgstr "" + +#: ../pidgin/gtkstatusbox.c:456 +msgid "Click to change your buddyicon for all accounts." +msgstr "" + +#: ../pidgin/gtkstatusbox.c:718 +msgid "Waiting for network connection" +msgstr "" + +#: ../pidgin/gtkstatusbox.c:1106 +msgid "New status..." +msgstr "" + +#: ../pidgin/gtkstatusbox.c:1107 +msgid "Saved statuses..." +msgstr "" + +#: ../pidgin/gtkstatusbox.c:1771 +msgid "Status Selector" +msgstr "" + +#: ../pidgin/gtkutils.c:690 +msgid "Google Talk" +msgstr "" + +#: ../pidgin/gtkutils.c:691 +msgid "Facebook (XMPP)" +msgstr "" + +#: ../pidgin/gtkutils.c:1475 ../pidgin/gtkutils.c:1504 +#, c-format +msgid "The following error has occurred loading %s: %s" +msgstr "" + +#: ../pidgin/gtkutils.c:1478 ../pidgin/gtkutils.c:1506 +msgid "Failed to load image" +msgstr "" + +#: ../pidgin/gtkutils.c:1582 +#, c-format +msgid "Cannot send folder %s." +msgstr "" + +#: ../pidgin/gtkutils.c:1583 +#, c-format +msgid "" +"%s cannot transfer a folder. You will need to send the files within " +"individually." +msgstr "" + +#: ../pidgin/gtkutils.c:1616 ../pidgin/gtkutils.c:1628 +#: ../pidgin/gtkutils.c:1635 +msgid "You have dragged an image" +msgstr "" + +#: ../pidgin/gtkutils.c:1617 +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 "" + +#: ../pidgin/gtkutils.c:1623 ../pidgin/gtkutils.c:1643 +msgid "Set as buddy icon" +msgstr "" + +#: ../pidgin/gtkutils.c:1624 ../pidgin/gtkutils.c:1644 +msgid "Send image file" +msgstr "" + +#: ../pidgin/gtkutils.c:1625 ../pidgin/gtkutils.c:1644 +msgid "Insert in message" +msgstr "" + +#: ../pidgin/gtkutils.c:1629 +msgid "Would you like to set it as the buddy icon for this user?" +msgstr "" + +#: ../pidgin/gtkutils.c:1636 +msgid "" +"You can send this image as a file transfer, or use it as the buddy icon for " +"this user." +msgstr "" + +#: ../pidgin/gtkutils.c:1637 +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 +#: ../pidgin/gtkutils.c:1694 +msgid "Cannot send launcher" +msgstr "" + +#: ../pidgin/gtkutils.c:1695 +msgid "" +"You dragged a desktop launcher. Most likely you wanted to send the target of" +" this launcher instead of this launcher itself." +msgstr "" + +#: ../pidgin/gtkutils.c:2275 +#, c-format +msgid "" +"<b>File:</b> %s\n" +"<b>File size:</b> %s\n" +"<b>Image size:</b> %dx%d" +msgstr "" + +#: ../pidgin/gtkutils.c:2520 +#, c-format +msgid "The file '%s' is too large for %s. Please try a smaller image.\n" +msgstr "" + +#: ../pidgin/gtkutils.c:2522 +msgid "Icon Error" +msgstr "" + +#: ../pidgin/gtkutils.c:2522 +msgid "Could not set icon" +msgstr "" + +#: ../pidgin/gtkutils.c:3233 +msgid "_Open Link" +msgstr "" + +#: ../pidgin/gtkutils.c:3240 +msgid "_Copy Link Location" +msgstr "" + +#: ../pidgin/gtkutils.c:3262 +msgid "_Copy Email Address" +msgstr "" + +#: ../pidgin/gtkutils.c:3384 +msgid "_Open File" +msgstr "" + +#: ../pidgin/gtkutils.c:3391 +msgid "Open _Containing Directory" +msgstr "" + +#: ../pidgin/gtkutils.c:3440 ../pidgin/gtkwhiteboard.c:754 +msgid "Save File" +msgstr "" + +#: ../pidgin/gtkutils.c:3460 +msgid "_Play Sound" +msgstr "" + +#: ../pidgin/gtkutils.c:3468 +msgid "_Save File" +msgstr "" + +#: ../pidgin/gtkwhiteboard.c:730 +msgid "Do you really want to clear?" +msgstr "" + +#: ../pidgin/gtkwhiteboard.c:857 +msgid "Select color" +msgstr "" + +#. Translators may want to transliterate the name. +#. It is not to be translated. +#: ../pidgin/pidgin.h:51 +msgid "Pidgin" +msgstr "" + +#: ../pidgin/pidginstock.c:83 +msgid "_Alias" +msgstr "" + +#: ../pidgin/pidginstock.c:85 +msgid "Close _tabs" +msgstr "" + +#: ../pidgin/pidginstock.c:87 +msgid "_Get Info" +msgstr "" + +#: ../pidgin/pidginstock.c:88 +msgid "_Invite" +msgstr "" + +#: ../pidgin/pidginstock.c:89 +msgid "_Modify..." +msgstr "" + +#: ../pidgin/pidginstock.c:90 +msgid "_Add..." +msgstr "" + +#: ../pidgin/pidginstock.c:91 +msgid "_Open Mail" +msgstr "" + +#: ../pidgin/pidginstock.c:93 +msgid "_Edit" +msgstr "" + +#: ../pidgin/pidgintooltip.c:124 +msgid "Pidgin Tooltip" +msgstr "" + +#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:2 +msgid "Pidgin smileys" +msgstr "" + +#: ../pidgin/pixmaps/emotes/none/none.theme.in.h:2 +msgid "Selecting this disables graphical emoticons." +msgstr "" + +#: ../pidgin/pixmaps/emotes/none/none.theme.in.h:3 +msgid "none" +msgstr "" + +#: ../pidgin/pixmaps/emotes/small/16/small.theme.in.h:1 +msgid "Small" +msgstr "" + +#: ../pidgin/pixmaps/emotes/small/16/small.theme.in.h:2 +msgid "Smaller versions of the default smileys" +msgstr "" + +#: ../pidgin/plugins/cap/cap.c:446 ../pidgin/plugins/cap/cap.c:449 +msgid "Response Probability:" +msgstr "" + +#: ../pidgin/plugins/cap/cap.c:774 +msgid "Statistics Configuration" +msgstr "" + +#. msg_difference spinner +#: ../pidgin/plugins/cap/cap.c:777 +msgid "Maximum response timeout:" +msgstr "" + +#: ../pidgin/plugins/cap/cap.c:780 ../pidgin/plugins/cap/cap.c:787 +#: ../pidgin/plugins/cap/cap.c:794 ../pidgin/plugins/timestamp.c:156 +msgid "minutes" +msgstr "" + +#. last_seen spinner +#: ../pidgin/plugins/cap/cap.c:784 +msgid "Maximum last-seen difference:" +msgstr "" + +#. threshold spinner +#: ../pidgin/plugins/cap/cap.c:791 +msgid "Threshold:" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/cap/cap.c:899 +msgid "Contact Availability Prediction" +msgstr "" + +#. *< name +#. *< version +#: ../pidgin/plugins/cap/cap.c:901 +msgid "Contact Availability Prediction plugin." +msgstr "" + +#. * summary +#: ../pidgin/plugins/cap/cap.c:902 +msgid "Displays statistical information about your buddies' availability" +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:61 +msgid "Buddy is idle" +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:62 +msgid "Buddy is away" +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:63 +msgid "Buddy is \"extended\" away" +msgstr "" + +#. Not used yet. +#: ../pidgin/plugins/contact_priority.c:66 +msgid "Buddy is mobile" +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:68 +msgid "Buddy is offline" +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:90 +msgid "Point values to use when..." +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:118 +msgid "" +"The buddy with the <i>largest score</i> is the buddy who will have priority " +"in the contact.\n" +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:125 +msgid "Use last buddy when scores are equal" +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:130 +msgid "Point values to use for account..." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/contact_priority.c:188 +msgid "Contact Priority" +msgstr "" + +#. *< name +#. *< version +#. *< summary +#: ../pidgin/plugins/contact_priority.c:191 +msgid "" +"Allows for controlling the values associated with different buddy states." +msgstr "" + +#. *< description +#: ../pidgin/plugins/contact_priority.c:193 +msgid "" +"Allows for changing the point values of idle/away/offline states for buddies" +" in contact priority computations." +msgstr "" + +#: ../pidgin/plugins/convcolors.c:23 +msgid "Conversation Colors" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:25 ../pidgin/plugins/convcolors.c:26 +msgid "Customize colors in the conversation window" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:87 +msgid "Error Messages" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:88 +msgid "Highlighted Messages" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:89 +msgid "System Messages" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:90 +msgid "Sent Messages" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:91 +msgid "Received Messages" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:232 ../pidgin/plugins/pidginrc.c:271 +#, c-format +msgid "Select Color for %s" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:388 +msgid "Ignore incoming format" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:389 +msgid "Apply in Chats" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:390 +msgid "Apply in IMs" +msgstr "" + +#. Note to translators: The string "Enter an XMPP Server" is asking the +#. user to type the name of an XMPP server which will then be queried +#: ../pidgin/plugins/disco/gtkdisco.c:242 +msgid "Server name request" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:242 +msgid "Enter an XMPP Server" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:243 +msgid "Select an XMPP server to query" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:245 +msgid "Find Services" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:302 +msgid "Add to Buddy List" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:474 +msgid "Gateway" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:478 +msgid "Directory" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:486 +msgid "PubSub Collection" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:490 +msgid "PubSub Leaf" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:494 +msgid "Other" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:502 +msgid "" +"\n" +"<b>Description:</b> " +msgstr "" + +#. Create the window. +#: ../pidgin/plugins/disco/gtkdisco.c:637 +msgid "Service Discovery" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:678 +msgid "_Browse" +msgstr "" + +#: ../pidgin/plugins/disco/xmppdisco.c:515 +msgid "Server does not exist" +msgstr "" + +#: ../pidgin/plugins/disco/xmppdisco.c:520 +msgid "Server does not support service discovery" +msgstr "" + +#: ../pidgin/plugins/disco/xmppdisco.c:600 +#: ../pidgin/plugins/disco/xmppdisco.c:659 +msgid "XMPP Service Discovery" +msgstr "" + +#: ../pidgin/plugins/disco/xmppdisco.c:661 +msgid "Allows browsing and registering services." +msgstr "" + +#: ../pidgin/plugins/disco/xmppdisco.c:662 +msgid "" +"This plugin is useful for registering with legacy transports or other XMPP " +"services." +msgstr "" + +#: ../pidgin/plugins/extplacement.c:80 +msgid "By conversation count" +msgstr "" + +#: ../pidgin/plugins/extplacement.c:101 +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 +#: ../pidgin/plugins/extplacement.c:105 +msgid "" +"Note: The preference for \"New conversations\" must be set to \"By " +"conversation count\"." +msgstr "" + +#: ../pidgin/plugins/extplacement.c:111 +msgid "Number of conversations per window" +msgstr "" + +#: ../pidgin/plugins/extplacement.c:117 +msgid "Separate IM and Chat windows when placing by number" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/extplacement.c:146 +msgid "ExtPlacement" +msgstr "" + +#. *< name +#. *< version +#: ../pidgin/plugins/extplacement.c:148 +msgid "Extra conversation placement options." +msgstr "" + +#. *< summary +#. * description +#: ../pidgin/plugins/extplacement.c:150 +msgid "" +"Restrict the number of conversations per windows, optionally separating IMs " +"and Chats" +msgstr "" + +#. Configuration frame +#: ../pidgin/plugins/gestures/gestures.c:243 +msgid "Mouse Gestures Configuration" +msgstr "" + +#: ../pidgin/plugins/gestures/gestures.c:250 +#: ../pidgin/plugins/gestures/gestures.c:263 +msgid "Middle mouse button" +msgstr "" + +#: ../pidgin/plugins/gestures/gestures.c:251 +#: ../pidgin/plugins/gestures/gestures.c:268 +msgid "Right mouse button" +msgstr "" + +#. "Visual gesture display" checkbox +#: ../pidgin/plugins/gestures/gestures.c:281 +msgid "_Visual gesture display" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/gestures/gestures.c:317 +msgid "Mouse Gestures" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/gestures/gestures.c:320 +msgid "Provides support for mouse gestures" +msgstr "" + +#. * description +#: ../pidgin/plugins/gestures/gestures.c:322 +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 "" + +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:142 +msgid "Instant Messaging" +msgstr "" + +#. Add the label. +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:463 +msgid "Select a person from your address book below, or add a new person." +msgstr "" + +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:547 +#: ../pidgin/plugins/gevolution/new_person_dialog.c:299 +msgid "Group:" +msgstr "" + +#. "New Person" button +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:566 +#: ../pidgin/plugins/gevolution/assoc-buddy.c:450 +#: ../pidgin/plugins/gevolution/new_person_dialog.c:246 +msgid "New Person" +msgstr "" + +#. "Select Buddy" button +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:583 +msgid "Select Buddy" +msgstr "" + +#. Add the label. +#: ../pidgin/plugins/gevolution/assoc-buddy.c:343 +msgid "" +"Select a person from your address book to add this buddy to, or create a new" +" person." +msgstr "" + +#. Add the expander +#: ../pidgin/plugins/gevolution/assoc-buddy.c:423 +msgid "User _details" +msgstr "" + +#. "Associate Buddy" button +#: ../pidgin/plugins/gevolution/assoc-buddy.c:467 +msgid "_Associate Buddy" +msgstr "" + +#: ../pidgin/plugins/gevolution/gevolution.c:251 +#: ../pidgin/plugins/gevolution/gevolution.c:257 +msgid "Unable to send email" +msgstr "" + +#: ../pidgin/plugins/gevolution/gevolution.c:252 +msgid "The evolution executable was not found in the PATH." +msgstr "" + +#: ../pidgin/plugins/gevolution/gevolution.c:258 +msgid "An email address was not found for this buddy." +msgstr "" + +#: ../pidgin/plugins/gevolution/gevolution.c:284 +msgid "Add to Address Book" +msgstr "" + +#: ../pidgin/plugins/gevolution/gevolution.c:296 +msgid "Send Email" +msgstr "" + +#. Configuration frame +#: ../pidgin/plugins/gevolution/gevolution.c:432 +msgid "Evolution Integration Configuration" +msgstr "" + +#. Label +#: ../pidgin/plugins/gevolution/gevolution.c:435 +msgid "Select all accounts that buddies should be auto-added to." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/gevolution/gevolution.c:538 +msgid "Evolution Integration" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../pidgin/plugins/gevolution/gevolution.c:541 +#: ../pidgin/plugins/gevolution/gevolution.c:543 +msgid "Provides integration with Evolution." +msgstr "" + +#: ../pidgin/plugins/gevolution/new_person_dialog.c:260 +msgid "Please enter the person's information below." +msgstr "" + +#: ../pidgin/plugins/gevolution/new_person_dialog.c:264 +msgid "Please enter the buddy's username and account type below." +msgstr "" + +#: ../pidgin/plugins/gevolution/new_person_dialog.c:284 +msgid "Account type:" +msgstr "" + +#. Optional Information section +#: ../pidgin/plugins/gevolution/new_person_dialog.c:308 +msgid "Optional information:" +msgstr "" + +#: ../pidgin/plugins/gevolution/new_person_dialog.c:343 +msgid "First name:" +msgstr "" + +#: ../pidgin/plugins/gevolution/new_person_dialog.c:355 +msgid "Last name:" +msgstr "" + +#: ../pidgin/plugins/gevolution/new_person_dialog.c:375 +msgid "Email:" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/gtk-signals-test.c:161 +msgid "GTK Signals Test" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../pidgin/plugins/gtk-signals-test.c:164 +#: ../pidgin/plugins/gtk-signals-test.c:166 +msgid "Test to see that all ui signals are working properly." +msgstr "" + +#: ../pidgin/plugins/gtkbuddynote.c:38 +#, c-format +msgid "" +"\n" +"<b>Buddy Note</b>: %s" +msgstr "" + +#: ../pidgin/plugins/history.c:205 +msgid "History" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/iconaway.c:82 +msgid "Iconify on Away" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../pidgin/plugins/iconaway.c:85 ../pidgin/plugins/iconaway.c:87 +msgid "Iconifies the buddy list and your conversations when you go away." +msgstr "" + +#: ../pidgin/plugins/mailchk.c:160 +msgid "Mail Checker" +msgstr "" + +#: ../pidgin/plugins/mailchk.c:162 +msgid "Checks for new local mail." +msgstr "" + +#: ../pidgin/plugins/mailchk.c:163 +msgid "Adds a small box to the buddy list that shows if you have new mail." +msgstr "" + +#: ../pidgin/plugins/markerline.c:23 +msgid "Markerline" +msgstr "" + +#: ../pidgin/plugins/markerline.c:25 ../pidgin/plugins/markerline.c:26 +msgid "Draw a line to indicate new messages in a conversation." +msgstr "" + +#: ../pidgin/plugins/markerline.c:240 +msgid "Jump to markerline" +msgstr "" + +#: ../pidgin/plugins/markerline.c:274 +msgid "Draw Markerline in " +msgstr "" + +#: ../pidgin/plugins/markerline.c:278 ../pidgin/plugins/notify.c:688 +msgid "_IM windows" +msgstr "" + +#: ../pidgin/plugins/markerline.c:282 ../pidgin/plugins/notify.c:695 +msgid "C_hat windows" +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:44 +msgid "" +"A music messaging session has been requested. Please click the MM icon to " +"accept." +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:45 +msgid "Music messaging session confirmed." +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:430 +msgid "Music Messaging" +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:431 +msgid "There was a conflict in running the command:" +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:539 +msgid "Error Running Editor" +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:540 +msgid "The following error has occurred:" +msgstr "" + +#. Configuration frame +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:639 +msgid "Music Messaging Configuration" +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:643 +msgid "Score Editor Path" +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:644 +msgid "_Apply" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:685 +msgid "Music Messaging Plugin for collaborative composition." +msgstr "" + +#. * summary +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:687 +msgid "" +"The Music Messaging Plugin allows a number of users to simultaneously work " +"on a piece of music by editing a common score in real-time." +msgstr "" + +#. ---------- "Notify For" ---------- +#: ../pidgin/plugins/notify.c:684 +msgid "Notify For" +msgstr "" + +#: ../pidgin/plugins/notify.c:703 +msgid "\t_Only when someone says your username" +msgstr "" + +#: ../pidgin/plugins/notify.c:713 +msgid "_Focused windows" +msgstr "" + +#. ---------- "Notification Methods" ---------- +#: ../pidgin/plugins/notify.c:721 +msgid "Notification Methods" +msgstr "" + +#: ../pidgin/plugins/notify.c:728 +msgid "Prepend _string into window title:" +msgstr "" + +#. Count method button +#: ../pidgin/plugins/notify.c:747 +msgid "Insert c_ount of new messages into window title" +msgstr "" + +#. Count xprop method button +#: ../pidgin/plugins/notify.c:756 +msgid "Insert count of new message into _X property" +msgstr "" + +#. Urgent method button +#: ../pidgin/plugins/notify.c:764 +msgid "Set window manager \"_URGENT\" hint" +msgstr "" + +#: ../pidgin/plugins/notify.c:766 +msgid "_Flash window" +msgstr "" + +#. Raise window method button +#: ../pidgin/plugins/notify.c:775 +msgid "R_aise conversation window" +msgstr "" + +#. Present conversation method button +#: ../pidgin/plugins/notify.c:783 +msgid "_Present conversation window" +msgstr "" + +#. ---------- "Notification Removals" ---------- +#: ../pidgin/plugins/notify.c:791 +msgid "Notification Removal" +msgstr "" + +#. Remove on focus button +#: ../pidgin/plugins/notify.c:796 +msgid "Remove when conversation window _gains focus" +msgstr "" + +#. Remove on click button +#: ../pidgin/plugins/notify.c:803 +msgid "Remove when conversation window _receives click" +msgstr "" + +#. Remove on type button +#: ../pidgin/plugins/notify.c:811 +msgid "Remove when _typing in conversation window" +msgstr "" + +#. Remove on message send button +#: ../pidgin/plugins/notify.c:819 +msgid "Remove when a _message gets sent" +msgstr "" + +#. Remove on conversation switch button +#: ../pidgin/plugins/notify.c:828 +msgid "Remove on switch to conversation ta_b" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/notify.c:921 +msgid "Message Notification" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../pidgin/plugins/notify.c:924 ../pidgin/plugins/notify.c:926 +msgid "Provides a variety of ways of notifying you of unread messages." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/pidgininc.c:91 +msgid "Pidgin Demonstration Plugin" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/pidgininc.c:94 +msgid "An example plugin that does stuff - see the description." +msgstr "" + +#. * description +#: ../pidgin/plugins/pidgininc.c:96 +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 "" + +#: ../pidgin/plugins/pidginrc.c:55 +msgid "Hyperlink Color" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:56 +msgid "Visited Hyperlink Color" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:59 +msgid "Highlighted Message Name Color" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:61 +msgid "Typing Notification Color" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:72 +msgid "GtkTreeView Horizontal Separation" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:89 +msgid "Conversation Entry" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:90 +msgid "Conversation History" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:91 +msgid "Request Dialog" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:92 +msgid "Notify Dialog" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:273 ../pidgin/plugins/themeedit.c:154 +msgid "Select Color" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:326 +#, c-format +msgid "Select Interface Font" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:329 +#, c-format +msgid "Select Font for %s" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:422 +msgid "GTK+ Interface Font" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:482 +msgid "GTK+ Text Shortcut Theme" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:514 +msgid "Disable Typing Notification Text" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:561 +msgid "GTK+ Theme Control Settings" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:569 +msgid "Colors" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:572 +msgid "Fonts" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:575 +msgid "Miscellaneous" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:580 +msgid "Gtkrc File Tools" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:585 +#, c-format +msgid "Write settings to %s%sgtkrc-2.0" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:593 +msgid "Re-read gtkrc files" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:627 +msgid "Pidgin GTK+ Theme Control" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:629 ../pidgin/plugins/pidginrc.c:630 +msgid "Provides access to commonly used gtkrc settings." +msgstr "" + +#: ../pidgin/plugins/raw.c:175 +msgid "Raw" +msgstr "" + +#: ../pidgin/plugins/raw.c:177 +msgid "Lets you send raw input to text-based protocols." +msgstr "" + +#: ../pidgin/plugins/raw.c:178 +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 "" + +#: ../pidgin/plugins/relnot.c:111 +#, c-format +msgid "You can upgrade to %s %s today." +msgstr "" + +#: ../pidgin/plugins/relnot.c:116 +msgid "New Version Available" +msgstr "" + +#: ../pidgin/plugins/relnot.c:119 +msgid "Later" +msgstr "" + +#: ../pidgin/plugins/relnot.c:120 +msgid "Download Now" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/relnot.c:199 +msgid "Release Notification" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/relnot.c:202 +msgid "Checks periodically for new releases." +msgstr "" + +#. * description +#: ../pidgin/plugins/relnot.c:204 +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 +#: ../pidgin/plugins/sendbutton.c:176 +msgid "Send Button" +msgstr "" + +#. *< name +#. *< version +#: ../pidgin/plugins/sendbutton.c:178 +msgid "Conversation Window Send Button." +msgstr "" + +#. *< summary +#: ../pidgin/plugins/sendbutton.c:179 +msgid "" +"Adds a Send button to the entry area of the conversation window. Intended " +"for use when no physical keyboard is present." +msgstr "" + +#: ../pidgin/plugins/spellchk.c:1971 +msgid "Duplicate Correction" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:1972 +msgid "The specified word already exists in the correction list." +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2172 +msgid "Text Replacements" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2186 +msgid "You type" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2200 +msgid "You send" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2214 +msgid "Whole words only" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2226 +msgid "Case sensitive" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2254 +msgid "Add a new text replacement" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2270 +msgid "You _type:" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2274 +msgid "You _send:" +msgstr "" + +#. Created here so it can be passed to whole_words_button_toggled. +#: ../pidgin/plugins/spellchk.c:2277 +msgid "_Exact case match (uncheck for automatic case handling)" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2279 +msgid "Only replace _whole words" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2304 +msgid "General Text Replacement Options" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2305 +msgid "Enable replacement of last word on send" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2338 +msgid "Text replacement" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2340 ../pidgin/plugins/spellchk.c:2341 +msgid "Replaces text in outgoing messages according to user-defined rules." +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:68 +msgid "Just logged in" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:69 +msgid "Just logged out" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:70 +msgid "" +"Icon for Contact/\n" +"Icon for Unknown person" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:71 +msgid "Icon for Chat" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:74 +msgid "Ignored" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:75 +msgid "Founder" +msgstr "" + +#. A user in a chat room who has special privileges. +#: ../pidgin/plugins/themeedit-icon.c:77 +msgid "Operator" +msgstr "" + +#. A half operator is someone who has a subset of the privileges +#. that an operator has. +#: ../pidgin/plugins/themeedit-icon.c:80 +msgid "Half Operator" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:84 +msgid "Authorization dialog" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:85 +msgid "Error dialog" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:86 +msgid "Information dialog" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:87 +msgid "Mail dialog" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:88 +msgid "Question dialog" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:89 +msgid "Warning dialog" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:91 +msgid "What kind of dialog is this?" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:99 +msgid "Status Icons" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:100 +msgid "Chatroom Emblems" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:101 +msgid "Dialog Icons" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:264 +msgid "Pidgin Icon Theme Editor" +msgstr "" + +#: ../pidgin/plugins/themeedit.c:242 +msgid "Contact" +msgstr "" + +#: ../pidgin/plugins/themeedit.c:266 +msgid "Pidgin Buddylist Theme Editor" +msgstr "" + +#: ../pidgin/plugins/themeedit.c:332 +msgid "Edit Buddylist Theme" +msgstr "" + +#: ../pidgin/plugins/themeedit.c:334 +msgid "Edit Icon Theme" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. * description +#: ../pidgin/plugins/themeedit.c:352 ../pidgin/plugins/themeedit.c:357 +msgid "Pidgin Theme Editor" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/themeedit.c:355 +msgid "Pidgin Theme Editor." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/ticker/ticker.c:75 ../pidgin/plugins/ticker/ticker.c:372 +msgid "Buddy Ticker" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../pidgin/plugins/ticker/ticker.c:375 ../pidgin/plugins/ticker/ticker.c:377 +msgid "A horizontal scrolling version of the buddy list." +msgstr "" + +#: ../pidgin/plugins/timestamp.c:143 +msgid "Display Timestamps Every" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/timestamp.c:208 +msgid "Timestamp" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/timestamp.c:211 +msgid "Display iChat-style timestamps" +msgstr "" + +#. * description +#: ../pidgin/plugins/timestamp.c:213 +msgid "Display iChat-style timestamps every N minutes." +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:35 +#: ../pidgin/plugins/timestamp_format.c:204 +msgid "Timestamp Format Options" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:38 +msgid "_Force timestamp format:" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:43 +msgid "Use system default" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:44 +msgid "12 hour time format" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:45 +msgid "24 hour time format" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:49 +msgid "Show dates in..." +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:54 +msgid "Co_nversations:" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:56 +#: ../pidgin/plugins/timestamp_format.c:65 +msgid "For delayed messages" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:57 +#: ../pidgin/plugins/timestamp_format.c:66 +msgid "For delayed messages and in chats" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:63 +msgid "_Message Logs:" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/timestamp_format.c:272 +msgid "Message Timestamp Formats" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/timestamp_format.c:275 +msgid "Customizes the message timestamp formats." +msgstr "" + +#. * description +#: ../pidgin/plugins/timestamp_format.c:277 +msgid "" +"This plugin allows the user to customize conversation and logging message " +"timestamp formats." +msgstr "" + +#. Alerts +#: ../pidgin/plugins/unity.c:436 +msgid "Chatroom alerts" +msgstr "" + +#: ../pidgin/plugins/unity.c:440 +msgid "Chatroom message alerts _only where someone says your username" +msgstr "" + +#. Launcher integration +#: ../pidgin/plugins/unity.c:449 +msgid "Launcher Icon" +msgstr "" + +#: ../pidgin/plugins/unity.c:453 +msgid "_Disable launcher integration" +msgstr "" + +#: ../pidgin/plugins/unity.c:461 +msgid "Show number of unread _messages on launcher icon" +msgstr "" + +#: ../pidgin/plugins/unity.c:469 +msgid "Show number of unread co_nversations on launcher icon" +msgstr "" + +#. Messaging menu integration +#: ../pidgin/plugins/unity.c:478 +msgid "Messaging Menu" +msgstr "" + +#: ../pidgin/plugins/unity.c:483 +msgid "Show number of _unread messages for conversations in messaging menu" +msgstr "" + +#: ../pidgin/plugins/unity.c:491 +msgid "Show _elapsed time for unread conversations in messaging menu" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/unity.c:598 +msgid "Unity Integration" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/unity.c:601 +msgid "Provides integration with Unity." +msgstr "" + +#. * description +#: ../pidgin/plugins/unity.c:603 +msgid "Provides integration with Unity's messaging menu and launcher." +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:303 +msgid "Audio" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:305 +msgid "Video" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:316 ../pidgin/plugins/vvconfig.c:323 +msgid "Output" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:316 ../pidgin/plugins/vvconfig.c:323 +msgid "_Plugin" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:317 ../pidgin/plugins/vvconfig.c:324 +msgid "_Device" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:319 ../pidgin/plugins/vvconfig.c:326 +msgid "Input" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:319 ../pidgin/plugins/vvconfig.c:326 +msgid "P_lugin" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:320 ../pidgin/plugins/vvconfig.c:327 +msgid "D_evice" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:622 +msgid "DROP" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:679 +msgid "Volume:" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:683 +msgid "Silence threshold:" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:730 +msgid "Input and Output Settings" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:735 +msgid "Microphone Test" +msgstr "" + +#. *< magic +#. *< major version +#. *< minor version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/vvconfig.c:776 +msgid "Voice/Video Settings" +msgstr "" + +#. *< name +#. *< version +#: ../pidgin/plugins/vvconfig.c:778 +msgid "Configure your microphone and webcam." +msgstr "" + +#. *< summary +#: ../pidgin/plugins/vvconfig.c:779 +msgid "Configure microphone and webcam settings for voice/video calls." +msgstr "" + +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:173 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:588 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:635 +msgid "Opacity:" +msgstr "" + +#. IM Convo trans options +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:552 +msgid "IM Conversation Windows" +msgstr "" + +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:553 +msgid "_IM window transparency" +msgstr "" + +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:567 +msgid "_Show slider bar in IM window" +msgstr "" + +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:574 +msgid "Remove IM window transparency on focus" +msgstr "" + +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:577 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:625 +msgid "Always on top" +msgstr "" + +#. Buddy List trans options +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:609 +msgid "Buddy List Window" +msgstr "" + +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:610 +msgid "_Buddy List window transparency" +msgstr "" + +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:623 +msgid "Remove Buddy List window transparency on focus" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:683 +msgid "Transparency" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:686 +msgid "Variable Transparency for the buddy list and conversations." +msgstr "" + +#. * description +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:688 +msgid "" +"This plugin enables variable alpha transparency on conversation windows and the buddy list.\n" +"\n" +"* Note: This plugin requires Win2000 or greater." +msgstr "" + +#. Autostart +#: ../pidgin/plugins/win32/winprefs/winprefs.c:280 +msgid "Startup" +msgstr "" + +#: ../pidgin/plugins/win32/winprefs/winprefs.c:281 +#, c-format +msgid "_Start %s on Windows startup" +msgstr "" + +#: ../pidgin/plugins/win32/winprefs/winprefs.c:293 +msgid "Allow multiple instances" +msgstr "" + +#: ../pidgin/plugins/win32/winprefs/winprefs.c:304 +msgid "_Dockable Buddy List" +msgstr "" + +#. Blist On Top +#: ../pidgin/plugins/win32/winprefs/winprefs.c:308 +msgid "_Keep Buddy List window on top:" +msgstr "" + +#. XXX: Did this ever work? +#: ../pidgin/plugins/win32/winprefs/winprefs.c:313 +msgid "Only when docked" +msgstr "" + +#: ../pidgin/plugins/win32/winprefs/winprefs.c:343 +msgid "Windows Pidgin Options" +msgstr "" + +#: ../pidgin/plugins/win32/winprefs/winprefs.c:345 +msgid "Options specific to Pidgin for Windows." +msgstr "" + +#: ../pidgin/plugins/win32/winprefs/winprefs.c:346 +msgid "" +"Provides options specific to Pidgin for Windows, such as buddy list docking." +msgstr "" + +#: ../pidgin/plugins/xmppconsole.c:684 +msgid "<font color='#777777'>Logged out.</font>" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/xmppconsole.c:760 ../pidgin/plugins/xmppconsole.c:832 +#: ../pidgin/plugins/xmppconsole.c:851 +msgid "XMPP Console" +msgstr "" + +#: ../pidgin/plugins/xmppconsole.c:767 +msgid "Account: " +msgstr "" + +#: ../pidgin/plugins/xmppconsole.c:789 +msgid "<font color='#777777'>Not connected to XMPP</font>" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/xmppconsole.c:854 +msgid "Send and receive raw XMPP stanzas." +msgstr "" + +#. * description +#: ../pidgin/plugins/xmppconsole.c:856 +msgid "This plugin is useful for debugging XMPP servers or clients." +msgstr "" + +#. $(^Name) is the current Version name (e.g. Pidgin 2.7.0). $_CLICK will +#. become a translated version of "Click Next to continue." DO NOT translate +#. the CLICK in $_CLICK. It will break the installer. +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:2 +msgid "" +"$(^Name) is released under the GNU General Public License (GPL). The license" +" is provided here for information purposes only. $_CLICK" +msgstr "" + +#. Installer Subsection Detailed Description +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:4 +msgid "A multi-platform GUI toolkit, used by Pidgin" +msgstr "" + +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:5 +msgid "" +"An instance of Pidgin is currently running. Please exit Pidgin and try " +"again." +msgstr "" + +#. Installer Subsection Detailed Description +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:7 +msgid "Core Pidgin files and dlls" +msgstr "" + +#. Installer Subsection Detailed Description +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:9 +msgid "Create a Start Menu entry for Pidgin" +msgstr "" + +#. Installer Subsection Detailed Description +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:11 +msgid "Create a shortcut to Pidgin on the Desktop" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:13 +msgid "Debug Symbols (for reporting crashes)" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:15 +msgid "Desktop" +msgstr "" + +#. $R2 will display the URL that the GTK+ Runtime failed to download from +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:17 +msgid "" +"Error Downloading the GTK+ Runtime ($R2).$\\rThis is required for Pidgin to " +"function; if retrying fails, you may need to use the 'Offline Installer' " +"from http://pidgin.im/download/windows/ ." +msgstr "" + +#. $R2 will display the URL that the Debug Symbols failed to download from +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:19 +msgid "" +"Error Installing Debug Symbols ($R2).$\\rIf retrying fails, you may need to " +"use the 'Offline Installer' from http://pidgin.im/download/windows/ ." +msgstr "" + +#. $R3 will display the URL that the Dictionary failed to download from +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:22 +#, no-c-format +msgid "" +"Error Installing Spellchecking ($R3).$\\rIf retrying fails, manual " +"installation instructions are at: " +"http://developer.pidgin.im/wiki/Installing%20Pidgin#manual_win32_spellcheck_installation" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:24 +msgid "GTK+ Runtime (required if not present)" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:26 +msgid "Localizations" +msgstr "" + +#. "Next >" appears on a button on the License Page of the Installer +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:28 +msgid "Next >" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:30 +msgid "Pidgin Instant Messaging Client (required)" +msgstr "" + +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:31 +msgid "" +"Pidgin requires a compatible GTK+ Runtime (which doesn't appear to be " +"already present).$\\rAre you sure you want to skip installing the GTK+ " +"Runtime?" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:33 +msgid "Shortcuts" +msgstr "" + +#. Installer Subsection Detailed Description +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:35 +msgid "Shortcuts for starting Pidgin" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:37 +msgid "Spellchecking Support" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:39 +msgid "Start Menu" +msgstr "" + +#. Installer Subsection Detailed Description +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:41 +msgid "" +"Support for Spellchecking. (Internet connection required for installation)" +msgstr "" + +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:42 +msgid "The installer is already running." +msgstr "" + +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:43 +msgid "" +"The uninstaller could not find registry entries for Pidgin.$\\rIt is likely " +"that another user installed this application." +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:45 +msgid "URI Handlers" +msgstr "" + +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:46 +msgid "" +"Unable to uninstall the currently installed version of Pidgin. The new " +"version will be installed without removing the currently installed version." +msgstr "" + +#. Text displayed on Installer Finish Page +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:48 +msgid "Visit the Pidgin Web Page" +msgstr "" + +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:49 +msgid "You do not have permission to uninstall this application." +msgstr ""
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/po/tt.po Mon Apr 07 20:02:22 2014 +0530 @@ -0,0 +1,19755 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Pidgin\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-03-19 09:57-0500\n" +"PO-Revision-Date: 2014-03-21 01:11+0000\n" +"Last-Translator: Richard Laager <rlaager@wiktel.com>\n" +"Language-Team: Tatar (http://www.transifex.com/projects/p/pidgin/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. Translators may want to transliterate the name. +#. It is not to be translated. +#: ../finch/finch.c:66 ../finch/finch.c:336 ../finch/finch.c:365 +#: ../finch/finch.c:454 +msgid "Finch" +msgstr "" + +#: ../finch/finch.c:247 +#, c-format +msgid "%s. Try `%s -h' for more information.\n" +msgstr "" + +#: ../finch/finch.c:249 +#, 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 "" + +#: ../finch/finch.c:363 ../pidgin/gtkmain.c:772 +#, 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 "" + +#. the user did not fill in the captcha +#: ../finch/gntaccount.c:128 ../finch/gntaccount.c:171 +#: ../finch/gntaccount.c:178 ../finch/gntaccount.c:558 ../finch/gntblist.c:647 +#: ../finch/gntblist.c:817 ../finch/gntplugin.c:198 ../finch/gntplugin.c:246 +#: ../finch/gntrequest.c:398 ../finch/gntstatus.c:303 ../finch/gntstatus.c:312 +#: ../finch/plugins/gntclipboard.c:115 ../finch/plugins/gntclipboard.c:121 +#: ../finch/plugins/gntclipboard.c:128 +#: ../libpurple/protocols/jabber/chat.c:812 +#: ../libpurple/protocols/jabber/chat.c:823 +#: ../libpurple/protocols/jabber/jabber.c:2352 +#: ../libpurple/protocols/jabber/jutil.c:708 +#: ../libpurple/protocols/mxit/login.c:526 +#: ../libpurple/protocols/mxit/protocol.c:2543 +#: ../libpurple/protocols/silc/ops.c:77 ../libpurple/protocols/silc/ops.c:1472 +#: ../libpurple/protocols/silc10/ops.c:1451 +#: ../pidgin/plugins/disco/xmppdisco.c:514 +#: ../pidgin/plugins/disco/xmppdisco.c:519 +msgid "Error" +msgstr "" + +#: ../finch/gntaccount.c:129 ../finch/gntaccount.c:171 +#: ../finch/gntaccount.c:178 +msgid "Account was not modified" +msgstr "" + +#: ../finch/gntaccount.c:129 +msgid "Account was not added" +msgstr "" + +#: ../finch/gntaccount.c:130 +msgid "Username of an account must be non-empty." +msgstr "" + +#: ../finch/gntaccount.c:172 +msgid "" +"The account's protocol cannot be changed while it is connected to the " +"server." +msgstr "" + +#: ../finch/gntaccount.c:179 +msgid "" +"The account's username cannot be changed while it is connected to the " +"server." +msgstr "" + +#: ../finch/gntaccount.c:510 +msgid "New mail notifications" +msgstr "" + +#: ../finch/gntaccount.c:520 +msgid "Remember password" +msgstr "" + +#: ../finch/gntaccount.c:559 +msgid "There are no protocol plugins installed." +msgstr "" + +#: ../finch/gntaccount.c:560 +msgid "(You probably forgot to 'make install'.)" +msgstr "" + +#: ../finch/gntaccount.c:570 ../finch/gntconn.c:138 +#: ../pidgin/gtkaccount.c:1576 ../pidgin/gtkblist.c:5127 +msgid "Modify Account" +msgstr "" + +#: ../finch/gntaccount.c:570 +msgid "New Account" +msgstr "" + +#: ../finch/gntaccount.c:596 ../pidgin/gtkft.c:651 +msgid "Protocol:" +msgstr "" + +#: ../finch/gntaccount.c:604 +#: ../pidgin/plugins/gevolution/new_person_dialog.c:288 +msgid "Username:" +msgstr "" + +#: ../finch/gntaccount.c:617 +msgid "Password:" +msgstr "" + +#: ../finch/gntaccount.c:627 +msgid "Alias:" +msgstr "" + +#. Register checkbox +#: ../finch/gntaccount.c:638 +msgid "Create this account on the server" +msgstr "" + +#. Cancel button +#. Cancel +#: ../finch/gntaccount.c:654 ../finch/gntaccount.c:718 +#: ../finch/gntaccount.c:1014 ../finch/gntblist.c:700 ../finch/gntblist.c:806 +#: ../finch/gntblist.c:854 ../finch/gntblist.c:1210 ../finch/gntblist.c:1449 +#: ../finch/gntblist.c:1583 ../finch/gntblist.c:2762 ../finch/gntblist.c:2813 +#: ../finch/gntblist.c:2887 ../finch/gntblist.c:2949 ../finch/gntcertmgr.c:91 +#: ../finch/gntplugin.c:534 ../finch/gntpounce.c:473 ../finch/gntpounce.c:681 +#: ../finch/gntprefs.c:266 ../finch/gntsound.c:1081 ../finch/gntstatus.c:147 +#: ../finch/gntstatus.c:487 ../finch/gntstatus.c:612 +#: ../finch/plugins/gnthistory.c:182 ../libpurple/account.c:1222 +#: ../libpurple/account.c:1585 ../libpurple/account.c:1620 +#: ../libpurple/conversation.c:1311 ../libpurple/conversation.c:2147 +#: ../libpurple/plugins/buddynote.c:51 ../libpurple/protocols/gg/gg.c:336 +#: ../libpurple/protocols/gg/gg.c:391 ../libpurple/protocols/gg/gg.c:456 +#: ../libpurple/protocols/jabber/buddy.c:681 +#: ../libpurple/protocols/jabber/buddy.c:2214 +#: ../libpurple/protocols/jabber/buddy.c:2263 +#: ../libpurple/protocols/jabber/chat.c:922 +#: ../libpurple/protocols/jabber/jabber.c:1467 +#: ../libpurple/protocols/jabber/jabber.c:1478 +#: ../libpurple/protocols/jabber/jabber.c:2558 +#: ../libpurple/protocols/jabber/jabber.c:3422 +#: ../libpurple/protocols/jabber/si.c:1584 +#: ../libpurple/protocols/jabber/usernick.c:83 +#: ../libpurple/protocols/jabber/xdata.c:404 +#: ../libpurple/protocols/msn/msn.c:452 ../libpurple/protocols/msn/msn.c:577 +#: ../libpurple/protocols/msn/msn.c:640 ../libpurple/protocols/msn/msn.c:655 +#: ../libpurple/protocols/msn/msn.c:672 ../libpurple/protocols/msn/msn.c:689 +#: ../libpurple/protocols/msn/msn.c:710 +#: ../libpurple/protocols/mxit/actions.c:314 +#: ../libpurple/protocols/mxit/actions.c:412 +#: ../libpurple/protocols/mxit/login.c:365 +#: ../libpurple/protocols/mxit/login.c:711 +#: ../libpurple/protocols/myspace/user.c:824 +#: ../libpurple/protocols/myspace/user.c:885 +#: ../libpurple/protocols/oscar/oscar.c:5220 +#: ../libpurple/protocols/oscar/peer.c:1071 +#: ../libpurple/protocols/sametime/sametime.c:3471 +#: ../libpurple/protocols/sametime/sametime.c:3557 +#: ../libpurple/protocols/sametime/sametime.c:5456 +#: ../libpurple/protocols/sametime/sametime.c:5546 +#: ../libpurple/protocols/sametime/sametime.c:5671 +#: ../libpurple/protocols/silc/buddy.c:459 +#: ../libpurple/protocols/silc/buddy.c:1084 +#: ../libpurple/protocols/silc/buddy.c:1199 +#: ../libpurple/protocols/silc/chat.c:622 +#: ../libpurple/protocols/silc/chat.c:756 +#: ../libpurple/protocols/silc/ops.c:1832 +#: ../libpurple/protocols/silc/silc.c:1063 +#: ../libpurple/protocols/silc/silc.c:1271 +#: ../libpurple/protocols/silc10/buddy.c:468 +#: ../libpurple/protocols/silc10/buddy.c:1087 +#: ../libpurple/protocols/silc10/buddy.c:1192 +#: ../libpurple/protocols/silc10/chat.c:600 +#: ../libpurple/protocols/silc10/chat.c:730 +#: ../libpurple/protocols/silc10/ops.c:1910 +#: ../libpurple/protocols/silc10/silc.c:761 +#: ../libpurple/protocols/silc10/silc.c:967 +#: ../libpurple/protocols/yahoo/libymsg.c:1369 +#: ../libpurple/protocols/yahoo/libymsg.c:4575 +#: ../libpurple/protocols/yahoo/libymsg.c:4586 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:589 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:600 +#: ../pidgin/gtkaccount.c:1945 ../pidgin/gtkaccount.c:2480 +#: ../pidgin/gtkblist.c:705 ../pidgin/gtkblist.c:3582 +#: ../pidgin/gtkblist.c:7321 ../pidgin/gtkcertmgr.c:195 +#: ../pidgin/gtkdialogs.c:902 ../pidgin/gtkdialogs.c:1041 +#: ../pidgin/gtkdialogs.c:1133 ../pidgin/gtkdialogs.c:1153 +#: ../pidgin/gtkdialogs.c:1177 ../pidgin/gtkdialogs.c:1199 +#: ../pidgin/gtkdialogs.c:1247 ../pidgin/gtkdialogs.c:1288 +#: ../pidgin/gtkdialogs.c:1344 ../pidgin/gtkdialogs.c:1383 +#: ../pidgin/gtkdialogs.c:1410 ../pidgin/gtkimhtmltoolbar.c:451 +#: ../pidgin/gtklog.c:324 ../pidgin/gtkplugin.c:308 ../pidgin/gtkpounce.c:1127 +#: ../pidgin/gtkprivacy.c:497 ../pidgin/gtkprivacy.c:513 +#: ../pidgin/gtkprivacy.c:538 ../pidgin/gtkprivacy.c:552 +#: ../pidgin/gtkrequest.c:301 ../pidgin/gtksavedstatuses.c:317 +#: ../pidgin/gtkstatusbox.c:1611 ../pidgin/gtkutils.c:1620 +#: ../pidgin/gtkutils.c:1640 ../pidgin/plugins/disco/gtkdisco.c:246 +msgid "Cancel" +msgstr "" + +#. Save button +#. Save +#: ../finch/gntaccount.c:658 ../finch/gntcertmgr.c:311 ../finch/gntdebug.c:341 +#: ../finch/gntplugin.c:534 ../finch/gntpounce.c:479 ../finch/gntprefs.c:266 +#: ../finch/gntsound.c:1078 ../finch/gntstatus.c:490 ../finch/gntstatus.c:600 +#: ../libpurple/account.c:1619 ../libpurple/plugins/buddynote.c:50 +#: ../libpurple/protocols/jabber/buddy.c:680 ../pidgin/gtkblist.c:705 +#: ../pidgin/gtkdebug.c:824 ../pidgin/gtkdebug.c:826 +#: ../pidgin/gtkrequest.c:307 +msgid "Save" +msgstr "" + +#: ../finch/gntaccount.c:711 ../pidgin/gtkaccount.c:1936 +#: ../pidgin/gtksavedstatuses.c:305 ../pidgin/gtkstatusbox.c:1605 +#, c-format +msgid "Are you sure you want to delete %s?" +msgstr "" + +#: ../finch/gntaccount.c:714 +msgid "Delete Account" +msgstr "" + +#. Delete button +#: ../finch/gntaccount.c:717 ../finch/gntaccount.c:832 +#: ../finch/gntcertmgr.c:319 ../finch/gntpounce.c:680 ../finch/gntpounce.c:743 +#: ../finch/gntstatus.c:146 ../finch/gntstatus.c:212 +#: ../pidgin/gtkaccount.c:1944 ../pidgin/gtklog.c:323 +#: ../pidgin/gtkpounce.c:1126 ../pidgin/gtkrequest.c:304 +#: ../pidgin/gtksavedstatuses.c:316 ../pidgin/gtkstatusbox.c:1610 +msgid "Delete" +msgstr "" + +#: ../finch/gntaccount.c:793 ../finch/gntblist.c:2628 ../finch/gntui.c:99 +#: ../pidgin/gtkaccount.c:2341 +msgid "Accounts" +msgstr "" + +#: ../finch/gntaccount.c:799 +msgid "You can enable/disable accounts from the following list." +msgstr "" + +#. Add button +#: ../finch/gntaccount.c:823 ../finch/gntaccount.c:1013 +#: ../finch/gntblist.c:699 ../finch/gntblist.c:806 ../finch/gntblist.c:854 +#: ../finch/gntblist.c:3069 ../finch/gntcertmgr.c:306 ../finch/gntnotify.c:452 +#: ../finch/gntpounce.c:727 ../finch/gntroomlist.c:276 +#: ../finch/gntstatus.c:201 ../libpurple/protocols/gg/gg.c:455 +#: ../libpurple/protocols/sametime/sametime.c:5545 +#: ../libpurple/protocols/silc/chat.c:621 +#: ../libpurple/protocols/silc10/chat.c:599 ../pidgin/gtkaccount.c:2479 +#: ../pidgin/gtkblist.c:7320 ../pidgin/gtkconv.c:1692 +#: ../pidgin/gtkrequest.c:305 +msgid "Add" +msgstr "" + +#. Modify button +#: ../finch/gntaccount.c:828 ../finch/gntpounce.c:735 +msgid "Modify" +msgstr "" + +#: ../finch/gntaccount.c:936 ../pidgin/gtkaccount.c:2426 +#, c-format +msgid "%s%s%s%s has made %s his or her buddy%s%s" +msgstr "" + +#: ../finch/gntaccount.c:1009 ../pidgin/gtkaccount.c:2478 +msgid "Add buddy to your list?" +msgstr "" + +#: ../finch/gntaccount.c:1069 +#, c-format +msgid "%s%s%s%s wants to add %s to his or her buddy list%s%s" +msgstr "" + +#: ../finch/gntaccount.c:1094 ../finch/gntaccount.c:1097 +#: ../finch/gntaccount.c:1124 ../pidgin/gtkaccount.c:2611 +msgid "Authorize buddy?" +msgstr "" + +#: ../finch/gntaccount.c:1101 ../finch/gntaccount.c:1128 +#: ../pidgin/gtkaccount.c:2612 +msgid "Authorize" +msgstr "" + +#: ../finch/gntaccount.c:1102 ../finch/gntaccount.c:1129 +#: ../pidgin/gtkaccount.c:2613 +msgid "Deny" +msgstr "" + +#: ../finch/gntblist.c:278 +#, c-format +msgid "" +"Online: %d\n" +"Total: %d" +msgstr "" + +#: ../finch/gntblist.c:287 +#, c-format +msgid "Account: %s (%s)" +msgstr "" + +#: ../finch/gntblist.c:299 +#, c-format +msgid "" +"\n" +"Last Seen: %s ago" +msgstr "" + +#: ../finch/gntblist.c:319 ../pidgin/gtkprefs.c:422 ../pidgin/gtkprefs.c:543 +#: ../pidgin/gtkprefs.c:551 +#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:1 +#: ../pidgin/plugins/vvconfig.c:87 +msgid "Default" +msgstr "" + +#: ../finch/gntblist.c:636 +msgid "You must provide a username for the buddy." +msgstr "" + +#: ../finch/gntblist.c:638 +msgid "You must provide a group." +msgstr "" + +#: ../finch/gntblist.c:640 +msgid "You must select an account." +msgstr "" + +#: ../finch/gntblist.c:642 +msgid "The selected account is not online." +msgstr "" + +#: ../finch/gntblist.c:647 +msgid "Error adding buddy" +msgstr "" + +#: ../finch/gntblist.c:678 ../libpurple/protocols/jabber/jabber.c:1401 +#: ../libpurple/protocols/jabber/jabber.c:1403 +#: ../libpurple/protocols/oscar/oscar.c:3023 +#: ../libpurple/protocols/silc/buddy.c:1552 +#: ../libpurple/protocols/silc/ops.c:1209 +#: ../libpurple/protocols/silc/ops.c:1212 +#: ../libpurple/protocols/silc/ops.c:1348 +#: ../libpurple/protocols/silc/ops.c:1351 +#: ../libpurple/protocols/silc/silc.c:1245 +#: ../libpurple/protocols/silc10/buddy.c:1559 +#: ../libpurple/protocols/silc10/ops.c:1191 +#: ../libpurple/protocols/silc10/ops.c:1194 +#: ../libpurple/protocols/silc10/ops.c:1340 +#: ../libpurple/protocols/silc10/ops.c:1343 +#: ../libpurple/protocols/silc10/silc.c:941 ../pidgin/gtkaccount.c:2018 +#: ../pidgin/gtksavedstatuses.c:951 +msgid "Username" +msgstr "" + +#: ../finch/gntblist.c:681 +msgid "Alias (optional)" +msgstr "" + +#: ../finch/gntblist.c:684 +msgid "Invite message (optional)" +msgstr "" + +#: ../finch/gntblist.c:687 +msgid "Add in group" +msgstr "" + +#: ../finch/gntblist.c:691 ../finch/gntblist.c:785 ../finch/gntblist.c:1794 +#: ../finch/gntblist.c:2743 ../finch/gntblist.c:2799 ../finch/gntblist.c:2874 +#: ../finch/gntblist.c:2934 ../finch/gntnotify.c:192 ../finch/gntstatus.c:578 +#: ../libpurple/plugins/idle.c:149 ../libpurple/plugins/idle.c:186 +#: ../pidgin/gtkblist.c:3779 ../pidgin/gtknotify.c:712 +#: ../pidgin/gtkpounce.c:1278 ../pidgin/plugins/gevolution/gevolution.c:456 +msgid "Account" +msgstr "" + +#: ../finch/gntblist.c:697 ../finch/gntblist.c:1259 +#: ../libpurple/protocols/silc/buddy.c:730 +#: ../libpurple/protocols/silc/buddy.c:1035 +#: ../libpurple/protocols/silc/buddy.c:1080 +#: ../libpurple/protocols/silc/buddy.c:1190 +#: ../libpurple/protocols/silc10/buddy.c:737 +#: ../libpurple/protocols/silc10/buddy.c:1036 +#: ../libpurple/protocols/silc10/buddy.c:1083 +#: ../libpurple/protocols/silc10/buddy.c:1183 +#: ../libpurple/protocols/yahoo/libymsg.c:4383 ../pidgin/gtkblist.c:7083 +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:451 +msgid "Add Buddy" +msgstr "" + +#: ../finch/gntblist.c:697 +msgid "Please enter buddy information." +msgstr "" + +#: ../finch/gntblist.c:753 ../libpurple/blist.c:1495 +msgid "Chats" +msgstr "" + +#. Extract their Name and put it in +#: ../finch/gntblist.c:791 ../finch/gntblist.c:2738 ../finch/gntblist.c:2794 +#: ../finch/gntblist.c:2929 ../finch/gntroomlist.c:300 +#: ../libpurple/protocols/jabber/jabber.c:1424 +#: ../libpurple/protocols/jabber/jabber.c:1428 +#: ../libpurple/protocols/msn/msn.c:529 ../libpurple/protocols/msn/msn.c:2411 +#: ../libpurple/protocols/msn/msn.c:2476 ../libpurple/protocols/msn/msn.c:2503 +#: ../pidgin/gtkplugin.c:765 ../pidgin/gtkroomlist.c:740 +#: ../pidgin/plugins/disco/gtkdisco.c:554 +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:131 +#: ../pidgin/plugins/gevolution/assoc-buddy.c:122 +msgid "Name" +msgstr "" + +#: ../finch/gntblist.c:794 ../finch/gntblist.c:1735 +#: ../libpurple/protocols/gg/gg.c:1569 ../libpurple/protocols/msn/msn.c:2237 +#: ../libpurple/protocols/mxit/profile.c:206 +#: ../libpurple/protocols/silc/chat.c:612 +#: ../libpurple/protocols/silc10/chat.c:590 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:704 +#: ../libpurple/protocols/zephyr/zephyr.c:797 +#: ../libpurple/protocols/zephyr/zephyr.c:1181 ../pidgin/gtkdialogs.c:1152 +#: ../pidgin/gtkdialogs.c:1176 ../pidgin/gtkdialogs.c:1198 +#: ../pidgin/gtkrequest.c:308 +msgid "Alias" +msgstr "" + +#: ../finch/gntblist.c:797 ../finch/gntblist.c:3085 +#: ../pidgin/plugins/themeedit.c:255 +msgid "Group" +msgstr "" + +#: ../finch/gntblist.c:801 ../finch/gntblist.c:1226 +msgid "Auto-join" +msgstr "" + +#: ../finch/gntblist.c:804 ../finch/gntblist.c:1261 ../pidgin/gtkblist.c:7261 +msgid "Add Chat" +msgstr "" + +#: ../finch/gntblist.c:805 +msgid "You can edit more information from the context menu later." +msgstr "" + +#: ../finch/gntblist.c:817 +msgid "Error adding group" +msgstr "" + +#: ../finch/gntblist.c:818 +msgid "You must give a name for the group to add." +msgstr "" + +#: ../finch/gntblist.c:852 ../finch/gntblist.c:1263 +#: ../libpurple/protocols/sametime/sametime.c:5455 +#: ../libpurple/protocols/sametime/sametime.c:5543 ../pidgin/gtkblist.c:7317 +msgid "Add Group" +msgstr "" + +#: ../finch/gntblist.c:852 +msgid "Enter the name of the group" +msgstr "" + +#: ../finch/gntblist.c:1209 ../pidgin/gtkblist.c:704 +msgid "Edit Chat" +msgstr "" + +#: ../finch/gntblist.c:1209 +msgid "Please Update the necessary fields." +msgstr "" + +#: ../finch/gntblist.c:1210 ../finch/gntstatus.c:207 +msgid "Edit" +msgstr "" + +#: ../finch/gntblist.c:1235 +msgid "Edit Settings" +msgstr "" + +#: ../finch/gntblist.c:1271 ../pidgin/gtkutils.c:1003 +msgid "Information" +msgstr "" + +#: ../finch/gntblist.c:1271 ../pidgin/gtkutils.c:1003 +msgid "Retrieving..." +msgstr "" + +#: ../finch/gntblist.c:1336 ../finch/gntconv.c:629 +#: ../libpurple/protocols/silc/chat.c:910 +#: ../libpurple/protocols/silc10/chat.c:883 +msgid "Get Info" +msgstr "" + +#: ../finch/gntblist.c:1340 ../pidgin/gtkpounce.c:535 +msgid "Add Buddy Pounce" +msgstr "" + +#: ../finch/gntblist.c:1347 ../finch/gntconv.c:641 +#: ../libpurple/protocols/jabber/si.c:1584 +#: ../libpurple/protocols/oscar/userinfo.c:58 ../pidgin/gtkconv.c:1631 +msgid "Send File" +msgstr "" + +#: ../finch/gntblist.c:1354 ../libpurple/protocols/gg/gg.c:1628 +#: ../libpurple/protocols/msn/msn.c:1125 +msgid "Blocked" +msgstr "" + +#: ../finch/gntblist.c:1359 +msgid "Show when offline" +msgstr "" + +#: ../finch/gntblist.c:1444 +#, c-format +msgid "Please enter the new name for %s" +msgstr "" + +#: ../finch/gntblist.c:1446 ../finch/gntblist.c:1735 +msgid "Rename" +msgstr "" + +#: ../finch/gntblist.c:1446 +msgid "Set Alias" +msgstr "" + +#: ../finch/gntblist.c:1447 +msgid "Enter empty string to reset the name." +msgstr "" + +#: ../finch/gntblist.c:1561 +msgid "Removing this contact will also remove all the buddies in the contact" +msgstr "" + +#: ../finch/gntblist.c:1569 +msgid "Removing this group will also remove all the buddies in the group" +msgstr "" + +#: ../finch/gntblist.c:1574 +#, c-format +msgid "Are you sure you want to remove %s?" +msgstr "" + +#. XXX: anything to do with the returned ui-handle? +#: ../finch/gntblist.c:1577 +msgid "Confirm Remove" +msgstr "" + +#: ../finch/gntblist.c:1582 ../finch/gntblist.c:1737 ../finch/gntft.c:246 +#: ../pidgin/gtkconv.c:1689 ../pidgin/gtkrequest.c:306 +#: ../pidgin/gtkstatusbox.c:326 +msgid "Remove" +msgstr "" + +#. Buddy List +#: ../finch/gntblist.c:1711 ../finch/gntblist.c:3126 ../finch/gntprefs.c:259 +#: ../finch/gntui.c:100 ../pidgin/gtkblist.c:5768 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:303 +msgid "Buddy List" +msgstr "" + +#: ../finch/gntblist.c:1742 +msgid "Place tagged" +msgstr "" + +#: ../finch/gntblist.c:1747 +msgid "Toggle Tag" +msgstr "" + +#: ../finch/gntblist.c:1751 ../finch/gntblist.c:2943 +msgid "View Log" +msgstr "" + +#. General +#: ../finch/gntblist.c:1787 ../libpurple/protocols/gg/gg.c:307 +#: ../libpurple/protocols/gg/gg.c:801 ../libpurple/protocols/gg/gg.c:873 +#: ../libpurple/protocols/gg/gg.c:2346 +#: ../libpurple/protocols/jabber/buddy.c:353 +#: ../libpurple/protocols/jabber/buddy.c:1050 +#: ../libpurple/protocols/jabber/buddy.c:2004 +#: ../libpurple/protocols/jabber/buddy.c:2197 +#: ../libpurple/protocols/jabber/jabber.c:1321 +#: ../libpurple/protocols/jabber/jabber.c:2375 +#: ../libpurple/protocols/jabber/jabber.c:2399 +#: ../libpurple/protocols/jabber/jabber.c:2415 +#: ../libpurple/protocols/jabber/jabber.c:2431 +#: ../libpurple/protocols/jabber/jabber.c:2445 +#: ../libpurple/protocols/msn/msn.c:2244 ../libpurple/protocols/msn/msn.c:2414 +#: ../libpurple/protocols/silc/buddy.c:1549 +#: ../libpurple/protocols/silc/ops.c:1015 +#: ../libpurple/protocols/silc/ops.c:1198 +#: ../libpurple/protocols/silc/ops.c:1336 +#: ../libpurple/protocols/silc10/buddy.c:1555 +#: ../libpurple/protocols/silc10/ops.c:1036 +#: ../libpurple/protocols/silc10/ops.c:1179 +#: ../libpurple/protocols/silc10/ops.c:1328 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:546 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1065 ../pidgin/gtkblist.c:3803 +msgid "Nickname" +msgstr "" + +#. Never know what those translations might end up like... +#. Idle stuff +#: ../finch/gntblist.c:1809 ../finch/gntprefs.c:262 +#: ../libpurple/protocols/bonjour/bonjour.c:370 +#: ../libpurple/protocols/jabber/buddy.c:748 +#: ../libpurple/protocols/jabber/jabber.c:2240 +#: ../libpurple/protocols/msn/msn.c:1071 ../libpurple/protocols/msn/msn.c:1088 +#: ../libpurple/protocols/msn/msn.c:1095 ../libpurple/protocols/msn/state.c:38 +#: ../libpurple/protocols/novell/novell.c:2848 +#: ../libpurple/protocols/oscar/userinfo.c:499 +#: ../libpurple/protocols/yahoo/libymsg.c:4102 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:709 ../pidgin/gtkblist.c:3831 +#: ../pidgin/gtkblist.c:4286 ../pidgin/gtkprefs.c:2671 +msgid "Idle" +msgstr "" + +#: ../finch/gntblist.c:1823 +msgid "On Mobile" +msgstr "" + +#: ../finch/gntblist.c:2130 ../pidgin/gtkdocklet.c:585 +msgid "New..." +msgstr "" + +#: ../finch/gntblist.c:2137 ../pidgin/gtkdocklet.c:586 +msgid "Saved..." +msgstr "" + +#: ../finch/gntblist.c:2596 ../finch/gntplugin.c:354 ../finch/gntui.c:105 +#: ../pidgin/gtkplugin.c:720 +msgid "Plugins" +msgstr "" + +#: ../finch/gntblist.c:2751 ../finch/gntblist.c:2756 +msgid "Block/Unblock" +msgstr "" + +#: ../finch/gntblist.c:2752 +msgid "Block" +msgstr "" + +#: ../finch/gntblist.c:2753 +msgid "Unblock" +msgstr "" + +#: ../finch/gntblist.c:2758 +msgid "" +"Please enter the username or alias of the person you would like to " +"Block/Unblock." +msgstr "" + +#. Not multiline +#. Not masked? +#. No hints? +#: ../finch/gntblist.c:2761 ../finch/gntblist.c:2812 ../finch/gntblist.c:2948 +#: ../finch/gntcertmgr.c:90 ../finch/gntconn.c:137 ../finch/gntnotify.c:83 +#: ../finch/plugins/gnthistory.c:181 ../libpurple/account.c:1221 +#: ../libpurple/account.c:1584 ../libpurple/protocols/gg/gg.c:335 +#: ../libpurple/protocols/gg/gg.c:390 +#: ../libpurple/protocols/jabber/jabber.c:2557 +#: ../libpurple/protocols/jabber/xdata.c:403 +#: ../libpurple/protocols/msn/msn.c:451 ../libpurple/protocols/msn/msn.c:576 +#: ../libpurple/protocols/msn/msn.c:654 ../libpurple/protocols/msn/msn.c:671 +#: ../libpurple/protocols/msn/msn.c:688 +#: ../libpurple/protocols/mxit/login.c:365 +#: ../libpurple/protocols/myspace/user.c:823 +#: ../libpurple/protocols/myspace/user.c:884 +#: ../libpurple/protocols/oscar/oscar.c:5219 +#: ../libpurple/protocols/silc/buddy.c:458 +#: ../libpurple/protocols/silc/buddy.c:1198 +#: ../libpurple/protocols/silc/chat.c:451 +#: ../libpurple/protocols/silc/chat.c:488 +#: ../libpurple/protocols/silc/chat.c:755 +#: ../libpurple/protocols/silc/ops.c:1305 +#: ../libpurple/protocols/silc/ops.c:1831 +#: ../libpurple/protocols/silc/silc.c:1062 +#: ../libpurple/protocols/silc10/buddy.c:467 +#: ../libpurple/protocols/silc10/buddy.c:1191 +#: ../libpurple/protocols/silc10/chat.c:425 +#: ../libpurple/protocols/silc10/chat.c:464 +#: ../libpurple/protocols/silc10/chat.c:729 +#: ../libpurple/protocols/silc10/ops.c:1297 +#: ../libpurple/protocols/silc10/ops.c:1909 +#: ../libpurple/protocols/silc10/silc.c:760 +#: ../libpurple/protocols/yahoo/libymsg.c:1368 +#: ../libpurple/protocols/yahoo/libymsg.c:4574 +#: ../libpurple/protocols/yahoo/libymsg.c:4585 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:588 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:599 ../pidgin/gtkblist.c:3581 +#: ../pidgin/gtkcertmgr.c:193 ../pidgin/gtkdialogs.c:901 +#: ../pidgin/gtkdialogs.c:1040 ../pidgin/gtkdialogs.c:1132 +#: ../pidgin/gtkrequest.c:300 ../pidgin/gtkutils.c:1619 +#: ../pidgin/gtkutils.c:1639 +msgid "OK" +msgstr "" + +#: ../finch/gntblist.c:2807 ../pidgin/gtkdialogs.c:896 +msgid "New Instant Message" +msgstr "" + +#: ../finch/gntblist.c:2809 ../pidgin/gtkdialogs.c:898 +msgid "Please enter the username or alias of the person you would like to IM." +msgstr "" + +#: ../finch/gntblist.c:2870 +msgid "Channel" +msgstr "" + +#: ../finch/gntblist.c:2882 ../pidgin/gtkblist.c:1136 +msgid "Join a Chat" +msgstr "" + +#: ../finch/gntblist.c:2884 +msgid "Please enter the name of the chat you want to join." +msgstr "" + +#: ../finch/gntblist.c:2886 ../finch/gntnotify.c:461 +msgid "Join" +msgstr "" + +#: ../finch/gntblist.c:2945 ../pidgin/gtkdialogs.c:1129 +msgid "" +"Please enter the username or alias of the person whose log you would like to" +" view." +msgstr "" + +#. Create the "Options" frame. +#: ../finch/gntblist.c:2999 ../finch/gntpounce.c:461 ../pidgin/gtkpounce.c:823 +msgid "Options" +msgstr "" + +#: ../finch/gntblist.c:3005 +msgid "Send IM..." +msgstr "" + +#: ../finch/gntblist.c:3010 +msgid "Block/Unblock..." +msgstr "" + +#: ../finch/gntblist.c:3015 ../pidgin/gtkdocklet.c:712 +msgid "Join Chat..." +msgstr "" + +#: ../finch/gntblist.c:3020 ../finch/gntconv.c:653 +msgid "View Log..." +msgstr "" + +#: ../finch/gntblist.c:3025 +msgid "View All Logs" +msgstr "" + +#: ../finch/gntblist.c:3030 +msgid "Show" +msgstr "" + +#: ../finch/gntblist.c:3035 +msgid "Empty groups" +msgstr "" + +#: ../finch/gntblist.c:3042 +msgid "Offline buddies" +msgstr "" + +#: ../finch/gntblist.c:3049 +msgid "Sort" +msgstr "" + +#: ../finch/gntblist.c:3054 +msgid "By Status" +msgstr "" + +#: ../finch/gntblist.c:3059 ../pidgin/gtkblist.c:4818 +msgid "Alphabetically" +msgstr "" + +#: ../finch/gntblist.c:3064 +msgid "By Log Size" +msgstr "" + +#: ../finch/gntblist.c:3075 ../libpurple/conversation.c:2134 +#: ../pidgin/gtknotify.c:1663 +msgid "Buddy" +msgstr "" + +#: ../finch/gntblist.c:3080 ../libpurple/protocols/oscar/userinfo.c:52 +#: ../libpurple/protocols/silc/silc.c:1008 +#: ../libpurple/protocols/silc/util.c:560 +#: ../libpurple/protocols/silc10/silc.c:704 +#: ../libpurple/protocols/silc10/util.c:553 +#: ../pidgin/plugins/disco/gtkdisco.c:482 +msgid "Chat" +msgstr "" + +#: ../finch/gntblist.c:3090 ../finch/plugins/grouping.c:365 +msgid "Grouping" +msgstr "" + +#: ../finch/gntcertmgr.c:86 ../pidgin/gtkcertmgr.c:186 +msgid "Certificate Import" +msgstr "" + +#: ../finch/gntcertmgr.c:87 ../pidgin/gtkcertmgr.c:187 +msgid "Specify a hostname" +msgstr "" + +#: ../finch/gntcertmgr.c:88 +msgid "Type the host name this certificate is for." +msgstr "" + +#: ../finch/gntcertmgr.c:97 ../pidgin/gtkcertmgr.c:208 +#, c-format +msgid "" +"File %s could not be imported.\n" +"Make sure that the file is readable and in PEM format.\n" +msgstr "" + +#: ../finch/gntcertmgr.c:99 ../pidgin/gtkcertmgr.c:210 +msgid "Certificate Import Error" +msgstr "" + +#: ../finch/gntcertmgr.c:100 ../pidgin/gtkcertmgr.c:211 +msgid "X.509 certificate import failed" +msgstr "" + +#: ../finch/gntcertmgr.c:110 ../pidgin/gtkcertmgr.c:222 +msgid "Select a PEM certificate" +msgstr "" + +#: ../finch/gntcertmgr.c:127 ../pidgin/gtkcertmgr.c:243 +#, c-format +msgid "" +"Export to file %s failed.\n" +"Check that you have write permission to the target path\n" +msgstr "" + +#: ../finch/gntcertmgr.c:129 ../pidgin/gtkcertmgr.c:245 +msgid "Certificate Export Error" +msgstr "" + +#: ../finch/gntcertmgr.c:130 ../pidgin/gtkcertmgr.c:246 +msgid "X.509 certificate export failed" +msgstr "" + +#: ../finch/gntcertmgr.c:159 ../pidgin/gtkcertmgr.c:296 +msgid "PEM X.509 Certificate Export" +msgstr "" + +#: ../finch/gntcertmgr.c:188 +#, c-format +msgid "Certificate for %s" +msgstr "" + +#: ../finch/gntcertmgr.c:195 +#, c-format +msgid "" +"Common name: %s\n" +"\n" +"SHA1 fingerprint:\n" +"%s" +msgstr "" + +#: ../finch/gntcertmgr.c:198 +msgid "SSL Host Certificate" +msgstr "" + +#: ../finch/gntcertmgr.c:233 ../pidgin/gtkcertmgr.c:369 +#, c-format +msgid "Really delete certificate for %s?" +msgstr "" + +#: ../finch/gntcertmgr.c:236 ../pidgin/gtkcertmgr.c:371 +msgid "Confirm certificate delete" +msgstr "" + +#: ../finch/gntcertmgr.c:293 ../pidgin/gtkcertmgr.c:603 +msgid "Certificate Manager" +msgstr "" + +#: ../finch/gntcertmgr.c:298 ../libpurple/protocols/silc/silc.c:1247 +#: ../libpurple/protocols/silc10/silc.c:943 ../pidgin/gtkcertmgr.c:433 +msgid "Hostname" +msgstr "" + +#: ../finch/gntcertmgr.c:315 ../finch/gntnotify.c:455 ../pidgin/gtkconv.c:1668 +#: ../pidgin/gtkdebug.c:940 +msgid "Info" +msgstr "" + +#. Close button +#: ../finch/gntcertmgr.c:324 ../finch/gntft.c:256 ../finch/gntnotify.c:200 +#: ../finch/gntplugin.c:222 ../finch/gntplugin.c:415 ../finch/gntpounce.c:752 +#: ../finch/gntroomlist.c:277 ../finch/gntstatus.c:218 +#: ../libpurple/protocols/msn/msn.c:794 +#: ../libpurple/protocols/mxit/splashscreen.c:207 +#: ../libpurple/protocols/mxit/splashscreen.c:211 +#: ../libpurple/protocols/silc/util.c:386 +#: ../libpurple/protocols/silc10/util.c:377 ../pidgin/gtkaccount.c:2453 +#: ../pidgin/gtkblist.c:5874 ../pidgin/gtkrequest.c:303 +msgid "Close" +msgstr "" + +#: ../finch/gntconn.c:126 +#, c-format +msgid "%s (%s)" +msgstr "" + +#: ../finch/gntconn.c:129 +#, c-format +msgid "%s disconnected." +msgstr "" + +#: ../finch/gntconn.c:130 +#, 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 "" + +#: ../finch/gntconn.c:139 +msgid "Re-enable Account" +msgstr "" + +#: ../finch/gntconv.c:161 +msgid "No such command." +msgstr "" + +#: ../finch/gntconv.c:165 ../pidgin/gtkconv.c:517 +msgid "" +"Syntax Error: You typed the wrong number of arguments to that command." +msgstr "" + +#: ../finch/gntconv.c:170 ../pidgin/gtkconv.c:523 +msgid "Your command failed for an unknown reason." +msgstr "" + +#: ../finch/gntconv.c:175 ../pidgin/gtkconv.c:530 +msgid "That command only works in chats, not IMs." +msgstr "" + +#: ../finch/gntconv.c:178 ../pidgin/gtkconv.c:533 +msgid "That command only works in IMs, not chats." +msgstr "" + +#: ../finch/gntconv.c:182 ../pidgin/gtkconv.c:538 +msgid "That command doesn't work on this protocol." +msgstr "" + +#: ../finch/gntconv.c:190 +msgid "Message was not sent, because you are not signed on." +msgstr "" + +#: ../finch/gntconv.c:267 +#, c-format +msgid "%s (%s -- %s)" +msgstr "" + +#: ../finch/gntconv.c:290 +#, c-format +msgid "%s [%s]" +msgstr "" + +#: ../finch/gntconv.c:295 ../finch/gntconv.c:990 ../pidgin/gtkconv.c:3704 +#, c-format +msgid "" +"\n" +"%s is typing..." +msgstr "" + +#: ../finch/gntconv.c:314 +msgid "You have left this chat." +msgstr "" + +#: ../finch/gntconv.c:382 +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 "" + +#: ../finch/gntconv.c:462 ../pidgin/gtkconv.c:1354 +msgid "Logging started. Future messages in this conversation will be logged." +msgstr "" + +#: ../finch/gntconv.c:466 ../pidgin/gtkconv.c:1362 +msgid "" +"Logging stopped. Future messages in this conversation will not be logged." +msgstr "" + +#: ../finch/gntconv.c:553 +msgid "Send To" +msgstr "" + +#: ../finch/gntconv.c:606 +msgid "Conversation" +msgstr "" + +#: ../finch/gntconv.c:612 +msgid "Clear Scrollback" +msgstr "" + +#: ../finch/gntconv.c:616 ../finch/gntprefs.c:192 +msgid "Show Timestamps" +msgstr "" + +#: ../finch/gntconv.c:634 +msgid "Add Buddy Pounce..." +msgstr "" + +#: ../finch/gntconv.c:648 +msgid "Invite..." +msgstr "" + +#: ../finch/gntconv.c:657 +msgid "Enable Logging" +msgstr "" + +#: ../finch/gntconv.c:663 +msgid "Enable Sounds" +msgstr "" + +#: ../finch/gntconv.c:679 +msgid "You are not connected." +msgstr "" + +#: ../finch/gntconv.c:943 +msgid "<AUTO-REPLY> " +msgstr "" + +#: ../finch/gntconv.c:1083 +#, c-format +msgid "List of %d user:\n" +msgid_plural "List of %d users:\n" +msgstr[0] "" + +#: ../finch/gntconv.c:1254 ../pidgin/gtkconv.c:356 +msgid "Supported debug options are: plugins version" +msgstr "" + +#: ../finch/gntconv.c:1298 ../pidgin/gtkconv.c:416 +msgid "No such command (in this context)." +msgstr "" + +#: ../finch/gntconv.c:1301 ../pidgin/gtkconv.c:419 +msgid "" +"Use \"/help <command>\" for help on a specific command.\n" +"The following commands are available in this context:\n" +msgstr "" + +#: ../finch/gntconv.c:1345 +#, c-format +msgid "" +"%s is not a valid message class. See '/help msgcolor' for valid message " +"classes." +msgstr "" + +#: ../finch/gntconv.c:1352 ../finch/gntconv.c:1359 +#, c-format +msgid "%s is not a valid color. See '/help msgcolor' for valid colors." +msgstr "" + +#: ../finch/gntconv.c:1415 ../pidgin/gtkconv.c:8081 +msgid "" +"say <message>: Send a message normally as if you weren't using a " +"command." +msgstr "" + +#: ../finch/gntconv.c:1418 ../pidgin/gtkconv.c:8084 +msgid "me <action>: Send an IRC style action to a buddy or chat." +msgstr "" + +#: ../finch/gntconv.c:1421 ../pidgin/gtkconv.c:8087 +msgid "" +"debug <option>: Send various debug information to the current " +"conversation." +msgstr "" + +#: ../finch/gntconv.c:1424 ../pidgin/gtkconv.c:8090 +msgid "clear: Clears the conversation scrollback." +msgstr "" + +#: ../finch/gntconv.c:1427 ../pidgin/gtkconv.c:8096 +msgid "help <command>: Help on a specific command." +msgstr "" + +#: ../finch/gntconv.c:1430 +msgid "users: Show the list of users in the chat." +msgstr "" + +#: ../finch/gntconv.c:1435 +msgid "plugins: Show the plugins window." +msgstr "" + +#: ../finch/gntconv.c:1438 +msgid "buddylist: Show the buddylist." +msgstr "" + +#: ../finch/gntconv.c:1441 +msgid "accounts: Show the accounts window." +msgstr "" + +#: ../finch/gntconv.c:1444 +msgid "debugwin: Show the debug window." +msgstr "" + +#: ../finch/gntconv.c:1447 +msgid "prefs: Show the preference window." +msgstr "" + +#: ../finch/gntconv.c:1450 +msgid "statuses: Show the savedstatuses window." +msgstr "" + +#: ../finch/gntconv.c:1455 ../finch/gntconv.c:1463 +msgid "" +"msgcolor <class> <foreground> <background>: Set the color " +"for different classes of messages in the conversation window.<br> " +"<class>: receive, send, highlight, action, timestamp<br> " +"<foreground/background>: black, red, green, blue, white, gray, " +"darkgray, magenta, cyan, default<br><br>EXAMPLE:<br> msgcolor send cyan " +"default" +msgstr "" + +#: ../finch/gntdebug.c:275 ../pidgin/gtkconv.c:994 ../pidgin/gtkdebug.c:230 +#: ../pidgin/gtkft.c:519 ../pidgin/gtkutils.c:3339 +msgid "Unable to open file." +msgstr "" + +#: ../finch/gntdebug.c:315 ../finch/gntui.c:103 ../pidgin/gtkdebug.c:755 +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. +#: ../finch/gntdebug.c:336 ../pidgin/gtkdebug.c:835 ../pidgin/gtkdebug.c:837 +msgid "Clear" +msgstr "" + +#: ../finch/gntdebug.c:347 +msgid "Filter:" +msgstr "" + +#: ../finch/gntdebug.c:353 ../pidgin/gtkdebug.c:849 ../pidgin/gtkdebug.c:851 +msgid "Pause" +msgstr "" + +#: ../finch/gntft.c:121 ../pidgin/gtkft.c:225 +#, c-format +msgid "File Transfers - %d%% of %d file" +msgid_plural "File Transfers - %d%% of %d files" +msgstr[0] "" + +#. Create the window. +#: ../finch/gntft.c:128 ../finch/gntft.c:215 ../finch/gntui.c:104 +#: ../pidgin/gtkft.c:232 ../pidgin/gtkft.c:718 +msgid "File Transfers" +msgstr "" + +#: ../finch/gntft.c:220 ../pidgin/gtkft.c:601 +msgid "Progress" +msgstr "" + +#: ../finch/gntft.c:220 ../pidgin/gtkft.c:608 +msgid "Filename" +msgstr "" + +#: ../finch/gntft.c:220 ../pidgin/gtkft.c:615 +msgid "Size" +msgstr "" + +#: ../finch/gntft.c:220 +msgid "Speed" +msgstr "" + +#: ../finch/gntft.c:220 ../pidgin/gtkft.c:622 +msgid "Remaining" +msgstr "" + +#. XXX: Use of ggp_str_to_uin() is an ugly hack! +#. presence +#: ../finch/gntft.c:220 ../finch/gntstatus.c:549 ../finch/gntstatus.c:578 +#: ../libpurple/protocols/bonjour/bonjour.c:374 +#: ../libpurple/protocols/gg/gg.c:790 ../libpurple/protocols/gg/gg.c:1575 +#: ../libpurple/protocols/gg/gg.c:1583 +#: ../libpurple/protocols/jabber/buddy.c:770 +#: ../libpurple/protocols/jabber/buddy.c:778 +#: ../libpurple/protocols/jabber/buddy.c:849 +#: ../libpurple/protocols/jabber/jabber.c:2225 +#: ../libpurple/protocols/msn/msn.c:1081 ../libpurple/protocols/msn/msn.c:1090 +#: ../libpurple/protocols/msn/msn.c:1094 ../libpurple/protocols/msn/msn.c:1097 +#: ../libpurple/protocols/mxit/mxit.c:342 +#: ../libpurple/protocols/mxit/profile.c:235 +#: ../libpurple/protocols/novell/novell.c:2858 +#: ../libpurple/protocols/oscar/oscar.c:2296 +#: ../libpurple/protocols/oscar/oscar.c:2319 +#: ../libpurple/protocols/oscar/userinfo.c:303 +#: ../libpurple/protocols/sametime/sametime.c:3346 +#: ../libpurple/protocols/sametime/sametime.c:4197 +#: ../libpurple/protocols/yahoo/libymsg.c:4258 ../pidgin/gtkblist.c:3876 +#: ../pidgin/gtkblist.c:3890 ../pidgin/gtkblist.c:3892 +#: ../pidgin/gtksavedstatuses.c:970 ../pidgin/gtksavedstatuses.c:1120 +msgid "Status" +msgstr "" + +#: ../finch/gntft.c:230 +msgid "Close this window when all transfers finish" +msgstr "" + +#: ../finch/gntft.c:237 +msgid "Clear finished transfers" +msgstr "" + +#: ../finch/gntft.c:251 ../finch/gntroomlist.c:274 +msgid "Stop" +msgstr "" + +#: ../finch/gntft.c:324 ../pidgin/gtkft.c:165 ../pidgin/gtkft.c:902 +msgid "Waiting for transfer to begin" +msgstr "" + +#: ../finch/gntft.c:389 ../pidgin/gtkft.c:159 ../pidgin/gtkft.c:983 +msgid "Cancelled" +msgstr "" + +#: ../finch/gntft.c:391 ../pidgin/gtkft.c:985 +msgid "Failed" +msgstr "" + +#: ../finch/gntft.c:436 ../pidgin/gtkft.c:130 +#, c-format +msgid "%.2f KiB/s" +msgstr "" + +#: ../finch/gntft.c:447 +msgid "Sent" +msgstr "" + +#: ../finch/gntft.c:447 +msgid "Received" +msgstr "" + +#: ../finch/gntft.c:448 ../pidgin/gtkft.c:156 ../pidgin/gtkft.c:1047 +msgid "Finished" +msgstr "" + +#: ../finch/gntft.c:450 +#, c-format +msgid "The file was saved as %s." +msgstr "" + +#: ../finch/gntft.c:457 +msgid "Sending" +msgstr "" + +#: ../finch/gntft.c:457 +msgid "Receiving" +msgstr "" + +#: ../finch/gntlog.c:193 +#, c-format +msgid "Conversation in %s on %s" +msgstr "" + +#: ../finch/gntlog.c:196 +#, c-format +msgid "Conversation with %s on %s" +msgstr "" + +#: ../finch/gntlog.c:239 ../pidgin/gtklog.c:504 +msgid "%B %Y" +msgstr "" + +#: ../finch/gntlog.c:279 ../pidgin/gtklog.c:550 +msgid "" +"System events will only be logged if the \"Log all status changes to system " +"log\" preference is enabled." +msgstr "" + +#: ../finch/gntlog.c:283 ../pidgin/gtklog.c:554 +msgid "" +"Instant messages will only be logged if the \"Log all instant messages\" " +"preference is enabled." +msgstr "" + +#: ../finch/gntlog.c:286 ../pidgin/gtklog.c:557 +msgid "Chats will only be logged if the \"Log all chats\" preference is enabled." +msgstr "" + +#: ../finch/gntlog.c:292 ../pidgin/gtklog.c:566 +msgid "No logs were found" +msgstr "" + +#: ../finch/gntlog.c:339 ../pidgin/gtklog.c:643 +msgid "Total log size:" +msgstr "" + +#. Search box ********* +#: ../finch/gntlog.c:347 +msgid "Scroll/Search: " +msgstr "" + +#: ../finch/gntlog.c:405 ../pidgin/gtklog.c:713 +#, c-format +msgid "Conversations in %s" +msgstr "" + +#: ../finch/gntlog.c:413 ../finch/gntlog.c:490 ../pidgin/gtklog.c:721 +#: ../pidgin/gtklog.c:802 +#, c-format +msgid "Conversations with %s" +msgstr "" + +#: ../finch/gntlog.c:415 +msgid "All Conversations" +msgstr "" + +#: ../finch/gntlog.c:515 ../pidgin/gtklog.c:827 +msgid "System Log" +msgstr "" + +#: ../finch/gntmedia.c:159 ../pidgin/gtkmedia.c:339 +msgid "Calling..." +msgstr "" + +#: ../finch/gntmedia.c:160 +msgid "Hangup" +msgstr "" + +#. Number of actions +#: ../finch/gntmedia.c:161 ../libpurple/certificate.c:1405 +msgid "Accept" +msgstr "" + +#: ../finch/gntmedia.c:162 ../libpurple/certificate.c:1406 +msgid "Reject" +msgstr "" + +#: ../finch/gntmedia.c:190 ../pidgin/gtkmedia.c:970 ../pidgin/gtkmedia.c:972 +msgid "Call in progress." +msgstr "" + +#: ../finch/gntmedia.c:242 ../pidgin/gtkmedia.c:949 +msgid "The call has been terminated." +msgstr "" + +#: ../finch/gntmedia.c:270 ../pidgin/gtkmedia.c:635 +#, c-format +msgid "%s wishes to start an audio session with you." +msgstr "" + +#: ../finch/gntmedia.c:274 +#, c-format +msgid "%s is trying to start an unsupported media session type with you." +msgstr "" + +#: ../finch/gntmedia.c:288 ../pidgin/gtkmedia.c:965 +msgid "You have rejected the call." +msgstr "" + +#: ../finch/gntmedia.c:481 +msgid "call: Make an audio call." +msgstr "" + +#: ../finch/gntnotify.c:183 +msgid "Emails" +msgstr "" + +#: ../finch/gntnotify.c:189 ../finch/gntnotify.c:252 +msgid "You have mail!" +msgstr "" + +#: ../finch/gntnotify.c:192 ../pidgin/gtknotify.c:719 +msgid "Sender" +msgstr "" + +#: ../finch/gntnotify.c:192 ../pidgin/gtknotify.c:726 +msgid "Subject" +msgstr "" + +#: ../finch/gntnotify.c:223 +#, c-format +msgid "%s (%s) has %d new message." +msgid_plural "%s (%s) has %d new messages." +msgstr[0] "" + +#: ../finch/gntnotify.c:252 ../pidgin/gtknotify.c:1596 +msgid "New Mail" +msgstr "" + +#: ../finch/gntnotify.c:358 ../pidgin/gtknotify.c:1155 +#, c-format +msgid "Info for %s" +msgstr "" + +#: ../finch/gntnotify.c:359 ../pidgin/gtknotify.c:1156 +msgid "Buddy Information" +msgstr "" + +#: ../finch/gntnotify.c:449 ../libpurple/protocols/mxit/login.c:711 +#: ../libpurple/protocols/mxit/splashscreen.c:211 +msgid "Continue" +msgstr "" + +#: ../finch/gntnotify.c:458 ../pidgin/gtkconv.c:1618 +#: ../pidgin/gtknotify.c:1638 +msgid "IM" +msgstr "" + +#: ../finch/gntnotify.c:464 ../libpurple/conversation.c:2146 +#: ../libpurple/protocols/sametime/sametime.c:3556 +msgid "Invite" +msgstr "" + +#: ../finch/gntnotify.c:467 +msgid "(none)" +msgstr "" + +#. XXX: The following expects that finch_notify_message gets called. This +#. * may not always happen, e.g. when another plugin sets its own +#. * notify_message. So tread carefully. +#: ../finch/gntnotify.c:493 ../finch/plugins/gnttinyurl.c:370 +msgid "URI" +msgstr "" + +#: ../finch/gntplugin.c:86 ../finch/gntplugin.c:95 +msgid "ERROR" +msgstr "" + +#: ../finch/gntplugin.c:86 +msgid "loading plugin failed" +msgstr "" + +#: ../finch/gntplugin.c:95 +msgid "unloading plugin failed" +msgstr "" + +#: ../finch/gntplugin.c:141 +#, c-format +msgid "" +"Name: %s\n" +"Version: %s\n" +"Description: %s\n" +"Author: %s\n" +"Website: %s\n" +"Filename: %s\n" +msgstr "" + +#: ../finch/gntplugin.c:199 +msgid "Plugin need to be loaded before you can configure it." +msgstr "" + +#: ../finch/gntplugin.c:247 +msgid "No configuration options for this plugin." +msgstr "" + +#: ../finch/gntplugin.c:268 +msgid "Error loading plugin" +msgstr "" + +#: ../finch/gntplugin.c:269 +msgid "The selected file is not a valid plugin." +msgstr "" + +#: ../finch/gntplugin.c:270 +msgid "" +"Please open the debug window and try again to see the exact error message." +msgstr "" + +#: ../finch/gntplugin.c:333 +msgid "Select plugin to install" +msgstr "" + +#: ../finch/gntplugin.c:359 +msgid "You can (un)load plugins from the following list." +msgstr "" + +#: ../finch/gntplugin.c:410 +msgid "Install Plugin..." +msgstr "" + +#: ../finch/gntplugin.c:420 +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 +#: ../finch/gntplugin.c:526 ../finch/gntplugin.c:533 ../finch/gntprefs.c:265 +#: ../finch/gntui.c:108 ../pidgin/gtkprefs.c:2792 +msgid "Preferences" +msgstr "" + +#: ../finch/gntpounce.c:195 ../pidgin/gtkpounce.c:267 +msgid "Please enter a buddy to pounce." +msgstr "" + +#: ../finch/gntpounce.c:340 +msgid "New Buddy Pounce" +msgstr "" + +#: ../finch/gntpounce.c:340 +msgid "Edit Buddy Pounce" +msgstr "" + +#: ../finch/gntpounce.c:345 +msgid "Pounce Who" +msgstr "" + +#. Account: +#: ../finch/gntpounce.c:348 ../finch/gntstatus.c:458 +msgid "Account:" +msgstr "" + +#: ../finch/gntpounce.c:370 +msgid "Buddy name:" +msgstr "" + +#. Create the "Pounce When Buddy..." frame. +#: ../finch/gntpounce.c:388 ../pidgin/gtkpounce.c:603 +msgid "Pounce When Buddy..." +msgstr "" + +#: ../finch/gntpounce.c:390 +msgid "Signs on" +msgstr "" + +#: ../finch/gntpounce.c:391 +msgid "Signs off" +msgstr "" + +#: ../finch/gntpounce.c:392 +msgid "Goes away" +msgstr "" + +#: ../finch/gntpounce.c:393 +msgid "Returns from away" +msgstr "" + +#: ../finch/gntpounce.c:394 +msgid "Becomes idle" +msgstr "" + +#: ../finch/gntpounce.c:395 +msgid "Is no longer idle" +msgstr "" + +#: ../finch/gntpounce.c:396 +msgid "Starts typing" +msgstr "" + +#: ../finch/gntpounce.c:397 +msgid "Pauses while typing" +msgstr "" + +#: ../finch/gntpounce.c:398 +msgid "Stops typing" +msgstr "" + +#: ../finch/gntpounce.c:399 +msgid "Sends a message" +msgstr "" + +#. Create the "Action" frame. +#: ../finch/gntpounce.c:428 ../pidgin/gtkpounce.c:664 +msgid "Action" +msgstr "" + +#: ../finch/gntpounce.c:430 +msgid "Open an IM window" +msgstr "" + +#: ../finch/gntpounce.c:431 +msgid "Pop up a notification" +msgstr "" + +#: ../finch/gntpounce.c:432 +msgid "Send a message" +msgstr "" + +#: ../finch/gntpounce.c:433 +msgid "Execute a command" +msgstr "" + +#: ../finch/gntpounce.c:434 +msgid "Play a sound" +msgstr "" + +#: ../finch/gntpounce.c:462 +msgid "Pounce only when my status is not Available" +msgstr "" + +#: ../finch/gntpounce.c:464 ../pidgin/gtkpounce.c:1291 +msgid "Recurring" +msgstr "" + +#: ../finch/gntpounce.c:632 +msgid "Cannot create pounce" +msgstr "" + +#: ../finch/gntpounce.c:633 +msgid "You do not have any accounts." +msgstr "" + +#: ../finch/gntpounce.c:634 +msgid "You must create an account first before you can create a pounce." +msgstr "" + +#: ../finch/gntpounce.c:676 ../pidgin/gtkpounce.c:1122 +#, c-format +msgid "Are you sure you want to delete the pounce on %s for %s?" +msgstr "" + +#: ../finch/gntpounce.c:710 ../finch/gntui.c:101 ../pidgin/gtkpounce.c:1334 +msgid "Buddy Pounces" +msgstr "" + +#: ../finch/gntpounce.c:817 +#, c-format +msgid "%s has started typing to you (%s)" +msgstr "" + +#: ../finch/gntpounce.c:818 +#, c-format +msgid "%s has paused while typing to you (%s)" +msgstr "" + +#: ../finch/gntpounce.c:819 +#, c-format +msgid "%s has signed on (%s)" +msgstr "" + +#: ../finch/gntpounce.c:820 +#, c-format +msgid "%s has returned from being idle (%s)" +msgstr "" + +#: ../finch/gntpounce.c:821 +#, c-format +msgid "%s has returned from being away (%s)" +msgstr "" + +#: ../finch/gntpounce.c:822 +#, c-format +msgid "%s has stopped typing to you (%s)" +msgstr "" + +#: ../finch/gntpounce.c:823 +#, c-format +msgid "%s has signed off (%s)" +msgstr "" + +#: ../finch/gntpounce.c:824 +#, c-format +msgid "%s has become idle (%s)" +msgstr "" + +#: ../finch/gntpounce.c:825 +#, c-format +msgid "%s has gone away. (%s)" +msgstr "" + +#: ../finch/gntpounce.c:826 +#, c-format +msgid "%s has sent you a message. (%s)" +msgstr "" + +#: ../finch/gntpounce.c:845 +msgid "Unknown pounce event. Please report this!" +msgstr "" + +#: ../finch/gntprefs.c:93 +msgid "Based on keyboard use" +msgstr "" + +#: ../finch/gntprefs.c:95 ../pidgin/gtkprefs.c:2676 +msgid "From last sent message" +msgstr "" + +#: ../finch/gntprefs.c:97 ../pidgin/gtkprefs.c:1348 ../pidgin/gtkprefs.c:1356 +#: ../pidgin/gtkprefs.c:2675 ../pidgin/gtkprefs.c:2711 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:310 +msgid "Never" +msgstr "" + +#: ../finch/gntprefs.c:185 +msgid "Show Idle Time" +msgstr "" + +#: ../finch/gntprefs.c:186 +msgid "Show Offline Buddies" +msgstr "" + +#: ../finch/gntprefs.c:193 +msgid "Notify buddies when you are typing" +msgstr "" + +#: ../finch/gntprefs.c:199 ../finch/plugins/gnthistory.c:157 +msgid "Log format" +msgstr "" + +#: ../finch/gntprefs.c:200 ../finch/plugins/gnthistory.c:147 +msgid "Log IMs" +msgstr "" + +#: ../finch/gntprefs.c:201 ../finch/plugins/gnthistory.c:148 +msgid "Log chats" +msgstr "" + +#: ../finch/gntprefs.c:202 +msgid "Log status change events" +msgstr "" + +#: ../finch/gntprefs.c:208 +msgid "Report Idle time" +msgstr "" + +#: ../finch/gntprefs.c:209 +msgid "Change status when idle" +msgstr "" + +#: ../finch/gntprefs.c:210 +msgid "Minutes before changing status" +msgstr "" + +#: ../finch/gntprefs.c:211 +msgid "Change status to" +msgstr "" + +#: ../finch/gntprefs.c:260 ../pidgin/gtkprefs.c:1458 ../pidgin/gtkprefs.c:2763 +msgid "Conversations" +msgstr "" + +#: ../finch/gntprefs.c:261 ../finch/plugins/gnthistory.c:155 +#: ../pidgin/gtkprefs.c:2197 ../pidgin/gtkprefs.c:2764 +msgid "Logging" +msgstr "" + +#: ../finch/gntrequest.c:399 +msgid "You must fill all the required fields." +msgstr "" + +#: ../finch/gntrequest.c:400 +msgid "The required fields are underlined." +msgstr "" + +#: ../finch/gntrequest.c:661 +msgid "Not implemented yet." +msgstr "" + +#: ../finch/gntrequest.c:766 ../pidgin/gtkrequest.c:1584 +msgid "Save File..." +msgstr "" + +#: ../finch/gntrequest.c:766 ../pidgin/gtkrequest.c:1585 +msgid "Open File..." +msgstr "" + +#: ../finch/gntrequest.c:783 +msgid "Choose Location..." +msgstr "" + +#: ../finch/gntroomlist.c:209 +msgid "Hit 'Enter' to find more rooms of this category." +msgstr "" + +#: ../finch/gntroomlist.c:275 +msgid "Get" +msgstr "" + +#. Create the window. +#: ../finch/gntroomlist.c:287 ../finch/gntui.c:106 ../pidgin/gtkblist.c:7267 +#: ../pidgin/gtkroomlist.c:531 +msgid "Room List" +msgstr "" + +#: ../finch/gntsound.c:97 ../pidgin/gtksound.c:64 +msgid "Buddy logs in" +msgstr "" + +#: ../finch/gntsound.c:98 ../pidgin/gtksound.c:65 +msgid "Buddy logs out" +msgstr "" + +#: ../finch/gntsound.c:99 ../pidgin/gtksound.c:66 +msgid "Message received" +msgstr "" + +#: ../finch/gntsound.c:100 ../pidgin/gtksound.c:67 +msgid "Message received begins conversation" +msgstr "" + +#: ../finch/gntsound.c:101 ../pidgin/gtksound.c:68 +msgid "Message sent" +msgstr "" + +#: ../finch/gntsound.c:102 ../pidgin/gtksound.c:69 +msgid "Person enters chat" +msgstr "" + +#: ../finch/gntsound.c:103 ../pidgin/gtksound.c:70 +msgid "Person leaves chat" +msgstr "" + +#: ../finch/gntsound.c:104 ../pidgin/gtksound.c:71 +msgid "You talk in chat" +msgstr "" + +#: ../finch/gntsound.c:105 ../pidgin/gtksound.c:72 +msgid "Others talk in chat" +msgstr "" + +#: ../finch/gntsound.c:107 ../pidgin/gtksound.c:75 +msgid "Someone says your username in chat" +msgstr "" + +#: ../finch/gntsound.c:108 ../pidgin/gtksound.c:76 +msgid "Attention received" +msgstr "" + +#: ../finch/gntsound.c:384 ../pidgin/gtksound.c:326 +msgid "GStreamer Failure" +msgstr "" + +#: ../finch/gntsound.c:385 ../pidgin/gtksound.c:327 +msgid "GStreamer failed to initialize." +msgstr "" + +#: ../finch/gntsound.c:739 ../finch/gntsound.c:825 ../pidgin/gtkpounce.c:178 +#: ../pidgin/gtkpounce.c:189 ../pidgin/gtkpounce.c:318 +#: ../pidgin/gtkpounce.c:688 ../pidgin/gtkpounce.c:950 +#: ../pidgin/gtkprefs.c:941 ../pidgin/gtkprefs.c:2323 +#: ../pidgin/gtkprefs.c:2421 ../pidgin/gtkprefs.c:2617 +msgid "(default)" +msgstr "" + +#: ../finch/gntsound.c:752 +msgid "Select Sound File ..." +msgstr "" + +#: ../finch/gntsound.c:927 +msgid "Sound Preferences" +msgstr "" + +#: ../finch/gntsound.c:938 +msgid "Profiles" +msgstr "" + +#: ../finch/gntsound.c:977 ../pidgin/gtkprefs.c:2484 +msgid "Automatic" +msgstr "" + +#: ../finch/gntsound.c:980 +msgid "Console Beep" +msgstr "" + +#: ../finch/gntsound.c:981 ../pidgin/gtkprefs.c:2488 +msgid "Command" +msgstr "" + +#: ../finch/gntsound.c:982 +msgid "No Sound" +msgstr "" + +#: ../finch/gntsound.c:984 +msgid "Sound Method" +msgstr "" + +#: ../finch/gntsound.c:989 +msgid "Method: " +msgstr "" + +#: ../finch/gntsound.c:996 +#, c-format +msgid "" +"Sound Command\n" +"(%s for filename)" +msgstr "" + +#. Sound options +#: ../finch/gntsound.c:1004 ../pidgin/gtkprefs.c:2474 +msgid "Sound Options" +msgstr "" + +#: ../finch/gntsound.c:1005 +msgid "Sounds when conversation has focus" +msgstr "" + +#: ../finch/gntsound.c:1013 ../pidgin/gtkprefs.c:1346 +#: ../pidgin/gtkprefs.c:1358 ../pidgin/gtkprefs.c:2519 +#: ../pidgin/plugins/timestamp_format.c:58 +#: ../pidgin/plugins/timestamp_format.c:67 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:311 +msgid "Always" +msgstr "" + +#: ../finch/gntsound.c:1014 ../pidgin/gtkprefs.c:2517 +msgid "Only when available" +msgstr "" + +#: ../finch/gntsound.c:1015 ../pidgin/gtkprefs.c:2518 +msgid "Only when not available" +msgstr "" + +#: ../finch/gntsound.c:1022 +msgid "Volume(0-100):" +msgstr "" + +#. Sound events +#: ../finch/gntsound.c:1041 ../pidgin/gtkprefs.c:2546 +msgid "Sound Events" +msgstr "" + +#: ../finch/gntsound.c:1043 ../pidgin/gtknotify.c:1675 +#: ../pidgin/gtkprefs.c:2600 +msgid "Event" +msgstr "" + +#: ../finch/gntsound.c:1043 +msgid "File" +msgstr "" + +#: ../finch/gntsound.c:1062 +msgid "Test" +msgstr "" + +#: ../finch/gntsound.c:1065 ../pidgin/gtkpounce.c:692 +msgid "Reset" +msgstr "" + +#: ../finch/gntsound.c:1068 +msgid "Choose..." +msgstr "" + +#: ../finch/gntstatus.c:140 +#, c-format +msgid "Are you sure you want to delete \"%s\"" +msgstr "" + +#: ../finch/gntstatus.c:143 +msgid "Delete Status" +msgstr "" + +#: ../finch/gntstatus.c:178 ../pidgin/gtksavedstatuses.c:565 +msgid "Saved Statuses" +msgstr "" + +#. title +#: ../finch/gntstatus.c:185 ../finch/gntstatus.c:541 +#: ../libpurple/protocols/mxit/actions.c:290 ../pidgin/gtksavedstatuses.c:468 +msgid "Title" +msgstr "" + +#: ../finch/gntstatus.c:185 ../pidgin/gtksavedstatuses.c:481 +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. +#: ../finch/gntstatus.c:185 ../finch/gntstatus.c:566 ../finch/gntstatus.c:578 +#: ../libpurple/conversation.c:2139 +#: ../libpurple/protocols/bonjour/bonjour.c:287 +#: ../libpurple/protocols/bonjour/bonjour.c:294 +#: ../libpurple/protocols/bonjour/bonjour.c:376 +#: ../libpurple/protocols/gg/gg.c:828 ../libpurple/protocols/gg/gg.c:1578 +#: ../libpurple/protocols/gg/gg.c:1594 ../libpurple/protocols/gg/gg.c:1604 +#: ../libpurple/protocols/gg/gg.c:1610 ../libpurple/protocols/gg/gg.c:1620 +#: ../libpurple/protocols/gg/gg.c:1629 ../libpurple/protocols/gg/gg.c:1634 +#: ../libpurple/protocols/irc/irc.c:274 +#: ../libpurple/protocols/jabber/jabber.c:2372 +#: ../libpurple/protocols/jabber/jabber.c:2396 +#: ../libpurple/protocols/jabber/jabber.c:2412 +#: ../libpurple/protocols/jabber/jabber.c:2428 +#: ../libpurple/protocols/jabber/jabber.c:2442 +#: ../libpurple/protocols/jabber/jabber.c:2457 +#: ../libpurple/protocols/msn/msn.c:1150 ../libpurple/protocols/msn/msn.c:1156 +#: ../libpurple/protocols/msn/msn.c:1162 ../libpurple/protocols/msn/msn.c:1168 +#: ../libpurple/protocols/msn/msn.c:1173 ../libpurple/protocols/msn/msn.c:1178 +#: ../libpurple/protocols/mxit/roster.c:78 +#: ../libpurple/protocols/myspace/myspace.c:479 +#: ../libpurple/protocols/novell/novell.c:2861 +#: ../libpurple/protocols/novell/novell.c:2964 +#: ../libpurple/protocols/novell/novell.c:2970 +#: ../libpurple/protocols/novell/novell.c:2976 +#: ../libpurple/protocols/oscar/oscar.c:4763 +#: ../libpurple/protocols/oscar/oscar.c:4772 +#: ../libpurple/protocols/oscar/oscar.c:4780 +#: ../libpurple/protocols/oscar/oscar.c:4788 +#: ../libpurple/protocols/oscar/oscar.c:4796 +#: ../libpurple/protocols/oscar/oscar.c:4804 +#: ../libpurple/protocols/oscar/oscar.c:4813 +#: ../libpurple/protocols/oscar/oscar.c:4821 +#: ../libpurple/protocols/oscar/oscar.c:4828 +#: ../libpurple/protocols/oscar/oscar.c:4840 +#: ../libpurple/protocols/oscar/oscar.c:4847 +#: ../libpurple/protocols/oscar/oscar.c:4854 +#: ../libpurple/protocols/sametime/sametime.c:3369 +#: ../libpurple/protocols/sametime/sametime.c:3375 +#: ../libpurple/protocols/sametime/sametime.c:3381 +#: ../libpurple/protocols/sametime/sametime.c:3460 +#: ../libpurple/protocols/silc/buddy.c:1563 +#: ../libpurple/protocols/silc10/buddy.c:1571 +#: ../libpurple/protocols/simple/simple.c:247 +#: ../libpurple/protocols/yahoo/libymsg.c:5098 +#: ../libpurple/protocols/yahoo/libymsg.c:5104 +#: ../libpurple/protocols/yahoo/libymsg.c:5113 +#: ../libpurple/protocols/zephyr/zephyr.c:2348 ../pidgin/gtknotify.c:1683 +#: ../pidgin/gtksavedstatuses.c:496 ../pidgin/gtksavedstatuses.c:985 +msgid "Message" +msgstr "" + +#. Use +#: ../finch/gntstatus.c:196 ../finch/gntstatus.c:595 +msgid "Use" +msgstr "" + +#: ../finch/gntstatus.c:303 +msgid "Invalid title" +msgstr "" + +#: ../finch/gntstatus.c:304 +msgid "Please enter a non-empty title for the status." +msgstr "" + +#: ../finch/gntstatus.c:312 +msgid "Duplicate title" +msgstr "" + +#: ../finch/gntstatus.c:313 +msgid "Please enter a different title for the status." +msgstr "" + +#: ../finch/gntstatus.c:454 +msgid "Substatus" +msgstr "" + +#: ../finch/gntstatus.c:466 ../pidgin/gtkft.c:654 +msgid "Status:" +msgstr "" + +#: ../finch/gntstatus.c:481 +msgid "Message:" +msgstr "" + +#: ../finch/gntstatus.c:530 +msgid "Edit Status" +msgstr "" + +#: ../finch/gntstatus.c:572 +msgid "Use different status for following accounts" +msgstr "" + +#. Save & Use +#: ../finch/gntstatus.c:606 +msgid "Save & Use" +msgstr "" + +#: ../finch/gntui.c:102 +msgid "Certificates" +msgstr "" + +#: ../finch/gntui.c:107 ../pidgin/gtkprefs.c:2768 +msgid "Sounds" +msgstr "" + +#: ../finch/gntui.c:109 +msgid "Statuses" +msgstr "" + +#: ../finch/plugins/gntclipboard.c:115 ../finch/plugins/gntclipboard.c:121 +#: ../finch/plugins/gntclipboard.c:128 +msgid "Error loading the plugin." +msgstr "" + +#: ../finch/plugins/gntclipboard.c:116 +msgid "Couldn't find X display" +msgstr "" + +#: ../finch/plugins/gntclipboard.c:122 +msgid "Couldn't find window" +msgstr "" + +#: ../finch/plugins/gntclipboard.c:129 +msgid "" +"This plugin cannot be loaded because it was not built with X11 support." +msgstr "" + +#: ../finch/plugins/gntclipboard.c:158 +msgid "GntClipboard" +msgstr "" + +#: ../finch/plugins/gntclipboard.c:160 +msgid "Clipboard plugin" +msgstr "" + +#: ../finch/plugins/gntclipboard.c:161 +msgid "" +"When the gnt clipboard contents change, the contents are made available to " +"X, if possible." +msgstr "" + +#: ../finch/plugins/gntgf.c:232 +#, c-format +msgid "%s just signed on" +msgstr "" + +#: ../finch/plugins/gntgf.c:239 +#, c-format +msgid "%s just signed off" +msgstr "" + +#: ../finch/plugins/gntgf.c:247 +#, c-format +msgid "%s sent you a message" +msgstr "" + +#: ../finch/plugins/gntgf.c:266 +#, c-format +msgid "%s said your nick in %s" +msgstr "" + +#: ../finch/plugins/gntgf.c:268 +#, c-format +msgid "%s sent a message in %s" +msgstr "" + +#: ../finch/plugins/gntgf.c:306 +msgid "Buddy signs on/off" +msgstr "" + +#: ../finch/plugins/gntgf.c:307 +msgid "You receive an IM" +msgstr "" + +#: ../finch/plugins/gntgf.c:308 +msgid "Someone speaks in a chat" +msgstr "" + +#: ../finch/plugins/gntgf.c:309 +msgid "Someone says your name in a chat" +msgstr "" + +#: ../finch/plugins/gntgf.c:337 +msgid "Notify with a toaster when" +msgstr "" + +#: ../finch/plugins/gntgf.c:352 +msgid "Beep too!" +msgstr "" + +#: ../finch/plugins/gntgf.c:358 +msgid "Set URGENT for the terminal window." +msgstr "" + +#: ../finch/plugins/gntgf.c:378 +msgid "GntGf" +msgstr "" + +#: ../finch/plugins/gntgf.c:380 ../finch/plugins/gntgf.c:381 +msgid "Toaster plugin" +msgstr "" + +#: ../finch/plugins/gnthistory.c:118 ../pidgin/plugins/history.c:136 +#, c-format +msgid "<b>Conversation with %s on %s:</b><br>" +msgstr "" + +#: ../finch/plugins/gnthistory.c:176 ../pidgin/plugins/history.c:163 +msgid "History Plugin Requires Logging" +msgstr "" + +#: ../finch/plugins/gnthistory.c:177 ../pidgin/plugins/history.c:164 +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 "" + +#: ../finch/plugins/gnthistory.c:221 +msgid "GntHistory" +msgstr "" + +#: ../finch/plugins/gnthistory.c:223 ../pidgin/plugins/history.c:207 +msgid "Shows recently logged conversations in new conversations." +msgstr "" + +#: ../finch/plugins/gnthistory.c:224 ../pidgin/plugins/history.c:208 +msgid "" +"When a new conversation is opened this plugin will insert the last " +"conversation into the current conversation." +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:324 +#, c-format +msgid "" +"\n" +"Fetching TinyURL..." +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:351 +#, c-format +msgid "TinyURL for above: %s" +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:371 +msgid "Please wait while TinyURL fetches a shorter URL ..." +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:438 +msgid "Only create TinyURL for URLs of this length or greater" +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:442 +msgid "TinyURL (or other) address prefix" +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:471 +msgid "TinyURL" +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:473 +msgid "TinyURL plugin" +msgstr "" + +#: ../finch/plugins/gnttinyurl.c:474 +msgid "When receiving a message with URL(s), use TinyURL for easier copying" +msgstr "" + +#: ../finch/plugins/grouping.c:44 ../libpurple/protocols/oscar/oscar.c:181 +msgid "Online" +msgstr "" + +#. primitive, no, id, name +#: ../finch/plugins/grouping.c:46 ../finch/plugins/grouping.c:143 +#: ../libpurple/protocols/gg/gg.c:755 +#: ../libpurple/protocols/jabber/buddy.c:846 +#: ../libpurple/protocols/jabber/jutil.c:702 +#: ../libpurple/protocols/mxit/roster.c:53 +#: ../libpurple/protocols/novell/novell.c:2851 +#: ../libpurple/protocols/oscar/oscar.c:4686 +#: ../libpurple/protocols/oscar/userinfo.c:279 +#: ../libpurple/protocols/yahoo/libymsg.c:4104 ../libpurple/status.c:162 +#: ../pidgin/gtkblist.c:3876 ../pidgin/gtkblist.c:4263 +#: ../pidgin/gtkdocklet.c:564 ../pidgin/gtkstatusbox.c:1100 +#: ../pidgin/plugins/themeedit-icon.c:67 +msgid "Offline" +msgstr "" + +#: ../finch/plugins/grouping.c:115 ../pidgin/gtkblist.c:3912 +msgid "Online Buddies" +msgstr "" + +#: ../finch/plugins/grouping.c:115 +msgid "Offline Buddies" +msgstr "" + +#: ../finch/plugins/grouping.c:125 +msgid "Online/Offline" +msgstr "" + +#: ../finch/plugins/grouping.c:162 +msgid "Meebo" +msgstr "" + +#: ../finch/plugins/grouping.c:211 +msgid "No Grouping" +msgstr "" + +#: ../finch/plugins/grouping.c:292 +msgid "Nested Subgroup" +msgstr "" + +#: ../finch/plugins/grouping.c:324 +msgid "Nested Grouping (experimental)" +msgstr "" + +#: ../finch/plugins/grouping.c:367 ../finch/plugins/grouping.c:368 +msgid "Provides alternate buddylist grouping options." +msgstr "" + +#: ../finch/plugins/lastlog.c:69 +msgid "Lastlog" +msgstr "" + +#. Translator Note: The "backlog" is the conversation buffer/history. +#: ../finch/plugins/lastlog.c:100 +msgid "lastlog: Searches for a substring in the backlog." +msgstr "" + +#: ../finch/plugins/lastlog.c:122 +msgid "GntLastlog" +msgstr "" + +#: ../finch/plugins/lastlog.c:124 ../finch/plugins/lastlog.c:125 +msgid "Lastlog plugin." +msgstr "" + +#: ../libpurple/account.c:972 +msgid "accounts" +msgstr "" + +#: ../libpurple/account.c:1167 ../libpurple/protocols/jabber/auth.c:106 +#: ../libpurple/protocols/jabber/auth_cyrus.c:150 +#: ../libpurple/protocols/silc/silc.c:475 +msgid "Password is required to sign on." +msgstr "" + +#: ../libpurple/account.c:1201 +#, c-format +msgid "Enter password for %s (%s)" +msgstr "" + +#: ../libpurple/account.c:1208 +msgid "Enter Password" +msgstr "" + +#: ../libpurple/account.c:1213 +msgid "Save password" +msgstr "" + +#: ../libpurple/account.c:1250 ../libpurple/connection.c:119 +#: ../libpurple/connection.c:197 +#, c-format +msgid "Missing protocol plugin for %s" +msgstr "" + +#: ../libpurple/account.c:1251 ../libpurple/connection.c:122 +msgid "Connection Error" +msgstr "" + +#: ../libpurple/account.c:1505 ../libpurple/protocols/jabber/jabber.c:2510 +msgid "New passwords do not match." +msgstr "" + +#: ../libpurple/account.c:1518 +msgid "Fill out all fields completely." +msgstr "" + +#: ../libpurple/account.c:1550 +msgid "Original password" +msgstr "" + +#: ../libpurple/account.c:1558 +msgid "New password" +msgstr "" + +#: ../libpurple/account.c:1566 +msgid "New password (again)" +msgstr "" + +#: ../libpurple/account.c:1573 +#, c-format +msgid "Change password for %s" +msgstr "" + +#: ../libpurple/account.c:1581 +msgid "Please enter your current password and your new password." +msgstr "" + +#: ../libpurple/account.c:1612 +#, c-format +msgid "Change user information for %s" +msgstr "" + +#: ../libpurple/account.c:1615 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:587 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:598 +msgid "Set User Info" +msgstr "" + +#: ../libpurple/account.c:1869 +msgid "This protocol does not support setting a public alias." +msgstr "" + +#: ../libpurple/account.c:1909 +msgid "This protocol does not support fetching the public alias." +msgstr "" + +#: ../libpurple/account.c:2207 ../libpurple/protocols/gg/gg.c:772 +#: ../libpurple/protocols/jabber/buddy.c:778 +#: ../libpurple/protocols/jabber/jutil.c:719 +#: ../libpurple/protocols/msn/oim.c:732 +#: ../libpurple/protocols/mxit/profile.c:46 +#: ../libpurple/protocols/mxit/profile.c:239 +#: ../libpurple/protocols/novell/novell.c:2854 ../pidgin/gtkft.c:162 +#: ../pidgin/plugins/disco/gtkdisco.c:470 ../pidgin/plugins/vvconfig.c:147 +msgid "Unknown" +msgstr "" + +#. Changing this string? Look in add_purple_buddy_to_groups +#: ../libpurple/blist.c:585 ../libpurple/blist.c:1599 +#: ../libpurple/blist.c:1847 ../libpurple/blist.c:1849 +#: ../libpurple/protocols/jabber/roster.c:117 +#: ../libpurple/protocols/jabber/roster.c:256 +#: ../libpurple/protocols/myspace/myspace.c:3484 ../pidgin/gtkblist.c:6945 +#: ../pidgin/plugins/gevolution/gevo-util.c:73 +#: ../pidgin/plugins/gevolution/gevolution.c:106 +msgid "Buddies" +msgstr "" + +#: ../libpurple/blist.c:612 +msgid "buddy list" +msgstr "" + +#: ../libpurple/certificate.c:94 +msgid "The certificate is self-signed and cannot be automatically checked." +msgstr "" + +#: ../libpurple/certificate.c:98 +msgid "" +"The certificate is not trusted because no certificate that can verify it is " +"currently trusted." +msgstr "" + +#: ../libpurple/certificate.c:102 +msgid "" +"The certificate is not valid yet. Check that your computer's date and time " +"are accurate." +msgstr "" + +#: ../libpurple/certificate.c:106 +msgid "" +"The certificate has expired and should not be considered valid. Check that " +"your computer's date and time are accurate." +msgstr "" + +#. Translators: "domain" refers to a DNS domain (e.g. talk.google.com) +#: ../libpurple/certificate.c:112 +msgid "The certificate presented is not issued to this domain." +msgstr "" + +#: ../libpurple/certificate.c:115 +msgid "" +"You have no database of root certificates, so this certificate cannot be " +"validated." +msgstr "" + +#: ../libpurple/certificate.c:119 +msgid "The certificate chain presented is invalid." +msgstr "" + +#: ../libpurple/certificate.c:122 +msgid "The certificate has been revoked." +msgstr "" + +#: ../libpurple/certificate.c:126 +msgid "An unknown certificate error occurred." +msgstr "" + +#: ../libpurple/certificate.c:697 +msgid "(DOES NOT MATCH)" +msgstr "" + +#. Make messages +#: ../libpurple/certificate.c:701 +#, c-format +msgid "%s has presented the following certificate for just-this-once use:" +msgstr "" + +#: ../libpurple/certificate.c:702 +#, c-format +msgid "" +"Common name: %s %s\n" +"Fingerprint (SHA1): %s" +msgstr "" + +#. TODO: Find what the handle ought to be +#: ../libpurple/certificate.c:707 +msgid "Single-use Certificate Verification" +msgstr "" + +#. Scheme name +#. Pool name +#: ../libpurple/certificate.c:1087 +msgid "Certificate Authorities" +msgstr "" + +#. Scheme name +#. Pool name +#: ../libpurple/certificate.c:1259 +msgid "SSL Peers Cache" +msgstr "" + +#. Make messages +#: ../libpurple/certificate.c:1390 +#, c-format +msgid "Accept certificate for %s?" +msgstr "" + +#. TODO: Find what the handle ought to be +#: ../libpurple/certificate.c:1396 +msgid "SSL Certificate Verification" +msgstr "" + +#: ../libpurple/certificate.c:1407 +msgid "_View Certificate..." +msgstr "" + +#: ../libpurple/certificate.c:1436 ../libpurple/certificate.c:1455 +#, c-format +msgid "The certificate for %s could not be validated." +msgstr "" + +#. TODO: Probably wrong. +#: ../libpurple/certificate.c:1442 +msgid "SSL Certificate Error" +msgstr "" + +#: ../libpurple/certificate.c:1443 +msgid "Unable to validate certificate" +msgstr "" + +#: ../libpurple/certificate.c:1467 +#, c-format +msgid "" +"The certificate claims to be from \"%s\" instead. This could mean that you " +"are not connecting to the service you believe you are." +msgstr "" + +#. Make messages +#: ../libpurple/certificate.c:2188 +#, 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 +#: ../libpurple/certificate.c:2200 +msgid "Certificate Information" +msgstr "" + +#. show error to user +#: ../libpurple/connection.c:121 ../libpurple/protocols/mxit/login.c:289 +msgid "Registration Error" +msgstr "" + +#: ../libpurple/connection.c:199 +msgid "Unregistration Error" +msgstr "" + +#: ../libpurple/connection.c:359 +#, c-format +msgid "+++ %s signed on" +msgstr "" + +#: ../libpurple/connection.c:390 +#, c-format +msgid "+++ %s signed off" +msgstr "" + +#. Undocumented +#. Unknown error +#: ../libpurple/connection.c:567 ../libpurple/plugin.c:276 +#: ../libpurple/protocols/jabber/buddy.c:2138 +#: ../libpurple/protocols/msn/servconn.c:149 +#: ../libpurple/protocols/msn/session.c:404 +#: ../libpurple/protocols/msn/session.c:417 +#: ../libpurple/protocols/oscar/family_chatnav.c:66 +#: ../libpurple/protocols/oscar/family_icbm.c:64 +#: ../libpurple/protocols/oscar/family_icbm.c:65 +#: ../libpurple/protocols/yahoo/libymsg.c:2022 +#: ../libpurple/protocols/yahoo/libymsg.c:2031 +#: ../libpurple/protocols/yahoo/libymsg.c:2406 +msgid "Unknown error" +msgstr "" + +#: ../libpurple/conversation.c:214 +msgid "Unable to send message: The message is too large." +msgstr "" + +#: ../libpurple/conversation.c:217 ../libpurple/conversation.c:230 +#, c-format +msgid "Unable to send message to %s." +msgstr "" + +#: ../libpurple/conversation.c:218 +msgid "The message is too large." +msgstr "" + +#: ../libpurple/conversation.c:227 ../libpurple/protocols/bonjour/jabber.c:305 +#: ../libpurple/protocols/bonjour/jabber.c:351 +msgid "Unable to send message." +msgstr "" + +#: ../libpurple/conversation.c:1307 +msgid "Send Message" +msgstr "" + +#: ../libpurple/conversation.c:1310 +msgid "_Send Message" +msgstr "" + +#: ../libpurple/conversation.c:1720 +#, c-format +msgid "%s entered the room." +msgstr "" + +#: ../libpurple/conversation.c:1723 +#, c-format +msgid "%s [<I>%s</I>] entered the room." +msgstr "" + +#: ../libpurple/conversation.c:1834 +#, c-format +msgid "You are now known as %s" +msgstr "" + +#: ../libpurple/conversation.c:1854 +#, c-format +msgid "%s is now known as %s" +msgstr "" + +#: ../libpurple/conversation.c:1929 +#, c-format +msgid "%s left the room." +msgstr "" + +#: ../libpurple/conversation.c:1932 +#, c-format +msgid "%s left the room (%s)." +msgstr "" + +#: ../libpurple/conversation.c:2131 ../libpurple/conversation.c:2142 +msgid "Invite to chat" +msgstr "" + +#. Put our happy label in it. +#: ../libpurple/conversation.c:2143 ../pidgin/gtkconv.c:897 +msgid "" +"Please enter the name of the user you wish to invite, along with an optional" +" invite message." +msgstr "" + +#: ../libpurple/dbus-server.c:610 +#, c-format +msgid "Failed to get connection: %s" +msgstr "" + +#: ../libpurple/dbus-server.c:622 +#, c-format +msgid "Failed to get name: %s" +msgstr "" + +#: ../libpurple/dbus-server.c:634 +#, c-format +msgid "Failed to get serv name: %s" +msgstr "" + +#: ../libpurple/dbus-server.h:86 +msgid "Purple's D-BUS server is not running for the reason listed below" +msgstr "" + +#: ../libpurple/desktopitem.c:287 ../libpurple/desktopitem.c:880 +msgid "No name" +msgstr "" + +#: ../libpurple/dnsquery.c:616 +msgid "Unable to create new resolver process\n" +msgstr "" + +#: ../libpurple/dnsquery.c:621 +msgid "Unable to send request to resolver process\n" +msgstr "" + +#: ../libpurple/dnsquery.c:654 ../libpurple/dnsquery.c:785 +#, c-format +msgid "" +"Error resolving %s:\n" +"%s" +msgstr "" + +#: ../libpurple/dnsquery.c:657 ../libpurple/dnsquery.c:799 +#: ../libpurple/dnsquery.c:851 ../libpurple/dnsquery.c:862 +#, c-format +msgid "Error resolving %s: %d" +msgstr "" + +#: ../libpurple/dnsquery.c:681 +#, c-format +msgid "" +"Error reading from resolver process:\n" +"%s" +msgstr "" + +#: ../libpurple/dnsquery.c:685 +#, c-format +msgid "Resolver process exited without answering our request" +msgstr "" + +#: ../libpurple/dnsquery.c:749 +#, c-format +msgid "Error converting %s to punycode: %d" +msgstr "" + +#: ../libpurple/dnsquery.c:824 +#, c-format +msgid "Thread creation failure: %s" +msgstr "" + +#: ../libpurple/dnsquery.c:825 ../libpurple/protocols/oscar/oscar.c:1124 +#: ../libpurple/protocols/oscar/util.c:69 +msgid "Unknown reason" +msgstr "" + +#: ../libpurple/dnsquery.c:899 +msgid "Aborting DNS lookup in Tor Proxy mode." +msgstr "" + +#: ../libpurple/ft.c:346 +#, c-format +msgid "" +"Error reading %s: \n" +"%s.\n" +msgstr "" + +#: ../libpurple/ft.c:350 +#, c-format +msgid "" +"Error writing %s: \n" +"%s.\n" +msgstr "" + +#: ../libpurple/ft.c:354 +#, c-format +msgid "" +"Error accessing %s: \n" +"%s.\n" +msgstr "" + +#: ../libpurple/ft.c:392 +msgid "Directory is not writable." +msgstr "" + +#: ../libpurple/ft.c:406 +msgid "Cannot send a file of 0 bytes." +msgstr "" + +#: ../libpurple/ft.c:415 +msgid "Cannot send a directory." +msgstr "" + +#: ../libpurple/ft.c:423 +#, c-format +msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n" +msgstr "" + +#: ../libpurple/ft.c:442 +msgid "File is not readable." +msgstr "" + +#: ../libpurple/ft.c:506 +#, c-format +msgid "%s wants to send you %s (%s)" +msgstr "" + +#: ../libpurple/ft.c:513 +#, c-format +msgid "%s wants to send you a file" +msgstr "" + +#: ../libpurple/ft.c:562 +#, c-format +msgid "Accept file transfer request from %s?" +msgstr "" + +#: ../libpurple/ft.c:566 +#, c-format +msgid "" +"A file is available for download from:\n" +"Remote host: %s\n" +"Remote port: %d" +msgstr "" + +#: ../libpurple/ft.c:602 +#, c-format +msgid "%s is offering to send file %s" +msgstr "" + +#: ../libpurple/ft.c:661 +#, c-format +msgid "%s is not a valid filename.\n" +msgstr "" + +#: ../libpurple/ft.c:688 +#, c-format +msgid "Offering to send %s to %s" +msgstr "" + +#: ../libpurple/ft.c:699 +#, c-format +msgid "Starting transfer of %s from %s" +msgstr "" + +#: ../libpurple/ft.c:887 +#, c-format +msgid "Transfer of file <A HREF=\"file://%s\">%s</A> complete" +msgstr "" + +#: ../libpurple/ft.c:892 +#, c-format +msgid "Transfer of file %s complete" +msgstr "" + +#: ../libpurple/ft.c:897 +msgid "File transfer complete" +msgstr "" + +#: ../libpurple/ft.c:1511 +#, c-format +msgid "You cancelled the transfer of %s" +msgstr "" + +#: ../libpurple/ft.c:1516 +msgid "File transfer cancelled" +msgstr "" + +#: ../libpurple/ft.c:1574 +#, c-format +msgid "%s cancelled the transfer of %s" +msgstr "" + +#: ../libpurple/ft.c:1579 +#, c-format +msgid "%s cancelled the file transfer" +msgstr "" + +#: ../libpurple/ft.c:1636 +#, c-format +msgid "File transfer to %s failed." +msgstr "" + +#: ../libpurple/ft.c:1638 +#, c-format +msgid "File transfer from %s failed." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:1 +msgid "Run the command in a terminal" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:2 +msgid "The command used to handle \"aim\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:3 +msgid "The command used to handle \"gg\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:4 +msgid "The command used to handle \"icq\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:5 +msgid "The command used to handle \"irc\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:6 +msgid "The command used to handle \"msnim\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:7 +msgid "The command used to handle \"sip\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:8 +msgid "The command used to handle \"xmpp\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:9 +msgid "The command used to handle \"ymsgr\" URLs, if enabled." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:10 +msgid "The handler for \"aim\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:11 +msgid "The handler for \"gg\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:12 +msgid "The handler for \"icq\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:13 +msgid "The handler for \"irc\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:14 +msgid "The handler for \"msnim\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:15 +msgid "The handler for \"sip\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:16 +msgid "The handler for \"xmpp\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:17 +msgid "The handler for \"ymsgr\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:18 +msgid "" +"True if the command specified in the \"command\" key should handle \"aim\" " +"URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:19 +msgid "" +"True if the command specified in the \"command\" key should handle \"gg\" " +"URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:20 +msgid "" +"True if the command specified in the \"command\" key should handle \"icq\" " +"URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:21 +msgid "" +"True if the command specified in the \"command\" key should handle \"irc\" " +"URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:22 +msgid "" +"True if the command specified in the \"command\" key should handle \"msnim\"" +" URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:23 +msgid "" +"True if the command specified in the \"command\" key should handle \"sip\" " +"URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:24 +msgid "" +"True if the command specified in the \"command\" key should handle \"xmpp\" " +"URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:25 +msgid "" +"True if the command specified in the \"command\" key should handle \"ymsgr\"" +" URLs." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:26 +msgid "" +"True if the command used to handle this type of URL should be run in a " +"terminal." +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:27 +msgid "Whether the specified command should handle \"aim\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:28 +msgid "Whether the specified command should handle \"gg\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:29 +msgid "Whether the specified command should handle \"icq\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:30 +msgid "Whether the specified command should handle \"irc\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:31 +msgid "Whether the specified command should handle \"msnim\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:32 +msgid "Whether the specified command should handle \"sip\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:33 +msgid "Whether the specified command should handle \"xmpp\" URLs" +msgstr "" + +#: ../libpurple/gconf/purple.schemas.in.h:34 +msgid "Whether the specified command should handle \"ymsgr\" URLs" +msgstr "" + +#: ../libpurple/log.c:198 +msgid "<b><font color=\"red\">The logger has no read function</font></b>" +msgstr "" + +#: ../libpurple/log.c:655 +msgid "HTML" +msgstr "" + +#: ../libpurple/log.c:669 +msgid "Plain text" +msgstr "" + +#: ../libpurple/log.c:683 +msgid "Old flat format" +msgstr "" + +#: ../libpurple/log.c:914 +msgid "Logging of this conversation failed." +msgstr "" + +#: ../libpurple/log.c:1357 +msgid "XML" +msgstr "" + +#: ../libpurple/log.c:1444 +#, c-format +msgid "" +"<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" +"REPLY>:</b></font> %s<br/>\n" +msgstr "" + +#: ../libpurple/log.c:1446 +#, c-format +msgid "" +"<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" +"REPLY>:</b></font> %s<br/>\n" +msgstr "" + +#: ../libpurple/log.c:1505 ../libpurple/log.c:1638 +msgid "<font color=\"red\"><b>Unable to find log path!</b></font>" +msgstr "" + +#: ../libpurple/log.c:1517 ../libpurple/log.c:1647 +#, c-format +msgid "<font color=\"red\"><b>Could not read file: %s</b></font>" +msgstr "" + +#: ../libpurple/log.c:1579 +#, c-format +msgid "(%s) %s <AUTO-REPLY>: %s\n" +msgstr "" + +#: ../libpurple/media/backend-fs2.c:880 +msgid "" +"No codecs found. Install some GStreamer codecs found in GStreamer plugins " +"packages." +msgstr "" + +#: ../libpurple/media/backend-fs2.c:889 +msgid "" +"No codecs left. Your codec preferences in fs-codecs.conf are too strict." +msgstr "" + +#: ../libpurple/media/backend-fs2.c:919 +msgid "A non-recoverable Farsight2 error has occurred." +msgstr "" + +#: ../libpurple/media/backend-fs2.c:922 +msgid "A non-recoverable Farstream error has occurred." +msgstr "" + +#: ../libpurple/media/backend-fs2.c:1191 +msgid "Error with your microphone" +msgstr "" + +#: ../libpurple/media/backend-fs2.c:1194 +msgid "Error with your webcam" +msgstr "" + +#: ../libpurple/media/backend-fs2.c:1201 +msgid "Conference error" +msgstr "" + +#: ../libpurple/media/backend-fs2.c:1610 +#, c-format +msgid "Error creating session: %s" +msgstr "" + +#: ../libpurple/plugin.c:355 +#, c-format +msgid "You are using %s, but this plugin requires %s." +msgstr "" + +#: ../libpurple/plugin.c:370 +msgid "This plugin has not defined an ID." +msgstr "" + +#: ../libpurple/plugin.c:438 +#, c-format +msgid "Plugin magic mismatch %d (need %d)" +msgstr "" + +#: ../libpurple/plugin.c:455 +#, c-format +msgid "ABI version mismatch %d.%d.x (need %d.%d.x)" +msgstr "" + +#: ../libpurple/plugin.c:472 +msgid "" +"Plugin does not implement all required functions (list_icon, login and " +"close)" +msgstr "" + +#: ../libpurple/plugin.c:537 +#, c-format +msgid "" +"The required plugin %s was not found. Please install this plugin and try " +"again." +msgstr "" + +#: ../libpurple/plugin.c:542 +msgid "Unable to load the plugin" +msgstr "" + +#: ../libpurple/plugin.c:564 +#, c-format +msgid "The required plugin %s was unable to load." +msgstr "" + +#: ../libpurple/plugin.c:568 +msgid "Unable to load your plugin." +msgstr "" + +#: ../libpurple/plugin.c:655 +#, c-format +msgid "%s requires %s, but it failed to unload." +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:23 +msgid "Autoaccept" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:25 ../libpurple/plugins/autoaccept.c:26 +msgid "Auto-accept file transfer requests from selected users." +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:78 +#, c-format +msgid "Autoaccepted file transfer of \"%s\" from \"%s\" completed." +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:80 +msgid "Autoaccept complete" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:200 +#, c-format +msgid "When a file-transfer request arrives from %s" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:202 +msgid "Set Autoaccept Setting" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:204 +msgid "_Save" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:205 ../libpurple/plugins/idle.c:166 +#: ../libpurple/plugins/idle.c:200 ../libpurple/plugins/idle.c:226 +#: ../libpurple/protocols/mxit/actions.c:502 +#: ../libpurple/protocols/oscar/authorization.c:99 +#: ../libpurple/protocols/oscar/oscar.c:1224 +#: ../libpurple/protocols/oscar/oscar.c:4937 +#: ../libpurple/protocols/oscar/oscar.c:4994 +#: ../libpurple/protocols/oscar/oscar.c:5277 +#: ../libpurple/protocols/oscar/oscar.c:5334 ../libpurple/request.h:1498 +#: ../libpurple/request.h:1508 ../libpurple/request.h:1521 +msgid "_Cancel" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:208 ../libpurple/plugins/autoaccept.c:278 +msgid "Ask" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:209 ../libpurple/plugins/autoaccept.c:279 +msgid "Auto Accept" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:210 ../libpurple/plugins/autoaccept.c:280 +msgid "Auto Reject" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:225 +msgid "Autoaccept File Transfers..." +msgstr "" + +#. XXX: Is there a better way than this? There really should be. +#: ../libpurple/plugins/autoaccept.c:270 +msgid "" +"Path to save the files in\n" +"(Please provide the full path)" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:275 +msgid "" +"When a file-transfer request arrives from a user who is\n" +"*not* on your buddy list:" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:284 +msgid "" +"Notify with a popup when an autoaccepted file transfer is complete\n" +"(only when there's no conversation with the sender)" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:289 +msgid "Create a new directory for each user" +msgstr "" + +#: ../libpurple/plugins/autoaccept.c:293 +msgid "Escape the filenames" +msgstr "" + +#: ../libpurple/plugins/buddynote.c:46 ../libpurple/protocols/msn/msn.c:2487 +#: ../libpurple/protocols/msn/msn.c:2517 +msgid "Notes" +msgstr "" + +#: ../libpurple/plugins/buddynote.c:47 +msgid "Enter your notes below..." +msgstr "" + +#: ../libpurple/plugins/buddynote.c:65 +msgid "Edit Notes..." +msgstr "" + +#. *< major version +#. *< minor version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/buddynote.c:90 ../pidgin/plugins/gtkbuddynote.c:76 +msgid "Buddy Notes" +msgstr "" + +#. *< name +#. *< version +#: ../libpurple/plugins/buddynote.c:92 ../pidgin/plugins/gtkbuddynote.c:78 +msgid "Store notes on particular buddies." +msgstr "" + +#. *< summary +#: ../libpurple/plugins/buddynote.c:93 ../pidgin/plugins/gtkbuddynote.c:79 +msgid "Adds the option to store notes for buddies on your buddy list." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/ciphertest.c:264 +msgid "Cipher Test" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/ciphertest.c:267 ../libpurple/plugins/ciphertest.c:269 +msgid "Tests the ciphers that ship with libpurple." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/dbus-example.c:155 +msgid "DBus Example" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/dbus-example.c:158 +#: ../libpurple/plugins/dbus-example.c:160 +msgid "DBus Plugin Example" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/filectl.c:248 +msgid "File Control" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/filectl.c:251 ../libpurple/plugins/filectl.c:253 +msgid "Allows control by entering commands in a file." +msgstr "" + +#: ../libpurple/plugins/idle.c:154 ../libpurple/plugins/idle.c:214 +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. +#: ../libpurple/plugins/idle.c:161 ../libpurple/plugins/idle.c:195 +#: ../libpurple/plugins/idle.c:221 ../libpurple/plugins/idle.c:314 +msgid "I'dle Mak'er" +msgstr "" + +#: ../libpurple/plugins/idle.c:162 ../libpurple/plugins/idle.c:254 +msgid "Set Account Idle Time" +msgstr "" + +#: ../libpurple/plugins/idle.c:165 ../libpurple/plugins/idle.c:225 +msgid "_Set" +msgstr "" + +#: ../libpurple/plugins/idle.c:180 +msgid "None of your accounts are idle." +msgstr "" + +#: ../libpurple/plugins/idle.c:196 ../libpurple/plugins/idle.c:258 +msgid "Unset Account Idle Time" +msgstr "" + +#: ../libpurple/plugins/idle.c:199 +msgid "_Unset" +msgstr "" + +#: ../libpurple/plugins/idle.c:222 ../libpurple/plugins/idle.c:262 +msgid "Set Idle Time for All Accounts" +msgstr "" + +#: ../libpurple/plugins/idle.c:267 +msgid "Unset Idle Time for All Idled Accounts" +msgstr "" + +#: ../libpurple/plugins/idle.c:316 ../libpurple/plugins/idle.c:317 +msgid "Allows you to hand-configure how long you've been idle" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/ipc-test-client.c:87 +msgid "IPC Test Client" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../libpurple/plugins/ipc-test-client.c:90 +msgid "Test plugin IPC support, as a client." +msgstr "" + +#. * description +#: ../libpurple/plugins/ipc-test-client.c:92 +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 +#: ../libpurple/plugins/ipc-test-server.c:74 +msgid "IPC Test Server" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../libpurple/plugins/ipc-test-server.c:77 +msgid "Test plugin IPC support, as a server." +msgstr "" + +#. * description +#: ../libpurple/plugins/ipc-test-server.c:79 +msgid "Test plugin IPC support, as a server. This registers the IPC commands." +msgstr "" + +#: ../libpurple/plugins/joinpart.c:232 +msgid "Hide Joins/Parts" +msgstr "" + +#. Translators: Followed by an input request a number of people +#: ../libpurple/plugins/joinpart.c:237 +msgid "For rooms with more than this many people" +msgstr "" + +#: ../libpurple/plugins/joinpart.c:242 +msgid "If user has not spoken in this many minutes" +msgstr "" + +#: ../libpurple/plugins/joinpart.c:247 +msgid "Apply hiding rules to buddies" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/joinpart.c:277 +msgid "Join/Part Hiding" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../libpurple/plugins/joinpart.c:280 +msgid "Hides extraneous join/part messages." +msgstr "" + +#. * description +#: ../libpurple/plugins/joinpart.c:282 +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. +#: ../libpurple/plugins/log_reader.c:499 +msgid "(UTC)" +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1561 +msgid "User is offline." +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1567 +msgid "Auto-response sent:" +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1582 +#: ../libpurple/plugins/log_reader.c:1585 +#: ../libpurple/plugins/statenotify.c:93 +#, c-format +msgid "%s has signed off." +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1606 +msgid "One or more messages may have been undeliverable." +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1616 +msgid "You were disconnected from the server." +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1624 +msgid "" +"You are currently disconnected. Messages will not be received unless you are" +" logged in." +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1639 +msgid "Message could not be sent because the maximum length was exceeded." +msgstr "" + +#: ../libpurple/plugins/log_reader.c:1644 +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. +#: ../libpurple/plugins/log_reader.c:2726 +#: ../libpurple/plugins/log_reader.c:2882 +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. +#: ../libpurple/plugins/log_reader.c:2739 +#: ../libpurple/plugins/log_reader.c:2887 +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. +#: ../libpurple/plugins/log_reader.c:2751 +#: ../libpurple/plugins/log_reader.c:2891 +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. +#: ../libpurple/plugins/log_reader.c:2765 +#: ../libpurple/plugins/log_reader.c:2896 +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. +#: ../libpurple/plugins/log_reader.c:2777 +#: ../libpurple/plugins/log_reader.c:2900 +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. +#: ../libpurple/plugins/log_reader.c:2789 +#: ../libpurple/plugins/log_reader.c:2904 +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. +#: ../libpurple/plugins/log_reader.c:2801 +#: ../libpurple/plugins/log_reader.c:2908 +msgid "aMSN" +msgstr "" + +#. Add general preferences. +#: ../libpurple/plugins/log_reader.c:2864 +msgid "General Log Reading Configuration" +msgstr "" + +#: ../libpurple/plugins/log_reader.c:2868 +msgid "Fast size calculations" +msgstr "" + +#: ../libpurple/plugins/log_reader.c:2872 +msgid "Use name heuristics" +msgstr "" + +#. Add Log Directory preferences. +#: ../libpurple/plugins/log_reader.c:2878 +msgid "Log Directory" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/log_reader.c:2937 +msgid "Log Reader" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../libpurple/plugins/log_reader.c:2941 +msgid "Includes other IM clients' logs in the log viewer." +msgstr "" + +#. * description +#: ../libpurple/plugins/log_reader.c:2945 +msgid "" +"When viewing logs, this plugin will include logs from other IM clients. Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n" +"\n" +"WARNING: This plugin is still alpha code and may crash frequently. Use it at your own risk!" +msgstr "" + +#: ../libpurple/plugins/mono/loader/mono.c:224 +msgid "Mono Plugin Loader" +msgstr "" + +#: ../libpurple/plugins/mono/loader/mono.c:226 +#: ../libpurple/plugins/mono/loader/mono.c:227 +msgid "Loads .NET plugins with Mono." +msgstr "" + +#: ../libpurple/plugins/newline.c:57 +msgid "Add new line in IMs" +msgstr "" + +#: ../libpurple/plugins/newline.c:61 +msgid "Add new line in Chats" +msgstr "" + +#. *< magic +#. *< major version +#. *< minor version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/newline.c:104 +msgid "New Line" +msgstr "" + +#. *< name +#. *< version +#: ../libpurple/plugins/newline.c:106 +msgid "Prepends a newline to displayed message." +msgstr "" + +#. *< summary +#: ../libpurple/plugins/newline.c:107 +msgid "" +"Prepends a newline to messages so that the rest of the message appears below" +" the username in the conversation window." +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:23 +msgid "Offline Message Emulation" +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:25 ../libpurple/plugins/offlinemsg.c:26 +msgid "Save messages sent to an offline user as pounce." +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:95 +msgid "" +"The rest of the messages will be saved as pounces. You can edit/delete the " +"pounce from the `Buddy Pounce' dialog." +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:156 +#, 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 "" + +#: ../libpurple/plugins/offlinemsg.c:160 +msgid "Offline Message" +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:161 +msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog" +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:165 +#: ../libpurple/protocols/msn/error.c:378 +#: ../libpurple/protocols/msn/msn.c:1123 ../libpurple/protocols/msn/msn.c:1126 +#: ../libpurple/protocols/novell/novell.c:1929 +#: ../libpurple/protocols/silc/buddy.c:318 +#: ../libpurple/protocols/silc/pk.c:114 ../libpurple/protocols/silc/wb.c:309 +#: ../libpurple/protocols/silc10/buddy.c:314 +#: ../libpurple/protocols/silc10/pk.c:119 +#: ../libpurple/protocols/silc10/wb.c:307 ../pidgin/gtkrequest.c:298 +msgid "Yes" +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:166 +#: ../libpurple/protocols/msn/error.c:379 +#: ../libpurple/protocols/msn/msn.c:1123 ../libpurple/protocols/msn/msn.c:1126 +#: ../libpurple/protocols/novell/novell.c:1930 +#: ../libpurple/protocols/silc/buddy.c:319 +#: ../libpurple/protocols/silc/pk.c:115 ../libpurple/protocols/silc/wb.c:310 +#: ../libpurple/protocols/silc10/buddy.c:315 +#: ../libpurple/protocols/silc10/pk.c:120 +#: ../libpurple/protocols/silc10/wb.c:308 ../pidgin/gtkrequest.c:299 +msgid "No" +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:193 +msgid "Save offline messages in pounce" +msgstr "" + +#: ../libpurple/plugins/offlinemsg.c:197 +msgid "Do not ask. Always save in pounce." +msgstr "" + +#: ../libpurple/plugins/one_time_password.c:68 +msgid "One Time Password" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/one_time_password.c:123 +msgid "One Time Password Support" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../libpurple/plugins/one_time_password.c:126 +msgid "Enforce that passwords are used only once." +msgstr "" + +#. * description +#: ../libpurple/plugins/one_time_password.c:128 +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 +#: ../libpurple/plugins/perl/perl.c:671 +msgid "Perl Plugin Loader" +msgstr "" + +#. *< name +#. *< version +#. *< summary +#: ../libpurple/plugins/perl/perl.c:673 ../libpurple/plugins/perl/perl.c:674 +msgid "Provides support for loading perl plugins." +msgstr "" + +#: ../libpurple/plugins/psychic.c:20 +msgid "Psychic Mode" +msgstr "" + +#: ../libpurple/plugins/psychic.c:21 +msgid "Psychic mode for incoming conversation" +msgstr "" + +#: ../libpurple/plugins/psychic.c:22 +msgid "" +"Causes conversation windows to appear as other users begin to message you. " +"This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" +msgstr "" + +#: ../libpurple/plugins/psychic.c:72 +msgid "You feel a disturbance in the force..." +msgstr "" + +#: ../libpurple/plugins/psychic.c:92 +msgid "Only enable for users on the buddy list" +msgstr "" + +#: ../libpurple/plugins/psychic.c:97 +msgid "Disable when away" +msgstr "" + +#: ../libpurple/plugins/psychic.c:101 +msgid "Display notification message in conversations" +msgstr "" + +#: ../libpurple/plugins/psychic.c:106 +msgid "Raise psychic conversations" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/signals-test.c:928 +msgid "Signals Test" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/signals-test.c:931 +#: ../libpurple/plugins/signals-test.c:933 +msgid "Test to see that all signals are working properly." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/simple.c:37 +msgid "Simple Plugin" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/simple.c:40 ../libpurple/plugins/simple.c:42 +msgid "Tests to see that most things are working." +msgstr "" + +#. Scheme name +#: ../libpurple/plugins/ssl/ssl-gnutls.c:1148 +#: ../libpurple/plugins/ssl/ssl-nss.c:963 +msgid "X.509 Certificates" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/ssl/ssl-gnutls.c:1224 +msgid "GNUTLS" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/ssl/ssl-gnutls.c:1227 +#: ../libpurple/plugins/ssl/ssl-gnutls.c:1229 +msgid "Provides SSL support through GNUTLS." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/ssl/ssl-nss.c:1040 +msgid "NSS" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/ssl/ssl-nss.c:1043 +#: ../libpurple/plugins/ssl/ssl-nss.c:1045 +msgid "Provides SSL support through Mozilla NSS." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/ssl/ssl.c:94 +msgid "SSL" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/ssl/ssl.c:97 ../libpurple/plugins/ssl/ssl.c:99 +msgid "Provides a wrapper around SSL support libraries." +msgstr "" + +#: ../libpurple/plugins/statenotify.c:63 +#, c-format +msgid "%s is no longer away." +msgstr "" + +#: ../libpurple/plugins/statenotify.c:65 +#, c-format +msgid "%s has gone away." +msgstr "" + +#: ../libpurple/plugins/statenotify.c:75 +#, c-format +msgid "%s has become idle." +msgstr "" + +#: ../libpurple/plugins/statenotify.c:77 +#, c-format +msgid "%s is no longer idle." +msgstr "" + +#: ../libpurple/plugins/statenotify.c:86 +#, c-format +msgid "%s has signed on." +msgstr "" + +#: ../libpurple/plugins/statenotify.c:104 +msgid "Notify When" +msgstr "" + +#: ../libpurple/plugins/statenotify.c:107 +msgid "Buddy Goes _Away" +msgstr "" + +#: ../libpurple/plugins/statenotify.c:110 +msgid "Buddy Goes _Idle" +msgstr "" + +#: ../libpurple/plugins/statenotify.c:113 +msgid "Buddy _Signs On/Off" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../libpurple/plugins/statenotify.c:161 +msgid "Buddy State Notification" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/plugins/statenotify.c:164 +#: ../libpurple/plugins/statenotify.c:167 +msgid "" +"Notifies in a conversation window when a buddy goes or returns from away or " +"idle." +msgstr "" + +#: ../libpurple/plugins/tcl/tcl.c:403 +msgid "Tcl Plugin Loader" +msgstr "" + +#: ../libpurple/plugins/tcl/tcl.c:405 ../libpurple/plugins/tcl/tcl.c:406 +msgid "Provides support for loading Tcl plugins" +msgstr "" + +#: ../libpurple/plugins/tcl/tcl.c:489 +msgid "" +"Unable to detect ActiveTCL installation. If you wish to use TCL plugins, " +"install ActiveTCL from http://www.activestate.com\n" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:99 +msgid "" +"Unable to find Apple's \"Bonjour for Windows\" toolkit, see " +"http://d.pidgin.im/BonjourWindows for more information." +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:119 +msgid "Unable to listen for incoming IM connections" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:146 +msgid "" +"Unable to establish connection with the local mDNS server. Is it running?" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:386 +#: ../libpurple/protocols/bonjour/bonjour.c:736 +#: ../libpurple/protocols/gg/gg.c:302 +#: ../libpurple/protocols/jabber/jabber.c:1322 +msgid "First name" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:388 +#: ../libpurple/protocols/bonjour/bonjour.c:739 +#: ../libpurple/protocols/gg/gg.c:297 +#: ../libpurple/protocols/jabber/jabber.c:1323 +msgid "Last name" +msgstr "" + +#. email +#: ../libpurple/protocols/bonjour/bonjour.c:392 +#: ../libpurple/protocols/bonjour/bonjour.c:742 +#: ../libpurple/protocols/jabber/buddy.c:362 +#: ../libpurple/protocols/jabber/buddy.c:1127 +#: ../libpurple/protocols/jabber/buddy.c:1140 +#: ../libpurple/protocols/jabber/buddy.c:2006 +#: ../libpurple/protocols/jabber/jabber.c:1320 +#: ../libpurple/protocols/mxit/actions.c:294 +#: ../libpurple/protocols/silc/ops.c:1054 +#: ../libpurple/protocols/silc/silc.c:1010 +#: ../libpurple/protocols/silc/silc.c:1251 +#: ../libpurple/protocols/silc/util.c:562 +#: ../libpurple/protocols/silc10/ops.c:1075 +#: ../libpurple/protocols/silc10/silc.c:706 +#: ../libpurple/protocols/silc10/silc.c:947 +#: ../libpurple/protocols/silc10/util.c:555 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1060 +msgid "Email" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:395 +#: ../libpurple/protocols/bonjour/bonjour.c:745 +msgid "AIM Account" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:398 +#: ../libpurple/protocols/bonjour/bonjour.c:748 +msgid "XMPP Account" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/bonjour/bonjour.c:557 +#: ../libpurple/protocols/bonjour/bonjour.c:559 +msgid "Bonjour Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.c:701 +msgid "Purple Person" +msgstr "" + +#. Creating the options for the protocol +#: ../libpurple/protocols/bonjour/bonjour.c:733 +msgid "Local Port" +msgstr "" + +#: ../libpurple/protocols/bonjour/bonjour.h:33 +msgid "Bonjour" +msgstr "" + +#: ../libpurple/protocols/bonjour/jabber.c:398 +#, c-format +msgid "%s has closed the conversation." +msgstr "" + +#: ../libpurple/protocols/bonjour/jabber.c:488 +#: ../libpurple/protocols/bonjour/jabber.c:553 +#: ../libpurple/protocols/bonjour/jabber.c:598 +#: ../libpurple/protocols/bonjour/jabber.c:874 +#: ../libpurple/protocols/bonjour/jabber.c:895 +msgid "Unable to send the message, the conversation couldn't be started." +msgstr "" + +#: ../libpurple/protocols/bonjour/mdns_win32.c:109 +msgid "Error communicating with local mDNSResponder." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:96 ../libpurple/proxy.c:2359 +#: ../libpurple/proxy.c:2427 +msgid "Invalid proxy settings" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:97 ../libpurple/proxy.c:2359 +#: ../libpurple/proxy.c:2427 +msgid "" +"Either the host name or port number specified for your given proxy type is " +"invalid." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:126 ../libpurple/protocols/gg/gg.c:133 +#: ../libpurple/protocols/gg/gg.c:139 +msgid "Save Buddylist..." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:127 +msgid "Your buddylist is empty, nothing was written to the file." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:134 +msgid "Buddylist saved successfully!" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:137 +#, c-format +msgid "Couldn't write buddy list for %s to %s" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:158 ../libpurple/protocols/gg/gg.c:159 +msgid "Couldn't load buddylist" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:175 +msgid "Load Buddylist..." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:176 +msgid "Buddylist loaded successfully!" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:187 +msgid "Save buddylist..." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:197 ../libpurple/protocols/gg/gg.c:2193 +msgid "Load buddylist from file..." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:312 ../libpurple/protocols/gg/gg.c:805 +#: ../libpurple/protocols/gg/gg.c:876 +#: ../libpurple/protocols/jabber/jabber.c:1325 +#: ../libpurple/protocols/oscar/userinfo.c:462 +#: ../libpurple/protocols/oscar/userinfo.c:470 +msgid "City" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:317 +msgid "Year of birth" +msgstr "" + +#. gender +#: ../libpurple/protocols/gg/gg.c:320 ../libpurple/protocols/msn/msn.c:2416 +#: ../libpurple/protocols/mxit/actions.c:245 +#: ../libpurple/protocols/mxit/login.c:349 +#: ../libpurple/protocols/mxit/profile.c:217 +#: ../libpurple/protocols/mxit/profile.c:327 +#: ../libpurple/protocols/myspace/user.c:131 +#: ../libpurple/protocols/oscar/userinfo.c:423 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1090 +msgid "Gender" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:321 +msgid "Male or female" +msgstr "" + +#. 0 +#: ../libpurple/protocols/gg/gg.c:322 +#: ../libpurple/protocols/mxit/actions.c:247 +#: ../libpurple/protocols/mxit/login.c:351 +#: ../libpurple/protocols/mxit/profile.c:217 +#: ../libpurple/protocols/oscar/userinfo.c:423 +msgid "Male" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:323 +#: ../libpurple/protocols/mxit/actions.c:246 +#: ../libpurple/protocols/mxit/login.c:350 +#: ../libpurple/protocols/mxit/profile.c:217 +#: ../libpurple/protocols/oscar/userinfo.c:423 +msgid "Female" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:327 +msgid "Only online" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:331 ../libpurple/protocols/gg/gg.c:332 +msgid "Find buddies" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:333 +msgid "Please, enter your search criteria below" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:375 +msgid "Show status to:" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:376 +msgid "All people" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:377 +msgid "Only buddies" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:386 ../libpurple/protocols/gg/gg.c:387 +#: ../libpurple/protocols/gg/gg.c:2183 +msgid "Change status broadcasting" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:388 +msgid "Please, select who can see your status" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:448 +#, c-format +msgid "Select a chat for buddy: %s" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:451 ../libpurple/protocols/gg/gg.c:452 +msgid "Add to chat..." +msgstr "" + +#. 0 +#. Global +#: ../libpurple/protocols/gg/gg.c:759 +#: ../libpurple/protocols/jabber/jutil.c:703 +#: ../libpurple/protocols/msn/state.c:35 ../libpurple/protocols/msn/state.c:36 +#: ../libpurple/protocols/msn/state.c:43 ../libpurple/protocols/msn/state.c:44 +#: ../libpurple/protocols/mxit/roster.c:54 +#: ../libpurple/protocols/novell/novell.c:2839 +#: ../libpurple/protocols/yahoo/libymsg.c:4106 ../libpurple/status.c:163 +#: ../pidgin/gtkdocklet.c:548 ../pidgin/gtkstatusbox.c:1096 +#: ../pidgin/plugins/themeedit-icon.c:63 +msgid "Available" +msgstr "" + +#. 2 +#: ../libpurple/protocols/gg/gg.c:763 +#: ../libpurple/protocols/jabber/jabber.c:2394 +#: ../libpurple/protocols/jabber/jutil.c:704 +#: ../libpurple/protocols/mxit/roster.c:56 +msgid "Chatty" +msgstr "" + +#. 3 +#: ../libpurple/protocols/gg/gg.c:766 +#: ../libpurple/protocols/jabber/jabber.c:2440 +#: ../libpurple/protocols/jabber/jutil.c:707 +#: ../libpurple/protocols/mxit/roster.c:57 +#: ../libpurple/protocols/oscar/oscar.c:159 +#: ../libpurple/protocols/oscar/oscar.c:4846 +#: ../libpurple/protocols/sametime/sametime.c:3380 +msgid "Do Not Disturb" +msgstr "" + +#. 1 +#. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for +#. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message +#. Away stuff +#: ../libpurple/protocols/gg/gg.c:769 ../libpurple/protocols/irc/irc.c:595 +#: ../libpurple/protocols/irc/msgs.c:427 +#: ../libpurple/protocols/jabber/jutil.c:705 +#: ../libpurple/protocols/mxit/roster.c:55 +#: ../libpurple/protocols/novell/novell.c:2842 +#: ../libpurple/protocols/oscar/oscar.c:165 +#: ../libpurple/protocols/silc/buddy.c:1489 +#: ../libpurple/protocols/silc10/buddy.c:1496 +#: ../libpurple/protocols/yahoo/libymsg.c:4984 +#: ../libpurple/protocols/yahoo/libymsg.c:5071 ../libpurple/status.c:166 +#: ../pidgin/gtkdocklet.c:552 ../pidgin/gtkprefs.c:2707 +#: ../pidgin/gtkstatusbox.c:1097 ../pidgin/plugins/themeedit-icon.c:64 +msgid "Away" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:794 ../libpurple/protocols/gg/gg.c:867 +#: ../libpurple/protocols/oscar/oscar.c:2295 +#: ../libpurple/protocols/oscar/oscar.c:2318 +#: ../libpurple/protocols/oscar/userinfo.c:400 +msgid "UIN" +msgstr "" + +#. first name +#. optional information +#: ../libpurple/protocols/gg/gg.c:797 ../libpurple/protocols/gg/gg.c:870 +#: ../libpurple/protocols/jabber/buddy.c:2000 +#: ../libpurple/protocols/jabber/buddy.c:2187 +#: ../libpurple/protocols/mxit/actions.c:251 +#: ../libpurple/protocols/mxit/profile.c:220 +#: ../libpurple/protocols/mxit/profile.c:323 +#: ../libpurple/protocols/oscar/userinfo.c:411 +#: ../libpurple/protocols/silc/ops.c:1003 +#: ../libpurple/protocols/silc10/ops.c:1024 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:544 +msgid "First Name" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:810 ../libpurple/protocols/gg/gg.c:879 +msgid "Birth Year" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:860 ../libpurple/protocols/gg/gg.c:925 +#: ../libpurple/protocols/oscar/oscar.c:3012 +msgid "Unable to display the search results." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:916 +msgid "Gadu-Gadu Public Directory" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:917 +msgid "Search results" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:957 +msgid "No matching users found" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:958 +msgid "There are no users matching your search criteria." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:1312 ../libpurple/protocols/gg/gg.c:1467 +msgid "Unable to read from socket" +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). +#: ../libpurple/protocols/gg/gg.c:1496 +#: ../libpurple/protocols/myspace/myspace.c:1159 +#: ../libpurple/protocols/sametime/sametime.c:1578 +msgid "Connected" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:1505 ../libpurple/protocols/gg/gg.c:1759 +#: ../libpurple/protocols/silc/silc.c:375 +#: ../libpurple/protocols/silc/silc.c:422 +#: ../libpurple/protocols/silc10/silc.c:164 +msgid "Connection failed" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:1654 +msgid "Add to chat" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:1669 +msgid "Chat _name:" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:1739 +#, c-format +msgid "Unable to resolve hostname '%s': %s" +msgstr "" + +#. 1. connect to server +#. connect to the server +#: ../libpurple/protocols/gg/gg.c:1755 ../libpurple/protocols/irc/irc.c:361 +#: ../libpurple/protocols/jabber/jabber.c:1741 +#: ../libpurple/protocols/msn/session.c:432 +#: ../libpurple/protocols/myspace/myspace.c:2206 +#: ../libpurple/protocols/novell/novell.c:2198 +#: ../libpurple/protocols/oscar/oscar.c:834 +#: ../libpurple/protocols/sametime/sametime.c:3769 +#: ../libpurple/protocols/simple/simple.c:1960 +#: ../libpurple/protocols/yahoo/libymsg.c:3910 +#: ../libpurple/protocols/zephyr/zephyr.c:1584 ../pidgin/gtkstatusbox.c:716 +msgid "Connecting" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2086 +msgid "Chat error" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2087 +msgid "This chat name is already in use" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2170 +msgid "Not connected to the server" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2179 +msgid "Find buddies..." +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2189 +msgid "Save buddylist to file..." +msgstr "" + +#. magic +#. major_version +#. minor_version +#. plugin type +#. ui_requirement +#. flags +#. dependencies +#. priority +#. id +#. name +#. version +#: ../libpurple/protocols/gg/gg.c:2297 +msgid "Gadu-Gadu Protocol Plugin" +msgstr "" + +#. summary +#: ../libpurple/protocols/gg/gg.c:2298 +msgid "Polish popular IM" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2347 +msgid "Gadu-Gadu User" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2351 +msgid "GG server" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2363 +#: ../libpurple/protocols/oscar/oscar.c:5742 +msgid "Don't use encryption" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2364 +#: ../libpurple/protocols/jabber/libxmpp.c:277 +#: ../libpurple/protocols/oscar/oscar.c:5740 +msgid "Use encryption if available" +msgstr "" + +#. TODO +#: ../libpurple/protocols/gg/gg.c:2368 +#: ../libpurple/protocols/jabber/libxmpp.c:276 +#: ../libpurple/protocols/oscar/oscar.c:5741 +msgid "Require encryption" +msgstr "" + +#: ../libpurple/protocols/gg/gg.c:2371 +#: ../libpurple/protocols/jabber/libxmpp.c:286 +#: ../libpurple/protocols/oscar/oscar.c:5766 +msgid "Connection security" +msgstr "" + +#: ../libpurple/protocols/irc/cmds.c:43 +#: ../libpurple/protocols/silc/silc.c:1900 +#: ../libpurple/protocols/silc10/silc.c:1609 +#, c-format +msgid "Unknown command: %s" +msgstr "" + +#: ../libpurple/protocols/irc/cmds.c:536 +#: ../libpurple/protocols/jabber/jabber.c:2863 +#: ../libpurple/protocols/silc/silc.c:1590 +#: ../libpurple/protocols/silc10/silc.c:1299 +#, c-format +msgid "current topic is: %s" +msgstr "" + +#: ../libpurple/protocols/irc/cmds.c:540 +#: ../libpurple/protocols/jabber/jabber.c:2867 +#: ../libpurple/protocols/silc/silc.c:1594 +#: ../libpurple/protocols/silc10/silc.c:1303 +msgid "No topic is set" +msgstr "" + +#: ../libpurple/protocols/irc/dcc_send.c:304 +#: ../libpurple/protocols/irc/dcc_send.c:345 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:327 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:336 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:345 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1216 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1977 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:2074 +msgid "File Transfer Failed" +msgstr "" + +#: ../libpurple/protocols/irc/dcc_send.c:305 +#: ../libpurple/protocols/irc/dcc_send.c:346 +msgid "Unable to open a listening port." +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:77 +msgid "Error displaying MOTD" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:77 +msgid "No MOTD available" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:78 +msgid "There is no MOTD associated with this connection." +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:81 +#, c-format +msgid "MOTD for %s" +msgstr "" + +#. * TODO: Handle this better. Probably requires a PurpleBOSHConnection +#. * buffer that stores what is "being sent" until the +#. * PurpleHTTPConnection reports it is fully sent. +#. TODO: do we really want to disconnect on a failure to write? +#: ../libpurple/protocols/irc/irc.c:129 ../libpurple/protocols/irc/irc.c:174 +#: ../libpurple/protocols/irc/irc.c:693 ../libpurple/protocols/irc/irc.c:724 +#: ../libpurple/protocols/jabber/bosh.c:1044 +#: ../libpurple/protocols/jabber/bosh.c:1100 +#: ../libpurple/protocols/jabber/jabber.c:408 +#: ../libpurple/protocols/jabber/jabber.c:444 +#: ../libpurple/protocols/jabber/jabber.c:671 +#: ../libpurple/protocols/jabber/jabber.c:729 +#: ../libpurple/protocols/myspace/myspace.c:2070 +#: ../libpurple/protocols/oscar/flap_connection.c:474 +#: ../libpurple/protocols/sametime/sametime.c:412 +#: ../libpurple/protocols/sametime/sametime.c:1779 +#: ../libpurple/protocols/simple/simple.c:433 +#: ../libpurple/protocols/yahoo/libymsg.c:3376 +#: ../libpurple/protocols/yahoo/libymsg.c:3530 +#: ../libpurple/protocols/yahoo/ycht.c:476 ../libpurple/proxy.c:948 +#: ../libpurple/proxy.c:1544 ../libpurple/proxy.c:1658 +#: ../libpurple/proxy.c:1893 ../libpurple/proxy.c:1969 +#, c-format +msgid "Lost connection with server: %s" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:289 +msgid "View MOTD" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:301 ../libpurple/protocols/silc/chat.c:34 +#: ../libpurple/protocols/silc10/chat.c:33 +msgid "_Channel:" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:307 +#: ../libpurple/protocols/jabber/chat.c:62 ../pidgin/gtkaccount.c:594 +msgid "_Password:" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:340 +msgid "IRC nick and server may not contain whitespace" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:371 +#: ../libpurple/protocols/jabber/bosh.c:995 +#: ../libpurple/protocols/jabber/jabber.c:1064 +#: ../libpurple/protocols/novell/novell.c:2213 +#: ../libpurple/protocols/yahoo/libymsg.c:2188 +msgid "SSL support unavailable" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:384 +#: ../libpurple/protocols/jabber/bosh.c:1001 +#: ../libpurple/protocols/jabber/jabber.c:794 +#: ../libpurple/protocols/jabber/jabber.c:879 +#: ../libpurple/protocols/msn/msn.c:1379 +#: ../libpurple/protocols/msn/servconn.c:143 +#: ../libpurple/protocols/mxit/http.c:332 +#: ../libpurple/protocols/myspace/myspace.c:2224 +#: ../libpurple/protocols/novell/novell.c:1743 +#: ../libpurple/protocols/oscar/oscar.c:829 +#: ../libpurple/protocols/oscar/oscar.c:1051 +#: ../libpurple/protocols/oscar/oscar.c:1172 +#: ../libpurple/protocols/sametime/sametime.c:3773 +#: ../libpurple/protocols/silc/silc.c:451 +#: ../libpurple/protocols/simple/simple.c:482 +#: ../libpurple/protocols/simple/simple.c:1860 +#: ../libpurple/protocols/yahoo/libymsg.c:3583 +#: ../libpurple/protocols/yahoo/libymsg.c:3771 +#: ../libpurple/protocols/yahoo/libymsg.c:3856 +#: ../libpurple/protocols/yahoo/libymsg.c:3878 +#: ../libpurple/protocols/yahoo/libymsg.c:3891 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:2074 +#: ../libpurple/protocols/yahoo/yahoochat.c:1530 +#: ../libpurple/protocols/yahoo/yahoochat.c:1556 +#: ../libpurple/protocols/yahoo/ycht.c:549 +#: ../libpurple/protocols/yahoo/ycht.c:585 +msgid "Unable to connect" +msgstr "" + +#. this is a regular connect, error out +#: ../libpurple/protocols/irc/irc.c:475 +#: ../libpurple/protocols/myspace/myspace.c:2163 +#: ../libpurple/protocols/oscar/flap_connection.c:479 +#: ../libpurple/protocols/sametime/sametime.c:1804 +#: ../libpurple/protocols/simple/simple.c:452 +#: ../libpurple/protocols/simple/simple.c:1740 +#: ../libpurple/protocols/yahoo/libymsg.c:3465 +#: ../libpurple/protocols/yahoo/libymsg.c:3491 +#, c-format +msgid "Unable to connect: %s" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:702 ../libpurple/protocols/irc/irc.c:733 +#: ../libpurple/protocols/jabber/jabber.c:669 +#: ../libpurple/protocols/jabber/jabber.c:727 +#: ../libpurple/protocols/myspace/myspace.c:2079 +#: ../libpurple/protocols/oscar/flap_connection.c:472 +#: ../libpurple/protocols/sametime/sametime.c:1771 +#: ../libpurple/protocols/yahoo/libymsg.c:3383 +#: ../libpurple/protocols/yahoo/libymsg.c:3537 +#: ../libpurple/protocols/yahoo/ycht.c:482 ../libpurple/proxy.c:937 +#: ../libpurple/proxy.c:1532 ../libpurple/proxy.c:1646 +#: ../libpurple/proxy.c:1882 ../libpurple/proxy.c:1957 +msgid "Server closed the connection" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:869 +#: ../libpurple/protocols/silc/chat.c:1405 +#: ../libpurple/protocols/silc10/chat.c:1426 +#: ../libpurple/protocols/yahoo/yahoochat.c:1613 +msgid "Users" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:872 +#: ../libpurple/protocols/sametime/sametime.c:3457 +#: ../libpurple/protocols/silc/chat.c:1408 +#: ../libpurple/protocols/silc/ops.c:1405 +#: ../libpurple/protocols/silc10/chat.c:1429 +#: ../libpurple/protocols/silc10/ops.c:1382 +#: ../libpurple/protocols/yahoo/yahoochat.c:1622 +msgid "Topic" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#: ../libpurple/protocols/irc/irc.c:1016 +msgid "IRC Protocol Plugin" +msgstr "" + +#. * summary +#: ../libpurple/protocols/irc/irc.c:1017 +msgid "The IRC Protocol Plugin that Sucks Less" +msgstr "" + +#. set up account ID as user:server +#: ../libpurple/protocols/irc/irc.c:1042 ../libpurple/protocols/irc/msgs.c:448 +#: ../libpurple/protocols/msn/msn.c:3025 +#: ../libpurple/protocols/oscar/oscar.c:5754 +#: ../libpurple/protocols/sametime/sametime.c:5783 +#: ../libpurple/protocols/silc/ops.c:1261 +#: ../libpurple/protocols/silc/ops.c:1355 +#: ../libpurple/protocols/silc10/ops.c:1244 +#: ../libpurple/protocols/silc10/ops.c:1347 +#: ../libpurple/protocols/simple/simple.c:2164 +msgid "Server" +msgstr "" + +#. port to connect to +#: ../libpurple/protocols/irc/irc.c:1045 ../libpurple/protocols/msn/msn.c:3030 +#: ../libpurple/protocols/oscar/oscar.c:5757 +#: ../libpurple/protocols/sametime/sametime.c:5792 +#: ../libpurple/protocols/silc/silc.c:2196 +#: ../libpurple/protocols/silc10/silc.c:1910 +msgid "Port" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:1048 +msgid "Encodings" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:1051 +msgid "Auto-detect incoming UTF-8" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:1054 ../libpurple/protocols/irc/msgs.c:439 +msgid "Ident name" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:1057 ../libpurple/protocols/irc/msgs.c:431 +#: ../libpurple/protocols/silc/silc.c:1249 +#: ../libpurple/protocols/silc10/silc.c:945 +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); +#: ../libpurple/protocols/irc/irc.c:1065 +msgid "Use SSL" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:1069 +msgid "Authenticate with SASL" +msgstr "" + +#: ../libpurple/protocols/irc/irc.c:1073 +msgid "Allow plaintext SASL auth over unencrypted connection" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:261 +msgid "Bad mode" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:279 +#, c-format +msgid "Ban on %s by %s, set %s ago" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:283 +#, c-format +msgid "Ban on %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:298 +msgid "End of ban list" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:311 +#, c-format +msgid "You are banned from %s." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:312 +msgid "Banned" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:326 +#, c-format +msgid "Cannot ban %s: banlist is full" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:418 +msgid " <i>(ircop)</i>" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:419 +msgid " <i>(identified)</i>" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:420 +#: ../libpurple/protocols/oscar/userinfo.c:401 +#: ../libpurple/protocols/silc/ops.c:1434 +#: ../libpurple/protocols/silc10/ops.c:1414 +msgid "Nick" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:435 +msgid "Login name" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:443 +msgid "Host name" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:454 +#: ../libpurple/protocols/silc/ops.c:1280 +#: ../libpurple/protocols/silc10/ops.c:1272 +msgid "Currently on" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:459 +msgid "Idle for" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:462 +msgid "Online since" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:466 +msgid "<b>Defining adjective:</b>" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:466 +msgid "Glorious" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:613 +#, c-format +msgid "%s has changed the topic to: %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:615 +#, c-format +msgid "%s has cleared the topic." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:623 +#, c-format +msgid "The topic for %s is: %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:655 +#, c-format +msgid "Topic for %s set by %s at %s on %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:669 +#, c-format +msgid "Unknown message '%s'" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:670 +msgid "Unknown message" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:670 +msgid "The IRC server received a message it did not understand." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:691 +#, c-format +msgid "Users on %s: %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:799 +msgid "Time Response" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:800 +msgid "The IRC server's local time is:" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:810 +msgid "No such channel" +msgstr "" + +#. does this happen? +#: ../libpurple/protocols/irc/msgs.c:821 +msgid "no such channel" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:824 +msgid "User is not logged in" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:829 +msgid "No such nick or channel" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:849 +msgid "Could not send" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:900 +#, c-format +msgid "Joining %s requires an invitation." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:901 +msgid "Invitation only" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1030 +#: ../libpurple/protocols/jabber/presence.c:740 +#, c-format +msgid "You have been kicked by %s: (%s)" +msgstr "" + +#. Remove user from channel +#: ../libpurple/protocols/irc/msgs.c:1035 +#: ../libpurple/protocols/jabber/presence.c:747 +#: ../libpurple/protocols/silc/ops.c:726 +#: ../libpurple/protocols/silc10/ops.c:720 +#, c-format +msgid "Kicked by %s (%s)" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1058 +#, c-format +msgid "mode (%s %s) by %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1148 +#: ../libpurple/protocols/irc/msgs.c:1149 +#: ../libpurple/protocols/jabber/jabber.c:2885 +msgid "Invalid nickname" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1150 +msgid "" +"Your selected nickname was rejected by the server. It probably contains " +"invalid characters." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1155 +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. +#: ../libpurple/protocols/irc/msgs.c:1168 +#, c-format +msgid "The nickname \"%s\" is already being used." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1170 +#: ../libpurple/protocols/irc/msgs.c:1171 +msgid "Nickname in use" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1211 +msgid "Cannot change nick" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1211 +msgid "Could not change nick" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1235 +#, c-format +msgid "You have parted the channel%s%s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1274 +msgid "Error: invalid PONG from server" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1276 +#, c-format +msgid "PING reply -- Lag: %lu seconds" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1363 +#, c-format +msgid "Cannot join %s: Registration is required." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1364 +#: ../libpurple/protocols/silc/ops.c:1105 +#: ../libpurple/protocols/silc10/ops.c:1128 +msgid "Cannot join channel" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1394 +msgid "Nick or channel is temporarily unavailable." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1405 +#, c-format +msgid "Wallops from %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1507 +#: ../libpurple/protocols/irc/msgs.c:1630 +#, c-format +msgid "Failed to initialize SASL authentication: %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1528 +msgid "SASL authentication failed: No worthy authentication mechanisms found." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1534 +#: ../libpurple/protocols/irc/msgs.c:1670 +#, c-format +msgid "SASL authentication failed: %s" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1581 +msgid "" +"SASL authentication failed: Server does not support SASL authentication." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1590 +msgid "SASL authentication failed: Initializing SASL failed." +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1720 +#: ../libpurple/protocols/irc/msgs.c:1763 +msgid "Incorrect Password" +msgstr "" + +#: ../libpurple/protocols/irc/msgs.c:1747 +msgid "SASL authentication failed: No worthy mechanisms found" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:141 +msgid "action <action to perform>: Perform an action." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:142 +msgid "authserv: Send a command to authserv" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:143 +msgid "" +"away [message]: Set an away message, or use no message to return from being" +" away." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:144 +msgid "ctcp <nick> <msg>: sends ctcp msg to nick." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:145 +msgid "chanserv: Send a command to chanserv" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:146 +msgid "" +"deop <nick1> [nick2] ...: Remove channel operator status from " +"someone. You must be a channel operator to do this." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:147 +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 "" + +#: ../libpurple/protocols/irc/parse.c:148 +msgid "" +"invite <nick> [room]: Invite someone to join you in the specified " +"channel, or the current channel." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:149 +msgid "" +"j <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " +"channels, optionally providing a channel key for each if needed." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:150 +msgid "" +"join <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " +"channels, optionally providing a channel key for each if needed." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:151 +msgid "" +"kick <nick> [message]: Remove someone from a channel. You must be a " +"channel operator to do this." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:152 +msgid "" +"list: Display a list of chat rooms on the network. <i>Warning, some servers" +" may disconnect you upon doing this.</i>" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:153 +msgid "me <action to perform>: Perform an action." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:154 +msgid "memoserv: Send a command to memoserv" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:155 +msgid "" +"mode <+|-><A-Za-z> <nick|channel>: Set or unset a channel" +" or user mode." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:156 +msgid "" +"msg <nick> <message>: Send a private message to a user (as " +"opposed to a channel)." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:157 +msgid "names [channel]: List the users currently in a channel." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:158 +#: ../libpurple/protocols/jabber/jabber.c:3616 +msgid "nick <new nickname>: Change your nickname." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:159 +msgid "nickserv: Send a command to nickserv" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:160 +msgid "notice <target<: Send a notice to a user or channel." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:161 +msgid "" +"op <nick1> [nick2] ...: Grant channel operator status to someone. You" +" must be a channel operator to do this." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:162 +msgid "" +"operwall <message>: If you don't know what this is, you probably " +"can't use it." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:163 +msgid "operserv: Send a command to operserv" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:164 +msgid "" +"part [room] [message]: Leave the current channel, or a specified channel, " +"with an optional message." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:165 +msgid "" +"ping [nick]: Asks how much lag a user (or the server if no user specified) " +"has." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:166 +msgid "" +"query <nick> <message>: Send a private message to a user (as " +"opposed to a channel)." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:167 +msgid "quit [message]: Disconnect from the server, with an optional message." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:168 +msgid "quote [...]: Send a raw command to the server." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:169 +msgid "" +"remove <nick> [message]: Remove someone from a room. You must be a " +"channel operator to do this." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:170 +msgid "time: Displays the current local time at the IRC server." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:171 +msgid "topic [new topic]: View or change the channel topic." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:172 +msgid "umode <+|-><A-Za-z>: Set or unset a user mode." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:173 +msgid "version [nick]: send CTCP VERSION request to a user" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:174 +msgid "" +"voice <nick1> [nick2] ...: Grant channel voice status to someone. You" +" must be a channel operator to do this." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:175 +msgid "" +"wallops <message>: If you don't know what this is, you probably can't" +" use it." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:176 +msgid "whois [server] <nick>: Get information on a user." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:177 +msgid "whowas <nick>: Get information on a user that has logged off." +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:573 +#, c-format +msgid "Reply time from %s: %lu seconds" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:574 +msgid "PONG" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:574 +msgid "CTCP PING reply" +msgstr "" + +#: ../libpurple/protocols/irc/parse.c:690 +#: ../libpurple/protocols/irc/parse.c:697 +msgid "Disconnected." +msgstr "" + +#: ../libpurple/protocols/jabber/adhoccommands.c:161 +#: ../libpurple/protocols/jabber/auth.c:199 +#: ../libpurple/protocols/jabber/auth_scram.c:73 +#: ../libpurple/protocols/jabber/jabber.c:1161 +#: ../libpurple/protocols/jabber/jabber.c:1196 +#: ../libpurple/protocols/jabber/jabber.c:2723 +msgid "Unknown Error" +msgstr "" + +#: ../libpurple/protocols/jabber/adhoccommands.c:163 +#: ../libpurple/protocols/jabber/adhoccommands.c:164 +msgid "Ad-Hoc Command Failed" +msgstr "" + +#: ../libpurple/protocols/jabber/adhoccommands.c:198 +msgid "execute" +msgstr "" + +#: ../libpurple/protocols/jabber/auth.c:82 +#: ../libpurple/protocols/jabber/auth_plain.c:80 +msgid "Server requires plaintext authentication over an unencrypted stream" +msgstr "" + +#. This happens when the server sends back jibberish +#. * in the "additional data with success" case. +#. * Seen with Wildfire 3.0.1. +#: ../libpurple/protocols/jabber/auth.c:150 +#: ../libpurple/protocols/jabber/auth.c:399 +#: ../libpurple/protocols/jabber/auth.c:428 +#: ../libpurple/protocols/jabber/auth.c:439 +#: ../libpurple/protocols/jabber/auth.c:484 +#: ../libpurple/protocols/jabber/auth_cyrus.c:538 +#: ../libpurple/protocols/jabber/auth_digest_md5.c:180 +#: ../libpurple/protocols/jabber/jabber.c:158 +msgid "Invalid response from server" +msgstr "" + +#: ../libpurple/protocols/jabber/auth.c:191 +#: ../libpurple/protocols/jabber/auth.c:326 +#: ../libpurple/protocols/jabber/auth_cyrus.c:449 +msgid "Server does not use any supported authentication method" +msgstr "" + +#: ../libpurple/protocols/jabber/auth.c:310 +#: ../libpurple/protocols/jabber/auth_plain.c:94 +#, c-format +msgid "" +"%s requires plaintext authentication over an unencrypted connection. Allow " +"this and continue authentication?" +msgstr "" + +#: ../libpurple/protocols/jabber/auth.c:312 +#: ../libpurple/protocols/jabber/auth.c:313 +#: ../libpurple/protocols/jabber/auth_cyrus.c:264 +#: ../libpurple/protocols/jabber/auth_cyrus.c:265 +#: ../libpurple/protocols/jabber/auth_plain.c:96 +#: ../libpurple/protocols/jabber/auth_plain.c:97 +msgid "Plaintext Authentication" +msgstr "" + +#: ../libpurple/protocols/jabber/auth.c:350 +#: ../libpurple/protocols/jabber/jabber.c:280 +msgid "You require encryption, but it is not available on this server." +msgstr "" + +#: ../libpurple/protocols/jabber/auth.c:410 +#: ../libpurple/protocols/jabber/auth_digest_md5.c:200 +#: ../libpurple/protocols/jabber/auth_digest_md5.c:225 +#: ../libpurple/protocols/jabber/auth_scram.c:464 +#: ../libpurple/protocols/jabber/auth_scram.c:484 +#: ../libpurple/protocols/jabber/auth_scram.c:521 +#: ../libpurple/protocols/jabber/auth_scram.c:555 +msgid "Invalid challenge from server" +msgstr "" + +#: ../libpurple/protocols/jabber/auth.c:444 +msgid "Server thinks authentication is complete, but client does not" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_cyrus.c:39 +msgid "Server may require plaintext authentication over an unencrypted stream" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_cyrus.c:262 +#, c-format +msgid "" +"%s may require plaintext authentication over an unencrypted connection. " +"Allow this and continue authentication?" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_cyrus.c:299 +msgid "SASL authentication failed" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_cyrus.c:472 +#: ../libpurple/protocols/jabber/jabber.c:542 +#: ../libpurple/protocols/jabber/jabber.c:700 +#, c-format +msgid "SASL error: %s" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:55 +msgid "Invalid Encoding" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:57 +msgid "Unsupported Extension" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:59 +msgid "" +"Unexpected response from the server. This may indicate a possible MITM " +"attack" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:61 +msgid "" +"The server does support channel binding, but did not appear to advertise it." +" This indicates a likely MITM attack" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:63 +msgid "Server does not support channel binding" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:65 +msgid "Unsupported channel binding method" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:67 +#: ../libpurple/protocols/novell/nmuser.c:1896 +msgid "User not found" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:69 +msgid "Invalid Username Encoding" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:71 +#: ../libpurple/protocols/jabber/jabber.c:2788 +msgid "Resource Constraint" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:398 +msgid "Unable to canonicalize username" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:409 +msgid "Unable to canonicalize password" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:474 +#: ../libpurple/protocols/jabber/auth_scram.c:546 +msgid "Malicious challenge from server" +msgstr "" + +#: ../libpurple/protocols/jabber/auth_scram.c:536 +msgid "Unexpected response from server" +msgstr "" + +#: ../libpurple/protocols/jabber/bosh.c:439 +msgid "The BOSH connection manager terminated your session." +msgstr "" + +#: ../libpurple/protocols/jabber/bosh.c:542 +msgid "No session ID given" +msgstr "" + +#: ../libpurple/protocols/jabber/bosh.c:559 +msgid "Unsupported version of BOSH protocol" +msgstr "" + +#: ../libpurple/protocols/jabber/bosh.c:743 +msgid "Unable to establish a connection with the server" +msgstr "" + +#: ../libpurple/protocols/jabber/bosh.c:960 +#, c-format +msgid "Unable to establish a connection with the server: %s" +msgstr "" + +#: ../libpurple/protocols/jabber/bosh.c:990 +#: ../libpurple/protocols/jabber/jabber.c:1059 +msgid "Unable to establish SSL connection" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:350 +#: ../libpurple/protocols/jabber/buddy.c:1024 +#: ../libpurple/protocols/sametime/sametime.c:4175 +#: ../libpurple/protocols/silc/ops.c:999 +#: ../libpurple/protocols/silc10/ops.c:1020 +msgid "Full Name" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:351 +#: ../libpurple/protocols/jabber/buddy.c:1035 +#: ../libpurple/protocols/silc/ops.c:1011 +#: ../libpurple/protocols/silc10/ops.c:1032 +msgid "Family Name" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:352 +#: ../libpurple/protocols/jabber/buddy.c:1037 +msgid "Given Name" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:354 +#: ../libpurple/protocols/jabber/jabber.c:1329 +msgid "URL" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:355 +#: ../libpurple/protocols/jabber/buddy.c:1086 +msgid "Street Address" +msgstr "" + +#. * EXTADD is correct, EXTADR is generated by other +#. * clients. The next time someone reads this, remove +#. * EXTADR. +#: ../libpurple/protocols/jabber/buddy.c:356 +#: ../libpurple/protocols/jabber/buddy.c:1084 +msgid "Extended Address" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:357 +#: ../libpurple/protocols/jabber/buddy.c:1088 +msgid "Locality" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:358 +#: ../libpurple/protocols/jabber/buddy.c:1090 +msgid "Region" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:359 +#: ../libpurple/protocols/jabber/buddy.c:1092 +msgid "Postal Code" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:360 +#: ../libpurple/protocols/jabber/buddy.c:1095 +#: ../libpurple/protocols/mxit/profile.c:222 +#: ../libpurple/protocols/silc/silc.c:1255 +#: ../libpurple/protocols/silc10/silc.c:951 +msgid "Country" +msgstr "" + +#. lots of clients (including purple) do this, but it's +#. * out of spec +#: ../libpurple/protocols/jabber/buddy.c:361 +#: ../libpurple/protocols/jabber/buddy.c:1109 +#: ../libpurple/protocols/jabber/buddy.c:1115 +msgid "Telephone" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:363 +#: ../libpurple/protocols/jabber/buddy.c:1156 +msgid "Organization Name" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:364 +#: ../libpurple/protocols/jabber/buddy.c:1158 +msgid "Organization Unit" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:365 +#: ../libpurple/protocols/jabber/buddy.c:1163 +#: ../libpurple/protocols/msn/msn.c:2504 +#: ../libpurple/protocols/novell/novell.c:1492 +#: ../libpurple/protocols/silc/ops.c:1023 +#: ../libpurple/protocols/silc10/ops.c:1044 +msgid "Job Title" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:366 +#: ../libpurple/protocols/jabber/buddy.c:1165 +msgid "Role" +msgstr "" + +#. birthday +#. birthday (required) +#: ../libpurple/protocols/jabber/buddy.c:367 +#: ../libpurple/protocols/jabber/buddy.c:1053 +#: ../libpurple/protocols/msn/msn.c:2485 +#: ../libpurple/protocols/mxit/actions.c:239 +#: ../libpurple/protocols/mxit/login.c:343 +#: ../libpurple/protocols/mxit/profile.c:214 +#: ../libpurple/protocols/oscar/userinfo.c:444 +msgid "Birthday" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:368 +#: ../libpurple/protocols/jabber/buddy.c:1167 +#: ../libpurple/protocols/jabber/chat.c:911 ../pidgin/gtkblist.c:3888 +#: ../pidgin/gtkplugin.c:590 ../pidgin/plugins/disco/gtkdisco.c:571 +msgid "Description" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:675 +#: ../libpurple/protocols/jabber/buddy.c:676 +msgid "Edit XMPP vCard" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:677 +msgid "" +"All items below are optional. Enter only the information with which you feel" +" comfortable." +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:722 +msgid "Client" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:726 +msgid "Operating System" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:742 +msgid "Local Time" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:773 +#: ../libpurple/protocols/jabber/jabber.c:2371 +#: ../libpurple/protocols/jabber/jabber.c:2395 +#: ../libpurple/protocols/jabber/jabber.c:2411 +#: ../libpurple/protocols/jabber/jabber.c:2427 +#: ../libpurple/protocols/jabber/jabber.c:2441 +msgid "Priority" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:819 +#: ../libpurple/protocols/jabber/jabber.c:3360 +#: ../libpurple/protocols/jabber/libxmpp.c:265 +#: ../libpurple/protocols/jabber/si.c:1571 +msgid "Resource" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:832 +msgid "Uptime" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:836 +msgid "Logged Off" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:837 +#, c-format +msgid "%s ago" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1039 +#: ../libpurple/protocols/silc/ops.c:1007 +#: ../libpurple/protocols/silc10/ops.c:1028 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:547 +msgid "Middle Name" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1072 +#: ../libpurple/protocols/jabber/jabber.c:1324 +#: ../libpurple/protocols/oscar/userinfo.c:461 +#: ../libpurple/protocols/oscar/userinfo.c:469 +#: ../libpurple/protocols/silc/ops.c:1043 +#: ../libpurple/protocols/silc10/ops.c:1064 +msgid "Address" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1077 +msgid "P.O. Box" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1187 +#: ../libpurple/protocols/mxit/profile.c:267 +msgid "Photo" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1187 +msgid "Logo" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1732 +#, c-format +msgid "" +"%s will no longer be able to see your status updates. Do you want to " +"continue?" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1734 +#: ../libpurple/protocols/jabber/buddy.c:1843 +msgid "Cancel Presence Notification" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1831 +msgid "Un-hide From" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1835 +msgid "Temporarily Hide From" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1850 +msgid "(Re-)Request authorization" +msgstr "" + +#. shouldn't this just happen automatically when the buddy is +#. removed? +#: ../libpurple/protocols/jabber/buddy.c:1859 +msgid "Unsubscribe" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1866 +#: ../libpurple/protocols/msn/msn.c:1300 +#: ../libpurple/protocols/novell/novell.c:3428 +msgid "Initiate _Chat" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1883 +msgid "Log In" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1887 +msgid "Log Out" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:1998 +msgid "JID" +msgstr "" + +#. last name +#: ../libpurple/protocols/jabber/buddy.c:2002 +#: ../libpurple/protocols/jabber/buddy.c:2192 +#: ../libpurple/protocols/mxit/actions.c:255 +#: ../libpurple/protocols/mxit/profile.c:221 +#: ../libpurple/protocols/mxit/profile.c:325 +#: ../libpurple/protocols/oscar/userinfo.c:412 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:545 +msgid "Last Name" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2034 +msgid "The following are the results of your search" +msgstr "" + +#. current comment from Jabber User Directory users.jabber.org +#: ../libpurple/protocols/jabber/buddy.c:2119 +msgid "" +"Find a contact by entering the search criteria in the given fields. Note: " +"Each field supports wild card searches (%)" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2140 +msgid "Directory Query Failed" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2141 +msgid "Could not query the directory server." +msgstr "" + +#. Try to translate the message (see static message +#. list in jabber_user_dir_comments[]) +#: ../libpurple/protocols/jabber/buddy.c:2175 +#, c-format +msgid "Server Instructions: %s" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2182 +msgid "Fill in one or more fields to search for any matching XMPP users." +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2202 +#: ../libpurple/protocols/novell/novell.c:1496 +#: ../libpurple/protocols/oscar/userinfo.c:413 +#: ../libpurple/protocols/oscar/userinfo.c:417 +msgid "Email Address" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2211 +#: ../libpurple/protocols/jabber/buddy.c:2212 +msgid "Search for XMPP users" +msgstr "" + +#. "Search" +#: ../libpurple/protocols/jabber/buddy.c:2213 +#: ../libpurple/protocols/sametime/sametime.c:5670 +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:476 +#: ../pidgin/plugins/gevolution/assoc-buddy.c:356 +msgid "Search" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2228 +msgid "Invalid Directory" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2258 +msgid "Enter a User Directory" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2259 +msgid "Select a user directory to search" +msgstr "" + +#: ../libpurple/protocols/jabber/buddy.c:2262 +msgid "Search Directory" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:44 +#: ../libpurple/protocols/oscar/oscar.c:4406 +#: ../libpurple/protocols/yahoo/yahoochat.c:1162 +msgid "_Room:" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:50 +msgid "_Server:" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:56 +msgid "_Handle:" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:378 +#, c-format +msgid "%s is not a valid room name" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:379 +msgid "Invalid Room Name" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:385 +#, c-format +msgid "%s is not a valid server name" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:386 +#: ../libpurple/protocols/jabber/chat.c:387 +msgid "Invalid Server Name" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:392 +#, c-format +msgid "%s is not a valid room handle" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:393 +#: ../libpurple/protocols/jabber/chat.c:394 +msgid "Invalid Room Handle" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:538 +msgid "Configuration error" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:547 +#: ../libpurple/protocols/jabber/chat.c:691 +msgid "Unable to configure" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:562 +msgid "Room Configuration Error" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:563 +msgid "This room is not capable of being configured" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:613 +#: ../libpurple/protocols/jabber/chat.c:682 +msgid "Registration error" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:758 +msgid "Nick changing not supported in non-MUC chatrooms" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:813 +#: ../libpurple/protocols/jabber/chat.c:824 +#: ../libpurple/protocols/silc/ops.c:1472 +#: ../libpurple/protocols/silc10/ops.c:1451 +msgid "Error retrieving room list" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:872 +#: ../pidgin/plugins/disco/gtkdisco.c:177 +msgid "Invalid Server" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:917 +msgid "Enter a Conference Server" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:918 +msgid "Select a conference server to query" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:921 +msgid "Find Rooms" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:1059 +msgid "Affiliations:" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:1071 +#: ../libpurple/protocols/jabber/chat.c:1166 +msgid "No users found" +msgstr "" + +#: ../libpurple/protocols/jabber/chat.c:1154 +msgid "Roles:" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:252 ../libpurple/util.c:4212 +msgid "Server requires TLS/SSL, but no TLS/SSL support was found." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:259 +msgid "You require encryption, but no TLS/SSL support was found." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:621 +msgid "Ping timed out" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:945 +#: ../libpurple/protocols/jabber/jabber.c:983 +#: ../libpurple/protocols/jabber/jabber.c:3031 +msgid "Invalid XMPP ID" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:954 +msgid "Invalid XMPP ID. Username portion must be set." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:963 +msgid "Invalid XMPP ID. Domain must be set." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1042 +msgid "Malformed BOSH URL" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1145 +#, c-format +msgid "Registration of %s@%s successful" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1151 +#, c-format +msgid "Registration to %s successful" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1154 +#: ../libpurple/protocols/jabber/jabber.c:1155 +msgid "Registration Successful" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1163 +#: ../libpurple/protocols/jabber/jabber.c:1164 +msgid "Registration Failed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1187 +#, c-format +msgid "Registration from %s successfully removed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1189 +#: ../libpurple/protocols/jabber/jabber.c:1190 +msgid "Unregistration Successful" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1198 +#: ../libpurple/protocols/jabber/jabber.c:1199 +msgid "Unregistration Failed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1326 +#: ../libpurple/protocols/oscar/userinfo.c:463 +#: ../libpurple/protocols/oscar/userinfo.c:471 +msgid "State" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1327 +msgid "Postal code" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1328 +#: ../libpurple/protocols/silc/ops.c:1048 +#: ../libpurple/protocols/silc/silc.c:1012 +#: ../libpurple/protocols/silc/util.c:564 +#: ../libpurple/protocols/silc10/ops.c:1069 +#: ../libpurple/protocols/silc10/silc.c:708 +#: ../libpurple/protocols/silc10/util.c:557 +msgid "Phone" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1330 ../pidgin/gtknotify.c:1691 +msgid "Date" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1359 +#: ../libpurple/protocols/jabber/jabber.c:1360 +msgid "Already Registered" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1410 +#: ../libpurple/protocols/jabber/jabber.c:1414 +#: ../libpurple/protocols/jabber/jabber.c:2543 +msgid "Password" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1446 +msgid "Unregister" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1453 +msgid "" +"Please fill out the information below to change your account registration." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1456 +msgid "Please fill out the information below to register your new account." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1464 +#: ../libpurple/protocols/jabber/jabber.c:1465 +msgid "Register New XMPP Account" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1466 +#: ../libpurple/protocols/jabber/jabber.c:1477 +#: ../pidgin/plugins/disco/gtkdisco.c:307 +#: ../pidgin/plugins/disco/gtkdisco.c:688 +msgid "Register" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1473 +#, c-format +msgid "Change Account Registration at %s" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1474 +#, c-format +msgid "Register New Account at %s" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1477 +msgid "Change Registration" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1525 +#: ../libpurple/protocols/jabber/jabber.c:1526 +msgid "Error unregistering account" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1531 +#: ../libpurple/protocols/jabber/jabber.c:1532 +msgid "Account successfully unregistered" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1745 +msgid "Initializing Stream" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1750 +msgid "Initializing SSL/TLS" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1754 +#: ../libpurple/protocols/msn/session.c:438 +msgid "Authenticating" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1758 +msgid "Re-initializing Stream" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:1927 +#: ../libpurple/protocols/jabber/jabber.c:1928 +msgid "Server doesn't support blocking" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2181 +#: ../libpurple/protocols/jabber/jabber.c:2701 +#: ../libpurple/protocols/jabber/jabber.c:2744 +#: ../libpurple/protocols/jabber/jabber.c:2782 +#: ../libpurple/protocols/oscar/oscar.c:4684 +#: ../libpurple/protocols/oscar/userinfo.c:272 +msgid "Not Authorized" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2313 +#: ../libpurple/protocols/jabber/jabber.c:2316 +#: ../libpurple/protocols/jabber/jabber.c:2373 +#: ../libpurple/protocols/jabber/jabber.c:2397 +#: ../libpurple/protocols/jabber/jabber.c:2413 +#: ../libpurple/protocols/jabber/jabber.c:2429 +#: ../libpurple/protocols/jabber/jabber.c:2443 +#: ../libpurple/protocols/mxit/mxit.c:350 +#: ../libpurple/protocols/mxit/profile.c:243 +#: ../libpurple/protocols/mxit/profile.c:245 +#: ../libpurple/protocols/oscar/userinfo.c:298 +#: ../libpurple/protocols/silc/buddy.c:1569 +#: ../libpurple/protocols/silc/ops.c:1224 +#: ../libpurple/protocols/silc10/buddy.c:1577 +#: ../libpurple/protocols/silc10/ops.c:1207 +msgid "Mood" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2326 +#: ../libpurple/protocols/msn/msn.c:1046 +msgid "Now Listening" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2333 +#: ../libpurple/protocols/mxit/roster.c:252 +msgid "Both" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2335 +msgid "From (To pending)" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2337 +msgid "From" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2340 +msgid "To" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2342 +msgid "None (To pending)" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2344 +#: ../libpurple/protocols/mxit/profile.c:245 +#: ../libpurple/protocols/mxit/roster.c:262 ../pidgin/gtkblist.c:3542 +#: ../pidgin/gtkblist.c:3544 ../pidgin/plugins/gevolution/eds-utils.c:73 +#: ../pidgin/plugins/gevolution/eds-utils.c:86 +msgid "None" +msgstr "" + +#. subscription type +#: ../libpurple/protocols/jabber/jabber.c:2347 +#: ../libpurple/protocols/mxit/mxit.c:354 +#: ../libpurple/protocols/mxit/profile.c:252 +msgid "Subscription" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2374 +#: ../libpurple/protocols/jabber/jabber.c:2398 +#: ../libpurple/protocols/jabber/jabber.c:2414 +#: ../libpurple/protocols/jabber/jabber.c:2430 +#: ../libpurple/protocols/jabber/jabber.c:2444 +msgid "Mood Text" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2376 +#: ../libpurple/protocols/jabber/jabber.c:2400 +#: ../libpurple/protocols/jabber/jabber.c:2416 +#: ../libpurple/protocols/jabber/jabber.c:2432 +msgid "Allow Buzz" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2383 +#: ../libpurple/protocols/mxit/roster.c:86 +#: ../libpurple/protocols/oscar/oscar.c:4865 +msgid "Mood Name" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2384 +#: ../libpurple/protocols/oscar/oscar.c:4866 +msgid "Mood Comment" +msgstr "" + +#. primitive +#. ID +#. name - use default +#. saveable +#. should be user_settable some day +#. independent +#: ../libpurple/protocols/jabber/jabber.c:2463 +#: ../libpurple/protocols/msn/msn.c:1196 +#: ../libpurple/protocols/myspace/myspace.c:501 +msgid "Tune Artist" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2464 +#: ../libpurple/protocols/msn/msn.c:1198 +#: ../libpurple/protocols/myspace/myspace.c:502 +msgid "Tune Title" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2465 +#: ../libpurple/protocols/msn/msn.c:1197 +msgid "Tune Album" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2466 +msgid "Tune Genre" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2467 +msgid "Tune Comment" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2468 +msgid "Tune Track" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2469 +msgid "Tune Time" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2470 +msgid "Tune Year" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2471 +msgid "Tune URL" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2484 +msgid "Password Changed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2485 +msgid "Your password has been changed." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2491 +#: ../libpurple/protocols/jabber/jabber.c:2492 +msgid "Error changing password" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2549 +msgid "Password (again)" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2555 +#: ../libpurple/protocols/jabber/jabber.c:2556 +msgid "Change XMPP Password" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2556 +msgid "Please enter your new password" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2570 +#: ../libpurple/protocols/oscar/oscar.c:5485 +#: ../libpurple/protocols/silc/silc.c:1333 +#: ../libpurple/protocols/silc10/silc.c:1029 +#: ../libpurple/protocols/yahoo/libymsg.c:4439 +#: ../libpurple/protocols/yahoo/libymsg.c:4595 +msgid "Set User Info..." +msgstr "" + +#. if (js->protocol_options & CHANGE_PASSWORD) { +#: ../libpurple/protocols/jabber/jabber.c:2575 +#: ../libpurple/protocols/oscar/oscar.c:5496 +#: ../libpurple/protocols/silc/silc.c:1329 +#: ../libpurple/protocols/silc10/silc.c:1025 +msgid "Change Password..." +msgstr "" + +#. } +#: ../libpurple/protocols/jabber/jabber.c:2580 +msgid "Search for Users..." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2680 +msgid "Bad Request" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2683 +msgid "Conflict" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2685 +msgid "Feature Not Implemented" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2687 +msgid "Forbidden" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2689 +msgid "Gone" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2691 +#: ../libpurple/protocols/jabber/jabber.c:2772 +msgid "Internal Server Error" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2693 +msgid "Item Not Found" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2695 +msgid "Malformed XMPP ID" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2697 +msgid "Not Acceptable" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2699 +msgid "Not Allowed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2703 +msgid "Payment Required" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2705 +msgid "Recipient Unavailable" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2709 +msgid "Registration Required" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2711 +msgid "Remote Server Not Found" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2713 +msgid "Remote Server Timeout" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2715 +msgid "Server Overloaded" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2717 +msgid "Service Unavailable" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2719 +msgid "Subscription Required" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2721 +msgid "Unexpected Request" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2729 +msgid "Authorization Aborted" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2731 +msgid "Incorrect encoding in authorization" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2733 +msgid "Invalid authzid" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2735 +msgid "Invalid Authorization Mechanism" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2738 +msgid "Authorization mechanism too weak" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2746 +msgid "Temporary Authentication Failure" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2749 +msgid "Authentication Failure" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2757 +msgid "Bad Format" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2759 +msgid "Bad Namespace Prefix" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2762 +msgid "Resource Conflict" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2764 +#: ../libpurple/protocols/msn/msn.c:232 +msgid "Connection Timeout" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2766 +msgid "Host Gone" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2768 +msgid "Host Unknown" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2770 +msgid "Improper Addressing" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2774 +msgid "Invalid ID" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2776 +msgid "Invalid Namespace" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2778 +msgid "Invalid XML" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2780 +msgid "Non-matching Hosts" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2784 +msgid "Policy Violation" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2786 +msgid "Remote Connection Failed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2790 +msgid "Restricted XML" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2792 +msgid "See Other Host" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2794 +msgid "System Shutdown" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2796 +msgid "Undefined Condition" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2798 +msgid "Unsupported Encoding" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2800 +msgid "Unsupported Stanza Type" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2802 +msgid "Unsupported Version" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2804 +msgid "XML Not Well Formed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2806 +msgid "Stream Error" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2916 +#, c-format +msgid "Unable to ban user %s" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2936 +#, c-format +msgid "Unknown affiliation: \"%s\"" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2946 +#, c-format +msgid "Unable to affiliate user %s as \"%s\"" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2971 +#, c-format +msgid "Unknown role: \"%s\"" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:2981 +#, c-format +msgid "Unable to set role \"%s\" for user: %s" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3063 +#, c-format +msgid "Unable to kick user %s" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3100 +#, c-format +msgid "Unable to ping user %s" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3122 +#, c-format +msgid "Unable to buzz, because there is nothing known about %s." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3129 +#, c-format +msgid "Unable to buzz, because %s might be offline." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3153 +#, c-format +msgid "" +"Unable to buzz, because %s does not support it or does not wish to receive " +"buzzes now." +msgstr "" + +#. Yahoo only supports one attention command: the 'buzz'. +#. This is index number YAHOO_BUZZ. +#: ../libpurple/protocols/jabber/jabber.c:3200 +#: ../libpurple/protocols/yahoo/libymsg.c:5520 +msgid "Buzz" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3201 +#: ../libpurple/protocols/yahoo/libymsg.c:5521 +#, c-format +msgid "%s has buzzed you!" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3201 +#: ../libpurple/protocols/yahoo/libymsg.c:5521 +#, c-format +msgid "Buzzing %s..." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3316 +#, c-format +msgid "Unable to initiate media with %s: invalid JID" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3318 +#, c-format +msgid "Unable to initiate media with %s: user is not online" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3320 +#, c-format +msgid "Unable to initiate media with %s: resource is not online" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3322 +#, c-format +msgid "Unable to initiate media with %s: not subscribed to user presence" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3325 +#: ../libpurple/protocols/jabber/jabber.c:3326 +msgid "Media Initiation Failed" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3410 +#, c-format +msgid "" +"Please select the resource of %s with which you would like to start a media " +"session." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3420 +#: ../libpurple/protocols/jabber/si.c:1583 +msgid "Select a Resource" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3421 +msgid "Initiate Media" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3591 +msgid "Account does not support PEP, can't set mood" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3604 +msgid "config: Configure a chat room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3610 +msgid "configure: Configure a chat room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3623 +msgid "part [message]: Leave the room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3630 +msgid "register: Register with a chat room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3638 +msgid "topic [new topic]: View or change the topic." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3646 +msgid "ban <user> [reason]: Ban a user from the room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3654 +msgid "" +"affiliate <owner|admin|member|outcast|none> [nick1] [nick2] ...: Get " +"the users with an affiliation or set users' affiliation with the room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3662 +msgid "" +"role <moderator|participant|visitor|none> [nick1] [nick2] ...: Get the" +" users with a role or set users' role with the room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3670 +msgid "invite <user> [message]: Invite a user to the room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3678 +msgid "join: <room[@server]> [password]: Join a chat." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3686 +msgid "kick <user> [reason]: Kick a user from the room." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3693 +msgid "" +"msg <user> <message>: Send a private message to another user." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3701 +msgid "ping <jid>:\tPing a user/component/server." +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3709 +#: ../libpurple/protocols/yahoo/libyahoo.c:53 +#: ../libpurple/protocols/yahoo/libyahoojp.c:50 +msgid "buzz: Buzz a user to get their attention" +msgstr "" + +#: ../libpurple/protocols/jabber/jabber.c:3716 +msgid "mood: Set current user mood" +msgstr "" + +#: ../libpurple/protocols/jabber/jutil.c:706 +#: ../pidgin/plugins/themeedit-icon.c:65 +msgid "Extended Away" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/jabber/libxmpp.c:166 +#: ../libpurple/protocols/jabber/libxmpp.c:168 +msgid "XMPP Protocol Plugin" +msgstr "" + +#. Translators: 'domain' is used here in the context of Internet domains, e.g. +#. pidgin.im +#: ../libpurple/protocols/jabber/libxmpp.c:261 ../pidgin/gtkaccount.c:570 +#: ../pidgin/gtkaccount.c:574 +msgid "Domain" +msgstr "" + +#: ../libpurple/protocols/jabber/libxmpp.c:278 +msgid "Use old-style SSL" +msgstr "" + +#: ../libpurple/protocols/jabber/libxmpp.c:291 +msgid "Allow plaintext auth over unencrypted streams" +msgstr "" + +#: ../libpurple/protocols/jabber/libxmpp.c:296 +#: ../libpurple/protocols/myspace/myspace.c:3633 +#: ../libpurple/protocols/simple/simple.c:2170 +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 +#: ../libpurple/protocols/jabber/libxmpp.c:300 +#: ../libpurple/protocols/myspace/myspace.c:3630 +#: ../libpurple/protocols/silc/silc.c:2192 +#: ../libpurple/protocols/silc10/silc.c:1906 +msgid "Connect server" +msgstr "" + +#: ../libpurple/protocols/jabber/libxmpp.c:305 +msgid "File transfer proxies" +msgstr "" + +#: ../libpurple/protocols/jabber/libxmpp.c:313 +msgid "BOSH URL" +msgstr "" + +#. this should probably be part of global smiley theme settings later on, +#. shared with MSN +#: ../libpurple/protocols/jabber/libxmpp.c:320 +msgid "Show Custom Smileys" +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:102 +#, c-format +msgid "%s has left the conversation." +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:175 +#, c-format +msgid "Message from %s" +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:239 +#, c-format +msgid "%s has set the topic to: %s" +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:241 +#, c-format +msgid "The topic is: %s" +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:289 +#, c-format +msgid "Message delivery to %s failed: %s" +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:292 +msgid "XMPP Message Error" +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:561 +#, c-format +msgid "(Code %s)" +msgstr "" + +#: ../libpurple/protocols/jabber/message.c:984 +msgid "A custom smiley in the message is too large to send." +msgstr "" + +#: ../libpurple/protocols/jabber/parser.c:57 +msgid "XMPP stream header missing" +msgstr "" + +#: ../libpurple/protocols/jabber/parser.c:78 +msgid "XMPP Version Mismatch" +msgstr "" + +#: ../libpurple/protocols/jabber/parser.c:103 +msgid "XMPP stream missing ID" +msgstr "" + +#: ../libpurple/protocols/jabber/parser.c:305 +msgid "XML Parse error" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:555 +#, c-format +msgid "Error joining chat %s" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:558 +#, c-format +msgid "Error in chat %s" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:602 +#: ../libpurple/protocols/jabber/presence.c:603 +msgid "Create New Room" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:604 +msgid "" +"You are creating a new room. Would you like to configure it, or accept the " +"default settings?" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:610 +msgid "_Configure Room" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:611 +msgid "_Accept Defaults" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:736 +msgid "No reason" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:743 +#, c-format +msgid "You have been kicked: (%s)" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:750 +#, c-format +msgid "Kicked (%s)" +msgstr "" + +#: ../libpurple/protocols/jabber/presence.c:955 +msgid "Unknown Error in presence" +msgstr "" + +#: ../libpurple/protocols/jabber/si.c:1446 +#: ../libpurple/protocols/jabber/si.c:1487 +#, c-format +msgid "Unable to send file to %s, user does not support file transfers" +msgstr "" + +#. not success +#: ../libpurple/protocols/jabber/si.c:1447 +#: ../libpurple/protocols/jabber/si.c:1448 +#: ../libpurple/protocols/jabber/si.c:1488 +#: ../libpurple/protocols/jabber/si.c:1489 +#: ../libpurple/protocols/jabber/si.c:1559 +#: ../libpurple/protocols/mxit/protocol.c:2251 +msgid "File Send Failed" +msgstr "" + +#: ../libpurple/protocols/jabber/si.c:1552 +#, c-format +msgid "Unable to send file to %s, invalid JID" +msgstr "" + +#: ../libpurple/protocols/jabber/si.c:1554 +#, c-format +msgid "Unable to send file to %s, user is not online" +msgstr "" + +#: ../libpurple/protocols/jabber/si.c:1556 +#, c-format +msgid "Unable to send file to %s, not subscribed to user presence" +msgstr "" + +#: ../libpurple/protocols/jabber/si.c:1569 +#, c-format +msgid "" +"Please select the resource of %s to which you would like to send a file" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:34 +msgid "Afraid" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:35 +msgid "Amazed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:36 +msgid "Amorous" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:37 +#: ../libpurple/protocols/mxit/roster.c:138 +#: ../libpurple/protocols/mxit/roster.c:202 +#: ../libpurple/protocols/oscar/family_locate.c:415 +#: ../libpurple/protocols/silc/buddy.c:1510 +#: ../libpurple/protocols/silc/silc.c:987 +#: ../libpurple/protocols/silc/util.c:527 +#: ../libpurple/protocols/silc10/buddy.c:1517 +#: ../libpurple/protocols/silc10/silc.c:683 +#: ../libpurple/protocols/silc10/util.c:519 +msgid "Angry" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:38 +msgid "Annoyed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:39 +#: ../libpurple/protocols/silc/buddy.c:1526 +#: ../libpurple/protocols/silc/silc.c:1003 +#: ../libpurple/protocols/silc/util.c:543 +#: ../libpurple/protocols/silc10/buddy.c:1533 +#: ../libpurple/protocols/silc10/silc.c:699 +#: ../libpurple/protocols/silc10/util.c:535 +msgid "Anxious" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:40 +msgid "Aroused" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:41 +#: ../libpurple/protocols/silc/buddy.c:1514 +#: ../libpurple/protocols/silc/silc.c:991 +#: ../libpurple/protocols/silc/util.c:531 +#: ../libpurple/protocols/silc10/buddy.c:1521 +#: ../libpurple/protocols/silc10/silc.c:687 +#: ../libpurple/protocols/silc10/util.c:523 +msgid "Ashamed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:42 +#: ../libpurple/protocols/mxit/roster.c:148 +#: ../libpurple/protocols/mxit/roster.c:222 +#: ../libpurple/protocols/silc/buddy.c:1522 +#: ../libpurple/protocols/silc/silc.c:999 +#: ../libpurple/protocols/silc/util.c:539 +#: ../libpurple/protocols/silc10/buddy.c:1529 +#: ../libpurple/protocols/silc10/silc.c:695 +#: ../libpurple/protocols/silc10/util.c:531 +msgid "Bored" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:43 +msgid "Brave" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:44 +msgid "Calm" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:45 +msgid "Cautious" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:46 +#: ../libpurple/protocols/mxit/roster.c:149 +#: ../libpurple/protocols/mxit/roster.c:224 +msgid "Cold" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:47 +msgid "Confident" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:48 +#: ../libpurple/protocols/mxit/roster.c:150 +#: ../libpurple/protocols/mxit/roster.c:226 +msgid "Confused" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:49 +msgid "Contemplative" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:50 +msgid "Contented" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:51 +msgid "Cranky" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:52 +msgid "Crazy" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:53 +msgid "Creative" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:54 +msgid "Curious" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:55 +msgid "Dejected" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:56 +msgid "Depressed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:57 +msgid "Disappointed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:58 +msgid "Disgusted" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:59 +msgid "Dismayed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:60 +msgid "Distracted" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:61 +msgid "Embarrassed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:62 +msgid "Envious" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:63 +#: ../libpurple/protocols/mxit/roster.c:139 +#: ../libpurple/protocols/mxit/roster.c:204 +#: ../libpurple/protocols/silc/buddy.c:1524 +#: ../libpurple/protocols/silc/silc.c:1001 +#: ../libpurple/protocols/silc/util.c:541 +#: ../libpurple/protocols/silc10/buddy.c:1531 +#: ../libpurple/protocols/silc10/silc.c:697 +#: ../libpurple/protocols/silc10/util.c:533 +msgid "Excited" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:64 +msgid "Flirtatious" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:65 +msgid "Frustrated" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:66 +msgid "Grateful" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:67 +msgid "Grieving" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:68 +#: ../libpurple/protocols/mxit/roster.c:140 +#: ../libpurple/protocols/mxit/roster.c:206 +msgid "Grumpy" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:69 +msgid "Guilty" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:70 +#: ../libpurple/protocols/mxit/roster.c:141 +#: ../libpurple/protocols/mxit/roster.c:208 +#: ../libpurple/protocols/silc/buddy.c:1506 +#: ../libpurple/protocols/silc/silc.c:983 +#: ../libpurple/protocols/silc/util.c:523 +#: ../libpurple/protocols/silc10/buddy.c:1513 +#: ../libpurple/protocols/silc10/silc.c:679 +#: ../libpurple/protocols/silc10/util.c:515 +msgid "Happy" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:71 +msgid "Hopeful" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:72 +#: ../libpurple/protocols/mxit/roster.c:145 +#: ../libpurple/protocols/mxit/roster.c:216 +msgid "Hot" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:73 +msgid "Humbled" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:74 +msgid "Humiliated" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:75 +#: ../libpurple/protocols/mxit/roster.c:151 +#: ../libpurple/protocols/mxit/roster.c:228 +msgid "Hungry" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:76 +msgid "Hurt" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:77 +msgid "Impressed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:78 +msgid "In awe" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:79 +#: ../libpurple/protocols/mxit/roster.c:142 +#: ../libpurple/protocols/oscar/family_locate.c:426 +#: ../libpurple/protocols/silc/silc.c:995 +#: ../libpurple/protocols/silc10/silc.c:691 +msgid "In love" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:80 +msgid "Indignant" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:81 +msgid "Interested" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:82 +msgid "Intoxicated" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:83 +#: ../libpurple/protocols/mxit/roster.c:143 +#: ../libpurple/protocols/mxit/roster.c:212 +#: ../libpurple/protocols/silc/buddy.c:1516 +#: ../libpurple/protocols/silc/silc.c:993 +#: ../libpurple/protocols/silc/util.c:533 +#: ../libpurple/protocols/silc10/buddy.c:1523 +#: ../libpurple/protocols/silc10/silc.c:689 +#: ../libpurple/protocols/silc10/util.c:525 +msgid "Invincible" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:84 +#: ../libpurple/protocols/silc/buddy.c:1512 +#: ../libpurple/protocols/silc/silc.c:989 +#: ../libpurple/protocols/silc/util.c:529 +#: ../libpurple/protocols/silc10/buddy.c:1519 +#: ../libpurple/protocols/silc10/silc.c:685 +#: ../libpurple/protocols/silc10/util.c:521 +msgid "Jealous" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:85 +msgid "Lonely" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:86 +msgid "Lost" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:87 +msgid "Lucky" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:88 +msgid "Mean" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:89 +msgid "Moody" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:90 +msgid "Nervous" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:91 +msgid "Neutral" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:92 +msgid "Offended" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:93 +msgid "Outraged" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:94 +msgid "Playful" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:95 +msgid "Proud" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:96 +msgid "Relaxed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:97 +msgid "Relieved" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:98 +msgid "Remorseful" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:99 +msgid "Restless" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:100 +#: ../libpurple/protocols/mxit/roster.c:144 +#: ../libpurple/protocols/mxit/roster.c:214 +#: ../libpurple/protocols/silc/buddy.c:1508 +#: ../libpurple/protocols/silc/silc.c:985 +#: ../libpurple/protocols/silc/util.c:525 +#: ../libpurple/protocols/silc10/buddy.c:1515 +#: ../libpurple/protocols/silc10/silc.c:681 +#: ../libpurple/protocols/silc10/util.c:517 +msgid "Sad" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:101 +msgid "Sarcastic" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:102 +msgid "Satisfied" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:103 +msgid "Serious" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:104 +msgid "Shocked" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:105 +msgid "Shy" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:106 +#: ../libpurple/protocols/mxit/roster.c:146 +#: ../libpurple/protocols/mxit/roster.c:218 +#: ../libpurple/protocols/oscar/family_locate.c:418 +msgid "Sick" +msgstr "" + +#. Sleepy / Tired +#: ../libpurple/protocols/jabber/usermood.c:107 +#: ../libpurple/protocols/mxit/roster.c:147 +#: ../libpurple/protocols/mxit/roster.c:220 +#: ../libpurple/protocols/oscar/family_locate.c:428 +#: ../libpurple/protocols/silc/buddy.c:1520 +#: ../libpurple/protocols/silc/silc.c:997 +#: ../libpurple/protocols/silc/util.c:537 +#: ../libpurple/protocols/silc10/buddy.c:1527 +#: ../libpurple/protocols/silc10/silc.c:693 +#: ../libpurple/protocols/silc10/util.c:529 +msgid "Sleepy" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:108 +msgid "Spontaneous" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:109 +#: ../libpurple/protocols/mxit/roster.c:152 +#: ../libpurple/protocols/mxit/roster.c:230 +msgid "Stressed" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:110 +msgid "Strong" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:111 +msgid "Surprised" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:112 +msgid "Thankful" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:113 +msgid "Thirsty" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:114 +msgid "Tired" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:115 +msgid "Undefined" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:116 +msgid "Weak" +msgstr "" + +#: ../libpurple/protocols/jabber/usermood.c:117 +msgid "Worried" +msgstr "" + +#: ../libpurple/protocols/jabber/usernick.c:81 +msgid "Set User Nickname" +msgstr "" + +#: ../libpurple/protocols/jabber/usernick.c:81 +msgid "Please specify a new nickname for you." +msgstr "" + +#: ../libpurple/protocols/jabber/usernick.c:82 +msgid "" +"This information is visible to all contacts on your contact list, so choose " +"something appropriate." +msgstr "" + +#: ../libpurple/protocols/jabber/usernick.c:83 +#: ../libpurple/protocols/mxit/actions.c:313 +#: ../libpurple/protocols/mxit/actions.c:411 +msgid "Set" +msgstr "" + +#: ../libpurple/protocols/jabber/usernick.c:103 +msgid "Set Nickname..." +msgstr "" + +#: ../libpurple/protocols/jabber/xdata.c:382 +msgid "Actions" +msgstr "" + +#: ../libpurple/protocols/jabber/xdata.c:384 +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 +#: ../libpurple/protocols/msn/contact.c:1070 +#: ../libpurple/protocols/msn/contact.c:1166 +#: ../libpurple/protocols/msn/userlist.c:523 +#, c-format +msgid "Unable to add \"%s\"." +msgstr "" + +#: ../libpurple/protocols/msn/contact.c:1071 +#: ../libpurple/protocols/msn/contact.c:1167 +msgid "Buddy Add error" +msgstr "" + +#: ../libpurple/protocols/msn/contact.c:1072 +#: ../libpurple/protocols/msn/contact.c:1168 +msgid "The username specified does not exist." +msgstr "" + +#: ../libpurple/protocols/msn/error.c:50 +#: ../libpurple/protocols/myspace/myspace.c:2122 +msgid "Unable to parse message" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:54 +msgid "Syntax Error (probably a client bug)" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:58 +msgid "Invalid email address" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:61 +msgid "User does not exist" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:64 +msgid "Fully qualified domain name missing" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:67 +msgid "Already logged in" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:70 +msgid "Invalid username" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:73 +msgid "Invalid friendly name" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:76 +msgid "List full" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:79 +msgid "Already there" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:83 +msgid "Not on list" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:86 +#: ../libpurple/protocols/zephyr/zephyr.c:759 +msgid "User is offline" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:89 +msgid "Already in the mode" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:93 +msgid "Already in opposite list" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:97 +msgid "Too many groups" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:100 +msgid "Invalid group" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:103 +msgid "User not in group" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:106 +msgid "Group name too long" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:109 +msgid "Cannot remove group zero" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:113 +msgid "Tried to add a user to a group that doesn't exist" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:116 +msgid "Switchboard failed" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:120 +msgid "Notify transfer failed" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:125 +msgid "Required fields missing" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:129 +msgid "Too many hits to a FND" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:133 +#: ../libpurple/protocols/oscar/family_icbm.c:59 +#: ../libpurple/protocols/oscar/util.c:43 +msgid "Not logged in" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:137 +msgid "Service temporarily unavailable" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:140 +msgid "Database server error" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:144 +msgid "Command disabled" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:148 +msgid "File operation error" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:152 +msgid "Memory allocation error" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:156 +msgid "Wrong CHL value sent to server" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:161 +msgid "Server busy" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:164 +#: ../libpurple/protocols/msn/error.c:178 +#: ../libpurple/protocols/msn/error.c:236 +msgid "Server unavailable" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:167 +msgid "Peer notification server down" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:171 +msgid "Database connect error" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:175 +msgid "Server is going down (abandon ship)" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:182 +msgid "Error creating connection" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:186 +msgid "CVR parameters are either unknown or not allowed" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:190 +msgid "Unable to write" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:193 +msgid "Session overload" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:197 +msgid "User is too active" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:200 +msgid "Too many sessions" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:203 +msgid "Passport not verified" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:206 +msgid "Bad friend file" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:210 +msgid "Not expected" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:215 +msgid "Friendly name is changing too rapidly" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:224 +msgid "Server too busy" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:228 +#: ../libpurple/protocols/silc/silc.c:340 +#: ../libpurple/protocols/silc10/ops.c:1713 ../libpurple/proxy.c:1796 +msgid "Authentication failed" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:231 +msgid "Not allowed when offline" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:239 +msgid "Not accepting new users" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:242 +msgid "Kids Passport without parental consent" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:245 +msgid "Passport account not yet verified" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:248 +msgid "Passport account suspended" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:251 +msgid "Bad ticket" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:257 +#, c-format +msgid "Unknown Error Code %d" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:272 +#, c-format +msgid "MSN Error: %s\n" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:355 +#, c-format +msgid "Buddy list synchronization issue in %s (%s)" +msgstr "" + +#: ../libpurple/protocols/msn/error.c:361 +#, 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 "" + +#: ../libpurple/protocols/msn/error.c:369 +#, c-format +msgid "" +"%s is on the local list but not on the server list. Do you want this buddy " +"to be added?" +msgstr "" + +#: ../libpurple/protocols/msn/group.h:36 +msgid "Other Contacts" +msgstr "" + +#: ../libpurple/protocols/msn/group.h:39 +msgid "Non-IM Contacts" +msgstr "" + +#: ../libpurple/protocols/msn/msg.c:835 +#, c-format +msgid "%s sent a wink. <a href='msn-wink://%s'>Click here to play it</a>" +msgstr "" + +#: ../libpurple/protocols/msn/msg.c:841 +#, c-format +msgid "%s sent a wink, but it could not be saved" +msgstr "" + +#: ../libpurple/protocols/msn/msg.c:861 +#, c-format +msgid "%s sent a voice clip. <a href='audio://%s'>Click here to play it</a>" +msgstr "" + +#: ../libpurple/protocols/msn/msg.c:867 +#, c-format +msgid "%s sent a voice clip, but it could not be saved" +msgstr "" + +#: ../libpurple/protocols/msn/msg.c:1154 +#, c-format +msgid "%s sent you a voice chat invite, which is not yet supported." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:137 +msgid "Nudge" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:138 +#, c-format +msgid "%s has nudged you!" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:138 +#, c-format +msgid "Nudging %s..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:151 +#: ../libpurple/protocols/myspace/myspace.c:3002 +msgid "Email Address..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:183 ../libpurple/protocols/msn/msn.c:261 +msgid "Your new MSN friendly name is too long." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:445 +#, c-format +msgid "Set friendly name for %s." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:447 +msgid "Set Friendly Name" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:448 +msgid "This is the name that other MSN buddies will see you as." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:524 +msgid "This Location" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:526 +msgid "This is the name that identifies this location" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:535 +msgid "Other Locations" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:550 +msgid "You can sign out from other locations here" +msgstr "" + +#. TODO: Due to limitations in our current request field API, the +#. following string will show up with a trailing colon. This should +#. be fixed either by adding an "include_colon" boolean, or creating +#. a separate purple_request_field_label_new_without_colon function, +#. or by never automatically adding the colon and requiring that +#. callers add the colon themselves. +#: ../libpurple/protocols/msn/msn.c:565 +msgid "You are not signed in from any other locations." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:632 +msgid "Allow multiple logins?" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:633 +msgid "" +"Do you want to allow or disallow connecting from multiple locations " +"simultaneously?" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:638 ../libpurple/protocols/msn/msn.c:708 +msgid "Allow" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:639 ../libpurple/protocols/msn/msn.c:709 +msgid "Disallow" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:652 +msgid "Set your home phone number." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:669 +msgid "Set your work phone number." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:686 +msgid "Set your mobile phone number." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:701 +msgid "Allow MSN Mobile pages?" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:702 +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 "" + +#: ../libpurple/protocols/msn/msn.c:724 +#, c-format +msgid "Blocked Text for %s" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:726 +msgid "No text is blocked for this account." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:729 +#, c-format +msgid "" +"MSN servers are currently blocking the following regular expressions:<br/>%s" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:750 +msgid "This account does not have email enabled." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:791 +msgid "Send a mobile message." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:793 +msgid "Page" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1049 +msgid "Playing a game" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1052 +#: ../libpurple/protocols/oscar/family_locate.c:446 +msgid "Working" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1122 +msgid "Has you" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1130 +#: ../libpurple/protocols/yahoo/libymsg.c:4273 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:548 +msgid "Home Phone Number" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1134 +#: ../libpurple/protocols/yahoo/libymsg.c:4274 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:549 +msgid "Work Phone Number" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1138 +#: ../libpurple/protocols/yahoo/libymsg.c:4275 +#: ../libpurple/protocols/yahoo/yahoo_aliases.c:550 +msgid "Mobile Phone Number" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1161 ../libpurple/protocols/msn/state.c:39 +#: ../libpurple/protocols/yahoo/libymsg.c:4082 +#: ../libpurple/protocols/yahoo/libymsg.c:5108 +msgid "Be Right Back" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1167 ../libpurple/protocols/msn/state.c:37 +#: ../libpurple/protocols/novell/novell.c:2845 +#: ../libpurple/protocols/novell/novell.c:2975 +#: ../libpurple/protocols/oscar/family_locate.c:409 +#: ../libpurple/protocols/silc/buddy.c:1493 +#: ../libpurple/protocols/silc/silc.c:58 +#: ../libpurple/protocols/silc10/buddy.c:1500 +#: ../libpurple/protocols/silc10/silc.c:48 +#: ../libpurple/protocols/yahoo/libymsg.c:4084 +#: ../libpurple/protocols/yahoo/libymsg.c:5112 +#: ../pidgin/plugins/themeedit-icon.c:66 +msgid "Busy" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1172 +#: ../libpurple/protocols/yahoo/libymsg.c:4092 +#: ../libpurple/protocols/yahoo/libymsg.c:5126 +msgid "On the Phone" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1177 +#: ../libpurple/protocols/yahoo/libymsg.c:4096 +#: ../libpurple/protocols/yahoo/libymsg.c:5132 +msgid "Out to Lunch" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1199 +msgid "Game Title" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1200 +msgid "Office Title" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1218 +msgid "Set Friendly Name..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1225 +msgid "View Locations..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1231 +msgid "Set Home Phone Number..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1235 +msgid "Set Work Phone Number..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1239 +msgid "Set Mobile Phone Number..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1245 +msgid "Enable/Disable Mobile Devices..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1250 +msgid "Allow/Disallow Multiple Logins..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1254 +msgid "Allow/Disallow Mobile Pages..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1261 +msgid "View Blocked Text..." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1267 +msgid "Open Hotmail Inbox" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1290 +msgid "Send to Mobile" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1338 +msgid "SSL support is needed for MSN. Please install a supported SSL library." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1782 +#, c-format +msgid "" +"Unable to add the buddy %s because the username is invalid. Usernames must " +"be valid email addresses." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:1784 +#: ../libpurple/protocols/oscar/oscar.c:3698 +#: ../libpurple/protocols/oscar/oscar.c:4169 +#: ../libpurple/protocols/oscar/oscar.c:4184 +msgid "Unable to Add" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2344 ../libpurple/protocols/msn/msn.c:2686 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:808 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1199 +msgid "Error retrieving profile" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2408 ../pidgin/plugins/convcolors.c:387 +msgid "General" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2415 +#: ../libpurple/protocols/mxit/profile.c:329 +#: ../libpurple/protocols/myspace/user.c:127 +#: ../libpurple/protocols/oscar/userinfo.c:449 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1080 +msgid "Age" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2417 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1095 +msgid "Occupation" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2418 +#: ../libpurple/protocols/myspace/user.c:135 +#: ../libpurple/protocols/novell/novell.c:1486 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1075 +#: ../libpurple/protocols/zephyr/zephyr.c:807 +#: ../libpurple/protocols/zephyr/zephyr.c:1189 +msgid "Location" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2423 ../libpurple/protocols/msn/msn.c:2615 +#: ../libpurple/protocols/msn/msn.c:2621 ../libpurple/protocols/msn/msn.c:2628 +msgid "Hobbies and Interests" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2429 ../libpurple/protocols/msn/msn.c:2549 +#: ../libpurple/protocols/msn/msn.c:2555 ../libpurple/protocols/msn/msn.c:2562 +#: ../libpurple/protocols/msn/msn.c:2570 ../libpurple/protocols/msn/msn.c:2577 +msgid "A Little About Me" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2446 +msgid "Social" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2448 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1085 +msgid "Marital Status" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2449 +msgid "Interests" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2450 +msgid "Pets" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2451 +msgid "Hometown" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2452 +msgid "Places Lived" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2453 +msgid "Fashion" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2454 +msgid "Humor" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2455 +msgid "Music" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2456 ../libpurple/protocols/msn/msn.c:2637 +#: ../libpurple/protocols/msn/msn.c:2643 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1137 +msgid "Favorite Quote" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2473 +msgid "Contact Info" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2474 +msgid "Personal" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2477 +msgid "Significant Other" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2478 +msgid "Home Phone" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2479 +msgid "Home Phone 2" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2480 +#: ../libpurple/protocols/oscar/userinfo.c:459 +msgid "Home Address" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2481 +msgid "Personal Mobile" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2482 +msgid "Home Fax" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2483 +msgid "Personal Email" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2484 +msgid "Personal IM" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2486 +msgid "Anniversary" +msgstr "" + +#. Business +#: ../libpurple/protocols/msn/msn.c:2502 +msgid "Work" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2505 +#: ../libpurple/protocols/oscar/userinfo.c:477 +msgid "Company" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2506 +#: ../libpurple/protocols/novell/novell.c:1488 +msgid "Department" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2507 +msgid "Profession" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2508 +msgid "Work Phone" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2509 +msgid "Work Phone 2" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2510 +#: ../libpurple/protocols/oscar/userinfo.c:467 +msgid "Work Address" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2511 +msgid "Work Mobile" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2512 +msgid "Work Pager" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2513 +msgid "Work Fax" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2514 +msgid "Work Email" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2515 +msgid "Work IM" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2516 +msgid "Start Date" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2586 ../libpurple/protocols/msn/msn.c:2592 +#: ../libpurple/protocols/msn/msn.c:2599 ../libpurple/protocols/msn/msn.c:2606 +msgid "Favorite Things" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2651 +msgid "Last Updated" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2662 +#: ../libpurple/protocols/silc/ops.c:1039 +#: ../libpurple/protocols/silc10/ops.c:1060 +msgid "Homepage" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2688 +msgid "The user has not created a public profile." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2689 +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 "" + +#: ../libpurple/protocols/msn/msn.c:2693 +msgid "" +"Could not find any information in the user's profile. The user most likely " +"does not exist." +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:2701 +#: ../libpurple/protocols/myspace/user.c:194 +#: ../libpurple/protocols/myspace/user.c:197 +#: ../libpurple/protocols/oscar/userinfo.c:535 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1237 +msgid "View web profile" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. *< summary +#: ../libpurple/protocols/msn/msn.c:2999 ../libpurple/protocols/msn/msn.c:3000 +msgid "Windows Live Messenger Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:3034 +msgid "Use HTTP Method" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:3039 +msgid "HTTP Method Server" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:3044 +msgid "Show custom smileys" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:3049 +msgid "Allow direct connections" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:3054 +msgid "Allow connecting from multiple locations" +msgstr "" + +#: ../libpurple/protocols/msn/msn.c:3062 +msgid "nudge: nudge a user to get their attention" +msgstr "" + +#: ../libpurple/protocols/msn/nexus.c:357 +msgid "Windows Live ID authentication:Unable to connect" +msgstr "" + +#: ../libpurple/protocols/msn/nexus.c:364 +msgid "Windows Live ID authentication:Invalid response" +msgstr "" + +#: ../libpurple/protocols/msn/notification.c:824 +msgid "The following users are missing from your addressbook" +msgstr "" + +#: ../libpurple/protocols/msn/notification.c:832 +#: ../libpurple/protocols/msn/notification.c:879 +#, c-format +msgid "Unknown error (%d): %s" +msgstr "" + +#: ../libpurple/protocols/msn/notification.c:836 +#: ../libpurple/protocols/msn/notification.c:860 +#: ../libpurple/protocols/sametime/sametime.c:4472 +msgid "Unable to add user" +msgstr "" + +#. Unknown error! +#: ../libpurple/protocols/msn/notification.c:859 +#: ../libpurple/protocols/msn/notification.c:905 +#: ../libpurple/protocols/yahoo/libymsg.c:2142 +#, c-format +msgid "Unknown error (%d)" +msgstr "" + +#: ../libpurple/protocols/msn/notification.c:883 +#: ../libpurple/protocols/msn/notification.c:906 +msgid "Unable to remove user" +msgstr "" + +#: ../libpurple/protocols/msn/notification.c:1210 +msgid "Mobile message was not sent because it was too long." +msgstr "" + +#: ../libpurple/protocols/msn/notification.c:1212 +msgid "Mobile message was not sent because an unknown error occurred." +msgstr "" + +#: ../libpurple/protocols/msn/notification.c:2234 +#, 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] "" + +#: ../libpurple/protocols/msn/oim.c:407 +msgid "" +"Message was not sent because the system is unavailable. This normally " +"happens when the user is blocked or does not exist." +msgstr "" + +#: ../libpurple/protocols/msn/oim.c:411 +msgid "Message was not sent because messages are being sent too quickly." +msgstr "" + +#: ../libpurple/protocols/msn/oim.c:414 +msgid "Message was not sent because an unknown encoding error occurred." +msgstr "" + +#: ../libpurple/protocols/msn/oim.c:420 +msgid "Message was not sent because an unknown error occurred." +msgstr "" + +#: ../libpurple/protocols/msn/oim.c:672 +#, c-format +msgid "" +"%s (There was an error receiving this message. Converting the encoding from " +"%s to UTF-8 failed.)" +msgstr "" + +#: ../libpurple/protocols/msn/oim.c:687 +#, c-format +msgid "" +"%s (There was an error receiving this message. The charset was %s, but it " +"was not valid UTF-8.)" +msgstr "" + +#: ../libpurple/protocols/msn/oim.c:691 +#, c-format +msgid "" +"%s (There was an error receiving this message. The charset was missing, but " +"it was not valid UTF-8.)" +msgstr "" + +#: ../libpurple/protocols/msn/servconn.c:145 +msgid "Writing error" +msgstr "" + +#: ../libpurple/protocols/msn/servconn.c:147 +msgid "Reading error" +msgstr "" + +#: ../libpurple/protocols/msn/servconn.c:169 +#, c-format +msgid "" +"Connection error from %s server:\n" +"%s" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:376 +msgid "Our protocol is not supported by the server" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:381 +msgid "Error parsing HTTP" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:385 +#: ../libpurple/protocols/novell/novell.c:2028 +#: ../libpurple/protocols/oscar/flap_connection.c:468 +#: ../libpurple/protocols/yahoo/libymsg.c:169 +msgid "You have signed on from another location" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:391 +msgid "" +"The MSN servers are temporarily unavailable. Please wait and try again." +msgstr "" + +#: ../libpurple/protocols/msn/session.c:397 +msgid "The MSN servers are going down temporarily" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:402 +#, c-format +msgid "Unable to authenticate: %s" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:411 +msgid "" +"Your MSN buddy list is temporarily unavailable. Please wait and try again." +msgstr "" + +#: ../libpurple/protocols/msn/session.c:433 +#: ../libpurple/protocols/msn/session.c:435 +msgid "Handshaking" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:434 +msgid "Transferring" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:436 +msgid "Starting authentication" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:437 +msgid "Getting cookie" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:439 +msgid "Sending cookie" +msgstr "" + +#: ../libpurple/protocols/msn/session.c:440 +msgid "Retrieving buddy list" +msgstr "" + +#: ../libpurple/protocols/msn/slpcall.c:580 +#, c-format +msgid "" +"%s requests to view your webcam, but this request is not yet supported." +msgstr "" + +#: ../libpurple/protocols/msn/slpcall.c:602 +#, c-format +msgid "%s invited you to view his/her webcam, but this is not yet supported." +msgstr "" + +#: ../libpurple/protocols/msn/state.c:40 +msgid "Away From Computer" +msgstr "" + +#: ../libpurple/protocols/msn/state.c:41 +msgid "On The Phone" +msgstr "" + +#: ../libpurple/protocols/msn/state.c:42 +msgid "Out To Lunch" +msgstr "" + +#: ../libpurple/protocols/msn/switchboard.c:464 +msgid "Message may have not been sent because a timeout occurred:" +msgstr "" + +#: ../libpurple/protocols/msn/switchboard.c:500 +msgid "Message could not be sent, not allowed while invisible:" +msgstr "" + +#: ../libpurple/protocols/msn/switchboard.c:504 +msgid "Message could not be sent because the user is offline:" +msgstr "" + +#: ../libpurple/protocols/msn/switchboard.c:508 +msgid "Message could not be sent because a connection error occurred:" +msgstr "" + +#: ../libpurple/protocols/msn/switchboard.c:512 +msgid "Message could not be sent because we are sending too quickly:" +msgstr "" + +#: ../libpurple/protocols/msn/switchboard.c:516 +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 "" + +#: ../libpurple/protocols/msn/switchboard.c:523 +msgid "" +"Message could not be sent because an error with the switchboard occurred:" +msgstr "" + +#: ../libpurple/protocols/msn/switchboard.c:531 +msgid "Message may have not been sent because an unknown error occurred:" +msgstr "" + +#: ../libpurple/protocols/msn/userlist.c:469 +msgid "Delete Buddy from Address Book?" +msgstr "" + +#: ../libpurple/protocols/msn/userlist.c:470 +msgid "Do you want to delete this buddy from your address book as well?" +msgstr "" + +#: ../libpurple/protocols/msn/userlist.c:526 +msgid "The username specified is invalid." +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:64 +msgid "The Display Name you entered is invalid." +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:71 +#: ../libpurple/protocols/mxit/login.c:250 +msgid "" +"The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'." +msgstr "" + +#. show error to user +#: ../libpurple/protocols/mxit/actions.c:200 +msgid "Profile Update Error" +msgstr "" + +#. no profile information yet, so we cannot update +#. (reference: "libpurple/request.h") +#: ../libpurple/protocols/mxit/actions.c:224 +#: ../libpurple/protocols/mxit/actions.c:313 +#: ../libpurple/protocols/oscar/userinfo.c:527 +msgid "Profile" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:224 +msgid "Your profile information is not yet retrieved. Please try again later." +msgstr "" + +#. display name +#. nick name (required) +#: ../libpurple/protocols/mxit/actions.c:235 +#: ../libpurple/protocols/mxit/login.c:338 +#: ../libpurple/protocols/mxit/profile.c:211 +#: ../libpurple/protocols/mxit/profile.c:321 +msgid "Display Name" +msgstr "" + +#. about me +#: ../libpurple/protocols/mxit/actions.c:259 +#: ../libpurple/protocols/mxit/profile.c:225 +msgid "About Me" +msgstr "" + +#. where I live +#: ../libpurple/protocols/mxit/actions.c:263 +#: ../libpurple/protocols/mxit/profile.c:227 +msgid "Where I Live" +msgstr "" + +#. relationship status +#: ../libpurple/protocols/mxit/actions.c:267 +#: ../libpurple/protocols/mxit/profile.c:229 +msgid "Relationship Status" +msgstr "" + +#. mobile number +#: ../libpurple/protocols/mxit/actions.c:298 +msgid "Mobile Number" +msgstr "" + +#. is searchable +#: ../libpurple/protocols/mxit/actions.c:302 +msgid "Can be searched" +msgstr "" + +#. is suggestable +#: ../libpurple/protocols/mxit/actions.c:306 +msgid "Can be suggested" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:313 +msgid "Update your MXit Profile" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:341 +#: ../libpurple/protocols/mxit/login.c:261 +msgid "The PIN you entered is invalid." +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:346 +msgid "The PIN you entered has an invalid length [4-10]." +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:351 +#: ../libpurple/protocols/mxit/login.c:271 +msgid "The PIN is invalid. It should only consist of digits [0-9]." +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:357 +#: ../libpurple/protocols/mxit/login.c:277 +msgid "The two PINs you entered do not match." +msgstr "" + +#. show error to user +#: ../libpurple/protocols/mxit/actions.c:375 +msgid "PIN Update Error" +msgstr "" + +#. pin +#. pin (required) +#: ../libpurple/protocols/mxit/actions.c:401 +#: ../libpurple/protocols/mxit/login.c:355 +msgid "PIN" +msgstr "" + +#. verify pin +#: ../libpurple/protocols/mxit/actions.c:406 +#: ../libpurple/protocols/mxit/login.c:359 +msgid "Verify PIN" +msgstr "" + +#. (reference: "libpurple/request.h") +#: ../libpurple/protocols/mxit/actions.c:411 +msgid "Change PIN" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:411 +msgid "Change MXit PIN" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:429 +msgid "View Splash" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:429 +msgid "There is no splash-screen currently available" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:449 +msgid "About" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:497 +msgid "Search for user" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:498 +msgid "Search for a MXit contact" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:499 +msgid "Type search information" +msgstr "" + +#: ../libpurple/protocols/mxit/actions.c:501 +#: ../libpurple/protocols/oscar/oscar.c:5333 +msgid "_Search" +msgstr "" + +#. display / change profile +#: ../libpurple/protocols/mxit/actions.c:521 +msgid "Change Profile..." +msgstr "" + +#. change PIN +#: ../libpurple/protocols/mxit/actions.c:525 +msgid "Change PIN..." +msgstr "" + +#. suggested friends +#: ../libpurple/protocols/mxit/actions.c:529 +msgid "Suggested friends..." +msgstr "" + +#. search for contacts +#: ../libpurple/protocols/mxit/actions.c:533 +msgid "Search for contacts..." +msgstr "" + +#. display splash-screen +#: ../libpurple/protocols/mxit/actions.c:537 +msgid "View Splash..." +msgstr "" + +#. display plugin version +#: ../libpurple/protocols/mxit/actions.c:541 +msgid "About..." +msgstr "" + +#. the file is too big +#: ../libpurple/protocols/mxit/filexfer.c:130 +msgid "The file you are trying to send is too large!" +msgstr "" + +#. file read error +#: ../libpurple/protocols/mxit/filexfer.c:178 +msgid "Unable to access the local file" +msgstr "" + +#. file write error +#: ../libpurple/protocols/mxit/filexfer.c:456 +msgid "Unable to save the file" +msgstr "" + +#: ../libpurple/protocols/mxit/http.c:281 +msgid "" +"Unable to connect to the MXit HTTP server. Please check your server " +"settings." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:106 +msgid "Logging In..." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:168 +#: ../libpurple/protocols/mxit/login.c:205 +msgid "" +"Unable to connect to the MXit server. Please check your server settings." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:193 +msgid "Connecting..." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:242 +msgid "The Display Name you entered is too short." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:266 +msgid "The PIN you entered has an invalid length [7-10]." +msgstr "" + +#. mxit login name +#: ../libpurple/protocols/mxit/login.c:333 +msgid "MXit ID" +msgstr "" + +#. show the form to the user to complete +#: ../libpurple/protocols/mxit/login.c:365 +msgid "Register New MXit Account" +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:365 +msgid "Please fill in the following fields:" +msgstr "" + +#. no reply from the WAP site +#: ../libpurple/protocols/mxit/login.c:397 +#: ../libpurple/protocols/mxit/login.c:635 +msgid "Error contacting the MXit WAP site. Please try again later." +msgstr "" + +#. wapserver error +#. server could not find the user +#: ../libpurple/protocols/mxit/login.c:406 +#: ../libpurple/protocols/mxit/login.c:644 +msgid "" +"MXit is currently unable to process the request. Please try again later." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:416 +msgid "Wrong security code entered. Please try again later." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:419 +msgid "Your session has expired. Please try again later." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:422 +msgid "Invalid country selected. Please try again." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:425 +msgid "The MXit ID you entered is not registered. Please register first." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:428 +msgid "The MXit ID you entered is already registered. Please choose another." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:435 +msgid "Internal error. Please try again later." +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:526 +msgid "You did not enter the security code" +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:662 +msgid "Security Code" +msgstr "" + +#. ask for input (required) +#: ../libpurple/protocols/mxit/login.c:666 +msgid "Enter Security Code" +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:672 +msgid "Your Country" +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:693 +msgid "Your Language" +msgstr "" + +#. display the form to the user and wait for his/her input +#: ../libpurple/protocols/mxit/login.c:710 +msgid "MXit Authorization" +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:710 +msgid "MXit account validation" +msgstr "" + +#: ../libpurple/protocols/mxit/login.c:732 +msgid "Retrieving User Information..." +msgstr "" + +#: ../libpurple/protocols/mxit/multimx.c:214 +msgid "was kicked" +msgstr "" + +#: ../libpurple/protocols/mxit/multimx.c:229 +msgid "You have been kicked from this MultiMX." +msgstr "" + +#: ../libpurple/protocols/mxit/multimx.c:441 +msgid "_Room Name:" +msgstr "" + +#. Display system message in chat window +#: ../libpurple/protocols/mxit/multimx.c:576 +msgid "You have invited" +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:214 +msgid "Loading menu..." +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:346 +#: ../libpurple/protocols/mxit/profile.c:249 +#: ../libpurple/protocols/mxit/profile.c:272 +msgid "Status Message" +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:358 +msgid "Rejection Message" +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:576 +msgid "No profile available" +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:576 +msgid "This contact does not have a profile." +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:595 +msgid "Your MXit ID..." +msgstr "" + +#. contact is in Deleted, Rejected or None state +#: ../libpurple/protocols/mxit/mxit.c:645 +msgid "Re-Invite" +msgstr "" + +#. Configuration options +#. WAP server (reference: "libpurple/accountopt.h") +#: ../libpurple/protocols/mxit/mxit.c:852 +msgid "WAP Server" +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:855 +msgid "Connect via HTTP" +msgstr "" + +#: ../libpurple/protocols/mxit/mxit.c:858 +msgid "Enable splash-screen popup" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:48 +msgid "Don't want to say" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:50 +msgid "Single" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:52 +msgid "In a relationship" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:54 +msgid "Engaged" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:56 +msgid "Married" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:58 +msgid "It's complicated" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:60 +msgid "Widowed" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:62 +msgid "Separated" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:64 +msgid "Divorced" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:239 +msgid "Last Online" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:261 +msgid "Invite Message" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:310 +msgid "No results" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:310 +msgid "No contacts found." +msgstr "" + +#. define columns +#: ../libpurple/protocols/mxit/profile.c:319 +msgid "UserId" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:331 +msgid "Where I live" +msgstr "" + +#: ../libpurple/protocols/mxit/profile.c:358 +#, c-format +msgid "You have %i suggested friend." +msgid_plural "You have %i suggested friends." +msgstr[0] "" + +#: ../libpurple/protocols/mxit/profile.c:360 +#, c-format +msgid "We found %i contact that matches your search." +msgid_plural "We found %i contacts that match your search." +msgstr[0] "" + +#. we must have lost the connection, so terminate it so that we can reconnect +#: ../libpurple/protocols/mxit/protocol.c:417 +msgid "We have lost the connection to MXit. Please reconnect." +msgstr "" + +#. packet could not be queued for transmission +#: ../libpurple/protocols/mxit/protocol.c:513 +msgid "Message Send Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:513 +msgid "Unable to process your request at this time" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:539 +msgid "Timeout while waiting for a response from the MXit server." +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:1475 +msgid "Successfully Logged In..." +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:1572 +#, c-format +msgid "" +"%s sent you an encrypted message, but it is not supported on this client." +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:1573 +#: ../libpurple/protocols/mxit/protocol.c:2490 +msgid "Message Error" +msgstr "" + +#. could not be decrypted +#: ../libpurple/protocols/mxit/protocol.c:1581 +msgid "An encrypted message was received which could not be decrypted." +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2291 +msgid "Cannot perform redirect using the specified protocol" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2459 +msgid "An internal MXit server error occurred." +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2478 +#, c-format +msgid "Login error: %s (%i)" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2483 +#, c-format +msgid "Logout error: %s (%i)" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2487 +msgid "Contact Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2493 +msgid "Message Sending Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2496 +msgid "Status Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2499 +msgid "Mood Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2510 +msgid "Invitation Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2513 +msgid "Contact Removal Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2517 +msgid "Subscription Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2520 +msgid "Contact Update Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2523 +msgid "File Transfer Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2526 +msgid "Cannot create MultiMx room" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2529 +msgid "MultiMx Invitation Error" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2533 +msgid "Profile Error" +msgstr "" + +#. bad packet +#: ../libpurple/protocols/mxit/protocol.c:2747 +msgid "Invalid packet received from MXit." +msgstr "" + +#. connection error +#: ../libpurple/protocols/mxit/protocol.c:2812 +msgid "A connection error occurred to MXit. (read stage 0x01)" +msgstr "" + +#. connection closed +#: ../libpurple/protocols/mxit/protocol.c:2817 +msgid "A connection error occurred to MXit. (read stage 0x02)" +msgstr "" + +#: ../libpurple/protocols/mxit/protocol.c:2827 +msgid "A connection error occurred to MXit. (read stage 0x03)" +msgstr "" + +#. malformed packet length record (too long) +#: ../libpurple/protocols/mxit/protocol.c:2838 +msgid "A connection error occurred to MXit. (read stage 0x04)" +msgstr "" + +#. connection error +#: ../libpurple/protocols/mxit/protocol.c:2849 +msgid "A connection error occurred to MXit. (read stage 0x05)" +msgstr "" + +#. connection closed +#: ../libpurple/protocols/mxit/protocol.c:2854 +msgid "A connection error occurred to MXit. (read stage 0x06)" +msgstr "" + +#: ../libpurple/protocols/mxit/roster.c:210 +#: ../libpurple/protocols/silc/buddy.c:1518 +#: ../libpurple/protocols/silc/util.c:535 +#: ../libpurple/protocols/silc10/buddy.c:1525 +#: ../libpurple/protocols/silc10/util.c:527 +msgid "In Love" +msgstr "" + +#: ../libpurple/protocols/mxit/roster.c:254 +msgid "Pending" +msgstr "" + +#: ../libpurple/protocols/mxit/roster.c:256 +msgid "Invited" +msgstr "" + +#: ../libpurple/protocols/mxit/roster.c:258 +msgid "Rejected" +msgstr "" + +#: ../libpurple/protocols/mxit/roster.c:260 +msgid "Deleted" +msgstr "" + +#: ../libpurple/protocols/mxit/splashscreen.c:206 +#: ../libpurple/protocols/mxit/splashscreen.c:210 +msgid "MXit Advertising" +msgstr "" + +#: ../libpurple/protocols/mxit/splashscreen.c:207 +msgid "More Information" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:136 +#, c-format +msgid "No such user: %s" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:138 +msgid "User lookup" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:693 +msgid "Reading challenge" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:703 +msgid "Unexpected challenge length from server" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:707 +msgid "Logging in" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:803 +msgid "MySpaceIM - No Username Set" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:804 +msgid "You appear to have no MySpace username." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:805 +msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:840 +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 +#: ../libpurple/protocols/myspace/myspace.c:881 +msgid "New mail messages" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:882 +msgid "New blog comments" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:883 +msgid "New profile comments" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:884 +msgid "New friend requests!" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:885 +msgid "New picture comments" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:909 +msgid "MySpace" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:1011 +msgid "IM Friends" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:1143 +#, 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] "" + +#: ../libpurple/protocols/myspace/myspace.c:1147 +msgid "Add contacts from server" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:1824 +#, c-format +msgid "Protocol error, code %d: %s" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:1846 +#, c-format +msgid "" +"%s Your password is %zu characters, which is longer than the maximum length " +"of %d. Please shorten your password at " +"http://profileedit.myspace.com/index.cfm?fuseaction=accountSettings.changePassword" +" and try again." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:1859 +#: ../libpurple/protocols/novell/nmuser.c:1921 +msgid "Incorrect username or password" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:1871 +msgid "MySpaceIM Error" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:2032 +msgid "Invalid input condition" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:2657 +#: ../libpurple/protocols/myspace/myspace.c:2691 +msgid "Failed to add buddy" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:2657 +msgid "'addbuddy' command failed." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:2691 +#: ../libpurple/protocols/myspace/myspace.c:2741 +msgid "persist command failed" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:2722 +#: ../libpurple/protocols/myspace/myspace.c:2741 +#: ../libpurple/protocols/myspace/myspace.c:2754 +msgid "Failed to remove buddy" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:2722 +msgid "'delbuddy' command failed" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:2754 +msgid "blocklist command failed" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3100 +msgid "Missing Cipher" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3101 +msgid "The RC4 cipher could not be found" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3102 +msgid "" +"Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will " +"not be loaded." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3129 +#: ../libpurple/protocols/myspace/myspace.c:3192 +msgid "Add friends from MySpace.com" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3130 +msgid "Importing friends failed" +msgstr "" + +#. TODO: find out how +#: ../libpurple/protocols/myspace/myspace.c:3185 +msgid "Find people..." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3188 +msgid "Change IM name..." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3574 +msgid "myim URL handler" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3575 +msgid "No suitable MySpaceIM account could be found to open this myim URL." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3576 +msgid "Enable the proper MySpaceIM account and try again." +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3637 +msgid "Show display name in status text" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3640 +msgid "Show headline in status text" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3645 +msgid "Send emoticons" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3650 +msgid "Screen resolution (dots per inch)" +msgstr "" + +#: ../libpurple/protocols/myspace/myspace.c:3653 +msgid "Base font size (points)" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:120 +#: ../libpurple/protocols/zephyr/zephyr.c:794 +#: ../libpurple/protocols/zephyr/zephyr.c:1177 +msgid "User" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:140 +msgid "Headline" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:156 +msgid "Song" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:166 +msgid "Total Friends" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:184 +msgid "Client Version" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:632 +#: ../libpurple/protocols/myspace/user.c:786 +msgid "" +"An error occurred while trying to set the username. Please try again, or " +"visit http://editprofile.myspace.com/index.cfm?fuseaction=profile.username " +"to set your username." +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:806 +msgid "MySpaceIM - Username Available" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:807 +msgid "This username is available. Would you like to set it?" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:808 +msgid "ONCE SET, THIS CANNOT BE CHANGED!" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:819 +#: ../libpurple/protocols/myspace/user.c:880 +msgid "MySpaceIM - Please Set a Username" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:820 +msgid "This username is unavailable." +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:821 +msgid "Please try another username:" +msgstr "" + +#. Protocol won't log in now without a username set.. Disconnect +#: ../libpurple/protocols/myspace/user.c:870 +msgid "No username set" +msgstr "" + +#: ../libpurple/protocols/myspace/user.c:881 +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." +#: ../libpurple/protocols/myspace/zap.c:44 +#: ../libpurple/protocols/myspace/zap.c:217 +msgid "Zap" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:44 +#, c-format +msgid "%s has zapped you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:45 +#, c-format +msgid "Zapping %s..." +msgstr "" + +#. Whack means "to hit or strike someone with a sharp blow" +#: ../libpurple/protocols/myspace/zap.c:48 +msgid "Whack" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:49 +#, c-format +msgid "%s has whacked you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:49 +#, 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. +#: ../libpurple/protocols/myspace/zap.c:54 +msgid "Torch" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:55 +#, c-format +msgid "%s has torched you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:55 +#, c-format +msgid "Torching %s..." +msgstr "" + +#. Smooch means "to kiss someone, often enthusiastically" +#: ../libpurple/protocols/myspace/zap.c:58 +msgid "Smooch" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:59 +#, c-format +msgid "%s has smooched you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:59 +#, c-format +msgid "Smooching %s..." +msgstr "" + +#. A hug is a display of affection; wrapping your arms around someone +#: ../libpurple/protocols/myspace/zap.c:62 +msgid "Hug" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:62 +#, c-format +msgid "%s has hugged you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:63 +#, c-format +msgid "Hugging %s..." +msgstr "" + +#. Slap means "to hit someone with an open/flat hand" +#: ../libpurple/protocols/myspace/zap.c:66 +msgid "Slap" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:67 +#, c-format +msgid "%s has slapped you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:67 +#, c-format +msgid "Slapping %s..." +msgstr "" + +#. Goose means "to pinch someone on their butt" +#: ../libpurple/protocols/myspace/zap.c:70 +msgid "Goose" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:71 +#, c-format +msgid "%s has goosed you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:71 +#, 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. +#: ../libpurple/protocols/myspace/zap.c:76 +msgid "High-five" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:77 +#, c-format +msgid "%s has high-fived you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:77 +#, 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. +#: ../libpurple/protocols/myspace/zap.c:82 +msgid "Punk" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:83 +#, c-format +msgid "%s has punk'd you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:83 +#, 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. +#: ../libpurple/protocols/myspace/zap.c:92 +msgid "Raspberry" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:93 +#, c-format +msgid "%s has raspberried you!" +msgstr "" + +#: ../libpurple/protocols/myspace/zap.c:93 +#, c-format +msgid "Raspberrying %s..." +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1863 +msgid "Required parameters not passed in" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1866 +msgid "Unable to write to network" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1869 +msgid "Unable to read from network" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1872 +msgid "Error communicating with server" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1876 +msgid "Conference not found" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1879 +msgid "Conference does not exist" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1883 +msgid "A folder with that name already exists" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1886 +msgid "Not supported" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1890 +msgid "Password has expired" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1893 +#: ../libpurple/protocols/oscar/clientlogin.c:487 +#: ../libpurple/protocols/oscar/oscar.c:1096 +#: ../libpurple/protocols/simple/simple.c:1127 +#: ../libpurple/protocols/yahoo/libymsg.c:2108 +msgid "Incorrect password" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1899 +msgid "Account has been disabled" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1902 +msgid "The server could not access the directory" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1905 +msgid "Your system administrator has disabled this operation" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1908 +msgid "The server is unavailable; try again later" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1911 +msgid "Cannot add a contact to the same folder twice" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1914 +msgid "Cannot add yourself" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1917 +msgid "Master archive is misconfigured" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1924 +msgid "Could not recognize the host of the username you entered" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1927 +msgid "" +"Your account has been disabled because too many incorrect passwords were " +"entered" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1930 +msgid "You cannot add the same person twice to a conversation" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1934 +msgid "You have reached your limit for the number of contacts allowed" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1937 +msgid "You have entered an incorrect username" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1940 +msgid "An error occurred while updating the directory" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1943 +msgid "Incompatible protocol version" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1946 +msgid "The user has blocked you" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1949 +msgid "" +"This evaluation version does not allow more than ten users to log in at one " +"time" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1952 +msgid "The user is either offline or you are blocked" +msgstr "" + +#: ../libpurple/protocols/novell/nmuser.c:1955 +#, c-format +msgid "Unknown error: 0x%X" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:124 +#, c-format +msgid "Unable to login: %s" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:255 +#, c-format +msgid "Unable to send message. Could not get details for user (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:404 +#, c-format +msgid "Unable to add %s to your buddy list (%s)." +msgstr "" + +#. TODO: Improve this! message to who or for what conference? +#: ../libpurple/protocols/novell/novell.c:430 +#, c-format +msgid "Unable to send message (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:501 +#: ../libpurple/protocols/novell/novell.c:993 +#, c-format +msgid "Unable to invite user (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:540 +#, c-format +msgid "Unable to send message to %s. Could not create the conference (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:545 +#, c-format +msgid "Unable to send message. Could not create the conference (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:592 +#, c-format +msgid "" +"Unable to move user %s to folder %s in the server side list. Error while " +"creating folder (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:640 +#, c-format +msgid "" +"Unable to add %s to your buddy list. Error creating folder in server side " +"list (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:713 +#, c-format +msgid "Could not get details for user %s (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:759 +#: ../libpurple/protocols/novell/novell.c:905 +#, c-format +msgid "Unable to add user to privacy list (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:806 +#, c-format +msgid "Unable to add %s to deny list (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:859 +#, c-format +msgid "Unable to add %s to permit list (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:927 +#, c-format +msgid "Unable to remove %s from privacy list (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:950 +#: ../libpurple/protocols/novell/novell.c:1656 +#, c-format +msgid "Unable to change server side privacy settings (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1020 +#, c-format +msgid "Unable to create conference (%s)." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1131 +#: ../libpurple/protocols/novell/novell.c:1702 +msgid "Error communicating with server. Closing connection." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1484 +msgid "Telephone Number" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1490 +msgid "Personal Title" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1494 +msgid "Mailstop" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1510 +#: ../libpurple/protocols/sametime/sametime.c:4169 +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); +#. } +#: ../libpurple/protocols/novell/novell.c:1523 +msgid "Full name" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1646 +#, c-format +msgid "GroupWise Conference %d" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1729 +msgid "Authenticating..." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1746 +msgid "Waiting for response..." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1881 +#, c-format +msgid "%s has been invited to this conversation." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1909 +msgid "Invitation to Conversation" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1910 +#, c-format +msgid "" +"Invitation from: %s\n" +"\n" +"Sent: %s" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:1912 +msgid "Would you like to join the conversation?" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:2084 +#, c-format +msgid "" +"%s appears to be offline and did not receive the message that you just sent." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:2184 +msgid "" +"Unable to connect to server. Please enter the address of the server to which" +" you wish to connect." +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:2521 +msgid "This conference has been closed. No more messages can be sent." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/novell/novell.c:3544 +#: ../libpurple/protocols/novell/novell.c:3546 +msgid "Novell GroupWise Messenger Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:3571 +msgid "Server address" +msgstr "" + +#: ../libpurple/protocols/novell/novell.c:3575 +msgid "Server port" +msgstr "" + +#: ../libpurple/protocols/oscar/authorization.c:51 +msgid "Please authorize me so I can add you to my buddy list." +msgstr "" + +#: ../libpurple/protocols/oscar/authorization.c:87 +#: ../libpurple/protocols/oscar/authorization.c:97 +#: ../libpurple/protocols/oscar/oscar.c:1964 +#: ../libpurple/protocols/oscar/oscar.c:4373 +#: ../libpurple/protocols/yahoo/libymsg.c:1367 +msgid "No reason given." +msgstr "" + +#: ../libpurple/protocols/oscar/authorization.c:96 +msgid "Authorization Denied Message:" +msgstr "" + +#. * +#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel +#. buttons. +#: ../libpurple/protocols/oscar/authorization.c:98 +#: ../libpurple/protocols/oscar/oscar.c:1223 +#: ../libpurple/protocols/oscar/oscar.c:4936 +#: ../libpurple/protocols/oscar/oscar.c:5276 ../libpurple/request.h:1498 +msgid "_OK" +msgstr "" + +#: ../libpurple/protocols/oscar/clientlogin.c:116 +#, c-format +msgid "Received unexpected response from %s: %s" +msgstr "" + +#: ../libpurple/protocols/oscar/clientlogin.c:118 +#, c-format +msgid "Received unexpected response from %s" +msgstr "" + +#: ../libpurple/protocols/oscar/clientlogin.c:237 +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 "" + +#: ../libpurple/protocols/oscar/clientlogin.c:283 +#: ../libpurple/protocols/oscar/oscar.c:1298 +msgid "" +"You required encryption in your account settings, but one of the servers " +"doesn't support it." +msgstr "" + +#. Note to translators: The first %s is a URL, the second is an +#. error message. +#: ../libpurple/protocols/oscar/clientlogin.c:337 +#: ../libpurple/protocols/oscar/clientlogin.c:572 +#, c-format +msgid "Error requesting %s: %s" +msgstr "" + +#: ../libpurple/protocols/oscar/clientlogin.c:339 +#: ../libpurple/protocols/oscar/clientlogin.c:574 +msgid "The server returned an empty response" +msgstr "" + +#: ../libpurple/protocols/oscar/clientlogin.c:491 +msgid "" +"Server requested that you fill out a CAPTCHA in order to sign in, but this " +"client does not currently support CAPTCHAs." +msgstr "" + +#: ../libpurple/protocols/oscar/clientlogin.c:496 +msgid "AOL does not allow your screen name to authenticate here" +msgstr "" + +#: ../libpurple/protocols/oscar/encoding.c:133 +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 "" + +#: ../libpurple/protocols/oscar/encoding.c:249 +#, 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 "" + +#: ../libpurple/protocols/oscar/family_chatnav.c:65 +msgid "Could not join chat room" +msgstr "" + +#: ../libpurple/protocols/oscar/family_chatnav.c:66 +msgid "Invalid chat room name" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:58 +#: ../libpurple/protocols/oscar/util.c:39 +msgid "Invalid error" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:60 +msgid "Cannot receive IM due to parental controls" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:61 +msgid "Cannot send SMS without accepting terms" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:62 +msgid "Cannot send SMS" +msgstr "" + +#. SMS_WITHOUT_DISCLAIMER is weird +#: ../libpurple/protocols/oscar/family_icbm.c:63 +msgid "Cannot send SMS to this country" +msgstr "" + +#. Undocumented +#: ../libpurple/protocols/oscar/family_icbm.c:66 +msgid "Cannot send SMS to unknown country" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:67 +msgid "Bot accounts cannot initiate IMs" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:68 +msgid "Bot account cannot IM this user" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:69 +msgid "Bot account reached IM limit" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:70 +msgid "Bot account reached daily IM limit" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:71 +msgid "Bot account reached monthly IM limit" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:72 +msgid "Unable to receive offline messages" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:73 +msgid "Offline message store full" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:172 +#, c-format +msgid "Unable to send message: %s (%s)" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:175 +#, c-format +msgid "Unable to send message: %s" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:180 +#, c-format +msgid "Unable to send message to %s: %s (%s)" +msgstr "" + +#: ../libpurple/protocols/oscar/family_icbm.c:184 +#, c-format +msgid "Unable to send message to %s: %s" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:408 +msgid "Thinking" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:410 +msgid "Shopping" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:414 +msgid "Questioning" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:416 +msgid "Eating" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:417 +msgid "Watching a movie" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:419 ../pidgin/gtkconv.c:6820 +#: ../pidgin/gtkstatusbox.c:714 +msgid "Typing" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:420 +msgid "At the office" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:421 +msgid "Taking a bath" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:422 +msgid "Watching TV" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:423 +msgid "Having fun" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:424 +msgid "Sleeping" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:425 +msgid "Using a PDA" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:429 +msgid "Meeting friends" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:430 +msgid "On the phone" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:431 +msgid "Surfing" +msgstr "" + +#. "I am mobile." / "John is mobile." +#: ../libpurple/protocols/oscar/family_locate.c:433 ../libpurple/status.c:168 +msgid "Mobile" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:434 +msgid "Searching the web" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:435 +msgid "At a party" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:436 +msgid "Having Coffee" +msgstr "" + +#. Playing video games +#: ../libpurple/protocols/oscar/family_locate.c:438 +msgid "Gaming" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:439 +msgid "Browsing the web" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:440 +msgid "Smoking" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:441 +msgid "Writing" +msgstr "" + +#. Drinking [Alcohol] +#: ../libpurple/protocols/oscar/family_locate.c:443 +msgid "Drinking" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:444 ../libpurple/status.c:169 +msgid "Listening to music" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:445 +msgid "Studying" +msgstr "" + +#: ../libpurple/protocols/oscar/family_locate.c:447 +msgid "In the restroom" +msgstr "" + +#: ../libpurple/protocols/oscar/flap_connection.c:477 +#: ../libpurple/proxy.c:1561 ../libpurple/proxy.c:1591 +#: ../libpurple/proxy.c:1671 ../libpurple/proxy.c:1742 +#: ../libpurple/proxy.c:1843 ../libpurple/proxy.c:1982 +msgid "Received invalid data on connection with server" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/oscar/libaim.c:123 +#: ../libpurple/protocols/oscar/libaim.c:125 +msgid "AIM Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/oscar/libicq.c:35 +msgid "ICQ UIN..." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/oscar/libicq.c:133 +#: ../libpurple/protocols/oscar/libicq.c:135 +msgid "ICQ Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/oscar/libicq.c:162 +#: ../libpurple/protocols/yahoo/libyahoo.c:326 +#: ../libpurple/protocols/yahoo/libyahoojp.c:222 +#: ../libpurple/protocols/zephyr/zephyr.c:2990 +msgid "Encoding" +msgstr "" + +#: ../libpurple/protocols/oscar/odc.c:43 +msgid "The remote user has closed the connection." +msgstr "" + +#: ../libpurple/protocols/oscar/odc.c:45 +msgid "The remote user has declined your request." +msgstr "" + +#: ../libpurple/protocols/oscar/odc.c:47 +#, c-format +msgid "Lost connection with the remote user:<br>%s" +msgstr "" + +#: ../libpurple/protocols/oscar/odc.c:50 +msgid "Received invalid data on connection with remote user." +msgstr "" + +#: ../libpurple/protocols/oscar/odc.c:52 +msgid "Unable to establish a connection with the remote user." +msgstr "" + +#: ../libpurple/protocols/oscar/odc.c:563 +msgid "Direct IM established" +msgstr "" + +#: ../libpurple/protocols/oscar/odc.c:602 +#, 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 "" + +#: ../libpurple/protocols/oscar/oft.c:666 +#, c-format +msgid "File %s is %s, which is larger than the maximum size of %s." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:157 +#: ../libpurple/protocols/oscar/oscar.c:4771 +msgid "Free For Chat" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:161 +#: ../libpurple/protocols/oscar/oscar.c:4853 +msgid "Not Available" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:163 +#: ../libpurple/protocols/oscar/oscar.c:4839 +msgid "Occupied" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:167 +msgid "Web Aware" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:169 +#: ../libpurple/protocols/yahoo/libymsg.c:4100 ../libpurple/status.c:165 +#: ../pidgin/gtkdocklet.c:560 ../pidgin/gtkstatusbox.c:1099 +msgid "Invisible" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:171 +#: ../libpurple/protocols/oscar/oscar.c:4779 +msgid "Evil" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:173 +#: ../libpurple/protocols/oscar/oscar.c:4787 +msgid "Depression" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:175 +#: ../libpurple/protocols/oscar/oscar.c:4795 +msgid "At home" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:177 +#: ../libpurple/protocols/oscar/oscar.c:4803 +msgid "At work" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:179 +msgid "At lunch" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:309 +#, c-format +msgid "Unable to connect to authentication server: %s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:317 +#, c-format +msgid "Unable to connect to BOS server: %s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:376 +msgid "Username sent" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:380 +msgid "Connection established, cookie sent" +msgstr "" + +#. TODO: Don't call this with ssi +#: ../libpurple/protocols/oscar/oscar.c:461 +msgid "Finalizing connection" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:737 +#, c-format +msgid "" +"Unable to 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 "" + +#: ../libpurple/protocols/oscar/oscar.c:762 +msgid "" +"You required encryption in your account settings, but encryption is not " +"supported by your system." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:896 +#: ../libpurple/protocols/oscar/oscar.c:937 +#: ../libpurple/protocols/oscar/oscar.c:1010 +#, c-format +msgid "You may be disconnected shortly. If so, check %s for updates." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:900 +#: ../libpurple/protocols/oscar/oscar.c:941 +msgid "Unable to get a valid AIM login hash." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1014 +msgid "Unable to get a valid login hash." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1057 +#: ../libpurple/protocols/oscar/oscar.c:1176 +msgid "Received authorization" +msgstr "" + +#. Unregistered username +#. the username does not exist +#: ../libpurple/protocols/oscar/oscar.c:1090 +#: ../libpurple/protocols/yahoo/libymsg.c:2119 +#: ../libpurple/protocols/yahoo/libymsg.c:2410 +msgid "Username does not exist" +msgstr "" + +#. Suspended account +#: ../libpurple/protocols/oscar/oscar.c:1100 +msgid "Your account is currently suspended" +msgstr "" + +#. service temporarily unavailable +#: ../libpurple/protocols/oscar/oscar.c:1105 +msgid "The AOL Instant Messenger service is temporarily unavailable." +msgstr "" + +#. username connecting too frequently +#: ../libpurple/protocols/oscar/oscar.c:1109 +msgid "" +"Your username has 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 "" + +#. client too old +#: ../libpurple/protocols/oscar/oscar.c:1114 +#, c-format +msgid "The client version you are using is too old. Please upgrade at %s" +msgstr "" + +#. IP address connecting too frequently +#: ../libpurple/protocols/oscar/oscar.c:1121 +msgid "" +"Your IP address has been connecting and disconnecting too frequently. Wait a" +" minute and try again. If you continue to try, you will need to wait even " +"longer." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1204 +msgid "The SecurID key entered is invalid" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1220 +msgid "Enter SecurID" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1221 +msgid "Enter the 6 digit number from the digital display." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1259 +msgid "Password sent" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1350 +msgid "Unable to initialize connection" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1964 +#, c-format +msgid "" +"The user %u has denied your request to add them to your buddy list for the following reason:\n" +"%s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1965 +msgid "ICQ authorization denied." +msgstr "" + +#. Someone has granted you authorization +#: ../libpurple/protocols/oscar/oscar.c:1972 +#, c-format +msgid "The user %u has granted your request to add them to your buddy list." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1980 +#, c-format +msgid "" +"You have received a special message\n" +"\n" +"From: %s [%s]\n" +"%s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1988 +#, c-format +msgid "" +"You have received an ICQ page\n" +"\n" +"From: %s [%s]\n" +"%s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:1996 +#, c-format +msgid "" +"You have received an ICQ email from %s [%s]\n" +"\n" +"Message is:\n" +"%s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2030 +#, c-format +msgid "ICQ user %u has sent you a buddy: %s (%s)" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2038 +msgid "Do you want to add this buddy to your buddy list?" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2043 ../pidgin/gtkroomlist.c:325 +#: ../pidgin/plugins/disco/gtkdisco.c:694 +msgid "_Add" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2044 +msgid "_Decline" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2192 +#, 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] "" + +#: ../libpurple/protocols/oscar/oscar.c:2201 +#, 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] "" + +#: ../libpurple/protocols/oscar/oscar.c:2210 +#, 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] "" + +#: ../libpurple/protocols/oscar/oscar.c:2219 +#, 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] "" + +#: ../libpurple/protocols/oscar/oscar.c:2228 +#, 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] "" + +#: ../libpurple/protocols/oscar/oscar.c:2237 +#, 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] "" + +#: ../libpurple/protocols/oscar/oscar.c:2437 +msgid "Your AIM connection may be lost." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2773 +#, c-format +msgid "You have been disconnected from chat room %s." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2843 +msgid "The new formatting is invalid." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2844 +msgid "Username formatting can change only capitalization and whitespace." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:2978 +msgid "Pop-Up Message" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3018 +#, c-format +msgid "The following username is associated with %s" +msgid_plural "The following usernames are associated with %s" +msgstr[0] "" + +#: ../libpurple/protocols/oscar/oscar.c:3049 +#, c-format +msgid "No results found for email address %s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3070 +#, c-format +msgid "You should receive an email asking to confirm %s." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3072 +msgid "Account Confirmation Requested" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3105 +#, c-format +msgid "" +"Error 0x%04x: Unable to format username because the requested name differs " +"from the original." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3107 +#, c-format +msgid "Error 0x%04x: Unable to format username because it is invalid." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3109 +#, c-format +msgid "" +"Error 0x%04x: Unable to format username because the requested name is too " +"long." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3111 +#, c-format +msgid "" +"Error 0x%04x: Unable to change email address because there is already a " +"request pending for this username." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3113 +#, c-format +msgid "" +"Error 0x%04x: Unable to change email address because the given address has " +"too many usernames associated with it." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3115 +#, c-format +msgid "" +"Error 0x%04x: Unable to change email address because the given address is " +"invalid." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3117 +#, c-format +msgid "Error 0x%04x: Unknown error." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3119 +msgid "Error Changing Account Info" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3125 +#, c-format +msgid "The email address for %s is %s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3127 +msgid "Account Info" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3315 +msgid "" +"Your IM Image was not sent. You must be Direct Connected to send IM Images." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3542 +msgid "Unable to set AIM profile." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3543 +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 "" + +#: ../libpurple/protocols/oscar/oscar.c:3557 +#, 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] "" + +#: ../libpurple/protocols/oscar/oscar.c:3562 +msgid "Profile too long." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3591 +#, 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] "" + +#: ../libpurple/protocols/oscar/oscar.c:3596 +msgid "Away message too long." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3696 +#, c-format +msgid "" +"Unable to 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 "" + +#: ../libpurple/protocols/oscar/oscar.c:3832 +msgid "Unable to Retrieve Buddy List" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:3833 +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 "" + +#: ../libpurple/protocols/oscar/oscar.c:4016 +#: ../libpurple/protocols/oscar/oscar.c:4018 +#: ../libpurple/protocols/oscar/oscar.c:4242 +#: ../libpurple/protocols/oscar/oscar.c:4243 +#: ../libpurple/protocols/oscar/oscar.c:4248 +msgid "Orphans" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4167 +#, c-format +msgid "" +"Unable to add the buddy %s because you have too many buddies in your buddy " +"list. Please remove one and try again." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4167 +#: ../libpurple/protocols/oscar/oscar.c:4182 +msgid "(no name)" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4181 +#, c-format +msgid "Unable to add the buddy %s for an unknown reason." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4298 +#, 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 "" + +#: ../libpurple/protocols/oscar/oscar.c:4306 +msgid "Authorization Given" +msgstr "" + +#. Granted +#: ../libpurple/protocols/oscar/oscar.c:4369 +#, c-format +msgid "The user %s has granted your request to add them to your buddy list." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4370 +msgid "Authorization Granted" +msgstr "" + +#. Denied +#: ../libpurple/protocols/oscar/oscar.c:4373 +#, c-format +msgid "" +"The user %s has denied your request to add them to your buddy list for the following reason:\n" +"%s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4374 +msgid "Authorization Denied" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4412 +msgid "_Exchange:" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4528 +msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4765 +msgid "iTunes Music Store Link" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4812 +msgid "Lunch" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4933 +#, c-format +msgid "Buddy Comment for %s" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4934 +msgid "Buddy Comment:" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4983 +#, c-format +msgid "You have selected to open a Direct IM connection with %s." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4987 +msgid "" +"Because this reveals your IP address, it may be considered a security risk." +" Do you wish to continue?" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:4993 +#: ../libpurple/protocols/oscar/peer.c:1070 +msgid "C_onnect" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5031 +msgid "You closed the connection." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5091 +msgid "Get AIM Info" +msgstr "" + +#. We only do this if the user is in our buddy list +#: ../libpurple/protocols/oscar/oscar.c:5100 +msgid "Edit Buddy Comment" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5108 +msgid "Get X-Status Msg" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5126 +msgid "End Direct IM Session" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5132 +msgid "Direct IM" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5150 +msgid "Re-request Authorization" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5209 +msgid "Require authorization" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5212 +msgid "Web aware (enabling this will cause you to receive SPAM!)" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5217 +msgid "ICQ Privacy Options" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5274 +msgid "Change Address To:" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5307 +msgid "you are not waiting for authorization" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5310 +msgid "You are awaiting authorization from the following buddies" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5311 +msgid "" +"You can re-request authorization from these buddies by right-clicking on " +"them and selecting \"Re-request Authorization.\"" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5328 +msgid "Find Buddy by Email" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5329 +msgid "Search for a buddy by email address" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5330 +msgid "Type the email address of the buddy you are searching for." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5491 +msgid "Set User Info (web)..." +msgstr "" + +#. This only happens when connecting with the old-style BUCP login +#: ../libpurple/protocols/oscar/oscar.c:5503 +msgid "Change Password (web)" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5510 +msgid "Configure IM Forwarding (web)" +msgstr "" + +#. ICQ actions +#: ../libpurple/protocols/oscar/oscar.c:5520 +msgid "Set Privacy Options..." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5524 +msgid "Show Visible List" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5527 +msgid "Show Invisible List" +msgstr "" + +#. AIM actions +#: ../libpurple/protocols/oscar/oscar.c:5533 +msgid "Confirm Account" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5537 +msgid "Display Currently Registered Email Address" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5541 +msgid "Change Currently Registered Email Address..." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5548 +msgid "Show Buddies Awaiting Authorization" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5554 +msgid "Search for Buddy by Email Address..." +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5769 +msgid "Use clientLogin" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5774 +msgid "" +"Always use AIM/ICQ proxy server for\n" +"file transfers and direct IM (slower,\n" +"but does not reveal your IP address)" +msgstr "" + +#: ../libpurple/protocols/oscar/oscar.c:5779 +msgid "Allow multiple simultaneous logins" +msgstr "" + +#: ../libpurple/protocols/oscar/peer.c:720 +#, c-format +msgid "Asking %s to connect to us at %s:%hu for Direct IM." +msgstr "" + +#: ../libpurple/protocols/oscar/peer.c:805 +#, c-format +msgid "Attempting to connect to %s:%hu." +msgstr "" + +#: ../libpurple/protocols/oscar/peer.c:879 +msgid "Attempting to connect via proxy server." +msgstr "" + +#: ../libpurple/protocols/oscar/peer.c:1058 +#, c-format +msgid "%s has just asked to directly connect to %s" +msgstr "" + +#: ../libpurple/protocols/oscar/peer.c:1062 +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 "" + +#. Label +#: ../libpurple/protocols/oscar/userinfo.c:43 ../pidgin/gtkutils.c:2302 +#: ../pidgin/plugins/gevolution/new_person_dialog.c:331 +msgid "Buddy Icon" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:46 +#: ../pidgin/plugins/themeedit-icon.c:81 +msgid "Voice" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:49 +msgid "AIM Direct IM" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:55 +msgid "Get File" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:62 +msgid "Games" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:66 +msgid "ICQ Xtraz" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:69 +msgid "Add-Ins" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:72 +msgid "Send Buddy List" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:75 +msgid "ICQ Direct Connect" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:78 +msgid "AP User" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:81 +msgid "ICQ RTF" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:84 +msgid "Nihilist" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:87 +msgid "ICQ Server Relay" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:90 +msgid "Old ICQ UTF8" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:93 +msgid "Trillian Encryption" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:96 +msgid "ICQ UTF8" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:99 +msgid "Hiptop" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:102 +msgid "Security Enabled" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:105 +msgid "Video Chat" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:109 +msgid "iChat AV" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:112 +msgid "Live Video" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:115 +msgid "Camera" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:118 +msgid "Screen Sharing" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:344 +#: ../libpurple/protocols/oscar/userinfo.c:408 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:720 ../pidgin/gtkprefs.c:1723 +msgid "IP Address" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:350 +msgid "Warning Level" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:360 +msgid "Buddy Comment" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:370 +#, c-format +msgid "User information not available: %s" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:420 +#: ../libpurple/protocols/silc/util.c:592 +#: ../libpurple/protocols/silc10/util.c:586 +msgid "Mobile Phone" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:451 +msgid "Personal Web Page" +msgstr "" + +#. aim_userinfo_t +#. use_html_status +#: ../libpurple/protocols/oscar/userinfo.c:455 +msgid "Additional Information" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:464 +#: ../libpurple/protocols/oscar/userinfo.c:472 +msgid "Zip Code" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:475 +msgid "Work Information" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:478 +msgid "Division" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:479 +msgid "Position" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:480 +msgid "Web Page" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:508 +msgid "Online Since" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:513 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1184 +msgid "Member Since" +msgstr "" + +#: ../libpurple/protocols/oscar/userinfo.c:518 +msgid "Capabilities" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:40 +msgid "Invalid SNAC" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:41 +msgid "Server rate limit exceeded" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:42 +msgid "Client rate limit exceeded" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:44 +msgid "Service unavailable" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:45 +msgid "Service not defined" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:46 +msgid "Obsolete SNAC" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:47 +msgid "Not supported by host" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:48 +msgid "Not supported by client" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:49 +msgid "Refused by client" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:50 +msgid "Reply too big" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:51 +msgid "Responses lost" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:52 +msgid "Request denied" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:53 +msgid "Busted SNAC payload" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:54 +msgid "Insufficient rights" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:55 +msgid "In local permit/deny" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:56 +msgid "Warning level too high (sender)" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:57 +msgid "Warning level too high (receiver)" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:58 +msgid "User temporarily unavailable" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:59 +msgid "No match" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:60 +msgid "List overflow" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:61 +msgid "Request ambiguous" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:62 +msgid "Queue full" +msgstr "" + +#: ../libpurple/protocols/oscar/util.c:63 +msgid "Not while on AOL" +msgstr "" + +#. Translators: This string is a menu option that, if selected, will cause +#. you to appear online to the chosen user even when your status is set to +#. Invisible. +#: ../libpurple/protocols/oscar/visibility.c:26 +#: ../libpurple/protocols/yahoo/libymsg.c:4244 +#: ../libpurple/protocols/yahoo/libymsg.c:4320 +msgid "Appear Online" +msgstr "" + +#. Translators: This string is a menu option that, if selected, will cause +#. you to appear offline to the chosen user when your status is set to +#. Invisible (this is the default). +#: ../libpurple/protocols/oscar/visibility.c:31 +msgid "Don't Appear Online" +msgstr "" + +#. Translators: This string is a menu option that, if selected, will cause +#. you to always appear offline to the chosen user (even when your status +#. isn't Invisible). +#: ../libpurple/protocols/oscar/visibility.c:36 +#: ../libpurple/protocols/yahoo/libymsg.c:4326 +msgid "Appear Offline" +msgstr "" + +#. Translators: This string is a menu option that, if selected, will cause +#. you to appear offline to the chosen user if you are invisible, and +#. appear online to the chosen user if you are not invisible (this is the +#. default). +#: ../libpurple/protocols/oscar/visibility.c:42 +msgid "Don't Appear Offline" +msgstr "" + +#: ../libpurple/protocols/oscar/visibility.c:113 +msgid "you have no buddies on this list" +msgstr "" + +#: ../libpurple/protocols/oscar/visibility.c:116 +#, c-format +msgid "" +"You can add a buddy to this list by right-clicking on them and selecting " +"\"%s\"" +msgstr "" + +#: ../libpurple/protocols/oscar/visibility.c:127 +msgid "Visible List" +msgstr "" + +#: ../libpurple/protocols/oscar/visibility.c:128 +msgid "These buddies will see your status when you switch to \"Invisible\"" +msgstr "" + +#: ../libpurple/protocols/oscar/visibility.c:137 +msgid "Invisible List" +msgstr "" + +#: ../libpurple/protocols/oscar/visibility.c:138 +msgid "These buddies will always see you as offline" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1320 +#, c-format +msgid "<b>Group Title:</b> %s<br>" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1321 +#, c-format +msgid "<b>Notes Group ID:</b> %s<br>" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1323 +#, c-format +msgid "Info for Group %s" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1325 +msgid "Notes Address Book Information" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1357 +msgid "Invite Group to Conference..." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1367 +msgid "Get Notes Address Book Info" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1538 +msgid "Sending Handshake" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1543 +msgid "Waiting for Handshake Acknowledgement" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1548 +msgid "Handshake Acknowledged, Sending Login" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1553 +msgid "Waiting for Login Acknowledgement" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1558 +msgid "Login Redirected" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1564 +msgid "Forcing Login" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1568 +msgid "Login Acknowledged" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1573 +msgid "Starting Services" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1710 +#, c-format +msgid "" +"A Sametime administrator has issued the following announcement on server %s" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1715 +msgid "Sametime Administrator Announcement" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:1847 +#, c-format +msgid "Announcement from %s" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:2021 +msgid "Conference Closed" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:2486 +msgid "Unable to send message: " +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:2492 +#, c-format +msgid "Unable to send message to %s:" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3042 +msgid "Place Closed" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3312 +msgid "Microphone" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3313 +msgid "Speakers" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3314 +msgid "Video Camera" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3318 +msgid "File Transfer" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3352 +#: ../libpurple/protocols/sametime/sametime.c:4192 +msgid "Supports" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3357 +#: ../libpurple/protocols/sametime/sametime.c:4166 +msgid "External User" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3463 +msgid "Create conference with user" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3464 +#, c-format +msgid "" +"Please enter a topic for the new conference, and an invitation message to be" +" sent to %s" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3468 +msgid "New Conference" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3470 +msgid "Create" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3535 +msgid "Available Conferences" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3541 +msgid "Create New Conference..." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3548 +msgid "Invite user to a conference" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3549 +#, 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 "" + +#: ../libpurple/protocols/sametime/sametime.c:3554 +msgid "Invite to Conference" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3645 +msgid "Invite to Conference..." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3650 +msgid "Send TEST Announcement" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3669 ../pidgin/gtkconv.c:4681 +msgid "Topic:" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:3729 +msgid "A server is required to connect this account" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4182 +#, c-format +msgid "Unknown (0x%04x)<br>" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4184 +msgid "Last Known Client" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4348 +#: ../libpurple/protocols/sametime/sametime.c:5565 +msgid "User Name" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4351 +#: ../libpurple/protocols/sametime/sametime.c:5568 +msgid "Sametime ID" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4375 +msgid "An ambiguous user ID was entered" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4376 +#, 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 "" + +#: ../libpurple/protocols/sametime/sametime.c:4381 +msgid "Select User" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4465 +msgid "Unable to add user: user not found" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:4467 +#, 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 "" + +#: ../libpurple/protocols/sametime/sametime.c:5056 +#, c-format +msgid "" +"Error reading file %s: \n" +"%s\n" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5205 +msgid "Remotely Stored Buddy List" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5210 +msgid "Buddy List Storage Mode" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5213 +msgid "Local Buddy List Only" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5215 +msgid "Merge List from Server" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5217 +msgid "Merge and Save List to Server" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5219 +msgid "Synchronize List with Server" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5274 +#, c-format +msgid "Import Sametime List for Account %s" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5314 +#, c-format +msgid "Export Sametime List for Account %s" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5368 +msgid "Unable to add group: group exists" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5369 +#, c-format +msgid "A group named '%s' already exists in your buddy list." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5372 +#: ../libpurple/protocols/sametime/sametime.c:5502 +msgid "Unable to add group" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5431 +msgid "Possible Matches" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5447 +msgid "Notes Address Book group results" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5448 +#, 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 "" + +#: ../libpurple/protocols/sametime/sametime.c:5453 +msgid "Select Notes Address Book" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5496 +msgid "Unable to add group: group not found" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5498 +#, c-format +msgid "" +"The identifier '%s' did not match any Notes Address Book groups in your " +"Sametime community." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5539 +msgid "Notes Address Book Group" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5540 +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 "" + +#: ../libpurple/protocols/sametime/sametime.c:5589 +#, c-format +msgid "Search results for '%s'" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5590 +#, 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 "" + +#: ../libpurple/protocols/sametime/sametime.c:5597 ../pidgin/gtknotify.c:972 +msgid "Search Results" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5622 +msgid "No matches" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5623 +#, c-format +msgid "" +"The identifier '%s' did not match any users in your Sametime community." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5627 +msgid "No Matches" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5664 +msgid "Search for a user" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5665 +msgid "" +"Enter a name or partial ID in the field below to search for matching users " +"in your Sametime community." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5668 +msgid "User Search" +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5681 +msgid "Import Sametime List..." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5685 +msgid "Export Sametime List..." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5689 +msgid "Add Notes Address Book Group..." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5693 +msgid "User Search..." +msgstr "" + +#: ../libpurple/protocols/sametime/sametime.c:5800 +msgid "Force login (ignore server redirects)" +msgstr "" + +#. pretend to be Sametime Connect +#: ../libpurple/protocols/sametime/sametime.c:5810 +msgid "Hide client identity" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:53 +#: ../libpurple/protocols/silc/buddy.c:414 +#: ../libpurple/protocols/silc/buddy.c:542 +#: ../libpurple/protocols/silc/buddy.c:705 +#: ../libpurple/protocols/silc/ft.c:422 +#: ../libpurple/protocols/silc10/buddy.c:52 +#: ../libpurple/protocols/silc10/buddy.c:421 +#: ../libpurple/protocols/silc10/buddy.c:546 +#: ../libpurple/protocols/silc10/buddy.c:712 +#: ../libpurple/protocols/silc10/ft.c:338 +#, c-format +msgid "User %s is not present in the network" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:54 +#: ../libpurple/protocols/silc/buddy.c:111 +#: ../libpurple/protocols/silc/buddy.c:116 +#: ../libpurple/protocols/silc/buddy.c:120 +#: ../libpurple/protocols/silc/buddy.c:125 +#: ../libpurple/protocols/silc/buddy.c:130 +#: ../libpurple/protocols/silc/buddy.c:135 +#: ../libpurple/protocols/silc/buddy.c:255 +#: ../libpurple/protocols/silc10/buddy.c:53 +#: ../libpurple/protocols/silc10/buddy.c:115 +#: ../libpurple/protocols/silc10/buddy.c:120 +#: ../libpurple/protocols/silc10/buddy.c:124 +#: ../libpurple/protocols/silc10/buddy.c:129 +#: ../libpurple/protocols/silc10/buddy.c:134 +#: ../libpurple/protocols/silc10/buddy.c:139 +#: ../libpurple/protocols/silc10/buddy.c:257 +msgid "Key Agreement" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:55 +#: ../libpurple/protocols/silc10/buddy.c:54 +msgid "Cannot perform the key agreement" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:112 +#: ../libpurple/protocols/silc10/buddy.c:116 +msgid "Error occurred during key agreement" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:116 +#: ../libpurple/protocols/silc10/buddy.c:120 +msgid "Key Agreement failed" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:121 +#: ../libpurple/protocols/silc10/buddy.c:125 +msgid "Timeout during key agreement" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:126 +#: ../libpurple/protocols/silc10/buddy.c:130 +msgid "Key agreement was aborted" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:131 +#: ../libpurple/protocols/silc10/buddy.c:135 +msgid "Key agreement is already started" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:136 +#: ../libpurple/protocols/silc10/buddy.c:140 +msgid "Key agreement cannot be started with yourself" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:256 +#: ../libpurple/protocols/silc/buddy.c:387 +#: ../libpurple/protocols/silc/buddy.c:501 +#: ../libpurple/protocols/silc/buddy.c:512 +#: ../libpurple/protocols/silc10/buddy.c:258 +#: ../libpurple/protocols/silc10/buddy.c:389 +#: ../libpurple/protocols/silc10/buddy.c:514 +msgid "The remote user is not present in the network any more" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:299 +#: ../libpurple/protocols/silc10/buddy.c:295 +#, c-format +msgid "" +"Key agreement request received from %s. Would you like to perform the key " +"agreement?" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:303 +#: ../libpurple/protocols/silc10/buddy.c:299 +#, c-format +msgid "" +"The remote user is waiting key agreement on:\n" +"Remote host: %s\n" +"Remote port: %d" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:316 +#: ../libpurple/protocols/silc10/buddy.c:312 +msgid "Key Agreement Request" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:386 +#: ../libpurple/protocols/silc/buddy.c:416 +#: ../libpurple/protocols/silc/buddy.c:456 +#: ../libpurple/protocols/silc10/buddy.c:388 +#: ../libpurple/protocols/silc10/buddy.c:423 +#: ../libpurple/protocols/silc10/buddy.c:465 +msgid "IM With Password" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:417 +#: ../libpurple/protocols/silc10/buddy.c:424 +msgid "Cannot set IM key" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:457 +#: ../libpurple/protocols/silc10/buddy.c:466 +msgid "Set IM Password" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:500 +#: ../libpurple/protocols/silc/buddy.c:511 +#: ../libpurple/protocols/silc/buddy.c:544 +#: ../libpurple/protocols/silc/ops.c:1515 +#: ../libpurple/protocols/silc/ops.c:1526 +#: ../libpurple/protocols/silc10/buddy.c:513 +#: ../libpurple/protocols/silc10/buddy.c:548 +#: ../libpurple/protocols/silc10/ops.c:1494 +#: ../libpurple/protocols/silc10/ops.c:1505 +msgid "Get Public Key" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:545 +#: ../libpurple/protocols/silc/ops.c:1516 +#: ../libpurple/protocols/silc/ops.c:1527 +#: ../libpurple/protocols/silc10/buddy.c:549 +#: ../libpurple/protocols/silc10/ops.c:1495 +#: ../libpurple/protocols/silc10/ops.c:1506 +msgid "Cannot fetch the public key" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:626 +#: ../libpurple/protocols/silc/buddy.c:1668 +#: ../libpurple/protocols/silc10/buddy.c:635 +#: ../libpurple/protocols/silc10/buddy.c:1674 +msgid "Show Public Key" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:627 +#: ../libpurple/protocols/silc/buddy.c:1035 +#: ../libpurple/protocols/silc/chat.c:241 +#: ../libpurple/protocols/silc10/buddy.c:636 +#: ../libpurple/protocols/silc10/buddy.c:1036 +#: ../libpurple/protocols/silc10/chat.c:237 +msgid "Could not load public key" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:706 +#: ../libpurple/protocols/silc/ops.c:1065 +#: ../libpurple/protocols/silc/ops.c:1180 +#: ../libpurple/protocols/silc/ops.c:1302 +#: ../libpurple/protocols/silc/ops.c:1303 +#: ../libpurple/protocols/silc/ops.c:1321 +#: ../libpurple/protocols/silc10/buddy.c:713 +#: ../libpurple/protocols/silc10/ops.c:1087 +#: ../libpurple/protocols/silc10/ops.c:1159 +#: ../libpurple/protocols/silc10/ops.c:1294 +#: ../libpurple/protocols/silc10/ops.c:1295 +#: ../libpurple/protocols/silc10/ops.c:1313 +msgid "User Information" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:707 +#: ../libpurple/protocols/silc/ops.c:1181 +#: ../libpurple/protocols/silc/ops.c:1322 +#: ../libpurple/protocols/silc10/buddy.c:714 +#: ../libpurple/protocols/silc10/ops.c:1160 +#: ../libpurple/protocols/silc10/ops.c:1314 +msgid "Cannot get user information" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:728 +#: ../libpurple/protocols/silc10/buddy.c:735 +#, c-format +msgid "The %s buddy is not trusted" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:731 +#: ../libpurple/protocols/silc10/buddy.c:738 +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. +#: ../libpurple/protocols/silc/buddy.c:1067 +#: ../libpurple/protocols/silc10/buddy.c:1070 +msgid "Open..." +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1078 +#: ../libpurple/protocols/silc10/buddy.c:1081 +#, c-format +msgid "The %s buddy is not present in the network" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1081 +#: ../libpurple/protocols/silc10/buddy.c:1084 +msgid "" +"To add the buddy you must import his/her public key. Press Import to import " +"a public key." +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1085 +#: ../libpurple/protocols/silc10/buddy.c:1088 +msgid "_Import..." +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1191 +#: ../libpurple/protocols/silc10/buddy.c:1184 +msgid "Select correct user" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1193 +#: ../libpurple/protocols/silc10/buddy.c:1186 +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 "" + +#: ../libpurple/protocols/silc/buddy.c:1195 +#: ../libpurple/protocols/silc10/buddy.c:1188 +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 "" + +#: ../libpurple/protocols/silc/buddy.c:1487 +#: ../libpurple/protocols/silc10/buddy.c:1494 +msgid "Detached" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1491 +#: ../libpurple/protocols/silc/silc.c:60 +#: ../libpurple/protocols/silc10/buddy.c:1498 +#: ../libpurple/protocols/silc10/silc.c:50 +msgid "Indisposed" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1495 +#: ../libpurple/protocols/silc/silc.c:62 +#: ../libpurple/protocols/silc10/buddy.c:1502 +#: ../libpurple/protocols/silc10/silc.c:52 +msgid "Wake Me Up" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1497 +#: ../libpurple/protocols/silc/silc.c:54 +#: ../libpurple/protocols/silc10/buddy.c:1504 +#: ../libpurple/protocols/silc10/silc.c:44 +msgid "Hyper Active" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1499 +#: ../libpurple/protocols/silc10/buddy.c:1506 +msgid "Robot" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1557 +#: ../libpurple/protocols/silc/ops.c:1219 +#: ../libpurple/protocols/silc10/buddy.c:1565 +#: ../libpurple/protocols/silc10/ops.c:1202 +msgid "User Modes" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1574 +#: ../libpurple/protocols/silc/ops.c:1236 +#: ../libpurple/protocols/silc10/buddy.c:1582 +#: ../libpurple/protocols/silc10/ops.c:1219 +msgid "Preferred Contact" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1579 +#: ../libpurple/protocols/silc/ops.c:1241 +#: ../libpurple/protocols/silc10/buddy.c:1587 +#: ../libpurple/protocols/silc10/ops.c:1224 +msgid "Preferred Language" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1584 +#: ../libpurple/protocols/silc/ops.c:1246 +#: ../libpurple/protocols/silc10/buddy.c:1592 +#: ../libpurple/protocols/silc10/ops.c:1229 +msgid "Device" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1589 +#: ../libpurple/protocols/silc/ops.c:1251 +#: ../libpurple/protocols/silc10/buddy.c:1597 +#: ../libpurple/protocols/silc10/ops.c:1234 +#: ../libpurple/protocols/silc10/silc.c:747 +#: ../libpurple/protocols/silc10/silc.c:749 +msgid "Timezone" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1594 +#: ../libpurple/protocols/silc/ops.c:1256 +#: ../libpurple/protocols/silc10/buddy.c:1602 +#: ../libpurple/protocols/silc10/ops.c:1239 +msgid "Geolocation" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1651 +#: ../libpurple/protocols/silc10/buddy.c:1656 +msgid "Reset IM Key" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1656 +#: ../libpurple/protocols/silc10/buddy.c:1662 +msgid "IM with Key Exchange" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1661 +#: ../libpurple/protocols/silc10/buddy.c:1667 +msgid "IM with Password" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1674 +#: ../libpurple/protocols/silc10/buddy.c:1680 +msgid "Get Public Key..." +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1681 +#: ../libpurple/protocols/silc/ops.c:1624 +#: ../libpurple/protocols/silc10/buddy.c:1687 +#: ../libpurple/protocols/silc10/ops.c:1624 +msgid "Kill User" +msgstr "" + +#: ../libpurple/protocols/silc/buddy.c:1691 +#: ../libpurple/protocols/silc/chat.c:1004 +#: ../libpurple/protocols/silc10/buddy.c:1697 +#: ../libpurple/protocols/silc10/chat.c:977 +msgid "Draw On Whiteboard" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:40 +#: ../libpurple/protocols/silc10/chat.c:39 +msgid "_Passphrase:" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:81 +#: ../libpurple/protocols/silc10/chat.c:80 +#, c-format +msgid "Channel %s does not exist in the network" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:82 +#: ../libpurple/protocols/silc/chat.c:177 +#: ../libpurple/protocols/silc10/chat.c:81 +#: ../libpurple/protocols/silc10/chat.c:174 +msgid "Channel Information" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:83 +#: ../libpurple/protocols/silc10/chat.c:82 +msgid "Cannot get channel information" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:120 +#: ../libpurple/protocols/silc10/chat.c:119 +#, c-format +msgid "<b>Channel Name:</b> %s" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:123 +#: ../libpurple/protocols/silc10/chat.c:122 +#, c-format +msgid "<br><b>User Count:</b> %d" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:130 +#: ../libpurple/protocols/silc10/chat.c:129 +#, c-format +msgid "<br><b>Channel Founder:</b> %s" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:139 +#: ../libpurple/protocols/silc10/chat.c:138 +#, c-format +msgid "<br><b>Channel Cipher:</b> %s" +msgstr "" + +#. Definition of HMAC: http://en.wikipedia.org/wiki/HMAC +#: ../libpurple/protocols/silc/chat.c:144 +#: ../libpurple/protocols/silc10/chat.c:142 +#, c-format +msgid "<br><b>Channel HMAC:</b> %s" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:149 +#: ../libpurple/protocols/silc10/chat.c:147 +#, c-format +msgid "<br><b>Channel Topic:</b><br>%s" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:154 +#: ../libpurple/protocols/silc10/chat.c:152 +#, c-format +msgid "<br><b>Channel Modes:</b> " +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:168 +#: ../libpurple/protocols/silc10/chat.c:165 +#, c-format +msgid "<br><b>Founder Key Fingerprint:</b><br>%s" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:169 +#: ../libpurple/protocols/silc10/chat.c:166 +#, c-format +msgid "<br><b>Founder Key Babbleprint:</b><br>%s" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:240 +#: ../libpurple/protocols/silc10/chat.c:236 +msgid "Add Channel Public Key" +msgstr "" + +#. Add new public key +#: ../libpurple/protocols/silc/chat.c:308 +#: ../libpurple/protocols/silc10/chat.c:291 +msgid "Open Public Key..." +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:427 +#: ../libpurple/protocols/silc10/chat.c:401 +msgid "Channel Passphrase" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:434 +#: ../libpurple/protocols/silc10/chat.c:408 +msgid "Channel Public Keys List" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:439 +#: ../libpurple/protocols/silc10/chat.c:413 +#, 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 "" + +#: ../libpurple/protocols/silc/chat.c:448 +#: ../libpurple/protocols/silc/chat.c:449 +#: ../libpurple/protocols/silc/chat.c:485 +#: ../libpurple/protocols/silc/chat.c:486 +#: ../libpurple/protocols/silc/chat.c:938 +#: ../libpurple/protocols/silc10/chat.c:422 +#: ../libpurple/protocols/silc10/chat.c:423 +#: ../libpurple/protocols/silc10/chat.c:461 +#: ../libpurple/protocols/silc10/chat.c:462 +#: ../libpurple/protocols/silc10/chat.c:911 +msgid "Channel Authentication" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:450 +#: ../libpurple/protocols/silc/chat.c:487 +#: ../libpurple/protocols/silc10/chat.c:424 +#: ../libpurple/protocols/silc10/chat.c:463 +msgid "Add / Remove" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:603 +#: ../libpurple/protocols/silc10/chat.c:581 +msgid "Group Name" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:607 +#: ../libpurple/protocols/silc/ops.c:1829 +#: ../libpurple/protocols/silc/silc.c:1260 +#: ../libpurple/protocols/silc10/chat.c:585 +#: ../libpurple/protocols/silc10/ops.c:1907 +#: ../libpurple/protocols/silc10/silc.c:956 +msgid "Passphrase" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:618 +#: ../libpurple/protocols/silc10/chat.c:596 +#, c-format +msgid "Please enter the %s channel private group name and passphrase." +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:620 +#: ../libpurple/protocols/silc10/chat.c:598 +msgid "Add Channel Private Group" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:752 +#: ../libpurple/protocols/silc10/chat.c:726 +msgid "User Limit" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:753 +#: ../libpurple/protocols/silc10/chat.c:727 +msgid "Set user limit on channel. Set to zero to reset user limit." +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:918 +#: ../libpurple/protocols/silc10/chat.c:891 +msgid "Invite List" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:923 +#: ../libpurple/protocols/silc10/chat.c:896 +msgid "Ban List" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:931 +#: ../libpurple/protocols/silc10/chat.c:904 +msgid "Add Private Group" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:944 +#: ../libpurple/protocols/silc10/chat.c:917 +msgid "Reset Permanent" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:949 +#: ../libpurple/protocols/silc10/chat.c:922 +msgid "Set Permanent" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:957 +#: ../libpurple/protocols/silc10/chat.c:930 +msgid "Set User Limit" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:963 +#: ../libpurple/protocols/silc10/chat.c:936 +msgid "Reset Topic Restriction" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:968 +#: ../libpurple/protocols/silc10/chat.c:941 +msgid "Set Topic Restriction" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:975 +#: ../libpurple/protocols/silc10/chat.c:948 +msgid "Reset Private Channel" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:980 +#: ../libpurple/protocols/silc10/chat.c:953 +msgid "Set Private Channel" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:987 +#: ../libpurple/protocols/silc10/chat.c:960 +msgid "Reset Secret Channel" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:992 +#: ../libpurple/protocols/silc10/chat.c:965 +msgid "Set Secret Channel" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:1053 +#: ../libpurple/protocols/silc10/chat.c:1102 +#, c-format +msgid "" +"You have to join the %s channel before you are able to join the private " +"group" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:1055 +#: ../libpurple/protocols/silc10/chat.c:1104 +msgid "Join Private Group" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:1056 +#: ../libpurple/protocols/silc10/chat.c:1105 +msgid "Cannot join private group" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:1252 +#: ../libpurple/protocols/silc/silc.c:1462 +#: ../libpurple/protocols/silc10/chat.c:1299 +#: ../libpurple/protocols/silc10/silc.c:1162 +msgid "Call Command" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:1252 +#: ../libpurple/protocols/silc/silc.c:1463 +#: ../libpurple/protocols/silc10/chat.c:1299 +#: ../libpurple/protocols/silc10/silc.c:1162 +msgid "Cannot call command" +msgstr "" + +#: ../libpurple/protocols/silc/chat.c:1253 +#: ../libpurple/protocols/silc/silc.c:1464 +#: ../libpurple/protocols/silc10/chat.c:1300 +#: ../libpurple/protocols/silc10/silc.c:1163 +msgid "Unknown command" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:86 ../libpurple/protocols/silc/ft.c:102 +#: ../libpurple/protocols/silc/ft.c:105 ../libpurple/protocols/silc/ft.c:109 +#: ../libpurple/protocols/silc/ft.c:113 ../libpurple/protocols/silc/ft.c:117 +#: ../libpurple/protocols/silc/ft.c:121 ../libpurple/protocols/silc/ft.c:271 +#: ../libpurple/protocols/silc/ft.c:276 ../libpurple/protocols/silc/ft.c:281 +#: ../libpurple/protocols/silc/ft.c:287 ../libpurple/protocols/silc/ft.c:424 +#: ../libpurple/protocols/silc10/ft.c:89 ../libpurple/protocols/silc10/ft.c:92 +#: ../libpurple/protocols/silc10/ft.c:96 +#: ../libpurple/protocols/silc10/ft.c:100 +#: ../libpurple/protocols/silc10/ft.c:104 +#: ../libpurple/protocols/silc10/ft.c:205 +#: ../libpurple/protocols/silc10/ft.c:210 +#: ../libpurple/protocols/silc10/ft.c:215 +#: ../libpurple/protocols/silc10/ft.c:221 +#: ../libpurple/protocols/silc10/ft.c:340 +msgid "Secure File Transfer" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:87 ../libpurple/protocols/silc/ft.c:103 +#: ../libpurple/protocols/silc/ft.c:106 ../libpurple/protocols/silc/ft.c:110 +#: ../libpurple/protocols/silc/ft.c:114 ../libpurple/protocols/silc/ft.c:118 +#: ../libpurple/protocols/silc/ft.c:122 ../libpurple/protocols/silc10/ft.c:90 +#: ../libpurple/protocols/silc10/ft.c:93 ../libpurple/protocols/silc10/ft.c:97 +#: ../libpurple/protocols/silc10/ft.c:101 +#: ../libpurple/protocols/silc10/ft.c:105 +msgid "Error during file transfer" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:88 +msgid "Remote disconnected" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:107 ../libpurple/protocols/silc10/ft.c:94 +msgid "Permission denied" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:111 ../libpurple/protocols/silc10/ft.c:98 +msgid "Key agreement failed" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:115 ../libpurple/protocols/silc/silc.c:352 +#: ../libpurple/protocols/silc10/ops.c:1725 +msgid "Connection timed out" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:119 +msgid "Creating connection failed" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:123 ../libpurple/protocols/silc10/ft.c:102 +msgid "File transfer session does not exist" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:272 ../libpurple/protocols/silc10/ft.c:206 +msgid "No file transfer session active" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:277 ../libpurple/protocols/silc10/ft.c:211 +msgid "File transfer already started" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:282 ../libpurple/protocols/silc10/ft.c:216 +msgid "Could not perform key agreement for file transfer" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:288 ../libpurple/protocols/silc10/ft.c:222 +msgid "Could not start the file transfer" +msgstr "" + +#: ../libpurple/protocols/silc/ft.c:425 ../libpurple/protocols/silc10/ft.c:341 +msgid "Cannot send file" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:77 +msgid "Error occurred" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:560 ../libpurple/protocols/silc/ops.c:569 +#: ../libpurple/protocols/silc/ops.c:578 +#: ../libpurple/protocols/silc10/ops.c:554 +#: ../libpurple/protocols/silc10/ops.c:563 +#: ../libpurple/protocols/silc10/ops.c:572 +#, c-format +msgid "%s has changed the topic of <I>%s</I> to: %s" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:644 +#: ../libpurple/protocols/silc10/ops.c:638 +#, c-format +msgid "<I>%s</I> set channel <I>%s</I> modes to: %s" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:648 +#: ../libpurple/protocols/silc10/ops.c:642 +#, c-format +msgid "<I>%s</I> removed all channel <I>%s</I> modes" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:681 +#: ../libpurple/protocols/silc10/ops.c:675 +#, c-format +msgid "<I>%s</I> set <I>%s's</I> modes to: %s" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:689 +#: ../libpurple/protocols/silc10/ops.c:683 +#, c-format +msgid "<I>%s</I> removed all <I>%s's</I> modes" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:718 +#: ../libpurple/protocols/silc10/ops.c:712 +#, c-format +msgid "You have been kicked off <I>%s</I> by <I>%s</I> (%s)" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:745 ../libpurple/protocols/silc/ops.c:750 +#: ../libpurple/protocols/silc/ops.c:755 +#: ../libpurple/protocols/silc10/ops.c:742 +#: ../libpurple/protocols/silc10/ops.c:747 +#: ../libpurple/protocols/silc10/ops.c:752 +#, c-format +msgid "You have been killed by %s (%s)" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:776 ../libpurple/protocols/silc/ops.c:781 +#: ../libpurple/protocols/silc/ops.c:786 +#: ../libpurple/protocols/silc10/ops.c:773 +#: ../libpurple/protocols/silc10/ops.c:778 +#: ../libpurple/protocols/silc10/ops.c:783 +#, c-format +msgid "Killed by %s (%s)" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:823 +#: ../libpurple/protocols/silc10/ops.c:829 +msgid "Server signoff" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:996 +#: ../libpurple/protocols/silc10/ops.c:1017 +msgid "Personal Information" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1019 +#: ../libpurple/protocols/silc10/ops.c:1040 +msgid "Birth Day" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1027 +#: ../libpurple/protocols/silc10/ops.c:1048 +msgid "Job Role" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1031 +#: ../libpurple/protocols/silc/silc.c:1253 +#: ../libpurple/protocols/silc10/ops.c:1052 +#: ../libpurple/protocols/silc10/silc.c:949 +msgid "Organization" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1035 +#: ../libpurple/protocols/silc10/ops.c:1056 +msgid "Unit" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1059 +#: ../libpurple/protocols/silc10/ops.c:1080 +msgid "Note" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1105 +#: ../libpurple/protocols/silc10/ops.c:1128 +msgid "Join Chat" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1139 +#: ../libpurple/protocols/silc10/chat.c:1039 +#, c-format +msgid "You are channel founder on <I>%s</I>" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1143 +#: ../libpurple/protocols/silc10/chat.c:1043 +#, c-format +msgid "Channel founder on <I>%s</I> is <I>%s</I>" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1202 +#: ../libpurple/protocols/silc/ops.c:1340 +#: ../libpurple/protocols/silc10/ops.c:1183 +#: ../libpurple/protocols/silc10/ops.c:1332 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1070 +msgid "Real Name" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1230 +#: ../libpurple/protocols/silc10/ops.c:1213 ../pidgin/gtkblist-theme.c:467 +msgid "Status Text" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1292 +#: ../libpurple/protocols/silc/ops.c:1366 +#: ../libpurple/protocols/silc10/ops.c:1285 +#: ../libpurple/protocols/silc10/ops.c:1357 +msgid "Public Key Fingerprint" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1293 +#: ../libpurple/protocols/silc/ops.c:1367 +#: ../libpurple/protocols/silc10/ops.c:1286 +#: ../libpurple/protocols/silc10/ops.c:1358 +msgid "Public Key Babbleprint" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1306 +#: ../libpurple/protocols/silc10/ops.c:1298 +msgid "_More..." +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1385 +#: ../libpurple/protocols/silc/silc.c:1317 +#: ../libpurple/protocols/silc10/ops.c:1371 +#: ../libpurple/protocols/silc10/silc.c:1013 +msgid "Detach From Server" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1385 +#: ../libpurple/protocols/silc10/ops.c:1371 +msgid "Cannot detach" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1405 +#: ../libpurple/protocols/silc10/ops.c:1382 +msgid "Cannot set topic" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1434 +#: ../libpurple/protocols/silc10/ops.c:1414 +msgid "Failed to change nickname" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1483 +#: ../libpurple/protocols/silc10/ops.c:1462 +msgid "Roomlist" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1483 +#: ../libpurple/protocols/silc10/ops.c:1462 +msgid "Cannot get room list" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1484 +msgid "Network is empty" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1528 +#: ../libpurple/protocols/silc10/ops.c:1507 +msgid "No public key was received" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1540 +#: ../libpurple/protocols/silc/ops.c:1553 +#: ../libpurple/protocols/silc10/ops.c:1519 +#: ../libpurple/protocols/silc10/ops.c:1532 +msgid "Server Information" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1541 +#: ../libpurple/protocols/silc10/ops.c:1520 +msgid "Cannot get server information" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1564 +#: ../libpurple/protocols/silc10/ops.c:1549 +#: ../libpurple/protocols/silc10/ops.c:1558 +msgid "Server Statistics" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1565 +#: ../libpurple/protocols/silc10/ops.c:1550 +msgid "Cannot get server statistics" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1572 +#: ../libpurple/protocols/silc10/ops.c:1581 +#, 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 "" + +#: ../libpurple/protocols/silc/ops.c:1604 +#: ../libpurple/protocols/silc10/ops.c:1604 +msgid "Network Statistics" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1612 +#: ../libpurple/protocols/silc/ops.c:1617 +#: ../libpurple/protocols/silc10/ops.c:1612 +#: ../libpurple/protocols/silc10/ops.c:1617 +msgid "Ping" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1612 +#: ../libpurple/protocols/silc10/ops.c:1612 +msgid "Ping failed" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1617 +#: ../libpurple/protocols/silc10/ops.c:1617 +msgid "Ping reply received from server" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1625 +#: ../libpurple/protocols/silc10/ops.c:1625 +msgid "Could not kill user" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1664 +msgid "WATCH" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1664 +msgid "Cannot watch user" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1740 +#: ../libpurple/protocols/silc/ops.c:1791 +#: ../libpurple/protocols/silc/silc.c:396 +#: ../libpurple/protocols/silc10/ops.c:1817 +#: ../libpurple/protocols/silc10/ops.c:1864 +#: ../libpurple/protocols/silc10/silc.c:194 +msgid "Resuming session" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1742 +#: ../libpurple/protocols/silc10/ops.c:1819 +msgid "Authenticating connection" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1793 +#: ../libpurple/protocols/silc10/ops.c:1866 +msgid "Verifying server public key" +msgstr "" + +#: ../libpurple/protocols/silc/ops.c:1830 +#: ../libpurple/protocols/silc10/ops.c:1908 +msgid "Passphrase required" +msgstr "" + +#: ../libpurple/protocols/silc/pk.c:99 ../libpurple/protocols/silc10/pk.c:104 +#, 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 "" + +#: ../libpurple/protocols/silc/pk.c:104 ../libpurple/protocols/silc10/pk.c:109 +#, c-format +msgid "Received %s's public key. Would you like to accept this public key?" +msgstr "" + +#: ../libpurple/protocols/silc/pk.c:108 ../libpurple/protocols/silc10/pk.c:113 +#, c-format +msgid "" +"Fingerprint and babbleprint for the %s key are:\n" +"\n" +"%s\n" +"%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/pk.c:111 ../libpurple/protocols/silc/pk.c:140 +#: ../libpurple/protocols/silc10/pk.c:116 +#: ../libpurple/protocols/silc10/pk.c:142 +msgid "Verify Public Key" +msgstr "" + +#: ../libpurple/protocols/silc/pk.c:116 ../libpurple/protocols/silc10/pk.c:121 +msgid "_View..." +msgstr "" + +#: ../libpurple/protocols/silc/pk.c:141 ../libpurple/protocols/silc10/pk.c:143 +msgid "Unsupported public key type" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:321 +#: ../libpurple/protocols/silc10/ops.c:1755 +msgid "Disconnected by server" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:329 +msgid "Error connecting to SILC Server" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:335 +#: ../libpurple/protocols/silc10/ops.c:1707 +msgid "Key Exchange failed" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:345 +#: ../libpurple/protocols/silc10/ops.c:1718 +msgid "" +"Resuming detached session failed. Press Reconnect to create new connection." +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:399 +#: ../libpurple/protocols/silc10/silc.c:197 +msgid "Performing key exchange" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:494 +#: ../libpurple/protocols/silc/silc.c:510 +#: ../libpurple/protocols/silc/silc.c:539 +msgid "Unable to load SILC key pair" +msgstr "" + +#. Progress +#: ../libpurple/protocols/silc/silc.c:524 +#: ../libpurple/protocols/silc10/silc.c:330 +msgid "Connecting to SILC Server" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:570 +#: ../libpurple/protocols/silc10/silc.c:272 +msgid "Out of memory" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:621 +#: ../libpurple/protocols/silc10/silc.c:318 +msgid "Unable to initialize SILC protocol" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:634 +#: ../libpurple/protocols/silc10/silc.c:325 +msgid "Error loading SILC key pair" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:693 +#: ../libpurple/protocols/silc/silc.c:1873 +#: ../libpurple/protocols/silc10/silc.c:405 +#: ../libpurple/protocols/silc10/silc.c:1582 +#, c-format +msgid "Download %s: %s" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:979 +#: ../libpurple/protocols/silc10/silc.c:675 +msgid "Your Current Mood" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:981 +#: ../libpurple/protocols/silc10/silc.c:677 ../pidgin/gtkprefs.c:2383 +#, c-format +msgid "Normal" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1006 +#: ../libpurple/protocols/silc10/silc.c:702 +msgid "" +"\n" +"Your Preferred Contact Methods" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1014 +#: ../libpurple/protocols/silc/util.c:568 +#: ../libpurple/protocols/silc10/silc.c:710 +#: ../libpurple/protocols/silc10/util.c:561 +msgid "SMS" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1016 +#: ../libpurple/protocols/silc/util.c:570 +#: ../libpurple/protocols/silc10/silc.c:712 +#: ../libpurple/protocols/silc10/util.c:563 +msgid "MMS" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1018 +#: ../libpurple/protocols/silc10/silc.c:714 +msgid "Video conferencing" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1023 +#: ../libpurple/protocols/silc10/silc.c:719 +msgid "Your Current Status" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1030 +#: ../libpurple/protocols/silc10/silc.c:726 +msgid "Online Services" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1033 +#: ../libpurple/protocols/silc10/silc.c:729 +msgid "Let others see what services you are using" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1039 +#: ../libpurple/protocols/silc10/silc.c:735 +msgid "Let others see what computer you are using" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1046 +#: ../libpurple/protocols/silc10/silc.c:742 +msgid "Your VCard File" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1052 +msgid "Timezone (UTC)" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1056 +#: ../libpurple/protocols/silc/silc.c:1057 +#: ../libpurple/protocols/silc10/silc.c:754 +#: ../libpurple/protocols/silc10/silc.c:755 +msgid "User Online Status Attributes" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1058 +#: ../libpurple/protocols/silc10/silc.c:756 +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 "" + +#: ../libpurple/protocols/silc/silc.c:1099 +#: ../libpurple/protocols/silc/silc.c:1105 +#: ../libpurple/protocols/silc/silc.c:1731 +#: ../libpurple/protocols/silc10/silc.c:797 +#: ../libpurple/protocols/silc10/silc.c:803 +#: ../libpurple/protocols/silc10/silc.c:1440 +msgid "Message of the Day" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1099 +#: ../libpurple/protocols/silc10/silc.c:797 +msgid "No Message of the Day available" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1100 +#: ../libpurple/protocols/silc/silc.c:1726 +#: ../libpurple/protocols/silc10/silc.c:798 +#: ../libpurple/protocols/silc10/silc.c:1435 +msgid "There is no Message of the Day associated with this connection" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1151 +#: ../libpurple/protocols/silc/silc.c:1197 +#: ../libpurple/protocols/silc/silc.c:1268 +#: ../libpurple/protocols/silc/silc.c:1269 +#: ../libpurple/protocols/silc10/silc.c:849 +#: ../libpurple/protocols/silc10/silc.c:893 +#: ../libpurple/protocols/silc10/silc.c:964 +#: ../libpurple/protocols/silc10/silc.c:965 +msgid "Create New SILC Key Pair" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1151 +#: ../libpurple/protocols/silc10/silc.c:849 +msgid "Passphrases do not match" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1197 +#: ../libpurple/protocols/silc10/silc.c:893 +msgid "Key Pair Generation failed" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1236 +#: ../libpurple/protocols/silc10/silc.c:932 +msgid "Key length" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1238 +#: ../libpurple/protocols/silc10/silc.c:934 +msgid "Public key file" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1240 +#: ../libpurple/protocols/silc10/silc.c:936 +msgid "Private key file" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1263 +#: ../libpurple/protocols/silc10/silc.c:959 +msgid "Passphrase (retype)" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1270 +#: ../libpurple/protocols/silc10/silc.c:966 +msgid "Generate Key Pair" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1313 +#: ../libpurple/protocols/silc10/silc.c:1009 +msgid "Online Status" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1321 +#: ../libpurple/protocols/silc10/silc.c:1017 +msgid "View Message of the Day" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1325 +#: ../libpurple/protocols/silc10/silc.c:1021 +msgid "Create SILC Key Pair..." +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1419 +#: ../libpurple/protocols/silc10/silc.c:1120 +#, c-format +msgid "User <I>%s</I> is not present in the network" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1602 +#: ../libpurple/protocols/silc10/silc.c:1311 +msgid "Topic too long" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1683 +#: ../libpurple/protocols/silc10/silc.c:1392 +msgid "You must specify a nick" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1785 +#: ../libpurple/protocols/silc10/silc.c:1494 +#, c-format +msgid "channel %s not found" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1790 +#: ../libpurple/protocols/silc10/silc.c:1499 +#, c-format +msgid "channel modes for %s: %s" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1792 +#: ../libpurple/protocols/silc10/silc.c:1501 +#, c-format +msgid "no channel modes are set on %s" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1805 +#: ../libpurple/protocols/silc10/silc.c:1514 +#, c-format +msgid "Failed to set cmodes for %s" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1835 +#: ../libpurple/protocols/silc10/silc.c:1544 +#, c-format +msgid "Unknown command: %s, (may be a client bug)" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1916 +#: ../libpurple/protocols/silc10/silc.c:1625 +msgid "part [channel]: Leave the chat" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1920 +#: ../libpurple/protocols/silc10/silc.c:1629 +msgid "leave [channel]: Leave the chat" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1924 +#: ../libpurple/protocols/silc10/silc.c:1633 +msgid "topic [<new topic>]: View or change the topic" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1929 +#: ../libpurple/protocols/silc10/silc.c:1638 +msgid "join <channel> [<password>]: Join a chat on this network" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1933 +#: ../libpurple/protocols/silc10/silc.c:1642 +msgid "list: List channels on this network" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1937 +#: ../libpurple/protocols/silc10/silc.c:1646 +msgid "whois <nick>: View nick's information" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1941 +#: ../libpurple/protocols/silc10/silc.c:1650 +#: ../libpurple/protocols/zephyr/zephyr.c:2701 +msgid "msg <nick> <message>: Send a private message to a user" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1945 +#: ../libpurple/protocols/silc10/silc.c:1654 +msgid "" +"query <nick> [<message>]: Send a private message to a user" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1949 +#: ../libpurple/protocols/silc10/silc.c:1658 +msgid "motd: View the server's Message Of The Day" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1953 +#: ../libpurple/protocols/silc10/silc.c:1662 +msgid "detach: Detach this session" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1957 +#: ../libpurple/protocols/silc10/silc.c:1666 +msgid "quit [message]: Disconnect from the server, with an optional message" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1961 +#: ../libpurple/protocols/silc10/silc.c:1670 +msgid "call <command>: Call any silc client command" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1967 +#: ../libpurple/protocols/silc10/silc.c:1676 +msgid "kill <nick> [-pubkey|<reason>]: Kill nick" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1971 +#: ../libpurple/protocols/silc10/silc.c:1680 +msgid "nick <newnick>: Change your nickname" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1975 +#: ../libpurple/protocols/silc10/silc.c:1684 +msgid "whowas <nick>: View nick's information" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1979 +#: ../libpurple/protocols/silc10/silc.c:1688 +msgid "" +"cmode <channel> [+|-<modes>] [arguments]: Change or display " +"channel modes" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1983 +#: ../libpurple/protocols/silc10/silc.c:1692 +msgid "" +"cumode <channel> +|-<modes> <nick>: Change nick's modes " +"on channel" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1987 +#: ../libpurple/protocols/silc10/silc.c:1696 +msgid "umode <usermodes>: Set your modes in the network" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1991 +#: ../libpurple/protocols/silc10/silc.c:1700 +msgid "oper <nick> [-pubkey]: Get server operator privileges" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1995 +#: ../libpurple/protocols/silc10/silc.c:1704 +msgid "" +"invite <channel> [-|+]<nick>: invite nick or add/remove from " +"channel invite list" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:1999 +#: ../libpurple/protocols/silc10/silc.c:1708 +msgid "kick <channel> <nick> [comment]: Kick client from channel" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2003 +#: ../libpurple/protocols/silc10/silc.c:1712 +msgid "info [server]: View server administrative details" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2007 +#: ../libpurple/protocols/silc10/silc.c:1716 +msgid "ban [<channel> +|-<nick>]: Ban client from channel" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2011 +#: ../libpurple/protocols/silc10/silc.c:1720 +msgid "getkey <nick|server>: Retrieve client's or server's public key" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2015 +#: ../libpurple/protocols/silc10/silc.c:1724 +msgid "stats: View server and network statistics" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2019 +#: ../libpurple/protocols/silc10/silc.c:1728 +msgid "ping: Send PING to the connected server" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2024 +#: ../libpurple/protocols/silc10/silc.c:1733 +msgid "users <channel>: List users in channel" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2028 +#: ../libpurple/protocols/silc10/silc.c:1737 +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 +#: ../libpurple/protocols/silc/silc.c:2145 +#: ../libpurple/protocols/silc10/silc.c:1868 +msgid "SILC Protocol Plugin" +msgstr "" + +#. * description +#: ../libpurple/protocols/silc/silc.c:2147 +#: ../libpurple/protocols/silc10/silc.c:1870 +msgid "Secure Internet Live Conferencing (SILC) Protocol" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2188 +#: ../libpurple/protocols/silc10/silc.c:1902 ../pidgin/gtkprefs.c:2765 +msgid "Network" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2199 +#: ../libpurple/protocols/silc10/silc.c:1913 +msgid "Public Key file" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2203 +#: ../libpurple/protocols/silc10/silc.c:1917 +msgid "Private Key file" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2213 +#: ../libpurple/protocols/silc10/silc.c:1927 +msgid "Cipher" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2223 +#: ../libpurple/protocols/silc10/silc.c:1937 +msgid "HMAC" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2226 +msgid "Use Perfect Forward Secrecy" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2230 +#: ../libpurple/protocols/silc10/silc.c:1940 +msgid "Public key authentication" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2233 +#: ../libpurple/protocols/silc10/silc.c:1943 +msgid "Block IMs without Key Exchange" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2236 +#: ../libpurple/protocols/silc10/silc.c:1946 +msgid "Block messages to whiteboard" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2239 +#: ../libpurple/protocols/silc10/silc.c:1949 +msgid "Automatically open whiteboard" +msgstr "" + +#: ../libpurple/protocols/silc/silc.c:2242 +#: ../libpurple/protocols/silc10/silc.c:1952 +msgid "Digitally sign and verify all messages" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:208 +#: ../libpurple/protocols/silc/util.c:251 +#: ../libpurple/protocols/silc10/util.c:207 +#: ../libpurple/protocols/silc10/util.c:247 +msgid "Creating SILC key pair..." +msgstr "" + +#: ../libpurple/protocols/silc/util.c:217 +#: ../libpurple/protocols/silc/util.c:260 +msgid "Unable to create SILC key pair" +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) +#: ../libpurple/protocols/silc/util.c:364 +#: ../libpurple/protocols/silc10/util.c:355 +#, c-format +msgid "Real Name: \t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:366 +#: ../libpurple/protocols/silc10/util.c:357 +#, c-format +msgid "User Name: \t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:368 +#: ../libpurple/protocols/silc10/util.c:359 +#, c-format +msgid "Email: \t\t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:370 +#: ../libpurple/protocols/silc10/util.c:361 +#, c-format +msgid "Host Name: \t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:372 +#: ../libpurple/protocols/silc10/util.c:363 +#, c-format +msgid "Organization: \t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:374 +#: ../libpurple/protocols/silc10/util.c:365 +#, c-format +msgid "Country: \t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:375 +#: ../libpurple/protocols/silc10/util.c:366 +#, c-format +msgid "Algorithm: \t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:376 +#: ../libpurple/protocols/silc10/util.c:367 +#, c-format +msgid "Key Length: \t%d bits\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:378 +#, c-format +msgid "Version: \t%s\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:380 +#: ../libpurple/protocols/silc10/util.c:369 +#, c-format +msgid "" +"Public Key Fingerprint:\n" +"%s\n" +"\n" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:381 +#: ../libpurple/protocols/silc10/util.c:370 +#, c-format +msgid "" +"Public Key Babbleprint:\n" +"%s" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:383 +#: ../libpurple/protocols/silc/util.c:384 +#: ../libpurple/protocols/silc10/util.c:374 +#: ../libpurple/protocols/silc10/util.c:375 +msgid "Public Key Information" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:566 +#: ../libpurple/protocols/silc10/util.c:559 +msgid "Paging" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:572 +#: ../libpurple/protocols/silc10/util.c:565 +msgid "Video Conferencing" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:590 +#: ../libpurple/protocols/silc10/util.c:584 +msgid "Computer" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:594 +#: ../libpurple/protocols/silc10/util.c:588 +msgid "PDA" +msgstr "" + +#: ../libpurple/protocols/silc/util.c:596 +#: ../libpurple/protocols/silc10/util.c:590 +msgid "Terminal" +msgstr "" + +#: ../libpurple/protocols/silc/wb.c:289 ../libpurple/protocols/silc10/wb.c:287 +#, c-format +msgid "%s sent message to whiteboard. Would you like to open the whiteboard?" +msgstr "" + +#: ../libpurple/protocols/silc/wb.c:293 ../libpurple/protocols/silc10/wb.c:291 +#, c-format +msgid "" +"%s sent message to whiteboard on %s channel. Would you like to open the " +"whiteboard?" +msgstr "" + +#: ../libpurple/protocols/silc/wb.c:307 ../libpurple/protocols/silc10/wb.c:305 +msgid "Whiteboard" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1559 +msgid "No server statistics available" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1701 +msgid "Error during connecting to SILC Server" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1937 +#, c-format +msgid "Failure: Version mismatch, upgrade your client" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1940 +#, c-format +msgid "Failure: Remote does not trust/support your public key" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1943 +#, c-format +msgid "Failure: Remote does not support proposed KE group" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1946 +#, c-format +msgid "Failure: Remote does not support proposed cipher" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1949 +#, c-format +msgid "Failure: Remote does not support proposed PKCS" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1952 +#, c-format +msgid "Failure: Remote does not support proposed hash function" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1955 +#, c-format +msgid "Failure: Remote does not support proposed HMAC" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1957 +#, c-format +msgid "Failure: Incorrect signature" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1959 +#, c-format +msgid "Failure: Invalid cookie" +msgstr "" + +#: ../libpurple/protocols/silc10/ops.c:1970 +#, c-format +msgid "Failure: Authentication failed" +msgstr "" + +#: ../libpurple/protocols/silc10/silc.c:186 +msgid "Unable to initialize SILC Client connection" +msgstr "" + +#: ../libpurple/protocols/silc10/silc.c:295 +msgid "John Noname" +msgstr "" + +#: ../libpurple/protocols/silc10/silc.c:339 +#, c-format +msgid "Unable to load SILC key pair: %s" +msgstr "" + +#: ../libpurple/protocols/silc10/silc.c:362 +msgid "Unable to create connection" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:1142 +msgid "Unknown server response" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:1780 +#: ../libpurple/protocols/simple/simple.c:1830 +#: ../libpurple/protocols/simple/simple.c:1845 +#: ../libpurple/protocols/simple/simple.c:1900 +msgid "Unable to create listen socket" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:1809 +#: ../libpurple/protocols/simple/simple.c:1911 ../libpurple/proxy.c:2240 +msgid "Unable to resolve hostname" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:1929 +msgid "SIP usernames may not contain whitespaces or @ symbols" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:1948 +msgid "SIP connect server not specified" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#: ../libpurple/protocols/simple/simple.c:2138 +msgid "SIP/SIMPLE Protocol Plugin" +msgstr "" + +#. * summary +#: ../libpurple/protocols/simple/simple.c:2139 +msgid "The SIP/SIMPLE Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:2167 +msgid "Publish status (note: everyone may watch you)" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:2173 +msgid "Use UDP" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:2175 +msgid "Use proxy" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:2177 ../pidgin/gtkprefs.c:2766 +msgid "Proxy" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:2179 +msgid "Auth User" +msgstr "" + +#: ../libpurple/protocols/simple/simple.c:2181 +msgid "Auth Domain" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:44 +#: ../libpurple/protocols/yahoo/libyahoojp.c:41 +msgid "join <room>: Join a chat room on the Yahoo network" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:49 +#: ../libpurple/protocols/yahoo/libyahoojp.c:46 +msgid "list: List rooms on the Yahoo network" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:57 +#: ../libpurple/protocols/yahoo/libyahoojp.c:54 +msgid "doodle: Request user to start a Doodle session" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:166 +msgid "Yahoo ID..." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/yahoo/libyahoo.c:289 +#: ../libpurple/protocols/yahoo/libyahoo.c:291 +msgid "Yahoo! Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:314 +#: ../libpurple/protocols/yahoo/libyahoojp.c:210 +msgid "Pager port" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:317 +#: ../libpurple/protocols/yahoo/libyahoojp.c:213 +msgid "File transfer server" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:320 +#: ../libpurple/protocols/yahoo/libyahoojp.c:216 +msgid "File transfer port" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:323 +#: ../libpurple/protocols/yahoo/libyahoojp.c:219 +msgid "Chat room locale" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:329 +#: ../libpurple/protocols/yahoo/libyahoojp.c:225 +msgid "Ignore conference and chatroom invitations" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:332 +#: ../libpurple/protocols/yahoo/libyahoojp.c:228 +msgid "Use account proxy for HTTP and HTTPS connections" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoo.c:336 +#: ../libpurple/protocols/yahoo/libyahoojp.c:232 +msgid "Chat room list URL" +msgstr "" + +#: ../libpurple/protocols/yahoo/libyahoojp.c:62 +msgid "Yahoo JAPAN ID..." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/yahoo/libyahoojp.c:185 +#: ../libpurple/protocols/yahoo/libyahoojp.c:187 +msgid "Yahoo! JAPAN Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:928 +#, c-format +msgid "%s has sent you a webcam invite, which is not yet supported." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:1004 +msgid "Your SMS was not delivered" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:1150 +msgid "Your Yahoo! message did not get sent." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:1266 +#, c-format +msgid "Yahoo! system message for %s:" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:1366 +msgid "Authorization denied message:" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:1384 +#, c-format +msgid "" +"%s has (retroactively) denied your request to add them to your list for the " +"following reason: %s." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:1387 +#, c-format +msgid "%s has (retroactively) denied your request to add them to your list." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:1389 +msgid "Add buddy rejected" +msgstr "" + +#. Some error in the received stream +#: ../libpurple/protocols/yahoo/libymsg.c:2017 +#: ../libpurple/protocols/yahoo/libymsg.c:2100 +msgid "Received invalid data" +msgstr "" + +#. security lock from too many failed login attempts +#: ../libpurple/protocols/yahoo/libymsg.c:2113 +msgid "" +"Account locked: Too many failed login attempts. Logging into the Yahoo! " +"website may fix this." +msgstr "" + +#. indicates a lock of some description +#: ../libpurple/protocols/yahoo/libymsg.c:2124 +msgid "" +"Account locked: Unknown reason. Logging into the Yahoo! website may fix " +"this." +msgstr "" + +#. indicates a lock due to logging in too frequently +#: ../libpurple/protocols/yahoo/libymsg.c:2130 +msgid "" +"Account locked: You have been logging in too frequently. Wait a few minutes" +" before trying to connect again. Logging into the Yahoo! website may help." +msgstr "" + +#. username or password missing +#: ../libpurple/protocols/yahoo/libymsg.c:2137 +msgid "Username or password missing" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2256 +#, 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 "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2260 +msgid "Failed Yahoo! Authentication" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2351 +#, 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 "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2354 +msgid "Ignore buddy?" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2432 +msgid "Invalid username or password" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2436 +msgid "" +"Your account has been locked due to too many failed login attempts. Please " +"try logging into the Yahoo! website." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2443 +msgid "Unknown error 52. Reconnecting should fix this." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2447 +msgid "" +"Error 1013: The username you have entered is invalid. The most common cause" +" of this error is entering your email address instead of your Yahoo! ID." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2453 +#, c-format +msgid "Unknown error number %d. Logging into the Yahoo! website may fix this." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2547 +#, c-format +msgid "Unable to add buddy %s to group %s to the server list on account %s." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:2550 +msgid "Unable to add buddy to server list" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:3207 +#, c-format +msgid "[ Audible %s/%s/%s.swf ] %s" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:3553 +msgid "Received unexpected HTTP response from server" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:3609 +#, c-format +msgid "Lost connection with %s: %s" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:3634 +#, c-format +msgid "Unable to establish a connection with %s: %s" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:3851 +msgid "Unable to connect: The server returned an empty response." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:3885 +msgid "" +"Unable to connect: The server's response did not contain the necessary " +"information" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4086 +#: ../libpurple/protocols/yahoo/libymsg.c:5117 +msgid "Not at Home" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4088 +#: ../libpurple/protocols/yahoo/libymsg.c:5120 +msgid "Not at Desk" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4090 +#: ../libpurple/protocols/yahoo/libymsg.c:5123 +msgid "Not in Office" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4094 +#: ../libpurple/protocols/yahoo/libymsg.c:5129 +msgid "On Vacation" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4098 +#: ../libpurple/protocols/yahoo/libymsg.c:5135 +msgid "Stepped Out" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4196 +#: ../libpurple/protocols/yahoo/libymsg.c:4227 +msgid "Not on server list" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4247 +#: ../libpurple/protocols/yahoo/libymsg.c:4341 +msgid "Appear Permanently Offline" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4263 +msgid "Presence" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4335 +msgid "Don't Appear Permanently Offline" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4394 +msgid "Join in Chat" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4400 +msgid "Initiate Conference" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4428 +msgid "Presence Settings" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4433 +msgid "Start Doodling" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4572 +msgid "Select the ID you want to activate" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4583 +msgid "Join whom in chat?" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4599 +msgid "Activate ID..." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4603 +msgid "Join User in Chat..." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4608 +msgid "Open Inbox" +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4635 +#: ../libpurple/protocols/yahoo/libymsg.c:4732 +msgid "Can't send SMS. Unable to obtain mobile carrier." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4665 +#: ../libpurple/protocols/yahoo/libymsg.c:4796 +msgid "Can't send SMS. Unknown mobile carrier." +msgstr "" + +#: ../libpurple/protocols/yahoo/libymsg.c:4787 +msgid "Getting mobile carrier to send the SMS." +msgstr "" + +#. Write a local message to this conversation showing that a request for a +#. * Doodle session has been made +#: ../libpurple/protocols/yahoo/yahoo_doodle.c:97 +msgid "Sent Doodle request." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:167 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:247 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1313 +msgid "Unable to connect." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:328 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:337 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:346 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1217 +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1978 +msgid "Unable to establish file descriptor." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1863 +#, c-format +msgid "%s is trying to send you a group of %d files.\n" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_packet.c:306 +msgid "Write Error" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:797 +msgid "Yahoo! Japan Profile" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:798 +msgid "Yahoo! Profile" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:838 +msgid "" +"Sorry, profiles marked as containing adult content are not supported at this" +" time." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:840 +msgid "" +"If you wish to view this profile, you will need to visit this link in your " +"web browser:" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1032 +msgid "Yahoo! ID" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1108 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1112 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1116 +msgid "Hobbies" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1126 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1130 +msgid "Latest News" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1151 +msgid "Home Page" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1166 +msgid "Cool Link 1" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1171 +msgid "Cool Link 2" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1175 +msgid "Cool Link 3" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1189 +msgid "Last Update" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1202 +msgid "" +"This profile is in a language or format that is not supported at this time." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1219 +msgid "" +"Could not retrieve the user's profile. This most likely is a temporary " +"server-side problem. Please try again later." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1222 +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 "" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1228 +msgid "The user's profile is empty." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:269 +#, c-format +msgid "%s has declined to join." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:507 +msgid "Failed to join chat" +msgstr "" + +#. -6 +#: ../libpurple/protocols/yahoo/yahoochat.c:510 +msgid "Unknown room" +msgstr "" + +#. -15 +#: ../libpurple/protocols/yahoo/yahoochat.c:513 +msgid "Maybe the room is full" +msgstr "" + +#. -35 +#: ../libpurple/protocols/yahoo/yahoochat.c:516 +msgid "Not available" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:520 +msgid "" +"Unknown error. You may need to logout and wait five minutes before being " +"able to rejoin a chatroom" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:628 +#, c-format +msgid "You are now chatting in %s." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:834 +msgid "Failed to join buddy in chat" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:835 +msgid "Maybe they're not in a chat?" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:1530 +#: ../libpurple/protocols/yahoo/yahoochat.c:1556 +msgid "Fetching the room list failed." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:1616 +msgid "Voices" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:1619 +msgid "Webcams" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:1630 +#: ../libpurple/protocols/yahoo/yahoochat.c:1701 +msgid "Connection problem" +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:1630 +#: ../libpurple/protocols/yahoo/yahoochat.c:1701 +msgid "Unable to fetch room list." +msgstr "" + +#: ../libpurple/protocols/yahoo/yahoochat.c:1693 +msgid "User Rooms" +msgstr "" + +#: ../libpurple/protocols/yahoo/ycht.c:457 +msgid "Connection problem with the YCHT server" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:357 +msgid "" +"(There was an error converting this message.\t Check the 'Encoding' option " +"in the Account Editor)" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:755 +#, c-format +msgid "Unable to send to chat %s,%s,%s" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:800 +#: ../libpurple/protocols/zephyr/zephyr.c:1184 +msgid "Hidden or not logged-in" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:806 +#: ../libpurple/protocols/zephyr/zephyr.c:1186 +#, c-format +msgid "<br>At %s since %s" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:1509 +#: ../libpurple/protocols/zephyr/zephyr.c:1510 +msgid "Anyone" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2365 +msgid "_Class:" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2371 +msgid "_Instance:" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2377 +msgid "_Recipient:" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2388 +#, c-format +msgid "Attempt to subscribe to %s,%s,%s failed" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2706 +msgid "zlocate <nick>: Locate user" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2711 +msgid "zl <nick>: Locate user" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2716 +msgid "instance <instance>: Set the instance to be used on this class" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2721 +msgid "inst <instance>: Set the instance to be used on this class" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2726 +msgid "topic <instance>: Set the instance to be used on this class" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2732 +msgid "sub <class> <instance> <recipient>: Join a new chat" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2737 +msgid "" +"zi <instance>: Send a message to <message,<i>instance</i>,*>" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2743 +msgid "" +"zci <class> <instance>: Send a message to " +"<<i>class</i>,<i>instance</i>,*>" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2749 +msgid "" +"zcir <class> <instance> <recipient>: Send a message to " +"<<i>class</i>,<i>instance</i>,<i>recipient</i>>" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2755 +msgid "" +"zir <instance> <recipient>: Send a message to " +"<MESSAGE,<i>instance</i>,<i>recipient</i>>" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2760 +msgid "zc <class>: Send a message to <<i>class</i>,PERSONAL,*>" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2836 +msgid "Resubscribe" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2839 +msgid "Retrieve subscriptions from server" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +#: ../libpurple/protocols/zephyr/zephyr.c:2939 +#: ../libpurple/protocols/zephyr/zephyr.c:2941 +msgid "Zephyr Protocol Plugin" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2966 +msgid "Use tzc" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2969 +msgid "tzc command" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2972 +msgid "Export to .anyone" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2975 +msgid "Export to .zephyr.subs" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2978 +msgid "Import from .anyone" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2981 +msgid "Import from .zephyr.subs" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2984 +msgid "Realm" +msgstr "" + +#: ../libpurple/protocols/zephyr/zephyr.c:2987 +msgid "Exposure" +msgstr "" + +#: ../libpurple/proxy.c:754 ../libpurple/proxy.c:816 ../libpurple/proxy.c:1269 +#: ../libpurple/proxy.c:1463 ../libpurple/proxy.c:2123 +#, c-format +msgid "Unable to create socket: %s" +msgstr "" + +#: ../libpurple/proxy.c:1002 ../libpurple/proxy.c:1023 +#, c-format +msgid "Unable to parse response from HTTP proxy: %s" +msgstr "" + +#: ../libpurple/proxy.c:1056 ../libpurple/proxy.c:1118 +#: ../libpurple/proxy.c:1147 +#, c-format +msgid "HTTP proxy connection error %d" +msgstr "" + +#: ../libpurple/proxy.c:1143 +#, c-format +msgid "Access denied: HTTP proxy server forbids port %d tunneling" +msgstr "" + +#: ../libpurple/proxy.c:1343 +#, c-format +msgid "Error resolving %s" +msgstr "" + +#: ../libpurple/prpl.c:454 +#, c-format +msgid "Requesting %s's attention..." +msgstr "" + +#: ../libpurple/prpl.c:500 +#, c-format +msgid "%s has requested your attention!" +msgstr "" + +#. * +#. * A wrapper for purple_request_action() that uses @c Yes and @c No buttons. +#: ../libpurple/request.h:1488 ../pidgin/gtkblist.c:563 +msgid "_Yes" +msgstr "" + +#: ../libpurple/request.h:1488 ../pidgin/gtkblist.c:563 +msgid "_No" +msgstr "" + +#. * +#. * A wrapper for purple_request_action() that uses Accept and Cancel +#. buttons. +#. * +#. * A wrapper for purple_request_action_with_icon() that uses Accept and +#. Cancel +#. * buttons. +#: ../libpurple/request.h:1508 ../libpurple/request.h:1521 +msgid "_Accept" +msgstr "" + +#. * +#. * The default message to use when the user becomes auto-away. +#: ../libpurple/savedstatuses.c:48 +msgid "I'm not here right now" +msgstr "" + +#: ../libpurple/savedstatuses.c:537 +msgid "saved statuses" +msgstr "" + +#: ../libpurple/server.c:265 +#, c-format +msgid "%s is now known as %s.\n" +msgstr "" + +#: ../libpurple/server.c:821 +#, c-format +msgid "" +"%s has invited %s to the chat room %s:\n" +"%s" +msgstr "" + +#: ../libpurple/server.c:826 +#, c-format +msgid "%s has invited %s to the chat room %s\n" +msgstr "" + +#: ../libpurple/server.c:830 +msgid "Accept chat invitation?" +msgstr "" + +#. Shortcut +#: ../libpurple/smiley.c:406 +msgid "Shortcut" +msgstr "" + +#: ../libpurple/smiley.c:407 +msgid "The text-shortcut for the smiley" +msgstr "" + +#. Stored Image +#: ../libpurple/smiley.c:413 +msgid "Stored Image" +msgstr "" + +#: ../libpurple/smiley.c:414 +msgid "Stored Image. (that'll have to do for now)" +msgstr "" + +#: ../libpurple/sslconn.c:176 +msgid "SSL Connection Failed" +msgstr "" + +#: ../libpurple/sslconn.c:178 +msgid "SSL Handshake Failed" +msgstr "" + +#: ../libpurple/sslconn.c:180 +msgid "SSL peer presented an invalid certificate" +msgstr "" + +#: ../libpurple/sslconn.c:183 +msgid "Unknown SSL error" +msgstr "" + +#: ../libpurple/status.c:161 +msgid "Unset" +msgstr "" + +#: ../libpurple/status.c:164 ../pidgin/gtkdocklet.c:556 +#: ../pidgin/gtkstatusbox.c:1098 +msgid "Do not disturb" +msgstr "" + +#: ../libpurple/status.c:167 +msgid "Extended away" +msgstr "" + +#: ../libpurple/status.c:170 +msgid "Feeling" +msgstr "" + +#: ../libpurple/status.c:619 +#, c-format +msgid "%s (%s) changed status from %s to %s" +msgstr "" + +#: ../libpurple/status.c:631 +#, c-format +msgid "%s (%s) is now %s" +msgstr "" + +#: ../libpurple/status.c:638 +#, c-format +msgid "%s (%s) is no longer %s" +msgstr "" + +#: ../libpurple/status.c:1265 +#, c-format +msgid "%s became idle" +msgstr "" + +#: ../libpurple/status.c:1285 +#, c-format +msgid "%s became unidle" +msgstr "" + +#: ../libpurple/status.c:1351 +#, c-format +msgid "+++ %s became idle" +msgstr "" + +#: ../libpurple/status.c:1353 +#, 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. +#: ../libpurple/util.c:643 +#, c-format +msgid "%x %X" +msgstr "" + +#: ../libpurple/util.c:3294 +msgid "Calculating..." +msgstr "" + +#: ../libpurple/util.c:3297 +msgid "Unknown." +msgstr "" + +#: ../libpurple/util.c:3323 +#, c-format +msgid "%d second" +msgid_plural "%d seconds" +msgstr[0] "" + +#: ../libpurple/util.c:3335 +#, c-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" + +#: ../libpurple/util.c:3343 +#, c-format +msgid "%s, %d hour" +msgid_plural "%s, %d hours" +msgstr[0] "" + +#: ../libpurple/util.c:3349 +#, c-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" + +#: ../libpurple/util.c:3357 +#, c-format +msgid "%s, %d minute" +msgid_plural "%s, %d minutes" +msgstr[0] "" + +#: ../libpurple/util.c:3363 +#, c-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" + +#: ../libpurple/util.c:3644 +#, c-format +msgid "Could not open %s: Redirected too many times" +msgstr "" + +#: ../libpurple/util.c:3694 ../libpurple/util.c:4228 +#, c-format +msgid "Unable to connect to %s" +msgstr "" + +#: ../libpurple/util.c:3834 +#, c-format +msgid "Error reading from %s: response too long (%d bytes limit)" +msgstr "" + +#: ../libpurple/util.c:3901 ../libpurple/util.c:3921 +#, c-format +msgid "" +"Unable to allocate enough memory to hold the contents from %s. The web " +"server may be trying something malicious." +msgstr "" + +#: ../libpurple/util.c:3955 +#, c-format +msgid "Error reading from %s: %s" +msgstr "" + +#: ../libpurple/util.c:4079 +#, c-format +msgid "Error writing to %s: %s" +msgstr "" + +#: ../libpurple/util.c:4110 ../libpurple/util.c:4140 ../libpurple/util.c:4210 +#, c-format +msgid "Unable to connect to %s: %s" +msgstr "" + +#: ../libpurple/util.c:5085 +#, c-format +msgid " - %s" +msgstr "" + +#: ../libpurple/util.c:5091 +#, c-format +msgid " (%s)" +msgstr "" + +#. 10053 +#: ../libpurple/win32/libc_interface.c:364 +msgid "Connection interrupted by other software on your computer." +msgstr "" + +#. 10054 +#: ../libpurple/win32/libc_interface.c:367 +msgid "Remote host closed connection." +msgstr "" + +#. 10060 +#: ../libpurple/win32/libc_interface.c:370 +msgid "Connection timed out." +msgstr "" + +#. 10061 +#: ../libpurple/win32/libc_interface.c:373 +msgid "Connection refused." +msgstr "" + +#. 10048 +#: ../libpurple/win32/libc_interface.c:376 +msgid "Address already in use." +msgstr "" + +#: ../libpurple/xmlnode.c:793 +#, c-format +msgid "Error Reading %s" +msgstr "" + +#: ../libpurple/xmlnode.c:794 +#, 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 "" + +#: ../pidgin.desktop.in.h:1 +msgid "" +"Chat over IM. Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more" +msgstr "" + +#: ../pidgin.desktop.in.h:2 +msgid "Internet Messenger" +msgstr "" + +#: ../pidgin.desktop.in.h:3 +msgid "Pidgin Internet Messenger" +msgstr "" + +#. Build the login options frame. +#: ../pidgin/gtkaccount.c:448 +msgid "Login Options" +msgstr "" + +#: ../pidgin/gtkaccount.c:473 +msgid "Pro_tocol:" +msgstr "" + +#: ../pidgin/gtkaccount.c:486 ../pidgin/gtkaccount.c:1129 +msgid "_Username:" +msgstr "" + +#: ../pidgin/gtkaccount.c:599 +msgid "Remember pass_word" +msgstr "" + +#. Build the user options frame. +#: ../pidgin/gtkaccount.c:654 +msgid "User Options" +msgstr "" + +#: ../pidgin/gtkaccount.c:667 +msgid "_Local alias:" +msgstr "" + +#: ../pidgin/gtkaccount.c:671 +msgid "New _mail notifications" +msgstr "" + +#. Buddy icon +#: ../pidgin/gtkaccount.c:676 +msgid "Use this buddy _icon for this account:" +msgstr "" + +#: ../pidgin/gtkaccount.c:808 +msgid "Ad_vanced" +msgstr "" + +#: ../pidgin/gtkaccount.c:993 +msgid "Use GNOME Proxy Settings" +msgstr "" + +#: ../pidgin/gtkaccount.c:994 +msgid "Use Global Proxy Settings" +msgstr "" + +#: ../pidgin/gtkaccount.c:1000 +msgid "No Proxy" +msgstr "" + +#: ../pidgin/gtkaccount.c:1006 ../pidgin/gtkprefs.c:2085 +msgid "SOCKS 4" +msgstr "" + +#: ../pidgin/gtkaccount.c:1012 ../pidgin/gtkprefs.c:2086 +msgid "SOCKS 5" +msgstr "" + +#: ../pidgin/gtkaccount.c:1018 ../pidgin/gtkprefs.c:2087 +msgid "Tor/Privacy (SOCKS5)" +msgstr "" + +#: ../pidgin/gtkaccount.c:1024 ../pidgin/gtkprefs.c:2088 +msgid "HTTP" +msgstr "" + +#: ../pidgin/gtkaccount.c:1030 ../pidgin/gtkprefs.c:2089 +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. +#: ../pidgin/gtkaccount.c:1075 +msgid "If you look real closely" +msgstr "" + +#. This is an easter egg. See the comment on the previous line in the source. +#: ../pidgin/gtkaccount.c:1078 +msgid "you can see the butterflies mating" +msgstr "" + +#: ../pidgin/gtkaccount.c:1108 +msgid "Proxy _type:" +msgstr "" + +#: ../pidgin/gtkaccount.c:1117 ../pidgin/gtkprefs.c:2105 +msgid "_Host:" +msgstr "" + +#: ../pidgin/gtkaccount.c:1121 +msgid "_Port:" +msgstr "" + +#: ../pidgin/gtkaccount.c:1138 ../pidgin/gtkprefs.c:2157 +msgid "Pa_ssword:" +msgstr "" + +#: ../pidgin/gtkaccount.c:1207 +msgid "Use _silence suppression" +msgstr "" + +#: ../pidgin/gtkaccount.c:1212 +msgid "_Voice and Video" +msgstr "" + +#: ../pidgin/gtkaccount.c:1301 +msgid "Unable to save new account" +msgstr "" + +#: ../pidgin/gtkaccount.c:1302 +msgid "An account already exists with the specified criteria." +msgstr "" + +#: ../pidgin/gtkaccount.c:1576 +msgid "Add Account" +msgstr "" + +#: ../pidgin/gtkaccount.c:1593 +msgid "_Basic" +msgstr "" + +#: ../pidgin/gtkaccount.c:1601 +msgid "Create _this new account on the server" +msgstr "" + +#: ../pidgin/gtkaccount.c:1618 +msgid "P_roxy" +msgstr "" + +#: ../pidgin/gtkaccount.c:2010 ../pidgin/gtkplugin.c:752 +#: ../pidgin/plugins/convcolors.c:343 +msgid "Enabled" +msgstr "" + +#: ../pidgin/gtkaccount.c:2038 +msgid "Protocol" +msgstr "" + +#: ../pidgin/gtkaccount.c:2225 +#, c-format +msgid "" +"<span size='larger' weight='bold'>Welcome to %s!</span>\n" +"\n" +"You have no IM accounts configured. To start connecting with %s press the <b>Add...</b> button below and configure your first account. If you want %s to connect to multiple IM accounts, press <b>Add...</b> again to configure them all.\n" +"\n" +"You can come back to this window to add, edit, or remove accounts from <b>Accounts->Manage Accounts</b> in the Buddy List window" +msgstr "" + +#: ../pidgin/gtkaccount.c:2575 +#, c-format +msgid "" +"<a href=\"viewinfo\">%s</a>%s%s%s wants to add you (%s) to his or her buddy " +"list%s%s" +msgstr "" + +#: ../pidgin/gtkaccount.c:2588 +#, c-format +msgid "%s%s%s%s wants to add you (%s) to his or her buddy list%s%s" +msgstr "" + +#: ../pidgin/gtkaccount.c:2622 +msgid "Send Instant Message" +msgstr "" + +#. Buddy List +#: ../pidgin/gtkblist-theme.c:370 ../pidgin/gtkimhtmltoolbar.c:1234 +msgid "Background Color" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:371 +msgid "The background color for the buddy list" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:375 +msgid "Layout" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:376 +msgid "The layout of icons, name, and status of the buddy list" +msgstr "" + +#. Group +#. Note to translators: These two strings refer to the background color +#. of a buddy list group when in its expanded state +#: ../pidgin/gtkblist-theme.c:384 +msgid "Expanded Background Color" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:385 +msgid "The background color of an expanded group" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list group when in its expanded state +#: ../pidgin/gtkblist-theme.c:391 +msgid "Expanded Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:392 +msgid "The text information for when a group is expanded" +msgstr "" + +#. Note to translators: These two strings refer to the background color +#. of a buddy list group when in its collapsed state +#: ../pidgin/gtkblist-theme.c:398 +msgid "Collapsed Background Color" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:399 +msgid "The background color of a collapsed group" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list group when in its collapsed state +#: ../pidgin/gtkblist-theme.c:405 +msgid "Collapsed Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:406 +msgid "The text information for when a group is collapsed" +msgstr "" + +#. Buddy +#. Note to translators: These two strings refer to the background color +#. of a buddy list contact or chat room +#: ../pidgin/gtkblist-theme.c:413 +msgid "Contact/Chat Background Color" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:414 +msgid "The background color of a contact or chat" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list contact when in its expanded state +#: ../pidgin/gtkblist-theme.c:420 +msgid "Contact Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:421 +msgid "The text information for when a contact is expanded" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list buddy when it is online +#: ../pidgin/gtkblist-theme.c:427 +msgid "Online Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:428 +msgid "The text information for when a buddy is online" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list buddy when it is away +#: ../pidgin/gtkblist-theme.c:434 +msgid "Away Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:435 +msgid "The text information for when a buddy is away" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list buddy when it is offline +#: ../pidgin/gtkblist-theme.c:441 +msgid "Offline Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:442 +msgid "The text information for when a buddy is offline" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list buddy when it is idle +#: ../pidgin/gtkblist-theme.c:448 +msgid "Idle Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:449 +msgid "The text information for when a buddy is idle" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list buddy when they have sent you a new message +#: ../pidgin/gtkblist-theme.c:455 +msgid "Message Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:456 +msgid "The text information for when a buddy has an unread message" +msgstr "" + +#. Note to translators: These two strings refer to the font and color +#. of a buddy list buddy when they have sent you a new message +#: ../pidgin/gtkblist-theme.c:462 +msgid "Message (Nick Said) Text" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:463 +msgid "" +"The text information for when a chat has an unread message that mentions " +"your nickname" +msgstr "" + +#: ../pidgin/gtkblist-theme.c:468 +msgid "The text information for a buddy's status" +msgstr "" + +#: ../pidgin/gtkblist.c:560 +#, 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] "" + +#: ../pidgin/gtkblist.c:561 +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 "" + +#: ../pidgin/gtkblist.c:704 +msgid "Please update the necessary fields." +msgstr "" + +#: ../pidgin/gtkblist.c:1016 +msgid "A_ccount" +msgstr "" + +#: ../pidgin/gtkblist.c:1137 +msgid "" +"Please enter the appropriate information about the chat you would like to " +"join.\n" +msgstr "" + +#: ../pidgin/gtkblist.c:1142 +msgid "Room _List" +msgstr "" + +#: ../pidgin/gtkblist.c:1404 ../pidgin/gtkprivacy.c:537 +#: ../pidgin/gtkprivacy.c:551 +msgid "_Block" +msgstr "" + +#: ../pidgin/gtkblist.c:1404 +msgid "Un_block" +msgstr "" + +#: ../pidgin/gtkblist.c:1447 +msgid "Move to" +msgstr "" + +#: ../pidgin/gtkblist.c:1491 +msgid "Get _Info" +msgstr "" + +#: ../pidgin/gtkblist.c:1494 ../pidgin/pidginstock.c:86 +msgid "I_M" +msgstr "" + +#: ../pidgin/gtkblist.c:1503 +msgid "_Audio Call" +msgstr "" + +#: ../pidgin/gtkblist.c:1508 +msgid "Audio/_Video Call" +msgstr "" + +#: ../pidgin/gtkblist.c:1512 +msgid "_Video Call" +msgstr "" + +#: ../pidgin/gtkblist.c:1524 +msgid "_Send File..." +msgstr "" + +#: ../pidgin/gtkblist.c:1531 +msgid "Add Buddy _Pounce..." +msgstr "" + +#: ../pidgin/gtkblist.c:1536 ../pidgin/gtkblist.c:1540 +#: ../pidgin/gtkblist.c:1753 ../pidgin/gtkblist.c:1780 +msgid "View _Log" +msgstr "" + +#: ../pidgin/gtkblist.c:1546 ../pidgin/gtkblist.c:1726 +msgid "Hide When Offline" +msgstr "" + +#: ../pidgin/gtkblist.c:1546 ../pidgin/gtkblist.c:1726 +msgid "Show When Offline" +msgstr "" + +#: ../pidgin/gtkblist.c:1560 ../pidgin/gtkblist.c:1569 +#: ../pidgin/gtkblist.c:1763 ../pidgin/gtkblist.c:1786 +msgid "_Alias..." +msgstr "" + +#: ../pidgin/gtkblist.c:1563 ../pidgin/gtkblist.c:1571 +#: ../pidgin/gtkblist.c:1765 ../pidgin/gtkblist.c:1788 +msgid "_Remove" +msgstr "" + +#: ../pidgin/gtkblist.c:1696 +msgid "Set Custom Icon" +msgstr "" + +#: ../pidgin/gtkblist.c:1700 ../pidgin/gtkconv.c:2929 +msgid "Remove Custom Icon" +msgstr "" + +#: ../pidgin/gtkblist.c:1714 +msgid "Add _Buddy..." +msgstr "" + +#: ../pidgin/gtkblist.c:1717 +msgid "Add C_hat..." +msgstr "" + +#: ../pidgin/gtkblist.c:1720 +msgid "_Delete Group" +msgstr "" + +#: ../pidgin/gtkblist.c:1722 +msgid "_Rename" +msgstr "" + +#. join button +#: ../pidgin/gtkblist.c:1747 ../pidgin/gtkroomlist.c:323 +#: ../pidgin/gtkroomlist.c:588 ../pidgin/pidginstock.c:84 +msgid "_Join" +msgstr "" + +#: ../pidgin/gtkblist.c:1749 +msgid "Auto-Join" +msgstr "" + +#: ../pidgin/gtkblist.c:1751 +msgid "Persistent" +msgstr "" + +#: ../pidgin/gtkblist.c:1761 +msgid "_Edit Settings..." +msgstr "" + +#: ../pidgin/gtkblist.c:1795 ../pidgin/gtkblist.c:1820 +msgid "_Collapse" +msgstr "" + +#: ../pidgin/gtkblist.c:1825 +msgid "_Expand" +msgstr "" + +#: ../pidgin/gtkblist.c:2072 ../pidgin/gtkblist.c:2084 +#: ../pidgin/gtkblist.c:6001 ../pidgin/gtkblist.c:6014 +msgid "/Tools/Mute Sounds" +msgstr "" + +#: ../pidgin/gtkblist.c:2530 ../pidgin/gtkconv.c:5190 +#: ../pidgin/gtkpounce.c:448 +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. +#: ../pidgin/gtkblist.c:2899 +msgid "Unknown node type" +msgstr "" + +#: ../pidgin/gtkblist.c:3540 +msgid "Please select your mood from the list" +msgstr "" + +#: ../pidgin/gtkblist.c:3574 +msgid "Message (optional)" +msgstr "" + +#: ../pidgin/gtkblist.c:3579 +msgid "Edit User Mood" +msgstr "" + +#. NOTE: Do not set any accelerator to Control+O. It is mapped by +#. gtk_blist_key_press_cb to "Get User Info" on the selected buddy. +#. Buddies menu +#: ../pidgin/gtkblist.c:3604 +msgid "/_Buddies" +msgstr "" + +#: ../pidgin/gtkblist.c:3605 +msgid "/Buddies/New Instant _Message..." +msgstr "" + +#: ../pidgin/gtkblist.c:3606 +msgid "/Buddies/Join a _Chat..." +msgstr "" + +#: ../pidgin/gtkblist.c:3607 +msgid "/Buddies/Get User _Info..." +msgstr "" + +#: ../pidgin/gtkblist.c:3608 +msgid "/Buddies/View User _Log..." +msgstr "" + +#: ../pidgin/gtkblist.c:3610 +msgid "/Buddies/Sh_ow" +msgstr "" + +#: ../pidgin/gtkblist.c:3611 +msgid "/Buddies/Show/_Offline Buddies" +msgstr "" + +#: ../pidgin/gtkblist.c:3612 +msgid "/Buddies/Show/_Empty Groups" +msgstr "" + +#: ../pidgin/gtkblist.c:3613 +msgid "/Buddies/Show/Buddy _Details" +msgstr "" + +#: ../pidgin/gtkblist.c:3614 +msgid "/Buddies/Show/Idle _Times" +msgstr "" + +#: ../pidgin/gtkblist.c:3615 +msgid "/Buddies/Show/_Protocol Icons" +msgstr "" + +#: ../pidgin/gtkblist.c:3616 +msgid "/Buddies/_Sort Buddies" +msgstr "" + +#: ../pidgin/gtkblist.c:3618 +msgid "/Buddies/_Add Buddy..." +msgstr "" + +#: ../pidgin/gtkblist.c:3619 +msgid "/Buddies/Add C_hat..." +msgstr "" + +#: ../pidgin/gtkblist.c:3620 +msgid "/Buddies/Add _Group..." +msgstr "" + +#: ../pidgin/gtkblist.c:3622 +msgid "/Buddies/_Quit" +msgstr "" + +#. Accounts menu +#: ../pidgin/gtkblist.c:3625 +msgid "/_Accounts" +msgstr "" + +#: ../pidgin/gtkblist.c:3626 ../pidgin/gtkblist.c:8008 +msgid "/Accounts/Manage Accounts" +msgstr "" + +#. Tools +#: ../pidgin/gtkblist.c:3629 +msgid "/_Tools" +msgstr "" + +#: ../pidgin/gtkblist.c:3630 +msgid "/Tools/Buddy _Pounces" +msgstr "" + +#: ../pidgin/gtkblist.c:3631 +msgid "/Tools/_Certificates" +msgstr "" + +#: ../pidgin/gtkblist.c:3632 +msgid "/Tools/Custom Smile_ys" +msgstr "" + +#: ../pidgin/gtkblist.c:3633 +msgid "/Tools/Plu_gins" +msgstr "" + +#: ../pidgin/gtkblist.c:3634 +msgid "/Tools/Pr_eferences" +msgstr "" + +#: ../pidgin/gtkblist.c:3635 +msgid "/Tools/Pr_ivacy" +msgstr "" + +#: ../pidgin/gtkblist.c:3636 +msgid "/Tools/Set _Mood" +msgstr "" + +#: ../pidgin/gtkblist.c:3638 +msgid "/Tools/_File Transfers" +msgstr "" + +#: ../pidgin/gtkblist.c:3639 +msgid "/Tools/R_oom List" +msgstr "" + +#: ../pidgin/gtkblist.c:3640 +msgid "/Tools/System _Log" +msgstr "" + +#: ../pidgin/gtkblist.c:3642 +msgid "/Tools/Mute _Sounds" +msgstr "" + +#. Help +#: ../pidgin/gtkblist.c:3644 +msgid "/_Help" +msgstr "" + +#: ../pidgin/gtkblist.c:3645 +msgid "/Help/Online _Help" +msgstr "" + +#: ../pidgin/gtkblist.c:3647 +msgid "/Help/_Build Information" +msgstr "" + +#: ../pidgin/gtkblist.c:3648 +msgid "/Help/_Debug Window" +msgstr "" + +#: ../pidgin/gtkblist.c:3649 +msgid "/Help/De_veloper Information" +msgstr "" + +#: ../pidgin/gtkblist.c:3650 +msgid "/Help/_Plugin Information" +msgstr "" + +#: ../pidgin/gtkblist.c:3651 +msgid "/Help/_Translator Information" +msgstr "" + +#: ../pidgin/gtkblist.c:3653 +msgid "/Help/_About" +msgstr "" + +#: ../pidgin/gtkblist.c:3685 +#, c-format +msgid "<b>Account:</b> %s" +msgstr "" + +#: ../pidgin/gtkblist.c:3704 +#, c-format +msgid "" +"\n" +"<b>Occupants:</b> %d" +msgstr "" + +#: ../pidgin/gtkblist.c:3710 +#, c-format +msgid "" +"\n" +"<b>Topic:</b> %s" +msgstr "" + +#: ../pidgin/gtkblist.c:3710 +msgid "(no topic set)" +msgstr "" + +#: ../pidgin/gtkblist.c:3791 +msgid "Buddy Alias" +msgstr "" + +#: ../pidgin/gtkblist.c:3820 +msgid "Logged In" +msgstr "" + +#: ../pidgin/gtkblist.c:3866 +msgid "Last Seen" +msgstr "" + +#: ../pidgin/gtkblist.c:3888 +msgid "Spooky" +msgstr "" + +#: ../pidgin/gtkblist.c:3890 +msgid "Awesome" +msgstr "" + +#: ../pidgin/gtkblist.c:3892 +msgid "Rockin'" +msgstr "" + +#: ../pidgin/gtkblist.c:3922 +msgid "Total Buddies" +msgstr "" + +#: ../pidgin/gtkblist.c:4279 +#, c-format +msgid "Idle %dd %dh %02dm" +msgstr "" + +#: ../pidgin/gtkblist.c:4281 +#, c-format +msgid "Idle %dh %02dm" +msgstr "" + +#: ../pidgin/gtkblist.c:4283 +#, c-format +msgid "Idle %dm" +msgstr "" + +#: ../pidgin/gtkblist.c:4472 +msgid "/Buddies/New Instant Message..." +msgstr "" + +#: ../pidgin/gtkblist.c:4473 ../pidgin/gtkblist.c:4506 +msgid "/Buddies/Join a Chat..." +msgstr "" + +#: ../pidgin/gtkblist.c:4474 +msgid "/Buddies/Get User Info..." +msgstr "" + +#: ../pidgin/gtkblist.c:4475 +msgid "/Buddies/Add Buddy..." +msgstr "" + +#: ../pidgin/gtkblist.c:4476 ../pidgin/gtkblist.c:4509 +msgid "/Buddies/Add Chat..." +msgstr "" + +#: ../pidgin/gtkblist.c:4477 +msgid "/Buddies/Add Group..." +msgstr "" + +#: ../pidgin/gtkblist.c:4512 +msgid "/Tools/Privacy" +msgstr "" + +#: ../pidgin/gtkblist.c:4515 +msgid "/Tools/Room List" +msgstr "" + +#: ../pidgin/gtkblist.c:4647 ../pidgin/gtkdocklet.c:158 +#: ../pidgin/gtkdocklet.c:163 +#, c-format +msgid "%d unread message from %s\n" +msgid_plural "%d unread messages from %s\n" +msgstr[0] "" + +#: ../pidgin/gtkblist.c:4817 +msgid "Manually" +msgstr "" + +#: ../pidgin/gtkblist.c:4819 +msgid "By status" +msgstr "" + +#: ../pidgin/gtkblist.c:4820 +msgid "By recent log activity" +msgstr "" + +#: ../pidgin/gtkblist.c:5118 +#, c-format +msgid "%s disconnected" +msgstr "" + +#: ../pidgin/gtkblist.c:5120 +#, c-format +msgid "%s disabled" +msgstr "" + +#: ../pidgin/gtkblist.c:5124 +msgid "Reconnect" +msgstr "" + +#: ../pidgin/gtkblist.c:5124 ../pidgin/gtkblist.c:5226 +msgid "Re-enable" +msgstr "" + +#: ../pidgin/gtkblist.c:5137 +msgid "SSL FAQs" +msgstr "" + +#: ../pidgin/gtkblist.c:5224 +msgid "Welcome back!" +msgstr "" + +#: ../pidgin/gtkblist.c:5260 +#, 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] "" + +#: ../pidgin/gtkblist.c:5534 +msgid "<b>Username:</b>" +msgstr "" + +#: ../pidgin/gtkblist.c:5541 +msgid "<b>Password:</b>" +msgstr "" + +#: ../pidgin/gtkblist.c:5552 +msgid "_Login" +msgstr "" + +#: ../pidgin/gtkblist.c:5806 +msgid "/Accounts" +msgstr "" + +#. Translators: Please maintain the use of -> and <- to refer to menu +#. heirarchy +#: ../pidgin/gtkblist.c:5820 +#, c-format +msgid "" +"<span weight='bold' size='larger'>Welcome to %s!</span>\n" +"\n" +"You have no accounts enabled. Enable your IM accounts from the <b>Accounts</b> window at <b>Accounts->Manage Accounts</b>. Once you enable accounts, you'll be able to sign on, set your status, and talk to your friends." +msgstr "" + +#. set the Show Offline Buddies option. must be done +#. * after the treeview or faceprint gets mad. -Robot101 +#: ../pidgin/gtkblist.c:5995 +msgid "/Buddies/Show/Offline Buddies" +msgstr "" + +#: ../pidgin/gtkblist.c:5998 +msgid "/Buddies/Show/Empty Groups" +msgstr "" + +#: ../pidgin/gtkblist.c:6004 +msgid "/Buddies/Show/Buddy Details" +msgstr "" + +#: ../pidgin/gtkblist.c:6007 +msgid "/Buddies/Show/Idle Times" +msgstr "" + +#: ../pidgin/gtkblist.c:6010 +msgid "/Buddies/Show/Protocol Icons" +msgstr "" + +#: ../pidgin/gtkblist.c:7084 +msgid "Add a buddy.\n" +msgstr "" + +#: ../pidgin/gtkblist.c:7099 +msgid "Buddy's _username:" +msgstr "" + +#: ../pidgin/gtkblist.c:7116 +msgid "(Optional) A_lias:" +msgstr "" + +#: ../pidgin/gtkblist.c:7127 +msgid "(Optional) _Invite message:" +msgstr "" + +#: ../pidgin/gtkblist.c:7132 +msgid "Add buddy to _group:" +msgstr "" + +#: ../pidgin/gtkblist.c:7237 +msgid "This protocol does not support chat rooms." +msgstr "" + +#: ../pidgin/gtkblist.c:7253 +msgid "" +"You are not currently signed on with any protocols that have the ability to " +"chat." +msgstr "" + +#: ../pidgin/gtkblist.c:7262 +msgid "" +"Please enter an alias, and the appropriate information about the chat you " +"would like to add to your buddy list.\n" +msgstr "" + +#: ../pidgin/gtkblist.c:7283 +msgid "A_lias:" +msgstr "" + +#: ../pidgin/gtkblist.c:7290 +msgid "_Group:" +msgstr "" + +#: ../pidgin/gtkblist.c:7294 +msgid "Auto_join when account connects." +msgstr "" + +#: ../pidgin/gtkblist.c:7295 +msgid "_Remain in chat after window is closed." +msgstr "" + +#: ../pidgin/gtkblist.c:7318 +msgid "Please enter the name of the group to be added." +msgstr "" + +#: ../pidgin/gtkblist.c:8022 +msgid "Enable Account" +msgstr "" + +#: ../pidgin/gtkblist.c:8027 +msgid "<PurpleMain>/Accounts/Enable Account" +msgstr "" + +#: ../pidgin/gtkblist.c:8081 +msgid "<PurpleMain>/Accounts/" +msgstr "" + +#: ../pidgin/gtkblist.c:8102 +msgid "_Edit Account" +msgstr "" + +#: ../pidgin/gtkblist.c:8120 +msgid "Set _Mood..." +msgstr "" + +#: ../pidgin/gtkblist.c:8130 ../pidgin/gtkconv.c:3345 +#: ../pidgin/gtkimhtml.c:1862 +msgid "No actions available" +msgstr "" + +#: ../pidgin/gtkblist.c:8137 +msgid "_Disable" +msgstr "" + +#: ../pidgin/gtkblist.c:8155 +msgid "/Tools" +msgstr "" + +#: ../pidgin/gtkblist.c:8226 +msgid "/Buddies/Sort Buddies" +msgstr "" + +#: ../pidgin/gtkcertmgr.c:188 +msgid "Type the host name for this certificate." +msgstr "" + +#. Widget creation function +#: ../pidgin/gtkcertmgr.c:531 +msgid "SSL Servers" +msgstr "" + +#: ../pidgin/gtkconv.c:510 +msgid "Unknown command." +msgstr "" + +#: ../pidgin/gtkconv.c:794 ../pidgin/gtkconv.c:821 +msgid "That buddy is not on the same protocol as this chat." +msgstr "" + +#: ../pidgin/gtkconv.c:815 +msgid "" +"You are not currently signed on with an account that can invite that buddy." +msgstr "" + +#: ../pidgin/gtkconv.c:867 +msgid "Invite Buddy Into Chat Room" +msgstr "" + +#: ../pidgin/gtkconv.c:918 +msgid "_Buddy:" +msgstr "" + +#: ../pidgin/gtkconv.c:931 ../pidgin/gtksavedstatuses.c:1152 +#: ../pidgin/gtksavedstatuses.c:1465 +msgid "_Message:" +msgstr "" + +#: ../pidgin/gtkconv.c:1002 +#, c-format +msgid "<h1>Conversation with %s</h1>\n" +msgstr "" + +#: ../pidgin/gtkconv.c:1040 +msgid "Save Conversation" +msgstr "" + +#: ../pidgin/gtkconv.c:1655 +msgid "Un-Ignore" +msgstr "" + +#: ../pidgin/gtkconv.c:1658 +msgid "Ignore" +msgstr "" + +#: ../pidgin/gtkconv.c:1678 +msgid "Get Away Message" +msgstr "" + +#: ../pidgin/gtkconv.c:1701 +msgid "Last Said" +msgstr "" + +#: ../pidgin/gtkconv.c:2747 +msgid "Unable to save icon file to disk." +msgstr "" + +#: ../pidgin/gtkconv.c:2842 +msgid "Save Icon" +msgstr "" + +#: ../pidgin/gtkconv.c:2900 +msgid "Animate" +msgstr "" + +#: ../pidgin/gtkconv.c:2905 +msgid "Hide Icon" +msgstr "" + +#: ../pidgin/gtkconv.c:2908 +msgid "Save Icon As..." +msgstr "" + +#: ../pidgin/gtkconv.c:2912 +msgid "Set Custom Icon..." +msgstr "" + +#: ../pidgin/gtkconv.c:2916 +msgid "Change Size" +msgstr "" + +#: ../pidgin/gtkconv.c:3051 +msgid "Show All" +msgstr "" + +#. Conversation menu +#: ../pidgin/gtkconv.c:3070 +msgid "/_Conversation" +msgstr "" + +#: ../pidgin/gtkconv.c:3072 +msgid "/Conversation/New Instant _Message..." +msgstr "" + +#: ../pidgin/gtkconv.c:3074 +msgid "/Conversation/Join a _Chat..." +msgstr "" + +#: ../pidgin/gtkconv.c:3079 +msgid "/Conversation/_Find..." +msgstr "" + +#: ../pidgin/gtkconv.c:3081 +msgid "/Conversation/View _Log" +msgstr "" + +#: ../pidgin/gtkconv.c:3082 +msgid "/Conversation/_Save As..." +msgstr "" + +#: ../pidgin/gtkconv.c:3084 +msgid "/Conversation/Clea_r Scrollback" +msgstr "" + +#: ../pidgin/gtkconv.c:3089 +msgid "/Conversation/M_edia" +msgstr "" + +#: ../pidgin/gtkconv.c:3091 +msgid "/Conversation/Media/_Audio Call" +msgstr "" + +#: ../pidgin/gtkconv.c:3093 +msgid "/Conversation/Media/_Video Call" +msgstr "" + +#: ../pidgin/gtkconv.c:3095 +msgid "/Conversation/Media/Audio\\/Video _Call" +msgstr "" + +#: ../pidgin/gtkconv.c:3099 +msgid "/Conversation/Se_nd File..." +msgstr "" + +#: ../pidgin/gtkconv.c:3100 +msgid "/Conversation/Get _Attention" +msgstr "" + +#: ../pidgin/gtkconv.c:3101 +msgid "/Conversation/Add Buddy _Pounce..." +msgstr "" + +#: ../pidgin/gtkconv.c:3103 +msgid "/Conversation/_Get Info" +msgstr "" + +#: ../pidgin/gtkconv.c:3105 +msgid "/Conversation/In_vite..." +msgstr "" + +#: ../pidgin/gtkconv.c:3107 +msgid "/Conversation/M_ore" +msgstr "" + +#: ../pidgin/gtkconv.c:3111 +msgid "/Conversation/Al_ias..." +msgstr "" + +#: ../pidgin/gtkconv.c:3113 +msgid "/Conversation/_Block..." +msgstr "" + +#: ../pidgin/gtkconv.c:3115 +msgid "/Conversation/_Unblock..." +msgstr "" + +#: ../pidgin/gtkconv.c:3117 +msgid "/Conversation/_Add..." +msgstr "" + +#: ../pidgin/gtkconv.c:3119 +msgid "/Conversation/_Remove..." +msgstr "" + +#: ../pidgin/gtkconv.c:3124 +msgid "/Conversation/Insert Lin_k..." +msgstr "" + +#: ../pidgin/gtkconv.c:3126 +msgid "/Conversation/Insert Imag_e..." +msgstr "" + +#: ../pidgin/gtkconv.c:3132 +msgid "/Conversation/_Close" +msgstr "" + +#. Options +#: ../pidgin/gtkconv.c:3136 +msgid "/_Options" +msgstr "" + +#: ../pidgin/gtkconv.c:3137 +msgid "/Options/Enable _Logging" +msgstr "" + +#: ../pidgin/gtkconv.c:3138 +msgid "/Options/Enable _Sounds" +msgstr "" + +#: ../pidgin/gtkconv.c:3140 +msgid "/Options/Show Formatting _Toolbars" +msgstr "" + +#: ../pidgin/gtkconv.c:3141 +msgid "/Options/Show Ti_mestamps" +msgstr "" + +#: ../pidgin/gtkconv.c:3333 +msgid "/Conversation/More" +msgstr "" + +#: ../pidgin/gtkconv.c:3389 +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. +#: ../pidgin/gtkconv.c:3425 ../pidgin/gtkconv.c:3457 +msgid "/Conversation" +msgstr "" + +#: ../pidgin/gtkconv.c:3465 +msgid "/Conversation/View Log" +msgstr "" + +#: ../pidgin/gtkconv.c:3470 +msgid "/Conversation/Media/Audio Call" +msgstr "" + +#: ../pidgin/gtkconv.c:3473 +msgid "/Conversation/Media/Video Call" +msgstr "" + +#: ../pidgin/gtkconv.c:3476 +msgid "/Conversation/Media/Audio\\/Video Call" +msgstr "" + +#: ../pidgin/gtkconv.c:3483 +msgid "/Conversation/Send File..." +msgstr "" + +#: ../pidgin/gtkconv.c:3487 +msgid "/Conversation/Get Attention" +msgstr "" + +#: ../pidgin/gtkconv.c:3490 +msgid "/Conversation/Add Buddy Pounce..." +msgstr "" + +#: ../pidgin/gtkconv.c:3496 +msgid "/Conversation/Get Info" +msgstr "" + +#: ../pidgin/gtkconv.c:3500 +msgid "/Conversation/Invite..." +msgstr "" + +#: ../pidgin/gtkconv.c:3506 +msgid "/Conversation/Alias..." +msgstr "" + +#: ../pidgin/gtkconv.c:3510 +msgid "/Conversation/Block..." +msgstr "" + +#: ../pidgin/gtkconv.c:3514 +msgid "/Conversation/Unblock..." +msgstr "" + +#: ../pidgin/gtkconv.c:3518 +msgid "/Conversation/Add..." +msgstr "" + +#: ../pidgin/gtkconv.c:3522 +msgid "/Conversation/Remove..." +msgstr "" + +#: ../pidgin/gtkconv.c:3528 +msgid "/Conversation/Insert Link..." +msgstr "" + +#: ../pidgin/gtkconv.c:3532 +msgid "/Conversation/Insert Image..." +msgstr "" + +#: ../pidgin/gtkconv.c:3538 +msgid "/Options/Enable Logging" +msgstr "" + +#: ../pidgin/gtkconv.c:3541 +msgid "/Options/Enable Sounds" +msgstr "" + +#: ../pidgin/gtkconv.c:3554 +msgid "/Options/Show Formatting Toolbars" +msgstr "" + +#: ../pidgin/gtkconv.c:3557 +msgid "/Options/Show Timestamps" +msgstr "" + +#: ../pidgin/gtkconv.c:3635 +msgid "User is typing..." +msgstr "" + +#: ../pidgin/gtkconv.c:3706 +#, c-format +msgid "" +"\n" +"%s has stopped typing" +msgstr "" + +#. Build the Send To menu +#: ../pidgin/gtkconv.c:3885 ../pidgin/gtkconv.c:8615 +msgid "S_end To" +msgstr "" + +#: ../pidgin/gtkconv.c:4579 ../pidgin/plugins/sendbutton.c:61 +msgid "_Send" +msgstr "" + +#. Setup the label telling how many people are in the room. +#: ../pidgin/gtkconv.c:4748 +msgid "0 people in room" +msgstr "" + +#: ../pidgin/gtkconv.c:4903 +msgid "Close Find bar" +msgstr "" + +#: ../pidgin/gtkconv.c:4905 +msgid "Find:" +msgstr "" + +#: ../pidgin/gtkconv.c:6173 ../pidgin/gtkconv.c:6291 +#, c-format +msgid "%d person in room" +msgid_plural "%d people in room" +msgstr[0] "" + +#: ../pidgin/gtkconv.c:6824 +msgid "Stopped Typing" +msgstr "" + +#: ../pidgin/gtkconv.c:6827 +msgid "Nick Said" +msgstr "" + +#: ../pidgin/gtkconv.c:6830 +msgid "Unread Messages" +msgstr "" + +#: ../pidgin/gtkconv.c:6836 +msgid "New Event" +msgstr "" + +#: ../pidgin/gtkconv.c:7602 +msgid "" +"The account has disconnected and you are no longer in this chat. You will " +"automatically rejoin the chat when the account reconnects." +msgstr "" + +#: ../pidgin/gtkconv.c:8093 +msgid "clear: Clears all conversation scrollbacks." +msgstr "" + +#: ../pidgin/gtkconv.c:8298 +msgid "Confirm close" +msgstr "" + +#: ../pidgin/gtkconv.c:8330 +msgid "You have unread messages. Are you sure you want to close the window?" +msgstr "" + +#: ../pidgin/gtkconv.c:8953 +msgid "Close other tabs" +msgstr "" + +#: ../pidgin/gtkconv.c:8959 +msgid "Close all tabs" +msgstr "" + +#: ../pidgin/gtkconv.c:8967 +msgid "Detach this tab" +msgstr "" + +#: ../pidgin/gtkconv.c:8973 +msgid "Close this tab" +msgstr "" + +#: ../pidgin/gtkconv.c:9478 +msgid "Close conversation" +msgstr "" + +#: ../pidgin/gtkconv.c:10068 +msgid "Last created window" +msgstr "" + +#: ../pidgin/gtkconv.c:10070 +msgid "Separate IM and Chat windows" +msgstr "" + +#: ../pidgin/gtkconv.c:10072 ../pidgin/gtkprefs.c:1989 +msgid "New window" +msgstr "" + +#: ../pidgin/gtkconv.c:10074 +msgid "By group" +msgstr "" + +#: ../pidgin/gtkconv.c:10076 +msgid "By account" +msgstr "" + +#: ../pidgin/gtkdebug.c:178 ../pidgin/gtkdebug.c:812 ../pidgin/gtkdebug.c:814 +msgid "Find" +msgstr "" + +#: ../pidgin/gtkdebug.c:206 +msgid "_Search for:" +msgstr "" + +#: ../pidgin/gtkdebug.c:245 +msgid "Save Debug Log" +msgstr "" + +#: ../pidgin/gtkdebug.c:645 +msgid "Invert" +msgstr "" + +#: ../pidgin/gtkdebug.c:648 +msgid "Highlight matches" +msgstr "" + +#: ../pidgin/gtkdebug.c:715 +msgid "_Icon Only" +msgstr "" + +#: ../pidgin/gtkdebug.c:716 +msgid "_Text Only" +msgstr "" + +#: ../pidgin/gtkdebug.c:717 +msgid "_Both Icon & Text" +msgstr "" + +#: ../pidgin/gtkdebug.c:865 ../pidgin/gtkdebug.c:867 ../pidgin/gtkdebug.c:869 +msgid "Filter" +msgstr "" + +#: ../pidgin/gtkdebug.c:889 ../pidgin/gtkdebug.c:891 +msgid "Right click for more options." +msgstr "" + +#: ../pidgin/gtkdebug.c:925 +msgid "Level " +msgstr "" + +#: ../pidgin/gtkdebug.c:931 ../pidgin/gtkdebug.c:933 +msgid "Select the debug filter level." +msgstr "" + +#: ../pidgin/gtkdebug.c:938 +msgid "All" +msgstr "" + +#: ../pidgin/gtkdebug.c:939 +msgid "Misc" +msgstr "" + +#: ../pidgin/gtkdebug.c:941 +msgid "Warning" +msgstr "" + +#: ../pidgin/gtkdebug.c:942 +msgid "Error " +msgstr "" + +#: ../pidgin/gtkdebug.c:943 +msgid "Fatal Error" +msgstr "" + +#: ../pidgin/gtkdialogs.c:78 +msgid "artist" +msgstr "" + +#: ../pidgin/gtkdialogs.c:87 +msgid "voice and video" +msgstr "" + +#: ../pidgin/gtkdialogs.c:89 +msgid "support" +msgstr "" + +#: ../pidgin/gtkdialogs.c:91 ../pidgin/gtkdialogs.c:119 +msgid "webmaster" +msgstr "" + +#: ../pidgin/gtkdialogs.c:110 +msgid "win32 port" +msgstr "" + +#. Translators: This is a person's name. For most languages we recommend +#. not translating it. +#: ../pidgin/gtkdialogs.c:114 +msgid "Ka-Hing Cheung" +msgstr "" + +#: ../pidgin/gtkdialogs.c:115 ../pidgin/gtkdialogs.c:117 +msgid "maintainer" +msgstr "" + +#: ../pidgin/gtkdialogs.c:118 +msgid "libfaim maintainer" +msgstr "" + +#. If "lazy bum" translates literally into a serious insult, use something +#. else or omit it. +#: ../pidgin/gtkdialogs.c:123 +msgid "hacker and designated driver [lazy bum]" +msgstr "" + +#: ../pidgin/gtkdialogs.c:127 +msgid "support/QA" +msgstr "" + +#: ../pidgin/gtkdialogs.c:128 +msgid "XMPP" +msgstr "" + +#: ../pidgin/gtkdialogs.c:129 +msgid "original author" +msgstr "" + +#: ../pidgin/gtkdialogs.c:131 +msgid "lead developer" +msgstr "" + +#: ../pidgin/gtkdialogs.c:142 +msgid "Senior Contributor/QA" +msgstr "" + +#: ../pidgin/gtkdialogs.c:150 ../pidgin/gtkdialogs.c:151 +msgid "Afrikaans" +msgstr "" + +#: ../pidgin/gtkdialogs.c:152 ../pidgin/gtkdialogs.c:262 +msgid "Arabic" +msgstr "" + +#: ../pidgin/gtkdialogs.c:153 +msgid "Assamese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:154 +msgid "Asturian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:155 +msgid "Belarusian Latin" +msgstr "" + +#: ../pidgin/gtkdialogs.c:156 ../pidgin/gtkdialogs.c:157 +#: ../pidgin/gtkdialogs.c:263 +msgid "Bulgarian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:158 ../pidgin/gtkdialogs.c:159 +#: ../pidgin/gtkdialogs.c:160 ../pidgin/gtkdialogs.c:264 +#: ../pidgin/gtkdialogs.c:265 +msgid "Bengali" +msgstr "" + +#: ../pidgin/gtkdialogs.c:161 +msgid "Bengali-India" +msgstr "" + +#: ../pidgin/gtkdialogs.c:162 +msgid "Bosnian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:163 ../pidgin/gtkdialogs.c:266 +#: ../pidgin/gtkdialogs.c:267 +msgid "Catalan" +msgstr "" + +#: ../pidgin/gtkdialogs.c:164 ../pidgin/gtkdialogs.c:165 +msgid "Valencian-Catalan" +msgstr "" + +#: ../pidgin/gtkdialogs.c:166 ../pidgin/gtkdialogs.c:268 +#: ../pidgin/gtkdialogs.c:269 +msgid "Czech" +msgstr "" + +#: ../pidgin/gtkdialogs.c:167 ../pidgin/gtkdialogs.c:270 +#: ../pidgin/gtkdialogs.c:271 +msgid "Danish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:168 ../pidgin/gtkdialogs.c:272 +#: ../pidgin/gtkdialogs.c:273 +msgid "German" +msgstr "" + +#: ../pidgin/gtkdialogs.c:169 ../pidgin/gtkdialogs.c:170 +#: ../pidgin/gtkdialogs.c:171 +msgid "Dzongkha" +msgstr "" + +#: ../pidgin/gtkdialogs.c:172 ../pidgin/gtkdialogs.c:173 +msgid "Greek" +msgstr "" + +#: ../pidgin/gtkdialogs.c:174 +msgid "Australian English" +msgstr "" + +#: ../pidgin/gtkdialogs.c:175 ../pidgin/gtkdialogs.c:274 +msgid "British English" +msgstr "" + +#: ../pidgin/gtkdialogs.c:176 +msgid "Canadian English" +msgstr "" + +#: ../pidgin/gtkdialogs.c:177 +msgid "Esperanto" +msgstr "" + +#: ../pidgin/gtkdialogs.c:178 ../pidgin/gtkdialogs.c:275 +#: ../pidgin/gtkdialogs.c:276 ../pidgin/gtkdialogs.c:277 +#: ../pidgin/gtkdialogs.c:278 +msgid "Spanish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:179 +msgid "Estonian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:180 ../pidgin/gtkdialogs.c:279 +#: ../pidgin/gtkdialogs.c:280 +msgid "Basque" +msgstr "" + +#: ../pidgin/gtkdialogs.c:181 ../pidgin/gtkdialogs.c:182 +#: ../pidgin/gtkdialogs.c:183 +msgid "Persian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:184 ../pidgin/gtkdialogs.c:281 +#: ../pidgin/gtkdialogs.c:282 +msgid "Finnish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:185 ../pidgin/gtkdialogs.c:283 +#: ../pidgin/gtkdialogs.c:284 ../pidgin/gtkdialogs.c:285 +#: ../pidgin/gtkdialogs.c:286 +msgid "French" +msgstr "" + +#: ../pidgin/gtkdialogs.c:186 ../pidgin/gtkdialogs.c:187 +msgid "Irish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:188 ../pidgin/gtkdialogs.c:189 +#: ../pidgin/gtkdialogs.c:287 +msgid "Galician" +msgstr "" + +#: ../pidgin/gtkdialogs.c:190 ../pidgin/gtkdialogs.c:191 +msgid "Gujarati" +msgstr "" + +#: ../pidgin/gtkdialogs.c:191 +msgid "Gujarati Language Team" +msgstr "" + +#: ../pidgin/gtkdialogs.c:192 ../pidgin/gtkdialogs.c:288 +msgid "Hebrew" +msgstr "" + +#: ../pidgin/gtkdialogs.c:193 ../pidgin/gtkdialogs.c:194 +#: ../pidgin/gtkdialogs.c:289 +msgid "Hindi" +msgstr "" + +#: ../pidgin/gtkdialogs.c:195 +msgid "Croatian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:196 ../pidgin/gtkdialogs.c:290 +msgid "Hungarian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:197 +msgid "Indonesian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:198 ../pidgin/gtkdialogs.c:292 +msgid "Italian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:199 ../pidgin/gtkdialogs.c:293 +#: ../pidgin/gtkdialogs.c:294 ../pidgin/gtkdialogs.c:295 +#: ../pidgin/gtkdialogs.c:296 +msgid "Japanese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:200 ../pidgin/gtkdialogs.c:297 +msgid "Georgian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:200 +msgid "Ubuntu Georgian Translators" +msgstr "" + +#: ../pidgin/gtkdialogs.c:201 +msgid "Kazakh" +msgstr "" + +#: ../pidgin/gtkdialogs.c:202 +msgid "Khmer" +msgstr "" + +#: ../pidgin/gtkdialogs.c:203 +msgid "Kannada" +msgstr "" + +#: ../pidgin/gtkdialogs.c:203 +msgid "Kannada Translation team" +msgstr "" + +#: ../pidgin/gtkdialogs.c:204 ../pidgin/gtkdialogs.c:298 +#: ../pidgin/gtkdialogs.c:299 +msgid "Korean" +msgstr "" + +#: ../pidgin/gtkdialogs.c:205 ../pidgin/gtkdialogs.c:206 +#: ../pidgin/gtkdialogs.c:207 +msgid "Kurdish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:208 ../pidgin/gtkdialogs.c:301 +#: ../pidgin/gtkdialogs.c:302 ../pidgin/gtkdialogs.c:303 +msgid "Lithuanian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:209 ../pidgin/gtkdialogs.c:210 +msgid "Maithili" +msgstr "" + +#: ../pidgin/gtkdialogs.c:211 +msgid "Meadow Mari" +msgstr "" + +#: ../pidgin/gtkdialogs.c:212 ../pidgin/gtkdialogs.c:213 +#: ../pidgin/gtkdialogs.c:214 ../pidgin/gtkdialogs.c:304 +msgid "Macedonian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:215 +msgid "Malayalam" +msgstr "" + +#: ../pidgin/gtkdialogs.c:216 +msgid "Mongolian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:217 +msgid "Marathi" +msgstr "" + +#: ../pidgin/gtkdialogs.c:218 +msgid "Burmese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:219 ../pidgin/gtkdialogs.c:306 +#: ../pidgin/gtkdialogs.c:307 ../pidgin/gtkdialogs.c:308 +msgid "Bokmål Norwegian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:220 +msgid "Nepali" +msgstr "" + +#: ../pidgin/gtkdialogs.c:221 ../pidgin/gtkdialogs.c:309 +msgid "Dutch, Flemish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:222 +msgid "Norwegian Nynorsk" +msgstr "" + +#: ../pidgin/gtkdialogs.c:223 +msgid "Occitan" +msgstr "" + +#: ../pidgin/gtkdialogs.c:224 +msgid "Oriya" +msgstr "" + +#: ../pidgin/gtkdialogs.c:225 +msgid "Punjabi" +msgstr "" + +#: ../pidgin/gtkdialogs.c:226 ../pidgin/gtkdialogs.c:310 +#: ../pidgin/gtkdialogs.c:311 ../pidgin/gtkdialogs.c:312 +#: ../pidgin/gtkdialogs.c:313 ../pidgin/gtkdialogs.c:314 +msgid "Polish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:227 ../pidgin/gtkdialogs.c:315 +msgid "Portuguese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:228 ../pidgin/gtkdialogs.c:316 +#: ../pidgin/gtkdialogs.c:317 +msgid "Portuguese-Brazil" +msgstr "" + +#: ../pidgin/gtkdialogs.c:229 +msgid "Pashto" +msgstr "" + +#: ../pidgin/gtkdialogs.c:230 ../pidgin/gtkdialogs.c:231 +msgid "Romanian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:232 ../pidgin/gtkdialogs.c:318 +#: ../pidgin/gtkdialogs.c:319 ../pidgin/gtkdialogs.c:320 +msgid "Russian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:233 ../pidgin/gtkdialogs.c:234 +#: ../pidgin/gtkdialogs.c:321 ../pidgin/gtkdialogs.c:322 +#: ../pidgin/gtkdialogs.c:323 +msgid "Slovak" +msgstr "" + +#: ../pidgin/gtkdialogs.c:235 ../pidgin/gtkdialogs.c:324 +msgid "Slovenian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:236 +msgid "Albanian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:237 ../pidgin/gtkdialogs.c:325 +#: ../pidgin/gtkdialogs.c:326 +msgid "Serbian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:238 +msgid "Serbian Latin" +msgstr "" + +#: ../pidgin/gtkdialogs.c:239 ../pidgin/gtkdialogs.c:240 +msgid "Sinhala" +msgstr "" + +#: ../pidgin/gtkdialogs.c:241 ../pidgin/gtkdialogs.c:327 +#: ../pidgin/gtkdialogs.c:328 +msgid "Swedish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:242 +msgid "Swahili" +msgstr "" + +#: ../pidgin/gtkdialogs.c:243 ../pidgin/gtkdialogs.c:244 +msgid "Tamil" +msgstr "" + +#: ../pidgin/gtkdialogs.c:245 ../pidgin/gtkdialogs.c:329 +msgid "Telugu" +msgstr "" + +#: ../pidgin/gtkdialogs.c:246 +msgid "Thai" +msgstr "" + +#: ../pidgin/gtkdialogs.c:247 +msgid "Ukranian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:248 +msgid "Urdu" +msgstr "" + +#: ../pidgin/gtkdialogs.c:249 ../pidgin/gtkdialogs.c:332 +msgid "Vietnamese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:250 ../pidgin/gtkdialogs.c:333 +#: ../pidgin/gtkdialogs.c:334 +msgid "Simplified Chinese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:251 ../pidgin/gtkdialogs.c:252 +#: ../pidgin/gtkdialogs.c:253 +msgid "Hong Kong Chinese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:254 ../pidgin/gtkdialogs.c:255 +#: ../pidgin/gtkdialogs.c:335 +msgid "Traditional Chinese" +msgstr "" + +#: ../pidgin/gtkdialogs.c:261 +msgid "Amharic" +msgstr "" + +#: ../pidgin/gtkdialogs.c:291 +msgid "Armenian" +msgstr "" + +#: ../pidgin/gtkdialogs.c:300 +msgid "Lao" +msgstr "" + +#: ../pidgin/gtkdialogs.c:305 +msgid "Malay" +msgstr "" + +#: ../pidgin/gtkdialogs.c:330 ../pidgin/gtkdialogs.c:331 +msgid "Turkish" +msgstr "" + +#: ../pidgin/gtkdialogs.c:332 +msgid "T.M.Thanh and the Gnome-Vi Team" +msgstr "" + +#: ../pidgin/gtkdialogs.c:510 +#, c-format +msgid "" +"%s is a messaging client based on libpurple which is capable of connecting " +"to multiple messaging services at once. %s is written in C using GTK+. %s " +"is released, and may be modified and redistributed, under the terms of the " +"GPL version 2 (or later). A copy of the GPL is distributed with %s. %s is " +"copyrighted by its contributors, a list of whom is also distributed with %s." +" There is no warranty for %s.<BR><BR>" +msgstr "" + +#: ../pidgin/gtkdialogs.c:520 +#, c-format +msgid "" +"<FONT SIZE=\"4\"><B>Helpful Resources</B></FONT><BR>\t<A " +"HREF=\"%s\">Website</A><BR>\t<A HREF=\"%s\">Frequently Asked " +"Questions</A><BR>\tIRC Channel: #pidgin on irc.freenode.net<BR>\tXMPP MUC: " +"devel@conference.pidgin.im<BR><BR>" +msgstr "" + +#: ../pidgin/gtkdialogs.c:534 +msgid "" +"<font size=\"4\"><b>Help from other Pidgin users</b></font> is available by " +"e-mailing <a " +"href=\"mailto:support@pidgin.im\">support@pidgin.im</a><br/>This is a " +"<b>public</b> mailing list! (<a " +"href=\"http://pidgin.im/pipermail/support/\">archive</a>)<br/>We can't help " +"with third-party protocols or plugins!<br/>This list's primary language is " +"<b>English</b>. You are welcome to post in another language, but the " +"responses may be less helpful.<br/>" +msgstr "" + +#: ../pidgin/gtkdialogs.c:544 +#, c-format +msgid "About %s" +msgstr "" + +#: ../pidgin/gtkdialogs.c:566 +msgid "Build Information" +msgstr "" + +#. End of not to be translated section +#: ../pidgin/gtkdialogs.c:735 +#, c-format +msgid "%s Build Information" +msgstr "" + +#: ../pidgin/gtkdialogs.c:756 +msgid "Current Developers" +msgstr "" + +#: ../pidgin/gtkdialogs.c:762 +msgid "Crazy Patch Writers" +msgstr "" + +#: ../pidgin/gtkdialogs.c:768 +msgid "Retired Developers" +msgstr "" + +#: ../pidgin/gtkdialogs.c:774 +msgid "Retired Crazy Patch Writers" +msgstr "" + +#: ../pidgin/gtkdialogs.c:777 +#, c-format +msgid "%s Developer Information" +msgstr "" + +#: ../pidgin/gtkdialogs.c:798 +msgid "Current Translators" +msgstr "" + +#: ../pidgin/gtkdialogs.c:804 +msgid "Past Translators" +msgstr "" + +#: ../pidgin/gtkdialogs.c:807 +#, c-format +msgid "%s Translator Information" +msgstr "" + +#: ../pidgin/gtkdialogs.c:818 +#, c-format +msgid "%s Plugin Information" +msgstr "" + +#: ../pidgin/gtkdialogs.c:827 +msgid "Plugin Information" +msgstr "" + +#: ../pidgin/gtkdialogs.c:883 ../pidgin/gtkdialogs.c:1022 +#: ../pidgin/gtkdialogs.c:1103 +msgid "_Name" +msgstr "" + +#: ../pidgin/gtkdialogs.c:888 ../pidgin/gtkdialogs.c:1027 +#: ../pidgin/gtkdialogs.c:1108 +msgid "_Account" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1035 +msgid "Get User Info" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1037 +msgid "" +"Please enter the username or alias of the person whose info you would like " +"to view." +msgstr "" + +#: ../pidgin/gtkdialogs.c:1127 +msgid "View User Log" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1149 +msgid "Alias Contact" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1150 +msgid "Enter an alias for this contact." +msgstr "" + +#: ../pidgin/gtkdialogs.c:1172 +#, c-format +msgid "Enter an alias for %s." +msgstr "" + +#: ../pidgin/gtkdialogs.c:1174 +msgid "Alias Buddy" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1195 +msgid "Alias Chat" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1196 +msgid "Enter an alias for this chat." +msgstr "" + +#: ../pidgin/gtkdialogs.c:1235 +#, 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] "" + +#: ../pidgin/gtkdialogs.c:1243 +msgid "Remove Contact" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1246 +msgid "_Remove Contact" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1277 +#, c-format +msgid "" +"You are about to merge the group called %s into the group called %s. Do you " +"want to continue?" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1284 +msgid "Merge Groups" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1287 +msgid "_Merge Groups" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1337 +#, 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 "" + +#: ../pidgin/gtkdialogs.c:1340 +msgid "Remove Group" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1343 +msgid "_Remove Group" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1376 +#, c-format +msgid "" +"You are about to remove %s from your buddy list. Do you want to continue?" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1379 +msgid "Remove Buddy" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1382 +msgid "_Remove Buddy" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1403 +#, c-format +msgid "" +"You are about to remove the chat %s from your buddy list. Do you want to " +"continue?" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1406 +msgid "Remove Chat" +msgstr "" + +#: ../pidgin/gtkdialogs.c:1409 +msgid "_Remove Chat" +msgstr "" + +#: ../pidgin/gtkdocklet.c:155 +msgid "Right-click for more unread messages...\n" +msgstr "" + +#: ../pidgin/gtkdocklet.c:536 +msgid "_Change Status" +msgstr "" + +#: ../pidgin/gtkdocklet.c:682 +msgid "Show Buddy _List" +msgstr "" + +#: ../pidgin/gtkdocklet.c:687 +msgid "_Unread Messages" +msgstr "" + +#: ../pidgin/gtkdocklet.c:708 +msgid "New _Message..." +msgstr "" + +#: ../pidgin/gtkdocklet.c:722 +msgid "_Accounts" +msgstr "" + +#: ../pidgin/gtkdocklet.c:723 +msgid "Plu_gins" +msgstr "" + +#: ../pidgin/gtkdocklet.c:724 +msgid "Pr_eferences" +msgstr "" + +#: ../pidgin/gtkdocklet.c:728 +msgid "Mute _Sounds" +msgstr "" + +#: ../pidgin/gtkdocklet.c:735 +msgid "_Blink on New Message" +msgstr "" + +#: ../pidgin/gtkdocklet.c:745 +msgid "_Quit" +msgstr "" + +#: ../pidgin/gtkft.c:150 +msgid "Not started" +msgstr "" + +#: ../pidgin/gtkft.c:272 +msgid "<b>Receiving As:</b>" +msgstr "" + +#: ../pidgin/gtkft.c:274 +msgid "<b>Receiving From:</b>" +msgstr "" + +#: ../pidgin/gtkft.c:278 +msgid "<b>Sending To:</b>" +msgstr "" + +#: ../pidgin/gtkft.c:280 +msgid "<b>Sending As:</b>" +msgstr "" + +#: ../pidgin/gtkft.c:474 ../pidgin/gtkutils.c:3296 +msgid "There is no application configured to open this type of file." +msgstr "" + +#: ../pidgin/gtkft.c:479 ../pidgin/gtkutils.c:3301 +msgid "An error occurred while opening the file." +msgstr "" + +#: ../pidgin/gtkft.c:516 ../pidgin/gtkutils.c:3337 +#, c-format +msgid "Error launching %s: %s" +msgstr "" + +#: ../pidgin/gtkft.c:525 ../pidgin/gtkutils.c:3345 +#, c-format +msgid "Error running %s" +msgstr "" + +#: ../pidgin/gtkft.c:526 ../pidgin/gtkutils.c:3346 +#, c-format +msgid "Process returned error code %d" +msgstr "" + +#: ../pidgin/gtkft.c:652 +msgid "Filename:" +msgstr "" + +#: ../pidgin/gtkft.c:653 +msgid "Local File:" +msgstr "" + +#: ../pidgin/gtkft.c:655 +msgid "Speed:" +msgstr "" + +#: ../pidgin/gtkft.c:656 +msgid "Time Elapsed:" +msgstr "" + +#: ../pidgin/gtkft.c:657 +msgid "Time Remaining:" +msgstr "" + +#: ../pidgin/gtkft.c:741 +msgid "Close this window when all transfers _finish" +msgstr "" + +#: ../pidgin/gtkft.c:751 +msgid "C_lear finished transfers" +msgstr "" + +#. "Download Details" arrow +#: ../pidgin/gtkft.c:760 +msgid "File transfer _details" +msgstr "" + +#: ../pidgin/gtkimhtml.c:951 +msgid "Paste as Plain _Text" +msgstr "" + +#: ../pidgin/gtkimhtml.c:968 ../pidgin/gtkimhtmltoolbar.c:1352 +msgid "_Reset formatting" +msgstr "" + +#: ../pidgin/gtkimhtml.c:976 +msgid "Disable _smileys in selected text" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1603 +msgid "Hyperlink color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1604 +msgid "Color to draw hyperlinks." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1607 +msgid "Hyperlink visited color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1608 +msgid "Color to draw hyperlink after it has been visited (or activated)." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1611 +msgid "Hyperlink prelight color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1612 +msgid "Color to draw hyperlinks when mouse is over them." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1615 ../pidgin/plugins/pidginrc.c:57 +msgid "Sent Message Name Color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1616 +msgid "Color to draw the name of a message you sent." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1619 ../pidgin/plugins/pidginrc.c:58 +msgid "Received Message Name Color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1620 +msgid "Color to draw the name of a message you received." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1623 +msgid "\"Attention\" Name Color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1624 +msgid "Color to draw the name of a message you received containing your name." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1627 ../pidgin/plugins/pidginrc.c:60 +msgid "Action Message Name Color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1628 +msgid "Color to draw the name of an action message." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1631 +msgid "Action Message Name Color for Whispered Message" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1632 +msgid "Color to draw the name of a whispered action message." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1635 +msgid "Whisper Message Name Color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1636 +msgid "Color to draw the name of a whispered message." +msgstr "" + +#: ../pidgin/gtkimhtml.c:1645 +msgid "Typing notification color" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1646 +msgid "The color to use for the typing notification" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1649 +msgid "Typing notification font" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1650 +msgid "The font to use for the typing notification" +msgstr "" + +#: ../pidgin/gtkimhtml.c:1653 ../pidgin/gtkimhtml.c:1654 +msgid "Enable typing notification" +msgstr "" + +#: ../pidgin/gtkimhtml.c:3781 +msgid "" +"<span size='larger' weight='bold'>Unrecognized file type</span>\n" +"\n" +"Defaulting to PNG." +msgstr "" + +#: ../pidgin/gtkimhtml.c:3811 +#, c-format +msgid "" +"<span size='larger' weight='bold'>Error saving image</span>\n" +"\n" +"%s" +msgstr "" + +#: ../pidgin/gtkimhtml.c:3858 +msgid "Save Image" +msgstr "" + +#: ../pidgin/gtkimhtml.c:3904 +msgid "_Save Image..." +msgstr "" + +#: ../pidgin/gtkimhtml.c:3914 +msgid "_Add Custom Smiley..." +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:177 ../pidgin/plugins/themeedit.c:127 +msgid "Select Font" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:257 +msgid "Select Text Color" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:337 +msgid "Select Background Color" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:426 +msgid "_URL" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:434 +msgid "_Description" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:437 +msgid "" +"Please enter the URL and description of the link that you want to insert. " +"The description is optional." +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:441 +msgid "Please enter the URL of the link that you want to insert." +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:446 ../pidgin/gtkimhtmltoolbar.c:1239 +msgid "Insert Link" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:450 ../pidgin/gtkimhtmltoolbar.c:1422 +msgid "_Insert" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:515 +#, c-format +msgid "Failed to store image: %s\n" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:540 +msgid "Insert Image" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:673 +#, c-format +msgid "" +"This smiley is disabled because a custom smiley exists for this shortcut:\n" +" %s" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:804 +msgid "Smile!" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:819 +msgid "_Manage custom smileys" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:856 +msgid "This theme has no available smileys." +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:971 ../pidgin/gtkimhtmltoolbar.c:1377 +msgid "_Font" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1192 +msgid "Group Items" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1192 +msgid "Ungroup Items" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1224 ../pidgin/plugins/convcolors.c:358 +msgid "Bold" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1225 ../pidgin/plugins/convcolors.c:367 +msgid "Italic" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1226 ../pidgin/plugins/convcolors.c:376 +msgid "Underline" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1227 +msgid "Strikethrough" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1229 +msgid "Increase Font Size" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1230 +msgid "Decrease Font Size" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1232 +msgid "Font Face" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1233 +msgid "Foreground Color" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1236 +msgid "Reset Formatting" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1238 +msgid "Insert IM Image" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1241 +msgid "Insert Smiley" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1266 +msgid "Send Attention" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1337 +msgid "<b>_Bold</b>" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1338 +msgid "<i>_Italic</i>" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1339 +msgid "<u>_Underline</u>" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1340 +msgid "<span strikethrough='true'>Strikethrough</span>" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1341 +msgid "<span size='larger'>_Larger</span>" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1343 +msgid "_Normal" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1345 +msgid "<span size='smaller'>_Smaller</span>" +msgstr "" + +#. If we want to show the formatting for the following items, we would +#. * need to update them when formatting changes. The above items don't need +#. * no updating nor nothin' +#: ../pidgin/gtkimhtmltoolbar.c:1349 +msgid "_Font face" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1350 +msgid "Foreground _color" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1351 +msgid "Bac_kground color" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1430 +msgid "_Image" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1438 +msgid "_Link" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1446 +msgid "_Horizontal rule" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1468 +msgid "_Smile!" +msgstr "" + +#: ../pidgin/gtkimhtmltoolbar.c:1490 +msgid "_Attention!" +msgstr "" + +#: ../pidgin/gtklog.c:245 +msgid "Log Deletion Failed" +msgstr "" + +#: ../pidgin/gtklog.c:246 +msgid "Check permissions and try again." +msgstr "" + +#: ../pidgin/gtklog.c:289 +#, c-format +msgid "" +"Are you sure you want to permanently delete the log of the conversation with" +" %s which started at %s?" +msgstr "" + +#: ../pidgin/gtklog.c:300 +#, c-format +msgid "" +"Are you sure you want to permanently delete the log of the conversation in " +"%s which started at %s?" +msgstr "" + +#: ../pidgin/gtklog.c:305 +#, c-format +msgid "" +"Are you sure you want to permanently delete the system log which started at " +"%s?" +msgstr "" + +#: ../pidgin/gtklog.c:320 +msgid "Delete Log?" +msgstr "" + +#: ../pidgin/gtklog.c:331 +msgid "Delete Log..." +msgstr "" + +#: ../pidgin/gtklog.c:451 +#, c-format +msgid "<span size='larger' weight='bold'>Conversation in %s on %s</span>" +msgstr "" + +#: ../pidgin/gtklog.c:454 +#, c-format +msgid "<span size='larger' weight='bold'>Conversation with %s on %s</span>" +msgstr "" + +#. Steal the "HELP" response and use it to trigger browsing to the logs folder +#: ../pidgin/gtklog.c:581 +msgid "_Browse logs folder" +msgstr "" + +#: ../pidgin/gtkmain.c:428 +#, c-format +msgid "%s %s. Try `%s -h' for more information.\n" +msgstr "" + +#: ../pidgin/gtkmain.c:432 +#, c-format +msgid "" +"Usage: %s [OPTION]...\n" +"\n" +msgstr "" + +#: ../pidgin/gtkmain.c:434 +msgid "DIR" +msgstr "" + +#: ../pidgin/gtkmain.c:434 +msgid "use DIR for config files" +msgstr "" + +#: ../pidgin/gtkmain.c:436 +msgid "print debugging messages to stdout" +msgstr "" + +#: ../pidgin/gtkmain.c:438 +msgid "force online, regardless of network status" +msgstr "" + +#: ../pidgin/gtkmain.c:440 +msgid "display this help and exit" +msgstr "" + +#: ../pidgin/gtkmain.c:442 +msgid "allow multiple instances" +msgstr "" + +#: ../pidgin/gtkmain.c:444 +msgid "don't automatically login" +msgstr "" + +#: ../pidgin/gtkmain.c:446 +msgid "NAME" +msgstr "" + +#: ../pidgin/gtkmain.c:447 +msgid "" +"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)." +msgstr "" + +#: ../pidgin/gtkmain.c:454 +msgid "X display to use" +msgstr "" + +#: ../pidgin/gtkmain.c:457 +msgid "display the current version and exit" +msgstr "" + +#: ../pidgin/gtkmain.c:546 +#, 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 "" + +#: ../pidgin/gtkmain.c:834 +#, c-format +msgid "Exiting because another libpurple client is already running.\n" +msgstr "" + +#: ../pidgin/gtkmedia.c:271 +msgid "_Media" +msgstr "" + +#: ../pidgin/gtkmedia.c:272 +msgid "_Hangup" +msgstr "" + +#: ../pidgin/gtkmedia.c:632 +#, c-format +msgid "%s wishes to start an audio/video session with you." +msgstr "" + +#: ../pidgin/gtkmedia.c:638 +#, c-format +msgid "%s wishes to start a video session with you." +msgstr "" + +#: ../pidgin/gtkmedia.c:644 +msgid "Incoming Call" +msgstr "" + +#: ../pidgin/gtkmedia.c:792 +msgid "_Hold" +msgstr "" + +#: ../pidgin/gtkmedia.c:863 ../pidgin/pidginstock.c:92 +msgid "_Pause" +msgstr "" + +#: ../pidgin/gtkmedia.c:881 +msgid "_Mute" +msgstr "" + +#: ../pidgin/gtknotify.c:752 +#, c-format +msgid "%s has %d new message." +msgid_plural "%s has %d new messages." +msgstr[0] "" + +#: ../pidgin/gtknotify.c:781 +#, c-format +msgid "<b>%d new email.</b>" +msgid_plural "<b>%d new emails.</b>" +msgstr[0] "" + +#: ../pidgin/gtknotify.c:1215 +#, c-format +msgid "The browser command \"%s\" is invalid." +msgstr "" + +#: ../pidgin/gtknotify.c:1217 ../pidgin/gtknotify.c:1253 +#: ../pidgin/gtknotify.c:1439 +msgid "Unable to open URL" +msgstr "" + +#: ../pidgin/gtknotify.c:1250 +#, c-format +msgid "Error launching \"%s\": %s" +msgstr "" + +#: ../pidgin/gtknotify.c:1440 +msgid "" +"The 'Manual' browser command has been chosen, but no command has been set." +msgstr "" + +#: ../pidgin/gtknotify.c:1449 +msgid "Unable to open URL: the 'Manual' browser command seems invalid." +msgstr "" + +#: ../pidgin/gtknotify.c:1524 +msgid "No message" +msgstr "" + +#: ../pidgin/gtknotify.c:1602 +msgid "Open All Messages" +msgstr "" + +#: ../pidgin/gtknotify.c:1632 +msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>" +msgstr "" + +#: ../pidgin/gtknotify.c:1635 +msgid "New Pounces" +msgstr "" + +#. Translators: Make sure you translate "Dismiss" differently than +#. "close"! This string is used in the "You have pounced" dialog +#. that appears when one of your Buddy Pounces is triggered. In +#. this context "Dismiss" means "I acknowledge that I've seen that +#. this pounce was triggered--remove it from this list." Translating +#. it as "Remove" is acceptable if you can't think of a more precise +#. word. +#: ../pidgin/gtknotify.c:1654 +msgid "Dismiss" +msgstr "" + +#: ../pidgin/gtknotify.c:1699 +msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>" +msgstr "" + +#: ../pidgin/gtkplugin.c:284 +msgid "The following plugins will be unloaded." +msgstr "" + +#: ../pidgin/gtkplugin.c:303 +msgid "Multiple plugins will be unloaded." +msgstr "" + +#: ../pidgin/gtkplugin.c:307 +msgid "Unload Plugins" +msgstr "" + +#: ../pidgin/gtkplugin.c:324 +msgid "Could not unload plugin" +msgstr "" + +#: ../pidgin/gtkplugin.c:325 +msgid "" +"The plugin could not be unloaded now, but will be disabled at the next " +"startup." +msgstr "" + +#: ../pidgin/gtkplugin.c:462 +#, c-format +msgid "" +"<span foreground=\"red\" weight=\"bold\">Error: %s\n" +"Check the plugin website for an update.</span>" +msgstr "" + +#: ../pidgin/gtkplugin.c:591 +msgid "Author" +msgstr "" + +#: ../pidgin/gtkplugin.c:669 +msgid "<b>Written by:</b>" +msgstr "" + +#: ../pidgin/gtkplugin.c:689 +msgid "<b>Web site:</b>" +msgstr "" + +#: ../pidgin/gtkplugin.c:698 +msgid "<b>Filename:</b>" +msgstr "" + +#: ../pidgin/gtkplugin.c:725 +msgid "Configure Pl_ugin" +msgstr "" + +#: ../pidgin/gtkplugin.c:787 +msgid "<b>Plugin Details</b>" +msgstr "" + +#: ../pidgin/gtkpounce.c:158 +msgid "Select a file" +msgstr "" + +#: ../pidgin/gtkpounce.c:535 +msgid "Modify Buddy Pounce" +msgstr "" + +#. Create the "Pounce on Whom" frame. +#: ../pidgin/gtkpounce.c:550 +msgid "Pounce on Whom" +msgstr "" + +#: ../pidgin/gtkpounce.c:557 ../pidgin/gtkroomlist.c:548 +#: ../pidgin/plugins/disco/gtkdisco.c:653 +msgid "_Account:" +msgstr "" + +#: ../pidgin/gtkpounce.c:577 +msgid "_Buddy name:" +msgstr "" + +#: ../pidgin/gtkpounce.c:611 +msgid "Si_gns on" +msgstr "" + +#: ../pidgin/gtkpounce.c:613 +msgid "Signs o_ff" +msgstr "" + +#: ../pidgin/gtkpounce.c:615 +msgid "Goes a_way" +msgstr "" + +#: ../pidgin/gtkpounce.c:617 +msgid "Ret_urns from away" +msgstr "" + +#: ../pidgin/gtkpounce.c:619 +msgid "Becomes _idle" +msgstr "" + +#: ../pidgin/gtkpounce.c:621 +msgid "Is no longer i_dle" +msgstr "" + +#: ../pidgin/gtkpounce.c:623 +msgid "Starts _typing" +msgstr "" + +#: ../pidgin/gtkpounce.c:625 +msgid "P_auses while typing" +msgstr "" + +#: ../pidgin/gtkpounce.c:627 +msgid "Stops t_yping" +msgstr "" + +#: ../pidgin/gtkpounce.c:629 +msgid "Sends a _message" +msgstr "" + +#: ../pidgin/gtkpounce.c:672 +msgid "Ope_n an IM window" +msgstr "" + +#: ../pidgin/gtkpounce.c:674 +msgid "_Pop up a notification" +msgstr "" + +#: ../pidgin/gtkpounce.c:676 +msgid "Send a _message" +msgstr "" + +#: ../pidgin/gtkpounce.c:678 +msgid "E_xecute a command" +msgstr "" + +#: ../pidgin/gtkpounce.c:680 +msgid "P_lay a sound" +msgstr "" + +#: ../pidgin/gtkpounce.c:686 +msgid "Brows_e..." +msgstr "" + +#: ../pidgin/gtkpounce.c:690 +msgid "Br_owse..." +msgstr "" + +#: ../pidgin/gtkpounce.c:691 ../pidgin/gtkprefs.c:2625 +msgid "Pre_view" +msgstr "" + +#: ../pidgin/gtkpounce.c:831 +msgid "P_ounce only when my status is not Available" +msgstr "" + +#: ../pidgin/gtkpounce.c:836 +msgid "_Recurring" +msgstr "" + +#: ../pidgin/gtkpounce.c:1256 +msgid "Pounce Target" +msgstr "" + +#: ../pidgin/gtkpounce.c:1430 +msgid "Started typing" +msgstr "" + +#: ../pidgin/gtkpounce.c:1432 +msgid "Paused while typing" +msgstr "" + +#: ../pidgin/gtkpounce.c:1434 +msgid "Signed on" +msgstr "" + +#: ../pidgin/gtkpounce.c:1436 +msgid "Returned from being idle" +msgstr "" + +#: ../pidgin/gtkpounce.c:1438 +msgid "Returned from being away" +msgstr "" + +#: ../pidgin/gtkpounce.c:1440 +msgid "Stopped typing" +msgstr "" + +#: ../pidgin/gtkpounce.c:1442 +msgid "Signed off" +msgstr "" + +#: ../pidgin/gtkpounce.c:1444 +msgid "Became idle" +msgstr "" + +#: ../pidgin/gtkpounce.c:1446 +msgid "Went away" +msgstr "" + +#: ../pidgin/gtkpounce.c:1448 +msgid "Sent a message" +msgstr "" + +#: ../pidgin/gtkpounce.c:1449 +msgid "Unknown.... Please report this!" +msgstr "" + +#: ../pidgin/gtkprefs.c:358 +msgid "(Custom)" +msgstr "" + +#: ../pidgin/gtkprefs.c:423 ../pidgin/gtkprefs.c:543 ../pidgin/gtkprefs.c:551 +#: ../pidgin/pixmaps/emotes/none/none.theme.in.h:1 +msgid "Penguin Pimps" +msgstr "" + +#: ../pidgin/gtkprefs.c:424 +msgid "The default Pidgin sound theme" +msgstr "" + +#: ../pidgin/gtkprefs.c:544 +msgid "The default Pidgin buddy list theme" +msgstr "" + +#: ../pidgin/gtkprefs.c:552 +msgid "The default Pidgin status icon theme" +msgstr "" + +#: ../pidgin/gtkprefs.c:691 ../pidgin/gtkprefs.c:699 +msgid "Theme failed to unpack." +msgstr "" + +#: ../pidgin/gtkprefs.c:740 ../pidgin/gtkprefs.c:781 +msgid "Theme failed to load." +msgstr "" + +#: ../pidgin/gtkprefs.c:784 +msgid "Theme failed to copy." +msgstr "" + +#: ../pidgin/gtkprefs.c:1085 +msgid "Theme Selections" +msgstr "" + +#. Instructions +#: ../pidgin/gtkprefs.c:1088 +msgid "" +"Select a theme that you would like to use from the lists below.\n" +"New themes can be installed by dragging and dropping them onto the theme list." +msgstr "" + +#: ../pidgin/gtkprefs.c:1102 +msgid "Buddy List Theme:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1108 +msgid "Status Icon Theme:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1114 +msgid "Sound Theme:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1120 +msgid "Smiley Theme:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1293 +msgid "Keyboard Shortcuts" +msgstr "" + +#: ../pidgin/gtkprefs.c:1313 +msgid "Cl_ose conversations with the Escape key" +msgstr "" + +#. System Tray +#: ../pidgin/gtkprefs.c:1343 +msgid "System Tray Icon" +msgstr "" + +#: ../pidgin/gtkprefs.c:1344 +msgid "_Show system tray icon:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1347 +msgid "On unread messages" +msgstr "" + +#: ../pidgin/gtkprefs.c:1353 +msgid "Conversation Window" +msgstr "" + +#: ../pidgin/gtkprefs.c:1354 +msgid "_Hide new IM conversations:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1357 ../pidgin/gtkprefs.c:2712 +msgid "When away" +msgstr "" + +#: ../pidgin/gtkprefs.c:1364 +msgid "Minimi_ze new conversation windows" +msgstr "" + +#. All the tab options! +#: ../pidgin/gtkprefs.c:1368 +msgid "Tabs" +msgstr "" + +#: ../pidgin/gtkprefs.c:1370 +msgid "Show IMs and chats in _tabbed windows" +msgstr "" + +#: ../pidgin/gtkprefs.c:1384 +msgid "Show close b_utton on tabs" +msgstr "" + +#: ../pidgin/gtkprefs.c:1387 +msgid "_Placement:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1389 +msgid "Top" +msgstr "" + +#: ../pidgin/gtkprefs.c:1390 +msgid "Bottom" +msgstr "" + +#: ../pidgin/gtkprefs.c:1391 +msgid "Left" +msgstr "" + +#: ../pidgin/gtkprefs.c:1392 +msgid "Right" +msgstr "" + +#: ../pidgin/gtkprefs.c:1393 +msgid "Left Vertical" +msgstr "" + +#: ../pidgin/gtkprefs.c:1394 +msgid "Right Vertical" +msgstr "" + +#: ../pidgin/gtkprefs.c:1400 +msgid "N_ew conversations:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1460 +msgid "Show _formatting on incoming messages" +msgstr "" + +#: ../pidgin/gtkprefs.c:1462 +msgid "Close IMs immediately when the tab is closed" +msgstr "" + +#: ../pidgin/gtkprefs.c:1465 +msgid "Show _detailed information" +msgstr "" + +#: ../pidgin/gtkprefs.c:1467 +msgid "Enable buddy ic_on animation" +msgstr "" + +#: ../pidgin/gtkprefs.c:1474 +msgid "_Notify buddies that you are typing to them" +msgstr "" + +#: ../pidgin/gtkprefs.c:1477 +msgid "Highlight _misspelled words" +msgstr "" + +#: ../pidgin/gtkprefs.c:1481 +msgid "Use smooth-scrolling" +msgstr "" + +#: ../pidgin/gtkprefs.c:1484 +msgid "F_lash window when IMs are received" +msgstr "" + +#: ../pidgin/gtkprefs.c:1488 +msgid "Resize incoming custom smileys" +msgstr "" + +#: ../pidgin/gtkprefs.c:1492 +msgid "Maximum size:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1506 +msgid "Minimum input area height in lines:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1514 +msgid "Font" +msgstr "" + +#: ../pidgin/gtkprefs.c:1516 +msgid "Use font from _theme" +msgstr "" + +#: ../pidgin/gtkprefs.c:1527 +msgid "Conversation _font:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1537 +msgid "Default Formatting" +msgstr "" + +#: ../pidgin/gtkprefs.c:1555 +msgid "" +"This is how your outgoing message text will appear when you use protocols " +"that support formatting." +msgstr "" + +#: ../pidgin/gtkprefs.c:1657 +msgid "Cannot start proxy configuration program." +msgstr "" + +#: ../pidgin/gtkprefs.c:1670 +msgid "Cannot start browser configuration program." +msgstr "" + +#: ../pidgin/gtkprefs.c:1705 +msgid "Disabled" +msgstr "" + +#: ../pidgin/gtkprefs.c:1707 +#, c-format +msgid "Use _automatically detected IP address: %s" +msgstr "" + +#: ../pidgin/gtkprefs.c:1733 +msgid "ST_UN server:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1745 +msgid "<span style=\"italic\">Example: stunserver.org</span>" +msgstr "" + +#: ../pidgin/gtkprefs.c:1760 +msgid "Public _IP:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1772 +msgid "Ports" +msgstr "" + +#: ../pidgin/gtkprefs.c:1775 +msgid "_Enable automatic router port forwarding" +msgstr "" + +#: ../pidgin/gtkprefs.c:1780 +msgid "_Manually specify range of ports to listen on:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1783 +msgid "_Start:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1790 +msgid "_End:" +msgstr "" + +#. TURN server +#: ../pidgin/gtkprefs.c:1802 +msgid "Relay Server (TURN)" +msgstr "" + +#: ../pidgin/gtkprefs.c:1812 +msgid "_TURN server:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1815 +msgid "_UDP Port:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1818 +msgid "T_CP Port:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1821 +msgid "Use_rname:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1823 +msgid "Pass_word:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1854 +msgid "Seamonkey" +msgstr "" + +#: ../pidgin/gtkprefs.c:1855 +msgid "Opera" +msgstr "" + +#: ../pidgin/gtkprefs.c:1856 +msgid "Netscape" +msgstr "" + +#: ../pidgin/gtkprefs.c:1857 +msgid "Mozilla" +msgstr "" + +#: ../pidgin/gtkprefs.c:1858 +msgid "Konqueror" +msgstr "" + +#: ../pidgin/gtkprefs.c:1859 +msgid "Google Chrome" +msgstr "" + +#. Do not move the line below. Code below expects gnome-open to be in +#. * this list immediately after xdg-open! +#: ../pidgin/gtkprefs.c:1862 +msgid "Desktop Default" +msgstr "" + +#: ../pidgin/gtkprefs.c:1863 +msgid "GNOME Default" +msgstr "" + +#: ../pidgin/gtkprefs.c:1864 +msgid "Galeon" +msgstr "" + +#: ../pidgin/gtkprefs.c:1865 +msgid "Firefox" +msgstr "" + +#: ../pidgin/gtkprefs.c:1866 +msgid "Firebird" +msgstr "" + +#: ../pidgin/gtkprefs.c:1867 +msgid "Epiphany" +msgstr "" + +#. Translators: please do not translate "chromium-browser" here! +#: ../pidgin/gtkprefs.c:1869 +msgid "Chromium (chromium-browser)" +msgstr "" + +#. Translators: please do not translate "chrome" here! +#: ../pidgin/gtkprefs.c:1871 +msgid "Chromium (chrome)" +msgstr "" + +#: ../pidgin/gtkprefs.c:1880 +msgid "Manual" +msgstr "" + +#: ../pidgin/gtkprefs.c:1936 +msgid "Browser Selection" +msgstr "" + +#: ../pidgin/gtkprefs.c:1942 +msgid "Browser preferences are configured in GNOME preferences" +msgstr "" + +#: ../pidgin/gtkprefs.c:1961 +msgid "<b>Browser configuration program was not found.</b>" +msgstr "" + +#: ../pidgin/gtkprefs.c:1964 +msgid "Configure _Browser" +msgstr "" + +#: ../pidgin/gtkprefs.c:1977 +msgid "_Browser:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1985 +msgid "_Open link in:" +msgstr "" + +#: ../pidgin/gtkprefs.c:1987 +msgid "Browser default" +msgstr "" + +#: ../pidgin/gtkprefs.c:1988 +msgid "Existing window" +msgstr "" + +#: ../pidgin/gtkprefs.c:1990 +msgid "New tab" +msgstr "" + +#: ../pidgin/gtkprefs.c:2007 +#, c-format +msgid "" +"_Manual:\n" +"(%s for URL)" +msgstr "" + +#: ../pidgin/gtkprefs.c:2031 +msgid "Proxy Server" +msgstr "" + +#: ../pidgin/gtkprefs.c:2038 +msgid "Proxy preferences are configured in GNOME preferences" +msgstr "" + +#: ../pidgin/gtkprefs.c:2060 +msgid "<b>Proxy configuration program was not found.</b>" +msgstr "" + +#: ../pidgin/gtkprefs.c:2063 +msgid "Configure _Proxy" +msgstr "" + +#. This is a global option that affects SOCKS4 usage even with +#. * account-specific proxy settings +#: ../pidgin/gtkprefs.c:2078 +msgid "Use remote _DNS with SOCKS4 proxies" +msgstr "" + +#: ../pidgin/gtkprefs.c:2082 +msgid "Proxy t_ype:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2084 +msgid "No proxy" +msgstr "" + +#: ../pidgin/gtkprefs.c:2123 +msgid "P_ort:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2139 +msgid "User_name:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2200 +msgid "Log _format:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2205 +msgid "Log all _instant messages" +msgstr "" + +#: ../pidgin/gtkprefs.c:2207 +msgid "Log all c_hats" +msgstr "" + +#: ../pidgin/gtkprefs.c:2209 +msgid "Log all _status changes to system log" +msgstr "" + +#: ../pidgin/gtkprefs.c:2366 +msgid "Sound Selection" +msgstr "" + +#: ../pidgin/gtkprefs.c:2377 +#, c-format +msgid "Quietest" +msgstr "" + +#: ../pidgin/gtkprefs.c:2379 +#, c-format +msgid "Quieter" +msgstr "" + +#: ../pidgin/gtkprefs.c:2381 +#, c-format +msgid "Quiet" +msgstr "" + +#: ../pidgin/gtkprefs.c:2385 +#, c-format +msgid "Loud" +msgstr "" + +#: ../pidgin/gtkprefs.c:2387 +#, c-format +msgid "Louder" +msgstr "" + +#: ../pidgin/gtkprefs.c:2389 +#, c-format +msgid "Loudest" +msgstr "" + +#: ../pidgin/gtkprefs.c:2480 +msgid "_Method:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2482 +msgid "Console beep" +msgstr "" + +#: ../pidgin/gtkprefs.c:2489 +msgid "No sounds" +msgstr "" + +#: ../pidgin/gtkprefs.c:2502 +#, c-format +msgid "" +"Sound c_ommand:\n" +"(%s for filename)" +msgstr "" + +#: ../pidgin/gtkprefs.c:2510 +msgid "M_ute sounds" +msgstr "" + +#: ../pidgin/gtkprefs.c:2513 +msgid "Sounds when conversation has _focus" +msgstr "" + +#: ../pidgin/gtkprefs.c:2515 +msgid "_Enable sounds:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2532 +msgid "V_olume:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2593 +msgid "Play" +msgstr "" + +#: ../pidgin/gtkprefs.c:2621 +msgid "_Browse..." +msgstr "" + +#: ../pidgin/gtkprefs.c:2629 +msgid "_Reset" +msgstr "" + +#: ../pidgin/gtkprefs.c:2673 +msgid "_Report idle time:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2678 +msgid "Based on keyboard or mouse use" +msgstr "" + +#: ../pidgin/gtkprefs.c:2685 +msgid "_Minutes before becoming idle:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2691 +msgid "Change to this status when _idle:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2709 +msgid "_Auto-reply:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2713 +msgid "When both away and idle" +msgstr "" + +#. Signon status stuff +#: ../pidgin/gtkprefs.c:2719 +msgid "Status at Startup" +msgstr "" + +#: ../pidgin/gtkprefs.c:2721 +msgid "Use status from last _exit at startup" +msgstr "" + +#: ../pidgin/gtkprefs.c:2730 +msgid "Status to a_pply at startup:" +msgstr "" + +#: ../pidgin/gtkprefs.c:2754 +msgid "Interface" +msgstr "" + +#: ../pidgin/gtkprefs.c:2760 +msgid "Browser" +msgstr "" + +#: ../pidgin/gtkprefs.c:2769 +msgid "Status / Idle" +msgstr "" + +#: ../pidgin/gtkprefs.c:2770 +msgid "Themes" +msgstr "" + +#: ../pidgin/gtkprivacy.c:81 +msgid "Allow all users to contact me" +msgstr "" + +#: ../pidgin/gtkprivacy.c:82 +msgid "Allow only the users on my buddy list" +msgstr "" + +#: ../pidgin/gtkprivacy.c:83 +msgid "Allow only the users below" +msgstr "" + +#: ../pidgin/gtkprivacy.c:84 +msgid "Block all users" +msgstr "" + +#: ../pidgin/gtkprivacy.c:85 +msgid "Block only the users below" +msgstr "" + +#: ../pidgin/gtkprivacy.c:343 +msgid "Privacy" +msgstr "" + +#: ../pidgin/gtkprivacy.c:353 +msgid "Changes to privacy settings take effect immediately." +msgstr "" + +#: ../pidgin/gtkprivacy.c:362 +msgid "Set privacy for:" +msgstr "" + +#. Remove All button +#: ../pidgin/gtkprivacy.c:405 +msgid "Remove Al_l" +msgstr "" + +#: ../pidgin/gtkprivacy.c:491 ../pidgin/gtkprivacy.c:508 +msgid "Permit User" +msgstr "" + +#: ../pidgin/gtkprivacy.c:492 +msgid "Type a user you permit to contact you." +msgstr "" + +#: ../pidgin/gtkprivacy.c:493 +msgid "Please enter the name of the user you wish to be able to contact you." +msgstr "" + +#: ../pidgin/gtkprivacy.c:496 ../pidgin/gtkprivacy.c:512 +msgid "_Permit" +msgstr "" + +#: ../pidgin/gtkprivacy.c:502 +#, c-format +msgid "Allow %s to contact you?" +msgstr "" + +#: ../pidgin/gtkprivacy.c:504 +#, c-format +msgid "Are you sure you wish to allow %s to contact you?" +msgstr "" + +#: ../pidgin/gtkprivacy.c:533 ../pidgin/gtkprivacy.c:547 +msgid "Block User" +msgstr "" + +#: ../pidgin/gtkprivacy.c:534 +msgid "Type a user to block." +msgstr "" + +#: ../pidgin/gtkprivacy.c:535 +msgid "Please enter the name of the user you wish to block." +msgstr "" + +#: ../pidgin/gtkprivacy.c:543 +#, c-format +msgid "Block %s?" +msgstr "" + +#: ../pidgin/gtkprivacy.c:545 +#, c-format +msgid "Are you sure you want to block %s?" +msgstr "" + +#: ../pidgin/gtkrequest.c:302 +msgid "Apply" +msgstr "" + +#: ../pidgin/gtkrequest.c:1552 +msgid "That file already exists" +msgstr "" + +#: ../pidgin/gtkrequest.c:1553 +msgid "Would you like to overwrite it?" +msgstr "" + +#: ../pidgin/gtkrequest.c:1556 +msgid "Overwrite" +msgstr "" + +#: ../pidgin/gtkrequest.c:1557 +msgid "Choose New Name" +msgstr "" + +#: ../pidgin/gtkrequest.c:1656 +msgid "Select Folder..." +msgstr "" + +#. list button +#: ../pidgin/gtkroomlist.c:571 +msgid "_Get List" +msgstr "" + +#. add button +#: ../pidgin/gtkroomlist.c:579 +msgid "_Add Chat" +msgstr "" + +#: ../pidgin/gtksavedstatuses.c:309 +msgid "Are you sure you want to delete the selected saved statuses?" +msgstr "" + +#. Use button +#: ../pidgin/gtksavedstatuses.c:584 ../pidgin/gtksavedstatuses.c:1212 +msgid "_Use" +msgstr "" + +#: ../pidgin/gtksavedstatuses.c:728 +msgid "Title already in use. You must choose a unique title." +msgstr "" + +#: ../pidgin/gtksavedstatuses.c:941 +msgid "Different" +msgstr "" + +#: ../pidgin/gtksavedstatuses.c:1139 +msgid "_Title:" +msgstr "" + +#: ../pidgin/gtksavedstatuses.c:1147 ../pidgin/gtksavedstatuses.c:1431 +msgid "_Status:" +msgstr "" + +#. Different status message expander +#: ../pidgin/gtksavedstatuses.c:1165 +msgid "Use a _different status for some accounts" +msgstr "" + +#. Save & Use button +#: ../pidgin/gtksavedstatuses.c:1219 +msgid "Sa_ve & Use" +msgstr "" + +#: ../pidgin/gtksavedstatuses.c:1415 +#, c-format +msgid "Status for %s" +msgstr "" + +#: ../pidgin/gtksmiley.c:236 +#, c-format +msgid "" +"A custom smiley for '%s' already exists. Please use a different shortcut." +msgstr "" + +#: ../pidgin/gtksmiley.c:238 ../pidgin/gtksmiley.c:351 +msgid "Custom Smiley" +msgstr "" + +#: ../pidgin/gtksmiley.c:239 +msgid "Duplicate Shortcut" +msgstr "" + +#: ../pidgin/gtksmiley.c:400 +msgid "Edit Smiley" +msgstr "" + +#: ../pidgin/gtksmiley.c:400 +msgid "Add Smiley" +msgstr "" + +#: ../pidgin/gtksmiley.c:424 +msgid "_Image:" +msgstr "" + +#. Shortcut text +#: ../pidgin/gtksmiley.c:455 +msgid "S_hortcut text:" +msgstr "" + +#: ../pidgin/gtksmiley.c:569 +msgid "Smiley" +msgstr "" + +#: ../pidgin/gtksmiley.c:579 +msgid "Shortcut Text" +msgstr "" + +#: ../pidgin/gtksmiley.c:864 +msgid "Custom Smiley Manager" +msgstr "" + +#: ../pidgin/gtkstatusbox.c:322 +msgid "Select Buddy Icon" +msgstr "" + +#: ../pidgin/gtkstatusbox.c:455 +msgid "Click to change your buddyicon for this account." +msgstr "" + +#: ../pidgin/gtkstatusbox.c:456 +msgid "Click to change your buddyicon for all accounts." +msgstr "" + +#: ../pidgin/gtkstatusbox.c:718 +msgid "Waiting for network connection" +msgstr "" + +#: ../pidgin/gtkstatusbox.c:1106 +msgid "New status..." +msgstr "" + +#: ../pidgin/gtkstatusbox.c:1107 +msgid "Saved statuses..." +msgstr "" + +#: ../pidgin/gtkstatusbox.c:1771 +msgid "Status Selector" +msgstr "" + +#: ../pidgin/gtkutils.c:690 +msgid "Google Talk" +msgstr "" + +#: ../pidgin/gtkutils.c:691 +msgid "Facebook (XMPP)" +msgstr "" + +#: ../pidgin/gtkutils.c:1475 ../pidgin/gtkutils.c:1504 +#, c-format +msgid "The following error has occurred loading %s: %s" +msgstr "" + +#: ../pidgin/gtkutils.c:1478 ../pidgin/gtkutils.c:1506 +msgid "Failed to load image" +msgstr "" + +#: ../pidgin/gtkutils.c:1582 +#, c-format +msgid "Cannot send folder %s." +msgstr "" + +#: ../pidgin/gtkutils.c:1583 +#, c-format +msgid "" +"%s cannot transfer a folder. You will need to send the files within " +"individually." +msgstr "" + +#: ../pidgin/gtkutils.c:1616 ../pidgin/gtkutils.c:1628 +#: ../pidgin/gtkutils.c:1635 +msgid "You have dragged an image" +msgstr "" + +#: ../pidgin/gtkutils.c:1617 +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 "" + +#: ../pidgin/gtkutils.c:1623 ../pidgin/gtkutils.c:1643 +msgid "Set as buddy icon" +msgstr "" + +#: ../pidgin/gtkutils.c:1624 ../pidgin/gtkutils.c:1644 +msgid "Send image file" +msgstr "" + +#: ../pidgin/gtkutils.c:1625 ../pidgin/gtkutils.c:1644 +msgid "Insert in message" +msgstr "" + +#: ../pidgin/gtkutils.c:1629 +msgid "Would you like to set it as the buddy icon for this user?" +msgstr "" + +#: ../pidgin/gtkutils.c:1636 +msgid "" +"You can send this image as a file transfer, or use it as the buddy icon for " +"this user." +msgstr "" + +#: ../pidgin/gtkutils.c:1637 +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 +#: ../pidgin/gtkutils.c:1694 +msgid "Cannot send launcher" +msgstr "" + +#: ../pidgin/gtkutils.c:1695 +msgid "" +"You dragged a desktop launcher. Most likely you wanted to send the target of" +" this launcher instead of this launcher itself." +msgstr "" + +#: ../pidgin/gtkutils.c:2275 +#, c-format +msgid "" +"<b>File:</b> %s\n" +"<b>File size:</b> %s\n" +"<b>Image size:</b> %dx%d" +msgstr "" + +#: ../pidgin/gtkutils.c:2520 +#, c-format +msgid "The file '%s' is too large for %s. Please try a smaller image.\n" +msgstr "" + +#: ../pidgin/gtkutils.c:2522 +msgid "Icon Error" +msgstr "" + +#: ../pidgin/gtkutils.c:2522 +msgid "Could not set icon" +msgstr "" + +#: ../pidgin/gtkutils.c:3233 +msgid "_Open Link" +msgstr "" + +#: ../pidgin/gtkutils.c:3240 +msgid "_Copy Link Location" +msgstr "" + +#: ../pidgin/gtkutils.c:3262 +msgid "_Copy Email Address" +msgstr "" + +#: ../pidgin/gtkutils.c:3384 +msgid "_Open File" +msgstr "" + +#: ../pidgin/gtkutils.c:3391 +msgid "Open _Containing Directory" +msgstr "" + +#: ../pidgin/gtkutils.c:3440 ../pidgin/gtkwhiteboard.c:754 +msgid "Save File" +msgstr "" + +#: ../pidgin/gtkutils.c:3460 +msgid "_Play Sound" +msgstr "" + +#: ../pidgin/gtkutils.c:3468 +msgid "_Save File" +msgstr "" + +#: ../pidgin/gtkwhiteboard.c:730 +msgid "Do you really want to clear?" +msgstr "" + +#: ../pidgin/gtkwhiteboard.c:857 +msgid "Select color" +msgstr "" + +#. Translators may want to transliterate the name. +#. It is not to be translated. +#: ../pidgin/pidgin.h:51 +msgid "Pidgin" +msgstr "" + +#: ../pidgin/pidginstock.c:83 +msgid "_Alias" +msgstr "" + +#: ../pidgin/pidginstock.c:85 +msgid "Close _tabs" +msgstr "" + +#: ../pidgin/pidginstock.c:87 +msgid "_Get Info" +msgstr "" + +#: ../pidgin/pidginstock.c:88 +msgid "_Invite" +msgstr "" + +#: ../pidgin/pidginstock.c:89 +msgid "_Modify..." +msgstr "" + +#: ../pidgin/pidginstock.c:90 +msgid "_Add..." +msgstr "" + +#: ../pidgin/pidginstock.c:91 +msgid "_Open Mail" +msgstr "" + +#: ../pidgin/pidginstock.c:93 +msgid "_Edit" +msgstr "" + +#: ../pidgin/pidgintooltip.c:124 +msgid "Pidgin Tooltip" +msgstr "" + +#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:2 +msgid "Pidgin smileys" +msgstr "" + +#: ../pidgin/pixmaps/emotes/none/none.theme.in.h:2 +msgid "Selecting this disables graphical emoticons." +msgstr "" + +#: ../pidgin/pixmaps/emotes/none/none.theme.in.h:3 +msgid "none" +msgstr "" + +#: ../pidgin/pixmaps/emotes/small/16/small.theme.in.h:1 +msgid "Small" +msgstr "" + +#: ../pidgin/pixmaps/emotes/small/16/small.theme.in.h:2 +msgid "Smaller versions of the default smileys" +msgstr "" + +#: ../pidgin/plugins/cap/cap.c:446 ../pidgin/plugins/cap/cap.c:449 +msgid "Response Probability:" +msgstr "" + +#: ../pidgin/plugins/cap/cap.c:774 +msgid "Statistics Configuration" +msgstr "" + +#. msg_difference spinner +#: ../pidgin/plugins/cap/cap.c:777 +msgid "Maximum response timeout:" +msgstr "" + +#: ../pidgin/plugins/cap/cap.c:780 ../pidgin/plugins/cap/cap.c:787 +#: ../pidgin/plugins/cap/cap.c:794 ../pidgin/plugins/timestamp.c:156 +msgid "minutes" +msgstr "" + +#. last_seen spinner +#: ../pidgin/plugins/cap/cap.c:784 +msgid "Maximum last-seen difference:" +msgstr "" + +#. threshold spinner +#: ../pidgin/plugins/cap/cap.c:791 +msgid "Threshold:" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/cap/cap.c:899 +msgid "Contact Availability Prediction" +msgstr "" + +#. *< name +#. *< version +#: ../pidgin/plugins/cap/cap.c:901 +msgid "Contact Availability Prediction plugin." +msgstr "" + +#. * summary +#: ../pidgin/plugins/cap/cap.c:902 +msgid "Displays statistical information about your buddies' availability" +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:61 +msgid "Buddy is idle" +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:62 +msgid "Buddy is away" +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:63 +msgid "Buddy is \"extended\" away" +msgstr "" + +#. Not used yet. +#: ../pidgin/plugins/contact_priority.c:66 +msgid "Buddy is mobile" +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:68 +msgid "Buddy is offline" +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:90 +msgid "Point values to use when..." +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:118 +msgid "" +"The buddy with the <i>largest score</i> is the buddy who will have priority " +"in the contact.\n" +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:125 +msgid "Use last buddy when scores are equal" +msgstr "" + +#: ../pidgin/plugins/contact_priority.c:130 +msgid "Point values to use for account..." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/contact_priority.c:188 +msgid "Contact Priority" +msgstr "" + +#. *< name +#. *< version +#. *< summary +#: ../pidgin/plugins/contact_priority.c:191 +msgid "" +"Allows for controlling the values associated with different buddy states." +msgstr "" + +#. *< description +#: ../pidgin/plugins/contact_priority.c:193 +msgid "" +"Allows for changing the point values of idle/away/offline states for buddies" +" in contact priority computations." +msgstr "" + +#: ../pidgin/plugins/convcolors.c:23 +msgid "Conversation Colors" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:25 ../pidgin/plugins/convcolors.c:26 +msgid "Customize colors in the conversation window" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:87 +msgid "Error Messages" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:88 +msgid "Highlighted Messages" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:89 +msgid "System Messages" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:90 +msgid "Sent Messages" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:91 +msgid "Received Messages" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:232 ../pidgin/plugins/pidginrc.c:271 +#, c-format +msgid "Select Color for %s" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:388 +msgid "Ignore incoming format" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:389 +msgid "Apply in Chats" +msgstr "" + +#: ../pidgin/plugins/convcolors.c:390 +msgid "Apply in IMs" +msgstr "" + +#. Note to translators: The string "Enter an XMPP Server" is asking the +#. user to type the name of an XMPP server which will then be queried +#: ../pidgin/plugins/disco/gtkdisco.c:242 +msgid "Server name request" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:242 +msgid "Enter an XMPP Server" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:243 +msgid "Select an XMPP server to query" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:245 +msgid "Find Services" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:302 +msgid "Add to Buddy List" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:474 +msgid "Gateway" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:478 +msgid "Directory" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:486 +msgid "PubSub Collection" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:490 +msgid "PubSub Leaf" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:494 +msgid "Other" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:502 +msgid "" +"\n" +"<b>Description:</b> " +msgstr "" + +#. Create the window. +#: ../pidgin/plugins/disco/gtkdisco.c:637 +msgid "Service Discovery" +msgstr "" + +#: ../pidgin/plugins/disco/gtkdisco.c:678 +msgid "_Browse" +msgstr "" + +#: ../pidgin/plugins/disco/xmppdisco.c:515 +msgid "Server does not exist" +msgstr "" + +#: ../pidgin/plugins/disco/xmppdisco.c:520 +msgid "Server does not support service discovery" +msgstr "" + +#: ../pidgin/plugins/disco/xmppdisco.c:600 +#: ../pidgin/plugins/disco/xmppdisco.c:659 +msgid "XMPP Service Discovery" +msgstr "" + +#: ../pidgin/plugins/disco/xmppdisco.c:661 +msgid "Allows browsing and registering services." +msgstr "" + +#: ../pidgin/plugins/disco/xmppdisco.c:662 +msgid "" +"This plugin is useful for registering with legacy transports or other XMPP " +"services." +msgstr "" + +#: ../pidgin/plugins/extplacement.c:80 +msgid "By conversation count" +msgstr "" + +#: ../pidgin/plugins/extplacement.c:101 +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 +#: ../pidgin/plugins/extplacement.c:105 +msgid "" +"Note: The preference for \"New conversations\" must be set to \"By " +"conversation count\"." +msgstr "" + +#: ../pidgin/plugins/extplacement.c:111 +msgid "Number of conversations per window" +msgstr "" + +#: ../pidgin/plugins/extplacement.c:117 +msgid "Separate IM and Chat windows when placing by number" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/extplacement.c:146 +msgid "ExtPlacement" +msgstr "" + +#. *< name +#. *< version +#: ../pidgin/plugins/extplacement.c:148 +msgid "Extra conversation placement options." +msgstr "" + +#. *< summary +#. * description +#: ../pidgin/plugins/extplacement.c:150 +msgid "" +"Restrict the number of conversations per windows, optionally separating IMs " +"and Chats" +msgstr "" + +#. Configuration frame +#: ../pidgin/plugins/gestures/gestures.c:243 +msgid "Mouse Gestures Configuration" +msgstr "" + +#: ../pidgin/plugins/gestures/gestures.c:250 +#: ../pidgin/plugins/gestures/gestures.c:263 +msgid "Middle mouse button" +msgstr "" + +#: ../pidgin/plugins/gestures/gestures.c:251 +#: ../pidgin/plugins/gestures/gestures.c:268 +msgid "Right mouse button" +msgstr "" + +#. "Visual gesture display" checkbox +#: ../pidgin/plugins/gestures/gestures.c:281 +msgid "_Visual gesture display" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/gestures/gestures.c:317 +msgid "Mouse Gestures" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/gestures/gestures.c:320 +msgid "Provides support for mouse gestures" +msgstr "" + +#. * description +#: ../pidgin/plugins/gestures/gestures.c:322 +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 "" + +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:142 +msgid "Instant Messaging" +msgstr "" + +#. Add the label. +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:463 +msgid "Select a person from your address book below, or add a new person." +msgstr "" + +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:547 +#: ../pidgin/plugins/gevolution/new_person_dialog.c:299 +msgid "Group:" +msgstr "" + +#. "New Person" button +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:566 +#: ../pidgin/plugins/gevolution/assoc-buddy.c:450 +#: ../pidgin/plugins/gevolution/new_person_dialog.c:246 +msgid "New Person" +msgstr "" + +#. "Select Buddy" button +#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:583 +msgid "Select Buddy" +msgstr "" + +#. Add the label. +#: ../pidgin/plugins/gevolution/assoc-buddy.c:343 +msgid "" +"Select a person from your address book to add this buddy to, or create a new" +" person." +msgstr "" + +#. Add the expander +#: ../pidgin/plugins/gevolution/assoc-buddy.c:423 +msgid "User _details" +msgstr "" + +#. "Associate Buddy" button +#: ../pidgin/plugins/gevolution/assoc-buddy.c:467 +msgid "_Associate Buddy" +msgstr "" + +#: ../pidgin/plugins/gevolution/gevolution.c:251 +#: ../pidgin/plugins/gevolution/gevolution.c:257 +msgid "Unable to send email" +msgstr "" + +#: ../pidgin/plugins/gevolution/gevolution.c:252 +msgid "The evolution executable was not found in the PATH." +msgstr "" + +#: ../pidgin/plugins/gevolution/gevolution.c:258 +msgid "An email address was not found for this buddy." +msgstr "" + +#: ../pidgin/plugins/gevolution/gevolution.c:284 +msgid "Add to Address Book" +msgstr "" + +#: ../pidgin/plugins/gevolution/gevolution.c:296 +msgid "Send Email" +msgstr "" + +#. Configuration frame +#: ../pidgin/plugins/gevolution/gevolution.c:432 +msgid "Evolution Integration Configuration" +msgstr "" + +#. Label +#: ../pidgin/plugins/gevolution/gevolution.c:435 +msgid "Select all accounts that buddies should be auto-added to." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/gevolution/gevolution.c:538 +msgid "Evolution Integration" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../pidgin/plugins/gevolution/gevolution.c:541 +#: ../pidgin/plugins/gevolution/gevolution.c:543 +msgid "Provides integration with Evolution." +msgstr "" + +#: ../pidgin/plugins/gevolution/new_person_dialog.c:260 +msgid "Please enter the person's information below." +msgstr "" + +#: ../pidgin/plugins/gevolution/new_person_dialog.c:264 +msgid "Please enter the buddy's username and account type below." +msgstr "" + +#: ../pidgin/plugins/gevolution/new_person_dialog.c:284 +msgid "Account type:" +msgstr "" + +#. Optional Information section +#: ../pidgin/plugins/gevolution/new_person_dialog.c:308 +msgid "Optional information:" +msgstr "" + +#: ../pidgin/plugins/gevolution/new_person_dialog.c:343 +msgid "First name:" +msgstr "" + +#: ../pidgin/plugins/gevolution/new_person_dialog.c:355 +msgid "Last name:" +msgstr "" + +#: ../pidgin/plugins/gevolution/new_person_dialog.c:375 +msgid "Email:" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/gtk-signals-test.c:161 +msgid "GTK Signals Test" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../pidgin/plugins/gtk-signals-test.c:164 +#: ../pidgin/plugins/gtk-signals-test.c:166 +msgid "Test to see that all ui signals are working properly." +msgstr "" + +#: ../pidgin/plugins/gtkbuddynote.c:38 +#, c-format +msgid "" +"\n" +"<b>Buddy Note</b>: %s" +msgstr "" + +#: ../pidgin/plugins/history.c:205 +msgid "History" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/iconaway.c:82 +msgid "Iconify on Away" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../pidgin/plugins/iconaway.c:85 ../pidgin/plugins/iconaway.c:87 +msgid "Iconifies the buddy list and your conversations when you go away." +msgstr "" + +#: ../pidgin/plugins/mailchk.c:160 +msgid "Mail Checker" +msgstr "" + +#: ../pidgin/plugins/mailchk.c:162 +msgid "Checks for new local mail." +msgstr "" + +#: ../pidgin/plugins/mailchk.c:163 +msgid "Adds a small box to the buddy list that shows if you have new mail." +msgstr "" + +#: ../pidgin/plugins/markerline.c:23 +msgid "Markerline" +msgstr "" + +#: ../pidgin/plugins/markerline.c:25 ../pidgin/plugins/markerline.c:26 +msgid "Draw a line to indicate new messages in a conversation." +msgstr "" + +#: ../pidgin/plugins/markerline.c:240 +msgid "Jump to markerline" +msgstr "" + +#: ../pidgin/plugins/markerline.c:274 +msgid "Draw Markerline in " +msgstr "" + +#: ../pidgin/plugins/markerline.c:278 ../pidgin/plugins/notify.c:688 +msgid "_IM windows" +msgstr "" + +#: ../pidgin/plugins/markerline.c:282 ../pidgin/plugins/notify.c:695 +msgid "C_hat windows" +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:44 +msgid "" +"A music messaging session has been requested. Please click the MM icon to " +"accept." +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:45 +msgid "Music messaging session confirmed." +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:430 +msgid "Music Messaging" +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:431 +msgid "There was a conflict in running the command:" +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:539 +msgid "Error Running Editor" +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:540 +msgid "The following error has occurred:" +msgstr "" + +#. Configuration frame +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:639 +msgid "Music Messaging Configuration" +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:643 +msgid "Score Editor Path" +msgstr "" + +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:644 +msgid "_Apply" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:685 +msgid "Music Messaging Plugin for collaborative composition." +msgstr "" + +#. * summary +#: ../pidgin/plugins/musicmessaging/musicmessaging.c:687 +msgid "" +"The Music Messaging Plugin allows a number of users to simultaneously work " +"on a piece of music by editing a common score in real-time." +msgstr "" + +#. ---------- "Notify For" ---------- +#: ../pidgin/plugins/notify.c:684 +msgid "Notify For" +msgstr "" + +#: ../pidgin/plugins/notify.c:703 +msgid "\t_Only when someone says your username" +msgstr "" + +#: ../pidgin/plugins/notify.c:713 +msgid "_Focused windows" +msgstr "" + +#. ---------- "Notification Methods" ---------- +#: ../pidgin/plugins/notify.c:721 +msgid "Notification Methods" +msgstr "" + +#: ../pidgin/plugins/notify.c:728 +msgid "Prepend _string into window title:" +msgstr "" + +#. Count method button +#: ../pidgin/plugins/notify.c:747 +msgid "Insert c_ount of new messages into window title" +msgstr "" + +#. Count xprop method button +#: ../pidgin/plugins/notify.c:756 +msgid "Insert count of new message into _X property" +msgstr "" + +#. Urgent method button +#: ../pidgin/plugins/notify.c:764 +msgid "Set window manager \"_URGENT\" hint" +msgstr "" + +#: ../pidgin/plugins/notify.c:766 +msgid "_Flash window" +msgstr "" + +#. Raise window method button +#: ../pidgin/plugins/notify.c:775 +msgid "R_aise conversation window" +msgstr "" + +#. Present conversation method button +#: ../pidgin/plugins/notify.c:783 +msgid "_Present conversation window" +msgstr "" + +#. ---------- "Notification Removals" ---------- +#: ../pidgin/plugins/notify.c:791 +msgid "Notification Removal" +msgstr "" + +#. Remove on focus button +#: ../pidgin/plugins/notify.c:796 +msgid "Remove when conversation window _gains focus" +msgstr "" + +#. Remove on click button +#: ../pidgin/plugins/notify.c:803 +msgid "Remove when conversation window _receives click" +msgstr "" + +#. Remove on type button +#: ../pidgin/plugins/notify.c:811 +msgid "Remove when _typing in conversation window" +msgstr "" + +#. Remove on message send button +#: ../pidgin/plugins/notify.c:819 +msgid "Remove when a _message gets sent" +msgstr "" + +#. Remove on conversation switch button +#: ../pidgin/plugins/notify.c:828 +msgid "Remove on switch to conversation ta_b" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/notify.c:921 +msgid "Message Notification" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../pidgin/plugins/notify.c:924 ../pidgin/plugins/notify.c:926 +msgid "Provides a variety of ways of notifying you of unread messages." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/pidgininc.c:91 +msgid "Pidgin Demonstration Plugin" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/pidgininc.c:94 +msgid "An example plugin that does stuff - see the description." +msgstr "" + +#. * description +#: ../pidgin/plugins/pidgininc.c:96 +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 "" + +#: ../pidgin/plugins/pidginrc.c:55 +msgid "Hyperlink Color" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:56 +msgid "Visited Hyperlink Color" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:59 +msgid "Highlighted Message Name Color" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:61 +msgid "Typing Notification Color" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:72 +msgid "GtkTreeView Horizontal Separation" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:89 +msgid "Conversation Entry" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:90 +msgid "Conversation History" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:91 +msgid "Request Dialog" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:92 +msgid "Notify Dialog" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:273 ../pidgin/plugins/themeedit.c:154 +msgid "Select Color" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:326 +#, c-format +msgid "Select Interface Font" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:329 +#, c-format +msgid "Select Font for %s" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:422 +msgid "GTK+ Interface Font" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:482 +msgid "GTK+ Text Shortcut Theme" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:514 +msgid "Disable Typing Notification Text" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:561 +msgid "GTK+ Theme Control Settings" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:569 +msgid "Colors" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:572 +msgid "Fonts" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:575 +msgid "Miscellaneous" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:580 +msgid "Gtkrc File Tools" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:585 +#, c-format +msgid "Write settings to %s%sgtkrc-2.0" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:593 +msgid "Re-read gtkrc files" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:627 +msgid "Pidgin GTK+ Theme Control" +msgstr "" + +#: ../pidgin/plugins/pidginrc.c:629 ../pidgin/plugins/pidginrc.c:630 +msgid "Provides access to commonly used gtkrc settings." +msgstr "" + +#: ../pidgin/plugins/raw.c:175 +msgid "Raw" +msgstr "" + +#: ../pidgin/plugins/raw.c:177 +msgid "Lets you send raw input to text-based protocols." +msgstr "" + +#: ../pidgin/plugins/raw.c:178 +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 "" + +#: ../pidgin/plugins/relnot.c:111 +#, c-format +msgid "You can upgrade to %s %s today." +msgstr "" + +#: ../pidgin/plugins/relnot.c:116 +msgid "New Version Available" +msgstr "" + +#: ../pidgin/plugins/relnot.c:119 +msgid "Later" +msgstr "" + +#: ../pidgin/plugins/relnot.c:120 +msgid "Download Now" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/relnot.c:199 +msgid "Release Notification" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/relnot.c:202 +msgid "Checks periodically for new releases." +msgstr "" + +#. * description +#: ../pidgin/plugins/relnot.c:204 +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 +#: ../pidgin/plugins/sendbutton.c:176 +msgid "Send Button" +msgstr "" + +#. *< name +#. *< version +#: ../pidgin/plugins/sendbutton.c:178 +msgid "Conversation Window Send Button." +msgstr "" + +#. *< summary +#: ../pidgin/plugins/sendbutton.c:179 +msgid "" +"Adds a Send button to the entry area of the conversation window. Intended " +"for use when no physical keyboard is present." +msgstr "" + +#: ../pidgin/plugins/spellchk.c:1971 +msgid "Duplicate Correction" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:1972 +msgid "The specified word already exists in the correction list." +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2172 +msgid "Text Replacements" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2186 +msgid "You type" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2200 +msgid "You send" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2214 +msgid "Whole words only" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2226 +msgid "Case sensitive" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2254 +msgid "Add a new text replacement" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2270 +msgid "You _type:" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2274 +msgid "You _send:" +msgstr "" + +#. Created here so it can be passed to whole_words_button_toggled. +#: ../pidgin/plugins/spellchk.c:2277 +msgid "_Exact case match (uncheck for automatic case handling)" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2279 +msgid "Only replace _whole words" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2304 +msgid "General Text Replacement Options" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2305 +msgid "Enable replacement of last word on send" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2338 +msgid "Text replacement" +msgstr "" + +#: ../pidgin/plugins/spellchk.c:2340 ../pidgin/plugins/spellchk.c:2341 +msgid "Replaces text in outgoing messages according to user-defined rules." +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:68 +msgid "Just logged in" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:69 +msgid "Just logged out" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:70 +msgid "" +"Icon for Contact/\n" +"Icon for Unknown person" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:71 +msgid "Icon for Chat" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:74 +msgid "Ignored" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:75 +msgid "Founder" +msgstr "" + +#. A user in a chat room who has special privileges. +#: ../pidgin/plugins/themeedit-icon.c:77 +msgid "Operator" +msgstr "" + +#. A half operator is someone who has a subset of the privileges +#. that an operator has. +#: ../pidgin/plugins/themeedit-icon.c:80 +msgid "Half Operator" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:84 +msgid "Authorization dialog" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:85 +msgid "Error dialog" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:86 +msgid "Information dialog" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:87 +msgid "Mail dialog" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:88 +msgid "Question dialog" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:89 +msgid "Warning dialog" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:91 +msgid "What kind of dialog is this?" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:99 +msgid "Status Icons" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:100 +msgid "Chatroom Emblems" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:101 +msgid "Dialog Icons" +msgstr "" + +#: ../pidgin/plugins/themeedit-icon.c:264 +msgid "Pidgin Icon Theme Editor" +msgstr "" + +#: ../pidgin/plugins/themeedit.c:242 +msgid "Contact" +msgstr "" + +#: ../pidgin/plugins/themeedit.c:266 +msgid "Pidgin Buddylist Theme Editor" +msgstr "" + +#: ../pidgin/plugins/themeedit.c:332 +msgid "Edit Buddylist Theme" +msgstr "" + +#: ../pidgin/plugins/themeedit.c:334 +msgid "Edit Icon Theme" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. * description +#: ../pidgin/plugins/themeedit.c:352 ../pidgin/plugins/themeedit.c:357 +msgid "Pidgin Theme Editor" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/themeedit.c:355 +msgid "Pidgin Theme Editor." +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/ticker/ticker.c:75 ../pidgin/plugins/ticker/ticker.c:372 +msgid "Buddy Ticker" +msgstr "" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../pidgin/plugins/ticker/ticker.c:375 ../pidgin/plugins/ticker/ticker.c:377 +msgid "A horizontal scrolling version of the buddy list." +msgstr "" + +#: ../pidgin/plugins/timestamp.c:143 +msgid "Display Timestamps Every" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/timestamp.c:208 +msgid "Timestamp" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/timestamp.c:211 +msgid "Display iChat-style timestamps" +msgstr "" + +#. * description +#: ../pidgin/plugins/timestamp.c:213 +msgid "Display iChat-style timestamps every N minutes." +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:35 +#: ../pidgin/plugins/timestamp_format.c:204 +msgid "Timestamp Format Options" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:38 +msgid "_Force timestamp format:" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:43 +msgid "Use system default" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:44 +msgid "12 hour time format" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:45 +msgid "24 hour time format" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:49 +msgid "Show dates in..." +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:54 +msgid "Co_nversations:" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:56 +#: ../pidgin/plugins/timestamp_format.c:65 +msgid "For delayed messages" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:57 +#: ../pidgin/plugins/timestamp_format.c:66 +msgid "For delayed messages and in chats" +msgstr "" + +#: ../pidgin/plugins/timestamp_format.c:63 +msgid "_Message Logs:" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/timestamp_format.c:272 +msgid "Message Timestamp Formats" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/timestamp_format.c:275 +msgid "Customizes the message timestamp formats." +msgstr "" + +#. * description +#: ../pidgin/plugins/timestamp_format.c:277 +msgid "" +"This plugin allows the user to customize conversation and logging message " +"timestamp formats." +msgstr "" + +#. Alerts +#: ../pidgin/plugins/unity.c:436 +msgid "Chatroom alerts" +msgstr "" + +#: ../pidgin/plugins/unity.c:440 +msgid "Chatroom message alerts _only where someone says your username" +msgstr "" + +#. Launcher integration +#: ../pidgin/plugins/unity.c:449 +msgid "Launcher Icon" +msgstr "" + +#: ../pidgin/plugins/unity.c:453 +msgid "_Disable launcher integration" +msgstr "" + +#: ../pidgin/plugins/unity.c:461 +msgid "Show number of unread _messages on launcher icon" +msgstr "" + +#: ../pidgin/plugins/unity.c:469 +msgid "Show number of unread co_nversations on launcher icon" +msgstr "" + +#. Messaging menu integration +#: ../pidgin/plugins/unity.c:478 +msgid "Messaging Menu" +msgstr "" + +#: ../pidgin/plugins/unity.c:483 +msgid "Show number of _unread messages for conversations in messaging menu" +msgstr "" + +#: ../pidgin/plugins/unity.c:491 +msgid "Show _elapsed time for unread conversations in messaging menu" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/unity.c:598 +msgid "Unity Integration" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/unity.c:601 +msgid "Provides integration with Unity." +msgstr "" + +#. * description +#: ../pidgin/plugins/unity.c:603 +msgid "Provides integration with Unity's messaging menu and launcher." +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:303 +msgid "Audio" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:305 +msgid "Video" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:316 ../pidgin/plugins/vvconfig.c:323 +msgid "Output" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:316 ../pidgin/plugins/vvconfig.c:323 +msgid "_Plugin" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:317 ../pidgin/plugins/vvconfig.c:324 +msgid "_Device" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:319 ../pidgin/plugins/vvconfig.c:326 +msgid "Input" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:319 ../pidgin/plugins/vvconfig.c:326 +msgid "P_lugin" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:320 ../pidgin/plugins/vvconfig.c:327 +msgid "D_evice" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:622 +msgid "DROP" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:679 +msgid "Volume:" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:683 +msgid "Silence threshold:" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:730 +msgid "Input and Output Settings" +msgstr "" + +#: ../pidgin/plugins/vvconfig.c:735 +msgid "Microphone Test" +msgstr "" + +#. *< magic +#. *< major version +#. *< minor version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/vvconfig.c:776 +msgid "Voice/Video Settings" +msgstr "" + +#. *< name +#. *< version +#: ../pidgin/plugins/vvconfig.c:778 +msgid "Configure your microphone and webcam." +msgstr "" + +#. *< summary +#: ../pidgin/plugins/vvconfig.c:779 +msgid "Configure microphone and webcam settings for voice/video calls." +msgstr "" + +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:173 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:588 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:635 +msgid "Opacity:" +msgstr "" + +#. IM Convo trans options +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:552 +msgid "IM Conversation Windows" +msgstr "" + +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:553 +msgid "_IM window transparency" +msgstr "" + +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:567 +msgid "_Show slider bar in IM window" +msgstr "" + +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:574 +msgid "Remove IM window transparency on focus" +msgstr "" + +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:577 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:625 +msgid "Always on top" +msgstr "" + +#. Buddy List trans options +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:609 +msgid "Buddy List Window" +msgstr "" + +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:610 +msgid "_Buddy List window transparency" +msgstr "" + +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:623 +msgid "Remove Buddy List window transparency on focus" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:683 +msgid "Transparency" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:686 +msgid "Variable Transparency for the buddy list and conversations." +msgstr "" + +#. * description +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:688 +msgid "" +"This plugin enables variable alpha transparency on conversation windows and the buddy list.\n" +"\n" +"* Note: This plugin requires Win2000 or greater." +msgstr "" + +#. Autostart +#: ../pidgin/plugins/win32/winprefs/winprefs.c:280 +msgid "Startup" +msgstr "" + +#: ../pidgin/plugins/win32/winprefs/winprefs.c:281 +#, c-format +msgid "_Start %s on Windows startup" +msgstr "" + +#: ../pidgin/plugins/win32/winprefs/winprefs.c:293 +msgid "Allow multiple instances" +msgstr "" + +#: ../pidgin/plugins/win32/winprefs/winprefs.c:304 +msgid "_Dockable Buddy List" +msgstr "" + +#. Blist On Top +#: ../pidgin/plugins/win32/winprefs/winprefs.c:308 +msgid "_Keep Buddy List window on top:" +msgstr "" + +#. XXX: Did this ever work? +#: ../pidgin/plugins/win32/winprefs/winprefs.c:313 +msgid "Only when docked" +msgstr "" + +#: ../pidgin/plugins/win32/winprefs/winprefs.c:343 +msgid "Windows Pidgin Options" +msgstr "" + +#: ../pidgin/plugins/win32/winprefs/winprefs.c:345 +msgid "Options specific to Pidgin for Windows." +msgstr "" + +#: ../pidgin/plugins/win32/winprefs/winprefs.c:346 +msgid "" +"Provides options specific to Pidgin for Windows, such as buddy list docking." +msgstr "" + +#: ../pidgin/plugins/xmppconsole.c:684 +msgid "<font color='#777777'>Logged out.</font>" +msgstr "" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../pidgin/plugins/xmppconsole.c:760 ../pidgin/plugins/xmppconsole.c:832 +#: ../pidgin/plugins/xmppconsole.c:851 +msgid "XMPP Console" +msgstr "" + +#: ../pidgin/plugins/xmppconsole.c:767 +msgid "Account: " +msgstr "" + +#: ../pidgin/plugins/xmppconsole.c:789 +msgid "<font color='#777777'>Not connected to XMPP</font>" +msgstr "" + +#. *< name +#. *< version +#. * summary +#: ../pidgin/plugins/xmppconsole.c:854 +msgid "Send and receive raw XMPP stanzas." +msgstr "" + +#. * description +#: ../pidgin/plugins/xmppconsole.c:856 +msgid "This plugin is useful for debugging XMPP servers or clients." +msgstr "" + +#. $(^Name) is the current Version name (e.g. Pidgin 2.7.0). $_CLICK will +#. become a translated version of "Click Next to continue." DO NOT translate +#. the CLICK in $_CLICK. It will break the installer. +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:2 +msgid "" +"$(^Name) is released under the GNU General Public License (GPL). The license" +" is provided here for information purposes only. $_CLICK" +msgstr "" + +#. Installer Subsection Detailed Description +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:4 +msgid "A multi-platform GUI toolkit, used by Pidgin" +msgstr "" + +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:5 +msgid "" +"An instance of Pidgin is currently running. Please exit Pidgin and try " +"again." +msgstr "" + +#. Installer Subsection Detailed Description +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:7 +msgid "Core Pidgin files and dlls" +msgstr "" + +#. Installer Subsection Detailed Description +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:9 +msgid "Create a Start Menu entry for Pidgin" +msgstr "" + +#. Installer Subsection Detailed Description +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:11 +msgid "Create a shortcut to Pidgin on the Desktop" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:13 +msgid "Debug Symbols (for reporting crashes)" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:15 +msgid "Desktop" +msgstr "" + +#. $R2 will display the URL that the GTK+ Runtime failed to download from +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:17 +msgid "" +"Error Downloading the GTK+ Runtime ($R2).$\\rThis is required for Pidgin to " +"function; if retrying fails, you may need to use the 'Offline Installer' " +"from http://pidgin.im/download/windows/ ." +msgstr "" + +#. $R2 will display the URL that the Debug Symbols failed to download from +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:19 +msgid "" +"Error Installing Debug Symbols ($R2).$\\rIf retrying fails, you may need to " +"use the 'Offline Installer' from http://pidgin.im/download/windows/ ." +msgstr "" + +#. $R3 will display the URL that the Dictionary failed to download from +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:22 +#, no-c-format +msgid "" +"Error Installing Spellchecking ($R3).$\\rIf retrying fails, manual " +"installation instructions are at: " +"http://developer.pidgin.im/wiki/Installing%20Pidgin#manual_win32_spellcheck_installation" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:24 +msgid "GTK+ Runtime (required if not present)" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:26 +msgid "Localizations" +msgstr "" + +#. "Next >" appears on a button on the License Page of the Installer +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:28 +msgid "Next >" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:30 +msgid "Pidgin Instant Messaging Client (required)" +msgstr "" + +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:31 +msgid "" +"Pidgin requires a compatible GTK+ Runtime (which doesn't appear to be " +"already present).$\\rAre you sure you want to skip installing the GTK+ " +"Runtime?" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:33 +msgid "Shortcuts" +msgstr "" + +#. Installer Subsection Detailed Description +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:35 +msgid "Shortcuts for starting Pidgin" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:37 +msgid "Spellchecking Support" +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:39 +msgid "Start Menu" +msgstr "" + +#. Installer Subsection Detailed Description +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:41 +msgid "" +"Support for Spellchecking. (Internet connection required for installation)" +msgstr "" + +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:42 +msgid "The installer is already running." +msgstr "" + +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:43 +msgid "" +"The uninstaller could not find registry entries for Pidgin.$\\rIt is likely " +"that another user installed this application." +msgstr "" + +#. Installer Subsection Text +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:45 +msgid "URI Handlers" +msgstr "" + +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:46 +msgid "" +"Unable to uninstall the currently installed version of Pidgin. The new " +"version will be installed without removing the currently installed version." +msgstr "" + +#. Text displayed on Installer Finish Page +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:48 +msgid "Visit the Pidgin Web Page" +msgstr "" + +#: ../pidgin/win32/nsis/nsis_translations.desktop.in.h:49 +msgid "You do not have permission to uninstall this application." +msgstr ""