# HG changeset patch # User Elliott Sales de Andrade # Date 1273533704 0 # Node ID f8ec889c5bce0cc4c6fcff877fe8fc632804464c # Parent edb7c80bf930aae3cdbb597420941f39825e746a# Parent ec89b1d8571ad4cd4840cf7f404072a672b50c9d propagate from branch 'im.pidgin.pidgin' (head f6cdf8776559775f9a4a72563e69741e139518bd) to branch 'im.pidgin.cpw.qulogic.msnp16' (head ee6655c65ffae7f61734aa5a05267a3f5a4fc0de) diff -r edb7c80bf930 -r f8ec889c5bce COPYRIGHT --- a/COPYRIGHT Fri Apr 23 16:58:03 2010 +0000 +++ b/COPYRIGHT Mon May 10 23:21:44 2010 +0000 @@ -295,6 +295,7 @@ Paolo Maggi Sulabh Mahajan Willian T. Mahan +Jonathan Maltz Tobias Markmann Kris Marsh Fidel Martinez @@ -329,6 +330,7 @@ Andrei Mozzhuhin Christian Muise MXit Lifestyle (Pty) Ltd. +Alexander Nartov Richard Nelson Dennis Nezic Matthew A. Nicholson diff -r edb7c80bf930 -r f8ec889c5bce ChangeLog --- a/ChangeLog Fri Apr 23 16:58:03 2010 +0000 +++ b/ChangeLog Mon May 10 23:21:44 2010 +0000 @@ -4,8 +4,8 @@ General: * Changed GTK+ minimum version requirement to 2.10.0. * Changed GLib minimum version requirement to 2.12.0. - * Using the --disable-nls argument to configre now works properly. You - will no longer be forced to have intltool to configure and build. + * Using the --disable-nls argument to configure now works properly. + You will no longer be forced to have intltool to configure and build. * Fix two related crashes in the GnuTLS and NSS plugins when they suffer internal errors immediately upon attempting to establish an SSL connection. @@ -47,8 +47,12 @@ buddy icons. * The 'Message Timestamp Formats' plugin allows changing the timestamp format from the timestamps' context menu in conversation log. + * The 'Message Timestamp Formats' plugin allows forcing 12-hour + timestamps. (Jonathan Maltz) * Fix pastes from Chrome (rich-text pastes and probably URLs - having garbage appended to them) + having garbage appended to them). + * Show file transfer thumbnails for images on supporting protocols + (currently only supported on MSN). Bonjour: * Added support for IPv6. (Thanks to T_X for testing) @@ -70,10 +74,13 @@ authentication fails due to an incorrect password. (This is the same behavior as the legacy authentication method) * Support sending and receiving HTML-formatted messages for ICQ. + * Use the proper URL for "View web profile" link for ICQ buddies. + (Alexander Nartov) MSN: * Support for version 9 of the MSN protocol has been removed. This version is no longer supported on the servers. + * Support file transfer thumbnails (previews) for images. XMPP: * Direct messages to a specific resource only upon receipt of a message @@ -91,6 +98,11 @@ minutes). This fixes an issue with Openfire disconnecting a libpurple-baesd client that has just been quiet for about 6 minutes. + * Only support Google Talk's JID Domain Discovery extension + (allowing a user to log in with "@gmail.com" or "@googlemail.com" + interchangeably) for those two domains. This change was made + due to interoperability issues with some BOSH Connection Managers + and namespaced attributes. Yahoo/Yahoo JAPAN: * Attempt to better handle transparent proxies interfering with diff -r edb7c80bf930 -r f8ec889c5bce ChangeLog.API --- a/ChangeLog.API Fri Apr 23 16:58:03 2010 +0000 +++ b/ChangeLog.API Mon May 10 23:21:44 2010 +0000 @@ -9,14 +9,26 @@ * account-connection-error * purple_account_get_name_for_display * purple_account_get_privacy_type + * purple_account_get_public_alias * purple_account_set_privacy_type + * purple_account_set_public_alias + * buddy-caps-changed blist signal + * Added media_caps to the PurpleBuddy struct * purple_buddy_get_media_caps * purple_buddy_set_media_caps + * purple_certificates_import for importing multiple + certificates from a single file (and corresponding + import_certificates member of PurpleCertificateScheme struct) + * autojoin connection signal * purple_contact_get_group + * sent-attention conversation signal + * got-attention conversation signal + * ui-caps-changed media manager signal * purple_media_candidate_copy * purple_media_codec_copy * purple_media_manager_get_backend_type * purple_media_manager_set_backend_type + * PurpleMood struct in status.h * purple_network_get_all_local_system_ips, which returns all local IPs on the system. On systems with the getifaddrs() function, this will return both IPv4 and IPv6 addresses @@ -29,20 +41,16 @@ only supported if the getaddrinfo() function is available at build-time (not the case on Windows, currently). * purple_prpl_got_media_caps + * purple_request_action_with_icon + * purple_request_action_with_icon_varg * purple_socket_get_family * purple_socket_speaks_ipv4 * purple_unescape_text * purple_uuid_random - * media_caps to the PurpleBuddy struct - * buddy-caps-changed blist signal - * ui-caps-changed media manager signal - * sent-attention conversation signal - * got-attention conversation signal - * PurpleMood struct in status.h - * purple_certificates_import for importing multiple - certificates from a single file (and corresponding - import_certificates member of PurpleCertificateScheme struct) - * autojoin connection signal + * purple_xfer_get_thumbnail + * purple_xfer_get_thumbnail_mimetype + * purple_xfer_set_thumbnail + * purple_xfer_prepare_thumbnail Pidgin: Added: diff -r edb7c80bf930 -r f8ec889c5bce finch/gntblist.c --- a/finch/gntblist.c Fri Apr 23 16:58:03 2010 +0000 +++ b/finch/gntblist.c Mon May 10 23:21:44 2010 +0000 @@ -1117,6 +1117,8 @@ list = g_list_delete_link(list, list)) { PurpleMenuAction *act = (PurpleMenuAction *) list->data; + if (!act) + continue; act->data = node; gnt_append_menu_action(menu, act, NULL); g_signal_connect_swapped(G_OBJECT(menu), "destroy", diff -r edb7c80bf930 -r f8ec889c5bce libpurple/account.c --- a/libpurple/account.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/account.c Mon May 10 23:21:44 2010 +0000 @@ -1782,6 +1782,92 @@ schedule_accounts_save(); } +struct public_alias_closure +{ + PurpleAccount *account; + gpointer failure_cb; +}; + +static gboolean +set_public_alias_unsupported(gpointer data) +{ + struct public_alias_closure *closure = data; + PurpleSetPublicAliasFailureCallback failure_cb = closure->failure_cb; + + failure_cb(closure->account, + _("This protocol does not support setting a public alias.")); + g_free(closure); + + return FALSE; +} + +void +purple_account_set_public_alias(PurpleAccount *account, + const char *alias, PurpleSetPublicAliasSuccessCallback success_cb, + PurpleSetPublicAliasFailureCallback failure_cb) +{ + PurpleConnection *gc; + PurplePlugin *prpl = NULL; + PurplePluginProtocolInfo *prpl_info = NULL; + + g_return_if_fail(account != NULL); + g_return_if_fail(purple_account_is_connected(account)); + + gc = purple_account_get_connection(account); + prpl = purple_connection_get_prpl(gc); + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); + + if (PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, set_public_alias)) + prpl_info->set_public_alias(gc, alias, success_cb, failure_cb); + else { + struct public_alias_closure *closure = + g_new0(struct public_alias_closure, 1); + closure->account = account; + closure->failure_cb = failure_cb; + purple_timeout_add(0, set_public_alias_unsupported, closure); + } +} + +static gboolean +get_public_alias_unsupported(gpointer data) +{ + struct public_alias_closure *closure = data; + PurpleGetPublicAliasFailureCallback failure_cb = closure->failure_cb; + + failure_cb(closure->account, + _("This protocol does not support fetching the public alias.")); + g_free(closure); + + return FALSE; +} + +void +purple_account_get_public_alias(PurpleAccount *account, + PurpleGetPublicAliasSuccessCallback success_cb, + PurpleGetPublicAliasFailureCallback failure_cb) +{ + PurpleConnection *gc; + PurplePlugin *prpl = NULL; + PurplePluginProtocolInfo *prpl_info = NULL; + + g_return_if_fail(account != NULL); + g_return_if_fail(purple_account_is_connected(account)); + + gc = purple_account_get_connection(account); + prpl = purple_connection_get_prpl(gc); + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); + + if (PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, get_public_alias)) + prpl_info->get_public_alias(gc, success_cb, failure_cb); + else { + struct public_alias_closure *closure = + g_new0(struct public_alias_closure, 1); + closure->account = account; + closure->failure_cb = failure_cb; + purple_timeout_add(0, get_public_alias_unsupported, closure); + } +} + void purple_account_clear_settings(PurpleAccount *account) { diff -r edb7c80bf930 -r f8ec889c5bce libpurple/account.h --- a/libpurple/account.h Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/account.h Mon May 10 23:21:44 2010 +0000 @@ -39,6 +39,10 @@ typedef void (*PurpleAccountRequestAuthorizationCb)(void *); typedef void (*PurpleAccountRegistrationCb)(PurpleAccount *account, gboolean succeeded, void *user_data); typedef void (*PurpleAccountUnregistrationCb)(PurpleAccount *account, gboolean succeeded, void *user_data); +typedef void (*PurpleSetPublicAliasSuccessCallback)(PurpleAccount *account, const char *new_alias); +typedef void (*PurpleSetPublicAliasFailureCallback)(PurpleAccount *account, const char *error); +typedef void (*PurpleGetPublicAliasSuccessCallback)(PurpleAccount *account, const char *alias); +typedef void (*PurpleGetPublicAliasFailureCallback)(PurpleAccount *account, const char *error); #include "connection.h" #include "log.h" @@ -462,6 +466,42 @@ const char *status_id, gboolean active, GList *attrs); /** + * Set a server-side (public) alias for this account. The account + * must already be connected. + * + * Currently, the public alias is not stored locally, although this + * may change in a later version. + * + * @param account The account + * @param alias The new public alias for this account or NULL + * to unset the alias/nickname (or return it to + * a protocol-specific "default", like the username) + * @param success_cb A callback which will be called if the alias + * is successfully set on the server (or NULL). + * @param failure_cb A callback which will be called if the alias + * is not successfully set on the server (or NULL). + * + * @since 2.7.0 + */ +void purple_account_set_public_alias(PurpleAccount *account, + const char *alias, PurpleSetPublicAliasSuccessCallback success_cb, + PurpleSetPublicAliasFailureCallback failure_cb); + +/** + * Fetch the server-side (public) alias for this account. The account + * must already be connected. + * + * @param account The account + * @param success_cb A callback which will be called with the alias + * @param failure_cb A callback which will be called if the prpl is + * unable to retrieve the server-side alias. + * @since 2.7.0 + */ +void purple_account_get_public_alias(PurpleAccount *account, + PurpleGetPublicAliasSuccessCallback success_cb, + PurpleGetPublicAliasFailureCallback failure_cb); + +/** * Clears all protocol-specific settings on an account. * * @param account The account. diff -r edb7c80bf930 -r f8ec889c5bce libpurple/ft.c --- a/libpurple/ft.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/ft.c Mon May 10 23:21:44 2010 +0000 @@ -60,6 +60,10 @@ /* TODO: Should really use a PurpleCircBuffer for this. */ GByteArray *buffer; + + gpointer thumbnail_data; /**< thumbnail image */ + gsize thumbnail_size; + gchar *thumbnail_mimetype; } PurpleXferPrivData; static int purple_xfer_choose_file(PurpleXfer *xfer); @@ -72,6 +76,10 @@ if (priv->buffer) g_byte_array_free(priv->buffer, TRUE); + g_free(priv->thumbnail_data); + + g_free(priv->thumbnail_mimetype); + g_free(priv); } @@ -266,15 +274,21 @@ } } -void purple_xfer_conversation_write(PurpleXfer *xfer, char *message, gboolean is_error) +static void +purple_xfer_conversation_write_internal(PurpleXfer *xfer, + const char *message, gboolean is_error, gboolean print_thumbnail) { PurpleConversation *conv = NULL; PurpleMessageFlags flags = PURPLE_MESSAGE_SYSTEM; char *escaped; + gconstpointer thumbnail_data; + gsize size; g_return_if_fail(xfer != NULL); g_return_if_fail(message != NULL); + thumbnail_data = purple_xfer_get_thumbnail(xfer, &size); + conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, xfer->who, purple_xfer_get_account(xfer)); @@ -286,10 +300,39 @@ if (is_error) flags |= PURPLE_MESSAGE_ERROR; - purple_conversation_write(conv, NULL, escaped, flags, time(NULL)); + if (print_thumbnail && thumbnail_data) { + gchar *message_with_img; + gpointer data = g_memdup(thumbnail_data, size); + int id = purple_imgstore_add_with_id(data, size, NULL); + + message_with_img = + g_strdup_printf(" %s", id, escaped); + purple_conversation_write(conv, NULL, message_with_img, flags, + time(NULL)); + purple_imgstore_unref_by_id(id); + g_free(message_with_img); + } else { + purple_conversation_write(conv, NULL, escaped, flags, time(NULL)); + } g_free(escaped); } +void +purple_xfer_conversation_write(PurpleXfer *xfer, gchar *message, + gboolean is_error) +{ + purple_xfer_conversation_write_internal(xfer, message, is_error, FALSE); +} + +/* maybe this one should be exported publically? */ +static void +purple_xfer_conversation_write_with_thumbnail(PurpleXfer *xfer, + const gchar *message) +{ + purple_xfer_conversation_write_internal(xfer, message, FALSE, TRUE); +} + + static void purple_xfer_show_file_error(PurpleXfer *xfer, const char *filename) { int err = errno; @@ -448,6 +491,8 @@ { char *buf, *size_buf; size_t size; + gconstpointer thumb; + gsize thumb_size; /* If we have already accepted the request, ask the destination file name directly */ @@ -473,13 +518,19 @@ serv_got_im(purple_account_get_connection(xfer->account), xfer->who, xfer->message, 0, time(NULL)); - purple_request_accept_cancel(xfer, NULL, buf, NULL, - PURPLE_DEFAULT_ACTION_NONE, - xfer->account, xfer->who, NULL, - xfer, - G_CALLBACK(purple_xfer_choose_file), - G_CALLBACK(cancel_recv_cb)); - + if ((thumb = purple_xfer_get_thumbnail(xfer, &thumb_size))) { + purple_request_accept_cancel_with_icon(xfer, NULL, buf, NULL, + PURPLE_DEFAULT_ACTION_NONE, xfer->account, xfer->who, NULL, + thumb, thumb_size, xfer, + G_CALLBACK(purple_xfer_choose_file), + G_CALLBACK(cancel_recv_cb)); + } else { + purple_request_accept_cancel(xfer, NULL, buf, NULL, + PURPLE_DEFAULT_ACTION_NONE, xfer->account, xfer->who, NULL, + xfer, G_CALLBACK(purple_xfer_choose_file), + G_CALLBACK(cancel_recv_cb)); + } + g_free(buf); } else purple_xfer_choose_file(xfer); @@ -547,10 +598,12 @@ { gchar* message = NULL; PurpleBuddy *buddy = purple_find_buddy(xfer->account, xfer->who); + message = g_strdup_printf(_("%s is offering to send file %s"), buddy ? purple_buddy_get_alias(buddy) : xfer->who, purple_xfer_get_filename(xfer)); - purple_xfer_conversation_write(xfer, message, FALSE); + purple_xfer_conversation_write_with_thumbnail(xfer, message); g_free(message); + /* Ask for a filename to save to if it's not already given by a plugin */ if (xfer->local_filename == NULL) purple_xfer_ask_recv(xfer); @@ -1580,6 +1633,52 @@ ui_ops->update_progress(xfer, purple_xfer_get_progress(xfer)); } +gconstpointer +purple_xfer_get_thumbnail(const PurpleXfer *xfer, gsize *len) +{ + PurpleXferPrivData *priv = g_hash_table_lookup(xfers_data, xfer); + + if (len) + *len = priv->thumbnail_size; + + return priv->thumbnail_data; +} + +const gchar * +purple_xfer_get_thumbnail_mimetype(const PurpleXfer *xfer) +{ + PurpleXferPrivData *priv = g_hash_table_lookup(xfers_data, xfer); + + return priv->thumbnail_mimetype; +} + +void +purple_xfer_set_thumbnail(PurpleXfer *xfer, gconstpointer thumbnail, + gsize size, const gchar *mimetype) +{ + PurpleXferPrivData *priv = g_hash_table_lookup(xfers_data, xfer); + + g_free(priv->thumbnail_data); + g_free(priv->thumbnail_mimetype); + + if (thumbnail && size > 0) { + priv->thumbnail_data = g_memdup(thumbnail, size); + priv->thumbnail_size = size; + priv->thumbnail_mimetype = g_strdup(mimetype); + } else { + priv->thumbnail_data = NULL; + priv->thumbnail_size = 0; + priv->thumbnail_mimetype = NULL; + } +} + +void +purple_xfer_prepare_thumbnail(PurpleXfer *xfer, const gchar *formats) +{ + if (xfer->ui_ops->add_thumbnail) { + xfer->ui_ops->add_thumbnail(xfer, formats); + } +} /************************************************************************** * File Transfer Subsystem API diff -r edb7c80bf930 -r f8ec889c5bce libpurple/ft.h --- a/libpurple/ft.h Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/ft.h Mon May 10 23:21:44 2010 +0000 @@ -120,7 +120,12 @@ */ void (*data_not_sent)(PurpleXfer *xfer, const guchar *buffer, gsize size); - void (*_purple_reserved1)(void); + /** + * Op to create a thumbnail image for a file transfer + * + * @param xfer The file transfer structure + */ + void (*add_thumbnail)(PurpleXfer *xfer, const gchar *formats); } PurpleXferUiOps; /** @@ -687,6 +692,51 @@ */ void purple_xfer_prpl_ready(PurpleXfer *xfer); +/** + * Gets the thumbnail data for a transfer + * + * @param xfer The file transfer to get the thumbnail for + * @param len If not @c NULL, the length of the thumbnail data returned + * will be set in the location pointed to by this. + * @return The thumbnail data, or NULL if there is no thumbnail + * @since 2.7.0 + */ +gconstpointer purple_xfer_get_thumbnail(const PurpleXfer *xfer, gsize *len); + +/** + * Gets the mimetype of the thumbnail preview for a transfer + * + * @param xfer The file transfer to get the mimetype for + * @return The mimetype of the thumbnail, or @c NULL if not thumbnail is set + * @since 2.7.0 + */ +const gchar *purple_xfer_get_thumbnail_mimetype(const PurpleXfer *xfer); + + +/** + * Sets the thumbnail data for a transfer + * + * @param xfer The file transfer to set the data for + * @param thumbnail A pointer to the thumbnail data, this will be copied + * @param size The size in bytes of the passed in thumbnail data + * @param mimetype The mimetype of the generated thumbnail + * @since 2.7.0 + */ +void purple_xfer_set_thumbnail(PurpleXfer *xfer, gconstpointer thumbnail, + gsize size, const gchar *mimetype); + +/** + * Prepare a thumbnail for a transfer (if the UI supports it) + * will be no-op in case the UI doesn't implement thumbnail creation + * + * @param xfer The file transfer to create a thumbnail for + * @param formats A comma-separated list of mimetypes for image formats + * the protocols can use for thumbnails. + * @since 2.7.0 + */ +void purple_xfer_prepare_thumbnail(PurpleXfer *xfer, const gchar *formats); + + /*@}*/ /**************************************************************************/ diff -r edb7c80bf930 -r f8ec889c5bce libpurple/network.h --- a/libpurple/network.h Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/network.h Mon May 10 23:21:44 2010 +0000 @@ -90,8 +90,8 @@ /** * Returns all IP addresses of the local system. * - * @note The caller must free this list, this function currently only - * handles IPv4 addresses + * @note The caller must free this list. If libpurple was built with + * support for it, this function also enumerates IPv6 addresses. * @since 2.7.0 * * @return A list of local IP addresses. diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/bonjour/bonjour.c --- a/libpurple/protocols/bonjour/bonjour.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/bonjour/bonjour.c Mon May 10 23:21:44 2010 +0000 @@ -528,7 +528,9 @@ NULL, /* get_account_text_table */ NULL, /* initiate_media */ NULL, /* get_media_caps */ - NULL /* get_moods */ + NULL, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; static PurplePluginInfo info = diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/gg/gg.c --- a/libpurple/protocols/gg/gg.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/gg/gg.c Mon May 10 23:21:44 2010 +0000 @@ -1601,12 +1601,6 @@ } break; case GG_EVENT_NOTIFY60: - purple_debug_info("gg", - "notify60_pre: (%d) status=%d; version=%d; descr=%s\n", - ev->event.notify60->uin, GG_S(ev->event.notify60->status), - ev->event.notify60->version, - ev->event.notify60->descr ? ev->event.notify60->descr : "(null)"); - for (i = 0; ev->event.notify60[i].uin; i++) { purple_debug_info("gg", "notify60: (%d) status=%d; version=%d; descr=%s\n", @@ -1737,7 +1731,7 @@ ggp_callback_recv, gc); ggp_buddylist_send(gc); - purple_connection_update_progress(gc, _("Connected"), 2, 2); + purple_connection_update_progress(gc, _("Connected"), 1, 2); purple_connection_set_state(gc, PURPLE_CONNECTED); } break; @@ -1990,7 +1984,7 @@ purple_debug_info("gg", "Trying to retrieve address from gg appmsg service\n"); info->session = gg_login(glp); - purple_connection_update_progress(gc, _("Connecting"), 1, 2); + purple_connection_update_progress(gc, _("Connecting"), 0, 2); if (info->session == NULL) { purple_connection_error_reason (gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, @@ -2512,7 +2506,9 @@ NULL, /* get_account_text_table */ NULL, /* initiate_media */ NULL, /* can_do_media */ - NULL /* get_moods */ + NULL, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; static PurplePluginInfo info = { diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/gg/search.c --- a/libpurple/protocols/gg/search.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/gg/search.c Mon May 10 23:21:44 2010 +0000 @@ -207,7 +207,7 @@ { char *tmp; - tmp = charset_convert(gg_pubdir50_get(res, num, field), "CP1250", "UTF-8"); + tmp = g_strdup(gg_pubdir50_get(res, num, field)); return (tmp == NULL) ? g_strdup("") : tmp; } diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/irc/irc.c --- a/libpurple/protocols/irc/irc.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/irc/irc.c Mon May 10 23:21:44 2010 +0000 @@ -945,7 +945,9 @@ NULL, /* get_account_text_table */ NULL, /* initiate_media */ NULL, /* get_media_caps */ - NULL /* get_moods */ + NULL, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; static gboolean load_plugin (PurplePlugin *plugin) { diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/auth.c --- a/libpurple/protocols/jabber/auth.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/auth.c Mon May 10 23:21:44 2010 +0000 @@ -45,35 +45,6 @@ JabberIqType type, const char *id, xmlnode *packet, gpointer data); -gboolean -jabber_process_starttls(JabberStream *js, xmlnode *packet) -{ - PurpleAccount *account; - xmlnode *starttls; - - account = purple_connection_get_account(js->gc); - - if((starttls = xmlnode_get_child(packet, "starttls"))) { - if(purple_ssl_is_supported()) { - jabber_send_raw(js, - "", -1); - return TRUE; - } else if(xmlnode_get_child(starttls, "required")) { - purple_connection_error_reason(js->gc, - PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT, - _("Server requires TLS/SSL, but no TLS/SSL support was found.")); - return TRUE; - } else if(purple_account_get_bool(account, "require_tls", JABBER_DEFAULT_REQUIRE_TLS)) { - purple_connection_error_reason(js->gc, - PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT, - _("You require encryption, but no TLS/SSL support was found.")); - return TRUE; - } - } - - return FALSE; -} - static void finish_plaintext_authentication(JabberStream *js) { JabberIq *iq; diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/auth.h --- a/libpurple/protocols/jabber/auth.h Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/auth.h Mon May 10 23:21:44 2010 +0000 @@ -45,7 +45,6 @@ void (*dispose)(JabberStream *js); }; -gboolean jabber_process_starttls(JabberStream *js, xmlnode *packet); void jabber_auth_start(JabberStream *js, xmlnode *packet); void jabber_auth_start_old(JabberStream *js); void jabber_auth_handle_challenge(JabberStream *js, xmlnode *packet); diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/auth_cyrus.c --- a/libpurple/protocols/jabber/auth_cyrus.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/auth_cyrus.c Mon May 10 23:21:44 2010 +0000 @@ -252,29 +252,14 @@ g_free(msg); return JABBER_SASL_STATE_CONTINUE; - } else { - /* We have no mechs which can work. - * Try falling back on the old jabber:iq:auth method. We get here if the server supports - * one or more sasl mechs, we are compiled with cyrus-sasl support, but we support or can connect with none of - * the offerred mechs. jabberd 2.0 w/ SASL and Apple's iChat Server 10.5 both handle and expect - * jabber:iq:auth in this situation. iChat Server in particular offers SASL GSSAPI by default, which is often - * not configured on the client side, and expects a fallback to jabber:iq:auth when it (predictably) fails. - * - * Note: xep-0078 points out that using jabber:iq:auth after a sasl failure is wrong. However, - * I believe this refers to actual authentication failure, not a simple lack of concordant mechanisms. - * Doing otherwise means that simply compiling with SASL support renders the client unable to connect to servers - * which would connect without issue otherwise. -evands - */ - js->auth_mech = NULL; - jabber_auth_start_old(js); - return JABBER_SASL_STATE_CONTINUE; } - /* not reached */ + break; /* Fatal errors. Give up and go home */ case SASL_BADPARAM: case SASL_NOMEM: + *error = g_strdup(_("SASL authentication failed")); break; /* For everything else, fail the mechanism and try again */ @@ -314,8 +299,11 @@ xmlnode_set_namespace(auth, NS_XMPP_SASL); xmlnode_set_attrib(auth, "mechanism", js->current_mech); - xmlnode_set_attrib(auth, "xmlns:ga", "http://www.google.com/talk/protocol/auth"); - xmlnode_set_attrib(auth, "ga:client-uses-full-bind-result", "true"); + if (g_str_equal(js->user->domain, "gmail.com") || + g_str_equal(js->user->domain, "googlemail.com")) { + xmlnode_set_attrib(auth, "xmlns:ga", "http://www.google.com/talk/protocol/auth"); + xmlnode_set_attrib(auth, "ga:client-uses-full-bind-result", "true"); + } if (clientout) { if (coutlen == 0) { @@ -330,7 +318,6 @@ *reply = auth; return JABBER_SASL_STATE_CONTINUE; } else { - *error = g_strdup(_("SASL authentication failed")); return JABBER_SASL_STATE_FAIL; } } @@ -404,17 +391,6 @@ continue; } - /* Don't include Google Talk's X-GOOGLE-TOKEN mechanism - * or Facebook Chat's X-FACEBOOK-PLATFORM mechansim, - * as we will not support them and including them gives a false fall-back - * to other mechs offerred, leading to incorrect error handling. - */ - if (g_str_equal(mech_name, "X-GOOGLE-TOKEN") - || g_str_equal(mech_name, "X-FACEBOOK-PLATFORM") ) { - g_free(mech_name); - continue; - } - g_string_append(js->sasl_mechs, mech_name); g_string_append_c(js->sasl_mechs, ' '); g_free(mech_name); @@ -542,6 +518,25 @@ sasl_dispose(&js->sasl); return jabber_auth_start_cyrus(js, reply, error); + + } else if ((js->auth_fail_count == 1) && + (js->current_mech && g_str_equal(js->current_mech, "GSSAPI"))) { + /* If we tried GSSAPI first, it failed, and it was the only method we had to try, try jabber:iq:auth + * for compatibility with iChat 10.5 Server. + * + * iChat Server 10.5 offers SASL GSSAPI by default, which is often + * not configured on the client side, and expects a fallback to jabber:iq:auth when it (predictably) fails. + * + * Note: xep-0078 points out that using jabber:iq:auth after a sasl failure is wrong. However, + * I believe this refers to actual authentication failure, not a simple lack of concordant mechanisms. + * Doing otherwise means that simply compiling with SASL support renders the client unable to connect to servers + * which would connect without issue otherwise. -evands + */ + sasl_dispose(&js->sasl); + js->sasl = NULL; + js->auth_mech = NULL; + jabber_auth_start_old(js); + return JABBER_SASL_STATE_CONTINUE; } } diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/auth_digest_md5.c --- a/libpurple/protocols/jabber/auth_digest_md5.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/auth_digest_md5.c Mon May 10 23:21:44 2010 +0000 @@ -188,16 +188,17 @@ if (g_hash_table_lookup(parts, "rspauth")) { char *rspauth = g_hash_table_lookup(parts, "rspauth"); + char *expected_rspauth = js->auth_mech_data; - if (rspauth && purple_strequal(rspauth, js->expected_rspauth)) { + if (rspauth && purple_strequal(rspauth, expected_rspauth)) { reply = xmlnode_new("response"); xmlnode_set_namespace(reply, NS_XMPP_SASL); } else { *msg = g_strdup(_("Invalid challenge from server")); state = JABBER_SASL_STATE_FAIL; } - g_free(js->expected_rspauth); - js->expected_rspauth = NULL; + g_free(js->auth_mech_data); + js->auth_mech_data = NULL; } else { /* assemble a response, and send it */ /* see RFC 2831 */ @@ -235,7 +236,7 @@ g_free(a2); a2 = g_strdup_printf(":xmpp/%s", realm); - js->expected_rspauth = generate_response_value(js->user, + js->auth_mech_data = generate_response_value(js->user, purple_connection_get_password(js->gc), nonce, cnonce, a2, realm); g_free(a2); @@ -276,6 +277,13 @@ return state; } +static void +digest_md5_dispose(JabberStream *js) +{ + g_free(js->auth_mech_data); + js->auth_mech_data = NULL; +} + static JabberSaslMech digest_md5_mech = { 10, /* priority */ "DIGEST-MD5", /* name */ @@ -283,7 +291,7 @@ digest_md5_handle_challenge, NULL, /* handle_success */ NULL, /* handle_failure */ - NULL /* handle_dispose */ + digest_md5_dispose, }; JabberSaslMech *jabber_auth_get_digest_md5_mech(void) diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/auth_plain.c --- a/libpurple/protocols/jabber/auth_plain.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/auth_plain.c Mon May 10 23:21:44 2010 +0000 @@ -40,13 +40,16 @@ auth = xmlnode_new("auth"); xmlnode_set_namespace(auth, NS_XMPP_SASL); - xmlnode_set_attrib(auth, "xmlns:ga", "http://www.google.com/talk/protocol/auth"); - xmlnode_set_attrib(auth, "ga:client-uses-full-bind-result", "true"); + if (g_str_equal(js->user->domain, "gmail.com") || + g_str_equal(js->user->domain, "googlemail.com")) { + xmlnode_set_attrib(auth, "xmlns:ga", "http://www.google.com/talk/protocol/auth"); + xmlnode_set_attrib(auth, "ga:client-uses-full-bind-result", "true"); + } response = g_string_new(""); - response = g_string_append_len(response, "\0", 1); + response = g_string_append_c(response, '\0'); response = g_string_append(response, js->user->node); - response = g_string_append_len(response, "\0", 1); + response = g_string_append_c(response, '\0'); response = g_string_append(response, purple_connection_get_password(js->gc)); diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/auth_scram.c --- a/libpurple/protocols/jabber/auth_scram.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/auth_scram.c Mon May 10 23:21:44 2010 +0000 @@ -47,6 +47,32 @@ g_return_val_if_reached(NULL); } +static const struct { + const char *error; + const char *meaning; +} server_errors[] = { + { "invalid-encoding", + N_("Invalid Encoding")}, + { "extensions-not-supported", + N_("Unsupported Extension") }, + { "channel-bindings-dont-match", + N_("Unexpected response from the server. This may indicate a possible MITM attack") }, + { "server-does-support-channel-binding", + N_("The server does support channel binding, but did not appear to advertise it. This indicates a likely MITM attack") }, + { "channel-binding-not-supported", + N_("Server does not support channel binding") }, + { "unsupported-channel-binding-type", + N_("Unsupported channel binding method") }, + { "unknown-user", + N_("User not found") }, + { "invalid-username-encoding", + N_("Invalid Username Encoding") }, + { "no-resources", + N_("Resource Constraint") }, + { "other-error", + N_("Unknown Error") } +}; + guchar *jabber_scram_hi(const JabberScramHash *hash, const GString *str, GString *salt, guint iterations) { diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/data.c --- a/libpurple/protocols/jabber/data.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/data.c Mon May 10 23:21:44 2010 +0000 @@ -1,4 +1,6 @@ /* + * purple - Jabber Service Discovery + * * 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. @@ -11,11 +13,12 @@ * 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 Library General Public License for more details. + * 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" @@ -36,7 +39,7 @@ JabberData * jabber_data_create_from_data(gconstpointer rawdata, gsize size, const char *type, - JabberStream *js) + gboolean ephemeral, JabberStream *js) { JabberData *data = g_new0(JabberData, 1); gchar *checksum = jabber_calculate_data_hash(rawdata, size, "sha1"); @@ -48,6 +51,7 @@ data->cid = g_strdup(cid); data->type = g_strdup(type); data->size = size; + data->ephemeral = ephemeral; data->data = g_memdup(rawdata, size); @@ -110,6 +114,12 @@ return data; } +void +jabber_data_destroy(JabberData *data) +{ + jabber_data_delete(data); +} + const char * jabber_data_get_cid(const JabberData *data) { @@ -289,14 +299,14 @@ const JabberData * jabber_data_find_local_by_alt(const gchar *alt) { - purple_debug_info("jabber", "looking up local smiley with alt = %s\n", alt); + purple_debug_info("jabber", "looking up local data object with alt = %s\n", alt); return g_hash_table_lookup(local_data_by_alt, alt); } const JabberData * jabber_data_find_local_by_cid(const gchar *cid) { - purple_debug_info("jabber", "lookup local smiley with cid = %s\n", cid); + purple_debug_info("jabber", "lookup local data object with cid = %s\n", cid); return g_hash_table_lookup(local_data_by_cid, cid); } @@ -305,7 +315,7 @@ const gchar *cid) { const JabberData *data = g_hash_table_lookup(remote_data_by_cid, cid); - purple_debug_info("jabber", "lookup remote smiley with cid = %s\n", cid); + purple_debug_info("jabber", "lookup remote data object with cid = %s\n", cid); if (data == NULL) { gchar *jid_cid = @@ -323,9 +333,10 @@ void jabber_data_associate_local(JabberData *data, const gchar *alt) { - purple_debug_info("jabber", "associating local smiley\n alt = %s, cid = %s\n", - alt, jabber_data_get_cid(data)); - g_hash_table_insert(local_data_by_alt, g_strdup(alt), data); + purple_debug_info("jabber", "associating local data object\n alt = %s, cid = %s\n", + alt , jabber_data_get_cid(data)); + if (alt) + g_hash_table_insert(local_data_by_alt, g_strdup(alt), data); g_hash_table_insert(local_data_by_cid, g_strdup(jabber_data_get_cid(data)), data); } @@ -371,6 +382,11 @@ xmlnode_set_attrib(result->node, "id", id); xmlnode_insert_child(result->node, jabber_data_get_xml_definition(data)); + /* if the data object is temporary, destroy it and remove the references + to it */ + if (data->ephemeral) { + g_hash_table_remove(local_data_by_cid, cid); + } } jabber_iq_send(result); } diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/data.h --- a/libpurple/protocols/jabber/data.h Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/data.h Mon May 10 23:21:44 2010 +0000 @@ -1,4 +1,6 @@ /* + * purple - Jabber Service Discovery + * * 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. @@ -11,11 +13,12 @@ * 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 Library General Public License for more details. + * 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_JABBER_DATA_H @@ -34,6 +37,7 @@ char *type; gsize size; gpointer data; + gboolean ephemeral; } JabberData; typedef void (JabberDataRequestCallback)(JabberData *data, gchar *alt, @@ -42,12 +46,16 @@ /* creates a JabberData instance from raw data */ JabberData *jabber_data_create_from_data(gconstpointer data, gsize size, - const char *type, JabberStream *js); + const char *type, gboolean ephemeral, JabberStream *js); /* create a JabberData instance from an XML "data" element (as defined by XEP 0231 */ JabberData *jabber_data_create_from_xml(xmlnode *tag); +/* destroy a JabberData instance, NOT to be used on data that has been + associated, since they get "owned" */ +void jabber_data_destroy(JabberData *data); + const char *jabber_data_get_cid(const JabberData *data); const char *jabber_data_get_type(const JabberData *data); diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/ibb.c --- a/libpurple/protocols/jabber/ibb.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/ibb.c Mon May 10 23:21:44 2010 +0000 @@ -1,4 +1,6 @@ /* + * purple - Jabber Service Discovery + * * 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. @@ -11,11 +13,12 @@ * 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 Library General Public License for more details. + * 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" diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/ibb.h --- a/libpurple/protocols/jabber/ibb.h Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/ibb.h Mon May 10 23:21:44 2010 +0000 @@ -1,4 +1,6 @@ /* + * purple - Jabber Service Discovery + * * 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. @@ -11,11 +13,12 @@ * 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 Library General Public License for more details. + * 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_JABBER_IBB_H_ diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/jabber.c --- a/libpurple/protocols/jabber/jabber.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/jabber.c Mon May 10 23:21:44 2010 +0000 @@ -210,6 +210,35 @@ return purple_strreplace(input, "__HOSTNAME__", hostname); } +static gboolean +jabber_process_starttls(JabberStream *js, xmlnode *packet) +{ + PurpleAccount *account; + xmlnode *starttls; + + account = purple_connection_get_account(js->gc); + + if((starttls = xmlnode_get_child(packet, "starttls"))) { + if(purple_ssl_is_supported()) { + jabber_send_raw(js, + "", -1); + return TRUE; + } else if(xmlnode_get_child(starttls, "required")) { + purple_connection_error_reason(js->gc, + PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT, + _("Server requires TLS/SSL, but no TLS/SSL support was found.")); + return TRUE; + } else if(purple_account_get_bool(account, "require_tls", JABBER_DEFAULT_REQUIRE_TLS)) { + purple_connection_error_reason(js->gc, + PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT, + _("You require encryption, but no TLS/SSL support was found.")); + return TRUE; + } + } + + return FALSE; +} + void jabber_stream_features_parse(JabberStream *js, xmlnode *packet) { if(xmlnode_get_child(packet, "starttls")) { @@ -364,8 +393,7 @@ int ret; gboolean success = TRUE; - if (len == -1) - len = strlen(data); + g_return_val_if_fail(len > 0, FALSE); if (js->state == JABBER_STREAM_CONNECTED) jabber_stream_restart_inactivity_timer(js); @@ -409,6 +437,12 @@ void jabber_send_raw(JabberStream *js, const char *data, int len) { + PurpleConnection *gc; + PurpleAccount *account; + + gc = js->gc; + account = purple_connection_get_account(gc); + /* because printing a tab to debug every minute gets old */ if(strcmp(data, "\t")) { const char *username; @@ -436,9 +470,9 @@ *data_start = '\0'; } - username = purple_connection_get_display_name(js->gc); + username = purple_connection_get_display_name(gc); if (!username) - username = purple_account_get_username(purple_connection_get_account(js->gc)); + username = purple_account_get_username(account); purple_debug_misc("jabber", "Sending%s (%s): %s%s%s\n", jabber_stream_is_ssl(js) ? " (ssl)" : "", username, @@ -449,10 +483,13 @@ g_free(text); } - purple_signal_emit(purple_connection_get_prpl(js->gc), "jabber-sending-text", js->gc, &data); + purple_signal_emit(purple_connection_get_prpl(gc), "jabber-sending-text", gc, &data); if (data == NULL) return; + if (len == -1) + len = strlen(data); + /* If we've got a security layer, we need to encode the data, * splitting it on the maximum buffer length negotiated */ #ifdef HAVE_CYRUS_SASL @@ -460,21 +497,36 @@ int pos = 0; if (!js->gsc && js->fd<0) - return; - - if (len == -1) - len = strlen(data); + g_return_if_reached(); while (pos < len) { int towrite; const char *out; unsigned olen; + int rc; towrite = MIN((len - pos), js->sasl_maxbuf); - sasl_encode(js->sasl, &data[pos], towrite, &out, &olen); + rc = sasl_encode(js->sasl, &data[pos], towrite, + &out, &olen); + if (rc != SASL_OK) { + gchar *error = + g_strdup_printf(_("SASL error: %s"), + sasl_errdetail(js->sasl)); + purple_debug_error("jabber", + "sasl_encode error %d: %s\n", rc, + sasl_errdetail(js->sasl)); + purple_connection_error_reason(gc, + PURPLE_CONNECTION_ERROR_NETWORK_ERROR, + error); + g_free(error); + return; + } pos += towrite; + /* do_jabber_send_raw returns FALSE when it throws a + * connection error. + */ if (!do_jabber_send_raw(js, out, olen)) break; } @@ -482,9 +534,6 @@ } #endif - if (len == -1) - len = strlen(data); - if (js->bosh) jabber_bosh_connection_send_raw(js->bosh, data); else @@ -493,7 +542,7 @@ int jabber_prpl_send_raw(PurpleConnection *gc, const char *buf, int len) { - JabberStream *js = (JabberStream*)gc->proto_data; + JabberStream *js = purple_connection_get_protocol_data(gc); jabber_send_raw(js, buf, len); return len; } @@ -597,7 +646,7 @@ jabber_recv_cb(gpointer data, gint source, PurpleInputCondition condition) { PurpleConnection *gc = data; - JabberStream *js = gc->proto_data; + JabberStream *js = purple_connection_get_protocol_data(gc); int len; static char buf[4096]; @@ -607,14 +656,26 @@ if((len = read(js->fd, buf, sizeof(buf) - 1)) > 0) { gc->last_received = time(NULL); #ifdef HAVE_CYRUS_SASL - if (js->sasl_maxbuf>0) { + if (js->sasl_maxbuf > 0) { const char *out; unsigned int olen; - sasl_decode(js->sasl, buf, len, &out, &olen); - if (olen>0) { + int rc; + + rc = sasl_decode(js->sasl, buf, len, &out, &olen); + if (rc != SASL_OK) { + gchar *error = + g_strdup_printf(_("SASL error: %s"), + sasl_errdetail(js->sasl)); + purple_debug_error("jabber", + "sasl_decode_error %d: %s\n", rc, + sasl_errdetail(js->sasl)); + purple_connection_error_reason(gc, + PURPLE_CONNECTION_ERROR_NETWORK_ERROR, + error); + } else if (olen > 0) { purple_debug_info("jabber", "RecvSASL (%u): %s\n", olen, out); - jabber_parser_process(js,out,olen); - if(js->reinit) + jabber_parser_process(js, out, olen); + if (js->reinit) jabber_stream_init(js); } return; @@ -1584,7 +1645,6 @@ g_free(js->old_source); g_free(js->old_uri); g_free(js->old_track); - g_free(js->expected_rspauth); if (js->vcard_timer != 0) purple_timeout_remove(js->vcard_timer); diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/jabber.h --- a/libpurple/protocols/jabber/jabber.h Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/jabber.h Mon May 10 23:21:44 2010 +0000 @@ -112,7 +112,7 @@ JabberSaslMech *auth_mech; gpointer auth_mech_data; - + /** * The header from the opening tag. This being NULL is treated * as a special condition in the parsing code (signifying the next @@ -122,9 +122,6 @@ char *stream_id; JabberStreamState state; - /* SASL authentication */ - char *expected_rspauth; - GHashTable *buddies; /* diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/libxmpp.c --- a/libpurple/protocols/jabber/libxmpp.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/libxmpp.c Mon May 10 23:21:44 2010 +0000 @@ -127,7 +127,9 @@ NULL, /* get_account_text_table */ jabber_initiate_media, /* initiate_media */ jabber_get_media_caps, /* get_media_caps */ - jabber_get_moods /* get_moods */ + jabber_get_moods, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; static gboolean load_plugin(PurplePlugin *plugin) diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/message.c --- a/libpurple/protocols/jabber/message.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/message.c Mon May 10 23:21:44 2010 +0000 @@ -963,7 +963,7 @@ 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), js); + 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)); diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/namespaces.h --- a/libpurple/protocols/jabber/namespaces.h Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/namespaces.h Mon May 10 23:21:44 2010 +0000 @@ -89,6 +89,9 @@ /* XEP-0237 Roster Versioning */ #define NS_ROSTER_VERSIONING "urn:xmpp:features:rosterver" +/* XEP-0264 File Transfer Thumbnails (Thumbs) */ +#define NS_THUMBS "urn:xmpp:thumbs:0" + /* Google extensions */ #define NS_GOOGLE_CAMERA "http://www.google.com/xmpp/protocol/camera/v1" #define NS_GOOGLE_VIDEO "http://www.google.com/xmpp/protocol/video/v1" diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/presence.c --- a/libpurple/protocols/jabber/presence.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/presence.c Mon May 10 23:21:44 2010 +0000 @@ -924,8 +924,9 @@ goto out; } - presence.chat = jabber_chat_find(js, presence.jid_from->node, - presence.jid_from->domain); + if (presence.jid_from->node) + presence.chat = jabber_chat_find(js, presence.jid_from->node, + presence.jid_from->domain); if(presence.jb->error_msg) { g_free(presence.jb->error_msg); presence.jb->error_msg = NULL; diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/jabber/si.c --- a/libpurple/protocols/jabber/si.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/jabber/si.c Mon May 10 23:21:44 2010 +0000 @@ -32,6 +32,7 @@ #include "notify.h" #include "buddy.h" +#include "data.h" #include "disco.h" #include "jabber.h" #include "ibb.h" @@ -39,6 +40,7 @@ #include "si.h" #define STREAMHOST_CONNECT_TIMEOUT 15 +#define ENABLE_FT_THUMBNAILS 0 typedef struct _JabberSIXfer { JabberStream *js; @@ -1246,9 +1248,14 @@ JabberIq *iq; xmlnode *si, *file, *feature, *x, *field, *option, *value; char buf[32]; +#if ENABLE_FT_THUMBNAILS + gconstpointer thumb; + gsize thumb_size; + purple_xfer_prepare_thumbnail(xfer, "jpeg,png"); +#endif xfer->filename = g_path_get_basename(xfer->local_filename); - + iq = jabber_iq_new(jsx->js, JABBER_IQ_SET); xmlnode_set_attrib(iq->node, "to", xfer->who); si = xmlnode_new_child(iq->node, "si"); @@ -1266,6 +1273,23 @@ xmlnode_set_attrib(file, "size", buf); /* maybe later we'll do hash and date attribs */ +#if ENABLE_FT_THUMBNAILS + /* add thumbnail, if appropriate */ + if ((thumb = purple_xfer_get_thumbnail(xfer, &thumb_size))) { + const gchar *mimetype = purple_xfer_get_thumbnail_mimetype(xfer); + JabberData *thumbnail_data = + jabber_data_create_from_data(thumb, thumb_size, + mimetype, TRUE, jsx->js); + xmlnode *thumbnail = xmlnode_new_child(file, "thumbnail"); + xmlnode_set_namespace(thumbnail, NS_THUMBS); + xmlnode_set_attrib(thumbnail, "cid", + jabber_data_get_cid(thumbnail_data)); + xmlnode_set_attrib(thumbnail, "mime-type", mimetype); + /* cache data */ + jabber_data_associate_local(thumbnail_data, NULL); + } +#endif + feature = xmlnode_new_child(si, "feature"); xmlnode_set_namespace(feature, "http://jabber.org/protocol/feature-neg"); x = xmlnode_new_child(feature, "x"); @@ -1644,12 +1668,29 @@ purple_xfer_request(xfer); } +#if ENABLE_FT_THUMBNAILS +static void +jabber_si_thumbnail_cb(JabberData *data, gchar *alt, gpointer userdata) +{ + PurpleXfer *xfer = (PurpleXfer *) userdata; + + if (data) { + purple_xfer_set_thumbnail(xfer, jabber_data_get_data(data), + jabber_data_get_size(data), jabber_data_get_type(data)); + /* data is ephemeral, get rid of now (the xfer re-owned the thumbnail */ + jabber_data_destroy(data); + } + + purple_xfer_request(xfer); +} +#endif + void jabber_si_parse(JabberStream *js, const char *from, JabberIqType type, const char *id, xmlnode *si) { JabberSIXfer *jsx; PurpleXfer *xfer; - xmlnode *file, *feature, *x, *field, *option, *value; + xmlnode *file, *feature, *x, *field, *option, *value, *thumbnail; const char *stream_id, *filename, *filesize_c, *profile; size_t filesize = 0; @@ -1731,10 +1772,27 @@ purple_xfer_set_request_denied_fnc(xfer, jabber_si_xfer_request_denied); purple_xfer_set_cancel_recv_fnc(xfer, jabber_si_xfer_cancel_recv); purple_xfer_set_end_fnc(xfer, jabber_si_xfer_end); - + js->file_transfers = g_list_append(js->file_transfers, xfer); +#if ENABLE_FT_THUMBNAILS + /* if there is a thumbnail, we should request it... */ + if ((thumbnail = xmlnode_get_child_with_namespace(file, "thumbnail", + NS_THUMBS))) { + const char *cid = xmlnode_get_attrib(thumbnail, "cid"); + if (cid) { + jabber_data_request(js, cid, purple_xfer_get_remote_user(xfer), + NULL, TRUE, jabber_si_thumbnail_cb, xfer); + } else { + purple_xfer_request(xfer); + } + } else { + purple_xfer_request(xfer); + } +#else + thumbnail = NULL; /* Silence warning */ purple_xfer_request(xfer); +#endif } void diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/msn/msg.c --- a/libpurple/protocols/msn/msg.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/msn/msg.c Mon May 10 23:21:44 2010 +0000 @@ -966,14 +966,13 @@ static void got_wink_cb(MsnSlpCall *slpcall, const guchar *data, gsize size) { - FILE *f; + FILE *f = NULL; char *path = NULL; const char *who = slpcall->slplink->remote_user; purple_debug_info("msn", "Received wink from %s\n", who); - if ((f = purple_mkstemp(&path, TRUE))) { - fwrite(data, size, 1, f); - fclose(f); + if ((f = purple_mkstemp(&path, TRUE)) && + (fwrite(data, 1, size, f) == size)) { datacast_inform_user(slpcall->slplink->swboard, who, _("%s sent a wink. Click here to play it"), @@ -984,21 +983,22 @@ who, _("%s sent a wink, but it could not be saved"), NULL); - } + } + if (f) + fclose(f); g_free(path); } static void got_voiceclip_cb(MsnSlpCall *slpcall, const guchar *data, gsize size) { - FILE *f; + FILE *f = NULL; char *path = NULL; const char *who = slpcall->slplink->remote_user; purple_debug_info("msn", "Received voice clip from %s\n", who); - if ((f = purple_mkstemp(&path, TRUE))) { - fwrite(data, size, 1, f); - fclose(f); + if ((f = purple_mkstemp(&path, TRUE)) && + (fwrite(data, 1, size, f) == size)) { datacast_inform_user(slpcall->slplink->swboard, who, _("%s sent a voice clip. Click here to play it"), @@ -1009,7 +1009,9 @@ who, _("%s sent a voice clip, but it could not be saved"), NULL); - } + } + if (f) + fclose(f); g_free(path); } diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/msn/msn.c --- a/libpurple/protocols/msn/msn.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/msn/msn.c Mon May 10 23:21:44 2010 +0000 @@ -194,44 +194,166 @@ return PURPLE_CMD_RET_OK; } +struct public_alias_closure +{ + PurpleAccount *account; + gpointer success_cb; + gpointer failure_cb; +}; + +static gboolean +set_public_alias_length_error(gpointer data) +{ + struct public_alias_closure *closure = data; + PurpleSetPublicAliasFailureCallback failure_cb = closure->failure_cb; + + failure_cb(closure->account, _("Your new MSN friendly name is too long.")); + g_free(closure); + + return FALSE; +} + +static void +prp_success_cb(MsnCmdProc *cmdproc, MsnCommand *cmd) +{ + const char *type, *friendlyname; + struct public_alias_closure *closure; + + g_return_if_fail(cmd->param_count >= 3); + type = cmd->params[1]; + g_return_if_fail(!strcmp(type, "MFN")); + + closure = cmd->trans->data; + friendlyname = purple_url_decode(cmd->params[2]); + + msn_update_contact(cmdproc->session, "Me", MSN_UPDATE_DISPLAY, friendlyname); + + purple_connection_set_display_name( + purple_account_get_connection(closure->account), + friendlyname); + purple_account_set_string(closure->account, "display-name", friendlyname); + + if (closure->success_cb) { + PurpleSetPublicAliasSuccessCallback success_cb = closure->success_cb; + success_cb(closure->account, friendlyname); + } +} + +static void +prp_error_cb(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) +{ + struct public_alias_closure *closure = trans->data; + PurpleSetPublicAliasFailureCallback failure_cb = closure->failure_cb; + gboolean debug; + const char *error_text; + + error_text = msn_error_get_text(error, &debug); + failure_cb(closure->account, error_text); +} + +static void +prp_timeout_cb(MsnCmdProc *cmdproc, MsnTransaction *trans) +{ + struct public_alias_closure *closure = trans->data; + PurpleSetPublicAliasFailureCallback failure_cb = closure->failure_cb; + failure_cb(closure->account, _("Connection Timeout")); +} + void -msn_act_id(PurpleConnection *gc, const char *entry) +msn_set_public_alias(PurpleConnection *pc, const char *alias, + PurpleSetPublicAliasSuccessCallback success_cb, + PurpleSetPublicAliasFailureCallback failure_cb) { MsnCmdProc *cmdproc; MsnSession *session; MsnTransaction *trans; PurpleAccount *account; - const char *alias; - - session = gc->proto_data; + const char *real_alias; + struct public_alias_closure *closure; + + session = purple_connection_get_protocol_data(pc); cmdproc = session->notification->cmdproc; - account = purple_connection_get_account(gc); - - if (entry && *entry) + account = purple_connection_get_account(pc); + + if (alias && *alias) { - char *tmp = g_strdup(entry); - alias = purple_url_encode(g_strstrip(tmp)); + char *tmp = g_strdup(alias); + real_alias = purple_url_encode(g_strstrip(tmp)); g_free(tmp); } else - alias = ""; - - if (strlen(alias) > BUDDY_ALIAS_MAXLEN) + real_alias = ""; + + if (strlen(real_alias) > BUDDY_ALIAS_MAXLEN) { - purple_notify_error(gc, NULL, - _("Your new MSN friendly name is too long."), NULL); + if (failure_cb) { + struct public_alias_closure *closure = + g_new0(struct public_alias_closure, 1); + closure->account = account; + closure->failure_cb = failure_cb; + purple_timeout_add(0, set_public_alias_length_error, closure); + } else { + purple_notify_error(pc, NULL, + _("Your new MSN friendly name is too long."), + NULL); + } return; } - if (*alias == '\0') { - alias = purple_url_encode(purple_account_get_username(account)); + if (*real_alias == '\0') { + real_alias = purple_url_encode(purple_account_get_username(account)); + } + + closure = g_new0(struct public_alias_closure, 1); + closure->account = account; + closure->success_cb = success_cb; + closure->failure_cb = failure_cb; + + trans = msn_transaction_new(cmdproc, "PRP", "MFN %s", real_alias); + msn_transaction_set_data(trans, closure); + msn_transaction_set_data_free(trans, g_free); + msn_transaction_add_cb(trans, "PRP", prp_success_cb); + if (failure_cb) { + msn_transaction_set_error_cb(trans, prp_error_cb); + msn_transaction_set_timeout_cb(trans, prp_timeout_cb); } - - trans = msn_transaction_new(cmdproc, "PRP", "MFN %s", alias); - msn_cmdproc_send_trans(cmdproc, trans); } +static gboolean +get_public_alias_cb(gpointer data) +{ + struct public_alias_closure *closure = data; + PurpleGetPublicAliasSuccessCallback success_cb = closure->success_cb; + const char *alias; + + alias = purple_account_get_string(closure->account, "display-name", + purple_account_get_username(closure->account)); + success_cb(closure->account, alias); + g_free(closure); + + return FALSE; +} + +static void +msn_get_public_alias(PurpleConnection *pc, + PurpleGetPublicAliasSuccessCallback success_cb, + PurpleGetPublicAliasFailureCallback failure_cb) +{ + struct public_alias_closure *closure = g_new0(struct public_alias_closure, 1); + PurpleAccount *account = purple_connection_get_account(pc); + + closure->account = account; + closure->success_cb = success_cb; + purple_timeout_add(0, get_public_alias_cb, closure); +} + +static void +msn_act_id(PurpleConnection *gc, const char *entry) +{ + msn_set_public_alias(gc, entry, NULL, NULL); +} + static void msn_set_prp(PurpleConnection *gc, const char *type, const char *entry) { @@ -2799,75 +2921,77 @@ static PurplePluginProtocolInfo prpl_info = { OPT_PROTO_MAIL_CHECK, - NULL, /* user_splits */ - NULL, /* protocol_options */ - {"png,gif", 0, 0, 96, 96, 0, PURPLE_ICON_SCALE_SEND}, /* icon_spec */ - msn_list_icon, /* list_icon */ - msn_list_emblems, /* list_emblems */ - msn_status_text, /* status_text */ - msn_tooltip_text, /* tooltip_text */ - msn_status_types, /* away_states */ - msn_blist_node_menu, /* blist_node_menu */ - NULL, /* chat_info */ - NULL, /* chat_info_defaults */ - msn_login, /* login */ - msn_close, /* close */ - msn_send_im, /* send_im */ - NULL, /* set_info */ - msn_send_typing, /* send_typing */ - msn_get_info, /* get_info */ - msn_set_status, /* set_away */ - msn_set_idle, /* set_idle */ - NULL, /* change_passwd */ - msn_add_buddy, /* add_buddy */ - NULL, /* add_buddies */ - msn_rem_buddy, /* remove_buddy */ - NULL, /* remove_buddies */ - msn_add_permit, /* add_permit */ - msn_add_deny, /* add_deny */ - msn_rem_permit, /* rem_permit */ - msn_rem_deny, /* rem_deny */ - msn_set_permit_deny, /* set_permit_deny */ - NULL, /* join_chat */ - NULL, /* reject chat invite */ - NULL, /* get_chat_name */ - msn_chat_invite, /* chat_invite */ - msn_chat_leave, /* chat_leave */ - NULL, /* chat_whisper */ - msn_chat_send, /* chat_send */ - msn_keepalive, /* keepalive */ - NULL, /* register_user */ - NULL, /* get_cb_info */ - NULL, /* get_cb_away */ - msn_alias_buddy, /* alias_buddy */ - msn_group_buddy, /* group_buddy */ - msn_rename_group, /* rename_group */ - NULL, /* buddy_free */ - msn_convo_closed, /* convo_closed */ - msn_normalize, /* normalize */ - msn_set_buddy_icon, /* set_buddy_icon */ - msn_remove_group, /* remove_group */ - NULL, /* get_cb_real_name */ - NULL, /* set_chat_topic */ - NULL, /* find_blist_chat */ - NULL, /* roomlist_get_list */ - NULL, /* roomlist_cancel */ - NULL, /* roomlist_expand_category */ - msn_can_receive_file, /* can_receive_file */ - msn_send_file, /* send_file */ - msn_new_xfer, /* new_xfer */ - msn_offline_message, /* offline_message */ - NULL, /* whiteboard_prpl_ops */ - NULL, /* send_raw */ - NULL, /* roomlist_room_serialize */ - NULL, /* unregister_user */ - msn_send_attention, /* send_attention */ - msn_attention_types, /* attention_types */ - sizeof(PurplePluginProtocolInfo), /* struct_size */ - msn_get_account_text_table, /* get_account_text_table */ - NULL, /* initiate_media */ - NULL, /* get_media_caps */ - NULL /* get_moods */ + NULL, /* user_splits */ + NULL, /* protocol_options */ + {"png,gif", 0, 0, 96, 96, 0, PURPLE_ICON_SCALE_SEND}, /* icon_spec */ + msn_list_icon, /* list_icon */ + msn_list_emblems, /* list_emblems */ + msn_status_text, /* status_text */ + msn_tooltip_text, /* tooltip_text */ + msn_status_types, /* away_states */ + msn_blist_node_menu, /* blist_node_menu */ + NULL, /* chat_info */ + NULL, /* chat_info_defaults */ + msn_login, /* login */ + msn_close, /* close */ + msn_send_im, /* send_im */ + NULL, /* set_info */ + msn_send_typing, /* send_typing */ + msn_get_info, /* get_info */ + msn_set_status, /* set_away */ + msn_set_idle, /* set_idle */ + NULL, /* change_passwd */ + msn_add_buddy, /* add_buddy */ + NULL, /* add_buddies */ + msn_rem_buddy, /* remove_buddy */ + NULL, /* remove_buddies */ + msn_add_permit, /* add_permit */ + msn_add_deny, /* add_deny */ + msn_rem_permit, /* rem_permit */ + msn_rem_deny, /* rem_deny */ + msn_set_permit_deny, /* set_permit_deny */ + NULL, /* join_chat */ + NULL, /* reject chat invite */ + NULL, /* get_chat_name */ + msn_chat_invite, /* chat_invite */ + msn_chat_leave, /* chat_leave */ + NULL, /* chat_whisper */ + msn_chat_send, /* chat_send */ + msn_keepalive, /* keepalive */ + NULL, /* register_user */ + NULL, /* get_cb_info */ + NULL, /* get_cb_away */ + msn_alias_buddy, /* alias_buddy */ + msn_group_buddy, /* group_buddy */ + msn_rename_group, /* rename_group */ + NULL, /* buddy_free */ + msn_convo_closed, /* convo_closed */ + msn_normalize, /* normalize */ + msn_set_buddy_icon, /* set_buddy_icon */ + msn_remove_group, /* remove_group */ + NULL, /* get_cb_real_name */ + NULL, /* set_chat_topic */ + NULL, /* find_blist_chat */ + NULL, /* roomlist_get_list */ + NULL, /* roomlist_cancel */ + NULL, /* roomlist_expand_category */ + msn_can_receive_file, /* can_receive_file */ + msn_send_file, /* send_file */ + msn_new_xfer, /* new_xfer */ + msn_offline_message, /* offline_message */ + NULL, /* whiteboard_prpl_ops */ + NULL, /* send_raw */ + NULL, /* roomlist_room_serialize */ + NULL, /* unregister_user */ + msn_send_attention, /* send_attention */ + msn_attention_types, /* attention_types */ + sizeof(PurplePluginProtocolInfo), /* struct_size */ + msn_get_account_text_table, /* get_account_text_table */ + NULL, /* initiate_media */ + NULL, /* get_media_caps */ + NULL, /* get_moods */ + msn_set_public_alias, /* set_public_alias */ + msn_get_public_alias /* get_public_alias */ }; static PurplePluginInfo info = diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/msn/msn.h --- a/libpurple/protocols/msn/msn.h Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/msn/msn.h Mon May 10 23:21:44 2010 +0000 @@ -143,7 +143,10 @@ (MSN_CLIENT_ID_CAPABILITIES)) gboolean msn_email_is_valid(const char *passport); -void msn_act_id(PurpleConnection *gc, const char *entry); +void +msn_set_public_alias(PurpleConnection *gc, const char *alias, + PurpleSetPublicAliasSuccessCallback success_cb, + PurpleSetPublicAliasFailureCallback failure_cb); void msn_send_privacy(PurpleConnection *gc); void msn_send_im_message(MsnSession *session, MsnMessage *msg); diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/msn/notification.c --- a/libpurple/protocols/msn/notification.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/msn/notification.c Mon May 10 23:21:44 2010 +0000 @@ -587,6 +587,7 @@ int payload_len; int adl_count = 0; int fqy_count = 0; + PurpleConnection *pc; const char *display_name; adl_node = xmlnode_new("ml"); @@ -693,11 +694,12 @@ xmlnode_free(adl_node); xmlnode_free(fqy_node); - display_name = purple_connection_get_display_name(session->account->gc); + pc = purple_account_get_connection(session->account); + display_name = purple_connection_get_display_name(pc); if (display_name && strcmp(display_name, purple_account_get_username(session->account))) { - msn_act_id(session->account->gc, display_name); + msn_set_public_alias(pc, display_name, NULL, NULL); } } @@ -1344,11 +1346,11 @@ prp_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { MsnSession *session = cmdproc->session; - const char *type, *value, *friendlyname; + const char *type, *value; g_return_if_fail(cmd->param_count >= 3); - type = cmd->params[2]; + type = cmd->params[2]; if (cmd->param_count == 4) { @@ -1368,19 +1370,6 @@ msn_user_set_work_phone(session->user, NULL); else if (!strcmp(type, "PHM")) msn_user_set_mobile_phone(session->user, NULL); - else { - type = cmd->params[1]; - if (!strcmp(type, "MFN")) { - friendlyname = purple_url_decode(cmd->params[2]); - - msn_update_contact(session, "Me", MSN_UPDATE_DISPLAY, friendlyname); - - purple_connection_set_display_name( - purple_account_get_connection(session->account), - friendlyname); - purple_account_set_string(session->account, "display-name", friendlyname); - } - } } } diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/msn/session.c --- a/libpurple/protocols/msn/session.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/msn/session.c Mon May 10 23:21:44 2010 +0000 @@ -407,7 +407,7 @@ /* Prevent the connection progress going backwards, eg. if we get * transferred several times during login */ - if (session->login_step > step) + if (session->login_step >= step) return; /* If we're already logged in, we're probably here because of a diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/msn/slp.c --- a/libpurple/protocols/msn/slp.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/msn/slp.c Mon May 10 23:21:44 2010 +0000 @@ -422,6 +422,12 @@ xfer->data = slpcall; + if (header->type == 0 && bin_len >= sizeof(MsnFileContext)) { + purple_xfer_set_thumbnail(xfer, &header->preview, + bin_len - sizeof(MsnFileContext), + "image/png"); + } + purple_xfer_request(xfer); } g_free(header); diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/msn/slplink.c --- a/libpurple/protocols/msn/slplink.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/msn/slplink.c Mon May 10 23:21:44 2010 +0000 @@ -691,15 +691,19 @@ gen_context(PurpleXfer *xfer, const char *file_name, const char *file_path) { gsize size = 0; - MsnFileContext header; + MsnFileContext *header; gchar *u8 = NULL; gchar *ret; gunichar2 *uni = NULL; glong currentChar = 0; glong len = 0; + const char *preview; + gsize preview_len; size = purple_xfer_get_size(xfer); + purple_xfer_prepare_thumbnail(xfer, "png"); + if (!file_name) { gchar *basename = g_path_get_basename(file_path); u8 = purple_utf8_try_convert(basename); @@ -715,23 +719,33 @@ u8 = NULL; } - header.length = GUINT32_TO_LE(sizeof(MsnFileContext) - 1); - header.version = GUINT32_TO_LE(2); /* V.3 contains additional unnecessary data */ - header.file_size = GUINT64_TO_LE(size); - header.type = GUINT32_TO_LE(1); /* No file preview */ + preview = purple_xfer_get_thumbnail(xfer, &preview_len); + header = g_malloc(sizeof(MsnFileContext) + preview_len); + + header->length = GUINT32_TO_LE(sizeof(MsnFileContext) - 1); + header->version = GUINT32_TO_LE(2); /* V.3 contains additional unnecessary data */ + header->file_size = GUINT64_TO_LE(size); + if (preview) + header->type = GUINT32_TO_LE(0); + else + header->type = GUINT32_TO_LE(1); len = MIN(len, MAX_FILE_NAME_LEN); for (currentChar = 0; currentChar < len; currentChar++) { - header.file_name[currentChar] = GUINT16_TO_LE(uni[currentChar]); + header->file_name[currentChar] = GUINT16_TO_LE(uni[currentChar]); } - memset(&header.file_name[currentChar], 0x00, (MAX_FILE_NAME_LEN - currentChar) * 2); + memset(&header->file_name[currentChar], 0x00, (MAX_FILE_NAME_LEN - currentChar) * 2); - memset(&header.unknown1, 0, sizeof(header.unknown1)); - header.unknown2 = GUINT32_TO_LE(0xffffffff); - header.preview[0] = '\0'; + memset(&header->unknown1, 0, sizeof(header->unknown1)); + header->unknown2 = GUINT32_TO_LE(0xffffffff); + if (preview) { + memcpy(&header->preview, preview, preview_len); + } + header->preview[preview_len] = '\0'; g_free(uni); - ret = purple_base64_encode((const guchar *)&header, sizeof(MsnFileContext)); + ret = purple_base64_encode((const guchar *)header, sizeof(MsnFileContext) + preview_len); + g_free(header); return ret; } diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/mxit/mxit.c --- a/libpurple/protocols/mxit/mxit.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/mxit/mxit.c Mon May 10 23:21:44 2010 +0000 @@ -635,7 +635,9 @@ mxit_get_text_table, /* get_account_text_table */ NULL, /* initiate_media */ NULL, /* get_media_caps */ - NULL /* get_moods */ + NULL, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/mxit/protocol.c --- a/libpurple/protocols/mxit/protocol.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/mxit/protocol.c Mon May 10 23:21:44 2010 +0000 @@ -1266,6 +1266,15 @@ purple_connection_update_progress( session->con, _( "Successfully Logged In..." ), 3, 4 ); purple_connection_set_state( session->con, PURPLE_CONNECTED ); + /* save extra info if this is a HTTP connection */ + if ( session->http ) { + /* save the http server to use for this session */ + g_strlcpy( session->http_server, records[1]->fields[3]->data, sizeof( session->http_server ) ); + + /* save the session id */ + session->http_sesid = atoi( records[0]->fields[0]->data ); + } + /* display the current splash-screen */ if ( splash_popup_enabled( session ) ) splash_display( session ); @@ -1290,15 +1299,6 @@ g_free( statusmsg2 ); } - /* save extra info if this is a HTTP connection */ - if ( session->http ) { - /* save the http server to use for this session */ - g_strlcpy( session->http_server, records[1]->fields[3]->data, sizeof( session->http_server ) ); - - /* save the session id */ - session->http_sesid = atoi( records[0]->fields[0]->data ); - } - /* retrieve our MXit profile */ mxit_send_extprofile_request( session, NULL, ARRAY_SIZE( profilelist ), profilelist ); } diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/myspace/myspace.c --- a/libpurple/protocols/myspace/myspace.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/myspace/myspace.c Mon May 10 23:21:44 2010 +0000 @@ -3094,7 +3094,9 @@ msim_get_account_text_table, /* get_account_text_table */ NULL, /* initiate_media */ NULL, /* get_media_caps */ - NULL /* get_moods */ + NULL, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; /** diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/novell/novell.c --- a/libpurple/protocols/novell/novell.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/novell/novell.c Mon May 10 23:21:44 2010 +0000 @@ -3530,7 +3530,9 @@ NULL, /* get_account_text_table */ NULL, /* initiate_media */ NULL, /* get_media_caps */ - NULL /* get_moods */ + NULL, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; static PurplePluginInfo info = { diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/null/nullprpl.c --- a/libpurple/protocols/null/nullprpl.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/null/nullprpl.c Mon May 10 23:21:44 2010 +0000 @@ -1120,6 +1120,8 @@ NULL, /* get_account_text_table */ NULL, /* initiate_media */ NULL, /* get_media_caps */ + NULL, /* set_public_alias */ + NULL, /* get_public_alias */ NULL /* get_moods */ }; diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/oscar/libaim.c --- a/libpurple/protocols/oscar/libaim.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/oscar/libaim.c Mon May 10 23:21:44 2010 +0000 @@ -97,7 +97,9 @@ NULL, /* get_account_text_table */ NULL, /* initiate_media */ NULL, /* get_media_caps */ - NULL /* get_moods */ + NULL, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; static PurplePluginInfo info = diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/oscar/libicq.c --- a/libpurple/protocols/oscar/libicq.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/oscar/libicq.c Mon May 10 23:21:44 2010 +0000 @@ -109,6 +109,8 @@ NULL, /* initiate_media */ NULL, /* can_do_media */ oscar_get_purple_moods, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; static PurplePluginInfo info = diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/oscar/oscar.c --- a/libpurple/protocols/oscar/oscar.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/oscar/oscar.c Mon May 10 23:21:44 2010 +0000 @@ -3534,7 +3534,7 @@ PurpleConnection *gc = od->gc; PurpleAccount *account = purple_connection_get_account(gc); PurpleNotifyUserInfo *user_info; - gchar *tmp = NULL, *info_utf8 = NULL; + gchar *tmp = NULL, *info_utf8 = NULL, *base_profile_url = NULL; va_list ap; aim_userinfo_t *userinfo; @@ -3587,8 +3587,9 @@ } purple_notify_user_info_add_section_break(user_info); - tmp = g_strdup_printf("%s", - purple_normalize(account, userinfo->bn), _("View web profile")); + base_profile_url = oscar_util_valid_name_icq(userinfo->bn) ? "http://www.icq.com/people" : "http://profiles.aim.com"; + tmp = g_strdup_printf("%s", + base_profile_url, purple_normalize(account, userinfo->bn), _("View web profile")); purple_notify_user_info_add_pair(user_info, NULL, tmp); g_free(tmp); diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/qq/qq.c --- a/libpurple/protocols/qq/qq.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/qq/qq.c Mon May 10 23:21:44 2010 +0000 @@ -1041,7 +1041,9 @@ NULL, /* get_account_text_table */ NULL, /* initiate_media */ NULL, /* get_media_caps */ - NULL /* get_moods */ + NULL, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; static PurplePluginInfo info = { diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/silc/silc.c --- a/libpurple/protocols/silc/silc.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/silc/silc.c Mon May 10 23:21:44 2010 +0000 @@ -2117,7 +2117,9 @@ NULL, /* get_account_text_table */ NULL, /* initiate_media */ NULL, /* get_media_caps */ - NULL /* get_moods */ + NULL, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; static PurplePluginInfo info = diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/silc10/silc.c --- a/libpurple/protocols/silc10/silc.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/silc10/silc.c Mon May 10 23:21:44 2010 +0000 @@ -1842,7 +1842,10 @@ sizeof(PurplePluginProtocolInfo), /* struct_size */ NULL, /* get_account_text_table */ NULL, /* initiate_media */ - NULL /* can_do_media */ + NULL, /* get_media_caps */ + NULL, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; static PurplePluginInfo info = diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/simple/simple.c --- a/libpurple/protocols/simple/simple.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/simple/simple.c Mon May 10 23:21:44 2010 +0000 @@ -2110,7 +2110,9 @@ NULL, /* get_account_text_table */ NULL, /* initiate_media */ NULL, /* get_media_caps */ - NULL /* get_moods */ + NULL, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/yahoo/libyahoo.c --- a/libpurple/protocols/yahoo/libyahoo.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/yahoo/libyahoo.c Mon May 10 23:21:44 2010 +0000 @@ -265,7 +265,9 @@ yahoo_get_account_text_table, /* get_account_text_table */ NULL, /* initiate_media */ NULL, /* get_media_caps */ - NULL /* get_moods */ + NULL, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; static PurplePluginInfo info = diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/yahoo/libyahoojp.c --- a/libpurple/protocols/yahoo/libyahoojp.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/yahoo/libyahoojp.c Mon May 10 23:21:44 2010 +0000 @@ -161,7 +161,9 @@ yahoojp_get_account_text_table, /* get_account_text_table */ NULL, /* initiate_media */ NULL, /* get_media_caps */ - NULL /* get_moods */ + NULL, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; static PurplePluginInfo info = diff -r edb7c80bf930 -r f8ec889c5bce libpurple/protocols/zephyr/zephyr.c --- a/libpurple/protocols/zephyr/zephyr.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/protocols/zephyr/zephyr.c Mon May 10 23:21:44 2010 +0000 @@ -2909,7 +2909,9 @@ NULL, /* get_account_text_table */ NULL, /* initate_media */ NULL, /* get_media_caps */ - NULL /* get_moods */ + NULL, /* get_moods */ + NULL, /* set_public_alias */ + NULL /* get_public_alias */ }; static PurplePluginInfo info = { diff -r edb7c80bf930 -r f8ec889c5bce libpurple/prpl.h --- a/libpurple/prpl.h Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/prpl.h Mon May 10 23:21:44 2010 +0000 @@ -52,6 +52,13 @@ typedef struct _PurpleBuddyIconSpec PurpleBuddyIconSpec; /** + * A description of a file transfer thumbnail specification. + * This tells the UI if and what image formats the prpl support for file + * transfer thumbnails. + */ +typedef struct _PurpleThumbnailSpec PurpleThumbnailSpec; + +/** * This \#define exists just to make it easier to fill out the buddy icon * field in the prpl info struct for protocols that couldn't care less. */ @@ -573,8 +580,48 @@ /** * Returns an array of "PurpleMood"s, with the last one having * "mood" set to @c NULL. + * @since 2.7.0 */ PurpleMood *(*get_moods)(PurpleAccount *account); + + /** + * Set the user's "friendly name" (or alias or nickname or + * whatever term you want to call it) on the server. The + * protocol plugin should call success_cb or failure_cb + * *asynchronously* (if it knows immediately that the set will fail, + * call one of the callbacks from an idle/0-second timeout) depending + * on if the nickname is set successfully. + * + * @param gc The connection for which to set an alias + * @param alias The new server-side alias/nickname for this account, + * or NULL to unset the alias/nickname (or return it to + * a protocol-specific "default"). + * @param success_cb Callback to be called if the public alias is set + * @param failure_cb Callback to be called if setting the public alias + * fails + * @see purple_account_set_public_alias + * @since 2.7.0 + */ + void (*set_public_alias)(PurpleConnection *gc, const char *alias, + PurpleSetPublicAliasSuccessCallback success_cb, + PurpleSetPublicAliasFailureCallback failure_cb); + /** + * Retrieve the user's "friendly name" as set on the server. + * The protocol plugin should call success_cb or failure_cb + * *asynchronously* (even if it knows immediately that the get will fail, + * call one of the callbacks from an idle/0-second timeout) depending + * on if the nickname is retrieved. + * + * @param gc The connection for which to retireve the alias + * @param success_cb Callback to be called with the retrieved alias + * @param failure_cb Callback to be called if the prpl is unable to + * retrieve the alias + * @see purple_account_get_public_alias + * @since 2.7.0 + */ + void (*get_public_alias)(PurpleConnection *gc, + PurpleGetPublicAliasSuccessCallback success_cb, + PurpleGetPublicAliasFailureCallback failure_cb); }; #define PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl, member) \ diff -r edb7c80bf930 -r f8ec889c5bce libpurple/request.c --- a/libpurple/request.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/request.c Mon May 10 23:21:44 2010 +0000 @@ -1317,6 +1317,29 @@ } void * +purple_request_action_with_icon(void *handle, const char *title, + const char *primary, + const char *secondary, int default_action, + PurpleAccount *account, const char *who, + PurpleConversation *conv, gconstpointer icon_data, + gsize icon_size, void *user_data, size_t action_count, ...) +{ + void *ui_handle; + va_list args; + + g_return_val_if_fail(action_count > 0, NULL); + + va_start(args, action_count); + ui_handle = purple_request_action_with_icon_varg(handle, title, primary, + secondary, default_action, account, who, conv, icon_data, icon_size, + user_data, action_count, args); + va_end(args); + + return ui_handle; +} + + +void * purple_request_action_varg(void *handle, const char *title, const char *primary, const char *secondary, int default_action, @@ -1348,6 +1371,41 @@ } void * +purple_request_action_with_icon_varg(void *handle, const char *title, + const char *primary, const char *secondary, + int default_action, + PurpleAccount *account, const char *who, + PurpleConversation *conv, gconstpointer icon_data, + gsize icon_size, + void *user_data, size_t action_count, va_list actions) +{ + PurpleRequestUiOps *ops; + + g_return_val_if_fail(action_count > 0, NULL); + + ops = purple_request_get_ui_ops(); + + if (ops != NULL && ops->request_action_with_icon != NULL) { + PurpleRequestInfo *info; + + info = g_new0(PurpleRequestInfo, 1); + info->type = PURPLE_REQUEST_ACTION; + info->handle = handle; + info->ui_handle = ops->request_action_with_icon(title, primary, secondary, + default_action, account, who, conv, + icon_data, icon_size, + user_data, action_count, actions); + + handles = g_list_append(handles, info); + + return info->ui_handle; + } + + return NULL; +} + + +void * purple_request_fields(void *handle, const char *title, const char *primary, const char *secondary, PurpleRequestFields *fields, const char *ok_text, GCallback ok_cb, diff -r edb7c80bf930 -r f8ec889c5bce libpurple/request.h --- a/libpurple/request.h Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/request.h Mon May 10 23:21:44 2010 +0000 @@ -237,10 +237,18 @@ PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data); + /** @see purple_request_action_with_icon_varg(). */ + void *(*request_action_with_icon)(const char *title, const char *primary, + const char *secondary, int default_action, + PurpleAccount *account, const char *who, + PurpleConversation *conv, + gconstpointer icon_data, gsize icon_size, + void *user_data, + size_t action_count, va_list actions); + void (*_purple_reserved1)(void); void (*_purple_reserved2)(void); void (*_purple_reserved3)(void); - void (*_purple_reserved4)(void); } PurpleRequestUiOps; typedef void (*PurpleRequestInputCb)(void *, const char *); @@ -1393,6 +1401,29 @@ void *user_data, size_t action_count, va_list actions); /** + * Version of purple_request_action() supplying an image for the UI to + * optionally display as an icon in the dialog; see its documentation + * @since 2.7.0 + */ +void *purple_request_action_with_icon(void *handle, const char *title, + const char *primary, const char *secondary, int default_action, + PurpleAccount *account, const char *who, PurpleConversation *conv, + gconstpointer icon_data, gsize icon_size, void *user_data, + size_t action_count, ...); + +/** + * va_list version of purple_request_action_with_icon(); + * see its documentation. + * @since 2.7.0 + */ +void *purple_request_action_with_icon_varg(void *handle, const char *title, + const char *primary, const char *secondary, int default_action, + PurpleAccount *account, const char *who, PurpleConversation *conv, + gconstpointer icon_data, gsize icon_size, + void *user_data, size_t action_count, va_list actions); + + +/** * Displays groups of fields for the user to fill in. * * @param handle The plugin or connection handle. For some things this @@ -1477,6 +1508,19 @@ _("_Accept"), (accept_cb), _("_Cancel"), (cancel_cb)) /** + * A wrapper for purple_request_action_with_icon() that uses Accept and Cancel + * buttons. + */ +#define purple_request_accept_cancel_with_icon(handle, title, primary, secondary, \ + default_action, account, who, conv, \ + icon_data, icon_size, \ + user_data, accept_cb, cancel_cb) \ + purple_request_action_with_icon((handle), (title), (primary), (secondary), \ + (default_action), account, who, conv, icon_data, icon_size, \ + (user_data), 2, \ + _("_Accept"), (accept_cb), _("_Cancel"), (cancel_cb)) + +/** * Displays a file selector request dialog. Returns the selected filename to * the callback. Can be used for either opening a file or saving a file. * diff -r edb7c80bf930 -r f8ec889c5bce libpurple/tests/test_util.c --- a/libpurple/tests/test_util.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/tests/test_util.c Mon May 10 23:21:44 2010 +0000 @@ -121,6 +121,37 @@ } END_TEST +START_TEST(test_utf8_strip_unprintables) +{ + fail_unless(NULL == purple_utf8_strip_unprintables(NULL)); + /* invalid UTF-8 */ +#if 0 + /* disabled because make check fails on an assertion */ + fail_unless(NULL == purple_utf8_strip_unprintables("abc\x80\x7f")); +#endif + /* \t, \n, \r, space */ + assert_string_equal_free("ab \tcd\nef\r ", purple_utf8_strip_unprintables("ab \tcd\nef\r ")); + /* ASCII control characters (stripped) */ + assert_string_equal_free(" aaaa ", purple_utf8_strip_unprintables( + "\x01\x02\x03\x04\x05\x06\x07\x08\x0B\x0C\x0E\x0F\x10 aaaa " + "\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F")); + /* Basic ASCII */ + assert_string_equal_free("Foobar", purple_utf8_strip_unprintables("Foobar")); + /* 0xE000 - 0xFFFD (UTF-8 encoded) */ + /* U+F1F7 */ + assert_string_equal_free("aaaa\xef\x87\xb7", purple_utf8_strip_unprintables("aaaa\xef\x87\xb7")); +#if 0 + /* disabled because make check fails on an assertion */ + /* U+DB80 (Private Use High Surrogate, First) -- should be stripped */ + assert_string_equal_free("aaaa", purple_utf8_strip_unprintables("aaaa\xed\xa0\x80")); + /* U+FFFE (should be stripped) */ + assert_string_equal_free("aaaa", purple_utf8_strip_unprintables("aaaa\xef\xbf\xbe")); +#endif + /* U+FEFF (should not be stripped) */ + assert_string_equal_free("aaaa\xef\xbb\xbf", purple_utf8_strip_unprintables("aaaa\xef\xbb\xbf")); +} +END_TEST + START_TEST(test_mime_decode_field) { gchar *result = purple_mime_decode_field("=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?="); @@ -168,6 +199,10 @@ tcase_add_test(tc, test_markup_html_to_xhtml); suite_add_tcase(s, tc); + tc = tcase_create("Stripping Unparseables"); + tcase_add_test(tc, test_utf8_strip_unprintables); + suite_add_tcase(s, tc); + tc = tcase_create("MIME"); tcase_add_test(tc, test_mime_decode_field); suite_add_tcase(s, tc); diff -r edb7c80bf930 -r f8ec889c5bce libpurple/util.c --- a/libpurple/util.c Fri Apr 23 16:58:03 2010 +0000 +++ b/libpurple/util.c Mon May 10 23:21:44 2010 +0000 @@ -4593,12 +4593,22 @@ } workstr = iter = g_new(gchar, strlen(str) + 1); - for ( ; *str; ++str) { - guchar c = *str; - if (c >= 0x20 || c == '\t' || c == '\n' || c == '\r') { - *iter = c; - ++iter; + while (*str) { + gunichar ch = g_utf8_get_char(str); + gchar *next = g_utf8_next_char(str); + /* + * Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | + * [#x10000-#x10FFFF] + */ + if ((ch == '\t' || ch == '\n' || ch == '\r') || + (ch >= 0x20 && ch <= 0xD7FF) || + (ch >= 0xE000 && ch <= 0xFFFD) || + (ch >= 0x10000 && ch <= 0x10FFFF)) { + memcpy(iter, str, next - str); + iter += (next - str); } + + str = next; } /* nul-terminate the new string */ diff -r edb7c80bf930 -r f8ec889c5bce pidgin/gtkft.c --- a/pidgin/gtkft.c Fri Apr 23 16:58:03 2010 +0000 +++ b/pidgin/gtkft.c Mon May 10 23:21:44 2010 +0000 @@ -40,6 +40,9 @@ #define PIDGINXFER(xfer) \ (PidginXferUiData *)(xfer)->ui_data +/* the maximum size of files we will try to make a thumbnail for */ +#define PIDGIN_XFER_MAX_SIZE_IMAGE_THUMBNAIL 10 * 1024 * 1024 + struct _PidginXferDialog { gboolean keep_open; @@ -1157,6 +1160,67 @@ pidgin_xfer_dialog_cancel_xfer(xfer_dialog, xfer); } +static void +pidgin_xfer_add_thumbnail(PurpleXfer *xfer, const gchar *formats) +{ + purple_debug_info("ft", "creating thumbnail for transfer\n"); + + if (purple_xfer_get_size(xfer) <= PIDGIN_XFER_MAX_SIZE_IMAGE_THUMBNAIL) { + GdkPixbuf *thumbnail = + gdk_pixbuf_new_from_file_at_size( + purple_xfer_get_local_filename(xfer), 128, 128, NULL); + + if (thumbnail) { + gchar **formats_split = g_strsplit(formats, ",", 0); + gchar *buffer = NULL; + gsize size; + char *option_keys[2] = {NULL, NULL}; + char *option_values[2] = {NULL, NULL}; + int i; + gchar *format = NULL; + + for (i = 0; formats_split[i]; i++) { + if (purple_strequal(formats_split[i], "jpeg")) { + purple_debug_info("ft", "creating JPEG thumbnail\n"); + option_keys[0] = "quality"; + option_values[0] = "90"; + format = "jpeg"; + break; + } else if (purple_strequal(formats_split[i], "png")) { + purple_debug_info("ft", "creating PNG thumbnail\n"); + option_keys[0] = "compression"; + option_values[0] = "9"; + format = "png"; + break; + } + } + + /* Try the first format given by the PRPL without options */ + if (format == NULL) { + purple_debug_info("ft", + "creating thumbnail of format %s as demanded by PRPL\n", + formats_split[0]); + format = formats_split[0]; + } + + gdk_pixbuf_save_to_bufferv(thumbnail, &buffer, &size, format, + option_keys, option_values, NULL); + + if (buffer) { + gchar *mimetype = g_strdup_printf("image/%s", format); + purple_debug_info("ft", + "created thumbnail of %" G_GSIZE_FORMAT " bytes\n", + size); + purple_xfer_set_thumbnail(xfer, buffer, size, mimetype); + g_free(buffer); + g_free(mimetype); + } + g_object_unref(thumbnail); + g_strfreev(formats_split); + } + } +} + static PurpleXferUiOps ops = { pidgin_xfer_new_xfer, @@ -1168,7 +1232,7 @@ NULL, NULL, NULL, - NULL + pidgin_xfer_add_thumbnail }; /************************************************************************** diff -r edb7c80bf930 -r f8ec889c5bce pidgin/gtkrequest.c --- a/pidgin/gtkrequest.c Fri Apr 23 16:58:03 2010 +0000 +++ b/pidgin/gtkrequest.c Mon May 10 23:21:44 2010 +0000 @@ -26,6 +26,7 @@ #include "internal.h" #include "pidgin.h" +#include "debug.h" #include "prefs.h" #include "util.h" @@ -592,9 +593,11 @@ } static void * -pidgin_request_action(const char *title, const char *primary, +pidgin_request_action_with_icon(const char *title, const char *primary, const char *secondary, int default_action, - PurpleAccount *account, const char *who, PurpleConversation *conv, + PurpleAccount *account, const char *who, + PurpleConversation *conv, gconstpointer icon_data, + gsize icon_size, void *user_data, size_t action_count, va_list actions) { PidginRequestData *data; @@ -602,7 +605,7 @@ GtkWidget *vbox; GtkWidget *hbox; GtkWidget *label; - GtkWidget *img; + GtkWidget *img = NULL; void **buttons; char *label_text; char *primary_esc, *secondary_esc; @@ -659,8 +662,42 @@ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); /* Dialog icon. */ - img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, + if (icon_data) { + GdkPixbufLoader *loader = gdk_pixbuf_loader_new(); + GdkPixbuf *pixbuf = NULL; + if (gdk_pixbuf_loader_write(loader, icon_data, icon_size, NULL)) { + pixbuf = gdk_pixbuf_loader_get_pixbuf(loader); + if (pixbuf) { + /* scale the image if it is too large */ + int width = gdk_pixbuf_get_width(pixbuf); + int height = gdk_pixbuf_get_height(pixbuf); + if (width > 128 || height > 128) { + int scaled_width = width > height ? 128 : (128 * width) / height; + int scaled_height = height > width ? 128 : (128 * height) / width; + GdkPixbuf *scaled = + gdk_pixbuf_scale_simple(pixbuf, scaled_width, scaled_height, + GDK_INTERP_BILINEAR); + + purple_debug_info("pidgin", + "dialog icon was too large, scale it down\n"); + if (scaled) { + g_object_unref(pixbuf); + pixbuf = scaled; + } + } + img = gtk_image_new_from_pixbuf(pixbuf); + } + } else { + purple_debug_info("pidgin", "failed to parse dialog icon\n"); + } + gdk_pixbuf_loader_close(loader, NULL); + g_object_unref(loader); + } + + if (!img) { + img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); + } gtk_misc_set_alignment(GTK_MISC(img), 0, 0); gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); @@ -712,6 +749,17 @@ return data; } +static void * +pidgin_request_action(const char *title, const char *primary, + const char *secondary, int default_action, + PurpleAccount *account, const char *who, PurpleConversation *conv, + void *user_data, size_t action_count, va_list actions) +{ + return pidgin_request_action_with_icon(title, primary, secondary, + default_action, account, who, conv, NULL, 0, user_data, action_count, + actions); +} + static void req_entry_field_changed_cb(GtkWidget *entry, PurpleRequestField *field) { @@ -1699,7 +1747,7 @@ pidgin_request_file, pidgin_close_request, pidgin_request_folder, - NULL, + pidgin_request_action_with_icon, NULL, NULL, NULL diff -r edb7c80bf930 -r f8ec889c5bce pidgin/plugins/timestamp_format.c --- a/pidgin/plugins/timestamp_format.c Fri Apr 23 16:58:03 2010 +0000 +++ b/pidgin/plugins/timestamp_format.c Mon May 10 23:21:44 2010 +0000 @@ -12,6 +12,17 @@ #include +static const char *format_12hour_hour(const struct tm *tm) +{ + static char hr[3]; + int hour = tm->tm_hour % 12; + if (hour == 0) + hour = 12; + + g_snprintf(hr, sizeof(hr), "%d", hour); + return hr; +} + static PurplePluginPrefFrame * get_plugin_pref_frame(PurplePlugin *plugin) { @@ -24,10 +35,14 @@ ppref = purple_plugin_pref_new_with_label(_("Timestamp Format Options")); purple_plugin_pref_frame_add(frame, ppref); - tmp = g_strdup_printf(_("_Force 24-hour time format")); + tmp = g_strdup_printf(_("_Force timestamp format:")); ppref = purple_plugin_pref_new_with_name_and_label( - "/plugins/gtk/timestamp_format/force_24hr", + "/plugins/gtk/timestamp_format/force", tmp); + purple_plugin_pref_set_type(ppref, PURPLE_PLUGIN_PREF_CHOICE); + purple_plugin_pref_add_choice(ppref, _("Use system default"), "default"); + purple_plugin_pref_add_choice(ppref, _("12 hour time format"), "force12"); + purple_plugin_pref_add_choice(ppref, _("24 hour time format"), "force24"); purple_plugin_pref_frame_add(frame, ppref); g_free(tmp); @@ -58,27 +73,50 @@ static char *timestamp_cb_common(PurpleConversation *conv, time_t t, gboolean show_date, - gboolean force, + const char *force, const char *dates, gboolean parens) { + struct tm *tm; + g_return_val_if_fail(dates != NULL, NULL); + tm = localtime(&t); + if (show_date || !strcmp(dates, "always") || (conv != NULL && purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT && !strcmp(dates, "chats"))) { - struct tm *tm = localtime(&t); - if (force) + if (g_str_equal(force, "force24")) return g_strdup_printf("%s%s%s", parens ? "(" : "", purple_utf8_strftime("%Y-%m-%d %H:%M:%S", tm), parens ? ")" : ""); - else + else if (g_str_equal(force, "force12")) { + char *date = g_strdup_printf("%s", purple_utf8_strftime("%Y-%m-%d ", tm)); + char *remtime = g_strdup_printf("%s", purple_utf8_strftime(":%M:%S %p", tm)); + const char *hour = format_12hour_hour(tm); + char *output; + + output = g_strdup_printf("%s%s%s%s%s", + parens ? "(" : "", date, + hour, remtime, parens ? ")" : ""); + + g_free(date); + g_free(remtime); + + return output; + } else return g_strdup_printf("%s%s%s", parens ? "(" : "", purple_date_format_long(tm), parens ? ")" : ""); } - if (force) - { - struct tm *tm = localtime(&t); + if (g_str_equal(force, "force24")) return g_strdup_printf("%s%s%s", parens ? "(" : "", purple_utf8_strftime("%H:%M:%S", tm), parens ? ")" : ""); + else if (g_str_equal(force, "force12")) { + const char *hour = format_12hour_hour(tm); + char *remtime = g_strdup_printf("%s", purple_utf8_strftime(":%M:%S %p", tm)); + char *output = g_strdup_printf("%s%s%s%s", parens ? "(" : "", hour, remtime, parens ? ")" : ""); + + g_free(remtime); + + return output; } return NULL; @@ -87,8 +125,8 @@ static char *conversation_timestamp_cb(PurpleConversation *conv, time_t t, gboolean show_date, gpointer data) { - gboolean force = purple_prefs_get_bool( - "/plugins/gtk/timestamp_format/force_24hr"); + const char *force = purple_prefs_get_string( + "/plugins/gtk/timestamp_format/force"); const char *dates = purple_prefs_get_string( "/plugins/gtk/timestamp_format/use_dates/conversation"); @@ -99,8 +137,8 @@ static char *log_timestamp_cb(PurpleLog *log, time_t t, gboolean show_date, gpointer data) { - gboolean force = purple_prefs_get_bool( - "/plugins/gtk/timestamp_format/force_24hr"); + const char *force = purple_prefs_get_string( + "/plugins/gtk/timestamp_format/force"); const char *dates = purple_prefs_get_string( "/plugins/gtk/timestamp_format/use_dates/log"); @@ -264,7 +302,17 @@ purple_prefs_add_none("/plugins/gtk"); purple_prefs_add_none("/plugins/gtk/timestamp_format"); - purple_prefs_add_bool("/plugins/gtk/timestamp_format/force_24hr", TRUE); + if (!purple_prefs_exists("/plugins/gtk/timestamp_format/force") && + purple_prefs_exists("/plugins/gtk/timestamp_format/force_24hr")) + { + if (purple_prefs_get_bool( + "/plugins/gtk/timestamp_format/force_24hr")) + purple_prefs_add_string("/plugins/gtk/timestamp_format/force", "force24"); + else + purple_prefs_add_string("/plugins/gtk/timestamp_format/force", "default"); + } + else + purple_prefs_add_string("/plugins/gtk/timestamp_format/force", "default"); purple_prefs_add_none("/plugins/gtk/timestamp_format/use_dates"); purple_prefs_add_string("/plugins/gtk/timestamp_format/use_dates/conversation", "automatic"); diff -r edb7c80bf930 -r f8ec889c5bce po/ca.po --- a/po/ca.po Fri Apr 23 16:58:03 2010 +0000 +++ b/po/ca.po Mon May 10 23:21:44 2010 +0000 @@ -33,8 +33,8 @@ msgstr "" "Project-Id-Version: Pidgin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-07 21:58+0200\n" -"PO-Revision-Date: 2010-04-09 09:06+0200\n" +"POT-Creation-Date: 2010-05-06 07:36+0200\n" +"PO-Revision-Date: 2010-05-08 16:11+0200\n" "Last-Translator: Josep Puigdemont i Casamajó \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" @@ -643,7 +643,6 @@ msgid "Conversation" msgstr "Conversa" -# FIXME ? msgid "Clear Scrollback" msgstr "Neteja la finestra" @@ -1060,7 +1059,6 @@ msgid "Edit Buddy Pounce" msgstr "Edita l'avís per a l'amic" -# FIXME msgid "Pounce Who" msgstr "Avisa dels Who" @@ -1512,7 +1510,6 @@ msgid "Beep too!" msgstr "Fes pip també!" -# FIXME msgid "Set URGENT for the terminal window." msgstr "Estableix URGENT per a la finestra del terminal." @@ -1681,6 +1678,12 @@ msgid "Set User Info" msgstr "Estableix les dades d'usuari" +msgid "This protocol does not support setting a public alias." +msgstr "Aquest protocol no permet establir un àlies pulic." + +msgid "This protocol does not support fetching the public alias." +msgstr "Aquest protocol no permet aconseguir l'àlies públic." + msgid "Unknown" msgstr "Desconegut" @@ -2764,7 +2767,6 @@ msgid "One Time Password" msgstr "Contrasenya d'un sol ús" -# FIXME ? #. *< type #. *< ui_requirement #. *< flags @@ -3827,15 +3829,6 @@ msgid "execute" msgstr "executa" -msgid "Server requires TLS/SSL, but no TLS/SSL support was found." -msgstr "" -"El servidor requereix TLS/SSL per entrar, però no s'ha trobat cap " -"implementació de TLS/SSL." - -msgid "You require encryption, but no TLS/SSL support was found." -msgstr "" -"Heu requerit que es xifri, però no s'ha trobat cap implementació de TLS/SSL." - msgid "Server requires plaintext authentication over an unencrypted stream" msgstr "El servidor requereix autenticació de text sobre un flux no xifrat" @@ -3873,6 +3866,43 @@ msgid "SASL error: %s" msgstr "Error SASL: %s" +msgid "Invalid Encoding" +msgstr "La condició no és vàlida" + +msgid "Unsupported Extension" +msgstr "Aquesta extensió no està implementada" + +# MitM: Man-in-the-middle... segons wiki: intermediari +msgid "" +"Unexpected response from the server. This may indicate a possible MITM " +"attack" +msgstr "" +"S'ha rebut una resposta inesperada del servidor. Això podria indicar un " +"possible atac informàtic \"man-in-the-middle\"" + +msgid "" +"The server does support channel binding, but did not appear to advertise " +"it. This indicates a likely MITM attack" +msgstr "" +"Aquest servidor permet vincular canals, tot i que no ho havia anunciat. Això " +"podria ser indicatiu d'un atac informàtic \"man-in-the-middle\"" + +msgid "Server does not support channel binding" +msgstr "El servidor no permet vincular canals" + +msgid "Unsupported channel binding method" +msgstr "Aquest mètode de vinculació de canals no està implementat" + +msgid "User not found" +msgstr "No s'ha trobat l'usuari" + +msgid "Invalid Username Encoding" +msgstr "La codificació del nom d'usuari no és vàlida" + +# Mirar com es traduïa 'Constraint variables' +msgid "Resource Constraint" +msgstr "Restriccions del recurs" + # FIXME: canonicalize -> normalitzar (josep) msgid "Unable to canonicalize username" msgstr "No s'ha pogut normalitzar el nom d'usuari" @@ -4178,16 +4208,28 @@ msgid "Roles:" msgstr "Rols:" +msgid "Server requires TLS/SSL, but no TLS/SSL support was found." +msgstr "" +"El servidor requereix TLS/SSL per entrar, però no s'ha trobat cap " +"implementació de TLS/SSL." + +msgid "You require encryption, but no TLS/SSL support was found." +msgstr "" +"Heu requerit que es xifri, però no s'ha trobat cap implementació de TLS/SSL." + msgid "Ping timed out" msgstr "S'ha esgitat el temps d'espera (ping)" msgid "Invalid XMPP ID" msgstr "ID de l'XMPP invàlid" +msgid "Invalid XMPP ID. Username portion must be set." +msgstr "L'ID de l'XMPP no és vàlid. Cal especificar el nom d'usuari." + msgid "Invalid XMPP ID. Domain must be set." msgstr "L'ID de l'XMPP no és vàlid. Cal especificar un domini." -# FIX +# FIXME msgid "Malformed BOSH URL" msgstr "L'URL BOSH està malmès" @@ -4319,10 +4361,10 @@ msgstr "Permet les botzines" msgid "Mood Name" -msgstr "" +msgstr "Nom de l'estat d'ànim" msgid "Mood Comment" -msgstr "" +msgstr "Comentari sobre l'estat d'ànim" #. primitive #. ID @@ -4501,10 +4543,6 @@ msgid "Remote Connection Failed" msgstr "Ha fallat la connexió remota" -# Mirar com es traduïa 'Constraint variables' -msgid "Resource Constraint" -msgstr "Restriccions del recurs" - msgid "Restricted XML" msgstr "XML restringit" @@ -4813,7 +4851,7 @@ msgstr "Error desconegut en la presència" msgid "An error occurred on the in-band bytestream transfer\n" -msgstr "S'ha produit un error en el fluxe de transferència de dades en banda\n" +msgstr "S'ha produït un error en el flux de transferència de dades en banda\n" msgid "Transfer was closed." msgstr "La transferència s'ha tancat." @@ -4868,9 +4906,8 @@ msgid "Anxious" msgstr "Ansiós" -#, fuzzy msgid "Aroused" -msgstr "S'enviarà" +msgstr "Animat" msgid "Ashamed" msgstr "Avergonyit" @@ -4884,32 +4921,26 @@ msgid "Calm" msgstr "Calmat" -#, fuzzy msgid "Cautious" -msgstr "Xats" +msgstr "Prudent" msgid "Cold" msgstr "Fred" -#, fuzzy msgid "Confident" -msgstr "Conflicte" - -#, fuzzy +msgstr "Amb confiança" + msgid "Confused" -msgstr "_Configura" - -#, fuzzy +msgstr "Confós" + msgid "Contemplative" -msgstr "Contacte" - -#, fuzzy +msgstr "Contemplatiu" + msgid "Contented" -msgstr "Connectat" - -#, fuzzy +msgstr "Acontentat" + msgid "Cranky" -msgstr "Empresa" +msgstr "Empipat" msgid "Crazy" msgstr "Boig" @@ -4920,9 +4951,8 @@ msgid "Curious" msgstr "Curiós" -#, fuzzy msgid "Dejected" -msgstr "Rebutjat" +msgstr "Enfonsat" msgid "Depressed" msgstr "Deprimit" @@ -4931,11 +4961,10 @@ msgstr "Decebut" msgid "Disgusted" -msgstr "" - -#, fuzzy +msgstr "Repugnat" + msgid "Dismayed" -msgstr "Inhabilitat" +msgstr "Descoratjat" msgid "Distracted" msgstr "Distret" @@ -4943,17 +4972,15 @@ msgid "Embarrassed" msgstr "Avergonyit" -#, fuzzy msgid "Envious" -msgstr "Ansiós" +msgstr "Envejós" #. 2 msgid "Excited" msgstr "Excitat" -#, fuzzy msgid "Flirtatious" -msgstr "Gloriós" +msgstr "Amb ganes de flirtar" msgid "Frustrated" msgstr "Frustrat" @@ -4961,9 +4988,8 @@ msgid "Grateful" msgstr "Agraït" -#, fuzzy msgid "Grieving" -msgstr "S'està recuperant..." +msgstr "De dol" #. 3 msgid "Grumpy" @@ -4984,7 +5010,7 @@ msgstr "Calent" msgid "Humbled" -msgstr "" +msgstr "Avergonyit" msgid "Humiliated" msgstr "Humiliat" @@ -4998,9 +5024,8 @@ msgid "Impressed" msgstr "Impressionat" -#, fuzzy msgid "In awe" -msgstr "Enamorat" +msgstr "Reverent" msgid "In love" msgstr "Enamorat" @@ -5034,7 +5059,7 @@ msgstr "Malèvol" msgid "Moody" -msgstr "Animat" +msgstr "Llunàtic" msgid "Nervous" msgstr "Nerviós" @@ -5079,9 +5104,8 @@ msgid "Serious" msgstr "Seriós" -#, fuzzy msgid "Shocked" -msgstr "Blocat" +msgstr "En estat de xoc" msgid "Shy" msgstr "Vergonyós" @@ -6662,9 +6686,6 @@ msgid "Incorrect password" msgstr "La contrasenya no és correcta" -msgid "User not found" -msgstr "No s'ha trobat l'usuari" - msgid "Account has been disabled" msgstr "S'ha inhabilitat el compte" @@ -6933,6 +6954,10 @@ msgid "AOL does not allow your screen name to authenticate here" msgstr "AOL no permet que us autentiqueu amb aquest nom d'usuari aquí" +#, c-format +msgid "Error requesting %s" +msgstr "S'ha produït un error en sol·licitar %s" + msgid "Could not join chat room" msgstr "No s'ha pogut entrar a la sala de xat" @@ -6961,7 +6986,7 @@ msgstr "A l'oficina" msgid "Taking a bath" -msgstr "" +msgstr "Prenent un bany" msgid "Watching TV" msgstr "Mirant la tele" @@ -7021,9 +7046,8 @@ msgid "Studying" msgstr "Estudiant" -#, fuzzy msgid "In the restroom" -msgstr "Interessos" +msgstr "Al lavabo" msgid "Received invalid data on connection with server" msgstr "S'han rebut dades invàlides a la connexió amb el servidor" @@ -7308,25 +7332,20 @@ msgid "Invisible" msgstr "Invisible" -#, fuzzy msgid "Evil" -msgstr "Correu electrònic" - -#, fuzzy +msgstr "Maliciós" + msgid "Depression" -msgstr "Professió" - -#, fuzzy +msgstr "Depressió" + msgid "At home" -msgstr "Quant a mi" - -#, fuzzy +msgstr "A casa" + msgid "At work" -msgstr "Xarxa" - -#, fuzzy +msgstr "A la feina" + msgid "At lunch" -msgstr "A fora dinant" +msgstr "Dinant" msgid "IP Address" msgstr "Adreça IP" @@ -7841,9 +7860,8 @@ msgid "iTunes Music Store Link" msgstr "Enllaç al magatzem de música iTunes" -#, fuzzy msgid "Lunch" -msgstr "Finch" +msgstr "Dinar" #, c-format msgid "Buddy Comment for %s" @@ -7876,9 +7894,8 @@ msgid "Edit Buddy Comment" msgstr "Edita el comentari sobre l'amic" -#, fuzzy msgid "Get X-Status Msg" -msgstr "Aconsegueix el missatge d'estat" +msgstr "Aconsegueix el missatge d'estat X" msgid "End Direct IM Session" msgstr "Finalitzar la sessió de MI directa" @@ -8293,10 +8310,10 @@ msgid "Admin" msgstr "Administrador" +# FIXME #. XXX: Should this be "Topic"? -#, fuzzy msgid "Room Title" -msgstr "Llista de sales" +msgstr "Nom de la sala" msgid "Notice" msgstr "Avís" @@ -9964,8 +9981,9 @@ msgid "HMAC" msgstr "HMAC" +# FIXME: Calc de la versió castellana msgid "Use Perfect Forward Secrecy" -msgstr "" +msgstr "Empra «confidencialitat directa perfecta»" msgid "Public key authentication" msgstr "Autenticació per clau pública" @@ -9974,7 +9992,7 @@ msgstr "Bloca la MI sense intercanvi de claus" msgid "Block messages to whiteboard" -msgstr "Bloca els misstges a la pissarra" +msgstr "Bloca els missatges a la pissarra" msgid "Automatically open whiteboard" msgstr "Obre la pissarra automàticament" @@ -10228,7 +10246,7 @@ msgstr "Bloca invitacions a conferències i sales de xat" msgid "Use account proxy for SSL connections" -msgstr "Empra un compte per al servidor intermediàri per a connexions SSL" +msgstr "Empra un compte per al servidor intermediari per a connexions SSL" msgid "Chat room list URL" msgstr "URL de la llista de sales de xat" @@ -10303,13 +10321,13 @@ "entrant al web de Yahoo!" #. indicates a lock due to logging in too frequently -#, fuzzy 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 "" -"El compte està blocat perquè s'ha intentat entrar massa cops. Això es pot " -"solucionar entrant al web de Yahoo!" +"El compte està blocat perquè s'ha intentat entrar massa cops. Espereu uns " +"minuts abans de tornar-ho a intentar. Potser també es pot solucionar entrant " +"al web de Yahoo!" #. username or password missing msgid "Username or password missing" @@ -10790,6 +10808,10 @@ #. * #. * 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. +#. msgid "_Accept" msgstr "_Accepta" @@ -10856,9 +10878,8 @@ msgid "Extended away" msgstr "Absent durant una bona estona" -#, fuzzy msgid "Feeling" -msgstr "S'està rebent" +msgstr "Estat d'ànim" #, c-format msgid "%s (%s) changed status from %s to %s" @@ -11031,12 +11052,6 @@ msgid "Pidgin Internet Messenger" msgstr "Missatger d'Internet Pidgin" -msgid "Orientation" -msgstr "Orientació" - -msgid "The orientation of the tray." -msgstr "Orientació de l'àrea de notificació." - #. Build the login options frame. msgid "Login Options" msgstr "Opcions d'entrada" @@ -11406,13 +11421,11 @@ msgid "Unknown node type" msgstr "Codi d'error desconegut" -#, fuzzy msgid "Please select your mood from the list" -msgstr "Seleccioneu l'estat d'ànim de la llista." - -#, fuzzy +msgstr "Seleccioneu l'estat d'ànim de la llista" + msgid "Message (optional)" -msgstr "Àlies (opcional)" +msgstr "Missatge (opcional)" msgid "Edit User Mood" msgstr "Edita l'estat d'ànim" @@ -11496,9 +11509,8 @@ msgid "/Tools/Pr_ivacy" msgstr "/Eines/_Privadesa" -#, fuzzy msgid "/Tools/Set _Mood" -msgstr "/Eines/_Registre del sistema" +msgstr "/Eines/Esta_bleix l'estat d'ànim" msgid "/Tools/_File Transfers" msgstr "/Eines/_Transferència de fitxers" @@ -11519,20 +11531,17 @@ msgid "/Help/Online _Help" msgstr "/Ajuda/A_juda en línia" -#, fuzzy msgid "/Help/_Build Information" -msgstr "Informació sobre l'amic" +msgstr "/Ajuda/Informació sobre el _muntatge" msgid "/Help/_Debug Window" msgstr "/Ajuda/Finestra de _depuració" -#, fuzzy msgid "/Help/De_veloper Information" -msgstr "Informació del servidor" - -#, fuzzy +msgstr "/Ajuda/Informació sobre els d_esenvolupadors" + msgid "/Help/_Translator Information" -msgstr "Informació personal" +msgstr "/Ajuda/Informació sobre els _traductors" msgid "/Help/_About" msgstr "/Ajuda/_Quant a" @@ -11761,9 +11770,8 @@ msgid "_Edit Account" msgstr "_Edita el compte" -#, fuzzy msgid "Set _Mood..." -msgstr "Estableix l'estat d'ànim..." +msgstr "Estableix l'_estat d'ànim..." msgid "No actions available" msgstr "No hi ha accions disponibles" @@ -11884,15 +11892,14 @@ msgid "/Conversation/Se_nd File..." msgstr "/Conversa/Envia un _fitxer..." -#, fuzzy msgid "/Conversation/Get _Attention" -msgstr "/Conversa/Aconsegueix informació" +msgstr "/Conversa/Aconseg_ueix atenció" msgid "/Conversation/Add Buddy _Pounce..." -msgstr "/Conversa/Afegeix un a_vís per a l'amic..." +msgstr "/Conversa/Afe_geix un avís per a l'amic..." msgid "/Conversation/_Get Info" -msgstr "/Conversa/_Aconsegueix informació" +msgstr "/Conversa/Aconsegueix inf_ormació" msgid "/Conversation/In_vite..." msgstr "/Conversa/Con_vida..." @@ -11907,16 +11914,16 @@ msgstr "/Conversa/_Bloca..." msgid "/Conversation/_Unblock..." -msgstr "/Conversa/_Desbloca..." +msgstr "/Conversa/Desb_loca..." msgid "/Conversation/_Add..." msgstr "/Conversa/_Afegeix..." msgid "/Conversation/_Remove..." -msgstr "/Conversa/Sup_rimeix..." +msgstr "/Conversa/_Suprimeix..." msgid "/Conversation/Insert Lin_k..." -msgstr "/Conversa/Insereix un _enllaç..." +msgstr "/Conversa/Insereix _un enllaç..." msgid "/Conversation/Insert Imag_e..." msgstr "/Conversa/Insereix una _imatge..." @@ -11969,9 +11976,8 @@ msgid "/Conversation/Send File..." msgstr "/Conversa/Envia un fitxer..." -#, fuzzy msgid "/Conversation/Get Attention" -msgstr "/Conversa/Aconsegueix informació" +msgstr "/Conversa/Aconsegueix atenció" msgid "/Conversation/Add Buddy Pounce..." msgstr "/Conversa/Afegeix avís per a l'amic..." @@ -12037,13 +12043,11 @@ msgid "0 people in room" msgstr "No hi ha ningú a la sala" -#, fuzzy msgid "Close Find bar" -msgstr "Tanca aquesta pestanya" - -#, fuzzy +msgstr "Tanca la barra de cerca" + msgid "Find:" -msgstr "Cerca" +msgstr "Cerca:" #, c-format msgid "%d person in room" @@ -12449,7 +12453,7 @@ msgid "Lithuanian" msgstr "Lituà" -#, fuzzy, c-format +#, 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 " @@ -12458,16 +12462,14 @@ "copyrighted by its contributors, a list of whom is also distributed with %" "s. There is no warranty for %s.

" msgstr "" -"El %s és un client de missatgeria instantània modular basat en libpurple, " -"que permet utilitzar els protocols AIM, MSN, Yahoo!, Jabber, ICQ, IRC, SILC, " -"SIP/SIMPLE, Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, MySpaceIM, " -"Gadu-Gadu, i QQ, tots alhora. Utilitza la biblioteca de programació GTK+." -"

Podeu modificar i redistribuir el programa sota els termes de la GPL " -"(versió 2 o posterior). Hi ha una còpia de la GPL dins del fitxer «COPYING» " -"que es distribueix amb el %s. Els drets d'autor del %s pertanyen als seus " -"col·laboradors. El fitxer «COPYRIGHT» conté una llista completa de tots els " -"contribuïdors. No us proporcionem cap mena de garantia amb aquest programa." -"

" +"El %s és un client de missatgeria basat en libpurple que permet connectar-" +"vos a diferents serveis de missatgeria instantània al mateix temps. El %s " +"està escrit en C i la biblioteca de programació GTK+. El %s es distribueix " +"sota llicència GPL 2 (o posterior), i per tant podeu modificar-lo i " +"redistribuir-lo d'acord amb aquesta llicència. Amb el %s es distribueix una " +"còpia de la GPL. El %s és copyright de tothom que hi ha contribuït, la " +"llista de col·laboradors també es distribueix amb el %s. No es proporciona " +"cap mena de garantia amb el %s.

" #, c-format msgid "" @@ -12480,7 +12482,7 @@ "A>
\tPreguntes més freqüents
\tCanal d'IRC: #pidgin " "a irc.freenode.net
\tXMPP MUC: devel@conference.pidgin.im

" -#, fuzzy, c-format +#, c-format msgid "" "Help from other Pidgin users is available by " "e-mailing support@pidgin.im
" msgstr "" -"Ajuda d'altres usuaris del Pidgin: support@pidgin.im
Aquesta és una llista de " -"correu pública. (Ajuda d'altres usuaris del Pidgin: support@pidgin.im
Aquesta és una llista " +"de correu pública. (arxiu)
No us podem ajudar amb connectors d'altres proveïdors.
En aquesta llista s'hi empra principalment l'anglès. Podeu escriure-" +">En aquesta llista s'hi empra principalment l'anglès. Podeu escriure-" "hi en un altre idioma, però és possible que les respostes no siguin de gaire " -"ajuda.

" +"ajuda.
" #, c-format msgid "About %s" msgstr "Quant al %s" -#, fuzzy msgid "Build Information" -msgstr "Informació sobre l'amic" +msgstr "Informació sobre el muntatge" #. End of not to be translated section -#, fuzzy, c-format +#, c-format msgid "%s Build Information" -msgstr "Informació sobre l'amic" +msgstr "Informació sobre el muntatge del %s" msgid "Current Developers" msgstr "Desenvolupadors actuals" @@ -12523,9 +12524,9 @@ msgid "Retired Crazy Patch Writers" msgstr "Escriptors de pedaços retirats" -#, fuzzy, c-format +#, c-format msgid "%s Developer Information" -msgstr "Informació del servidor" +msgstr "Informació sobre els desenvolupadors del %s" msgid "Current Translators" msgstr "Traductors actuals" @@ -12533,9 +12534,9 @@ msgid "Past Translators" msgstr "Antics traductors" -#, fuzzy, c-format +#, c-format msgid "%s Translator Information" -msgstr "Més informació" +msgstr "Informació sobre els traductors del %s" msgid "_Name" msgstr "_Nom" @@ -12954,9 +12955,8 @@ msgid "Insert Smiley" msgstr "Insereix una emoticona" -#, fuzzy msgid "Send Attention" -msgstr "Alerta!" +msgstr "Envia atenció" msgid "_Bold" msgstr "_Negreta" @@ -13004,9 +13004,8 @@ msgid "_Smile!" msgstr "_Somrieu!" -#, fuzzy msgid "_Attention!" -msgstr "Alerta!" +msgstr "_Atenció!" msgid "Log Deletion Failed" msgstr "No s'ha pogut suprimir el registre" @@ -13083,7 +13082,6 @@ msgid "display this help and exit" msgstr "mostra aquesta ajuda i surt" -# FIXME: entrades/registres? msgid "allow multiple instances" msgstr "permet diverses instàncies" @@ -13262,7 +13260,6 @@ msgid "Modify Buddy Pounce" msgstr "Modifica l'avís per a l'amic" -# FIXME #. Create the "Pounce on Whom" frame. msgid "Pounce on Whom" msgstr "Avisa dels Whom" @@ -13672,7 +13669,7 @@ #. This is a global option that affects SOCKS4 usage even with #. * account-specific proxy settings msgid "Use remote _DNS with SOCKS4 proxies" -msgstr "Empra _DNS remot amb servidors intermediàris SOCKS4" +msgstr "Empra _DNS remot amb servidors intermediaris SOCKS4" msgid "Proxy t_ype:" msgstr "_Tipus de servidor intermediari:" @@ -13960,9 +13957,8 @@ msgid "Custom Smiley Manager" msgstr "Gestor d'emoticones personalitzades" -#, fuzzy msgid "Attention received" -msgstr "Cal activació" +msgstr "S'ha rebut una alerta" msgid "Select Buddy Icon" msgstr "Seleccioneu una icona per a l'amic" @@ -15113,8 +15109,17 @@ msgstr "Opcions del format de les marques horàries" #, c-format -msgid "_Force 24-hour time format" -msgstr "_Força el format de 24 hores" +msgid "_Force timestamp format:" +msgstr "_Format de les marques horàries:" + +msgid "Use system default" +msgstr "Predeterminat del sistema" + +msgid "12 hour time format" +msgstr "12 hores" + +msgid "24 hour time format" +msgstr "24 hores" msgid "Show dates in..." msgstr "Mostra dates a..." @@ -15318,9 +15323,14 @@ msgstr "Envia i rep blocs XMPP en brut." #. * description -#, fuzzy msgid "This plugin is useful for debugging XMPP servers or clients." -msgstr "Aquest connector és útil per a depurar servidors i clients XMPP." +msgstr "Aquest connector és útil per a depurar servidors o clients XMPP." + +#~ msgid "Orientation" +#~ msgstr "Orientació" + +#~ msgid "The orientation of the tray." +#~ msgstr "Orientació de l'àrea de notificació." #~ msgid "Artist" #~ msgstr "Artista" @@ -16921,9 +16931,6 @@ #~ msgid "_Deny" #~ msgstr "_Denega" -#~ msgid "Invalid Username" -#~ msgstr "El nom d'usuari no és vàlid" - #~ msgid "Alias: %s
" #~ msgstr "Àlies: %s
" diff -r edb7c80bf930 -r f8ec889c5bce po/ca@valencia.po --- a/po/ca@valencia.po Fri Apr 23 16:58:03 2010 +0000 +++ b/po/ca@valencia.po Mon May 10 23:21:44 2010 +0000 @@ -33,8 +33,8 @@ msgstr "" "Project-Id-Version: Pidgin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-29 00:12-0700\n" -"PO-Revision-Date: 2010-02-16 23:08+0100\n" +"POT-Creation-Date: 2010-05-04 22:47+0200\n" +"PO-Revision-Date: 2010-05-04 23:17+0200\n" "Last-Translator: Josep Puigdemont i Casamajó \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" @@ -322,7 +322,8 @@ "En suprimir este contacte, també se suprimiran tots els amics que hi haja" msgid "Removing this group will also remove all the buddies in the group" -msgstr "En suprimir este grup, també se suprimiran tots els amics que hi haja" +msgstr "" +"En suprimir este grup, també se suprimiran tots els amics que hi haja" #, c-format msgid "Are you sure you want to remove %s?" @@ -581,7 +582,8 @@ msgid "Syntax Error: You typed the wrong number of arguments to that command." msgstr "" -"Error de sintaxi: heu escrit un nombre d'arguments equivocat per a esta orde." +"Error de sintaxi: heu escrit un nombre d'arguments equivocat per a esta " +"orde." msgid "Your command failed for an unknown reason." msgstr "L'orde ha fallat per motius desconeguts." @@ -754,8 +756,8 @@ "de les diferents classes de missatge en les finestres de conversa.
" "<classe>: receive (rep), send (envia), highlight (ressalta), action " "(acció), timestamp (marca de temps)
<primer pla/fons>: black " -"(negre), red (roig), green (verd), blue (blau), white (blanc), gray (gris), " -"darkgray (gris fosc), magenta, cyan (cian), default (per defecte)" +"(negre), red (roig), green (verd), blue (blau), white (blanc), gray " +"(gris), darkgray (gris fosc), magenta, cyan (cian), default (per defecte)" "

EXEMPLE:
msgcolor send cyan default" msgid "Unable to open file." @@ -1385,8 +1387,6 @@ msgid "Saved Statuses" msgstr "Estats alçats" -#. title -#. optional information msgid "Title" msgstr "Títol" @@ -1527,7 +1527,7 @@ msgstr "Converses amb %s a %s:
" msgid "History Plugin Requires Logging" -msgstr "El connector per a l'historial requereix que s'habiliti el registre" +msgstr "El connector per a l'historial requereix que s'habilite el registre" msgid "" "Logging can be enabled from Tools -> Preferences -> Logging.\n" @@ -1681,6 +1681,12 @@ msgid "Set User Info" msgstr "Estableix les dades d'usuari" +msgid "This protocol does not support setting a public alias." +msgstr "Este protocol no permet establir un àlies pulic." + +msgid "This protocol does not support fetching the public alias." +msgstr "Este protocol no permet aconseguir l'àlies públic." + msgid "Unknown" msgstr "Desconegut" @@ -2164,7 +2170,8 @@ "True if the command used to handle this type of URL should be run in a " "terminal." msgstr "" -"Cert si l'orde emprada per este tipus d'URL s'ha d'executar en un terminal." +"Cert si l'orde emprada per este tipus d'URL s'ha d'executar en un " +"terminal." msgid "Whether the specified command should handle \"aim\" URLs" msgstr "Si l'orde especificada ha de gestionar URL «aim»" @@ -2717,8 +2724,8 @@ "Prepends a newline to messages so that the rest of the message appears below " "the username in the conversation window." msgstr "" -"Afig una línia nova abans de cada missatge de manera que, en les finestres " -"de conversa, els missatges apareixen sota el nom d'usuari." +"Afig una línia nova abans de cada missatge de manera que, en les " +"finestres de conversa, els missatges apareixen sota el nom d'usuari." msgid "Offline Message Emulation" msgstr "Emulació de missatge de fora de línia" @@ -2787,7 +2794,8 @@ msgstr "" "Vos permet forçar que les contrasenyes siguen d'un sol ús per a comptes dels " "quals no s'alcen les contrasenyes.\n" -"Nota: per poder fer servir això, cal que no s'alce la contrasenya del compte." +"Nota: per poder fer servir això, cal que no s'alce la contrasenya del " +"compte." #. *< type #. *< ui_requirement @@ -2814,8 +2822,8 @@ "Causes conversation windows to appear as other users begin to message you. " "This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" msgstr "" -"Fa que apareguen finestres de conversa així que altres usuaris vos comencen " -"a enviar missatges. Funciona per a AIM, ICQ, XMPP, Sametime, i Yahoo!" +"Fa que apareguen finestres de conversa així que altres usuaris vos comencen a " +"enviar missatges. Funciona per a AIM, ICQ, XMPP, Sametime, i Yahoo!" msgid "You feel a disturbance in the force..." msgstr "Sentireu un certa pertorbació en la força..." @@ -3648,8 +3656,8 @@ "must be a channel operator to do this." msgstr "" "devoice <sobrenom1> [sobrenom2] ...: treu l'estat de veu a algú, " -"prevenint que parlin al canal si este està moderat (+m). Heu de ser operador " -"del canal per poder fer això." +"prevenint que parlin al canal si este està moderat (+m). Heu de ser " +"operador del canal per poder fer això." msgid "" "invite <nick> [room]: Invite someone to join you in the specified " @@ -3825,15 +3833,6 @@ msgid "execute" msgstr "executa" -msgid "Server requires TLS/SSL, but no TLS/SSL support was found." -msgstr "" -"El servidor requereix TLS/SSL per entrar, però no s'ha trobat cap " -"implementació de TLS/SSL." - -msgid "You require encryption, but no TLS/SSL support was found." -msgstr "" -"Heu requerit que es xifri, però no s'ha trobat cap implementació de TLS/SSL." - msgid "Server requires plaintext authentication over an unencrypted stream" msgstr "El servidor requereix autenticació de text sobre un flux no xifrat" @@ -3871,6 +3870,43 @@ msgid "SASL error: %s" msgstr "Error SASL: %s" +msgid "Invalid Encoding" +msgstr "La condició no és vàlida" + +msgid "Unsupported Extension" +msgstr "Esta extensió no està implementada" + +# MitM: Man-in-the-middle... segons wiki: intermediari +msgid "" +"Unexpected response from the server. This may indicate a possible MITM " +"attack" +msgstr "" +"S'ha rebut una resposta inesperada del servidor. Això podria indicar un " +"possible atac informàtic \"man-in-the-middle\"" + +msgid "" +"The server does support channel binding, but did not appear to advertise " +"it. This indicates a likely MITM attack" +msgstr "" +"Aques servidor permet vincular canals, tot i que no ho havia anunciat. Això " +"podria ser indicatiu d'un atac informàtic \"man-in-the-middle\"" + +msgid "Server does not support channel binding" +msgstr "El servidor no permet vincular canals" + +msgid "Unsupported channel binding method" +msgstr "Este mètode de vinculació de canals no està implementat" + +msgid "User not found" +msgstr "No s'ha trobat l'usuari" + +msgid "Invalid Username Encoding" +msgstr "La codificació del nom d'usuari no és vàlida" + +# Mirar com es traduïa 'Constraint variables' +msgid "Resource Constraint" +msgstr "Restriccions del recurs" + # FIXME: canonicalize -> normalitzar (josep) msgid "Unable to canonicalize username" msgstr "No s'ha pogut normalitzar el nom d'usuari" @@ -3949,6 +3985,11 @@ msgid "Organization Unit" msgstr "Secció de l'organització" +#. title +#. optional information +msgid "Job Title" +msgstr "Títol de la faena" + msgid "Role" msgstr "Rol" @@ -4171,16 +4212,28 @@ msgid "Roles:" msgstr "Rols:" +msgid "Server requires TLS/SSL, but no TLS/SSL support was found." +msgstr "" +"El servidor requereix TLS/SSL per entrar, però no s'ha trobat cap " +"implementació de TLS/SSL." + +msgid "You require encryption, but no TLS/SSL support was found." +msgstr "" +"Heu requerit que es xifri, però no s'ha trobat cap implementació de TLS/SSL." + msgid "Ping timed out" msgstr "S'ha esgitat el temps d'espera (ping)" msgid "Invalid XMPP ID" msgstr "ID de l'XMPP invàlid" +msgid "Invalid XMPP ID. Username portion must be set." +msgstr "L'ID de l'XMPP no és vàlid. Cal especificar el nom d'usuari." + msgid "Invalid XMPP ID. Domain must be set." msgstr "L'ID de l'XMPP no és vàlid. Cal especificar un domini." -# FIX +# FIXME msgid "Malformed BOSH URL" msgstr "L'URL BOSH està malmés" @@ -4311,15 +4364,18 @@ msgid "Allow Buzz" msgstr "Permet les botzines" -# Segons la viquipèdia -#, fuzzy msgid "Mood Name" -msgstr "Nom del mig" - -#, fuzzy +msgstr "Nom de l'estat d'ànim" + msgid "Mood Comment" -msgstr "Comentari de l'amic" - +msgstr "Comentari sobre l'estat d'ànim" + +#. primitive +#. ID +#. name - use default +#. saveable +#. should be user_settable some day +#. independent msgid "Tune Artist" msgstr "Artista de la melodia" @@ -4491,10 +4547,6 @@ msgid "Remote Connection Failed" msgstr "Ha fallat la connexió remota" -# Mirar com es traduïa 'Constraint variables' -msgid "Resource Constraint" -msgstr "Restriccions del recurs" - msgid "Restricted XML" msgstr "XML restringit" @@ -4612,9 +4664,8 @@ msgid "Initiate Media" msgstr "Inicia el medi" -#, fuzzy msgid "Account does not support PEP, can't set mood" -msgstr "Este protocol no implementa sales de xat." +msgstr "Este protocol no implementa PEP, no es pot establir l'estat d'ànim." msgid "config: Configure a chat room." msgstr "config: configura la sala de xat." @@ -4669,9 +4720,8 @@ msgid "buzz: Buzz a user to get their attention" msgstr "buzz: fa sonar una botzina a un usuari per tal de que vos pare atenció" -#, fuzzy msgid "mood: Set current user mood" -msgstr "Seleccioneu l'usuari correcte" +msgstr "modd: estableix l'estat d'ànim de l'usuari" msgid "Extended Away" msgstr "Absent des de fa una bona estona" @@ -4755,13 +4805,13 @@ "és massa llarga." msgid "XMPP stream header missing" -msgstr "" +msgstr "Falta la capçalera del flux XMPP" msgid "XMPP Version Mismatch" -msgstr "" +msgstr "Les versions del XMPP no coincideixen" msgid "XMPP stream missing ID" -msgstr "" +msgstr "Manca l'ID del fluxe XMPP" msgid "XML Parse error" msgstr "Error en l'anàlisi de l'XML" @@ -4841,32 +4891,27 @@ msgid "Please select the resource of %s to which you would like to send a file" msgstr "Escolliu a quin recurs de %s voleu enviar un fitxer" -#, fuzzy msgid "Afraid" -msgstr "Àrab" - -#, fuzzy +msgstr "Espantat" + msgid "Amazed" -msgstr "Avergonyit" - -#, fuzzy +msgstr "Al·lucinant" + msgid "Amorous" -msgstr "Gloriós" +msgstr "Amorós" #. 1 msgid "Angry" msgstr "Enfadat" -#, fuzzy msgid "Annoyed" -msgstr "Bandejat" +msgstr "Emprenyat" msgid "Anxious" msgstr "Ansiós" -#, fuzzy msgid "Aroused" -msgstr "S'enviarà" +msgstr "" msgid "Ashamed" msgstr "Avergonyit" @@ -4874,117 +4919,95 @@ msgid "Bored" msgstr "Avorrit" -#, fuzzy msgid "Brave" -msgstr "Alça" - -#, fuzzy +msgstr "Brau" + msgid "Calm" -msgstr "Regne" - -#, fuzzy +msgstr "Calmat" + msgid "Cautious" -msgstr "Xats" - -#, fuzzy +msgstr "Prudent" + msgid "Cold" -msgstr "Negreta" - -#, fuzzy +msgstr "Fred" + msgid "Confident" -msgstr "Conflicte" - -#, fuzzy +msgstr "Amb confiança" + msgid "Confused" -msgstr "_Configura" - -#, fuzzy +msgstr "Confós" + msgid "Contemplative" -msgstr "Contacte" - -#, fuzzy +msgstr "Contemplatiu" + msgid "Contented" -msgstr "Connectat" - -#, fuzzy +msgstr "Acontentat" + msgid "Cranky" -msgstr "Empresa" - -#, fuzzy +msgstr "" + msgid "Crazy" -msgstr "Crazychat" - -#, fuzzy +msgstr "Boig" + msgid "Creative" -msgstr "Crea" - -#, fuzzy +msgstr "Creatiu" + msgid "Curious" -msgstr "Gloriós" - -#, fuzzy +msgstr "Curiós" + msgid "Dejected" -msgstr "Rebutjat" - -#, fuzzy +msgstr "Enfonsat" + msgid "Depressed" -msgstr "Suprimit" - -#, fuzzy +msgstr "Deprimit" + msgid "Disappointed" -msgstr "Desconnectat." +msgstr "Decebut" msgid "Disgusted" -msgstr "" - -#, fuzzy +msgstr "Repugnat" + msgid "Dismayed" -msgstr "Inhabilitat" - -#, fuzzy +msgstr "Descoratjat" + msgid "Distracted" -msgstr "Separat" +msgstr "Distret" msgid "Embarrassed" -msgstr "" - -#, fuzzy +msgstr "Avergonyit" + msgid "Envious" -msgstr "Ansiós" +msgstr "Envejós" #. 2 msgid "Excited" msgstr "Excitat" -#, fuzzy msgid "Flirtatious" -msgstr "Gloriós" - -#, fuzzy +msgstr "Amb ganes de flirtar" + msgid "Frustrated" -msgstr "Nom" +msgstr "Frustrat" msgid "Grateful" -msgstr "" - -#, fuzzy +msgstr "Agraït" + msgid "Grieving" -msgstr "S'està recuperant..." +msgstr "De dol" #. 3 msgid "Grumpy" msgstr "Rondinaire" -#, fuzzy msgid "Guilty" -msgstr "Ciutat" +msgstr "Culpable" #. 4 msgid "Happy" msgstr "Content" msgid "Hopeful" -msgstr "" +msgstr "Esperançat" #. 8 msgid "Hot" @@ -4994,37 +5017,31 @@ msgstr "" msgid "Humiliated" -msgstr "" - -#, fuzzy +msgstr "Humiliat" + msgid "Hungry" -msgstr "Enfadat" - -#, fuzzy +msgstr "Afamat" + msgid "Hurt" -msgstr "Humor" +msgstr "Ferit" msgid "Impressed" -msgstr "" - -#, fuzzy +msgstr "Impressionat" + msgid "In awe" -msgstr "Enamorat" +msgstr "" msgid "In love" msgstr "Enamorat" -#, fuzzy msgid "Indignant" -msgstr "Indonesi" - -#, fuzzy +msgstr "Indignant" + msgid "Interested" -msgstr "Interessos" - -#, fuzzy +msgstr "Interessat" + msgid "Intoxicated" -msgstr "Convidat" +msgstr "Intoxicat" #. 6 msgid "Invincible" @@ -5033,84 +5050,69 @@ msgid "Jealous" msgstr "Gelós" -#, fuzzy msgid "Lonely" -msgstr "Mico" - -#, fuzzy +msgstr "Sol" + msgid "Lost" -msgstr "El més alt" +msgstr "Perdut" msgid "Lucky" -msgstr "" - -#, fuzzy +msgstr "Sortós" + msgid "Mean" -msgstr "Alemany" - -#, fuzzy +msgstr "Malèvol" + msgid "Moody" -msgstr "Estat d'ànim" +msgstr "Animat" msgid "Nervous" -msgstr "" - -#, fuzzy +msgstr "Nerviós" + msgid "Neutral" -msgstr "Detalls" - -#, fuzzy +msgstr "Neutral" + msgid "Offended" -msgstr "Fora de línia" +msgstr "Ofès" msgid "Outraged" -msgstr "" - -#, fuzzy +msgstr "Enrabiat" + msgid "Playful" -msgstr "Reprodueix" - -#, fuzzy +msgstr "Juganer" + msgid "Proud" -msgstr "Alt" - -#, fuzzy +msgstr "Orgullós" + msgid "Relaxed" -msgstr "Nom real" - -#, fuzzy +msgstr "Relaxat" + msgid "Relieved" -msgstr "Rebuts" - -#, fuzzy +msgstr "Alleujat" + msgid "Remorseful" -msgstr "Suprimeix" - -#, fuzzy +msgstr "Amb remordiments" + msgid "Restless" -msgstr "Registra" +msgstr "Neguitós" #. 7 msgid "Sad" msgstr "Trist" -#, fuzzy msgid "Sarcastic" -msgstr "Marathi" +msgstr "Sarcàstic" msgid "Satisfied" -msgstr "" - -#, fuzzy +msgstr "Satisfet" + msgid "Serious" -msgstr "Gloriós" - -#, fuzzy +msgstr "Seriós" + msgid "Shocked" -msgstr "Blocat" +msgstr "En estat de xoc" msgid "Shy" -msgstr "" +msgstr "Vergonyós" #. 9 msgid "Sick" @@ -5122,41 +5124,34 @@ msgstr "Endormiscat" msgid "Spontaneous" -msgstr "" - -#, fuzzy +msgstr "Espontani" + msgid "Stressed" -msgstr "Velocitat" - -#, fuzzy +msgstr "Estressat" + msgid "Strong" -msgstr "Cançó" - -#, fuzzy +msgstr "Fort" + msgid "Surprised" -msgstr "morrejat" +msgstr "Sorprés" msgid "Thankful" -msgstr "" +msgstr "Agraït" msgid "Thirsty" -msgstr "" - -#, fuzzy +msgstr "Assedegat" + msgid "Tired" -msgstr "Fire" - -#, fuzzy +msgstr "Cansat" + msgid "Undefined" -msgstr "Subratllat" - -#, fuzzy +msgstr "Indefinit" + msgid "Weak" -msgstr "Bufetejar" - -#, fuzzy +msgstr "Decandit" + msgid "Worried" -msgstr "Avorrit" +msgstr "Preocupat" msgid "Set User Nickname" msgstr "Estableix el sobrenom de l'usuari" @@ -5479,7 +5474,8 @@ #, c-format msgid "" "MSN servers are currently blocking the following regular expressions:
%s" -msgstr "Actualment, servidors MSN bloquen estes expressions regulars:
%s" +msgstr "" +"Actualment, servidors MSN bloquen estes expressions regulars:
%s" msgid "This account does not have email enabled." msgstr "Este compte no té el correu habilitat." @@ -5520,18 +5516,6 @@ msgid "Out to Lunch" msgstr "A fora dinant" -#. primitive -#. ID -#. name - use default -#. saveable -#. should be user_settable some day -#. independent -msgid "Artist" -msgstr "Artista" - -msgid "Album" -msgstr "Àlbum" - msgid "Game Title" msgstr "Títol del joc" @@ -5679,9 +5663,6 @@ msgid "Work" msgstr "Faena" -msgid "Job Title" -msgstr "Títol de la faena" - msgid "Company" msgstr "Empresa" @@ -6468,8 +6449,8 @@ msgid "No suitable MySpaceIM account could be found to open this myim URL." msgstr "" -"No s'ha pogut trobar cap compte adequat a MySpaceIM per poder obrir este URL " -"myim." +"No s'ha pogut trobar cap compte adequat a MySpaceIM per poder obrir este " +"URL myim." msgid "Enable the proper MySpaceIM account and try again." msgstr "Habiliteu el compte MySpaceIM adequat i proveu-ho de nou." @@ -6709,9 +6690,6 @@ msgid "Incorrect password" msgstr "La contrasenya no és correcta" -msgid "User not found" -msgstr "No s'ha trobat l'usuari" - msgid "Account has been disabled" msgstr "S'ha inhabilitat el compte" @@ -6725,7 +6703,7 @@ msgstr "El servidor no està disponible, proveu-ho més tard" msgid "Cannot add a contact to the same folder twice" -msgstr "No es pot afegir un contacte a la mateixa carpeta dues vegades" +msgstr "No es pot afegir un contacte a la mateixa carpeta dos vegades" msgid "Cannot add yourself" msgstr "No es pot afegir a un mateix" @@ -6745,7 +6723,7 @@ "incorrectes" msgid "You cannot add the same person twice to a conversation" -msgstr "No podeu afegir la mateixa persona a una conversa dues vegades" +msgstr "No podeu afegir la mateixa persona a una conversa dos vegades" msgid "You have reached your limit for the number of contacts allowed" msgstr "Heu introduït el màxim nombre de contactes permesos" @@ -6766,7 +6744,8 @@ "This evaluation version does not allow more than ten users to log in at one " "time" msgstr "" -"Esta versió d'avaluació no permet que entrin més de deu usuaris a la vegada" +"Esta versió d'avaluació no permet que entren més de deu usuaris a la " +"vegada" msgid "The user is either offline or you are blocked" msgstr "L'usuari està fora de línia o bé esteu blocat" @@ -6782,8 +6761,8 @@ #, c-format msgid "Unable to send message. Could not get details for user (%s)." msgstr "" -"No s'ha pogut enviar el missatge. No s'han pogut obtindre detalls de " -"l'usuari (%s)." +"No s'ha pogut enviar el missatge. No s'han pogut obtindre detalls de l'usuari " +"(%s)." #, c-format msgid "Unable to add %s to your buddy list (%s)." @@ -6979,6 +6958,10 @@ msgid "AOL does not allow your screen name to authenticate here" msgstr "AOL no permet que vos autentiqueu amb este nom d'usuari ací" +#, c-format +msgid "Error requesting %s" +msgstr "S'ha produït un error en sol·licitar %s" + msgid "Could not join chat room" msgstr "No s'ha pogut entrar a la sala de xat" @@ -6986,107 +6969,89 @@ msgstr "El nom de sala de xat no és vàlid" msgid "Thinking" -msgstr "" - -#, fuzzy +msgstr "Pensant" + msgid "Shopping" -msgstr "Pare d'escriure" - -#, fuzzy +msgstr "Comprant" + msgid "Questioning" -msgstr "Diàleg de pregunta" - -#, fuzzy +msgstr "Preguntant" + msgid "Eating" -msgstr "Radiomissatgeria" - -#, fuzzy +msgstr "Menjant" + msgid "Watching a movie" -msgstr "Jugant a un joc" +msgstr "Mirant una pel·lícula" msgid "Typing" msgstr "Teclejant" -#, fuzzy msgid "At the office" -msgstr "Fora de l'oficina" +msgstr "A l'oficina" msgid "Taking a bath" -msgstr "" +msgstr "Prenent un bany" msgid "Watching TV" -msgstr "" - -#, fuzzy +msgstr "Mirant la tele" + msgid "Having fun" -msgstr "Penja" - -#, fuzzy +msgstr "Passant-ho bé" + msgid "Sleeping" -msgstr "Endormiscat" +msgstr "Dormint" msgid "Using a PDA" -msgstr "" - -#, fuzzy +msgstr "Emprant el PDA" + msgid "Meeting friends" -msgstr "Amics de MI" - -#, fuzzy +msgstr "Amb amics" + msgid "On the phone" msgstr "Al telèfon" -#, fuzzy msgid "Surfing" -msgstr "Recurrent" +msgstr "Navegant" #. "I am mobile." / "John is mobile." msgid "Mobile" msgstr "Mòbil" -#, fuzzy msgid "Searching the web" -msgstr "Avisa l'usuari" - -#, fuzzy +msgstr "Cercant a la web" + msgid "At a party" -msgstr "Port d'autorització" +msgstr "En una festa" msgid "Having Coffee" -msgstr "" +msgstr "Prenent un cafè" #. Playing video games -#, fuzzy msgid "Gaming" -msgstr "Jocs d'usuari" +msgstr "Jugant" msgid "Browsing the web" -msgstr "" - -#, fuzzy +msgstr "Navegant la web" + msgid "Smoking" -msgstr "Cançó" - -#, fuzzy +msgstr "Fumant" + msgid "Writing" -msgstr "Treballant" +msgstr "Escrivint" #. Drinking [Alcohol] -#, fuzzy msgid "Drinking" -msgstr "Treballant" +msgstr "Bevent" # És un estat, com "fora de línia", etc. (josep) msgid "Listening to music" msgstr "Escoltant música" -#, fuzzy msgid "Studying" -msgstr "S'està enviant" - -#, fuzzy +msgstr "Estudiant" + msgid "In the restroom" -msgstr "Interessos" +msgstr "Al lavabo" msgid "Received invalid data on connection with server" msgstr "S'han rebut dades invàlides a la connexió amb el servidor" @@ -7147,8 +7112,8 @@ "%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 "" -"%s vos ha intentat enviar un fitxer %s, però ara mateix només permetem " -"enviar fitxers de fins a %s a través de MI directa. Proveu-ho fent servir la " +"%s vos ha intentat enviar un fitxer %s, però ara mateix només permetem enviar " +"fitxers de fins a %s a través de MI directa. Proveu-ho fent servir la " "transferència de fitxers.\n" # FIXME @@ -7282,8 +7247,9 @@ "(There was an error receiving this message. Either you and %s have " "different encodings selected, or %s has a buggy client.)" msgstr "" -"(S'ha produït un error en rebre este missatge. És molt possible que %s empri " -"una codificació diferent a la vostra, o que %s tinga un client defectuós)" +"(S'ha produït un error en rebre este missatge. És molt possible que %s " +"empri una codificació diferent a la vostra, o que %s tinga un client " +"defectuós)" #. Label msgid "Buddy Icon" @@ -7302,7 +7268,7 @@ msgstr "Jocs" msgid "ICQ Xtraz" -msgstr "" +msgstr "ICQ Xtraz" msgid "Add-Ins" msgstr "Afegits" @@ -7370,25 +7336,20 @@ msgid "Invisible" msgstr "Invisible" -#, fuzzy msgid "Evil" -msgstr "Correu electrònic" - -#, fuzzy +msgstr "Maliciós" + msgid "Depression" -msgstr "Professió" - -#, fuzzy +msgstr "Depressió" + msgid "At home" -msgstr "Quant a mi" - -#, fuzzy +msgstr "A casa" + msgid "At work" -msgstr "Xarxa" - -#, fuzzy +msgstr "A la faena" + msgid "At lunch" -msgstr "A fora dinant" +msgstr "Dinant" msgid "IP Address" msgstr "Adreça IP" @@ -7423,9 +7384,9 @@ "a valid email address, or start with a letter and contain only letters, " "numbers and spaces, or contain only numbers." msgstr "" -"No s'ha pogut entrar com a %s perquè este nom d'usuari no és vàlid. Els noms " -"d'usuari han de ser adreces de correu vàlides, o començar amb una lletra i " -"contindre només lletres, nombres o espais, o només nombres." +"No s'ha pogut entrar com a %s perquè este nom d'usuari no és vàlid. Els " +"noms d'usuari han de ser adreces de correu vàlides, o començar amb una " +"lletra i contindre només lletres, nombres o espais, o només nombres." #, c-format msgid "You may be disconnected shortly. If so, check %s for updates." @@ -7903,9 +7864,8 @@ msgid "iTunes Music Store Link" msgstr "Enllaç al magatzem de música iTunes" -#, fuzzy msgid "Lunch" -msgstr "Finch" +msgstr "Dinar" #, c-format msgid "Buddy Comment for %s" @@ -7938,9 +7898,8 @@ msgid "Edit Buddy Comment" msgstr "Edita el comentari sobre l'amic" -#, fuzzy msgid "Get X-Status Msg" -msgstr "Aconsegueix el missatge d'estat" +msgstr "Aconsegueix el missatge d'estat X" msgid "End Direct IM Session" msgstr "Finalitzar la sessió de MI directa" @@ -7981,8 +7940,8 @@ "You can re-request authorization from these buddies by right-clicking on " "them and selecting \"Re-request Authorization.\"" msgstr "" -"Podeu tornar a demanar l'autorització d'estos amics fent-hi clic a sobre amb " -"el botó dret del ratolí, i seleccionant «Torna a demanar l'autorització»." +"Podeu tornar a demanar l'autorització d'estos amics fent-hi clic a sobre " +"amb el botó dret del ratolí, i seleccionant «Torna a demanar l'autorització»." msgid "Find Buddy by Email" msgstr "Troba un amic per l'adreça de correu" @@ -8355,6 +8314,11 @@ msgid "Admin" msgstr "Administrador" +# FIXME +#. XXX: Should this be "Topic"? +msgid "Room Title" +msgstr "Nom de la sala" + msgid "Notice" msgstr "Avís" @@ -8429,11 +8393,11 @@ #, c-format msgid "%u requested to join Qun %u for %s" -msgstr "%u ha sol·licitat unir-se al Qun %u per %s" +msgstr "%u ha sol·licitat unir-s'al Qun %u per %s" #, c-format msgid "%u request to join Qun %u" -msgstr "%u ha sol·licitat unir-se al Qun %u" +msgstr "%u ha sol·licitat unir-s'al Qun %u" #, c-format msgid "Failed to join Qun %u, operated by admin %u" @@ -8441,8 +8405,7 @@ #, c-format msgid "Joining Qun %u is approved by admin %u for %s" -msgstr "" -"L'administrador %2$u vos ha permés unir-vos al Qun %1$u per %3$s" +msgstr "L'administrador %2$u vos ha permés unir-vos al Qun %1$u per %3$s" #, c-format msgid "Removed buddy %u." @@ -8572,8 +8535,7 @@ msgid "

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

I tothom que ho ha fet possible...
\n" -#, fuzzy -msgid "Feel free to join us! :)" +msgid "Feel free to join vos! :)" msgstr "No dubteu a col·laborar amb nosaltres! :)" #, c-format @@ -8909,8 +8871,8 @@ "\"Create New Conference\" if you'd like to create a new conference to invite " "this user to." msgstr "" -"Seleccioneu a quina conferència, de les d'ací sota, voleu convidar l'usuari %" -"s. Seleccioneu «Crea una nova conferència» si voleu crear-ne una de nova on " +"Seleccioneu a quina conferència, de les d'ací sota, voleu convidar l'usuari " +"%s. Seleccioneu «Crea una nova conferència» si voleu crear-ne una de nova on " "convidar-hi l'usuari." msgid "Invite to Conference" @@ -9040,7 +9002,7 @@ "Book groups. Please select the correct group from the list below to add it " "to your buddy list." msgstr "" -"L'identificador «%s» pot referir-se a qualsevol dels grups de llibretes " +"L'identificador «%s» pot referir-s'a qualsevol dels grups de llibretes " "d'adreces Notes següents. Seleccioneu el grup correcte de la llista d'ací " "sota, a afegir a la llista d'amics." @@ -9893,7 +9855,8 @@ msgstr "topic [<tema nou>]: mostra o canvia el tema" msgid "join <channel> [<password>]: Join a chat on this network" -msgstr "join <canal> [<contrasenya>]: entra en un xat d'esta xarxa" +msgstr "" +"join <canal> [<contrasenya>]: entra en un xat d'esta xarxa" msgid "list: List channels on this network" msgstr "list: llista els canals en esta xarxa" @@ -10268,9 +10231,6 @@ msgid "Yahoo! Protocol Plugin" msgstr "Connector per al protocol Yahoo!" -msgid "Pager server" -msgstr "Servidor de cercapersones" - msgid "Pager port" msgstr "Port per al cercapersones" @@ -10294,12 +10254,6 @@ msgid "Chat room list URL" msgstr "URL de la llista de sales de xat" -msgid "Yahoo Chat server" -msgstr "Servidor de xat de Yahoo" - -msgid "Yahoo Chat port" -msgstr "Port del xat de Yahoo" - msgid "Yahoo JAPAN ID..." msgstr "ID de Yahoo del Japó..." @@ -10319,8 +10273,8 @@ #, c-format msgid "%s has sent you a webcam invite, which is not yet supported." msgstr "" -"%s vos ha enviat una invitació a la seua càmera web, però això encara no " -"està implementat." +"%s vos ha enviat una invitació a la seua càmera web, però això encara no està " +"implementat." msgid "Your SMS was not delivered" msgstr "No s'ha enviat l'SMS" @@ -10337,15 +10291,14 @@ "%s has (retroactively) denied your request to add them to your list for the " "following reason: %s." msgstr "" -"%s vos ha denegat (retroactivament) la petició d'afegir-lo a la vostra " -"llista pel següent motiu:\n" +"%s vos ha denegat (retroactivament) la petició d'afegir-lo a la vostra llista " +"pel següent motiu:\n" "%s" #, c-format msgid "%s has (retroactively) denied your request to add them to your list." msgstr "" -"%s vos ha denegat (retroactivament) la petició d'afegir-lo a la vostra " -"llista." +"%s vos ha denegat (retroactivament) la petició d'afegir-lo a la vostra llista." msgid "Add buddy rejected" msgstr "S'ha rebutjat afegir l'amic" @@ -10370,6 +10323,15 @@ "El compte està blocat, però no se'n coneix el motiu. Això es pot solucionar " "entrant al web de Yahoo!" +#. indicates a lock due to logging in too frequently +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 "" +"El compte està blocat perquè s'ha intentat entrar massa cops. Espereu uns " +"minuts abans de tornar-ho a intentar. Potser també es pot solucionar entrant " +"al web de Yahoo!" + #. username or password missing msgid "Username or password missing" msgstr "Manquen el nom d'uruari o la contrasenya" @@ -10449,6 +10411,16 @@ msgid "Unable to establish a connection with %s: %s" msgstr "No s'ha pogut establir una connexió amb %s: %s" +msgid "Unable to connect: The server returned an empty response." +msgstr "No s'ha pogut connectar: el servidor ha retornat una resposta buida." + +msgid "" +"Unable to connect: The server's response did not contain the necessary " +"information" +msgstr "" +"No s'ha pogut connectar: el servidor ha retornat una resposta que no conté " +"la informació necessària" + msgid "Not at Home" msgstr "Fora de casa" @@ -10555,7 +10527,8 @@ "If you wish to view this profile, you will need to visit this link in your " "web browser:" msgstr "" -"Si voleu veure este perfil, haureu de visitar este enllaç amb el navegador:" +"Si voleu veure este perfil, haureu de visitar este enllaç amb el " +"navegador:" msgid "Yahoo! ID" msgstr "ID de Yahoo!" @@ -10597,9 +10570,9 @@ "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 "" -"No s'ha pogut obtindre el perfil de l'usuari. El més segur és que l'usuari " -"no existisca, tot i que a vegades Yahoo! no pot trobar els perfils d'usuari. " -"Si sabeu del cert que l'usuari existeix, torneu-ho a intentar més tard." +"No s'ha pogut obtindre el perfil de l'usuari. El més segur és que l'usuari no " +"existisca, tot i que a vegades Yahoo! no pot trobar els perfils d'usuari. Si " +"sabeu del cert que l'usuari existeix, torneu-ho a intentar més tard." msgid "The user's profile is empty." msgstr "El perfil d'usuari està buit." @@ -10627,8 +10600,8 @@ "Unknown error. You may need to logout and wait five minutes before being " "able to rejoin a chatroom" msgstr "" -"S'ha produït un error desconegut. Potser caldrà que eixiu i espereu uns cinc " -"minuts abans d'intentar tornar a entrar a la sala de xat" +"S'ha produït un error desconegut. Potser caldrà que eixiu i espereu uns " +"cinc minuts abans d'intentar tornar a entrar a la sala de xat" #, c-format msgid "You are now chatting in %s." @@ -10708,11 +10681,13 @@ msgid "inst <instance>: Set the instance to be used on this class" msgstr "" -"inst <instància>: especifica la instància a fer servir en esta classe" +"inst <instància>: especifica la instància a fer servir en esta " +"classe" msgid "topic <instance>: Set the instance to be used on this class" msgstr "" -"topic <instància>: especifica la instància a fer servir en esta classe" +"topic <instància>: especifica la instància a fer servir en esta " +"classe" msgid "sub <class> <instance> <recipient>: Join a new chat" msgstr "" @@ -10836,6 +10811,10 @@ #. * #. * 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. +#. msgid "_Accept" msgstr "_Accepta" @@ -10902,9 +10881,8 @@ msgid "Extended away" msgstr "Absent durant una bona estona" -#, fuzzy msgid "Feeling" -msgstr "S'està rebent" +msgstr "Estat d'ànim" #, c-format msgid "%s (%s) changed status from %s to %s" @@ -11077,12 +11055,6 @@ msgid "Pidgin Internet Messenger" msgstr "Missatger d'Internet Pidgin" -msgid "Orientation" -msgstr "Orientació" - -msgid "The orientation of the tray." -msgstr "Orientació de l'àrea de notificació." - #. Build the login options frame. msgid "Login Options" msgstr "Opcions d'entrada" @@ -11201,8 +11173,8 @@ "voleu que el %s es connecte amb més comptes de missatgeria instantània (MI), " "torneu a prémer Afig fins a configurar-los tots.\n" "\n" -"Podeu tornar a esta finestra per afegir, editar o suprimir comptes, a partir " -"del menú Comptes->Gestiona els comptes a finestra de la llista " +"Podeu tornar a esta finestra per afegir, editar o suprimir comptes, a " +"partir del menú Comptes->Gestiona els comptes a finestra de la llista " "d'amics." #. Buddy List @@ -11338,8 +11310,8 @@ "choosing 'Expand' from the contact's context menu" msgstr "" "En fusionar estos contactes fareu que compartisquen una mateixa entrada en " -"la llista d'amics i en la finestra de conversa. Més avant els podreu separar " -"amb l'opció 'Expandeix' del menú contextual del contacte." +"la llista d'amics i en la finestra de conversa. Més avant els podreu " +"separar amb l'opció 'Expandeix' del menú contextual del contacte." msgid "Please update the necessary fields." msgstr "Actualitzeu els camps necessaris." @@ -11452,13 +11424,11 @@ msgid "Unknown node type" msgstr "Codi d'error desconegut" -#, fuzzy msgid "Please select your mood from the list" -msgstr "Seleccioneu l'estat d'ànim de la llista." - -#, fuzzy +msgstr "Seleccioneu l'estat d'ànim de la llista" + msgid "Message (optional)" -msgstr "Àlies (opcional)" +msgstr "Missatge (opcional)" msgid "Edit User Mood" msgstr "Edita l'estat d'ànim" @@ -11542,9 +11512,8 @@ msgid "/Tools/Pr_ivacy" msgstr "/Eines/_Privadesa" -#, fuzzy msgid "/Tools/Set _Mood" -msgstr "/Eines/_Registre del sistema" +msgstr "/Eines/Esta_bleix l'estat d'ànim" msgid "/Tools/_File Transfers" msgstr "/Eines/_Transferència de fitxers" @@ -11565,20 +11534,17 @@ msgid "/Help/Online _Help" msgstr "/Ajuda/A_juda en línia" -#, fuzzy msgid "/Help/_Build Information" -msgstr "Informació sobre l'amic" +msgstr "/Ajuda/Informació sobre el _muntatge" msgid "/Help/_Debug Window" msgstr "/Ajuda/Finestra de _depuració" -#, fuzzy msgid "/Help/De_veloper Information" -msgstr "Informació del servidor" - -#, fuzzy +msgstr "/Ajuda/Informació sobre els d_esenvolupadors" + msgid "/Help/_Translator Information" -msgstr "Informació personal" +msgstr "/Ajuda/Informació sobre els _traductors" msgid "/Help/_About" msgstr "/Ajuda/_Quant a" @@ -11807,9 +11773,8 @@ msgid "_Edit Account" msgstr "_Edita el compte" -#, fuzzy msgid "Set _Mood..." -msgstr "Estableix l'estat d'ànim..." +msgstr "Estableix l'_estat d'ànim..." msgid "No actions available" msgstr "No hi ha accions disponibles" @@ -11930,15 +11895,14 @@ msgid "/Conversation/Se_nd File..." msgstr "/Conversa/Envia un _fitxer..." -#, fuzzy msgid "/Conversation/Get _Attention" -msgstr "/Conversa/Aconsegueix informació" +msgstr "/Conversa/Aconseg_ueix atenció" msgid "/Conversation/Add Buddy _Pounce..." -msgstr "/Conversa/Afig un a_vís per a l'amic..." +msgstr "/Conversa/Afe_geix un avís per a l'amic..." msgid "/Conversation/_Get Info" -msgstr "/Conversa/_Aconsegueix informació" +msgstr "/Conversa/Aconsegueix inf_ormació" msgid "/Conversation/In_vite..." msgstr "/Conversa/Con_vida..." @@ -11953,16 +11917,16 @@ msgstr "/Conversa/_Bloca..." msgid "/Conversation/_Unblock..." -msgstr "/Conversa/_Desbloca..." +msgstr "/Conversa/Desb_loca..." msgid "/Conversation/_Add..." msgstr "/Conversa/_Afig..." msgid "/Conversation/_Remove..." -msgstr "/Conversa/Sup_rimeix..." +msgstr "/Conversa/_Suprimeix..." msgid "/Conversation/Insert Lin_k..." -msgstr "/Conversa/Insereix un _enllaç..." +msgstr "/Conversa/Insereix _un enllaç..." msgid "/Conversation/Insert Imag_e..." msgstr "/Conversa/Insereix una _imatge..." @@ -12015,9 +11979,8 @@ msgid "/Conversation/Send File..." msgstr "/Conversa/Envia un fitxer..." -#, fuzzy msgid "/Conversation/Get Attention" -msgstr "/Conversa/Aconsegueix informació" +msgstr "/Conversa/Aconsegueix atenció" msgid "/Conversation/Add Buddy Pounce..." msgstr "/Conversa/Afig avís per a l'amic..." @@ -12083,13 +12046,11 @@ msgid "0 people in room" msgstr "No hi ha ningú a la sala" -#, fuzzy msgid "Close Find bar" -msgstr "Tanca esta pestanya" - -#, fuzzy +msgstr "Tanca la barra de cerca" + msgid "Find:" -msgstr "Cerca" +msgstr "Cerca:" #, c-format msgid "%d person in room" @@ -12266,6 +12227,9 @@ msgid "Bengali" msgstr "Bengalí" +msgid "Bengali-India" +msgstr "Bengalí (Ìndia)" + msgid "Bosnian" msgstr "Bosnià" @@ -12492,7 +12456,7 @@ msgid "Lithuanian" msgstr "Lituà" -#, fuzzy, c-format +#, 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 " @@ -12501,16 +12465,14 @@ "copyrighted by its contributors, a list of whom is also distributed with %" "s. There is no warranty for %s.

" msgstr "" -"El %s és un client de missatgeria instantània modular basat en libpurple, " -"que permet utilitzar els protocols AIM, MSN, Yahoo!, Jabber, ICQ, IRC, SILC, " -"SIP/SIMPLE, Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, MySpaceIM, " -"Gadu-Gadu, i QQ, tots alhora. Utilitza la biblioteca de programació GTK+." -"

Podeu modificar i redistribuir el programa sota els termes de la GPL " -"(versió 2 o posterior). Hi ha una còpia de la GPL dins del fitxer «COPYING» " -"que es distribueix amb el %s. Els drets d'autor del %s pertanyen als seus " -"col·laboradors. El fitxer «COPYRIGHT» conté una llista completa de tots els " -"contribuïdors. No vos proporcionem cap mena de garantia amb este programa." -"

" +"El %s és un client de missatgeria basat en libpurple que permet connectar-" +"vos a diferents serveis de missatgeria instantània al mateix temps. El %s " +"està escrit en C i la biblioteca de programació GTK+. El %s es distribueix " +"sota llicència GPL 2 (o posterior), i per tant podeu modificar-lo i " +"redistribuir-lo d'acord amb esta llicència. Amb el %s es distribueix una " +"còpia de la GPL. El %s és copyright de tothom que hi ha contribuït, la " +"llista de col·laboradors també es distribueix amb el %s. No es proporciona " +"cap mena de garantia amb el %s.

" #, c-format msgid "" @@ -12519,8 +12481,11 @@ "Channel: #pidgin on irc.freenode.net
\tXMPP MUC: devel@conference.pidgin." "im

" msgstr "" - -#, fuzzy, c-format +"Recursos útils
\tLloc web
\t
Preguntes més freqüents
\tCanal d'IRC: #pidgin " +"a irc.freenode.net
\tXMPP MUC: devel@conference.pidgin.im

" + +#, c-format msgid "" "Help from other Pidgin users is available by " "e-mailing support@pidgin.im
" msgstr "" -"Ajuda d'altres usuaris del Pidgin: support@pidgin.im
Esta és una llista de correu " -"pública. (arxiu)" -"
No vos podem ajudar amb connectors d'altres proveïdors.
En esta " -"llista s'hi empra principalment l'anglés. Podeu escriure-hi en un " -"altre idioma, però és possible que les respostes no siguen de gaire ajuda." -"

" +"Ajuda d'altres usuaris del Pidgin: support@pidgin.im
Esta és una llista " +"de correu pública. (arxiu)
No vos podem ajudar amb connectors d'altres proveïdors.
En esta llista s'hi empra principalment l'anglés. Podeu escriure-" +"hi en un altre idioma, però és possible que les respostes no siguen de gaire " +"ajuda.
" #, c-format msgid "About %s" msgstr "Quant al %s" -#, fuzzy msgid "Build Information" -msgstr "Informació sobre l'amic" +msgstr "Informació sobre el muntatge" #. End of not to be translated section -#, fuzzy, c-format +#, c-format msgid "%s Build Information" -msgstr "Informació sobre l'amic" +msgstr "Informació sobre el muntatge del %s" msgid "Current Developers" msgstr "Desenvolupadors actuals" @@ -12563,9 +12527,9 @@ msgid "Retired Crazy Patch Writers" msgstr "Escriptors de pedaços retirats" -#, fuzzy, c-format +#, c-format msgid "%s Developer Information" -msgstr "Informació del servidor" +msgstr "Informació sobre els desenvolupadors del %s" msgid "Current Translators" msgstr "Traductors actuals" @@ -12573,9 +12537,9 @@ msgid "Past Translators" msgstr "Antics traductors" -#, fuzzy, c-format +#, c-format msgid "%s Translator Information" -msgstr "Més informació" +msgstr "Informació sobre els traductors del %s" msgid "_Name" msgstr "_Nom" @@ -12938,8 +12902,8 @@ "This smiley is disabled because a custom smiley exists for this shortcut:\n" " %s" msgstr "" -"Esta emoticona està inhabilitada perquè hi ha una emoticona personalitzada " -"per esta drecera:\n" +"Esta emoticona està inhabilitada perquè hi ha una emoticona " +"personalitzada per esta drecera:\n" " %s" msgid "Smile!" @@ -12994,9 +12958,8 @@ msgid "Insert Smiley" msgstr "Insereix una emoticona" -#, fuzzy msgid "Send Attention" -msgstr "Alerta!" +msgstr "Envia atenció" msgid "_Bold" msgstr "_Negreta" @@ -13044,9 +13007,8 @@ msgid "_Smile!" msgstr "_Somrieu!" -#, fuzzy msgid "_Attention!" -msgstr "Alerta!" +msgstr "_Atenció!" msgid "Log Deletion Failed" msgstr "No s'ha pogut suprimir el registre" @@ -13180,7 +13142,8 @@ #, c-format msgid "Exiting because another libpurple client is already running.\n" msgstr "" -"Ara se eixirà atès que ja hi ha un altre client del libpurple executant-se.\n" +"Ara s'eixirà atès que ja hi ha un altre client del libpurple executant-" +"se.\n" msgid "/_Media" msgstr "/_Medi" @@ -13999,9 +13962,8 @@ msgid "Custom Smiley Manager" msgstr "Gestor d'emoticones personalitzades" -#, fuzzy msgid "Attention received" -msgstr "Cal activació" +msgstr "S'ha rebut una alerta" msgid "Select Buddy Icon" msgstr "Seleccioneu una icona per a l'amic" @@ -14053,8 +14015,8 @@ "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 "" -"Podeu enviar esta imatge com una transferència de fitxer, incrustar-la en el " -"missatge, o emprar-la com a icona d'amic per a este usuari." +"Podeu enviar esta imatge com una transferència de fitxer, incrustar-la en " +"el missatge, o emprar-la com a icona d'amic per a este usuari." msgid "Set as buddy icon" msgstr "Estableix com a icona de l'amic" @@ -14072,15 +14034,15 @@ "You can send this image as a file transfer, or use it as the buddy icon for " "this user." msgstr "" -"Podeu enviar esta imatge com una transferència de fitxer, o emprar-la com a " -"icona d'amic per a este usuari." +"Podeu enviar esta imatge com una transferència de fitxer, o emprar-la com " +"a icona d'amic per a este usuari." msgid "" "You can insert this image into this message, or use it as the buddy icon for " "this user" msgstr "" -"Podeu incrustar esta imatge en el missatge o utilitzar-la com a icona per a " -"este usuari." +"Podeu incrustar esta imatge en el missatge o utilitzar-la com a icona per " +"a este usuari." #. 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 @@ -14387,7 +14349,7 @@ msgstr "Servei de descoberta XMPP" msgid "Allows browsing and registering services." -msgstr "Permet navegar i registrar-se a serveis." +msgstr "Permet navegar i registrar-s'a serveis." msgid "" "This plugin is useful for registering with legacy transports or other XMPP " @@ -15152,8 +15114,17 @@ msgstr "Opcions del format de les marques horàries" #, c-format -msgid "_Force 24-hour time format" -msgstr "_Força el format de 24 hores" +msgid "_Force timestamp format:" +msgstr "_Format de les marques horàries:" + +msgid "Use system default" +msgstr "Predeterminat del sistema" + +msgid "12 hour time format" +msgstr "12 hores" + +msgid "24 hour time format" +msgstr "24 hores" msgid "Show dates in..." msgstr "Mostra dates a..." @@ -15268,8 +15239,7 @@ msgid "Remove Buddy List window transparency on focus" msgstr "" -"Treu la transparència de la finestra de la llista d'amics en obtindre el " -"focus" +"Treu la transparència de la finestra de la llista d'amics en obtindre el focus" #. *< type #. *< ui_requirement @@ -15293,8 +15263,8 @@ "\n" "* Note: This plugin requires Win2000 or greater." msgstr "" -"Este connector habilita la transparència variables en finestres de conversa, " -"i la llista d'amics.\n" +"Este connector habilita la transparència variables en finestres de " +"conversa, i la llista d'amics.\n" "\n" "* Nota: este connector requereix Windows 2000 o superior." @@ -15358,9 +15328,29 @@ msgstr "Envia i rep blocs XMPP en brut." #. * description -#, fuzzy msgid "This plugin is useful for debugging XMPP servers or clients." -msgstr "Este connector és útil per a depurar servidors i clients XMPP." +msgstr "Este connector és útil per a depurar servidors o clients XMPP." + +#~ msgid "Orientation" +#~ msgstr "Orientació" + +#~ msgid "The orientation of the tray." +#~ msgstr "Orientació de l'àrea de notificació." + +#~ msgid "Artist" +#~ msgstr "Artista" + +#~ msgid "Album" +#~ msgstr "Àlbum" + +#~ msgid "Pager server" +#~ msgstr "Servidor de cercapersones" + +#~ msgid "Yahoo Chat server" +#~ msgstr "Servidor de xat de Yahoo" + +#~ msgid "Yahoo Chat port" +#~ msgstr "Port del xat de Yahoo" #~ msgid "Error creating conference." #~ msgstr "S'ha produït un error en crear la conferència." @@ -15372,13 +15362,13 @@ #~ msgstr "No s'ha pogut crear el sòcol: %s" #~ msgid "%s just sent you a Nudge!" -#~ msgstr "%s vos ha donat un cop de colze!" +#~ msgstr "%s us ha donat un cop de colze!" #~ msgid "Friendly name changes too rapidly" #~ msgstr "El nom amistós canvia massa de pressa" #~ msgid "This Hotmail account may not be active." -#~ msgstr "Pot ser que este compte Hotmail no siga actiu." +#~ msgstr "Pot ser que aquest compte Hotmail no sigui actiu." #~ msgid "Profile URL" #~ msgstr "URL del perfil" @@ -15420,10 +15410,10 @@ #~ msgstr "No s'ha pogut suprimir el grup" #~ msgid "%s has added you to his or her buddy list." -#~ msgstr "%s vos ha afegit a la seua llista d'amics." +#~ msgstr "%s us ha afegit a la seva llista d'amics." #~ msgid "%s has removed you from his or her buddy list." -#~ msgstr "%s vos ha suprimit de la seua llista d'amics." +#~ msgstr "%s us ha suprimit de la seva llista d'amics." #~ msgid "" #~ "FAQ: estrofa (literal) (Josep) #~ msgid "Insert an stanza." @@ -16946,9 +16936,6 @@ #~ msgid "_Deny" #~ msgstr "_Denega" -#~ msgid "Invalid Username" -#~ msgstr "El nom d'usuari no és vàlid" - #~ msgid "Alias: %s
" #~ msgstr "Àlies: %s
" diff -r edb7c80bf930 -r f8ec889c5bce po/de.po --- a/po/de.po Fri Apr 23 16:58:03 2010 +0000 +++ b/po/de.po Mon May 10 23:21:44 2010 +0000 @@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-29 00:12-0700\n" -"PO-Revision-Date: 2010-02-11 21:02+0100\n" +"POT-Creation-Date: 2010-05-09 16:11+0200\n" +"PO-Revision-Date: 2010-05-09 16:05+0200\n" "Last-Translator: Björn Voigt \n" "Language-Team: Deutsch \n" "MIME-Version: 1.0\n" @@ -1360,8 +1360,6 @@ msgid "Saved Statuses" msgstr "Gespeicherter Status" -#. title -#. optional information msgid "Title" msgstr "Titel" @@ -1657,6 +1655,14 @@ msgid "Set User Info" msgstr "Benutzer-Info setzen" +msgid "This protocol does not support setting a public alias." +msgstr "" +"Dieses Protokoll unterstützt das Setzen eines öffentlichen Alias nicht." + +msgid "This protocol does not support fetching the public alias." +msgstr "" +"Dieses Protokoll unterstützt nicht das Abrufen von öffentlichen Aliasen." + msgid "Unknown" msgstr "Unbekannt" @@ -3811,15 +3817,6 @@ msgid "execute" msgstr "Ausführen" -msgid "Server requires TLS/SSL, but no TLS/SSL support was found." -msgstr "" -"Der Server benötigt TLS/SSL, es wurde aber kein TLS/SSL-Support gefunden." - -msgid "You require encryption, but no TLS/SSL support was found." -msgstr "" -"Sie fordern Verschlüsselung, aber es wurde keine TLS/SSL-Unterstützung " -"gefunden." - msgid "Server requires plaintext authentication over an unencrypted stream" msgstr "" "Der Server erfordert eine Klartext-Authentifizierung über einen " @@ -3863,6 +3860,41 @@ msgid "SASL error: %s" msgstr "SASL-Fehler: %s" +msgid "Invalid Encoding" +msgstr "Ungültige Kodierung" + +msgid "Unsupported Extension" +msgstr "Nicht-unterstützte Erweiterung" + +msgid "" +"Unexpected response from the server. This may indicate a possible MITM " +"attack" +msgstr "" +"Unerwartete Antwort vom Server. Das kann auf eine mögliche MITM-Attacke " +"hindeuten" + +msgid "" +"The server does support channel binding, but did not appear to advertise " +"it. This indicates a likely MITM attack" +msgstr "" +"Der Server unterstützt Kanalbindung, aber er macht das nicht bekannt. Das " +"deuted auf eine wahrscheinliche MITM-Attacke hin" + +msgid "Server does not support channel binding" +msgstr "Server unterstützt keine Kanalbindung" + +msgid "Unsupported channel binding method" +msgstr "Nicht-unterstützte Kanalbindungsmethode" + +msgid "User not found" +msgstr "Benutzer nicht gefunden" + +msgid "Invalid Username Encoding" +msgstr "Ungültig Kodierung des Benutzernamens" + +msgid "Resource Constraint" +msgstr "Ressourcen-Einschränkung" + msgid "Unable to canonicalize username" msgstr "Benutzername konnte nicht in Normalform gebracht werden" @@ -3940,6 +3972,11 @@ msgid "Organization Unit" msgstr "Organisationseinheit" +#. title +#. optional information +msgid "Job Title" +msgstr "Beruf" + msgid "Role" msgstr "Funktion" @@ -4163,12 +4200,24 @@ msgid "Roles:" msgstr "Rollen:" +msgid "Server requires TLS/SSL, but no TLS/SSL support was found." +msgstr "" +"Der Server benötigt TLS/SSL, es wurde aber kein TLS/SSL-Support gefunden." + +msgid "You require encryption, but no TLS/SSL support was found." +msgstr "" +"Sie fordern Verschlüsselung, aber es wurde keine TLS/SSL-Unterstützung " +"gefunden." + msgid "Ping timed out" msgstr "Ping-Zeitüberschreitung" msgid "Invalid XMPP ID" msgstr "Ungültige XMPP-ID" +msgid "Invalid XMPP ID. Username portion must be set." +msgstr "Falsche XMPP-ID. Der Benutzername muss gesetzt werden." + msgid "Invalid XMPP ID. Domain must be set." msgstr "Falsche XMPP-ID. Die Domain muss gesetzt werden." @@ -4289,11 +4338,11 @@ msgstr "Ausstehend" msgid "None (To pending)" -msgstr "Nein (ausgehend unbestätigt)" +msgstr "Keine (ausgehend unbestätigt)" #. 0 msgid "None" -msgstr "Nein" +msgstr "Keine" #. subscription type msgid "Subscription" @@ -4305,14 +4354,18 @@ msgid "Allow Buzz" msgstr "Anklopfen erlauben" -#, fuzzy msgid "Mood Name" -msgstr "Zweiter Name" - -#, fuzzy +msgstr "Name der Stimmung" + msgid "Mood Comment" -msgstr "Buddy-Kommentar" - +msgstr "Stimmungskommentar" + +#. primitive +#. ID +#. name - use default +#. saveable +#. should be user_settable some day +#. independent msgid "Tune Artist" msgstr "Künstler anpassen" @@ -4483,9 +4536,6 @@ msgid "Remote Connection Failed" msgstr "Entfernte Verbindung fehlgeschlagen" -msgid "Resource Constraint" -msgstr "Eingeschränkte Ressourcen" - msgid "Restricted XML" msgstr "Eingeschränktes XML" @@ -4603,9 +4653,8 @@ msgid "Initiate Media" msgstr "Initiiere Medien" -#, fuzzy msgid "Account does not support PEP, can't set mood" -msgstr "Dieses Protokoll unterstützt keine Chaträume." +msgstr "Konto unterstützt kein PEP, kann die Stimmung nicht setzen" msgid "config: Configure a chat room." msgstr "config: Konfiguriere einen Chatraum." @@ -4663,9 +4712,8 @@ msgid "buzz: Buzz a user to get their attention" msgstr "buzz: Einen Kontakt anrufen, um seine Aufmerksamkeit zu erhalten" -#, fuzzy msgid "mood: Set current user mood" -msgstr "Wählen Sie den richtigen Benutzer" +msgstr "mood: Setze die aktuelle Benutzerstimmung" msgid "Extended Away" msgstr "Abwesend (erweitert)" @@ -4749,13 +4797,13 @@ "werden." msgid "XMPP stream header missing" -msgstr "" +msgstr "Der XMPP-Datenstromkopf fehlt" msgid "XMPP Version Mismatch" -msgstr "" +msgstr "XMPP-Versionskonflikt" msgid "XMPP stream missing ID" -msgstr "" +msgstr "Fehlende ID im XMPP-Datenstrom" msgid "XML Parse error" msgstr "Fehler beim Einlesen von XML-Daten" @@ -4834,32 +4882,27 @@ msgstr "" "Bitte wählen Sie die Ressource von %s, an die Sie eine Datei schicken möchten" -#, fuzzy msgid "Afraid" -msgstr "Arabisch" - -#, fuzzy +msgstr "Ängstlich, besorgt" + msgid "Amazed" -msgstr "Beschämt" - -#, fuzzy +msgstr "Verblüfft" + msgid "Amorous" -msgstr "Glorreich" +msgstr "Sinnlich" #. 1 msgid "Angry" msgstr "Verärgert" -#, fuzzy msgid "Annoyed" -msgstr "Verbannt" +msgstr "Ärgerlich" msgid "Anxious" -msgstr "Besorgt" - -#, fuzzy +msgstr "Ängstlich, unruhig" + msgid "Aroused" -msgstr "Sie senden" +msgstr "Aufgerüttelt" msgid "Ashamed" msgstr "Beschämt" @@ -4867,243 +4910,201 @@ msgid "Bored" msgstr "Gelangweilt" -#, fuzzy msgid "Brave" -msgstr "Speichern" - -#, fuzzy +msgstr "Tapfer" + msgid "Calm" -msgstr "Realm" - -#, fuzzy +msgstr "Beruhigt" + msgid "Cautious" -msgstr "Chats" - -#, fuzzy +msgstr "Zurückhaltend" + msgid "Cold" -msgstr "Fett" - -#, fuzzy +msgstr "Unterkühlt" + msgid "Confident" -msgstr "Konflikt" - -#, fuzzy +msgstr "Zuversichtlich" + msgid "Confused" -msgstr "Fortfahren" - -#, fuzzy +msgstr "Verwirrt" + msgid "Contemplative" -msgstr "Kontakt" - -#, fuzzy +msgstr "Nachdenklich" + msgid "Contented" -msgstr "Verbunden" - -#, fuzzy +msgstr "Zufrieden" + msgid "Cranky" -msgstr "Firma" +msgstr "Schrullig" msgid "Crazy" -msgstr "" - -#, fuzzy +msgstr "Verrückt" + msgid "Creative" -msgstr "Erzeugen" - -#, fuzzy +msgstr "Kreativ" + msgid "Curious" -msgstr "Glorreich" - -#, fuzzy +msgstr "Neugierig" + msgid "Dejected" -msgstr "Abgelehnt" - -#, fuzzy +msgstr "Niedergeschlagen" + msgid "Depressed" -msgstr "Gelöscht" - -#, fuzzy +msgstr "Deprimiert" + msgid "Disappointed" -msgstr "Verbindung unterbrochen." +msgstr "Enttäuscht" msgid "Disgusted" -msgstr "" - -#, fuzzy +msgstr "Empört" + msgid "Dismayed" -msgstr "Deaktiviert" - -#, fuzzy +msgstr "Bestürzt" + msgid "Distracted" -msgstr "Unbeteiligt" +msgstr "Abgelenkt" msgid "Embarrassed" -msgstr "" - -#, fuzzy +msgstr "Verlegen" + msgid "Envious" -msgstr "Besorgt" +msgstr "Neidisch" #. 2 msgid "Excited" msgstr "Aufgeregt" -#, fuzzy msgid "Flirtatious" -msgstr "Glorreich" +msgstr "Verführerisch" # old strings -#, fuzzy msgid "Frustrated" -msgstr "Vorname" +msgstr "Frustriert" msgid "Grateful" -msgstr "" - -#, fuzzy +msgstr "Dankbar, erkenntlich" + msgid "Grieving" -msgstr "Empfange..." +msgstr "Trauernd" #. 3 msgid "Grumpy" -msgstr "Mürrisch" - -#, fuzzy +msgstr "Brummig" + msgid "Guilty" -msgstr "Stadt" +msgstr "Schuldig" #. 4 msgid "Happy" -msgstr "Glücklich" +msgstr "Erfreut" msgid "Hopeful" -msgstr "" +msgstr "Hoffnungsvoll" #. 8 msgid "Hot" msgstr "Heiß" msgid "Humbled" -msgstr "" +msgstr "Gedemütigt" msgid "Humiliated" -msgstr "" - -#, fuzzy +msgstr "Erniedrigt" + msgid "Hungry" -msgstr "Verärgert" - -#, fuzzy +msgstr "Hungrig" + msgid "Hurt" -msgstr "Humor" +msgstr "Verletzt" msgid "Impressed" -msgstr "" - -#, fuzzy +msgstr "Beeindruckt" + msgid "In awe" -msgstr "Verliebt" +msgstr "Ehrfurchtsvoll" msgid "In love" msgstr "Verliebt" -#, fuzzy msgid "Indignant" -msgstr "Indonesisch" - -#, fuzzy +msgstr "Entrüstet" + msgid "Interested" -msgstr "Interessen" - -#, fuzzy +msgstr "Interessiert" + msgid "Intoxicated" -msgstr "Eingeladen" +msgstr "Betrunken" #. 6 msgid "Invincible" -msgstr "Unerschütterlich" +msgstr "Unbesiegbar" msgid "Jealous" msgstr "Eifersüchtig" -#, fuzzy msgid "Lonely" -msgstr "Affe" - -#, fuzzy +msgstr "Einsam" + msgid "Lost" -msgstr "Am lautesten" +msgstr "Verloren" msgid "Lucky" -msgstr "" - -#, fuzzy +msgstr "Glücklich" + msgid "Mean" -msgstr "Deutsch" - -#, fuzzy +msgstr "Gemein" + msgid "Moody" -msgstr "Stimmung" +msgstr "Launisch" msgid "Nervous" -msgstr "" - -#, fuzzy +msgstr "Reizbar" + msgid "Neutral" -msgstr "Detail" - -#, fuzzy +msgstr "Gleichgültig" + msgid "Offended" -msgstr "Offline" +msgstr "Beleidigt" msgid "Outraged" -msgstr "" - -#, fuzzy +msgstr "Empört" + msgid "Playful" -msgstr "Abspielen" - -#, fuzzy +msgstr "Verspielt" + msgid "Proud" -msgstr "Laut" - -#, fuzzy +msgstr "Stolz" + msgid "Relaxed" -msgstr "Echter Name" - -#, fuzzy +msgstr "Entspannt" + msgid "Relieved" -msgstr "Empfangen" - -#, fuzzy +msgstr "Erleichtert" + msgid "Remorseful" -msgstr "Entfernen" - -#, fuzzy +msgstr "Reumütig" + msgid "Restless" -msgstr "Registrieren" +msgstr "Ruhelos" #. 7 msgid "Sad" msgstr "Traurig" -#, fuzzy msgid "Sarcastic" -msgstr "Marathi" +msgstr "Sarkastisch" msgid "Satisfied" -msgstr "" - -#, fuzzy +msgstr "Befriedigt" + msgid "Serious" -msgstr "Glorreich" - -#, fuzzy +msgstr "Ernsthaft" + msgid "Shocked" -msgstr "Blockiert" +msgstr "Schockiert" msgid "Shy" -msgstr "" +msgstr "Schüchtern" #. 9 msgid "Sick" @@ -5112,43 +5113,37 @@ #. 10 #. Sleepy / Tired msgid "Sleepy" -msgstr "Müde" +msgstr "Schläfrig" msgid "Spontaneous" -msgstr "" - -#, fuzzy +msgstr "Spontan" + msgid "Stressed" -msgstr "Geschwindigkeit" - -#, fuzzy +msgstr "Gestresst" + msgid "Strong" -msgstr "Lied" +msgstr "Stark" msgid "Surprised" -msgstr "" +msgstr "Überrascht" msgid "Thankful" -msgstr "" +msgstr "Dankbar, froh" msgid "Thirsty" -msgstr "" - -#, fuzzy +msgstr "Durstig" + msgid "Tired" -msgstr "Fire" - -#, fuzzy +msgstr "Müde" + msgid "Undefined" -msgstr "Unterstrichen" - -#, fuzzy +msgstr "Undefiniert" + msgid "Weak" -msgstr "Schlag" - -#, fuzzy +msgstr "Schwach" + msgid "Worried" -msgstr "Gelangweilt" +msgstr "Besorgt, beunruhigt" msgid "Set User Nickname" msgstr "Setze Benutzer-Spitzname" @@ -5516,18 +5511,6 @@ msgid "Out to Lunch" msgstr "Zur Mittagspause" -#. primitive -#. ID -#. name - use default -#. saveable -#. should be user_settable some day -#. independent -msgid "Artist" -msgstr "Interpret" - -msgid "Album" -msgstr "Album" - msgid "Game Title" msgstr "Spieltitel" @@ -5677,9 +5660,6 @@ msgid "Work" msgstr "Geschäftlich" -msgid "Job Title" -msgstr "Beruf" - msgid "Company" msgstr "Firma" @@ -6719,9 +6699,6 @@ msgid "Incorrect password" msgstr "Falsches Passwort" -msgid "User not found" -msgstr "Benutzer nicht gefunden" - msgid "Account has been disabled" msgstr "Konto wurde deaktiviert" @@ -6988,6 +6965,10 @@ msgid "AOL does not allow your screen name to authenticate here" msgstr "AOL erlaubt Ihnen nicht, sich hier mit Ihrem Benutzernamen anzumelden" +#, c-format +msgid "Error requesting %s" +msgstr "Fehler beim Anfordern von %s" + msgid "Could not join chat room" msgstr "Konnte Chatraum nicht betreten" @@ -6995,104 +6976,88 @@ msgstr "Ungültiger Chatraumname" msgid "Thinking" -msgstr "" - -#, fuzzy +msgstr "Denkt nach" + msgid "Shopping" -msgstr "aufhört zu tippen" - -#, fuzzy +msgstr "Kauft ein" + msgid "Questioning" -msgstr "Frage-Dialog" - -#, fuzzy +msgstr "Fragt etwas" + msgid "Eating" -msgstr "Funkruf" - -#, fuzzy +msgstr "Beim Essen" + msgid "Watching a movie" -msgstr "Spielt ein Spiel" +msgstr "Schaut einen Film an" msgid "Typing" msgstr "Tippt gerade" -#, fuzzy msgid "At the office" -msgstr "Nicht im Büro" +msgstr "Im Büro" msgid "Taking a bath" -msgstr "" +msgstr "Nimmt ein Bad" msgid "Watching TV" -msgstr "" - -#, fuzzy +msgstr "Schaut Fernsehen" + msgid "Having fun" -msgstr "Auflegen" - -#, fuzzy +msgstr "Hat Spaß" + msgid "Sleeping" -msgstr "Müde" +msgstr "Schläft" msgid "Using a PDA" -msgstr "" - -#, fuzzy +msgstr "Benutzt einen PDA" + msgid "Meeting friends" -msgstr "IM-Freunde" - -#, fuzzy +msgstr "Freunde treffen" + msgid "On the phone" msgstr "Am Telefon" -#, fuzzy msgid "Surfing" -msgstr "Wiederkehrend" +msgstr "Surft" #. "I am mobile." / "John is mobile." msgid "Mobile" -msgstr "Mobil" +msgstr "Ist mobil" msgid "Searching the web" -msgstr "" +msgstr "Sucht etwas im Web" msgid "At a party" -msgstr "" +msgstr "Auf einer Party" msgid "Having Coffee" -msgstr "" +msgstr "Trinkt Kaffee" #. Playing video games -#, fuzzy msgid "Gaming" -msgstr "Zwillinge" +msgstr "Spielt am PC" msgid "Browsing the web" -msgstr "" - -#, fuzzy +msgstr "Surft im Web" + msgid "Smoking" -msgstr "Lied" - -#, fuzzy +msgstr "Raucht" + msgid "Writing" -msgstr "Arbeitet" +msgstr "Schreibt" #. Drinking [Alcohol] -#, fuzzy msgid "Drinking" -msgstr "Arbeitet" +msgstr "Trinkt" msgid "Listening to music" msgstr "Musik hören" -#, fuzzy msgid "Studying" -msgstr "Sende" - -#, fuzzy +msgstr "Lernt" + msgid "In the restroom" -msgstr "Interessen" +msgstr "Auf der Toilette" msgid "Received invalid data on connection with server" msgstr "Ungültige Daten in der Verbindung mit dem Server empfangen" @@ -7311,7 +7276,7 @@ msgstr "Spiele" msgid "ICQ Xtraz" -msgstr "" +msgstr "ICQ Xtraz" msgid "Add-Ins" msgstr "Zusätze" @@ -7379,23 +7344,18 @@ msgid "Invisible" msgstr "Unsichtbar" -#, fuzzy msgid "Evil" -msgstr "E-Mail" - -#, fuzzy +msgstr "Böse" + msgid "Depression" -msgstr "Beruf" - -#, fuzzy +msgstr "Depression" + msgid "At home" -msgstr "Über mich" - -#, fuzzy +msgstr "Zu Hause" + msgid "At work" -msgstr "Netzwerk" - -#, fuzzy +msgstr "Bei der Arbeit" + msgid "At lunch" msgstr "Zur Mittagspause" @@ -7936,9 +7896,8 @@ msgid "iTunes Music Store Link" msgstr "iTunes Music Store Link" -#, fuzzy msgid "Lunch" -msgstr "Finch" +msgstr "Mittagspause" #, c-format msgid "Buddy Comment for %s" @@ -7971,9 +7930,8 @@ msgid "Edit Buddy Comment" msgstr "Buddy-Kommentar bearbeiten" -#, fuzzy msgid "Get X-Status Msg" -msgstr "Abwesenheitsmitteilung abrufen" +msgstr "X-Status-Nachricht abrufen" msgid "End Direct IM Session" msgstr "Direkt-IM-Sitzung beenden" @@ -8384,6 +8342,10 @@ msgid "Admin" msgstr "Admin" +#. XXX: Should this be "Topic"? +msgid "Room Title" +msgstr "Raumtitel" + msgid "Notice" msgstr "Bemerkung" @@ -10311,9 +10273,6 @@ msgid "Yahoo! Protocol Plugin" msgstr "Yahoo!-Protokoll-Plugin" -msgid "Pager server" -msgstr "Pager-Server" - msgid "Pager port" msgstr "Pager-Port" @@ -10335,12 +10294,6 @@ msgid "Chat room list URL" msgstr "Chatraumliste (URL)" -msgid "Yahoo Chat server" -msgstr "Yahoo-Chat-Server" - -msgid "Yahoo Chat port" -msgstr "Yahoo-Chat-Port" - msgid "Yahoo JAPAN ID..." msgstr "Yahoo-JAPAN-ID..." @@ -10409,6 +10362,15 @@ "Konto gesperrt: Unbekannter Grund. Eventuell können Sie dies beheben, wenn " "Sie sich auf der Yahoo!-Webseite anmelden." +#. indicates a lock due to logging in too frequently +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 "" +"Konto gesperrt: Zu viele fehlgeschlagene Login-Versuche. Warten Sie einige " +"Minuten bevor Sie erneut versuchen sich zu verbinden. Eventuell können Sie " +"dies beheben, wenn Sie sich auf der Yahoo!-Webseite anmelden." + #. username or password missing msgid "Username or password missing" msgstr "Benutzername oder Passwort fehlt" @@ -10489,6 +10451,16 @@ msgid "Unable to establish a connection with %s: %s" msgstr "Die Verbindung mit %s konnte nicht hergestellt werden: %s" +msgid "Unable to connect: The server returned an empty response." +msgstr "Verbindung fehlgeschlagen: Der Server lieferte eine leere Antwort." + +msgid "" +"Unable to connect: The server's response did not contain the necessary " +"information" +msgstr "" +"Verbindung fehlgeschlagen: Die Antwort des Servers enthielt nicht die " +"nötigen Informationen" + msgid "Not at Home" msgstr "Nicht zu Hause" @@ -10879,6 +10851,10 @@ #. * #. * 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. +#. msgid "_Accept" msgstr "_Akzeptieren" @@ -10945,9 +10921,8 @@ msgid "Extended away" msgstr "Länger abwesend" -#, fuzzy msgid "Feeling" -msgstr "Empfange" +msgstr "Befinden" #, c-format msgid "%s (%s) changed status from %s to %s" @@ -11120,12 +11095,6 @@ msgid "Pidgin Internet Messenger" msgstr "Pidgin Internet-Sofortnachrichtendienst" -msgid "Orientation" -msgstr "Ausrichtung" - -msgid "The orientation of the tray." -msgstr "Die Ausrichtung der Kontrollleiste." - #. Build the login options frame. msgid "Login Options" msgstr "Anmeldeoptionen" @@ -11499,13 +11468,11 @@ msgid "Unknown node type" msgstr "Unbekannter Knotentyp" -#, fuzzy msgid "Please select your mood from the list" -msgstr "Bitte setzen Sie eine Stimmung aus der Liste." - -#, fuzzy +msgstr "Bitte wählen Sie Ihre Stimmung aus der Liste" + msgid "Message (optional)" -msgstr "Alias (optional)" +msgstr "Nachricht (optional)" msgid "Edit User Mood" msgstr "Benutzerstimmung ändern" @@ -11588,9 +11555,8 @@ msgid "/Tools/Pr_ivacy" msgstr "/Werkzeuge/Pri_vatsphäre" -#, fuzzy msgid "/Tools/Set _Mood" -msgstr "/Werkzeuge/_System-Mitschnitt" +msgstr "/Werkzeuge/Setze _Stimmung" msgid "/Tools/_File Transfers" msgstr "/Werkzeuge/_Dateiübertragungen" @@ -11611,20 +11577,17 @@ msgid "/Help/Online _Help" msgstr "/Hilfe/Online-_Hilfe" -#, fuzzy msgid "/Help/_Build Information" -msgstr "Buddy-Information" +msgstr "/Hilfe/_Build-Informationen" msgid "/Help/_Debug Window" msgstr "/Hilfe/_Debug-Fenster" -#, fuzzy msgid "/Help/De_veloper Information" -msgstr "Serverinformation" - -#, fuzzy +msgstr "/Hilfe/_Entwickler-Informationen" + msgid "/Help/_Translator Information" -msgstr "Persönliche Informationen" +msgstr "/Hilfe/Ü_bersetzer-Informationen" msgid "/Help/_About" msgstr "/Hilfe/Ü_ber" @@ -11855,9 +11818,8 @@ msgid "_Edit Account" msgstr "Konto _bearbeiten" -#, fuzzy msgid "Set _Mood..." -msgstr "Setze Stimmung..." +msgstr "Setze _Stimmung..." msgid "No actions available" msgstr "Keine Aktionen verfügbar" @@ -11979,9 +11941,8 @@ msgid "/Conversation/Se_nd File..." msgstr "/Unterhaltung/Datei _senden..." -#, fuzzy msgid "/Conversation/Get _Attention" -msgstr "/Unterhaltung/Info abrufen" +msgstr "/Unterhaltung/_Aufmerksamkeit erregen" msgid "/Conversation/Add Buddy _Pounce..." msgstr "/Unterhaltung/_Buddy-Alarm hinzufügen..." @@ -12064,9 +12025,8 @@ msgid "/Conversation/Send File..." msgstr "/Unterhaltung/Datei senden ..." -#, fuzzy msgid "/Conversation/Get Attention" -msgstr "/Unterhaltung/Info abrufen" +msgstr "/Unterhaltung/Aufmerksamkeit erregen" msgid "/Conversation/Add Buddy Pounce..." msgstr "/Unterhaltung/Buddy-Alarm hinzufügen..." @@ -12132,13 +12092,11 @@ msgid "0 people in room" msgstr "0 Personen im Raum" -#, fuzzy msgid "Close Find bar" -msgstr "Diesen Reiter schließen" - -#, fuzzy +msgstr "Suchleiste schließen" + msgid "Find:" -msgstr "Suchen" +msgstr "Suchen:" #, c-format msgid "%d person in room" @@ -12311,6 +12269,9 @@ msgid "Bengali" msgstr "Bengalisch" +msgid "Bengali-India" +msgstr "Bengalisch" + msgid "Bosnian" msgstr "Bosnisch" @@ -12533,7 +12494,7 @@ msgid "Lithuanian" msgstr "Litauisch" -#, fuzzy, c-format +#, 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 " @@ -12542,15 +12503,14 @@ "copyrighted by its contributors, a list of whom is also distributed with %" "s. There is no warranty for %s.

" msgstr "" -"%s ist ein grafischer modularer Nachrichtendienst, basierend auf libpurple, " -"der AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, Novell GroupWise, " -"Lotus Sametime, Bonjour, Zephyr, MySpaceIM, Gadu-Gadu und QQ gleichzeitig " -"unterstützt. Er wird mit GTK+ entwickelt.

Sie können das Programm " -"nach den Bedingungen der GPL (Version 2 oder später) modifizieren und " -"weitergeben. Eine Kopie der GPL ist in der Datei 'COPYING' enthalten, die " -"mit %s ausgeliefert wird. %s wird von seinen Mitwirkenden urheberrechtlich " -"geschützt. Die Datei 'COPYRIGHT' enthält die komplette Liste der " -"Mitwirkenden. Wir übernehmen keine Haftung für dieses Programm.

" +"%s ist ein Nachrichtendienst, basierend auf libpurple, der die Verbindung zu " +"mehreren Nachrichtendiensten gleichzeitig unterstützt. %s wird in C " +"programmiert und nutzt GTK+. %s ist nach den Bedingungen der GPL (Version 2 " +"oder später) freigegeben und darf gemäß dieser bearbeitet und weiter " +"verbreitet werden. Eine Kopie der GPL wird mit %s ausgeliefert. %s wird " +"von seinen Mitwirkenden urheberrechtlich geschützt. Eine komplette Liste " +"der Mitwirkenden wird mit %s ausgeliefert. Wir übernehmen keine Haftung für " +"%s.

" #, c-format msgid "" @@ -12559,8 +12519,12 @@ "Channel: #pidgin on irc.freenode.net
\tXMPP MUC: devel@conference.pidgin." "im

" msgstr "" - -#, fuzzy, c-format +"Hilfreiche Quellen
\t
Webseite
\tHäufig gestellte Fragen (FAQ)
" +"\tIRC-Channel: #pidgin auf irc.freenode.net
\tXMPP-MUC: devel@conference." +"pidgin.im

" + +#, c-format msgid "" "Help from other Pidgin users is available by " "e-mailing support@pidgin.im
" msgstr "" -"Hilfe von anderen Pidgin-Benutzern: support@pidgin.im
Dies ist eine öffentliche Mailing-Liste! (Archiv)
Wir können nicht bei Problemen mit Drittanbieter-Protokollen oder " -"Plugins helfen!
Die Hauptsprache dieser Liste ist Englisch. Sie " -"können gern in einer anderen Sprache schreiben, aber die Antworten könnten " -"weniger hilfreich sein.
Deutschsprachige Benutzer können auch das Portal " -"
Pidgin-IM.de nutzen. Dort finden " -"Sie aktuelle Informationen zu Pidgin, können mit anderen Benutzern im Forum diskutieren und Hilfe zu " -"Problemen finden. Beachten Sie, dass dieses Portal unabhängig vom " -"offiziellen Pidgin-Projekt ist.

" +"Hilfe von anderen Pidgin-Benutzern erhält man " +"per E-Mail an support@pidgin.im
Dies ist eine öffentliche Mailing-Liste! (Archiv)
Wir können nicht bei Problemen mit " +"Drittanbieter-Protokollen oder Plugins helfen!
Die Hauptsprache dieser " +"Liste ist Englisch. Sie können gern in einer anderen Sprache " +"schreiben, aber die Antworten könnten weniger hilfreich sein.
Deutschsprachige Benutzer können auch das Portal Pidgin-IM.de nutzen. Dort finden Sie aktuelle " +"Informationen zu Pidgin, können mit anderen Benutzern im Forum diskutieren und Hilfe zu Problemen finden. " +"Beachten Sie, dass dieses Portal unabhängig vom offiziellen Pidgin-Projekt " +"ist.

" #, c-format msgid "About %s" msgstr "Über %s" -#, fuzzy msgid "Build Information" -msgstr "Buddy-Information" +msgstr "Build-Informationen" #. End of not to be translated section -#, fuzzy, c-format +#, c-format msgid "%s Build Information" -msgstr "Buddy-Information" +msgstr "%s-Build-Informationen" msgid "Current Developers" msgstr "Aktuelle Entwickler" @@ -12608,9 +12572,9 @@ msgid "Retired Crazy Patch Writers" msgstr "Zurückgetretene verrückte Patchschreiber" -#, fuzzy, c-format +#, c-format msgid "%s Developer Information" -msgstr "Serverinformation" +msgstr "%s-Entwickler-Informationen" msgid "Current Translators" msgstr "Aktuelle Übersetzer" @@ -12618,9 +12582,9 @@ msgid "Past Translators" msgstr "Frühere Übersetzer" -#, fuzzy, c-format +#, c-format msgid "%s Translator Information" -msgstr "Mehr Informationen" +msgstr "%s-Übersetzer-Informationen" msgid "_Name" msgstr "_Name" @@ -12871,7 +12835,7 @@ "Farbe, mit der der Name in einer empfangenen Nachricht dargestellt wird." msgid "\"Attention\" Name Color" -msgstr "Farbe des Absendernamens für „Achtung“-Nachrichten" +msgstr "Farbe des Absendernamens für „Aufmerksamkeits“-Nachrichten" msgid "Color to draw the name of a message you received containing your name." msgstr "" @@ -13042,9 +13006,8 @@ msgid "Insert Smiley" msgstr "Smiley einfügen" -#, fuzzy msgid "Send Attention" -msgstr "Senden-Knopf" +msgstr "Aufmerksamkeitsgesuch senden" msgid "_Bold" msgstr "_Fett" @@ -13092,7 +13055,7 @@ msgstr "_Lächeln!" msgid "_Attention!" -msgstr "" +msgstr "_Aufmerksamkeit!" msgid "Log Deletion Failed" msgstr "Löschen des Mitschnitts fehlgeschlagen" @@ -14040,9 +14003,8 @@ msgid "Custom Smiley Manager" msgstr "Verwaltung für benutzerdefinierte Smileys" -#, fuzzy msgid "Attention received" -msgstr "Aktivierung erforderlich" +msgstr "Aufmerksamkeitsgesuch erhalten" msgid "Select Buddy Icon" msgstr "Buddy-Icon auswählen" @@ -14404,7 +14366,7 @@ "Description: " msgstr "" "\n" -"Beschreibung:" +"Beschreibung: " #. Create the window. msgid "Service Discovery" @@ -15189,8 +15151,17 @@ msgstr "Zeitstempelformat-Optionen" #, c-format -msgid "_Force 24-hour time format" -msgstr "_Erzwinge 24-Stunden Zeitformat" +msgid "_Force timestamp format:" +msgstr "_Erzwinge Zeitformat:" + +msgid "Use system default" +msgstr "System-Vorgabe verwenden" + +msgid "12 hour time format" +msgstr "12-Stunden-Zeitformat" + +msgid "24 hour time format" +msgstr "24-Stunden-Zeitformat" msgid "Show dates in..." msgstr "Zeige Datumsangaben in..." @@ -15391,11 +15362,31 @@ msgstr "Sendet und empfängt RAW-XMPP-Blöcke." #. * description -#, fuzzy msgid "This plugin is useful for debugging XMPP servers or clients." msgstr "" "Dieses Plugin ist nützlich zur Fehlersuche in XMPP-Servern oder -Clients." +#~ msgid "Artist" +#~ msgstr "Interpret" + +#~ msgid "Album" +#~ msgstr "Album" + +#~ msgid "Pager server" +#~ msgstr "Pager-Server" + +#~ msgid "Yahoo Chat server" +#~ msgstr "Yahoo-Chat-Server" + +#~ msgid "Yahoo Chat port" +#~ msgstr "Yahoo-Chat-Port" + +#~ msgid "Orientation" +#~ msgstr "Ausrichtung" + +#~ msgid "The orientation of the tray." +#~ msgstr "Die Ausrichtung der Kontrollleiste." + #~ msgid "Error creating conference." #~ msgstr "Fehler beim Erstellen der Konferenz." diff -r edb7c80bf930 -r f8ec889c5bce po/hu.po --- a/po/hu.po Fri Apr 23 16:58:03 2010 +0000 +++ b/po/hu.po Mon May 10 23:21:44 2010 +0000 @@ -1,17 +1,17 @@ # Hungarian translation of pidgin. -# Copyright (C) 2003, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# Copyright (C) 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # This file is distributed under the same license as the Pidgin package. # The Hungarian translation of Pidgin was sponsored by Novell Hungary, many thanks for it! # # Zoltan Sutto , 2003. # Gabor Kelemen , 2005, 2006, 2007, 2008, 2009. -# Gabor Kelemen , 2009. +# Gabor Kelemen , 2009, 2010. msgid "" msgstr "" "Project-Id-Version: pidgin 2.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-29 00:17-0700\n" -"PO-Revision-Date: 2009-11-26 13:06+0100\n" +"POT-Creation-Date: 2010-05-08 00:53+0200\n" +"PO-Revision-Date: 2010-05-08 00:52+0200\n" "Last-Translator: Gabor Kelemen \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" @@ -1351,8 +1351,6 @@ msgid "Saved Statuses" msgstr "Mentett állapotok" -#. title -#. optional information msgid "Title" msgstr "Beosztás" @@ -1646,6 +1644,12 @@ msgid "Set User Info" msgstr "Felhasználói adatok beállítása" +msgid "This protocol does not support setting a public alias." +msgstr "Ez a protokoll nem támogatja a nyilvános álnév beállítását." + +msgid "This protocol does not support fetching the public alias." +msgstr "Ez a protokoll nem támogatja a nyilvános álnév lekérését." + msgid "Unknown" msgstr "Ismeretlen" @@ -1944,9 +1948,8 @@ msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n" msgstr "%s nem szabályos fájl. A felülírása gyáva módon visszautasítva.\n" -#, fuzzy msgid "File is not readable." -msgstr "A könyvtár nem írható." +msgstr "A fájl nem olvasható." #, c-format msgid "%s wants to send you %s (%s)" @@ -3794,14 +3797,6 @@ msgid "execute" msgstr "végrehajtás" -msgid "Server requires TLS/SSL, but no TLS/SSL support was found." -msgstr "" -"A kiszolgáló megköveteli a TLS/SSL használatát, de ezek támogatása nem " -"található." - -msgid "You require encryption, but no TLS/SSL support was found." -msgstr "Megköveteli a titkosítást, de a TLS/SSL támogatás nem található." - msgid "Server requires plaintext authentication over an unencrypted stream" msgstr "" "A kiszolgáló szöveges hitelesítést követel meg egy nem titkosított csatornán" @@ -3831,7 +3826,7 @@ msgstr "Érvénytelen hívás a kiszolgálótól" msgid "Server thinks authentication is complete, but client does not" -msgstr "" +msgstr "A kiszolgáló szerint a hitelesítés kész, a kliens szerint nem" msgid "SASL authentication failed" msgstr "A SASL hitelesítés meghiúsult" @@ -3840,21 +3835,51 @@ msgid "SASL error: %s" msgstr "SASL hiba: %s" -#, fuzzy +msgid "Invalid Encoding" +msgstr "Érvénytelen kódolás" + +msgid "Unsupported Extension" +msgstr "Nem támogatott kiterjesztés" + +msgid "" +"Unexpected response from the server. This may indicate a possible MITM " +"attack" +msgstr "" +"Váratlan válasz a kiszolgálótól. Ez közbeékelődéses (MITM) támadást jelezhet." + +msgid "" +"The server does support channel binding, but did not appear to advertise " +"it. This indicates a likely MITM attack" +msgstr "" +"A kiszolgáló támogatja a csatornakapcsolást, de nem hirdeti ezt. Ez " +"közbeékelődéses (MITM) támadást jelezhet." + +msgid "Server does not support channel binding" +msgstr "A kiszolgáló nem támogatja a csatornakapcsolást" + +msgid "Unsupported channel binding method" +msgstr "Nem támogatott csatornakapcsolási módszer" + +msgid "User not found" +msgstr "A felhasználó nem található" + +msgid "Invalid Username Encoding" +msgstr "Érvénytelen felhasználónév-kódolás" + +msgid "Resource Constraint" +msgstr "Erőforrás-megszorítás" + msgid "Unable to canonicalize username" -msgstr "A beállítás sikertelen" - -#, fuzzy +msgstr "A felhasználónév kanonizálása sikertelen" + msgid "Unable to canonicalize password" -msgstr "Nem nyitható meg figyelőport." - -#, fuzzy +msgstr "A jelszó kanonizálása sikertelen" + msgid "Malicious challenge from server" -msgstr "Érvénytelen hívás a kiszolgálótól" - -#, fuzzy +msgstr "Rosszindulatú hívás a kiszolgálótól" + msgid "Unexpected response from server" -msgstr "Váratlan HTTP válasz érkezett a kiszolgálótól" +msgstr "Váratlan válasz a kiszolgálótól" msgid "The BOSH connection manager terminated your session." msgstr "A BOSH kapcsolatkezelő megszakította a munkamenetét." @@ -3921,6 +3946,11 @@ msgid "Organization Unit" msgstr "Szervezeti egység" +#. title +#. optional information +msgid "Job Title" +msgstr "Beosztás" + msgid "Role" msgstr "Funkció" @@ -3956,9 +3986,8 @@ msgid "Resource" msgstr "Erőforrás" -#, fuzzy msgid "Uptime" -msgstr "Frissítés" +msgstr "Működési idő" msgid "Logged Off" msgstr "Kijelentkezett" @@ -4142,12 +4171,23 @@ msgid "Roles:" msgstr "Szerepek:" +msgid "Server requires TLS/SSL, but no TLS/SSL support was found." +msgstr "" +"A kiszolgáló megköveteli a TLS/SSL használatát, de ezek támogatása nem " +"található." + +msgid "You require encryption, but no TLS/SSL support was found." +msgstr "Megköveteli a titkosítást, de a TLS/SSL támogatás nem található." + msgid "Ping timed out" msgstr "A ping túllépte az időkorlátot" msgid "Invalid XMPP ID" msgstr "Érvénytelen XMPP azonosító" +msgid "Invalid XMPP ID. Username portion must be set." +msgstr "Érvénytelen XMPP azonosító. A felhasználónév részt be kell állítani." + msgid "Invalid XMPP ID. Domain must be set." msgstr "Érvénytelen XMPP azonosító. A tartományt be kell állítani." @@ -4280,14 +4320,18 @@ msgid "Allow Buzz" msgstr "Csörgetés engedélyezése" -#, fuzzy msgid "Mood Name" -msgstr "Középső név" - -#, fuzzy +msgstr "Hangulatnév" + msgid "Mood Comment" -msgstr "Partnermegjegyzés" - +msgstr "Hangulatmegjegyzés" + +#. primitive +#. ID +#. name - use default +#. saveable +#. should be user_settable some day +#. independent msgid "Tune Artist" msgstr "Dal előadója" @@ -4458,9 +4502,6 @@ msgid "Remote Connection Failed" msgstr "Távoli kapcsolat sikertelen" -msgid "Resource Constraint" -msgstr "Erőforrás-megszorítás" - msgid "Restricted XML" msgstr "Korlátozott XML" @@ -4579,9 +4620,8 @@ msgid "Initiate Media" msgstr "Multimédiás kapcsolat indítása" -#, fuzzy msgid "Account does not support PEP, can't set mood" -msgstr "Ez a protokoll nem támogatja a csevegőszobákat." +msgstr "A fiók nem támogatja a PEP-t, nem állítható be a hangulat" msgid "config: Configure a chat room." msgstr "config: Csevegőszoba beállítása." @@ -4638,9 +4678,8 @@ msgid "buzz: Buzz a user to get their attention" msgstr "buzz: Felhasználó megcsörgetése figyelemfelhívási céllal" -#, fuzzy msgid "mood: Set current user mood" -msgstr "Megfelelő felhasználó kiválasztása" +msgstr "mood: Felhasználó aktuális hangulatának beállítása" msgid "Extended Away" msgstr "Nem vagyok a gépnél" @@ -4718,18 +4757,17 @@ msgid "(Code %s)" msgstr "(%s kód)" -#, fuzzy msgid "A custom smiley in the message is too large to send." -msgstr "Nem küldhető üzenet: az üzenet túl nagy." +msgstr "Az üzenetben lévő egyéni hangulatjel túl nagy az elküldéshez." msgid "XMPP stream header missing" -msgstr "" +msgstr "Az XMPP adatfolyamfejléc hiányzik" msgid "XMPP Version Mismatch" -msgstr "" +msgstr "XMPP verzióeltérés" msgid "XMPP stream missing ID" -msgstr "" +msgstr "Az XMPP adatfolyam-azonosító hiányzik" msgid "XML Parse error" msgstr "XML elemzési hiba" @@ -4808,32 +4846,27 @@ msgid "Please select the resource of %s to which you would like to send a file" msgstr "Válassza ki %s azon erőforrását, ahová fájlt kíván küldeni" -#, fuzzy msgid "Afraid" -msgstr "arab" - -#, fuzzy +msgstr "Félő" + msgid "Amazed" -msgstr "Megszégyenült" - -#, fuzzy +msgstr "Lenyűgözött" + msgid "Amorous" -msgstr "Ragyogó" +msgstr "Szerelmes" #. 1 msgid "Angry" msgstr "Dühös" -#, fuzzy msgid "Annoyed" -msgstr "Kitiltva" +msgstr "Ideges" msgid "Anxious" msgstr "Nyugtalan" -#, fuzzy msgid "Aroused" -msgstr "Ezt küldi" +msgstr "Izgatott" msgid "Ashamed" msgstr "Megszégyenült" @@ -4841,156 +4874,129 @@ msgid "Bored" msgstr "Unott" -#, fuzzy msgid "Brave" -msgstr "Mentés" - -#, fuzzy +msgstr "Bátor" + msgid "Calm" -msgstr "Tartomány" - -#, fuzzy +msgstr "Nyugodt" + msgid "Cautious" -msgstr "Csevegések" - -#, fuzzy +msgstr "Óvatos" + msgid "Cold" -msgstr "Félkövér" - -#, fuzzy +msgstr "Higgadt" + msgid "Confident" -msgstr "Ütközés" - -#, fuzzy +msgstr "Magabiztos" + msgid "Confused" -msgstr "Folytatás" - -#, fuzzy +msgstr "Zavart" + msgid "Contemplative" -msgstr "Partner" - -#, fuzzy +msgstr "Elmélkedő" + msgid "Contented" -msgstr "Kapcsolódva" - -#, fuzzy +msgstr "Elégedett" + msgid "Cranky" -msgstr "Cég" +msgstr "Bizonytalan" msgid "Crazy" -msgstr "" - -#, fuzzy +msgstr "Őrült" + msgid "Creative" -msgstr "Létrehozás" - -#, fuzzy +msgstr "Kreatív" + msgid "Curious" -msgstr "Ragyogó" - -#, fuzzy +msgstr "Kíváncsi" + msgid "Dejected" -msgstr "Visszautasítva" - -#, fuzzy +msgstr "Lehangolt" + msgid "Depressed" -msgstr "Törölve" - -#, fuzzy +msgstr "Depis" + msgid "Disappointed" -msgstr "Kapcsolat bontva." +msgstr "Kiábrándult" msgid "Disgusted" -msgstr "" - -#, fuzzy +msgstr "Undorodó" + msgid "Dismayed" -msgstr "Tiltva" - -#, fuzzy +msgstr "Rémült" + msgid "Distracted" -msgstr "Leválasztott" +msgstr "Megzavart" msgid "Embarrassed" -msgstr "" - -#, fuzzy +msgstr "Feszélyezett" + msgid "Envious" -msgstr "Nyugtalan" +msgstr "Irigy" #. 2 msgid "Excited" msgstr "Érdeklődő" -#, fuzzy msgid "Flirtatious" -msgstr "Ragyogó" - -#, fuzzy +msgstr "Flörtölős" + msgid "Frustrated" -msgstr "Utónév" +msgstr "Frusztrált" msgid "Grateful" -msgstr "" - -#, fuzzy +msgstr "Hálás" + msgid "Grieving" -msgstr "Lekérés…" +msgstr "Szomorkodó" #. 3 msgid "Grumpy" msgstr "Rosszkedvű" -#, fuzzy msgid "Guilty" -msgstr "Város" +msgstr "Bűnös" #. 4 msgid "Happy" msgstr "Boldog" msgid "Hopeful" -msgstr "" +msgstr "Reménykedő" #. 8 msgid "Hot" msgstr "Forró" msgid "Humbled" -msgstr "" +msgstr "Megalázkodó" msgid "Humiliated" -msgstr "" - -#, fuzzy +msgstr "Megszégyenült" + msgid "Hungry" -msgstr "Dühös" - -#, fuzzy +msgstr "Éhes" + msgid "Hurt" -msgstr "Humor" +msgstr "Megbántott" msgid "Impressed" -msgstr "" - -#, fuzzy +msgstr "Elbűvölt" + msgid "In awe" -msgstr "Szerelmes" +msgstr "Megijedt" msgid "In love" msgstr "Szerelmes" -#, fuzzy msgid "Indignant" -msgstr "indonéz" - -#, fuzzy +msgstr "Ingerült" + msgid "Interested" -msgstr "Érdeklődési kör" - -#, fuzzy +msgstr "Érdeklődő" + msgid "Intoxicated" -msgstr "Meghívva" +msgstr "Részeg" #. 6 msgid "Invincible" @@ -4999,83 +5005,69 @@ msgid "Jealous" msgstr "Féltékeny" -#, fuzzy msgid "Lonely" -msgstr "Majom" - -#, fuzzy +msgstr "Magányos" + msgid "Lost" -msgstr "Leghangosabb" +msgstr "Elveszett" msgid "Lucky" -msgstr "" - -#, fuzzy +msgstr "Szerencsés" + msgid "Mean" -msgstr "német" - -#, fuzzy +msgstr "Aljas" + msgid "Moody" -msgstr "Hangulat" +msgstr "Kedvetlen" msgid "Nervous" -msgstr "" - -#, fuzzy +msgstr "Ideges" + msgid "Neutral" -msgstr "Részletek" - -#, fuzzy +msgstr "Semleges" + msgid "Offended" -msgstr "Kilépett" +msgstr "Megsértődött" msgid "Outraged" -msgstr "" - -#, fuzzy +msgstr "Felháborodott" + msgid "Playful" -msgstr "Lejátszás" - -#, fuzzy +msgstr "Játékos" + msgid "Proud" -msgstr "Hangos" - -#, fuzzy +msgstr "Büszke" + msgid "Relaxed" -msgstr "Valódi név" - -#, fuzzy +msgstr "Nyugodt" + msgid "Relieved" -msgstr "Fogadott" - -#, fuzzy +msgstr "Megkönnyebbült" + msgid "Remorseful" -msgstr "Eltávolítás" - -#, fuzzy +msgstr "Bűnbánó" + msgid "Restless" -msgstr "Regisztráció" +msgstr "Nyugtalan" #. 7 msgid "Sad" msgstr "Szomorú" msgid "Sarcastic" -msgstr "" +msgstr "Szarkasztikus" msgid "Satisfied" -msgstr "" - -#, fuzzy +msgstr "Elégedett" + msgid "Serious" -msgstr "Ragyogó" - -#, fuzzy +msgstr "Komoly" + msgid "Shocked" -msgstr "Tiltott" +msgstr "Megdöbbent" msgid "Shy" -msgstr "" +msgstr "Félénk" #. 9 msgid "Sick" @@ -5087,41 +5079,35 @@ msgstr "Álmos" msgid "Spontaneous" -msgstr "" - -#, fuzzy +msgstr "Spontán" + msgid "Stressed" -msgstr "Sebesség" - -#, fuzzy +msgstr "Feszült" + msgid "Strong" -msgstr "Dal" +msgstr "Erős" msgid "Surprised" -msgstr "" +msgstr "Meglepett" msgid "Thankful" -msgstr "" +msgstr "Hálás" msgid "Thirsty" -msgstr "" - -#, fuzzy +msgstr "Szomjas" + msgid "Tired" -msgstr "Tűz" - -#, fuzzy +msgstr "Fáradt" + msgid "Undefined" -msgstr "Aláhúzott" +msgstr "Nem definiált" # fixme: valami ilyesmi... -#, fuzzy msgid "Weak" -msgstr "Lecsapás" - -#, fuzzy +msgstr "Gyenge" + msgid "Worried" -msgstr "Unott" +msgstr "Aggódó" msgid "Set User Nickname" msgstr "Felhasználói becenév beállítása" @@ -5398,9 +5384,9 @@ msgid "Your new MSN friendly name is too long." msgstr "Az új MSN beceneve túl hosszú." -#, fuzzy, c-format +#, c-format msgid "Set friendly name for %s." -msgstr "Becenév beállítása." +msgstr "Becenév beállítása %s számára." msgid "Set your friendly name." msgstr "Becenév beállítása." @@ -5486,18 +5472,6 @@ msgid "Out to Lunch" msgstr "Ebédelni mentem" -#. primitive -#. ID -#. name - use default -#. saveable -#. should be user_settable some day -#. independent -msgid "Artist" -msgstr "Előadó" - -msgid "Album" -msgstr "Album" - msgid "Game Title" msgstr "Játék neve" @@ -5648,9 +5622,6 @@ msgid "Work" msgstr "Munka" -msgid "Job Title" -msgstr "Beosztás" - msgid "Company" msgstr "Cég" @@ -6651,9 +6622,6 @@ msgid "Incorrect password" msgstr "Hibás jelszó" -msgid "User not found" -msgstr "A felhasználó nem található" - msgid "Account has been disabled" msgstr "A fiók le lett tiltva" @@ -6881,13 +6849,13 @@ msgid "Server port" msgstr "Kiszolgáló portja" -#, fuzzy, c-format +#, c-format msgid "Received unexpected response from %s: %s" -msgstr "Váratlan válasz érkezett innen: %s" +msgstr "Váratlan válasz érkezett a következőtől: %s: %s" #, c-format msgid "Received unexpected response from %s" -msgstr "Váratlan válasz érkezett innen: %s" +msgstr "Váratlan válasz érkezett a következőtől: %s" msgid "" "You have been connecting and disconnecting too frequently. Wait ten minutes " @@ -6906,10 +6874,16 @@ "Server requested that you fill out a CAPTCHA in order to sign in, but this " "client does not currently support CAPTCHAs." msgstr "" +"A kiszolgáló a bejelentkezéshez CAPTCHA kitöltését kérte, de ez a kliens " +"jelenleg nem támogatja ezt." msgid "AOL does not allow your screen name to authenticate here" msgstr "Az AOL nem engedélyezi ezen megjelenő név hitelesítését" +#, c-format +msgid "Error requesting %s" +msgstr "Hiba %s lekérésekor" + msgid "Could not join chat room" msgstr "Nem sikerült kapcsolódni a csevegőszobához" @@ -6917,104 +6891,88 @@ msgstr "Érvénytelen csevegőszobanév" msgid "Thinking" -msgstr "" - -#, fuzzy +msgstr "Gondolkozik" + msgid "Shopping" -msgstr "Abbahagyja a gépelést" - -#, fuzzy +msgstr "Vásárol" + msgid "Questioning" -msgstr "Kérdező ablak" - -#, fuzzy +msgstr "Kérdez" + msgid "Eating" -msgstr "Lapozás" - -#, fuzzy +msgstr "Eszik" + msgid "Watching a movie" -msgstr "Játszik" +msgstr "Filmet néz" msgid "Typing" msgstr "Gépel" -#, fuzzy msgid "At the office" -msgstr "Nem vagyok a munkahelyemen" +msgstr "Munkában" msgid "Taking a bath" -msgstr "" +msgstr "Fürdik" msgid "Watching TV" -msgstr "" - -#, fuzzy +msgstr "TV-t néz" + msgid "Having fun" -msgstr "Lerakás" - -#, fuzzy +msgstr "Szórakozik" + msgid "Sleeping" -msgstr "Álmos" +msgstr "Alszik" msgid "Using a PDA" -msgstr "" - -#, fuzzy +msgstr "PDA-t használ" + msgid "Meeting friends" -msgstr "IM barátok" - -#, fuzzy +msgstr "Barátokkal találkozik" + msgid "On the phone" -msgstr "Telefonálok" - -#, fuzzy +msgstr "Telefonál" + msgid "Surfing" -msgstr "Ismétlődő" +msgstr "Szörfözik" #. "I am mobile." / "John is mobile." msgid "Mobile" msgstr "Mobil" msgid "Searching the web" -msgstr "" +msgstr "Keres a weben" msgid "At a party" -msgstr "" +msgstr "Bulin" msgid "Having Coffee" -msgstr "" +msgstr "Kávézik" #. Playing video games -#, fuzzy msgid "Gaming" -msgstr "Ikrek" +msgstr "Játszik" msgid "Browsing the web" -msgstr "" - -#, fuzzy +msgstr "Webet böngész" + msgid "Smoking" -msgstr "Dal" - -#, fuzzy +msgstr "Dohányzik" + msgid "Writing" -msgstr "Dolgozik" +msgstr "Ír" #. Drinking [Alcohol] -#, fuzzy msgid "Drinking" -msgstr "Dolgozik" +msgstr "Iszik" msgid "Listening to music" msgstr "Zenét hallgat" -#, fuzzy msgid "Studying" -msgstr "Küldés" - -#, fuzzy +msgstr "Tanul" + msgid "In the restroom" -msgstr "Érdeklődési kör" +msgstr "Mellékhelyiségben" msgid "Received invalid data on connection with server" msgstr "Érvénytelen adatok érkeztek a kapcsolaton a kiszolgálótól" @@ -7228,7 +7186,7 @@ msgstr "Játékok" msgid "ICQ Xtraz" -msgstr "" +msgstr "ICQ Xtraz" msgid "Add-Ins" msgstr "Kiegészítők" @@ -7296,25 +7254,20 @@ msgid "Invisible" msgstr "Láthatatlan" -#, fuzzy msgid "Evil" -msgstr "E-mail" - -#, fuzzy +msgstr "Gonosz" + msgid "Depression" -msgstr "Foglalkozás" - -#, fuzzy +msgstr "Depresszió" + msgid "At home" -msgstr "A névjegyem" - -#, fuzzy +msgstr "Otthon" + msgid "At work" -msgstr "Hálózat" - -#, fuzzy +msgstr "Munkában" + msgid "At lunch" -msgstr "Ebédelni mentem" +msgstr "Ebédel" msgid "IP Address" msgstr "IP cím" @@ -7846,9 +7799,8 @@ msgid "iTunes Music Store Link" msgstr "iTunes zenebolt hivatkozás" -#, fuzzy msgid "Lunch" -msgstr "Finch" +msgstr "Ebéd" #, c-format msgid "Buddy Comment for %s" @@ -7881,9 +7833,8 @@ msgid "Edit Buddy Comment" msgstr "Partnermegjegyzés szerkesztése" -#, fuzzy msgid "Get X-Status Msg" -msgstr "Állapotüzenet lekérése" +msgstr "X-állapotüzenet lekérése" msgid "End Direct IM Session" msgstr "A közvetlen kapcsolat befejezése" @@ -8294,6 +8245,10 @@ msgid "Admin" msgstr "Rendszergazda" +#. XXX: Should this be "Topic"? +msgid "Room Title" +msgstr "Szobanév" + msgid "Notice" msgstr "Megjegyzés" @@ -10216,9 +10171,6 @@ msgid "Yahoo! Protocol Plugin" msgstr "Yahoo! protokollbővítmény" -msgid "Pager server" -msgstr "Személyhívó kiszolgáló" - msgid "Pager port" msgstr "Személyhívó Port" @@ -10240,12 +10192,6 @@ msgid "Chat room list URL" msgstr "Csevegőszobák listájának URL címe" -msgid "Yahoo Chat server" -msgstr "Yahoo csevegőkiszolgáló" - -msgid "Yahoo Chat port" -msgstr "Yahoo csevegőport" - msgid "Yahoo JAPAN ID..." msgstr "Yahoo Japán azonosító…" @@ -10313,6 +10259,15 @@ "A fiók zárolva: Ismeretlen ok. A Yahoo! weboldalára bejelentkezés talán " "megoldhatja ezt a problémát." +#. indicates a lock due to logging in too frequently +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 "" +"A fiók zárolva: túl gyakran jelentkezett be. Várjon pár percet az " +"újracsatlakozás előtt. A Yahoo! weboldalára bejelentkezés talán megoldhatja " +"ezt a problémát." + #. username or password missing msgid "Username or password missing" msgstr "A felhasználónév vagy jelszó hiányzik" @@ -10393,6 +10348,16 @@ msgid "Unable to establish a connection with %s: %s" msgstr "Nem hozható létre kapcsolat a következővel: %s: %s" +msgid "Unable to connect: The server returned an empty response." +msgstr "Nem lehet kapcsolódni: a kiszolgáló üres választ adott vissza." + +msgid "" +"Unable to connect: The server's response did not contain the necessary " +"information" +msgstr "" +"Nem lehet kapcsolódni: a kiszolgáló válasza nem tartalmazta a szükséges " +"információkat" + msgid "Not at Home" msgstr "Nem vagyok itthon" @@ -10777,6 +10742,10 @@ #. * #. * 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. +#. msgid "_Accept" msgstr "Elfog_adás" @@ -10843,9 +10812,8 @@ msgid "Extended away" msgstr "Bővített távollét" -#, fuzzy msgid "Feeling" -msgstr "Fogadás" +msgstr "Hangulat" #, c-format msgid "%s (%s) changed status from %s to %s" @@ -11016,12 +10984,6 @@ msgid "Pidgin Internet Messenger" msgstr "Pidgin üzenetküldő" -msgid "Orientation" -msgstr "Tájolás" - -msgid "The orientation of the tray." -msgstr "A tálca tájolása." - #. Build the login options frame. msgid "Login Options" msgstr "Bejelentkezés beállításai" @@ -11392,13 +11354,11 @@ msgid "Unknown node type" msgstr "Ismeretlen csomóponttípus" -#, fuzzy msgid "Please select your mood from the list" -msgstr "Válassza ki a hangulatát a listából." - -#, fuzzy +msgstr "Válassza ki a hangulatát a listából" + msgid "Message (optional)" -msgstr "Álnév (elhagyható)" +msgstr "Üzenet (elhagyható)" msgid "Edit User Mood" msgstr "Felhasználói hangulat szerkesztése" @@ -11481,9 +11441,8 @@ msgid "/Tools/Pr_ivacy" msgstr "/Eszközök/Ma_gánszféra" -#, fuzzy msgid "/Tools/Set _Mood" -msgstr "/Eszközök/_Rendszernapló" +msgstr "/Eszközök/Ha_ngulat beállítása" msgid "/Tools/_File Transfers" msgstr "/Eszközök/_Fájlátvitelek" @@ -11504,20 +11463,17 @@ msgid "/Help/Online _Help" msgstr "/Súgó/Online _súgó" -#, fuzzy msgid "/Help/_Build Information" -msgstr "Partnerinformáció" +msgstr "/Súgó/Build _információk" msgid "/Help/_Debug Window" msgstr "/Súgó/_Hibakereső ablak" -#, fuzzy msgid "/Help/De_veloper Information" -msgstr "Kiszolgálóinformációk" - -#, fuzzy +msgstr "/Súgó/_Fejlesztői információk" + msgid "/Help/_Translator Information" -msgstr "Személyes információk" +msgstr "/Súgó/F_ordítóinformációk" msgid "/Help/_About" msgstr "/Súgó/_Névjegy" @@ -11746,9 +11702,8 @@ msgid "_Edit Account" msgstr "_Fiók szerkesztése" -#, fuzzy msgid "Set _Mood..." -msgstr "Hangulat beállítása…" +msgstr "Ha_ngulat beállítása…" msgid "No actions available" msgstr "Nem állnak rendelkezésre műveletek" @@ -11870,9 +11825,8 @@ msgid "/Conversation/Se_nd File..." msgstr "/Társalgás/Fájl kül_dése…" -#, fuzzy msgid "/Conversation/Get _Attention" -msgstr "/Társalgás/Információ lekérése" +msgstr "/Társalgás/_Figyelem kérése" msgid "/Conversation/Add Buddy _Pounce..." msgstr "/Társalgás/_Partnerfigyelmeztetés felvétele…" @@ -11955,9 +11909,8 @@ msgid "/Conversation/Send File..." msgstr "/Társalgás/Fájl küldése…" -#, fuzzy msgid "/Conversation/Get Attention" -msgstr "/Társalgás/Információ lekérése" +msgstr "/Társalgás/Figyelem kérése" msgid "/Conversation/Add Buddy Pounce..." msgstr "/Társalgás/Partnerfigyelmeztetés felvétele…" @@ -12023,13 +11976,11 @@ msgid "0 people in room" msgstr "0 személy tartózkodik a szobában" -#, fuzzy msgid "Close Find bar" -msgstr "Ezen lap bezárása" - -#, fuzzy +msgstr "Keresősáv bezárása" + msgid "Find:" -msgstr "Keresés" +msgstr "Keresés:" #, c-format msgid "%d person in room" @@ -12202,6 +12153,9 @@ msgid "Bengali" msgstr "bengáli" +msgid "Bengali-India" +msgstr "Indiai bengáli" + msgid "Bosnian" msgstr "bosnyák" @@ -12319,9 +12273,8 @@ msgid "Mongolian" msgstr "Mongol" -#, fuzzy msgid "Marathi" -msgstr "gudzsaráti" +msgstr "Maráthi" msgid "Malay" msgstr "Maláj" @@ -12341,9 +12294,8 @@ msgid "Occitan" msgstr "Okcitán" -#, fuzzy msgid "Oriya" -msgstr "Opera" +msgstr "Orija" msgid "Punjabi" msgstr "Pandzsábi" @@ -12426,7 +12378,7 @@ msgid "Lithuanian" msgstr "litván" -#, fuzzy, c-format +#, 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 " @@ -12435,15 +12387,13 @@ "copyrighted by its contributors, a list of whom is also distributed with %" "s. There is no warranty for %s.

" msgstr "" -"A %s egy libpurple alapú moduláris üzenetküldő kliens AIM, MSN, Yahoo!, " -"XMPP, ICQ, IRC, SILC, SIP/SIMPLE, Novell GroupWise, Lotus Sametime, Bonjour, " -"Zephyr, MySpaceIM, Gadu-Gadu és QQ protokollok egyidejű használatának " -"lehetőségével. A Gtk+ használatával készül és GPL licenc alatt terjeszthető." -"

A programot terjesztheti és/vagy módosíthatja a GPL második (vagy " -"későbbi) változatában foglaltak alapján. A GPL egy példánya megtalálható a %" -"s programmal terjesztett „COPYING” fájlban. A %s szerzői jogait a " -"közreműködők birtokolják, ezek teljes listája megtalálható a COPYRIGHT " -"fájlban. A programra nem biztosítunk garanciát.

" +"A %s egy libpurple alapú moduláris üzenetküldő kliens, amely egyszerre több " +"üzenetküldő szolgáltatáshoz is képes csatlakozni. A %s GTK+ használatával, C " +"nyelven készül. A %s programot terjesztheti és/vagy módosíthatja a GPL " +"második (vagy későbbi) változatában foglaltak alapján. A a %s program " +"tartalmazza GPL egy példányát. A %s szerzői jogait a közreműködők " +"birtokolják, teljes listájukat a %s forrása tartalmazza. A %s programra nem " +"biztosítunk garanciát.

" #, c-format msgid "" @@ -12452,8 +12402,12 @@ "Channel: #pidgin on irc.freenode.net
\tXMPP MUC: devel@conference.pidgin." "im

" msgstr "" - -#, fuzzy, c-format +"Hasznos erőforrások
\tWeboldal
\tGyakran feltett kérdések
\tIRC-" +"csatorna: #pidgin az irc.freenode.net hálózaton
\tXMPP konferenciaszoba: " +"devel@conference.pidgin.im

" + +#, c-format msgid "" "Help from other Pidgin users is available by " "e-mailing support@pidgin.im
" msgstr "" -"Segítség más Pidgin felhasználóktól: support@pidgin.im
Ez egy nyilvános levelezőlista! (archívum)
Nem tudunk segíteni külső protokollokkal vagy bővítményekkel " -"kapcsolatban!
Ez a lista angol nyelvű. Írhat más nyelven is, de a " -"válaszok nem biztos, hogy túl hasznosak lesznek.

" +"Elérhető más Pidgin felhasználók segítsége a " +"
support@pidgin.im levelezőlistán
Ez egy nyilvános levelezőlista! (archívum)
Nem tudunk segíteni külső " +"protokollokkal vagy bővítményekkel kapcsolatban!
Ez a lista angol " +"nyelvű. Írhat más nyelven is, de a válaszok nem biztos, hogy túl hasznosak " +"lesznek.
" #, c-format msgid "About %s" msgstr "A %s névjegye" -#, fuzzy msgid "Build Information" -msgstr "Partnerinformáció" +msgstr "Build információk" #. End of not to be translated section -#, fuzzy, c-format +#, c-format msgid "%s Build Information" -msgstr "Partnerinformáció" +msgstr "%s build információi" msgid "Current Developers" msgstr "Jelenlegi fejlesztők" @@ -12495,9 +12449,9 @@ msgid "Retired Crazy Patch Writers" msgstr "Visszavonult őrült patch szerzők" -#, fuzzy, c-format +#, c-format msgid "%s Developer Information" -msgstr "Kiszolgálóinformációk" +msgstr "%s fejlesztői információi" msgid "Current Translators" msgstr "Jelenlegi fordítók" @@ -12505,9 +12459,9 @@ msgid "Past Translators" msgstr "Korábbi fordítók" -#, fuzzy, c-format +#, c-format msgid "%s Translator Information" -msgstr "További információk" +msgstr "%s fordítóinformációi" msgid "_Name" msgstr "_Név" @@ -12914,9 +12868,8 @@ msgid "Insert Smiley" msgstr "Hangulatjel beszúrása" -#, fuzzy msgid "Send Attention" -msgstr "Küldés gomb" +msgstr "Figyelemkérés küldése" msgid "_Bold" msgstr "_Félkövér" @@ -12964,7 +12917,7 @@ msgstr "M_osolyt!" msgid "_Attention!" -msgstr "" +msgstr "_Figyelem!" msgid "Log Deletion Failed" msgstr "Napló törlése meghiúsult" @@ -13541,7 +13494,7 @@ msgstr "Konqueror" msgid "Desktop Default" -msgstr "Munkaasztal alapértelmezése" +msgstr "Asztali környezet alapértelmezése" msgid "GNOME Default" msgstr "GNOME alapértelmezés" @@ -13901,9 +13854,8 @@ msgid "Custom Smiley Manager" msgstr "Egyénihangulatjel-kezelő" -#, fuzzy msgid "Attention received" -msgstr "Aktiválás szükséges" +msgstr "Figyelemkérés érkezett" msgid "Select Buddy Icon" msgstr "Válasszon partnerikont" @@ -14047,9 +13999,8 @@ msgid "_Save File" msgstr "Fájl m_entése" -#, fuzzy msgid "Do you really want to clear?" -msgstr "Biztos, hogy törölni akarja %s fiókot?" +msgstr "Biztos, hogy törölni akarja?" msgid "Select color" msgstr "Szín kiválasztása" @@ -15048,8 +14999,17 @@ msgstr "Időpecsét formátumbeállításai" #, c-format -msgid "_Force 24-hour time format" -msgstr "24 órás i_dőformátum kényszerítése" +msgid "_Force timestamp format:" +msgstr "I_dőbélyeg-formátum kényszerítése:" + +msgid "Use system default" +msgstr "Rendszer alapértelmezésének használata" + +msgid "12 hour time format" +msgstr "12 órás időformátum" + +msgid "24 hour time format" +msgstr "24 órás időformátum" msgid "Show dates in..." msgstr "Dátumok megjelenítése…" @@ -15249,141 +15209,7 @@ msgstr "Nyers XMPP mondatok küldése és fogadása." #. * description -#, fuzzy msgid "This plugin is useful for debugging XMPP servers or clients." msgstr "" "Ez a bővítmény XMPP kiszolgálókban vagy kliensekben végzett hibakereséshez " "hasznos." - -#~ msgid "Error creating conference." -#~ msgstr "Hiba a konferencia létrehozásakor." - -#~ msgid "Unable to bind socket to port: %s" -#~ msgstr "Nem köthető a foglalat a porthoz: %s" - -#~ msgid "Unable to listen on socket: %s" -#~ msgstr "Nem lehet figyelni a foglalaton: %s" - -#~ msgid "" -#~ "Unable to find alternative XMPP connection methods after failing to " -#~ "connect directly." -#~ msgstr "" -#~ "Nem található alternatív XMPP kapcsolódási módszer, miután a közvetlen " -#~ "kapcsolódás meghiúsult." - -#~ msgid "%s just sent you a Nudge!" -#~ msgstr "%s megbökte!" - -#~ msgid "Friendly name changes too rapidly" -#~ msgstr "A felhasználónév túl gyorsan változik" - -#~ msgid "This Hotmail account may not be active." -#~ msgstr "Lehetséges, hogy ez a Hotmail fiók nem aktív." - -#~ msgid "Profile URL" -#~ msgstr "Profil URL-je" - -#~ msgid "MSN Protocol Plugin" -#~ msgstr "MSN protokollbővítmény" - -#~ msgid "%s is not a valid group." -#~ msgstr "%s érvénytelen csoport." - -#~ msgid "Unknown error." -#~ msgstr "Ismeretlen hiba." - -#~ msgid "%s on %s (%s)" -#~ msgstr "%s ezen: %s (%s)" - -#~ msgid "Unable to add user on %s (%s)" -#~ msgstr "Nem lehet felhasználót felvenni ehhez: %s (%s)" - -#~ msgid "Unable to block user on %s (%s)" -#~ msgstr "Nem lehet letiltani a felhasználót ezen: %s (%s)" - -#~ msgid "Unable to permit user on %s (%s)" -#~ msgstr "Nem lehet engedélyezni a felhasználót ezen: %s (%s)" - -#~ msgid "%s could not be added because your buddy list is full." -#~ msgstr "%s nem adható hozzá, mert a partnerlista tele van." - -#~ msgid "%s is not a valid passport account." -#~ msgstr "%s érvénytelen passport fiók." - -#~ msgid "Service Temporarily Unavailable." -#~ msgstr "A szolgáltatás átmenetileg nem érhető el." - -#~ msgid "Unable to rename group" -#~ msgstr "Nem lehet átnevezni a csoportot" - -#~ msgid "Unable to delete group" -#~ msgstr "Nem lehet törölni a csoportot" - -#~ msgid "%s has added you to his or her buddy list." -#~ msgstr "%s felvette Önt a partnerlistájára." - -#~ msgid "%s has removed you from his or her buddy list." -#~ msgstr "%s eltávolította Önt a partnerlistájáról." - -#~ msgid "" -#~ "The last action you attempted could not be performed because you are over " -#~ "the rate limit. Please wait 10 seconds and try again.\n" -#~ msgstr "" -#~ "Az utolsó művelet nem hajtható végre, mert túllépte a sebességkorlátot. " -#~ "Kérem várjon 10 másodpercet és próbálja meg újra.\n" - -#~ msgid "" -#~ "FAQ: http://developer.pidgin.im/wiki/FAQ

" -#~ msgstr "" -#~ "FAQ: http://developer.pidgin.im/wiki/FAQ

" - -#~ msgid "" -#~ "IRC Channel: #pidgin on irc.freenode.net

" -#~ msgstr "" -#~ "IRC csatorna: #pidgin az irc.freenode.net " -#~ "hálózaton

" - -#~ msgid "XMPP MUC: devel@conference.pidgin.im

" -#~ msgstr "" -#~ "XMPP szoba: devel@conference.pidgin.im

" - -#~ msgid "Debugging Information" -#~ msgstr "Hibakeresési információk" - -#~ msgid "" -#~ "Unrecognized file type\n" -#~ "\n" -#~ "Defaulting to PNG." -#~ msgstr "" -#~ "Ismeretlen fájltípus\n" -#~ "\n" -#~ "Alapértelmezett PNG használata." - -#~ msgid "" -#~ "Error saving image\n" -#~ "\n" -#~ "%s" -#~ msgstr "" -#~ "Hiba a kép mentése közben\n" -#~ "\n" -#~ "%s" - -#~ msgid "Failed to open file '%s': %s" -#~ msgstr "Nem sikerült megnyitni a(z) „%s” fájlt: %s" - -#~ msgid "" -#~ "Failed to load image '%s': reason not known, probably a corrupt image file" -#~ msgstr "" -#~ "A(z) „%s” kép betöltése sikertelen: az ok nem ismert, valószínűleg sérült " -#~ "a képfájl" - -#~ msgid "Insert an stanza." -#~ msgstr " mondat beszúrása." - -#~ msgid "Insert a stanza." -#~ msgstr " mondat beszúrása." - -#~ msgid "Insert a stanza." -#~ msgstr " mondat beszúrása."