# HG changeset patch # User Elliott Sales de Andrade # Date 1246858050 0 # Node ID 14131ba5a07c97cadc9e2bac20d85e7f8ad5df35 # Parent a6d84d9de605301675d30368003dfcecff6ac791# Parent b41b69e8b341ead4fe594a1009040293cf49d27f merge of '51d199ba5dd8a81f6276f19421c8f7e0158dcb98' and 'ac87c285c7056f86005dc157b9870745de471f74' diff -r a6d84d9de605 -r 14131ba5a07c ChangeLog --- a/ChangeLog Mon Jul 06 04:37:06 2009 +0000 +++ b/ChangeLog Mon Jul 06 05:27:30 2009 +0000 @@ -24,6 +24,10 @@ PURPLE_GNUTLS_DEBUG environment variable, which is an integer between 0 and 9 (higher is more verbose). Higher values may reveal sensitive information. + * PURPLE_VERBOSE_DEBUG environment variable. Currently this is an "on" or + "off" variable. Set it to any value to turn it on and unset it to turn + it off. This will optionally be used to only show less useful debug + information on an as-needed basis. * Add support for receiving handwritten (ink) messages on MSN. Gadu-Gadu: @@ -73,6 +77,9 @@ client supports it). * Google Talk mail notifications should now work for people for whom they inexplicably did not. (Thanks to yukam for determining the reason) + * New XMPP and Google Talk accounts require SSL by default. + * Display kicks (and the reasons given) in chat rooms when an occupant is + kicked. Yahoo: * P2P file transfers. (Sulabh Mahajan) diff -r a6d84d9de605 -r 14131ba5a07c ChangeLog.API --- a/ChangeLog.API Mon Jul 06 04:37:06 2009 +0000 +++ b/ChangeLog.API Mon Jul 06 05:27:30 2009 +0000 @@ -30,6 +30,10 @@ * purple_connection_set_protocol_data * purple_contact_destroy * purple_conv_chat_invite_user + * purple_debug_is_unsafe + * purple_debug_is_verbose + * purple_debug_set_unsafe + * purple_debug_set_verbose * purple_global_proxy_set_info * purple_group_destroy * purple_log_get_activity_score @@ -40,6 +44,7 @@ * purple_network_get_stun_ip * purple_network_get_turn_ip * purple_network_remove_port_mapping + * purple_plugins_get_search_paths * purple_proxy_connect_udp * purple_prpl_get_media_caps * purple_prpl_got_account_actions diff -r a6d84d9de605 -r 14131ba5a07c configure.ac --- a/configure.ac Mon Jul 06 04:37:06 2009 +0000 +++ b/configure.ac Mon Jul 06 05:27:30 2009 +0000 @@ -1563,30 +1563,6 @@ AC_MSG_RESULT(no) fi - if test "x$prefix" != "xNONE"; then - prefix=`eval echo $prefix` - PERL_MM_PARAMS="INSTALLDIRS=vendor PREFIX=$prefix" - fi - - AC_ARG_WITH(perl-lib, - [AC_HELP_STRING([--with-perl-lib=[site|vendor|DIR]], - [specify where to install the Perl libraries for pidgin. Default is site.])], - [ - if test "x$withval" = xsite; then - PERL_MM_PARAMS="" - elif test "x$withval" = xvendor; then - if test -z "`$perlpath -v | grep '5\.0'`"; then - PERL_MM_PARAMS="INSTALLDIRS=vendor" - else - PERL_MM_PARAMS="INSTALLDIRS=vendor PREFIX=`perl -e 'use Config; print $Config{prefix}'`" - fi - else - PERL_MM_PARAMS="INSTALLDIRS=vendor PREFIX=$withval" - fi - ]) - - AC_SUBST(PERL_MM_PARAMS) - AC_MSG_CHECKING(for DynaLoader.a) DYNALOADER_A=`echo $PERL_LDFLAGS | $perlpath -pe 's/^(.* )*([[^ ]]*DynaLoader\.a).*/\2/'` diff -r a6d84d9de605 -r 14131ba5a07c doc/notify-signals.dox --- a/doc/notify-signals.dox Mon Jul 06 04:37:06 2009 +0000 +++ b/doc/notify-signals.dox Mon Jul 06 05:27:30 2009 +0000 @@ -30,7 +30,7 @@ const char *url); @endsignalproto @signaldesc - Emitted before email notification is handed to the UI to display. + Emitted before notification of a single email is handed to the UI to display. @param subject Subject of email being notified of. @param from Who the email is from. @param to Who the email is to. diff -r a6d84d9de605 -r 14131ba5a07c libpurple/account.c --- a/libpurple/account.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/account.c Mon Jul 06 05:27:30 2009 +0000 @@ -1132,29 +1132,32 @@ purple_account_connect(PurpleAccount *account) { PurplePlugin *prpl; + const char *password, *username; PurplePluginProtocolInfo *prpl_info; - const char *password; g_return_if_fail(account != NULL); - purple_debug_info("account", "Connecting to account %s\n", - purple_account_get_username(account)); - - if (!purple_account_get_enabled(account, purple_core_get_ui())) + username = purple_account_get_username(account); + + if (!purple_account_get_enabled(account, purple_core_get_ui())) { + purple_debug_info("account", + "Account %s not enabled, not connecting.\n", + username); return; + } prpl = purple_find_prpl(purple_account_get_protocol_id(account)); - if (prpl == NULL) - { + if (prpl == NULL) { gchar *message; - message = g_strdup_printf(_("Missing protocol plugin for %s"), - purple_account_get_username(account)); + message = g_strdup_printf(_("Missing protocol plugin for %s"), username); purple_notify_error(account, _("Connection Error"), message, NULL); g_free(message); return; } + purple_debug_info("account", "Connecting to account %s.\n", username); + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); password = purple_account_get_password(account); if ((password == NULL) && @@ -2810,9 +2813,9 @@ sync_accounts(); } + for (; accounts; accounts = g_list_delete_link(accounts, accounts)) + purple_account_destroy(accounts->data); + purple_signals_disconnect_by_handle(handle); purple_signals_unregister_by_instance(handle); - - for (; accounts; accounts = g_list_delete_link(accounts, accounts)) - purple_account_destroy(accounts->data); } diff -r a6d84d9de605 -r 14131ba5a07c libpurple/buddyicon.h --- a/libpurple/buddyicon.h Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/buddyicon.h Mon Jul 06 05:27:30 2009 +0000 @@ -189,8 +189,6 @@ * takes ownership of and will free. * @param icon_len The length of the icon data. * @param checksum A protocol checksum from the prpl or @c NULL. - * - * @return The buddy icon set, or NULL if no icon was set. */ void purple_buddy_icons_set_for_user(PurpleAccount *account, const char *username, diff -r a6d84d9de605 -r 14131ba5a07c libpurple/cipher.c --- a/libpurple/cipher.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/cipher.c Mon Jul 06 05:27:30 2009 +0000 @@ -61,11 +61,144 @@ #include "signals.h" #include "value.h" +#if GLIB_CHECK_VERSION(2,16,0) +static void +purple_g_checksum_init(PurpleCipherContext *context, GChecksumType type) +{ + GChecksum *checksum; + + checksum = g_checksum_new(type); + purple_cipher_context_set_data(context, checksum); +} + +static void +purple_g_checksum_reset(PurpleCipherContext *context, GChecksumType type) +{ + GChecksum *checksum; + + checksum = purple_cipher_context_get_data(context); + g_return_if_fail(checksum != NULL); + +#if GLIB_CHECK_VERSION(2,18,0) + g_checksum_reset(checksum); +#else + g_checksum_free(checksum); + checksum = g_checksum_new(type); + purple_cipher_context_set_data(context, checksum); +#endif +} + +static void +purple_g_checksum_uninit(PurpleCipherContext *context) +{ + GChecksum *checksum; + + checksum = purple_cipher_context_get_data(context); + g_return_if_fail(checksum != NULL); + + g_checksum_free(checksum); +} + +static void +purple_g_checksum_append(PurpleCipherContext *context, const guchar *data, + gsize len) +{ + GChecksum *checksum; + + checksum = purple_cipher_context_get_data(context); + g_return_if_fail(checksum != NULL); + + while (len >= G_MAXSSIZE) { + g_checksum_update(checksum, data, G_MAXSSIZE); + len -= G_MAXSSIZE; + data += G_MAXSSIZE; + } + + if (len) + g_checksum_update(checksum, data, len); +} + +static gboolean +purple_g_checksum_digest(PurpleCipherContext *context, GChecksumType type, + gsize len, guchar *digest, gsize *out_len) +{ + GChecksum *checksum; + const gssize required_length = g_checksum_type_get_length(type); + + checksum = purple_cipher_context_get_data(context); + + g_return_val_if_fail(len >= required_length, FALSE); + g_return_val_if_fail(checksum != NULL, FALSE); + + g_checksum_get_digest(checksum, digest, &len); + + purple_cipher_context_reset(context, NULL); + + if (out_len) + *out_len = len; + + return TRUE; +} +#endif + + /******************************************************************************* * MD5 ******************************************************************************/ #define MD5_HMAC_BLOCK_SIZE 64 +static size_t +md5_get_block_size(PurpleCipherContext *context) +{ + /* This does not change (in this case) */ + return MD5_HMAC_BLOCK_SIZE; +} + +#if GLIB_CHECK_VERSION(2,16,0) + +static void +md5_init(PurpleCipherContext *context, void *extra) +{ + purple_g_checksum_init(context, G_CHECKSUM_MD5); +} + +static void +md5_reset(PurpleCipherContext *context, void *extra) +{ + purple_g_checksum_reset(context, G_CHECKSUM_MD5); +} + +static gboolean +md5_digest(PurpleCipherContext *context, gsize in_len, guchar digest[16], + size_t *out_len) +{ + return purple_g_checksum_digest(context, G_CHECKSUM_MD5, in_len, + digest, out_len); +} + +static PurpleCipherOps MD5Ops = { + NULL, /* Set Option */ + NULL, /* Get Option */ + md5_init, /* init */ + md5_reset, /* reset */ + purple_g_checksum_uninit, /* uninit */ + NULL, /* set iv */ + purple_g_checksum_append, /* append */ + md5_digest, /* digest */ + NULL, /* encrypt */ + NULL, /* decrypt */ + NULL, /* set salt */ + NULL, /* get salt size */ + NULL, /* set key */ + NULL, /* get key size */ + NULL, /* set batch mode */ + NULL, /* get batch mode */ + md5_get_block_size, /* get block size */ + NULL /* set key with len */ +}; + +#else /* GLIB_CHECK_VERSION(2,16,0) */ + struct MD5Context { guint32 total[2]; guint32 state[4]; @@ -327,13 +460,6 @@ return TRUE; } -static size_t -md5_get_block_size(PurpleCipherContext *context) -{ - /* This does not change (in this case) */ - return MD5_HMAC_BLOCK_SIZE; -} - static PurpleCipherOps MD5Ops = { NULL, /* Set option */ NULL, /* Get option */ @@ -355,6 +481,8 @@ NULL /* set key with len */ }; +#endif /* GLIB_CHECK_VERSION(2,16,0) */ + /******************************************************************************* * MD4 ******************************************************************************/ @@ -1613,6 +1741,61 @@ * SHA-1 ******************************************************************************/ #define SHA1_HMAC_BLOCK_SIZE 64 + +static size_t +sha1_get_block_size(PurpleCipherContext *context) +{ + /* This does not change (in this case) */ + return SHA1_HMAC_BLOCK_SIZE; +} + + +#if GLIB_CHECK_VERSION(2,16,0) + +static void +sha1_init(PurpleCipherContext *context, void *extra) +{ + purple_g_checksum_init(context, G_CHECKSUM_SHA1); +} + +static void +sha1_reset(PurpleCipherContext *context, void *extra) +{ + purple_g_checksum_reset(context, G_CHECKSUM_SHA1); +} + +static gboolean +sha1_digest(PurpleCipherContext *context, gsize in_len, guchar digest[20], + gsize *out_len) +{ + return purple_g_checksum_digest(context, G_CHECKSUM_SHA1, in_len, + digest, out_len); +} + +static PurpleCipherOps SHA1Ops = { + NULL, /* Set Option */ + NULL, /* Get Option */ + sha1_init, /* init */ + sha1_reset, /* reset */ + purple_g_checksum_uninit, /* uninit */ + NULL, /* set iv */ + purple_g_checksum_append, /* append */ + sha1_digest, /* digest */ + NULL, /* encrypt */ + NULL, /* decrypt */ + NULL, /* set salt */ + NULL, /* get salt size */ + NULL, /* set key */ + NULL, /* get key size */ + NULL, /* set batch mode */ + NULL, /* get batch mode */ + sha1_get_block_size, /* get block size */ + NULL /* set key with len */ +}; + +#else /* GLIB_CHECK_VERSION(2,16,0) */ + +#define SHA1_HMAC_BLOCK_SIZE 64 #define SHA1_ROTL(X,n) ((((X) << (n)) | ((X) >> (32-(n)))) & 0xFFFFFFFF) struct SHA1Context { @@ -1833,13 +2016,6 @@ return TRUE; } -static size_t -sha1_get_block_size(PurpleCipherContext *context) -{ - /* This does not change (in this case) */ - return SHA1_HMAC_BLOCK_SIZE; -} - static PurpleCipherOps SHA1Ops = { sha1_set_opt, /* Set Option */ sha1_get_opt, /* Get Option */ @@ -1861,10 +2037,65 @@ NULL /* set key with len */ }; +#endif /* GLIB_CHECK_VERSION(2,16,0) */ + /******************************************************************************* * SHA-256 ******************************************************************************/ #define SHA256_HMAC_BLOCK_SIZE 64 + +static size_t +sha256_get_block_size(PurpleCipherContext *context) +{ + /* This does not change (in this case) */ + return SHA256_HMAC_BLOCK_SIZE; +} + +#if GLIB_CHECK_VERSION(2,16,0) + +static void +sha256_init(PurpleCipherContext *context, void *extra) +{ + purple_g_checksum_init(context, G_CHECKSUM_SHA256); +} + +static void +sha256_reset(PurpleCipherContext *context, void *extra) +{ + purple_g_checksum_reset(context, G_CHECKSUM_SHA256); +} + +static gboolean +sha256_digest(PurpleCipherContext *context, gsize in_len, guchar digest[20], + gsize *out_len) +{ + return purple_g_checksum_digest(context, G_CHECKSUM_SHA256, in_len, + digest, out_len); +} + +static PurpleCipherOps SHA256Ops = { + NULL, /* Set Option */ + NULL, /* Get Option */ + sha256_init, /* init */ + sha256_reset, /* reset */ + purple_g_checksum_uninit, /* uninit */ + NULL, /* set iv */ + purple_g_checksum_append, /* append */ + sha256_digest, /* digest */ + NULL, /* encrypt */ + NULL, /* decrypt */ + NULL, /* set salt */ + NULL, /* get salt size */ + NULL, /* set key */ + NULL, /* get key size */ + NULL, /* set batch mode */ + NULL, /* get batch mode */ + sha256_get_block_size, /* get block size */ + NULL /* set key with len */ +}; + +#else /* GLIB_CHECK_VERSION(2,16,0) */ + #define SHA256_ROTR(X,n) ((((X) >> (n)) | ((X) << (32-(n)))) & 0xFFFFFFFF) static const guint32 sha256_K[64] = @@ -2088,13 +2319,6 @@ return TRUE; } -static size_t -sha256_get_block_size(PurpleCipherContext *context) -{ - /* This does not change (in this case) */ - return SHA256_HMAC_BLOCK_SIZE; -} - static PurpleCipherOps SHA256Ops = { sha256_set_opt, /* Set Option */ sha256_get_opt, /* Get Option */ @@ -2116,6 +2340,8 @@ NULL /* set key with len */ }; +#endif /* GLIB_CHECK_VERSION(2,16,0) */ + /******************************************************************************* * RC4 ******************************************************************************/ diff -r a6d84d9de605 -r 14131ba5a07c libpurple/debug.c --- a/libpurple/debug.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/debug.c Mon Jul 06 05:27:30 2009 +0000 @@ -36,12 +36,20 @@ * * It doesn't make sense to make this a normal Purple preference * because it's a command line option. This will always be FALSE, - * unless the user explicitly started Purple with the -d flag. + * unless the user explicitly started the UI with the -d flag. * It doesn't matter what this value was the last time Purple was * started, so it doesn't make sense to save it in prefs. */ static gboolean debug_enabled = FALSE; +/* + * These determine whether verbose or unsafe debugging are desired. I + * don't want to make these purple preferences because their values should + * not be remembered across instances of the UI. + */ +static gboolean debug_verbose = FALSE; +static gboolean debug_unsafe = FALSE; + static void purple_debug_vargs(PurpleDebugLevel level, const char *category, const char *format, va_list args) @@ -175,6 +183,30 @@ debug_ui_ops = ops; } +gboolean +purple_debug_is_verbose() +{ + return debug_verbose; +} + +void +purple_debug_set_verbose(gboolean verbose) +{ + debug_verbose = verbose; +} + +gboolean +purple_debug_is_unsafe() +{ + return debug_unsafe; +} + +void +purple_debug_set_unsafe(gboolean unsafe) +{ + debug_unsafe = unsafe; +} + PurpleDebugUiOps * purple_debug_get_ui_ops(void) { @@ -184,6 +216,13 @@ void purple_debug_init(void) { + /* Read environment variables once per init */ + if(g_getenv("PURPLE_UNSAFE_DEBUG")) + purple_debug_set_unsafe(TRUE); + + if(g_getenv("PURPLE_VERBOSE_DEBUG")) + purple_debug_set_verbose(TRUE); + purple_prefs_add_none("/purple/debug"); /* @@ -193,3 +232,4 @@ */ purple_prefs_add_bool("/purple/debug/timestamps", TRUE); } + diff -r a6d84d9de605 -r 14131ba5a07c libpurple/debug.h --- a/libpurple/debug.h Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/debug.h Mon Jul 06 05:27:30 2009 +0000 @@ -151,10 +151,50 @@ /** * Check if console debug output is enabled. * - * @return TRUE if debuggin is enabled, FALSE if it is not. + * @return TRUE if debugging is enabled, FALSE if it is not. */ gboolean purple_debug_is_enabled(void); +/** + * Enable or disable verbose debugging. This ordinarily should only be called + * by #purple_debug_init, but there are cases where this can be useful for + * plugins. + * + * @param verbose TRUE to enable verbose debugging or FALSE to disable it. + * + * @since 2.6.0 + */ +void purple_debug_set_verbose(gboolean verbose); + +/** + * Check if verbose logging is enabled. + * + * @return TRUE if verbose debugging is enabled, FALSE if it is not. + * + * @since 2.6.0 + */ +gboolean purple_debug_is_verbose(void); + +/** + * Enable or disable verbose debugging. This ordinarily should only be called + * by #purple_debug_init, but there are cases where this can be useful for + * plugins. + * + * @param unsafe TRUE to enable verbose debugging or FALSE to disable it. + * + * @since 2.6.0 + */ +void purple_debug_set_unsafe(gboolean unsafe); + +/** + * Check if unsafe debugging is enabled. + * + * @return TRUE if verbose debugging is enabled, FALSE if it is not. + * + * @since 2.6.0 + */ +gboolean purple_debug_is_unsafe(void); + /*@}*/ /**************************************************************************/ diff -r a6d84d9de605 -r 14131ba5a07c libpurple/dnssrv.c --- a/libpurple/dnssrv.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/dnssrv.c Mon Jul 06 05:27:30 2009 +0000 @@ -82,7 +82,7 @@ GThread *resolver; char *query; char *error_message; - GSList *results; + GList *results; #else int fd_in, fd_out; pid_t pid; @@ -134,8 +134,8 @@ * @param container_ptr The PurpleSrvResponseContainer that was chosen * will be returned here. */ -static GList *select_random_response(GList *list, - PurpleSrvResponseContainer **container_ptr) +static GList * +select_random_response(GList *list, PurpleSrvResponseContainer **container_ptr) { GList *cur; size_t runningtotal; @@ -173,11 +173,11 @@ * Reorder a GList of PurpleSrvResponses that have the same priority * (aka "pref"). */ -static void srv_reorder(GList *list, int num) +static void +srv_reorder(GList *list, int num) { int i; - GList *cur; - GList *container_list = NULL; + GList *cur, *container_list = NULL; PurpleSrvResponseContainer *container; if (num < 2) @@ -206,21 +206,22 @@ } /** - * Sorts a GList of PurpleSrvResponse's according to the + * Sorts a GList of PurpleSrvResponses according to the * algorithm described in RFC 2782. * * @param response GList of PurpleSrvResponse's * @param The original list, resorted */ -static GList *purple_srv_sort(GList *list) +static GList * +purple_srv_sort(GList *list) { + int pref, count; GList *cur, *start; - int count; - int pref; - if (!list || !list->next) + if (!list || !list->next) { /* Nothing to sort */ return list; + } list = g_list_sort(list, responsecompare); @@ -255,11 +256,8 @@ PurpleSrvResponse *srvres; PurpleTxtResponse *txtres; queryans answer; - int size; - int qdcount; - int ancount; - guchar *end; - guchar *cp; + int size, qdcount, ancount; + guchar *end, *cp; gchar name[256]; guint16 type, dlen, pref, weight, port; PurpleSrvInternalQuery query; @@ -348,8 +346,11 @@ while (ret != NULL) { /* TODO: Check return value */ - if (query.type == T_SRV) write(out, ret->data, sizeof(PurpleSrvResponse)); - if (query.type == T_TXT) write(out, ret->data, sizeof(PurpleTxtResponse)); + if (query.type == T_SRV) + write(out, ret->data, sizeof(PurpleSrvResponse)); + if (query.type == T_TXT) + write(out, ret->data, sizeof(PurpleTxtResponse)); + g_free(ret->data); ret = g_list_remove(ret, ret->data); } @@ -410,7 +411,7 @@ cb(res, size, query_data->extradata); } else if (type == T_TXT) { - GSList *responses = NULL; + GList *responses = NULL; PurpleTxtResponse *res; PurpleTxtCallback cb = query_data->cb.txt; ssize_t red; @@ -423,8 +424,8 @@ "response: %s\n", g_strerror(errno)); size = 0; g_free(res); - g_slist_foreach(responses, (GFunc)purple_txt_response_destroy, NULL); - g_slist_free(responses); + g_list_foreach(responses, (GFunc)purple_txt_response_destroy, NULL); + g_list_free(responses); responses = NULL; break; } @@ -450,24 +451,24 @@ res_main_thread_cb(gpointer data) { PurpleSrvResponse *srvres = NULL; - int size = 0; PurpleSrvQueryData *query_data = data; if(query_data->error_message != NULL) purple_debug_error("dnssrv", query_data->error_message); else { if (query_data->type == DNS_TYPE_SRV) { PurpleSrvResponse *srvres_tmp = NULL; - GSList *lst = query_data->results; - - size = g_slist_length(lst); + GList *lst = query_data->results; + int size = g_list_length(lst); if(query_data->cb.srv && size > 0) srvres_tmp = srvres = g_new0(PurpleSrvResponse, size); while (lst) { + PurpleSrvResponse *lstdata = lst->data; + lst = g_list_delete_link(lst, lst); + if(query_data->cb.srv) - memcpy(srvres_tmp++, lst->data, sizeof(PurpleSrvResponse)); - g_free(lst->data); - lst = g_slist_remove(lst, lst->data); + memcpy(srvres_tmp++, lstdata, sizeof(PurpleSrvResponse)); + g_free(lstdata); } query_data->results = NULL; @@ -476,9 +477,9 @@ if(query_data->cb.srv) query_data->cb.srv(srvres, size, query_data->extradata); } else if (query_data->type == DNS_TYPE_TXT) { - GSList *lst = query_data->results; + GList *lst = query_data->results; - purple_debug_info("dnssrv", "found %d TXT entries\n", g_slist_length(lst)); + purple_debug_info("dnssrv", "found %d TXT entries\n", g_list_length(lst)); if (query_data->cb.txt) { query_data->results = NULL; @@ -517,7 +518,7 @@ } else { if (type == DNS_TYPE_SRV) { PDNS_RECORD dr_tmp; - GSList *lst = NULL; + GList *lst = NULL; DNS_SRV_DATA *srv_data; PurpleSrvResponse *srvres; @@ -535,14 +536,14 @@ srvres->port = srv_data->wPort; srvres->weight = srv_data->wWeight; - lst = g_slist_prepend(lst, srvres); + lst = g_list_prepend(lst, srvres); } MyDnsRecordListFree(dr, DnsFreeRecordList); query_data->results = purple_srv_sort(lst); } else if (type == DNS_TYPE_TXT) { PDNS_RECORD dr_tmp; - GSList *lst = NULL; + GList *lst = NULL; DNS_TXT_DATA *txt_data; PurpleTxtResponse *txtres; @@ -563,7 +564,7 @@ s = g_string_append(s, txt_data->pStringArray[i]); txtres->content = g_string_free(s, FALSE); - lst = g_slist_append(lst, txtres); + lst = g_list_append(lst, txtres); } MyDnsRecordListFree(dr, DnsFreeRecordList); diff -r a6d84d9de605 -r 14131ba5a07c libpurple/dnssrv.h --- a/libpurple/dnssrv.h Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/dnssrv.h Mon Jul 06 05:27:30 2009 +0000 @@ -52,10 +52,10 @@ /** * Callback that returns the data retrieved from a DNS TXT lookup. * - * @param responses A GSList of PurpleTxtResponse objects. + * @param responses A GList of PurpleTxtResponse objects. * @param data The extra data passed to purple_txt_resolve. */ -typedef void (*PurpleTxtCallback)(GSList *responses, gpointer data); +typedef void (*PurpleTxtCallback)(GList *responses, gpointer data); /** * Queries an SRV record. diff -r a6d84d9de605 -r 14131ba5a07c libpurple/internal.h --- a/libpurple/internal.h Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/internal.h Mon Jul 06 05:27:30 2009 +0000 @@ -148,6 +148,14 @@ # endif #endif +#ifndef G_MAXSSIZE +# if GLIB_SIZEOF_LONG == 8 +# define G_MAXSSIZE ((gssize) 0x7fffffffffffffff) +# else +# define G_MAXSSIZE ((gssize) 0x7fffffff) +# endif +#endif + #if GLIB_CHECK_VERSION(2,6,0) # include #endif diff -r a6d84d9de605 -r 14131ba5a07c libpurple/log.c --- a/libpurple/log.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/log.c Mon Jul 06 05:27:30 2009 +0000 @@ -1129,7 +1129,7 @@ /* set->buddy is always set below */ set->normalized_name = g_strdup(purple_normalize(account, name)); - /* Chat for .chat or .system at the end of the name to determine the type. */ + /* Check for .chat or .system at the end of the name to determine the type. */ if (len >= 7) { gchar *tmp = &name[len - 7]; if (purple_strequal(tmp, ".system")) { diff -r a6d84d9de605 -r 14131ba5a07c libpurple/plugin.c --- a/libpurple/plugin.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/plugin.c Mon Jul 06 05:27:30 2009 +0000 @@ -861,6 +861,7 @@ } g_list_free(loader_info->exts); + loader_info->exts = NULL; } plugin_loaders = g_list_remove(plugin_loaders, plugin); @@ -1222,6 +1223,12 @@ search_paths = g_list_append(search_paths, g_strdup(path)); } +GList * +purple_plugins_get_search_paths() +{ + return search_paths; +} + void purple_plugins_unload_all(void) { diff -r a6d84d9de605 -r 14131ba5a07c libpurple/plugin.h --- a/libpurple/plugin.h Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/plugin.h Mon Jul 06 05:27:30 2009 +0000 @@ -512,6 +512,15 @@ void purple_plugins_add_search_path(const char *path); /** + * Returns a list of plugin search paths. + * + * @constreturn A list of searched paths. + * + * @since 2.6.0 + */ +GList *purple_plugins_get_search_paths(void); + +/** * Unloads all loaded plugins. */ void purple_plugins_unload_all(void); diff -r a6d84d9de605 -r 14131ba5a07c libpurple/plugins/perl/Makefile.am --- a/libpurple/plugins/perl/Makefile.am Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/plugins/perl/Makefile.am Mon Jul 06 05:27:30 2009 +0000 @@ -99,7 +99,7 @@ ${LN_S} -f $$srcloc/$$f $$f; \ done; \ fi - @cd common && $(perlpath) Makefile.PL $(PERL_MM_PARAMS) + @cd common && $(perlpath) Makefile.PL common/Makefile.PL: common/Makefile.PL.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) @@ -108,7 +108,7 @@ @for dir in $(perl_dirs); do \ cd $$dir && \ if [ ! -f Makefile ]; then \ - $(perlpath) Makefile.PL $(PERL_MM_PARAMS); \ + $(perlpath) Makefile.PL; \ fi && \ ($(MAKE) CC="$(CC)" CCFLAGS="$(PERL_CFLAGS) $(CFLAGS)" $(PERL_EXTRA_OPTS) || \ $(MAKE) CC="$(CC)" CCFLAGS="$(PERL_CFLAGS) $(CFLAGS)" $(PERL_EXTRA_OPTS)) && \ @@ -164,6 +164,7 @@ -I$(top_srcdir) \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \ + -DLIBDIR=\"$(libdir)/purple-$(PURPLE_MAJOR_VERSION)\" \ $(DEBUG_CFLAGS) \ $(GLIB_CFLAGS) \ $(PLUGIN_CFLAGS) \ diff -r a6d84d9de605 -r 14131ba5a07c libpurple/plugins/perl/common/Makefile.PL.in --- a/libpurple/plugins/perl/common/Makefile.PL.in Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/plugins/perl/common/Makefile.PL.in Mon Jul 06 05:27:30 2009 +0000 @@ -13,4 +13,16 @@ 'INC' => '-I. -I@srcdir@ -I@top_srcdir@ -I@top_srcdir@/libpurple @GLIB_CFLAGS@', 'OBJECT' => '$(O_FILES)', # link all the C files too # 'OPTIMIZE' => '-g', # For debugging + 'INSTALLDIRS' => 'vendor', + 'INSTALL_BASE' => '$(prefix)', + 'INSTALLVENDORARCH' => '$(libdir)/purple-$(PURPLE_MAJOR_VERSION)/perl', + 'INSTALLVENDORMAN3DIR' => '$(mandir)/man3', + 'macro' => { + 'prefix' => '@prefix@', + 'exec_prefix' => '@exec_prefix@', + 'libdir' => '@libdir@', + 'mandir' => '@mandir@', + 'datarootdir' => '@datarootdir@', + 'PURPLE_MAJOR_VERSION' => '@PURPLE_MAJOR_VERSION@', + }, ); diff -r a6d84d9de605 -r 14131ba5a07c libpurple/plugins/perl/perl.c --- a/libpurple/plugins/perl/perl.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/plugins/perl/perl.c Mon Jul 06 05:27:30 2009 +0000 @@ -131,6 +131,7 @@ #endif { char *file = __FILE__; + GList *search_paths = purple_plugins_get_search_paths(); dXSUB_SYS; /* This one allows dynamic loading of perl modules in perl scripts by @@ -139,6 +140,17 @@ #ifdef _WIN32 newXS("Win32CORE::bootstrap", boot_Win32CORE, file); #endif + + while (search_paths != NULL) { + gchar *uselib; + const gchar *search_path = search_paths->data; + search_paths = g_list_next(search_paths); + + uselib = g_strdup_printf("unshift @INC, \"%s%cperl\";", + search_path, G_DIR_SEPARATOR); + eval_pv(uselib, TRUE); + g_free(uselib); + } } static void diff -r a6d84d9de605 -r 14131ba5a07c libpurple/protocols/jabber/buddy.c --- a/libpurple/protocols/jabber/buddy.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/protocols/jabber/buddy.c Mon Jul 06 05:27:30 2009 +0000 @@ -650,16 +650,88 @@ g_free(jbi); } +static void +add_jbr_info(JabberBuddyInfo *jbi, const char *resource, + JabberBuddyResource *jbr) +{ + JabberBuddyInfoResource *jbir; + PurpleNotifyUserInfo *user_info; + + jbir = g_hash_table_lookup(jbi->resources, resource); + user_info = jbi->user_info; + + if (jbr && jbr->client.name) { + char *tmp = + g_strdup_printf("%s%s%s", jbr->client.name, + (jbr->client.version ? " " : ""), + (jbr->client.version ? jbr->client.version : "")); + purple_notify_user_info_prepend_pair(user_info, _("Client"), tmp); + g_free(tmp); + + if (jbr->client.os) + purple_notify_user_info_prepend_pair(user_info, _("Operating System"), jbr->client.os); + } + + if (jbr && jbr->tz_off != PURPLE_NO_TZ_OFF) { + time_t now_t; + struct tm *now; + char *timestamp; + time(&now_t); + now_t += jbr->tz_off; + now = gmtime(&now_t); + + timestamp = + g_strdup_printf("%s %c%02d%02d", purple_time_format(now), + jbr->tz_off < 0 ? '-' : '+', + abs(jbr->tz_off / (60*60)), + abs((jbr->tz_off % (60*60)) / 60)); + purple_notify_user_info_prepend_pair(user_info, _("Local Time"), timestamp); + g_free(timestamp); + } + + if (jbir && jbir->idle_seconds > 0) { + char *idle = purple_str_seconds_to_string(jbir->idle_seconds); + purple_notify_user_info_prepend_pair(user_info, _("Idle"), idle); + g_free(idle); + } + + if (jbr) { + char *purdy = NULL; + char *tmp; + char priority[12]; + const char *status_name = jabber_buddy_state_get_name(jbr->state); + + if (jbr->status) { + purdy = purple_strdup_withhtml(jbr->status); + + if (purple_strequal(status_name, purdy)) + status_name = NULL; + } + + tmp = g_strdup_printf("%s%s%s", (status_name ? status_name : ""), + ((status_name && purdy) ? ": " : ""), + (purdy ? purdy : "")); + purple_notify_user_info_prepend_pair(user_info, _("Status"), tmp); + + g_snprintf(priority, sizeof(priority), "%d", jbr->priority); + purple_notify_user_info_prepend_pair(user_info, _("Priority"), priority); + + g_free(tmp); + g_free(purdy); + } else { + purple_notify_user_info_prepend_pair(user_info, _("Status"), _("Unknown")); + } +} + static void jabber_buddy_info_show_if_ready(JabberBuddyInfo *jbi) { - char *resource_name, *tmp; + char *resource_name; JabberBuddyResource *jbr; - JabberBuddyInfoResource *jbir = NULL; GList *resources; PurpleNotifyUserInfo *user_info; /* not yet */ - if(jbi->ids) + if (jbi->ids) return; user_info = jbi->user_info; @@ -669,377 +741,24 @@ if (purple_notify_user_info_get_entries(user_info)) purple_notify_user_info_prepend_section_break(user_info); - /* Prepend the primary buddy info to user_info so that it goes before the vcard. */ - if(resource_name) { + /* Add the information about the user's resource(s) */ + if (resource_name) { jbr = jabber_buddy_find_resource(jbi->jb, resource_name); - jbir = g_hash_table_lookup(jbi->resources, resource_name); - if(jbr && jbr->client.name) { - tmp = g_strdup_printf("%s%s%s", jbr->client.name, - (jbr->client.version ? " " : ""), - (jbr->client.version ? jbr->client.version : "")); - purple_notify_user_info_add_pair(user_info, _("Client"), tmp); - g_free(tmp); - - if(jbr->client.os) { - purple_notify_user_info_prepend_pair(user_info, _("Operating System"), jbr->client.os); - } - } - if (jbr && jbr->tz_off != PURPLE_NO_TZ_OFF) { - time_t now_t; - struct tm *now; - char *timestamp; - time(&now_t); - now_t += jbr->tz_off; - now = gmtime(&now_t); - - timestamp = g_strdup_printf("%s %c%02d%02d", purple_time_format(now), - jbr->tz_off < 0 ? '-' : '+', - abs(jbr->tz_off / (60*60)), - abs((jbr->tz_off % (60*60)) / 60)); - purple_notify_user_info_prepend_pair(user_info, _("Local Time"), timestamp); - g_free(timestamp); - } - if(jbir) { - if(jbir->idle_seconds > 0) { - char *idle = purple_str_seconds_to_string(jbir->idle_seconds); - purple_notify_user_info_prepend_pair(user_info, _("Idle"), idle); - g_free(idle); - } - } - if(jbr) { - char *purdy = NULL; - const char *status_name = jabber_buddy_state_get_name(jbr->state); - if(jbr->status) - purdy = purple_strdup_withhtml(jbr->status); - if(status_name && purdy && !strcmp(status_name, purdy)) - status_name = NULL; - - tmp = g_strdup_printf("%s%s%s", (status_name ? status_name : ""), - ((status_name && purdy) ? ": " : ""), - (purdy ? purdy : "")); - purple_notify_user_info_prepend_pair(user_info, _("Status"), tmp); - g_free(tmp); - g_free(purdy); - } else { - purple_notify_user_info_prepend_pair(user_info, _("Status"), _("Unknown")); - } -#if 0 - /* #if 0 this for now; I think this would be far more useful if we limited this to a particular set of features - * of particular interest (-vv jumps out as one). As it is now, I don't picture people getting all excited: "Oh sweet crap! - * So-and-so supports 'jabber:x:data' AND 'Collaborative Data Objects'!" - */ - - if(jbr && jbr->caps) { - GString *tmp = g_string_new(""); - GList *iter; - for(iter = jbr->caps->features; iter; iter = g_list_next(iter)) { - const char *feature = iter->data; - - if(!strcmp(feature, "jabber:iq:last")) - feature = _("Last Activity"); - else if(!strcmp(feature, "http://jabber.org/protocol/disco#info")) - feature = _("Service Discovery Info"); - else if(!strcmp(feature, "http://jabber.org/protocol/disco#items")) - feature = _("Service Discovery Items"); - else if(!strcmp(feature, "http://jabber.org/protocol/address")) - feature = _("Extended Stanza Addressing"); - else if(!strcmp(feature, "http://jabber.org/protocol/muc")) - feature = _("Multi-User Chat"); - else if(!strcmp(feature, "http://jabber.org/protocol/muc#user")) - feature = _("Multi-User Chat Extended Presence Information"); - else if(!strcmp(feature, "http://jabber.org/protocol/ibb")) - feature = _("In-Band Bytestreams"); - else if(!strcmp(feature, "http://jabber.org/protocol/commands")) - feature = _("Ad-Hoc Commands"); - else if(!strcmp(feature, "http://jabber.org/protocol/pubsub")) - feature = _("PubSub Service"); - else if(!strcmp(feature, "http://jabber.org/protocol/bytestreams")) - feature = _("SOCKS5 Bytestreams"); - else if(!strcmp(feature, "jabber:x:oob")) - feature = _("Out of Band Data"); - else if(!strcmp(feature, "http://jabber.org/protocol/xhtml-im")) - feature = _("XHTML-IM"); - else if(!strcmp(feature, "jabber:iq:register")) - feature = _("In-Band Registration"); - else if(!strcmp(feature, "http://jabber.org/protocol/geoloc")) - feature = _("User Location"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0084.html")) - feature = _("User Avatar"); - else if(!strcmp(feature, "http://jabber.org/protocol/chatstates")) - feature = _("Chat State Notifications"); - else if(!strcmp(feature, "jabber:iq:version")) - feature = _("Software Version"); - else if(!strcmp(feature, "http://jabber.org/protocol/si")) - feature = _("Stream Initiation"); - else if(!strcmp(feature, "http://jabber.org/protocol/si/profile/file-transfer")) - feature = _("File Transfer"); - else if(!strcmp(feature, "http://jabber.org/protocol/mood")) - feature = _("User Mood"); - else if(!strcmp(feature, "http://jabber.org/protocol/activity")) - feature = _("User Activity"); - else if(!strcmp(feature, "http://jabber.org/protocol/caps")) - feature = _("Entity Capabilities"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0116.html")) - feature = _("Encrypted Session Negotiations"); - else if(!strcmp(feature, "http://jabber.org/protocol/tune")) - feature = _("User Tune"); - else if(!strcmp(feature, "http://jabber.org/protocol/rosterx")) - feature = _("Roster Item Exchange"); - else if(!strcmp(feature, "http://jabber.org/protocol/reach")) - feature = _("Reachability Address"); - else if(!strcmp(feature, "http://jabber.org/protocol/profile")) - feature = _("User Profile"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0166.html#ns")) - feature = _("Jingle"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0167.html#ns")) - feature = _("Jingle Audio"); - else if(!strcmp(feature, "http://jabber.org/protocol/nick")) - feature = _("User Nickname"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0176.html#ns-udp")) - feature = _("Jingle ICE UDP"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0176.html#ns-tcp")) - feature = _("Jingle ICE TCP"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0177.html#ns")) - feature = _("Jingle Raw UDP"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0180.html#ns")) - feature = _("Jingle Video"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0181.html#ns")) - feature = _("Jingle DTMF"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0184.html#ns")) - feature = _("Message Receipts"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0189.html#ns")) - feature = _("Public Key Publishing"); - else if(!strcmp(feature, "http://jabber.org/protocol/chatting")) - feature = _("User Chatting"); - else if(!strcmp(feature, "http://jabber.org/protocol/browsing")) - feature = _("User Browsing"); - else if(!strcmp(feature, "http://jabber.org/protocol/gaming")) - feature = _("User Gaming"); - else if(!strcmp(feature, "http://jabber.org/protocol/viewing")) - feature = _("User Viewing"); - else if(!strcmp(feature, "urn:xmpp:ping")) - feature = _("Ping"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0200.html#ns")) - feature = _("Stanza Encryption"); - else if(!strcmp(feature, "urn:xmpp:time")) - feature = _("Entity Time"); - else if(!strcmp(feature, "urn:xmpp:delay")) - feature = _("Delayed Delivery"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0204.html#ns")) - feature = _("Collaborative Data Objects"); - else if(!strcmp(feature, "http://jabber.org/protocol/fileshare")) - feature = _("File Repository and Sharing"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0215.html#ns")) - feature = _("STUN Service Discovery for Jingle"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0116.html#ns")) - feature = _("Simplified Encrypted Session Negotiation"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0219.html#ns")) - feature = _("Hop Check"); - else if(g_str_has_suffix(feature, "+notify")) - feature = NULL; - if(feature) - g_string_append_printf(tmp, "%s
", feature); - } - - if(strlen(tmp->str) > 0) - purple_notify_user_info_prepend_pair(user_info, _("Capabilities"), tmp->str); - - g_string_free(tmp, TRUE); - } -#endif + add_jbr_info(jbi, resource_name, jbr); } else { - gboolean multiple_resources = jbi->jb->resources && jbi->jb->resources->next; - - for(resources = jbi->jb->resources; resources; resources = resources->next) { - char *purdy = NULL; - const char *status_name = NULL; - + for (resources = jbi->jb->resources; resources; resources = resources->next) { jbr = resources->data; /* put a section break between resources, this is not needed if we are at the first, because one was already added for the vcard section */ - if (resources != jbi->jb->resources) { + if (resources != jbi->jb->resources) purple_notify_user_info_prepend_section_break(user_info); - } - - if(jbr->client.name) { - tmp = g_strdup_printf("%s%s%s", jbr->client.name, - (jbr->client.version ? " " : ""), - (jbr->client.version ? jbr->client.version : "")); - purple_notify_user_info_prepend_pair(user_info, - _("Client"), tmp); - g_free(tmp); - - if(jbr->client.os) { - purple_notify_user_info_prepend_pair(user_info, _("Operating System"), jbr->client.os); - } - } - - if (jbr->tz_off != PURPLE_NO_TZ_OFF) { - time_t now_t; - struct tm *now; - char *timestamp; - time(&now_t); - now_t += jbr->tz_off; - now = gmtime(&now_t); - - timestamp = g_strdup_printf("%s %c%02d%02d", purple_time_format(now), - jbr->tz_off < 0 ? '-' : '+', - abs(jbr->tz_off / (60*60)), - abs((jbr->tz_off % (60*60)) / 60)); - purple_notify_user_info_prepend_pair(user_info, _("Local Time"), timestamp); - g_free(timestamp); - } - - if(jbr->name && (jbir = g_hash_table_lookup(jbi->resources, jbr->name))) { - if(jbir->idle_seconds > 0) { - char *idle = purple_str_seconds_to_string(jbir->idle_seconds); - purple_notify_user_info_prepend_pair(user_info, _("Idle"), idle); - g_free(idle); - } - } - - status_name = jabber_buddy_state_get_name(jbr->state); - if(jbr->status) - purdy = purple_strdup_withhtml(jbr->status); - if(status_name && purdy && !strcmp(status_name, purdy)) - status_name = NULL; - - tmp = g_strdup_printf("%s%s%s", (status_name ? status_name : ""), - ((status_name && purdy) ? ": " : ""), - (purdy ? purdy : "")); - purple_notify_user_info_prepend_pair(user_info, _("Status"), tmp); - g_free(tmp); - g_free(purdy); - - if(multiple_resources) { - tmp = g_strdup_printf("%d", jbr->priority); - purple_notify_user_info_prepend_pair(user_info, _("Priority"), tmp); - g_free(tmp); - } - - if(jbr->name) - purple_notify_user_info_prepend_pair(user_info, _("Resource"), jbr->name); -#if 0 - if(jbr && jbr->caps) { - GString *tmp = g_string_new(""); - GList *iter; - for(iter = jbr->caps->features; iter; iter = g_list_next(iter)) { - const char *feature = iter->data; - if(!strcmp(feature, "jabber:iq:last")) - feature = _("Last Activity"); - else if(!strcmp(feature, "http://jabber.org/protocol/disco#info")) - feature = _("Service Discovery Info"); - else if(!strcmp(feature, "http://jabber.org/protocol/disco#items")) - feature = _("Service Discovery Items"); - else if(!strcmp(feature, "http://jabber.org/protocol/address")) - feature = _("Extended Stanza Addressing"); - else if(!strcmp(feature, "http://jabber.org/protocol/muc")) - feature = _("Multi-User Chat"); - else if(!strcmp(feature, "http://jabber.org/protocol/muc#user")) - feature = _("Multi-User Chat Extended Presence Information"); - else if(!strcmp(feature, "http://jabber.org/protocol/ibb")) - feature = _("In-Band Bytestreams"); - else if(!strcmp(feature, "http://jabber.org/protocol/commands")) - feature = _("Ad-Hoc Commands"); - else if(!strcmp(feature, "http://jabber.org/protocol/pubsub")) - feature = _("PubSub Service"); - else if(!strcmp(feature, "http://jabber.org/protocol/bytestreams")) - feature = _("SOCKS5 Bytestreams"); - else if(!strcmp(feature, "jabber:x:oob")) - feature = _("Out of Band Data"); - else if(!strcmp(feature, "http://jabber.org/protocol/xhtml-im")) - feature = _("XHTML-IM"); - else if(!strcmp(feature, "jabber:iq:register")) - feature = _("In-Band Registration"); - else if(!strcmp(feature, "http://jabber.org/protocol/geoloc")) - feature = _("User Location"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0084.html")) - feature = _("User Avatar"); - else if(!strcmp(feature, "http://jabber.org/protocol/chatstates")) - feature = _("Chat State Notifications"); - else if(!strcmp(feature, "jabber:iq:version")) - feature = _("Software Version"); - else if(!strcmp(feature, "http://jabber.org/protocol/si")) - feature = _("Stream Initiation"); - else if(!strcmp(feature, "http://jabber.org/protocol/si/profile/file-transfer")) - feature = _("File Transfer"); - else if(!strcmp(feature, "http://jabber.org/protocol/mood")) - feature = _("User Mood"); - else if(!strcmp(feature, "http://jabber.org/protocol/activity")) - feature = _("User Activity"); - else if(!strcmp(feature, "http://jabber.org/protocol/caps")) - feature = _("Entity Capabilities"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0116.html")) - feature = _("Encrypted Session Negotiations"); - else if(!strcmp(feature, "http://jabber.org/protocol/tune")) - feature = _("User Tune"); - else if(!strcmp(feature, "http://jabber.org/protocol/rosterx")) - feature = _("Roster Item Exchange"); - else if(!strcmp(feature, "http://jabber.org/protocol/reach")) - feature = _("Reachability Address"); - else if(!strcmp(feature, "http://jabber.org/protocol/profile")) - feature = _("User Profile"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0166.html#ns")) - feature = _("Jingle"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0167.html#ns")) - feature = _("Jingle Audio"); - else if(!strcmp(feature, "http://jabber.org/protocol/nick")) - feature = _("User Nickname"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0176.html#ns-udp")) - feature = _("Jingle ICE UDP"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0176.html#ns-tcp")) - feature = _("Jingle ICE TCP"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0177.html#ns")) - feature = _("Jingle Raw UDP"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0180.html#ns")) - feature = _("Jingle Video"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0181.html#ns")) - feature = _("Jingle DTMF"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0184.html#ns")) - feature = _("Message Receipts"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0189.html#ns")) - feature = _("Public Key Publishing"); - else if(!strcmp(feature, "http://jabber.org/protocol/chatting")) - feature = _("User Chatting"); - else if(!strcmp(feature, "http://jabber.org/protocol/browsing")) - feature = _("User Browsing"); - else if(!strcmp(feature, "http://jabber.org/protocol/gaming")) - feature = _("User Gaming"); - else if(!strcmp(feature, "http://jabber.org/protocol/viewing")) - feature = _("User Viewing"); - else if(!strcmp(feature, "urn:xmpp:ping")) - feature = _("Ping"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0200.html#ns")) - feature = _("Stanza Encryption"); - else if(!strcmp(feature, "urn:xmpp:time")) - feature = _("Entity Time"); - else if(!strcmp(feature, "urn:xmpp:delay")) - feature = _("Delayed Delivery"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0204.html#ns")) - feature = _("Collaborative Data Objects"); - else if(!strcmp(feature, "http://jabber.org/protocol/fileshare")) - feature = _("File Repository and Sharing"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0215.html#ns")) - feature = _("STUN Service Discovery for Jingle"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0116.html#ns")) - feature = _("Simplified Encrypted Session Negotiation"); - else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0219.html#ns")) - feature = _("Hop Check"); - else if(g_str_has_suffix(feature, "+notify")) - feature = NULL; + add_jbr_info(jbi, jbr->name, jbr); - if(feature) - g_string_append_printf(tmp, "%s\n", feature); - } - if(strlen(tmp->str) > 0) - purple_notify_user_info_prepend_pair(user_info, _("Capabilities"), tmp->str); - - g_string_free(tmp, TRUE); - } -#endif + if (jbr->name) + purple_notify_user_info_prepend_pair(user_info, _("Resource"), jbr->name); } } @@ -1047,13 +766,13 @@ /* the buddy is offline */ gchar *status = g_strdup_printf("%s%s%s", _("Offline"), - jbi->last_message ? ": " : "", - jbi->last_message ? jbi->last_message : ""); + jbi->last_message ? ": " : "", + jbi->last_message ? jbi->last_message : ""); if (jbi->last_seconds > 0) { char *last = purple_str_seconds_to_string(jbi->last_seconds); gchar *message = g_strdup_printf(_("%s ago"), last); purple_notify_user_info_prepend_pair(user_info, - _("Logged off"), message); + _("Logged Off"), message); g_free(last); g_free(message); } @@ -1065,7 +784,7 @@ purple_notify_userinfo(jbi->js->gc, jbi->jid, user_info, NULL, NULL); - while(jbi->vcard_imgids) { + while (jbi->vcard_imgids) { purple_imgstore_unref_by_id(GPOINTER_TO_INT(jbi->vcard_imgids->data)); jbi->vcard_imgids = g_slist_delete_link(jbi->vcard_imgids, jbi->vcard_imgids); } @@ -2101,45 +1820,45 @@ return JABBER_BUDDY_STATE_UNKNOWN; } -JabberBuddyState jabber_buddy_show_get_state(const char *id) { - if(!id) - return JABBER_BUDDY_STATE_UNKNOWN; - if(!strcmp(id, "available")) - return JABBER_BUDDY_STATE_ONLINE; - if(!strcmp(id, "chat")) - return JABBER_BUDDY_STATE_CHAT; - if(!strcmp(id, "away")) - return JABBER_BUDDY_STATE_AWAY; - if(!strcmp(id, "xa")) - return JABBER_BUDDY_STATE_XA; - if(!strcmp(id, "dnd")) - return JABBER_BUDDY_STATE_DND; - if(!strcmp(id, "offline")) - return JABBER_BUDDY_STATE_UNAVAILABLE; - if(!strcmp(id, "error")) - return JABBER_BUDDY_STATE_ERROR; +const struct { + const char *name; + JabberBuddyState state; +} show_state_pairs[] = { + { "available", JABBER_BUDDY_STATE_ONLINE }, + { "chat", JABBER_BUDDY_STATE_CHAT }, + { "away", JABBER_BUDDY_STATE_AWAY }, + { "xa", JABBER_BUDDY_STATE_XA }, + { "dnd", JABBER_BUDDY_STATE_DND }, + { "offline", JABBER_BUDDY_STATE_UNAVAILABLE }, + { "error", JABBER_BUDDY_STATE_ERROR }, + { NULL, JABBER_BUDDY_STATE_UNKNOWN } +}; +JabberBuddyState jabber_buddy_show_get_state(const char *id) +{ + int i; + + g_return_val_if_fail(id != NULL, JABBER_BUDDY_STATE_UNKNOWN); + + for (i = 0; show_state_pairs[i].name; ++i) + if (g_str_equal(id, show_state_pairs[i].name)) + return show_state_pairs[i].state; + + purple_debug_warning("jabber", "Invalid value of presence " + "attribute: %s\n", id); return JABBER_BUDDY_STATE_UNKNOWN; } -const char *jabber_buddy_state_get_show(JabberBuddyState state) { - switch(state) { - case JABBER_BUDDY_STATE_CHAT: - return "chat"; - case JABBER_BUDDY_STATE_AWAY: - return "away"; - case JABBER_BUDDY_STATE_XA: - return "xa"; - case JABBER_BUDDY_STATE_DND: - return "dnd"; - case JABBER_BUDDY_STATE_ONLINE: - return "available"; - case JABBER_BUDDY_STATE_UNKNOWN: - case JABBER_BUDDY_STATE_ERROR: - return NULL; - case JABBER_BUDDY_STATE_UNAVAILABLE: - return "offline"; - } +const char * +jabber_buddy_state_get_show(JabberBuddyState state) +{ + int i; + + for (i = 0; show_state_pairs[i].name; ++i) + if (state == show_state_pairs[i].state) + return show_state_pairs[i].name; + +/* purple_debug_warning("jabber", "Unknown buddy state: %d\n", state); */ return NULL; } diff -r a6d84d9de605 -r 14131ba5a07c libpurple/protocols/jabber/jabber.c --- a/libpurple/protocols/jabber/jabber.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/protocols/jabber/jabber.c Mon Jul 06 05:27:30 2009 +0000 @@ -596,7 +596,7 @@ } static void -txt_resolved_cb(GSList *responses, gpointer data) +txt_resolved_cb(GList *responses, gpointer data) { JabberStream *js = data; @@ -624,7 +624,7 @@ } g_strfreev(token); purple_txt_response_destroy(resp); - responses = g_slist_delete_link(responses, responses); + responses = g_list_delete_link(responses, responses); } if (js->bosh) { @@ -634,8 +634,8 @@ } if (responses) { - g_slist_foreach(responses, (GFunc)purple_txt_response_destroy, NULL); - g_slist_free(responses); + g_list_foreach(responses, (GFunc)purple_txt_response_destroy, NULL); + g_list_free(responses); } } @@ -908,7 +908,7 @@ if (type == JABBER_IQ_RESULT) { if(js->registration) { buf = g_strdup_printf(_("Registration of %s@%s successful"), - js->user->node, js->user->domain); + js->user->node, js->user->domain); if(account->registration_cb) (account->registration_cb)(account, TRUE, account->registration_cb_user_data); } else { diff -r a6d84d9de605 -r 14131ba5a07c libpurple/protocols/jabber/libxmpp.c --- a/libpurple/protocols/jabber/libxmpp.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/protocols/jabber/libxmpp.c Mon Jul 06 05:27:30 2009 +0000 @@ -288,7 +288,7 @@ purple_account_user_split_set_reverse(split, FALSE); prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); - option = purple_account_option_bool_new(_("Require SSL/TLS"), "require_tls", FALSE); + option = purple_account_option_bool_new(_("Require SSL/TLS"), "require_tls", TRUE); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); diff -r a6d84d9de605 -r 14131ba5a07c libpurple/protocols/jabber/presence.c --- a/libpurple/protocols/jabber/presence.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/protocols/jabber/presence.c Mon Jul 06 05:27:30 2009 +0000 @@ -460,9 +460,6 @@ { const char *from; const char *type; - const char *real_jid = NULL; - const char *affiliation = NULL; - const char *role = NULL; char *status = NULL; int priority = 0; JabberID *jid; @@ -476,7 +473,6 @@ char *buddy_name; JabberBuddyState state = JABBER_BUDDY_STATE_UNKNOWN; xmlnode *y; - gboolean muc = FALSE; char *avatar_hash = NULL; xmlnode *caps = NULL; int idle = 0; @@ -486,34 +482,57 @@ from = xmlnode_get_attrib(packet, "from"); type = xmlnode_get_attrib(packet, "type"); - if(!(jb = jabber_buddy_find(js, from, TRUE))) - return; + jb = jabber_buddy_find(js, from, TRUE); + g_return_if_fail(jb != NULL); signal_return = GPOINTER_TO_INT(purple_signal_emit_return_1(jabber_plugin, "jabber-receiving-presence", js->gc, type, from, packet)); if (signal_return) return; - if(!(jid = jabber_id_new(from))) + jid = jabber_id_new(from); + if (jid == NULL) { + purple_debug_error("jabber", "Ignoring presence with malformed 'from' " + "JID: %s\n", from); return; + } if(jb->error_msg) { g_free(jb->error_msg); jb->error_msg = NULL; } - if(type && !strcmp(type, "error")) { + if (type == NULL) { + xmlnode *show; + char *show_data = NULL; + + state = JABBER_BUDDY_STATE_ONLINE; + + show = xmlnode_get_child(packet, "show"); + if (show) { + show_data = xmlnode_get_data(show); + if (show_data) { + state = jabber_buddy_show_get_state(show_data); + g_free(show_data); + } else + purple_debug_warning("jabber", " present on presence, " + "but no contents!\n"); + } + } else if (g_str_equal(type, "error")) { char *msg = jabber_parse_error(js, packet, NULL); state = JABBER_BUDDY_STATE_ERROR; jb->error_msg = msg ? msg : g_strdup(_("Unknown Error in presence")); - } else if(type && !strcmp(type, "subscribe")) { + } else if (g_str_equal(type, "subscribe")) { struct _jabber_add_permit *jap = g_new0(struct _jabber_add_permit, 1); gboolean onlist = FALSE; - PurpleBuddy *buddy = purple_find_buddy(purple_connection_get_account(js->gc), from); + PurpleAccount *account; + PurpleBuddy *buddy; JabberBuddy *jb = NULL; xmlnode *nick; + account = purple_connection_get_account(js->gc); + buddy = purple_find_buddy(account, from); nick = xmlnode_get_child_with_namespace(packet, "nick", "http://jabber.org/protocol/nick"); if (nick) nickname = xmlnode_get_data(nick); @@ -528,16 +547,17 @@ jap->who = g_strdup(from); jap->js = js; - purple_account_request_authorization(purple_connection_get_account(js->gc), from, NULL, nickname, NULL, onlist, - authorize_add_cb, deny_add_cb, jap); + purple_account_request_authorization(account, from, NULL, nickname, + NULL, onlist, authorize_add_cb, deny_add_cb, jap); + g_free(nickname); jabber_id_free(jid); return; - } else if(type && !strcmp(type, "subscribed")) { + } else if (g_str_equal(type, "subscribed")) { /* we've been allowed to see their presence, but we don't care */ jabber_id_free(jid); return; - } else if(type && !strcmp(type, "unsubscribe")) { + } else if (g_str_equal(type, "unsubscribe")) { /* XXX I'm not sure this is the right way to handle this, it * might be better to add "unsubscribe" to the presence status * if lower down, but I'm not sure. */ @@ -546,14 +566,19 @@ * acknowledging this (and the others) at some point. */ jabber_id_free(jid); return; + } else if (g_str_equal(type, "probe")) { + purple_debug_warning("jabber", "Ignoring presence probe\n"); + jabber_id_free(jid); + return; + } else if (g_str_equal(type, "unavailable")) { + state = JABBER_BUDDY_STATE_UNAVAILABLE; + } else if (g_str_equal(type, "unsubscribed")) { + state = JABBER_BUDDY_STATE_UNKNOWN; } else { - if((y = xmlnode_get_child(packet, "show"))) { - char *show = xmlnode_get_data(y); - state = jabber_buddy_show_get_state(show); - g_free(show); - } else { - state = JABBER_BUDDY_STATE_ONLINE; - } + purple_debug_warning("jabber", "Ignoring presence with invalid type " + "'%s'\n", type); + jabber_id_free(jid); + return; } @@ -588,49 +613,6 @@ /* XXX: compare the time. jabber:x:delay can happen on presence packets that aren't really and truly delayed */ delayed = TRUE; stamp = xmlnode_get_attrib(y, "stamp"); - } else if(!strcmp(xmlns, "http://jabber.org/protocol/muc#user")) { - xmlnode *z; - - muc = TRUE; - if((z = xmlnode_get_child(y, "status"))) { - const char *code = xmlnode_get_attrib(z, "code"); - if(code && !strcmp(code, "201")) { - if((chat = jabber_chat_find(js, jid->node, jid->domain))) { - chat->config_dialog_type = PURPLE_REQUEST_ACTION; - chat->config_dialog_handle = - purple_request_action(js->gc, - _("Create New Room"), - _("Create New Room"), - _("You are creating a new room. Would" - " you like to configure it, or" - " accept the default settings?"), - /* Default Action */ 1, - purple_connection_get_account(js->gc), NULL, chat->conv, - chat, 2, - _("_Configure Room"), G_CALLBACK(jabber_chat_request_room_configure), - _("_Accept Defaults"), G_CALLBACK(jabber_chat_create_instant_room)); - } - } else if(code && !strcmp(code, "210")) { - /* server rewrote room-nick */ - if((chat = jabber_chat_find(js, jid->node, jid->domain))) { - g_free(chat->handle); - chat->handle = g_strdup(jid->resource); - } - } - } - if((z = xmlnode_get_child(y, "item"))) { - real_jid = xmlnode_get_attrib(z, "jid"); - affiliation = xmlnode_get_attrib(z, "affiliation"); - role = xmlnode_get_attrib(z, "role"); - if(affiliation != NULL && !strcmp(affiliation, "owner")) - flags |= PURPLE_CBFLAGS_FOUNDER; - if (role != NULL) { - if (!strcmp(role, "moderator")) - flags |= PURPLE_CBFLAGS_OP; - else if (!strcmp(role, "participant")) - flags |= PURPLE_CBFLAGS_VOICE; - } - } } else if(!strcmp(xmlns, "vcard-temp:x:update")) { xmlnode *photo = xmlnode_get_child(y, "photo"); if(photo) { @@ -687,75 +669,12 @@ return; } - - if(type && !strcmp(type, "unavailable")) { - gboolean nick_change = FALSE; - - /* If the chat nick is invalid, we haven't yet joined, or we've - * already left (it was probably us leaving after we closed the - * chat), we don't care. - */ - if (!jid->resource || !chat->conv || chat->left) { - if (chat->left && - jid->resource && chat->handle && !strcmp(jid->resource, chat->handle)) - jabber_chat_destroy(chat); - jabber_id_free(jid); - g_free(status); - g_free(avatar_hash); - g_free(nickname); - return; - } + if (type == NULL) { + xmlnode *x; + const char *real_jid = NULL; + const char *affiliation = NULL; + const char *role = NULL; - jabber_buddy_remove_resource(jb, jid->resource); - if(chat->muc) { - xmlnode *x; - for(x = xmlnode_get_child(packet, "x"); x; x = xmlnode_get_next_twin(x)) { - const char *xmlns, *nick, *code; - xmlnode *stat, *item; - if(!(xmlns = xmlnode_get_namespace(x)) || - strcmp(xmlns, "http://jabber.org/protocol/muc#user")) - continue; - if(!(stat = xmlnode_get_child(x, "status"))) - continue; - if(!(code = xmlnode_get_attrib(stat, "code"))) - continue; - if(!strcmp(code, "301")) { - /* XXX: we got banned */ - } else if(!strcmp(code, "303")) { - if(!(item = xmlnode_get_child(x, "item"))) - continue; - if(!(nick = xmlnode_get_attrib(item, "nick"))) - continue; - nick_change = TRUE; - if(!strcmp(jid->resource, chat->handle)) { - g_free(chat->handle); - chat->handle = g_strdup(nick); - } - purple_conv_chat_rename_user(PURPLE_CONV_CHAT(chat->conv), jid->resource, nick); - jabber_chat_remove_handle(chat, jid->resource); - break; - } else if(!strcmp(code, "307")) { - /* XXX: we got kicked */ - } else if(!strcmp(code, "321")) { - /* XXX: removed due to an affiliation change */ - } else if(!strcmp(code, "322")) { - /* XXX: removed because room is now members-only */ - } else if(!strcmp(code, "332")) { - /* XXX: removed due to system shutdown */ - } - } - } - if(!nick_change) { - if(!g_utf8_collate(jid->resource, chat->handle)) { - serv_got_chat_left(js->gc, chat->id); - jabber_chat_destroy(chat); - } else { - purple_conv_chat_remove_user(PURPLE_CONV_CHAT(chat->conv), jid->resource, - status); - jabber_chat_remove_handle(chat, jid->resource); - } - } - } else { /* * XEP-0045 mandates the presence to include a resource (which is * treated as the chat nick). Some non-compliant servers allow @@ -769,10 +688,61 @@ return; } + x = xmlnode_get_child_with_namespace(packet, "x", + "http://jabber.org/protocol/muc#user"); + if (x) { + xmlnode *status_node; + xmlnode *item_node; + + status_node = xmlnode_get_child(x, "status"); + if (status_node) { + const char *code = xmlnode_get_attrib(status_node, "code"); + if (purple_strequal(code, "201")) { + if ((chat = jabber_chat_find(js, jid->node, jid->domain))) { + chat->config_dialog_type = PURPLE_REQUEST_ACTION; + chat->config_dialog_handle = + purple_request_action(js->gc, + _("Create New Room"), + _("Create New Room"), + _("You are creating a new room. Would" + " you like to configure it, or" + " accept the default settings?"), + /* Default Action */ 1, + purple_connection_get_account(js->gc), NULL, chat->conv, + chat, 2, + _("_Configure Room"), G_CALLBACK(jabber_chat_request_room_configure), + _("_Accept Defaults"), G_CALLBACK(jabber_chat_create_instant_room)); + } + } else if (purple_strequal(code, "210")) { + /* server rewrote room-nick */ + if((chat = jabber_chat_find(js, jid->node, jid->domain))) { + g_free(chat->handle); + chat->handle = g_strdup(jid->resource); + } + } + } + + item_node = xmlnode_get_child(x, "item"); + if (item_node) { + real_jid = xmlnode_get_attrib(item_node, "jid"); + affiliation = xmlnode_get_attrib(item_node, "affiliation"); + role = xmlnode_get_attrib(item_node, "role"); + + if (purple_strequal(affiliation, "owner")) + flags |= PURPLE_CBFLAGS_FOUNDER; + if (role) { + if (g_str_equal(role, "moderator")) + flags |= PURPLE_CBFLAGS_OP; + else if (g_str_equal(role, "participant")) + flags |= PURPLE_CBFLAGS_VOICE; + } + } + } + if(!chat->conv) { char *room_jid = g_strdup_printf("%s@%s", jid->node, jid->domain); chat->id = i++; - chat->muc = muc; + chat->muc = (x != NULL); chat->conv = serv_got_joined_chat(js->gc, chat->id, room_jid); purple_conv_chat_set_nick(PURPLE_CONV_CHAT(chat->conv), chat->handle); @@ -791,6 +761,133 @@ else purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(chat->conv), jid->resource, flags); + } else if (g_str_equal(type, "unavailable")) { + gboolean nick_change = FALSE; + gboolean kick = FALSE; + gboolean is_our_resource = FALSE; /* Is the presence about us? */ + + /* If the chat nick is invalid, we haven't yet joined, or we've + * already left (it was probably us leaving after we closed the + * chat), we don't care. + */ + if (!jid->resource || !chat->conv || chat->left) { + if (chat->left && + jid->resource && chat->handle && !strcmp(jid->resource, chat->handle)) + jabber_chat_destroy(chat); + jabber_id_free(jid); + g_free(status); + g_free(avatar_hash); + g_free(nickname); + return; + } + + is_our_resource = (0 == g_utf8_collate(jid->resource, chat->handle)); + + jabber_buddy_remove_resource(jb, jid->resource); + if(chat->muc) { + xmlnode *x; + for(x = xmlnode_get_child(packet, "x"); x; x = xmlnode_get_next_twin(x)) { + const char *xmlns, *nick, *code; + xmlnode *stat, *item; + if(!(xmlns = xmlnode_get_namespace(x)) || + strcmp(xmlns, "http://jabber.org/protocol/muc#user")) + continue; + if(!(stat = xmlnode_get_child(x, "status"))) + continue; + if(!(code = xmlnode_get_attrib(stat, "code"))) + continue; + + item = xmlnode_get_child(x, "item"); + + if(!strcmp(code, "301")) { + /* XXX: we got banned */ + } else if(!strcmp(code, "303")) { + if (!item) + continue; + if(!(nick = xmlnode_get_attrib(item, "nick"))) + continue; + nick_change = TRUE; + if(!strcmp(jid->resource, chat->handle)) { + g_free(chat->handle); + chat->handle = g_strdup(nick); + } + purple_conv_chat_rename_user(PURPLE_CONV_CHAT(chat->conv), jid->resource, nick); + jabber_chat_remove_handle(chat, jid->resource); + break; + } else if(!strcmp(code, "307")) { + /* Someone was kicked from the room */ + xmlnode *reason = NULL, *actor = NULL; + const char *actor_name = NULL; + char *reason_text = NULL; + char *tmp; + + kick = TRUE; + + if (item) { + reason = xmlnode_get_child(item, "reason"); + actor = xmlnode_get_child(item, "actor"); + + if (reason != NULL) + reason_text = xmlnode_get_data(reason); + if (actor != NULL) + actor_name = xmlnode_get_attrib(actor, "jid"); + } + + if (reason_text == NULL) + reason_text = g_strdup(_("No reason")); + + if (is_our_resource) { + if (actor_name != NULL) + tmp = g_strdup_printf(_("You have been kicked by %s: (%s)"), + actor_name, reason_text); + else + tmp = g_strdup_printf(_("You have been kicked: (%s)"), + reason_text); + } else { + if (actor_name != NULL) + tmp = g_strdup_printf(_("Kicked by %s (%s)"), + actor_name, reason_text); + else + tmp = g_strdup_printf(_("Kicked (%s)"), + reason_text); + } + + g_free(reason_text); + g_free(status); + status = tmp; + } else if(!strcmp(code, "321")) { + /* XXX: removed due to an affiliation change */ + } else if(!strcmp(code, "322")) { + /* XXX: removed because room is now members-only */ + } else if(!strcmp(code, "332")) { + /* XXX: removed due to system shutdown */ + } + } + } + if(!nick_change) { + if (is_our_resource) { + if (kick) + purple_conv_chat_write(PURPLE_CONV_CHAT(chat->conv), jid->resource, + status, PURPLE_MESSAGE_SYSTEM, time(NULL)); + + serv_got_chat_left(js->gc, chat->id); + jabber_chat_destroy(chat); + } else { + purple_conv_chat_remove_user(PURPLE_CONV_CHAT(chat->conv), jid->resource, + status); + jabber_chat_remove_handle(chat, jid->resource); + } + } + } else { + /* A type that isn't available or unavailable */ + purple_debug_error("jabber", "MUC presence with bad type: %s\n", + type); + + jabber_id_free(jid); + g_free(avatar_hash); + g_free(status); + g_free(nickname); + g_return_if_reached(); } } else { buddy_name = g_strdup_printf("%s%s%s", jid->node ? jid->node : "", @@ -837,8 +934,8 @@ } if(state == JABBER_BUDDY_STATE_ERROR || - (type && (!strcmp(type, "unavailable") || - !strcmp(type, "unsubscribed")))) { + (type && (g_str_equal(type, "unavailable") || + g_str_equal(type, "unsubscribed")))) { PurpleConversation *conv; jabber_buddy_remove_resource(jb, jid->resource); @@ -867,7 +964,7 @@ g_free(buddy_name); } - if (caps && (!type || g_str_equal(type, "available"))) { + if (caps && !type) { /* handle Entity Capabilities (XEP-0115) */ const char *node = xmlnode_get_attrib(caps, "node"); const char *ver = xmlnode_get_attrib(caps, "ver"); diff -r a6d84d9de605 -r 14131ba5a07c libpurple/protocols/msn/soap.c --- a/libpurple/protocols/msn/soap.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/protocols/msn/soap.c Mon Jul 06 05:27:30 2009 +0000 @@ -80,7 +80,7 @@ conn->session = session; conn->host = g_strdup(host); conn->queue = g_queue_new(); - conn->unsafe_debug = g_getenv("PURPLE_UNSAFE_DEBUG") != NULL; + conn->unsafe_debug = purple_debug_is_unsafe(); return conn; } diff -r a6d84d9de605 -r 14131ba5a07c libpurple/protocols/myspace/message.c --- a/libpurple/protocols/myspace/message.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/protocols/myspace/message.c Mon Jul 06 05:27:30 2009 +0000 @@ -19,9 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ -#include "internal.h" +#include "myspace.h" #include "message.h" -#include "myspace.h" static void msim_msg_debug_string_element(gpointer data, gpointer user_data); diff -r a6d84d9de605 -r 14131ba5a07c libpurple/protocols/oscar/oscar.c --- a/libpurple/protocols/oscar/oscar.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/protocols/oscar/oscar.c Mon Jul 06 05:27:30 2009 +0000 @@ -1548,9 +1548,8 @@ * authenticate. * * AIM 5.9 and lower use an MD5-based login procedure called "BUCP". - * Note that some people were unable to log in to ICQ using the MD5 - * method, and so ICQ, when not using clientLogin, is still using a - * very insecure XOR-based login scheme. + * This authentication method is used for both ICQ and AIM when + * clientLogin is not enabled. */ if (purple_account_get_bool(account, "use_clientlogin", OSCAR_DEFAULT_USE_CLIENTLOGIN)) { send_client_login(od, purple_account_get_username(account)); diff -r a6d84d9de605 -r 14131ba5a07c libpurple/protocols/yahoo/util.c --- a/libpurple/protocols/yahoo/util.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/protocols/yahoo/util.c Mon Jul 06 05:27:30 2009 +0000 @@ -354,7 +354,7 @@ else if ((match = (char *) g_hash_table_lookup(ht, tmp->str))) g_string_append(s, match); else { - purple_debug(PURPLE_DEBUG_ERROR, "yahoo", + purple_debug_error("yahoo", "Unknown ansi code 'ESC[%sm'.\n", tmp->str); g_string_free(tmp, TRUE); break; @@ -423,7 +423,7 @@ ret = s->str; g_string_free(s, FALSE); - purple_debug(PURPLE_DEBUG_MISC, "yahoo", "yahoo_codes_to_html: Returning string: '%s'.\n", ret); + purple_debug_misc("yahoo", "yahoo_codes_to_html: Returning string: '%s'.\n", ret); return ret; } @@ -822,7 +822,7 @@ g_string_free(dest, FALSE); esc = g_strescape(ret, NULL); - purple_debug(PURPLE_DEBUG_MISC, "yahoo", "yahoo_html_to_codes: Returning string: '%s'.\n", esc); + purple_debug_misc("yahoo", "yahoo_html_to_codes: Returning string: '%s'.\n", esc); g_free(esc); yahoo_htc_queue_cleanup(colors); diff -r a6d84d9de605 -r 14131ba5a07c libpurple/protocols/yahoo/yahoo.c --- a/libpurple/protocols/yahoo/yahoo.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo.c Mon Jul 06 05:27:30 2009 +0000 @@ -390,7 +390,7 @@ b = i->data; g = purple_buddy_get_group(b); if (!purple_utf8_strcasecmp(group, purple_group_get_name(g))) { - purple_debug(PURPLE_DEBUG_MISC, "yahoo", + purple_debug_misc("yahoo", "Oh good, %s is in the right group (%s).\n", name, group); list = g_slist_delete_link(list, i); onlist = 1; @@ -399,7 +399,7 @@ } if (!onlist) { - purple_debug(PURPLE_DEBUG_MISC, "yahoo", + purple_debug_misc("yahoo", "Uhoh, %s isn't on the list (or not in this group), adding him to group %s.\n", name, group); if (!(g = purple_find_group(group))) { g = purple_group_new(group); @@ -427,7 +427,7 @@ for (i = list; i; i = i->next) { b = i->data; g = purple_buddy_get_group(b); - purple_debug(PURPLE_DEBUG_MISC, "yahoo", "Deleting Buddy %s from group %s.\n", name, + purple_debug_misc("yahoo", "Deleting Buddy %s from group %s.\n", name, purple_group_get_name(g)); purple_blist_remove_buddy(b); } @@ -801,9 +801,8 @@ PurpleBuddy *bud = purple_find_buddy(account, from); if (!bud) { - purple_debug(PURPLE_DEBUG_WARNING, "yahoo", - "%s is playing a game, and doesn't want " - "you to know.\n", from); + purple_debug_warning("yahoo", + "%s is playing a game, and doesn't want you to know.\n", from); } f = yahoo_friend_find(gc, from); @@ -1943,8 +1942,7 @@ name = g_strdup(purple_buddy_get_name(buddy)); account = purple_buddy_get_account(buddy); - purple_debug(PURPLE_DEBUG_INFO, "blist", - "Removing '%s' from buddy list.\n", name); + purple_debug_info("yahoo", "blist: Removing '%s' from buddy list.\n", name); purple_account_remove_buddy(account, buddy, group); purple_blist_remove_buddy(buddy); @@ -2382,14 +2380,14 @@ pos += 2; pktlen = yahoo_get16(buf + pos); pos += 2; - purple_debug(PURPLE_DEBUG_MISC, "yahoo", "p2p: %d bytes to read\n", len); + purple_debug_misc("yahoo", "p2p: %d bytes to read\n", len); pkt = yahoo_packet_new(0, 0, 0); pkt->service = yahoo_get16(buf + pos); pos += 2; pkt->status = yahoo_get32(buf + pos); pos += 4; pkt->id = yahoo_get32(buf + pos); pos += 4; - purple_debug(PURPLE_DEBUG_MISC, "yahoo", "p2p: Yahoo Service: 0x%02x Status: %d\n",pkt->service, pkt->status); + purple_debug_misc("yahoo", "p2p: Yahoo Service: 0x%02x Status: %d\n",pkt->service, pkt->status); yahoo_packet_read(pkt, buf + pos, pktlen); /* packet processing */ @@ -2909,8 +2907,7 @@ break; default: - purple_debug(PURPLE_DEBUG_ERROR, "yahoo", - "Unhandled service 0x%02x\n", pkt->service); + purple_debug_error("yahoo", "Unhandled service 0x%02x\n", pkt->service); break; } } @@ -2979,8 +2976,7 @@ pos += 2; pktlen = yahoo_get16(yd->rxqueue + pos); pos += 2; - purple_debug(PURPLE_DEBUG_MISC, "yahoo", - "%d bytes to read, rxlen is %d\n", pktlen, yd->rxlen); + purple_debug_misc("yahoo", "%d bytes to read, rxlen is %d\n", pktlen, yd->rxlen); if (yd->rxlen < (YAHOO_PACKET_HDRLEN + pktlen)) return; @@ -2991,8 +2987,7 @@ pkt->service = yahoo_get16(yd->rxqueue + pos); pos += 2; pkt->status = yahoo_get32(yd->rxqueue + pos); pos += 4; - purple_debug(PURPLE_DEBUG_MISC, "yahoo", - "Yahoo Service: 0x%02x Status: %d\n", + purple_debug_misc("yahoo", "Yahoo Service: 0x%02x Status: %d\n", pkt->service, pkt->status); pkt->id = yahoo_get32(yd->rxqueue + pos); pos += 4; @@ -4882,8 +4877,7 @@ gc = purple_conversation_get_gc(conv); yd = gc->proto_data; id = yd->conf_id; - purple_debug(PURPLE_DEBUG_INFO, "yahoo", - "Trying to join %s \n", args[0]); + purple_debug_info("yahoo", "Trying to join %s \n", args[0]); comp = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); g_hash_table_replace(comp, g_strdup("room"), g_ascii_strdown(args[0], -1)); @@ -4920,8 +4914,8 @@ g_return_val_if_fail(c != NULL, FALSE); - purple_debug(PURPLE_DEBUG_INFO, "yahoo", - "Sending on account %s to buddy %s.\n", username, c->name); + purple_debug_info("yahoo", "Sending on account %s to buddy %s.\n", + username, c->name); purple_conv_im_send_with_flags(PURPLE_CONV_IM(c), "", PURPLE_MESSAGE_INVISIBLE); return TRUE; diff -r a6d84d9de605 -r 14131ba5a07c libpurple/protocols/yahoo/yahoo_filexfer.c --- a/libpurple/protocols/yahoo/yahoo_filexfer.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_filexfer.c Mon Jul 06 05:27:30 2009 +0000 @@ -156,8 +156,8 @@ PurpleXfer *xfer; struct yahoo_xfer_data *xd; - purple_debug(PURPLE_DEBUG_INFO, "yahoo", - "AAA - in yahoo_receivefile_connected\n"); + purple_debug_info("yahoo", "in yahoo_receivefile_connected\n"); + if (!(xfer = data)) return; if (!(xd = xfer->data)) @@ -235,8 +235,8 @@ PurpleAccount *account; struct yahoo_data *yd; - purple_debug(PURPLE_DEBUG_INFO, "yahoo", - "AAA - in yahoo_sendfile_connected\n"); + purple_debug_info("yahoo", "in yahoo_sendfile_connected\n"); + if (!(xfer = data)) return; if (!(xd = xfer->data)) diff -r a6d84d9de605 -r 14131ba5a07c libpurple/protocols/yahoo/yahoo_packet.c --- a/libpurple/protocols/yahoo/yahoo_packet.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_packet.c Mon Jul 06 05:27:30 2009 +0000 @@ -187,15 +187,12 @@ pos = x; pkt->hash = g_slist_prepend(pkt->hash, pair); -#ifdef DEBUG - { + if (purple_debug_is_verbose()) { char *esc; esc = g_strescape(pair->value, NULL); - purple_debug(PURPLE_DEBUG_MISC, "yahoo", - "Key: %d \tValue: %s\n", pair->key, esc); + purple_debug_misc("yahoo", "Key: %d \tValue: %s\n", pair->key, esc); g_free(esc); } -#endif /* DEBUG */ } else { g_free(pair); } @@ -253,35 +250,35 @@ #ifdef YAHOO_DEBUG int i; - purple_debug(PURPLE_DEBUG_MISC, "yahoo", ""); + purple_debug_misc("yahoo", ""); for (i = 0; i + 1 < len; i += 2) { if ((i % 16 == 0) && i) { - purple_debug(PURPLE_DEBUG_MISC, NULL, "\n"); - purple_debug(PURPLE_DEBUG_MISC, "yahoo", ""); + purple_debug_misc(NULL, "\n"); + purple_debug_misc("yahoo", ""); } - purple_debug(PURPLE_DEBUG_MISC, NULL, "%02x%02x ", data[i], data[i + 1]); + purple_debug_misc(NULL, "%02x%02x ", data[i], data[i + 1]); } if (i < len) - purple_debug(PURPLE_DEBUG_MISC, NULL, "%02x", data[i]); + purple_debug_misc(NULL, "%02x", data[i]); - purple_debug(PURPLE_DEBUG_MISC, NULL, "\n"); - purple_debug(PURPLE_DEBUG_MISC, "yahoo", ""); + purple_debug_misc(NULL, "\n"); + purple_debug_misc("yahoo", ""); for (i = 0; i < len; i++) { if ((i % 16 == 0) && i) { - purple_debug(PURPLE_DEBUG_MISC, NULL, "\n"); - purple_debug(PURPLE_DEBUG_MISC, "yahoo", ""); + purple_debug_misc(NULL, "\n"); + purple_debug_misc("yahoo", ""); } if (g_ascii_isprint(data[i])) - purple_debug(PURPLE_DEBUG_MISC, NULL, "%c ", data[i]); + purple_debug_misc(NULL, "%c ", data[i]); else - purple_debug(PURPLE_DEBUG_MISC, NULL, ". "); + purple_debug_misc(NULL, ". "); } - purple_debug(PURPLE_DEBUG_MISC, NULL, "\n"); + purple_debug_misc(NULL, "\n"); #endif /* YAHOO_DEBUG */ } diff -r a6d84d9de605 -r 14131ba5a07c libpurple/protocols/yahoo/yahoochat.c --- a/libpurple/protocols/yahoo/yahoochat.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoochat.c Mon Jul 06 05:27:30 2009 +0000 @@ -648,7 +648,7 @@ } if (!msg) { - purple_debug(PURPLE_DEBUG_MISC, "yahoo", "Got a message packet with no message.\nThis probably means something important, but we're ignoring it.\n"); + purple_debug_misc("yahoo", "Got a message packet with no message.\nThis probably means something important, but we're ignoring it.\n"); return; } msg2 = yahoo_string_decode(gc, msg, utf8); diff -r a6d84d9de605 -r 14131ba5a07c libpurple/protocols/yahoo/ycht.c --- a/libpurple/protocols/yahoo/ycht.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/protocols/yahoo/ycht.c Mon Jul 06 05:27:30 2009 +0000 @@ -196,35 +196,35 @@ #ifdef YAHOO_YCHT_DEBUG int i; - purple_debug(PURPLE_DEBUG_MISC, "yahoo", ""); + purple_debug_misc("yahoo", ""); for (i = 0; i + 1 < len; i += 2) { if ((i % 16 == 0) && i) { - purple_debug(PURPLE_DEBUG_MISC, NULL, "\n"); - purple_debug(PURPLE_DEBUG_MISC, "yahoo", ""); + purple_debug_misc(NULL, "\n"); + purple_debug_misc("yahoo", ""); } - purple_debug(PURPLE_DEBUG_MISC, NULL, "%02hhx%02hhx ", data[i], data[i + 1]); + purple_debug_misc(NULL, "%02hhx%02hhx ", data[i], data[i + 1]); } if (i < len) - purple_debug(PURPLE_DEBUG_MISC, NULL, "%02hhx", data[i]); + purple_debug_misc(NULL, "%02hhx", data[i]); - purple_debug(PURPLE_DEBUG_MISC, NULL, "\n"); - purple_debug(PURPLE_DEBUG_MISC, "yahoo", ""); + purple_debug_misc(NULL, "\n"); + purple_debug_misc("yahoo", ""); for (i = 0; i < len; i++) { if ((i % 16 == 0) && i) { - purple_debug(PURPLE_DEBUG_MISC, NULL, "\n"); - purple_debug(PURPLE_DEBUG_MISC, "yahoo", ""); + purple_debug_misc(NULL, "\n"); + purple_debug_misc("yahoo", ""); } if (g_ascii_isprint(data[i])) - purple_debug(PURPLE_DEBUG_MISC, NULL, "%c ", data[i]); + purple_debug_misc(NULL, "%c ", data[i]); else - purple_debug(PURPLE_DEBUG_MISC, NULL, ". "); + purple_debug_misc(NULL, ". "); } - purple_debug(PURPLE_DEBUG_MISC, NULL, "\n"); + purple_debug_misc(NULL, "\n"); #endif /* YAHOO_YCHT_DEBUG */ } @@ -507,16 +507,15 @@ service = yahoo_get32(ycht->rxqueue + pos); pos += 4; status = yahoo_get16(ycht->rxqueue + pos); pos += 2; pktlen = yahoo_get16(ycht->rxqueue + pos); pos += 2; - purple_debug(PURPLE_DEBUG_MISC, "yahoo", - "ycht: %d bytes to read, rxlen is %d\n", pktlen, ycht->rxlen); + purple_debug_misc("yahoo", "ycht: %d bytes to read, rxlen is %d\n", + pktlen, ycht->rxlen); if (ycht->rxlen < (YCHT_HEADER_LEN + pktlen)) return; purple_debug_misc("yahoo", "--==Incoming YCHT packet==--\n"); - purple_debug(PURPLE_DEBUG_MISC, "yahoo", - "YCHT Service: 0x%02x Version: 0x%02x Status: 0x%02x\n", - service, version, status); + purple_debug_misc("yahoo", "YCHT Service: 0x%02x Version: 0x%02x Status: 0x%02x\n", + service, version, status); ycht_packet_dump(ycht->rxqueue, YCHT_HEADER_LEN + pktlen); pkt = ycht_packet_new(version, service, status); diff -r a6d84d9de605 -r 14131ba5a07c libpurple/prpl.c --- a/libpurple/prpl.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/prpl.c Mon Jul 06 05:27:30 2009 +0000 @@ -282,7 +282,8 @@ g_slist_free(list); - /* we get to re-use the last status we found */ + /* The buddy is no longer online, they are therefore by definition not + * still typing to us. */ if (!purple_status_is_online(status)) serv_got_typing_stopped(purple_account_get_connection(account), name); } diff -r a6d84d9de605 -r 14131ba5a07c libpurple/purple-remote --- a/libpurple/purple-remote Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/purple-remote Mon Jul 06 05:27:30 2009 +0000 @@ -161,7 +161,6 @@ purple.PurpleSavedstatusSetSubstatus(current, account, type, message) purple.PurpleSavedstatusActivateForAccount(current, account) else: - accounts = purple.PurpleAccountsGetAllActive() saved = purple.PurpleSavedstatusNew("", status_type) purple.PurpleSavedstatusSetMessage(saved, message) purple.PurpleSavedstatusActivate(saved) diff -r a6d84d9de605 -r 14131ba5a07c libpurple/tests/test_cipher.c --- a/libpurple/tests/test_cipher.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/tests/test_cipher.c Mon Jul 06 05:27:30 2009 +0000 @@ -168,6 +168,11 @@ purple_cipher_context_destroy(context); \ } +START_TEST(test_sha1_empty_string) { + SHA1_TEST("", "da39a3ee5e6b4b0d3255bfef95601890afd80709"); +} +END_TEST + START_TEST(test_sha1_a) { SHA1_TEST("a", "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8"); } @@ -190,6 +195,66 @@ END_TEST /****************************************************************************** + * SHA-256 Tests + *****************************************************************************/ +#define SHA256_TEST(data, digest) { \ + PurpleCipher *cipher = NULL; \ + PurpleCipherContext *context = NULL; \ + gchar cdigest[65]; \ + gboolean ret = FALSE; \ + \ + cipher = purple_ciphers_find_cipher("sha256"); \ + context = purple_cipher_context_new(cipher, NULL); \ + \ + if((data)) { \ + purple_cipher_context_append(context, (guchar *)(data), strlen((data))); \ + } else { \ + gint j; \ + guchar buff[1000]; \ + \ + memset(buff, 'a', 1000); \ + \ + for(j = 0; j < 1000; j++) \ + purple_cipher_context_append(context, buff, 1000); \ + } \ + \ + ret = purple_cipher_context_digest_to_str(context, sizeof(cdigest), cdigest, \ + NULL); \ + \ + fail_unless(ret == TRUE, NULL); \ + \ + fail_unless(strcmp((digest), cdigest) == 0, NULL); \ + \ + purple_cipher_context_destroy(context); \ +} + +START_TEST(test_sha256_empty_string) { + SHA256_TEST("", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"); +} +END_TEST + +START_TEST(test_sha256_a) { + SHA256_TEST("a", "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"); +} +END_TEST + +START_TEST(test_sha256_abc) { + SHA256_TEST("abc", "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"); +} +END_TEST + +START_TEST(test_sha256_abcd_gibberish) { + SHA256_TEST("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"); +} +END_TEST + +START_TEST(test_sha256_1000_as_1000_times) { + SHA256_TEST(NULL, "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0"); +} +END_TEST + +/****************************************************************************** * DES Tests *****************************************************************************/ #define DES_TEST(in, keyz, out, len) { \ @@ -726,12 +791,22 @@ /* sha1 tests */ tc = tcase_create("SHA1"); + tcase_add_test(tc, test_sha1_empty_string); tcase_add_test(tc, test_sha1_a); tcase_add_test(tc, test_sha1_abc); tcase_add_test(tc, test_sha1_abcd_gibberish); tcase_add_test(tc, test_sha1_1000_as_1000_times); suite_add_tcase(s, tc); + /* sha256 tests */ + tc = tcase_create("SHA256"); + tcase_add_test(tc, test_sha256_empty_string); + tcase_add_test(tc, test_sha256_a); + tcase_add_test(tc, test_sha256_abc); + tcase_add_test(tc, test_sha256_abcd_gibberish); + tcase_add_test(tc, test_sha256_1000_as_1000_times); + suite_add_tcase(s, tc); + /* des tests */ tc = tcase_create("DES"); tcase_add_test(tc, test_des_12345678); diff -r a6d84d9de605 -r 14131ba5a07c libpurple/util.c --- a/libpurple/util.c Mon Jul 06 04:37:06 2009 +0000 +++ b/libpurple/util.c Mon Jul 06 05:27:30 2009 +0000 @@ -979,8 +979,8 @@ buf[buflen] = '\0'; pln = buf; - len = 2; - while(isdigit((gint) text[len])) len++; + len = (*(text+2) == 'x' ? 3 : 2); + while(isxdigit((gint) text[len])) len++; if(text[len] == ';') len++; } else @@ -4042,7 +4042,7 @@ } } - if(g_getenv("PURPLE_UNSAFE_DEBUG")) + if(purple_debug_is_unsafe()) purple_debug_misc("util", "Request: '%s'\n", gfud->request); else purple_debug_misc("util", "request constructed\n"); @@ -4159,7 +4159,7 @@ g_return_val_if_fail(url != NULL, NULL); g_return_val_if_fail(callback != NULL, NULL); - if(g_getenv("PURPLE_UNSAFE_DEBUG")) + if(purple_debug_is_unsafe()) purple_debug_info("util", "requested to fetch (%s), full=%d, user_agent=(%s), http11=%d\n", url, full, user_agent?user_agent:"(null)", http11); diff -r a6d84d9de605 -r 14131ba5a07c pidgin/gtkaccount.c --- a/pidgin/gtkaccount.c Mon Jul 06 04:37:06 2009 +0000 +++ b/pidgin/gtkaccount.c Mon Jul 06 05:27:30 2009 +0000 @@ -1990,8 +1990,9 @@ /* This is for when set_account() is called for a single account */ const char *path; path = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon"); - if (path != NULL && *path != '\0') + if ((path != NULL) && (*path != '\0')) { img = purple_imgstore_new_from_file(path); + } } } else { img = purple_buddy_icons_find_account_icon(account); diff -r a6d84d9de605 -r 14131ba5a07c pidgin/gtkblist.c --- a/pidgin/gtkblist.c Mon Jul 06 04:37:06 2009 +0000 +++ b/pidgin/gtkblist.c Mon Jul 06 05:27:30 2009 +0000 @@ -1575,7 +1575,7 @@ if (!(purple_blist_node_get_flags(node) & PURPLE_BLIST_NODE_FLAG_NO_SAVE)) { show_offline = purple_blist_node_get_bool(node, "show_offline"); - pidgin_new_item_from_stock(menu, show_offline ? _("Hide when offline") : _("Show when offline"), + pidgin_new_item_from_stock(menu, show_offline ? _("Hide When Offline") : _("Show When Offline"), NULL, G_CALLBACK(gtk_blist_menu_showoffline_cb), node, 0, 0, NULL); } @@ -1759,7 +1759,7 @@ G_CALLBACK(gtk_blist_menu_alias_cb), node, 0, 0, NULL); if (!(purple_blist_node_get_flags(node) & PURPLE_BLIST_NODE_FLAG_NO_SAVE)) { gboolean show_offline = purple_blist_node_get_bool(node, "show_offline"); - pidgin_new_item_from_stock(menu, show_offline ? _("Hide when offline") : _("Show when offline"), + pidgin_new_item_from_stock(menu, show_offline ? _("Hide When Offline") : _("Show When Offline"), NULL, G_CALLBACK(gtk_blist_menu_showoffline_cb), node, 0, 0, NULL); } @@ -6300,7 +6300,7 @@ selected = (gnode == selected_node); if (!expanded) { - g_snprintf(group_count, sizeof(group_count), " (%d/%d)", + g_snprintf(group_count, sizeof(group_count), "%d/%d", purple_blist_get_group_online_count(group), purple_blist_get_group_size(group, FALSE)); } @@ -6319,11 +6319,18 @@ esc = g_markup_escape_text(group->name, -1); if (text_color) { - mark = g_strdup_printf("%s%s", - text_color, text_font, esc ? esc : "", group_count); + mark = g_strdup_printf("%s%s%s%s", + text_color, text_font, + esc ? esc : "", + !expanded ? " (" : "", + group_count, + !expanded ? ")" : ""); } else { - mark = g_strdup_printf("%s%s", - text_font, esc ? esc : "", group_count); + mark = g_strdup_printf("%s%s%s%s", + text_font, esc ? esc : "", + !expanded ? " (" : "", + group_count, + !expanded ? ")" : ""); } g_free(esc); diff -r a6d84d9de605 -r 14131ba5a07c pidgin/gtkconv.c --- a/pidgin/gtkconv.c Mon Jul 06 04:37:06 2009 +0000 +++ b/pidgin/gtkconv.c Mon Jul 06 05:27:30 2009 +0000 @@ -1770,7 +1770,7 @@ g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free); } - button = pidgin_new_item_from_stock(menu, _("Last said"), GTK_STOCK_INDEX, + button = pidgin_new_item_from_stock(menu, _("Last Said"), GTK_STOCK_INDEX, G_CALLBACK(menu_last_said_cb), PIDGIN_CONVERSATION(conv), 0, 0, NULL); g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free); if (!get_mark_for_user(PIDGIN_CONVERSATION(conv), who)) @@ -8196,15 +8196,11 @@ static void build_warn_close_dialog(PidginWindow *gtkwin) { - GtkWidget *label; - GtkWidget *vbox, *hbox; - GtkWidget *img; + GtkWidget *label, *vbox, *hbox, *img; g_return_if_fail(warn_close_dialog == NULL); - - warn_close_dialog = gtk_dialog_new_with_buttons( - _("Confirm close"), + warn_close_dialog = gtk_dialog_new_with_buttons(_("Confirm close"), GTK_WINDOW(gtkwin->window), GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CLOSE, GTK_RESPONSE_OK, NULL); diff -r a6d84d9de605 -r 14131ba5a07c pidgin/gtkdialogs.c --- a/pidgin/gtkdialogs.c Mon Jul 06 04:37:06 2009 +0000 +++ b/pidgin/gtkdialogs.c Mon Jul 06 05:27:30 2009 +0000 @@ -231,7 +231,7 @@ {N_("Turkish"), "tr", "Serdar Soytetir", "tulliana@gmail.com"}, {N_("Urdu"), "ur", "RKVS Raman", "rkvsraman@gmail.com"}, {N_("Vietnamese"), "vi", N_("T.M.Thanh and the Gnome-Vi Team"), "gnomevi-list@lists.sf.net"}, - {N_("Simplified Chinese"), "zh_CN", "Funda Wang", "fundawang@linux.net.cn"}, + {N_("Simplified Chinese"), "zh_CN", "Aron Xu", "aronmalache@163.com"}, {N_("Hong Kong Chinese"), "zh_HK", "Abel Cheung", "abelindsay@gmail.com"}, {N_("Hong Kong Chinese"), "zh_HK", "Ambrose C. Li", "acli@ada.dhs.org"}, {N_("Hong Kong Chinese"), "zh_HK", "Paladin R. Liu", "paladin@ms1.hinet.net"}, @@ -294,6 +294,7 @@ {N_("Swedish"), "sv", "Christian Rose", NULL}, {N_("Turkish"), "tr", "Ahmet Alp BALKAN", NULL}, {N_("Simplified Chinese"), "zh_CN", "Hashao, Rocky S. Lee", NULL}, + {N_("Simplified Chinese"), "zh_CN", "Funda Wang", "fundawang@linux.net.cn"}, {N_("Traditional Chinese"), "zh_TW", "Hashao, Rocky S. Lee", NULL}, {NULL, NULL, NULL, NULL} }; diff -r a6d84d9de605 -r 14131ba5a07c pidgin/gtkprefs.c --- a/pidgin/gtkprefs.c Mon Jul 06 04:37:06 2009 +0000 +++ b/pidgin/gtkprefs.c Mon Jul 06 05:27:30 2009 +0000 @@ -1457,7 +1457,7 @@ gtk_size_group_add_widget(sg, label); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); - vbox = pidgin_make_frame(ret, _("Conversation Window Hiding")); + vbox = pidgin_make_frame(ret, _("Conversation Window")); label = pidgin_prefs_dropdown(vbox, _("_Hide new IM conversations:"), PURPLE_PREF_STRING, PIDGIN_PREFS_ROOT "/conversations/im/hide_new", _("Never"), "never", @@ -1467,6 +1467,9 @@ gtk_size_group_add_widget(sg, label); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); +#ifdef _WIN32 + pidgin_prefs_checkbox(_("Minimi_ze new conversation windows"), PIDGIN_PREFS_ROOT "/win32/minimize_new_convs", vbox); +#endif /* All the tab options! */ vbox = pidgin_make_frame(ret, _("Tabs")); @@ -1575,8 +1578,6 @@ #ifdef _WIN32 pidgin_prefs_checkbox(_("F_lash window when IMs are received"), PIDGIN_PREFS_ROOT "/win32/blink_im", vbox); - - pidgin_prefs_checkbox(_("Minimi_ze new conversation windows"), PIDGIN_PREFS_ROOT "/win32/minimize_new_convs", vbox); #endif pidgin_prefs_labeled_spin_button(vbox, @@ -1584,7 +1585,6 @@ PIDGIN_PREFS_ROOT "/conversations/minimum_entry_lines", 1, 8, NULL); - #if GTK_CHECK_VERSION(2,4,0) vbox = pidgin_make_frame(ret, _("Font")); if (purple_running_gnome()) @@ -1593,7 +1593,11 @@ fontpref = pidgin_prefs_checkbox(_("Use font from _theme"), PIDGIN_PREFS_ROOT "/conversations/use_theme_font", vbox); font_name = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/custom_font"); - font_button = gtk_font_button_new_with_font(font_name ? font_name : NULL); + if ((font_name == NULL) || (*font_name == '\0')) { + font_button = gtk_font_button_new(); + } else { + font_button = gtk_font_button_new_with_font(font_name); + } gtk_font_button_set_show_style(GTK_FONT_BUTTON(font_button), TRUE); hbox = pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("Conversation _font:"), NULL, font_button, FALSE, NULL); @@ -2777,9 +2781,7 @@ } static int -prefs_notebook_add_page(const char *text, - GtkWidget *page, - int ind) +prefs_notebook_add_page(const char *text, GtkWidget *page, int ind) { #if GTK_CHECK_VERSION(2,4,0) return gtk_notebook_append_page(GTK_NOTEBOOK(prefsnotebook), page, gtk_label_new(text)); diff -r a6d84d9de605 -r 14131ba5a07c pidgin/plugins/perl/Makefile.am --- a/pidgin/plugins/perl/Makefile.am Mon Jul 06 04:37:06 2009 +0000 +++ b/pidgin/plugins/perl/Makefile.am Mon Jul 06 05:27:30 2009 +0000 @@ -44,7 +44,7 @@ ${LN_S} -f $$srcloc/$$f $$f; \ done; \ fi - @cd common && $(perlpath) Makefile.PL $(PERL_MM_PARAMS) + @cd common && $(perlpath) Makefile.PL common/Makefile.PL: common/Makefile.PL.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) @@ -53,7 +53,7 @@ @for dir in $(perl_dirs); do \ cd $$dir && \ if [ ! -f Makefile ]; then \ - $(perlpath) Makefile.PL $(PERL_MM_PARAMS); \ + $(perlpath) Makefile.PL; \ fi && \ ($(MAKE) CC="$(CC)" CCFLAGS="$(PERL_CFLAGS) $(CFLAGS)" $(PERL_EXTRA_OPTS) || \ $(MAKE) CC="$(CC)" CCFLAGS="$(PERL_CFLAGS) $(CFLAGS)" $(PERL_EXTRA_OPTS)) && \ diff -r a6d84d9de605 -r 14131ba5a07c pidgin/plugins/perl/common/Makefile.PL.in --- a/pidgin/plugins/perl/common/Makefile.PL.in Mon Jul 06 04:37:06 2009 +0000 +++ b/pidgin/plugins/perl/common/Makefile.PL.in Mon Jul 06 05:27:30 2009 +0000 @@ -13,4 +13,15 @@ 'OBJECT' => '$(O_FILES)', # link all the C files too 'TYPEMAPS' => ["@top_srcdir@/libpurple/plugins/perl/common/typemap"], # 'OPTIMIZE' => '-g', # For debugging. + 'INSTALLDIRS' => 'vendor', + 'INSTALL_BASE' => '$(prefix)', + 'INSTALLVENDORARCH' => '$(libdir)/pidgin/perl', + 'INSTALLVENDORMAN3DIR' => '$(mandir)/man3', + 'macro' => { + 'prefix' => '@prefix@', + 'exec_prefix' => '@exec_prefix@', + 'libdir' => '@libdir@', + 'mandir' => '@mandir@', + 'datarootdir' => '@datarootdir@', + }, ); diff -r a6d84d9de605 -r 14131ba5a07c pidgin/plugins/pidginrc.c --- a/pidgin/plugins/pidginrc.c Mon Jul 06 04:37:06 2009 +0000 +++ b/pidgin/plugins/pidginrc.c Mon Jul 06 05:27:30 2009 +0000 @@ -1,7 +1,13 @@ /** - * @file purplerc.c Purple gtk resource control plugin. + * @file pidginrc.c Pidgin GTK+ resource control plugin. + * @ingroup pidgin + */ + +/* pidgin * - * Copyright (C) 2005 Etan Reisner + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -612,7 +618,7 @@ DISPLAY_VERSION, N_("Provides access to commonly used gtkrc settings."), N_("Provides access to commonly used gtkrc settings."), - "Etan Reisner ", + "Etan Reisner ", PURPLE_WEBSITE, purplerc_plugin_load, purplerc_plugin_unload, diff -r a6d84d9de605 -r 14131ba5a07c po/ChangeLog --- a/po/ChangeLog Mon Jul 06 04:37:06 2009 +0000 +++ b/po/ChangeLog Mon Jul 06 05:27:30 2009 +0000 @@ -2,9 +2,13 @@ version 2.6.0 * Armenian translation added (David Avsharyan) + * Catalan translation updated (Josep Puigdemont) + * Finnish translation updated (Timo Jyrinki) + * German translation updated (Jochen Kemnade and Björn Voigt) * Lao translation updated (Anousak Souphavah) * Slovenian translation updated (Martin Srebotnjak) * Swahili translation added (Paul Msegeya) + * Simplified Chinese translation updated under new translator (Aron Xu) version 2.5.8 * No changes diff -r a6d84d9de605 -r 14131ba5a07c po/ca.po --- a/po/ca.po Mon Jul 06 04:37:06 2009 +0000 +++ b/po/ca.po Mon Jul 06 05:27:30 2009 +0000 @@ -33,8 +33,8 @@ msgstr "" "Project-Id-Version: Pidgin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-02 01:34-0700\n" -"PO-Revision-Date: 2009-06-29 08:37+0200\n" +"POT-Creation-Date: 2009-07-06 00:17+0200\n" +"PO-Revision-Date: 2009-07-06 00:19+0200\n" "Last-Translator: Josep Puigdemont i Casamajó \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" @@ -2215,9 +2215,8 @@ msgid "(%s) %s : %s\n" msgstr "(%s) %s : %s\n" -#, fuzzy msgid "Error creating conference." -msgstr "S'ha produït un error en crear la connexió" +msgstr "S'ha produït un error en crear la conferència." #, c-format msgid "You are using %s, but this plugin requires %s." @@ -2624,14 +2623,14 @@ #. * description msgid "" "When viewing logs, this plugin will include logs from other IM clients. " -"Currently, this includes Adium, MSN Messenger, and Trillian.\n" +"Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n" "\n" "WARNING: This plugin is still alpha code and may crash frequently. Use it " "at your own risk!" msgstr "" "Quan es visualitzin els registres, aquest connector inclourà registres " "d'altres clients de MI. De moment, es poden incloure els d'Adium, MSN " -"Messenger, i Trillian.\n" +"Messenger, aMSN, i Trillian.\n" "\n" "Avís: aquest connector encara està en desenvolupament i pot ser que es pengi." @@ -2680,7 +2679,7 @@ "Desa els missatges que s'hagin enviat a un usuari fora de línia com a avís" msgid "" -"The rest of the messages will be saved as pounce. You can edit/delete the " +"The rest of the messages will be saved as pounces. You can edit/delete the " "pounce from the `Buddy Pounce' dialog." msgstr "" "La resta de missatges es desaran com a un avís. Podeu editar o suprimir " @@ -3882,172 +3881,6 @@ msgid "Local Time" msgstr "Hora local" -msgid "Last Activity" -msgstr "Darrera activitat" - -msgid "Service Discovery Info" -msgstr "Informació del servei de descoberta" - -msgid "Service Discovery Items" -msgstr "Elements del servei de descoberta" - -# http://xmpp.org/extensions/xep-0033.html -msgid "Extended Stanza Addressing" -msgstr "Bloc d'adreçament estès" - -msgid "Multi-User Chat" -msgstr "Xat multi-usuari" - -msgid "Multi-User Chat Extended Presence Information" -msgstr "Informació de presència estesa per a xats multi-usuari" - -msgid "In-Band Bytestreams" -msgstr "" - -msgid "Ad-Hoc Commands" -msgstr "Ordres Ad-Hoc" - -msgid "PubSub Service" -msgstr "Servei PubSub" - -msgid "SOCKS5 Bytestreams" -msgstr "Flux de bits SOCK5" - -msgid "Out of Band Data" -msgstr "" - -msgid "XHTML-IM" -msgstr "XHTML-IM" - -msgid "In-Band Registration" -msgstr "" - -msgid "User Location" -msgstr "Ubicació de l'usuari" - -msgid "User Avatar" -msgstr "Avatar de l'usuari" - -msgid "Chat State Notifications" -msgstr "Notificacions de l'estat del xat" - -msgid "Software Version" -msgstr "Versió del programari" - -msgid "Stream Initiation" -msgstr "Iniciació del flux" - -msgid "File Transfer" -msgstr "Transferència de fitxers" - -msgid "User Mood" -msgstr "Estat d'ànim de l'usuari" - -msgid "User Activity" -msgstr "Activitat de l'usuari" - -msgid "Entity Capabilities" -msgstr "Capacitats de l'entitat" - -msgid "Encrypted Session Negotiations" -msgstr "Negociacions de la sessió xifrada" - -# Pot ser també música, cançó... (josep) -# Vegeu: http://xmpp.org/extensions/xep-0118.html -msgid "User Tune" -msgstr "Melodia de l'usuari" - -# Nota: "Roster" en XMPP és la llista de contactes (josep) -msgid "Roster Item Exchange" -msgstr "Intercanvi d'element de la llista de contactes" - -# Vegeu: http://xmpp.org/extensions/xep-0152.html (josep) -# Nota: codi mort -msgid "Reachability Address" -msgstr "Adreça de localització" - -msgid "User Profile" -msgstr "Perfil de l'usuari" - -# Nota: Jingle és una extensió d'XMPP i ho considerem nom propi (josep) -# http://www.xmpp.org/extensions/xep-0166.html -msgid "Jingle" -msgstr "Jingle" - -# FIXME -msgid "Jingle Audio" -msgstr "Àudio amb Jingle" - -msgid "User Nickname" -msgstr "Sobrenom de l'usuari" - -msgid "Jingle ICE UDP" -msgstr "Jingle ICE UDP" - -msgid "Jingle ICE TCP" -msgstr "Jingle ICE TCP" - -msgid "Jingle Raw UDP" -msgstr "Jingle Raw UDP" - -msgid "Jingle Video" -msgstr "Vídeo amb Jingle" - -msgid "Jingle DTMF" -msgstr "Jingle DTMF" - -msgid "Message Receipts" -msgstr "Recepció de missatges" - -msgid "Public Key Publishing" -msgstr "Publicació de claus públiques" - -msgid "User Chatting" -msgstr "Converses d'usuari" - -msgid "User Browsing" -msgstr "Navegació d'usuaris" - -msgid "User Gaming" -msgstr "Jocs d'usuari" - -msgid "User Viewing" -msgstr "Visualització d'usuaris" - -msgid "Ping" -msgstr "Ping" - -# Vegeu: http://xmpp.org/extensions/xep-0200.html -# Nota: Això es refereix a les capabilitats de l'altre interlocutor -# No apareix a l'aplicació final, és codi mort dins un #if 0 ... #endif (josep) -msgid "Stanza Encryption" -msgstr "Blocs xifrats" - -msgid "Entity Time" -msgstr "Hora de l'entitat" - -msgid "Delayed Delivery" -msgstr "Lliurament endarrerit" - -msgid "Collaborative Data Objects" -msgstr "Objectes de dades col·laboratius" - -msgid "File Repository and Sharing" -msgstr "Dipòsit de fitxers i compartició" - -msgid "STUN Service Discovery for Jingle" -msgstr "Servei de descoberta STUN per al Jingle" - -msgid "Simplified Encrypted Session Negotiation" -msgstr "Negociació simple del xifratge de la sessió" - -# Mireu l'RFC (josep) -msgid "Hop Check" -msgstr "Comprovació dels salts" - -msgid "Capabilities" -msgstr "Capacitats" - msgid "Priority" msgstr "Prioritat" @@ -4058,7 +3891,7 @@ msgid "%s ago" msgstr "fa %s" -msgid "Logged off" +msgid "Logged Off" msgstr "Desconnectat" # Segons la viquipèdia @@ -4840,7 +4673,7 @@ msgid "Error in chat %s" msgstr "S'ha produït un error en el xat %s" -msgid "An error occured on the in-band bytestream transfer\n" +msgid "An error occurred on the in-band bytestream transfer\n" msgstr "" msgid "Transfer was closed." @@ -5175,11 +5008,11 @@ msgid "Non-IM Contacts" msgstr "Contactes que no són de MI" -#, fuzzy, c-format +#, c-format msgid "%s sent you a voice chat invite, which is not yet supported." msgstr "" -"%s us ha enviat una invitació a la seva càmera web, però això encara no està " -"implementat." +"%s us ha enviat una invitació per fer una conversa de veu, però això encara " +"no està implementat." msgid "Nudge" msgstr "Donar un cop de colze" @@ -5657,10 +5490,10 @@ msgid "Retrieving buddy list" msgstr "S'està recuperant la llista d'amics" -#, fuzzy, c-format +#, c-format msgid "%s requests to view your webcam, but this request is not yet supported." msgstr "" -"%s us ha enviat una invitació a la seva càmera web, però això encara no està " +"%s ha sol·licitat poder veure la vostra càmera web, però això encara no està " "implementat." #, c-format @@ -6399,8 +6232,8 @@ "acabeu d'enviar." msgid "" -"Unable to connect to server. Please enter the address of the server you wish " -"to connect to." +"Unable to connect to server. Please enter the address of the server to which " +"you wish to connect." msgstr "" "No s'ha pogut connectar al servidor. Introduïu l'adreça del servidor al qual " "us vulgueu connectar." @@ -6430,9 +6263,8 @@ msgid "Server port" msgstr "Port en el servidor" -#, fuzzy msgid "Received unexpected response from " -msgstr "S'ha rebut una resposta HTTP inesperada del servidor." +msgstr "S'ha rebut una resposta inesperada de " #. username connecting too frequently msgid "" @@ -6443,15 +6275,16 @@ "deu minuts i intenteu-ho de nou. Si continueu intentant-ho, haureu d'esperar " "encara més temps." -#, fuzzy, c-format +#, c-format msgid "Error requesting " -msgstr "S'ha produït un error en resoldre %s" +msgstr "S'ha produït en sol·licitar " msgid "Incorrect password." msgstr "La contrasenya no és correcta." msgid "AOL does not allow your screen name to authenticate via this site." msgstr "" +"AOL no permet que autentiqueu aquest nom d'usuari a través d'aquest web." msgid "Could not join chat room" msgstr "No s'ha pogut entrar a la sala de xat" @@ -6784,9 +6617,9 @@ msgstr "S'ha rebut l'autorització" #. Unregistered username -#. uid is not exist -msgid "Invalid username." -msgstr "El nom d'usuari no és vàlid" +#. the username does not exist +msgid "Username does not exist" +msgstr "L'usuari no existeix" #. Suspended account msgid "Your account is currently suspended." @@ -6980,6 +6813,9 @@ msgid "Member Since" msgstr "Membre des de" +msgid "Capabilities" +msgstr "Capacitats" + msgid "Profile" msgstr "Perfil" @@ -8026,6 +7862,10 @@ msgid "Enter the text from the image" msgstr "Introduïu el text de la imatge" +#. uid is not exist +msgid "Invalid username." +msgstr "El nom d'usuari no és vàlid" + #, c-format msgid "Unknown reply when checking password (0x%02X)" msgstr "" @@ -8225,6 +8065,9 @@ msgid "Video Camera" msgstr "Càmera de vídeo" +msgid "File Transfer" +msgstr "Transferència de fitxers" + msgid "Supports" msgstr "Permet" @@ -9043,6 +8886,9 @@ msgid "Network Statistics" msgstr "Estadístiques de xarxa" +msgid "Ping" +msgstr "Ping" + msgid "Ping failed" msgstr "Ha fallat el ping" @@ -9670,7 +9516,6 @@ msgid "Received invalid data" msgstr "S'han rebut dades invàlides" -#. Password incorrect msgid "Incorrect Password" msgstr "La contrasenya no és correcta" @@ -9682,10 +9527,6 @@ "El compte està blocat perquè s'ha intentat entrar massa cops.\n" "Això es pot solucionar entrant al web de Yahoo!" -#. the username does not exist -msgid "Username does not exist" -msgstr "L'usuari no existeix" - #. indicates a lock of some description msgid "" "Account locked: Unknown reason.\n" @@ -10659,9 +10500,12 @@ msgid "View _Log" msgstr "_Visualitza el registre" -msgid "Hide when offline" +msgid "Hide When Offline" msgstr "Amaga quan estigui fora de línia" +msgid "Show When Offline" +msgstr "Mostra quan estigui fora de línia" + msgid "_Alias..." msgstr "À_lies..." @@ -11063,112 +10907,98 @@ msgstr "Color de fons" msgid "The background color for the buddy list" -msgstr "" - -#, fuzzy +msgstr "El color de fons de la llista d'amics" + msgid "Layout" -msgstr "Lasià" +msgstr "Format" msgid "The layout of icons, name, and status of the blist" -msgstr "" - +msgstr "El format de les icones, el nom, i l'estat de la llista d'amics" + +# Color de fons quan la blist està expandida #. Group -#, fuzzy msgid "Expanded Background Color" -msgstr "Color de fons" - -#, fuzzy +msgstr "Color de fons expandit" + msgid "The background color of an expanded group" -msgstr "Nom del color de fons" - -#, fuzzy +msgstr "El color de fons d'un grup expandit" + msgid "Expanded Text" -msgstr "Mida de l'expansor" +msgstr "Text expandit" msgid "The text information for when a group is expanded" -msgstr "" - -#, fuzzy +msgstr "Text informatiu d'un grup expandit" + msgid "Collapsed Background Color" -msgstr "Selecciona el color de fons" - -#, fuzzy +msgstr "Color de fons col·lapsat" + msgid "The background color of a collapsed group" -msgstr "El color de fons com a GdkColor" - -#, fuzzy +msgstr "El color de fons d'un grup col·lapsat" + msgid "Collapsed Text" -msgstr "_Redueix" +msgstr "Text col·lapsat" msgid "The text information for when a group is collapsed" -msgstr "" +msgstr "Text informatiu d'un grup col·lapsat" #. Buddy -#, fuzzy msgid "Contact/Chat Background Color" -msgstr "Selecciona el color de fons" - -#, fuzzy +msgstr "Color de fons dels contactes i xats" + msgid "The background color of a contact or chat" -msgstr "El color de fons com a GdkColor" - -#, fuzzy +msgstr "El color de fons d'un contacte o un xat" + msgid "Contact Text" -msgstr "Drecera" +msgstr "Text del contacte" msgid "The text information for when a contact is expanded" -msgstr "" - -#, fuzzy +msgstr "Text informatiu quan un contacte s'expandeix" + msgid "On-line Text" -msgstr "En línia" - -#, fuzzy +msgstr "Text en línia" + msgid "The text information for when a buddy is online" -msgstr "Aconsegueix dades sobre l'amic seleccionat" - -#, fuzzy +msgstr "Text informatiu per quan un amic estigui en línia" + msgid "Away Text" -msgstr "Absent" - -#, fuzzy +msgstr "Text d'absència" + msgid "The text information for when a buddy is away" -msgstr "Aconsegueix dades sobre l'amic seleccionat" - -#, fuzzy +msgstr "Text informatiu per quan un amic estigui absent" + msgid "Off-line Text" -msgstr "Fora de línia" - -#, fuzzy +msgstr "Text de fora de línia" + msgid "The text information for when a buddy is off-line" -msgstr "Aconsegueix dades sobre l'amic seleccionat" - -#, fuzzy +msgstr "Text informatiu per quan un amic estigui fora de línia" + msgid "Idle Text" -msgstr "Text sobre l'estat d'ànim" - -#, fuzzy +msgstr "Text d'inactivitat" + msgid "The text information for when a buddy is idle" -msgstr "Aconsegueix dades sobre l'amic seleccionat" +msgstr "Text informatiu per quan un amic estigui inactiu" msgid "Message Text" msgstr "Text del missatge" msgid "The text information for when a buddy has an unread message" -msgstr "" - -#, fuzzy +msgstr "Text informatiu per quan un amic tingui un missatge per llegir" + msgid "Message (Nick Said) Text" -msgstr "Text del missatge" +msgstr "Text del missatge (on s'hi ha dit el sobrenom)" msgid "" "The text information for when a chat has an unread message that mentions " "your nick" msgstr "" - -#, fuzzy +"Text informatiu quan hi ha un missatge per llegir que conté el vostre " +"sobrenom en un xat" + msgid "The text information for a buddy's status" -msgstr "Canvia la informació d'usuari de %s" +msgstr "Text informatiu per l'estat d'un amic" + +msgid "Type the host name for this certificate." +msgstr "Entreu el nom de l'ordinador al qual pertany aquest certificat." #. Widget creation function msgid "SSL Servers" @@ -11215,7 +11045,7 @@ msgid "Get Away Message" msgstr "Aconsegueix el missatge d'absència" -msgid "Last said" +msgid "Last Said" msgstr "El darrer que es digué" msgid "Unable to save icon file to disk." @@ -12110,7 +11940,7 @@ msgid "Hyperlink visited color" msgstr "Color dels enllaços visitats" -msgid "Color to draw hyperlinks after it has been visited (or activated)." +msgid "Color to draw hyperlink after it has been visited (or activated)." msgstr "" "El color amb el qual es pintaran els enllaços que ja s'hagin visitat (o " "activat)." @@ -12152,15 +11982,21 @@ msgid "Action Message Name Color for Whispered Message" msgstr "Color del nom del missatge d'acció per a missatges xiuxiuejats" +msgid "Color to draw the name of a whispered action message." +msgstr "Color amb el qual es pintaran els missatges d'acció xiuxiuejats." + msgid "Whisper Message Name Color" msgstr "Color dels missatges xiuxiuejats enviats" +msgid "Color to draw the name of a whispered message." +msgstr "Color amb el qual es pintaran els missatges xiuxiuejats." + msgid "Typing notification color" msgstr "Color per a les notificacions de quan s'escriu" -msgid "The color to use for the typing notification font" -msgstr "" -"El color que s'emprarà per a les notificacions indicant que s'està escrivint" +msgid "The color to use for the typing notification" +msgstr "" +"El color que s'emprarà per a les notificacions indicant que s'està teclejant" msgid "Typing notification font" msgstr "Tipus de lletra de les notificacions quan s'escriu" @@ -12574,6 +12410,9 @@ msgstr "" "S'ha triat l'ordre per al navegador «manualment», però no se n'ha indicat cap." +msgid "No message" +msgstr "Cap missatge" + msgid "Open All Messages" msgstr "Obre tots els missatges" @@ -12591,9 +12430,6 @@ msgid "You have pounced!" msgstr "Us han envestit!" -msgid "No message" -msgstr "Cap missatge" - msgid "The following plugins will be unloaded." msgstr "Es descarregaran els connectors següents." @@ -12809,9 +12645,8 @@ msgid "On unread messages" msgstr "Si hi ha missatges sense llegir" -# REVIEW -msgid "Conversation Window Hiding" -msgstr "Ocultació de les finestres" +msgid "Conversation Window" +msgstr "Finestra de conversa" msgid "_Hide new IM conversations:" msgstr "_Amaga noves converses de MI:" @@ -12819,6 +12654,9 @@ msgid "When away" msgstr "En estar absent" +msgid "Minimi_ze new conversation windows" +msgstr "_Minimitza les finestres de conversa noves" + #. All the tab options! msgid "Tabs" msgstr "Pestanyes" @@ -12877,9 +12715,6 @@ msgid "F_lash window when IMs are received" msgstr "_Fes que la finestra faci un flaix quan hi arribin missatges" -msgid "Minimi_ze new conversation windows" -msgstr "_Minimitza les finestres de conversa noves" - msgid "Minimum input area height in lines:" msgstr "Alçada mínima en línies de l'àrea d'entrada:" @@ -12915,8 +12750,9 @@ msgid "Example: stunserver.org" msgstr "Exemple: stunserver.org" -msgid "_Autodetect IP address" -msgstr "Detecta l'_adreça IP automàticament" +#, c-format +msgid "Use _automatically detected IP address: %s" +msgstr "Empra l'_adreça IP detectada automàticament: %s" msgid "Public _IP:" msgstr "IP _pública:" @@ -13286,33 +13122,18 @@ msgid "Status for %s" msgstr "Estat per a %s" -#. -#. * TODO: We should enable/disable the add button based on -#. * whether the user has entered all required data. That -#. * would eliminate the need for this check and provide a -#. * better user experience. -#. -msgid "Custom Smiley" -msgstr "Emoticona personalitzada" - -msgid "More Data needed" -msgstr "Calen més dades" - -msgid "Please provide a shortcut to associate with the smiley." -msgstr "Especifiqueu una drecera associada a l'emoticona." - #, c-format msgid "" "A custom smiley for '%s' already exists. Please use a different shortcut." msgstr "" "Ja hi ha una emoticona personalitzada per a «%s». Indiqueu-ne una de diferent." +msgid "Custom Smiley" +msgstr "Emoticona personalitzada" + msgid "Duplicate Shortcut" msgstr "Drecera duplicada" -msgid "Please select an image for the smiley." -msgstr "Seleccioneu una imatge per a l'emoticona." - msgid "Edit Smiley" msgstr "Edita l'emoticona" @@ -13423,8 +13244,8 @@ msgstr "No es pot enviar el llançador" msgid "" -"You dragged a desktop launcher. Most likely you wanted to send whatever this " -"launcher points to instead of this launcher itself." +"You dragged a desktop launcher. Most likely you wanted to send the target of " +"this launcher instead of this launcher itself." msgstr "" "Heu arrossegat un llançador de l'escriptori. Segurament voleu enviar allò a " "què aquest llançador apunta i no pas el llançador." @@ -13565,79 +13386,67 @@ msgstr "" "Mostra informació estadística sobre la disponibilitat dels vostres amics" -#, fuzzy msgid "Server name request" -msgstr "Adreça del servidor" - -#, fuzzy +msgstr "Sol·licitud del nom del servidor" + msgid "Enter an XMPP Server" -msgstr "Introduïu un servidor de conferències" - -#, fuzzy +msgstr "Introduïu un servidor XMPP" + msgid "Select an XMPP server to query" -msgstr "Seleccioneu a quin servidor de conferències consultar" - -#, fuzzy +msgstr "Seleccioneu el servidor XMPP a consultar" + msgid "Find Services" -msgstr "Serveis en línia" - -#, fuzzy +msgstr "Cerca serveis" + msgid "Add to Buddy List" -msgstr "Envia la llista d'amics" - -#, fuzzy +msgstr "Afegeix a la llista d'amics" + msgid "Gateway" -msgstr "Passi a absent" - -#, fuzzy +msgstr "Passarel·la" + msgid "Directory" -msgstr "Directori dels registres" - -#, fuzzy +msgstr "Directori" + msgid "PubSub Collection" -msgstr "Selecció de sons" - -#, fuzzy +msgstr "Col·lecció PubSub" + +# Mes info a xep-0060 msgid "PubSub Leaf" -msgstr "Servei PubSub" - -#, fuzzy +msgstr "Fulla PubSub" + msgid "" "\n" "Description: " msgstr "" "\n" -"Descripció: Xerraire" +"Descripció: " #. Create the window. -#, fuzzy msgid "Service Discovery" -msgstr "Informació del servei de descoberta" - -#, fuzzy +msgstr "Servei de descoberta" + msgid "_Browse" -msgstr "_Navegador:" - -#, fuzzy +msgstr "_Navega" + msgid "Server does not exist" -msgstr "L'usuari no existeix." - -#, fuzzy +msgstr "El servidor no existeix" + msgid "Server does not support service discovery" -msgstr "El servidor no permet blocar" - -#, fuzzy +msgstr "El servidor no permet la descoberta de serveis" + +# xep-0060 msgid "XMPP Service Discovery" -msgstr "Informació del servei de descoberta" +msgstr "Servei de descoberta XMPP" msgid "Allows browsing and registering services." -msgstr "" - -#, fuzzy +msgstr "Permet navegar i registrar-se a serveis." + msgid "" "This plugin is useful for registering with legacy transports or other XMPP " "services." -msgstr "Aquest connector és útil per a depurar servidors i clients XMPP." +msgstr "" +"Aquest servei és útil per registrar-vos a transports antics o altres serveis " +"XMPP." msgid "Buddy is idle" msgstr "L'amic està inactiu" @@ -14034,7 +13843,7 @@ #. * summary msgid "" "The Music Messaging Plugin allows a number of users to simultaneously work " -"on a piece of music by editting a common score in real-time." +"on a piece of music by editing a common score in real-time." msgstr "" "El connector per a missatgeria de música permet que diferents usuaris puguin " "treballar en una mateixa peça de música, editant la mateixa partitura en " @@ -14292,7 +14101,7 @@ #. *< summary msgid "" "Adds a Send button to the entry area of the conversation window. Intended " -"for when no physical keyboard is present." +"for use when no physical keyboard is present." msgstr "" "Afegeix un botó d'Enviar a l'àrea d'entrada de la finestra de conversa. Està " "pensat per situacions en què no hi ha cap teclat." @@ -14348,96 +14157,78 @@ "Substitueix el text dels missatges que s'envien emprant les regles que hàgiu " "establert." -#, fuzzy msgid "Just logged in" -msgstr "No està connectat" - -#, fuzzy +msgstr "Acabat de connectar" + msgid "Just logged out" -msgstr "%s ha sortit." +msgstr "Acabat de desconnectar" msgid "" "Icon for Contact/\n" "Icon for Unknown person" msgstr "" - -#, fuzzy +"Icona per a un contacte/\n" +"Icona per a una persona desconeguda" + msgid "Icon for Chat" -msgstr "Entra a un xat" - -#, fuzzy +msgstr "Icona per un xat" + msgid "Ignored" -msgstr "Ignora" - -#, fuzzy +msgstr "Ignorat" + msgid "Founder" -msgstr "Més alt" - -#, fuzzy +msgstr "Fundador" + msgid "Operator" -msgstr "Opera" +msgstr "Operador" msgid "Half Operator" -msgstr "" - -#, fuzzy +msgstr "Mig operador" + msgid "Authorization dialog" -msgstr "S'ha donat l'autorització" - -#, fuzzy +msgstr "Diàleg d'autorització" + msgid "Error dialog" -msgstr "Error" - -#, fuzzy +msgstr "Diàleg d'error" + msgid "Information dialog" -msgstr "Informació" +msgstr "Diàleg d'informació" msgid "Mail dialog" -msgstr "" - -#, fuzzy +msgstr "Diàleg del correu" + msgid "Question dialog" -msgstr "Diàleg de sol·licitud" - -#, fuzzy +msgstr "Diàleg de pregunta" + msgid "Warning dialog" -msgstr "Nivell d'avís" +msgstr "Diàleg d'avís" msgid "What kind of dialog is this?" -msgstr "" - -#, fuzzy +msgstr "Quin tipus de diàleg és aquest?" + msgid "Status Icons" -msgstr "Estat per a %s" - -# FIXME: no poso localització perquè l'usuari ho podria -# confondre amb "ubicació" (josep) -#, fuzzy +msgstr "Icona d'estat" + msgid "Chatroom Emblems" -msgstr "Característiques locals de la sala de xat" - -#, fuzzy +msgstr "Distintius de les sales de xat" + msgid "Dialog Icons" -msgstr "Canvia la icona" - -#, fuzzy +msgstr "Icones dels quadres de diàleg" + msgid "Pidgin Icon Theme Editor" -msgstr "Control de temes GTK+ del Pidgin" - -#, fuzzy +msgstr "Editor de temes d'icona del Pidgin" + msgid "Contact" -msgstr "Informació del contacte" - -#, fuzzy +msgstr "Contacte" + msgid "Pidgin Buddylist Theme Editor" -msgstr "Tema de la llista d'amics" - -#, fuzzy +msgstr "Editor de temes per a la llista d'amics del Pidgin" + msgid "Edit Buddylist Theme" -msgstr "Tema de la llista d'amics" +msgstr "Edita el tema de la llista d'amics" msgid "Edit Icon Theme" -msgstr "" +msgstr "Edita el tema d'icones" #. *< type #. *< ui_requirement @@ -14446,16 +14237,14 @@ #. *< priority #. *< id #. * description -#, fuzzy msgid "Pidgin Theme Editor" -msgstr "Control de temes GTK+ del Pidgin" +msgstr "Editor de temes del Pidgin" #. *< name #. *< version #. * summary -#, fuzzy msgid "Pidgin Theme Editor." -msgstr "Control de temes GTK+ del Pidgin" +msgstr "Editor de temes del Pidgin" # FIXME (josep) #. *< type @@ -14627,7 +14416,7 @@ msgstr "Opcions específiques de la versió del Pidgin per al Windows" msgid "" -"Provides options specific to Pidgin for Windows , such as buddy list docking." +"Provides options specific to Pidgin for Windows, such as buddy list docking." msgstr "" "Proporciona opcions específiques per a la versió Windows del Pidgin, com ara " "l'acoblament de la llista d'amics." @@ -14670,6 +14459,167 @@ msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "Aquest connector és útil per a depurar servidors i clients XMPP." +#~ msgid "Last Activity" +#~ msgstr "Darrera activitat" + +#~ msgid "Service Discovery Info" +#~ msgstr "Informació del servei de descoberta" + +#~ msgid "Service Discovery Items" +#~ msgstr "Elements del servei de descoberta" + +# http://xmpp.org/extensions/xep-0033.html +#~ msgid "Extended Stanza Addressing" +#~ msgstr "Bloc d'adreçament estès" + +#~ msgid "Multi-User Chat" +#~ msgstr "Xat multi-usuari" + +#~ msgid "Multi-User Chat Extended Presence Information" +#~ msgstr "Informació de presència estesa per a xats multi-usuari" + +#~ msgid "Ad-Hoc Commands" +#~ msgstr "Ordres Ad-Hoc" + +#~ msgid "PubSub Service" +#~ msgstr "Servei PubSub" + +#~ msgid "SOCKS5 Bytestreams" +#~ msgstr "Flux de bits SOCK5" + +#~ msgid "XHTML-IM" +#~ msgstr "XHTML-IM" + +#~ msgid "User Location" +#~ msgstr "Ubicació de l'usuari" + +#~ msgid "User Avatar" +#~ msgstr "Avatar de l'usuari" + +#~ msgid "Chat State Notifications" +#~ msgstr "Notificacions de l'estat del xat" + +#~ msgid "Software Version" +#~ msgstr "Versió del programari" + +#~ msgid "Stream Initiation" +#~ msgstr "Iniciació del flux" + +#~ msgid "User Mood" +#~ msgstr "Estat d'ànim de l'usuari" + +#~ msgid "User Activity" +#~ msgstr "Activitat de l'usuari" + +#~ msgid "Entity Capabilities" +#~ msgstr "Capacitats de l'entitat" + +#~ msgid "Encrypted Session Negotiations" +#~ msgstr "Negociacions de la sessió xifrada" + +# Pot ser també música, cançó... (josep) +# Vegeu: http://xmpp.org/extensions/xep-0118.html +#~ msgid "User Tune" +#~ msgstr "Melodia de l'usuari" + +# Nota: "Roster" en XMPP és la llista de contactes (josep) +#~ msgid "Roster Item Exchange" +#~ msgstr "Intercanvi d'element de la llista de contactes" + +# Vegeu: http://xmpp.org/extensions/xep-0152.html (josep) +# Nota: codi mort +#~ msgid "Reachability Address" +#~ msgstr "Adreça de localització" + +#~ msgid "User Profile" +#~ msgstr "Perfil de l'usuari" + +# Nota: Jingle és una extensió d'XMPP i ho considerem nom propi (josep) +# http://www.xmpp.org/extensions/xep-0166.html +#~ msgid "Jingle" +#~ msgstr "Jingle" + +# FIXME +#~ msgid "Jingle Audio" +#~ msgstr "Àudio amb Jingle" + +#~ msgid "User Nickname" +#~ msgstr "Sobrenom de l'usuari" + +#~ msgid "Jingle ICE UDP" +#~ msgstr "Jingle ICE UDP" + +#~ msgid "Jingle ICE TCP" +#~ msgstr "Jingle ICE TCP" + +#~ msgid "Jingle Raw UDP" +#~ msgstr "Jingle Raw UDP" + +#~ msgid "Jingle Video" +#~ msgstr "Vídeo amb Jingle" + +#~ msgid "Jingle DTMF" +#~ msgstr "Jingle DTMF" + +#~ msgid "Message Receipts" +#~ msgstr "Recepció de missatges" + +#~ msgid "Public Key Publishing" +#~ msgstr "Publicació de claus públiques" + +#~ msgid "User Chatting" +#~ msgstr "Converses d'usuari" + +#~ msgid "User Browsing" +#~ msgstr "Navegació d'usuaris" + +#~ msgid "User Gaming" +#~ msgstr "Jocs d'usuari" + +#~ msgid "User Viewing" +#~ msgstr "Visualització d'usuaris" + +# Vegeu: http://xmpp.org/extensions/xep-0200.html +# Nota: Això es refereix a les capabilitats de l'altre interlocutor +# No apareix a l'aplicació final, és codi mort dins un #if 0 ... #endif (josep) +#~ msgid "Stanza Encryption" +#~ msgstr "Blocs xifrats" + +#~ msgid "Entity Time" +#~ msgstr "Hora de l'entitat" + +#~ msgid "Delayed Delivery" +#~ msgstr "Lliurament endarrerit" + +#~ msgid "Collaborative Data Objects" +#~ msgstr "Objectes de dades col·laboratius" + +#~ msgid "File Repository and Sharing" +#~ msgstr "Dipòsit de fitxers i compartició" + +#~ msgid "STUN Service Discovery for Jingle" +#~ msgstr "Servei de descoberta STUN per al Jingle" + +#~ msgid "Simplified Encrypted Session Negotiation" +#~ msgstr "Negociació simple del xifratge de la sessió" + +# Mireu l'RFC (josep) +#~ msgid "Hop Check" +#~ msgstr "Comprovació dels salts" + +# REVIEW +#~ msgid "Conversation Window Hiding" +#~ msgstr "Ocultació de les finestres" + +#~ msgid "More Data needed" +#~ msgstr "Calen més dades" + +#~ msgid "Please provide a shortcut to associate with the smiley." +#~ msgstr "Especifiqueu una drecera associada a l'emoticona." + +#~ msgid "Please select an image for the smiley." +#~ msgstr "Seleccioneu una imatge per a l'emoticona." + #~ msgid "Activate which ID?" #~ msgstr "Quin ID voleu activar?" diff -r a6d84d9de605 -r 14131ba5a07c po/de.po --- a/po/de.po Mon Jul 06 04:37:06 2009 +0000 +++ b/po/de.po Mon Jul 06 05:27:30 2009 +0000 @@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-02 01:34-0700\n" -"PO-Revision-Date: 2009-06-28 11:42+0200\n" +"POT-Creation-Date: 2009-07-05 13:02+0200\n" +"PO-Revision-Date: 2009-07-05 13:02+0200\n" "Last-Translator: Jochen Kemnade \n" "Language-Team: Deutsch \n" "MIME-Version: 1.0\n" @@ -1562,7 +1562,6 @@ msgid "Lastlog plugin." msgstr "Verlauf-Plugin." -#, c-format msgid "" "\n" "Fetching TinyURL..." @@ -1892,7 +1891,6 @@ "Fehler beim Lesen vom Auflösungsprozess:\n" "%s" -#, c-format msgid "Resolver process exited without answering our request" msgstr "Auflösungsprozess hat sich beendet ohne die Anfrage zu beantworten" @@ -2193,9 +2191,8 @@ msgid "(%s) %s : %s\n" msgstr "(%s) %s : %s\n" -#, fuzzy msgid "Error creating conference." -msgstr "Fehler beim Herstellen der Verbindung" +msgstr "Fehler beim Erstellen der Konferenz" #, c-format msgid "You are using %s, but this plugin requires %s." @@ -2604,14 +2601,14 @@ #. * description msgid "" "When viewing logs, this plugin will include logs from other IM clients. " -"Currently, this includes Adium, MSN Messenger, and Trillian.\n" +"Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n" "\n" "WARNING: This plugin is still alpha code and may crash frequently. Use it " "at your own risk!" msgstr "" "Dieses Plugin zeigt auch die Mitschnitte anderer Sofortnachrichtenprogramme " -"im Mitschnittsbetrachter an. Momentan sind das Adium, MSN Messenger und " -"Trillian.\n" +"im Mitschnittsbetrachter an. Momentan sind das Adium, MSN Messenger, aMSN " +"und Trillian.\n" "WARNUNG: Dieses Plugin ist immer noch im Alpha-Stadium und kann oft " "abstürzen. Benutzung auf eigene Gefahr!" @@ -2659,10 +2656,10 @@ msgstr "Sichert Nachrichten an einen Offline-Benutzer als Alarm." msgid "" -"The rest of the messages will be saved as pounce. You can edit/delete the " +"The rest of the messages will be saved as pounces. You can edit/delete the " "pounce from the `Buddy Pounce' dialog." msgstr "" -"Die folgenden Nachrichten werden als Alarm gesichert. Sie können den Alarm " +"Die folgenden Nachrichten werden als Alarme gesichert. Sie können den Alarm " "im `Buddy-Alarm'-Dialog ändern oder löschen." #, c-format @@ -3863,159 +3860,6 @@ msgid "Local Time" msgstr "Lokale Zeit" -msgid "Last Activity" -msgstr "Letzte Aktivität" - -msgid "Service Discovery Info" -msgstr "Information zur Dienstsuche" - -msgid "Service Discovery Items" -msgstr "Elemente der Dienstsuche" - -msgid "Extended Stanza Addressing" -msgstr "Erweiterte Blockadressierung" - -msgid "Multi-User Chat" -msgstr "Mehrbenutzer-Chat" - -msgid "Multi-User Chat Extended Presence Information" -msgstr "Erweiterte Anwesenheitsinformation im Mehrbenutzer-Chat" - -msgid "In-Band Bytestreams" -msgstr "Bandinterner Bytestrom(" - -msgid "Ad-Hoc Commands" -msgstr "Ad Hoc-Kommando" - -msgid "PubSub Service" -msgstr "PubSub-Dienst" - -msgid "SOCKS5 Bytestreams" -msgstr "SOCKS5-Bytestrom" - -msgid "Out of Band Data" -msgstr "Bandexterne Daten" - -msgid "XHTML-IM" -msgstr "XHTML-IM" - -msgid "In-Band Registration" -msgstr "Bandinterne Registrierung" - -msgid "User Location" -msgstr "Benutzerort" - -msgid "User Avatar" -msgstr "Benutzer-Avatar" - -msgid "Chat State Notifications" -msgstr "Chat-Status-Benachrichtigung" - -msgid "Software Version" -msgstr "Software-Version" - -msgid "Stream Initiation" -msgstr "Strom-Initialisierung" - -msgid "File Transfer" -msgstr "Dateiübertragung" - -msgid "User Mood" -msgstr "Benutzerstimmung" - -msgid "User Activity" -msgstr "Benutzeraktivität" - -msgid "Entity Capabilities" -msgstr "Instanz-Fähigkeiten" - -msgid "Encrypted Session Negotiations" -msgstr "Aushandlung einer verschlüsselten Sitzung" - -msgid "User Tune" -msgstr "Benutzer anpassen" - -msgid "Roster Item Exchange" -msgstr "Mitgliedsverzeichnis-Eintragsaustausch" - -msgid "Reachability Address" -msgstr "Erreichbare Adresse" - -msgid "User Profile" -msgstr "Benutzerprofil" - -msgid "Jingle" -msgstr "Jingle" - -msgid "Jingle Audio" -msgstr "Jingle-Klang" - -msgid "User Nickname" -msgstr "Benutzer-Spitzname" - -msgid "Jingle ICE UDP" -msgstr "Jingle ICE UDP" - -msgid "Jingle ICE TCP" -msgstr "Jingle ICE TCP" - -msgid "Jingle Raw UDP" -msgstr "Jingle Raw UDP" - -msgid "Jingle Video" -msgstr "Jingle-Video" - -msgid "Jingle DTMF" -msgstr "Jingle DTMF" - -msgid "Message Receipts" -msgstr "Nachrichtempfänge" - -msgid "Public Key Publishing" -msgstr "Öffentliche Schlüssel-Veröffentlichung" - -msgid "User Chatting" -msgstr "Benutzer, die chatten" - -msgid "User Browsing" -msgstr "Benutzer, die im Web surfen" - -msgid "User Gaming" -msgstr "Benutzer, die spielen" - -msgid "User Viewing" -msgstr "Benutzer, die schauen" - -msgid "Ping" -msgstr "Ping" - -msgid "Stanza Encryption" -msgstr "Blockverschlüsselung" - -msgid "Entity Time" -msgstr "Instanzzeit" - -msgid "Delayed Delivery" -msgstr "Verzögerte Lieferung" - -msgid "Collaborative Data Objects" -msgstr "Kooperative Datenobjekte" - -msgid "File Repository and Sharing" -msgstr "Speicherbereich und gemeinsame Benutzung von Dateien" - -msgid "STUN Service Discovery for Jingle" -msgstr "STUN-Dienstsuche für Jingle" - -msgid "Simplified Encrypted Session Negotiation" -msgstr "Vereinfachte Aushandlung der verschlüsselten Sitzung" - -msgid "Hop Check" -msgstr "Hop-Überprüfung" - -msgid "Capabilities" -msgstr "Fähigkeiten" - msgid "Priority" msgstr "Priorität" @@ -4026,7 +3870,7 @@ msgid "%s ago" msgstr "vor %s" -msgid "Logged off" +msgid "Logged Off" msgstr "Abgemeldet" msgid "Middle Name" @@ -4215,7 +4059,6 @@ msgid "Read Error" msgstr "Fehler beim Lesen" -#, c-format msgid "" "Could not find alternative XMPP connection methods after failing to connect " "directly.\n" @@ -4812,7 +4655,8 @@ msgid "Error in chat %s" msgstr "Fehler im Chat %s" -msgid "An error occured on the in-band bytestream transfer\n" +#, fuzzy +msgid "An error occurred on the in-band bytestream transfer\n" msgstr "Beim Übertragen der Datei trat ein Fehler auf\n" msgid "Transfer was closed." @@ -4918,219 +4762,166 @@ "%s ist auf der lokalen Liste, aber nicht auf der Serverliste. Möchten Sie, " "dass der Buddy hinzugefügt wird?" -#, c-format msgid "Unable to parse message" msgstr "Kann die Nachricht nicht parsen" -#, c-format msgid "Syntax Error (probably a client bug)" msgstr "Syntaxfehler (wahrscheinlich ein Client-Bug)" -#, c-format msgid "Invalid email address" msgstr "Ungültige E-Mail-Adresse" -#, c-format msgid "User does not exist" msgstr "Benutzer existiert nicht" -#, c-format msgid "Fully qualified domain name missing" msgstr "Der Fully Qualified Domain Name fehlt" -#, c-format msgid "Already logged in" msgstr "Schon angemeldet" -#, c-format msgid "Invalid username" msgstr "Ungültiger Benutzername" -#, c-format msgid "Invalid friendly name" msgstr "Ungültiger Freundesname" -#, c-format msgid "List full" msgstr "Liste voll" -#, c-format msgid "Already there" msgstr "Schon da" -#, c-format msgid "Not on list" msgstr "Nicht auf der Liste" -#, c-format msgid "User is offline" msgstr "Benutzer ist offline" -#, c-format msgid "Already in the mode" msgstr "Bereits in diesem Modus" -#, c-format msgid "Already in opposite list" msgstr "Bereits in der „Gegenteil-Liste“" -#, c-format msgid "Too many groups" msgstr "Zu viele Gruppen" -#, c-format msgid "Invalid group" msgstr "Ungültige Gruppe" -#, c-format msgid "User not in group" msgstr "Benutzer ist nicht in der Gruppe" -#, c-format msgid "Group name too long" msgstr "Name der Gruppe ist zu lang" -#, c-format msgid "Cannot remove group zero" msgstr "Kann die Gruppe „Null“ nicht entfernen" -#, c-format msgid "Tried to add a user to a group that doesn't exist" msgstr "" "Versuchte einen Benutzer zu einer nichtexistierenden Gruppe hinzuzufügen" -#, c-format msgid "Switchboard failed" msgstr "Vermittlung gescheitert" -#, c-format msgid "Notify transfer failed" msgstr "Übertragung der Benachrichtigung gescheitert" -#, c-format msgid "Required fields missing" msgstr "Notwendige Felder fehlen" -#, c-format msgid "Too many hits to a FND" msgstr "Zu viele Treffer zu einem FND" -#, c-format msgid "Not logged in" msgstr "Nicht angemeldet" -#, c-format msgid "Service temporarily unavailable" msgstr "Dienst momentan nicht verfügbar" -#, c-format msgid "Database server error" msgstr "Fehler des Datenbank-Servers" -#, c-format msgid "Command disabled" msgstr "Kommando abgeschaltet" -#, c-format msgid "File operation error" msgstr "Dateiverarbeitungsfehler" -#, c-format msgid "Memory allocation error" msgstr "Fehler bei der Speicheranforderung" -#, c-format msgid "Wrong CHL value sent to server" msgstr "Falscher CHL-Wert zum Server gesendet" -#, c-format msgid "Server busy" msgstr "Server beschäftigt" -#, c-format msgid "Server unavailable" msgstr "Server unerreichbar" -#, c-format msgid "Peer notification server down" msgstr "Peer-Benachrichtigungsserver nicht erreichbar" -#, c-format msgid "Database connect error" msgstr "Datenbank-Verbindungsfehler" -#, c-format msgid "Server is going down (abandon ship)" msgstr "Server fährt runter (melden Sie sich ab)" -#, c-format msgid "Error creating connection" msgstr "Fehler beim Herstellen der Verbindung" -#, c-format msgid "CVR parameters are either unknown or not allowed" msgstr "CVR-Parameter sind entweder unbekannt oder nicht erlaubt" -#, c-format msgid "Unable to write" msgstr "Schreiben nicht möglich" -#, c-format msgid "Session overload" msgstr "Sitzung überlastet" -#, c-format msgid "User is too active" msgstr "Benutzer ist zu aktiv" -#, c-format msgid "Too many sessions" msgstr "Zu viele Sitzungen" -#, c-format msgid "Passport not verified" msgstr "Passport (MSN Benutzerausweis) wurde nicht überprüft" -#, c-format msgid "Bad friend file" msgstr "Falsche Friends-Datei" -#, c-format msgid "Not expected" msgstr "Nicht erwartet" -#, c-format msgid "Friendly name changes too rapidly" msgstr "Benutzernamen werden zu oft geändert" -#, c-format msgid "Server too busy" msgstr "Server ist zu beschäftigt" -#, c-format msgid "Authentication failed" msgstr "Authentifizierung fehlgeschlagen" -#, c-format msgid "Not allowed when offline" msgstr "Nicht erlaubt im Offline-Modus" -#, c-format msgid "Not accepting new users" msgstr "Akzeptiert keine neuen Benutzer" -#, c-format msgid "Kids Passport without parental consent" msgstr "Kinder-Passwort ohne die Zustimmung der Eltern" -#, c-format msgid "Passport account not yet verified" msgstr "Passport-Konto wurde noch nicht überprüft" msgid "Passport account suspended" msgstr "Passport-Konto gesperrt" -#, c-format msgid "Bad ticket" msgstr "Falsches Ticket" @@ -5148,10 +4939,11 @@ msgid "Non-IM Contacts" msgstr "Nicht-IM-Kontakte" -#, fuzzy, c-format +#, c-format msgid "%s sent you a voice chat invite, which is not yet supported." msgstr "" -"%s hat Ihnen eine Webcam-Einladung gesendet, die noch nicht unterstützt wird." +"%s hat Ihnen eine Audiochat-Einladung gesendet, die noch nicht unterstützt " +"wird." msgid "Nudge" msgstr "Anstoßen" @@ -6371,8 +6163,8 @@ "haben, nicht empfangen." msgid "" -"Unable to connect to server. Please enter the address of the server you wish " -"to connect to." +"Unable to connect to server. Please enter the address of the server to which " +"you wish to connect." msgstr "" "Kann keine Verbindung zum Server herstellen. Bitte geben Sie die Adresse des " "Servers ein, mit dem Sie sich verbinden wollen." @@ -6404,9 +6196,8 @@ msgid "Server port" msgstr "Server-Port" -#, fuzzy msgid "Received unexpected response from " -msgstr "Ungültige HTTP-Antwort vom Server empfangen." +msgstr "Unerwartete Antwort erhalten von" #. username connecting too frequently msgid "" @@ -6417,7 +6208,7 @@ "versuchen Sie es noch einmal. Wenn Sie es weiterversuchen, müssen Sie sogar " "noch länger warten." -#, fuzzy, c-format +#, fuzzy msgid "Error requesting " msgstr "Fehler beim Auflösen von %s" @@ -6757,9 +6548,9 @@ msgstr "Autorisierung empfangen" #. Unregistered username -#. uid is not exist -msgid "Invalid username." -msgstr "Ungültiger Benutzername." +#. the username does not exist +msgid "Username does not exist" +msgstr "Benutzername existiert nicht" #. Suspended account msgid "Your account is currently suspended." @@ -6968,6 +6759,9 @@ msgid "Member Since" msgstr "Mitglied seit" +msgid "Capabilities" +msgstr "Fähigkeiten" + msgid "Profile" msgstr "Profil" @@ -8018,6 +7812,10 @@ msgid "Enter the text from the image" msgstr "Bitte geben Sie den Text aus dem Bild ein" +#. uid is not exist +msgid "Invalid username." +msgstr "Ungültiger Benutzername." + #, c-format msgid "Unknown reply when checking password (0x%02X)" msgstr "Unbekannte Antwort bei Überprüfungen des Passwortes (0x%02X)" @@ -8215,6 +8013,9 @@ msgid "Video Camera" msgstr "Videokamera" +msgid "File Transfer" +msgstr "Dateiübertragung" + msgid "Supports" msgstr "Unterstützt" @@ -8725,7 +8526,6 @@ msgid "
Channel Topic:
%s" msgstr "
Thema des Kanals:
%s" -#, c-format msgid "
Channel Modes: " msgstr "
Kanal-Modi: " @@ -8750,7 +8550,6 @@ msgid "Channel Public Keys List" msgstr "Liste der öffentlichen Schlüssel des Kanals" -#, c-format msgid "" "Channel authentication is used to secure the channel from unauthorized " "access. The authentication may be based on passphrase and digital " @@ -9042,6 +8841,9 @@ msgid "Network Statistics" msgstr "Netzwerkstatistik" +msgid "Ping" +msgstr "Ping" + msgid "Ping failed" msgstr "Ping fehlgeschlagen" @@ -9152,7 +8954,6 @@ msgid "Your Current Mood" msgstr "Ihre momentane Stimmung" -#, c-format msgid "Normal" msgstr "Normal" @@ -9538,47 +9339,37 @@ msgid "No server statistics available" msgstr "Keine Serverstatistik verfügbar" -#, c-format msgid "Failure: Version mismatch, upgrade your client" msgstr "Fehler: Unterschiedliche Version, aktualisieren Sie Ihren Client" -#, c-format msgid "Failure: Remote does not trust/support your public key" msgstr "" "Fehler: Die entfernte Seite vertraut Ihrem öffentlichen Schlüssel nicht" -#, c-format msgid "Failure: Remote does not support proposed KE group" msgstr "" "Fehler: Entferntes Programm unterstützt nicht die vorgeschlagen KE-Gruppe" -#, c-format msgid "Failure: Remote does not support proposed cipher" msgstr "" "Fehler: Entferntes Programm unterstützt die vorgeschlagene Cipher nicht" -#, c-format msgid "Failure: Remote does not support proposed PKCS" msgstr "Fehler: Entferntes Programm unterstützt die vorgeschlagene PKCS nicht" -#, c-format msgid "Failure: Remote does not support proposed hash function" msgstr "" "Fehler: Entferntes Programm unterstützt die vorgeschlagen Hashfunktion nicht" -#, c-format msgid "Failure: Remote does not support proposed HMAC" msgstr "Fehler: Entferntes Programm unterstützt das vorgeschlagene HMAC nicht" -#, c-format msgid "Failure: Incorrect signature" msgstr "Fehler: Falsche Signatur" -#, c-format msgid "Failure: Invalid cookie" msgstr "Fehler: Ungültiger Cookie" -#, c-format msgid "Failure: Authentication failed" msgstr "Fehler: Authentifizierung fehlgeschlagen" @@ -9677,7 +9468,6 @@ msgid "Received invalid data" msgstr "Ungültige Daten empfangen" -#. Password incorrect msgid "Incorrect Password" msgstr "Falsches Passwort" @@ -9690,10 +9480,6 @@ "Eventuell können Sie dies beheben, wenn Sie sich auf der Yahoo!-Webseite " "anmelden." -#. the username does not exist -msgid "Username does not exist" -msgstr "Benutzername existiert nicht" - #. indicates a lock of some description msgid "" "Account locked: Unknown reason.\n" @@ -10423,29 +10209,24 @@ msgstr " (%s)" #. 10053 -#, c-format msgid "Connection interrupted by other software on your computer." msgstr "" "Die Verbindung wurde von einer anderen Software auf ihrem Computer " "unterbrochen." #. 10054 -#, c-format msgid "Remote host closed connection." msgstr "Der entfernte Host hat die Verbindung beendet." #. 10060 -#, c-format msgid "Connection timed out." msgstr "Verbindungsabbruch wegen Zeitüberschreitung." #. 10061 -#, c-format msgid "Connection refused." msgstr "Verbindung abgelehnt." #. 10048 -#, c-format msgid "Address already in use." msgstr "Adresse wird bereits benutzt." @@ -11075,7 +10856,7 @@ msgstr "Hintergrundfarbe" msgid "The background color for the buddy list" -msgstr "" +msgstr "Die Hintergrundfarbe für die Buddy-Liste" #, fuzzy msgid "Layout" @@ -11090,28 +10871,28 @@ msgstr "Hintergrundfarbe" msgid "The background color of an expanded group" -msgstr "" +msgstr "Die Hintergrundfarbe für eine ausgeklappte Gruppe" #, fuzzy msgid "Expanded Text" msgstr "A_usklappen" msgid "The text information for when a group is expanded" -msgstr "" +msgstr "Die Textinformation für eine ausgeklappte Gruppe" #, fuzzy msgid "Collapsed Background Color" msgstr "Hintergrundfarbe auswählen" msgid "The background color of a collapsed group" -msgstr "" +msgstr "Die Hintergrundfarbe für eine zusammengeklappte Gruppe" #, fuzzy msgid "Collapsed Text" msgstr "_Zusammenklappen" msgid "The text information for when a group is collapsed" -msgstr "" +msgstr "Die Textinformation für eine zusammengeklappte Gruppe" #. Buddy #, fuzzy @@ -11126,42 +10907,41 @@ msgstr "Verknüpfter Text" msgid "The text information for when a contact is expanded" -msgstr "" +msgstr "Die Textinformation für einen ausgeklappten Kontakt" #, fuzzy msgid "On-line Text" msgstr "Online" msgid "The text information for when a buddy is online" -msgstr "" +msgstr "Die Textinformation für einen Online-Buddy" #, fuzzy msgid "Away Text" msgstr "Abwesend" msgid "The text information for when a buddy is away" -msgstr "" +msgstr "Die Textinformation für einen abwesenden Buddy" #, fuzzy msgid "Off-line Text" msgstr "Offline" msgid "The text information for when a buddy is off-line" -msgstr "" +msgstr "Die Textinformation für einen Offline-Buddy" #, fuzzy msgid "Idle Text" msgstr "Stimmungstext" msgid "The text information for when a buddy is idle" -msgstr "" - -#, fuzzy +msgstr "Die Textinformation für einen untätigen Buddy" + msgid "Message Text" -msgstr "Nachricht gesendet" +msgstr "Nachrichtentext" msgid "The text information for when a buddy has an unread message" -msgstr "" +msgstr "Die Textinformation für einen Buddy mit ungelesenen Nachrichten" msgid "Message (Nick Said) Text" msgstr "" @@ -11170,10 +10950,14 @@ "The text information for when a chat has an unread message that mentions " "your nick" msgstr "" - -#, fuzzy +"Die Textinformation für einen Chat mit einer ungelesenen Nachricht, in der " +"Ihr Nickname vorkommt" + msgid "The text information for a buddy's status" -msgstr "Ändere die Benutzerinformation für %s" +msgstr "Die Textinformation für den Status eines Buddys" + +msgid "Type the host name for this certificate." +msgstr "Geben Sie einen Hostnamen für dieses Zertifikat an." #. Widget creation function msgid "SSL Servers" @@ -11832,7 +11616,6 @@ "geschützt. Die Datei 'COPYRIGHT' enthält die komplette Liste der " "Mitwirkenden. Wir übernehmen keine Haftung für dieses Programm.

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

" @@ -11840,7 +11623,6 @@ "FAQ: http://developer.pidgin.im/wiki/FAQ

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

" @@ -11848,13 +11630,11 @@ "Hilfe per E-Mail: support@pidgin.im

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

" msgstr "" "IRC-Kanal: #pidgin auf irc.freenode.net

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

" msgstr "XMPP-MUC: devel@conference.pidgin.im

" @@ -12109,10 +11889,9 @@ msgid "Hyperlink visited color" msgstr "Farbe für besuchte Hyperlinks" -msgid "Color to draw hyperlinks after it has been visited (or activated)." -msgstr "" -"Farbe zum Darstellen von Hyperlinks, wenn sie besucht (oder aktiviert) " -"wurden." +msgid "Color to draw hyperlink after it has been visited (or activated)." +msgstr "" +"Farbe zum Darstellen von Hyperlinks, wenn sie besucht (oder aktiviert) wurden" msgid "Hyperlink prelight color" msgstr "Hyperlink-Farbe" @@ -12152,13 +11931,22 @@ msgid "Action Message Name Color for Whispered Message" msgstr "Farbe des Absendernamens für geflüsterte Aktions-Nachrichten" +msgid "Color to draw the name of a whispered action message." +msgstr "" +"Farbe, mit der der Name in einer geflüsterten Aktions-Nachricht dargestellt " +"wird" + msgid "Whisper Message Name Color" msgstr "Farbe des Absendernamens für Flüster-Nachrichten" +msgid "Color to draw the name of a whispered message." +msgstr "" +"Farbe, mit der der Name in einer geflüsterten Nachricht dargestellt wird" + msgid "Typing notification color" msgstr "Farbe der Tipp-Benachrichtigung" -msgid "The color to use for the typing notification font" +msgid "The color to use for the typing notification" msgstr "" "Die Farbe, die für die Tipp-Benachrichtigungsmeldung benutzt werden soll" @@ -12512,7 +12300,6 @@ msgid "Pidgin" msgstr "Pidgin" -#, c-format msgid "Exiting because another libpurple client is already running.\n" msgstr "Wird geschlossen, da bereits ein anderer libpurple-Client läuft\n" @@ -12561,6 +12348,9 @@ msgstr "" "Das benutzerdefinierte Browserkommando wurde ausgewählt, aber nicht gesetzt." +msgid "No message" +msgstr "Keine Nachricht" + msgid "Open All Messages" msgstr "Alle Nachrichten öffnen" @@ -12576,9 +12366,6 @@ msgid "You have pounced!" msgstr "Sie haben geklopft!" -msgid "No message" -msgstr "Keine Nachricht" - msgid "The following plugins will be unloaded." msgstr "Die folgenden Plugins werden entladen." @@ -12703,47 +12490,36 @@ msgid "Pounce Target" msgstr "Alarm-Ziel" -#, c-format msgid "Started typing" msgstr "Beginnt zu tippen" -#, c-format msgid "Paused while typing" msgstr "Hat beim Tippen angehalten" -#, c-format msgid "Signed on" msgstr "Hat sich anmeldet" -#, c-format msgid "Returned from being idle" msgstr "Ist nicht mehr inaktiv" -#, c-format msgid "Returned from being away" msgstr "Ist wieder anwesend" -#, c-format msgid "Stopped typing" msgstr "Hat das Tippen gestoppt" -#, c-format msgid "Signed off" msgstr "Hat sich abmeldet" -#, c-format msgid "Became idle" msgstr "Wurde untätig" -#, c-format msgid "Went away" msgstr "Ging hinaus" -#, c-format msgid "Sent a message" msgstr "Eine Nachricht senden" -#, c-format msgid "Unknown.... Please report this!" msgstr "Unbekannt.... Bitte berichten Sie dieses Problem!" @@ -12753,9 +12529,8 @@ msgid "Theme failed to load." msgstr "Thema konnte nicht geladen werden." -#, fuzzy msgid "Theme failed to copy." -msgstr "Thema konnte nicht geladen werden." +msgstr "Thema konnte nicht kopiert werden." msgid "Install Theme" msgstr "Thema installieren" @@ -12894,8 +12669,9 @@ msgid "Example: stunserver.org" msgstr "Beispiel: stunserver.org" -msgid "_Autodetect IP address" -msgstr "IP-Adresse _automatisch erkennen" +#, c-format +msgid "Use _automatically detected IP address: %s" +msgstr "Benutze _automatisch erkannte IP-Adresse: %s" msgid "Public _IP:" msgstr "Öffentliche _IP:" @@ -13031,27 +12807,21 @@ msgid "Sound Selection" msgstr "Klang-Auswahl" -#, c-format msgid "Quietest" msgstr "Am leisesten" -#, c-format msgid "Quieter" msgstr "Leiser" -#, c-format msgid "Quiet" msgstr "Leise" -#, c-format msgid "Loud" msgstr "Laut" -#, c-format msgid "Louder" msgstr "Lauter" -#, c-format msgid "Loudest" msgstr "Am lautesten" @@ -13271,21 +13041,6 @@ msgid "Status for %s" msgstr "Status für %s" -#. -#. * TODO: We should enable/disable the add button based on -#. * whether the user has entered all required data. That -#. * would eliminate the need for this check and provide a -#. * better user experience. -#. -msgid "Custom Smiley" -msgstr "Benutzerdefinierter Smiley" - -msgid "More Data needed" -msgstr "Weitere Daten benötigt" - -msgid "Please provide a shortcut to associate with the smiley." -msgstr "Bitte geben Sie eine Tastenkombination für den Smiley an." - #, c-format msgid "" "A custom smiley for '%s' already exists. Please use a different shortcut." @@ -13293,12 +13048,12 @@ "Für '%s' existiert bereits ein benutzerdefinierter Smiley. Bitten wählen Sie " "eine andere Tastenkombination." +msgid "Custom Smiley" +msgstr "Benutzerdefinierter Smiley" + msgid "Duplicate Shortcut" msgstr "Doppelte Tastenkombination" -msgid "Please select an image for the smiley." -msgstr "Bitte wählen Sie ein Bild für den Smiley." - msgid "Edit Smiley" msgstr "Smiley bearbeiten" @@ -13408,8 +13163,8 @@ msgstr "Kann Verknüpfung nicht senden" msgid "" -"You dragged a desktop launcher. Most likely you wanted to send whatever this " -"launcher points to instead of this launcher itself." +"You dragged a desktop launcher. Most likely you wanted to send the target of " +"this launcher instead of this launcher itself." msgstr "" "Sie haben eine Verknüpfung gewählt. Wahrscheinlich wollten sie das Ziel der " "Verknüpfung senden und nicht die Verknüpfung selbst." @@ -13549,64 +13304,53 @@ msgid "Server name request" msgstr "Server-Adresse" -#, fuzzy msgid "Enter an XMPP Server" -msgstr "Geben Sie einen Konferenzserver ein" - -#, fuzzy +msgstr "Geben Sie einen XMPP-Server ein" + msgid "Select an XMPP server to query" -msgstr "Wählen Sie einen Konferenz-Server zur Abfrage" - -#, fuzzy +msgstr "Wählen Sie einen XMPP-Server zur Abfrage" + msgid "Find Services" -msgstr "Online-Dienste" - -#, fuzzy +msgstr "Dienste suchen" + msgid "Add to Buddy List" -msgstr "Buddy-Liste senden" - -#, fuzzy +msgstr "Zur Buddy-Liste hinzufügen" + msgid "Gateway" -msgstr "hinausgeht" - -#, fuzzy +msgstr "Gateway" + msgid "Directory" -msgstr "Mitschnittverzeichnis" - -#, fuzzy +msgstr "Verzeichnis" + msgid "PubSub Collection" -msgstr "Klang-Auswahl" - -#, fuzzy +msgstr "PubSub-Sammlung" + msgid "PubSub Leaf" -msgstr "PubSub-Dienst" - -#, fuzzy +msgstr "PubSub-Blatt" + msgid "" "\n" "Description: " -msgstr "Beschreibung" +msgstr "" +"\n" +"Beschreibung:" #. Create the window. -#, fuzzy msgid "Service Discovery" -msgstr "Information zur Dienstsuche" +msgstr "Dienstsuche" #, fuzzy msgid "_Browse" msgstr "_Browser:" -#, fuzzy msgid "Server does not exist" -msgstr "Benutzer existiert nicht" - -#, fuzzy +msgstr "Server existiert nicht" + msgid "Server does not support service discovery" -msgstr "Server unterstützt kein Blockieren" - -#, fuzzy +msgstr "Server unterstützt keine Dienstsuche" + msgid "XMPP Service Discovery" -msgstr "Information zur Dienstsuche" +msgstr "XMPP-Dienstsuche" msgid "Allows browsing and registering services." msgstr "" @@ -14017,7 +13761,7 @@ #. * summary msgid "" "The Music Messaging Plugin allows a number of users to simultaneously work " -"on a piece of music by editting a common score in real-time." +"on a piece of music by editing a common score in real-time." msgstr "" "Das Musik-Nachrichtenübermittlungsplugin erlaubt es einer Menge von " "Benutzern, simultan an einem Musikstück in Echtzeit zu arbeiten." @@ -14161,7 +13905,6 @@ msgid "Select Color" msgstr "Farbe auswählen" -#, c-format msgid "Select Interface Font" msgstr "Schriftart wählen" @@ -14175,9 +13918,8 @@ msgid "GTK+ Text Shortcut Theme" msgstr "GTK+ Text Shortcut-Thema" -#, fuzzy msgid "Disable Typing Notification Text" -msgstr "Tipp-Benachrichtigung aktivieren" +msgstr "Tipp-Benachrichtigungstext deaktivieren" msgid "GTK+ Theme Control Settings" msgstr "Themenkontroll-Einstellungen für GTK+" @@ -14276,7 +14018,7 @@ #. *< summary msgid "" "Adds a Send button to the entry area of the conversation window. Intended " -"for when no physical keyboard is present." +"for use when no physical keyboard is present." msgstr "" "Fügt einen Senden-Knopf zum Eingabefeld des Gesprächsfensters hinzu. Die ist " "für Fälle gedacht, wo keine Tastatur vorhanden ist." @@ -14332,13 +14074,11 @@ msgstr "" "Ersetzt Text in ausgehenden Nachrichten durch benutzerdefinierte Regeln." -#, fuzzy msgid "Just logged in" -msgstr "Nicht angemeldet" - -#, fuzzy +msgstr "Gerade angemeldet" + msgid "Just logged out" -msgstr "Nicht angemeldet" +msgstr "Gerade abgemeldet" msgid "" "Icon for Contact/\n" @@ -14349,9 +14089,8 @@ msgid "Icon for Chat" msgstr "Chat betreten" -#, fuzzy msgid "Ignored" -msgstr "Ignorieren" +msgstr "Ignoriert" #, fuzzy msgid "Founder" @@ -14364,63 +14103,52 @@ msgid "Half Operator" msgstr "" -#, fuzzy msgid "Authorization dialog" -msgstr "Autorisierung wurde gegeben" - -#, fuzzy +msgstr "Autorisierungsdialog" + msgid "Error dialog" -msgstr "Fehler " - -#, fuzzy +msgstr "Fehlerdialog" + msgid "Information dialog" -msgstr "Information" +msgstr "Informationsdialog" msgid "Mail dialog" -msgstr "" +msgstr "Mail-Dialog" #, fuzzy msgid "Question dialog" msgstr "Anfrage-Dialog" -#, fuzzy msgid "Warning dialog" -msgstr "Warnstufe" +msgstr "Warnungdialog" msgid "What kind of dialog is this?" -msgstr "" - -# -#, fuzzy +msgstr "Welche Art von Dialog ist dies?" + msgid "Status Icons" -msgstr "Status für %s" +msgstr "Status-Icons" #, fuzzy msgid "Chatroom Emblems" msgstr "Chatraum-Gebiet" -#, fuzzy msgid "Dialog Icons" -msgstr "Icon ändern" - -#, fuzzy +msgstr "Dialog-Icons" + msgid "Pidgin Icon Theme Editor" -msgstr "Pidgin GTK+ Themenkontrolle" - -#, fuzzy +msgstr "Pidgin Icon-Themen-Editor" + msgid "Contact" -msgstr "Kontakt-Info" - -#, fuzzy +msgstr "Kontakt" + msgid "Pidgin Buddylist Theme Editor" -msgstr "Buddy-Listen-Thema" - -#, fuzzy +msgstr "Pidgin Buddy-Listen-Thema-Editor" + msgid "Edit Buddylist Theme" -msgstr "Buddy-Listen-Thema" +msgstr "Buddy-Listen-Thema bearbeiten" msgid "Edit Icon Theme" -msgstr "" +msgstr "Icon-Thema bearbeiten" #. *< type #. *< ui_requirement @@ -14429,16 +14157,14 @@ #. *< priority #. *< id #. * description -#, fuzzy msgid "Pidgin Theme Editor" -msgstr "Pidgin GTK+ Themenkontrolle" +msgstr "Pidgin Themen-Editor" #. *< name #. *< version #. * summary -#, fuzzy msgid "Pidgin Theme Editor." -msgstr "Pidgin GTK+ Themenkontrolle" +msgstr "Pidgin Themen-Editor" #. *< type #. *< ui_requirement @@ -14481,7 +14207,6 @@ msgid "Timestamp Format Options" msgstr "Zeitstempelformat-Optionen" -#, c-format msgid "_Force 24-hour time format" msgstr "_Erzwinge 24-Stunden Zeitformat" @@ -14608,7 +14333,7 @@ msgstr "Optionen für Pidgin unter Windows." msgid "" -"Provides options specific to Pidgin for Windows , such as buddy list docking." +"Provides options specific to Pidgin for Windows, such as buddy list docking." msgstr "" "Bietet spezielle Optionen für Windows-Pidgin, wie Buddy-Listen-Docking." diff -r a6d84d9de605 -r 14131ba5a07c po/fi.po --- a/po/fi.po Mon Jul 06 04:37:06 2009 +0000 +++ b/po/fi.po Mon Jul 06 05:27:30 2009 +0000 @@ -1,4 +1,4 @@ -# Pidgin Finnish translation +# Piidgin Finnish translation # Copyright (C) 2002 Tero Kuusela # Copyright (C) 2003-2005 Arto Alakulju # Copyright (C) 2005-2009 Timo Jyrinki @@ -10,8 +10,8 @@ msgstr "" "Project-Id-Version: Pidgin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-02 01:34-0700\n" -"PO-Revision-Date: 2009-04-28 16:31+0300\n" +"POT-Creation-Date: 2009-07-05 01:14+0300\n" +"PO-Revision-Date: 2009-07-05 01:14+0300\n" "Last-Translator: Timo Jyrinki \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -2176,9 +2176,8 @@ msgid "(%s) %s : %s\n" msgstr "(%s) %s : %s\n" -#, fuzzy msgid "Error creating conference." -msgstr "Virhe luotaessa yhteyttä" +msgstr "Virhe luotaessa konferenssia." #, c-format msgid "You are using %s, but this plugin requires %s." @@ -2581,16 +2580,17 @@ #. * description msgid "" "When viewing logs, this plugin will include logs from other IM clients. " -"Currently, this includes Adium, MSN Messenger, and Trillian.\n" +"Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n" "\n" "WARNING: This plugin is still alpha code and may crash frequently. Use it " "at your own risk!" msgstr "" "Katsottaessa lokeja tämä liitännäinen sisällyttää niihin myös muiden " "pikaviestinohjelmien lokit. Tällä hetkellä tuettuina ovat Adium, MSN " -"Messenger ja Trillian.\n" -"\n" -"Varoitus: Tämä liitännäinen on vielä kehitysasteella ja voi kaatua usein." +"Messenger, aMSN ja Trillian.\n" +"\n" +"Varoitus: Tämä liitännäinen on vielä kehitysasteella ja voi kaatua usein. " +"Käytä sitä omalla vastuulla!" msgid "Mono Plugin Loader" msgstr "Mono-liitännäisen lataaja" @@ -2638,11 +2638,11 @@ "tuttavailmoittimen avulla." msgid "" -"The rest of the messages will be saved as pounce. You can edit/delete the " +"The rest of the messages will be saved as pounces. You can edit/delete the " "pounce from the `Buddy Pounce' dialog." msgstr "" -"Loput viesteistä tallennetaan ilmoittimeen. Voit muokata/poistaa sen " -"\"Tuttavailmoittimet\"-valintaikkunasta." +"Loput viesteistä tallennetaan ilmoittimina. Voit muokata/poistaa sen " +"ilmoittimen ”Tuttavailmoittimet”-valintaikkunasta." #, c-format msgid "" @@ -2696,6 +2696,9 @@ "are only used in a single successful connection.\n" "Note: The account password must not be saved for this to work." msgstr "" +"Mahdollistaa tilikohtaisen tallentamattomien salasanojen käytön vain yhteen " +"onnistuneeseen yhteyteen.\n" +"Huomioitavaa: Tilin salasanaa ei tule tallentaa, jotta tämä toimisi." #. *< type #. *< ui_requirement @@ -3156,9 +3159,8 @@ msgstr "Keskustelunimi:" #. should this be a settings error? -#, fuzzy msgid "Unable to resolve server" -msgstr "Ei kyetty selvittämään isännän nimeä." +msgstr "Ei kyetty selvittämään palvelimen nimeä." msgid "Chat error" msgstr "Keskusteluvirhe" @@ -3208,9 +3210,8 @@ msgid "Gadu-Gadu User" msgstr "Gadu-Gadu-käyttäjä" -#, fuzzy msgid "GG server" -msgstr "Haetaan palvelinta" +msgstr "GG-palvelin" #, c-format msgid "Unknown command: %s" @@ -3254,9 +3255,8 @@ msgid "_Password:" msgstr "_Salasana:" -#, fuzzy msgid "IRC nick and server may not contain whitespace" -msgstr "IRC-kutsumanimissä ei tule olla välilyöntejä" +msgstr "IRC-kutsumanimissä ja -palvelimissa ei saa olla välilyöntejä" #. 1. connect to server #. connect to the server @@ -3737,21 +3737,16 @@ msgstr "SASL-virhe" msgid "The BOSH connection manager terminated your session." -msgstr "" - -#, fuzzy +msgstr "BOSH-yhteyshallinta lopetti istunnon." + msgid "No session ID given" -msgstr "Syytä ei annettu" - -#, fuzzy +msgstr "Istuntotunnistetta ei annettu" + msgid "Unsupported version of BOSH protocol" -msgstr "Versiota ei tueta" - -#, fuzzy +msgstr "Tukematon versio BOSH-yhteyskäytännöstä" + msgid "Unable to establish a connection with the server" -msgstr "" -"Yhteyttä palvelimeen ei voi muodostaa:\n" -"%s" +msgstr "Yhteyttä palvelimeen ei voi muodostaa" #, c-format msgid "" @@ -3761,9 +3756,8 @@ "Yhteyttä palvelimeen ei voi muodostaa:\n" "%s" -#, fuzzy msgid "Unable to establish SSL connection" -msgstr "Yhteyden luominen epäonnistui" +msgstr "SSL-yhteyden muodostaminen ei onnistu" msgid "Unable to create socket" msgstr "Pistokkeen luonti epäonnistui" @@ -4001,11 +3995,10 @@ #, c-format msgid "%s ago" -msgstr "" - -#, fuzzy +msgstr "%s sitten" + msgid "Logged off" -msgstr "Kirjautumisesta aikaa" +msgstr "Kirjautunut ulos" msgid "Middle Name" msgstr "Muut etunimet" @@ -4173,17 +4166,14 @@ msgid "Find Rooms" msgstr "Etsi huoneita" -#, fuzzy msgid "Affiliations:" -msgstr "Lempinimi:" - -#, fuzzy +msgstr "Kytkökset:" + msgid "No users found" -msgstr "Käyttäjistä ei löytynyt osumia" - -#, fuzzy +msgstr "Käyttäjiä ei löytynyt" + msgid "Roles:" -msgstr "Asema" +msgstr "Roolit:" msgid "Ping timeout" msgstr "Pingin aikakatkaisu" @@ -4196,6 +4186,8 @@ "Could not find alternative XMPP connection methods after failing to connect " "directly.\n" msgstr "" +"Vaihtoehtoisia XMPP-yhteystapoja ei löytynyt suoran yhdistämisen " +"epäonnistumisen jälkeen.\n" msgid "Invalid XMPP ID" msgstr "Epäkelpo XMPP-ID" @@ -4203,9 +4195,8 @@ msgid "Invalid XMPP ID. Domain must be set." msgstr "Epäkelpo XMPP-ID. Verkkoalue pitää olla asetettu." -#, fuzzy msgid "Malformed BOSH URL" -msgstr "Palvelimeen ei saatu yhteyttä." +msgstr "Viallisesti muodostettu BOSH-URL" #, c-format msgid "Registration of %s@%s successful" @@ -4273,9 +4264,8 @@ msgid "Change Registration" msgstr "Muuta rekisteröitymistä" -#, fuzzy msgid "Malformed BOSH Connect Server" -msgstr "Palvelimeen ei saatu yhteyttä." +msgstr "Virheellisesti muodostettu BOSH-yhteyspalvein" msgid "Error unregistering account" msgstr "Virhe poistettaessa käyttäjätilin rekisteröitymistä" @@ -4642,20 +4632,18 @@ msgid "ban <user> [reason]: Ban a user from the room." msgstr "ban <käyttäjä> [syy]: Estä käyttäjä huoneesta." -#, fuzzy msgid "" "affiliate <owner|admin|member|outcast|none> [nick1] [nick2] ...: Get " "the users with an affiliation or set users' affiliation with the room." msgstr "" -"affiliate <user> <owner|admin|member|outcast|none>: Aseta " +"affiliate <owner|admin|member|outcast|none> [nimi1] [nimi2] ...: Aseta " "käyttäjän käyttäjäluokka tälle huoneelle." -#, fuzzy msgid "" "role <moderator|participant|visitor|none> [nick1] [nick2] ...: Get the " "users with an role or set users' role with the room." msgstr "" -"role <user> <moderator|participant|visitor|none>: Aseta " +"role <moderator|participant|visitor|none> [nimi1] [nimi2] ...: Aseta " "käyttäjän rooli huoneessa." msgid "invite <user> [message]: Invite a user to the room." @@ -4718,7 +4706,7 @@ msgstr "Tiedostonsiirron välipalvelimet" msgid "BOSH URL" -msgstr "" +msgstr "BOSH-URL" #. this should probably be part of global smiley theme settings later on, #. shared with MSN @@ -4782,7 +4770,7 @@ msgid "Error in chat %s" msgstr "Virhe ryhmäkeskustelussa: %s" -msgid "An error occured on the in-band bytestream transfer\n" +msgid "An error occurred on the in-band bytestream transfer\n" msgstr "Kaistansisäisessä tavuvirtasiirrossa tapahtui virhe\n" msgid "Transfer was closed." @@ -5115,9 +5103,9 @@ msgid "Non-IM Contacts" msgstr "Pikaviestittömät yhteystiedot" -#, fuzzy, c-format +#, c-format msgid "%s sent you a voice chat invite, which is not yet supported." -msgstr "%s on lähettänyt webkamera-kutsun, mikä ei ole vielä tuettuna." +msgstr "%s on lähettänyt puhekeskustelukutsun, mitä ei vielä tueta." msgid "Nudge" msgstr "Tönäise" @@ -5465,9 +5453,9 @@ msgid "%s just sent you a Nudge!" msgstr "Käyttäjä %s lähetti sinulle juuri tönäisyn!" -#, fuzzy, c-format +#, c-format msgid "Unknown error (%d): %s" -msgstr "Tuntematon virhe (%d)" +msgstr "Tuntematon virhe (%d): %s" msgid "Unable to add user" msgstr "Käyttäjää ei voi lisätä" @@ -5589,9 +5577,9 @@ msgid "Retrieving buddy list" msgstr "Noudetaan tuttavia" -#, fuzzy, c-format +#, c-format msgid "%s requests to view your webcam, but this request is not yet supported." -msgstr "%s on lähettänyt webkamera-kutsun, mikä ei ole vielä tuettuna." +msgstr "%s on lähettänyt pyynnön nähdä webkamerasi, mutta tätä ei vielä tueta." #, c-format msgid "%s has sent you a webcam invite, which is not yet supported." @@ -5789,16 +5777,15 @@ msgid "Protocol error, code %d: %s" msgstr "Yhteyskäytäntövirhe, virhekoodi %d: %s" -#, fuzzy, c-format +#, c-format msgid "" "%s Your password is %zu characters, which is longer than the maximum length " "of %d. Please shorten your password at http://profileedit.myspace.com/index." "cfm?fuseaction=accountSettings.changePassword and try again." msgstr "" -"%s Salasanasi on %d merkkiä, mikä on enemmän kuin MySpaceIM:n odottama " -"suurin mahdollinen %d merkkiä. Lyhennä salasanaasi osoitteessa http://" -"profileedit.myspace.com/index.cfm?fuseaction=accountSettings.changePassword " -"ja yritä uudelleen." +"%s Salasanasi on %zu merkkiä, mikä on enemmän kuin suurin mahdollinen %d. " +"Lyhennä salasanaasi osoitteessa http://profileedit.myspace.com/index.cfm?" +"fuseaction=accountSettings.changePassword ja yritä uudelleen." msgid "Incorrect username or password" msgstr "Virheellinen käyttäjänimi tai salasana" @@ -6302,8 +6289,8 @@ "%s näyttää olevan poissa linjoilta eikä saanut viestiä jonka juuri lähetit." msgid "" -"Unable to connect to server. Please enter the address of the server you wish " -"to connect to." +"Unable to connect to server. Please enter the address of the server to which " +"you wish to connect." msgstr "" "Palvelimeen ei voi yhdistää. Ole hyvä, syötä palvelimen osoite jolle haluat " "yhdistää." @@ -6333,9 +6320,8 @@ msgid "Server port" msgstr "Palvelimen portti" -#, fuzzy msgid "Received unexpected response from " -msgstr "Odottamaton HTTP-vastaus palvelimelta." +msgstr "Odottamaton vastaus palvelimelta " #. username connecting too frequently msgid "" @@ -6346,15 +6332,15 @@ "ja yritä uudelleen. Jos jatkat yrittämistä, joudut odottamaan vielä " "pidempään." -#, fuzzy, c-format +#, c-format msgid "Error requesting " -msgstr "Virhe pyydettäessä kirjautumispolettia" +msgstr "Virhe pyydettäessä " msgid "Incorrect password." msgstr "Virheellinen salasana." msgid "AOL does not allow your screen name to authenticate via this site." -msgstr "" +msgstr "AOL ei salli näyttönimen todentamista tämän sivuston kautta." msgid "Could not join chat room" msgstr "Keskusteluhuoneeseen ei voi liittyä" @@ -6682,9 +6668,9 @@ msgstr "Saatiin lupa" #. Unregistered username -#. uid is not exist -msgid "Invalid username." -msgstr "Epäkelpo käyttäjänimi." +#. the username does not exist +msgid "Username does not exist" +msgstr "Käyttäjänimeä ei ole" #. Suspended account msgid "Your account is currently suspended." @@ -6699,14 +6685,12 @@ msgstr "Asiakasohjelmasi versio on liian vanha. Päivitä osoitteessa %s" #. IP address connecting too frequently -#, fuzzy msgid "" "You have been connecting and disconnecting too frequently. Wait a minute and " "try again. If you continue to try, you will need to wait even longer." msgstr "" -"Olet ottanut ja katkaissut yhteyden liian tiheästi. Odota kymmenen minuuttia " -"ja yritä uudelleen. Jos jatkat yrittämistä, joudut odottamaan vielä " -"pidempään." +"Olet ottanut ja katkaissut yhteyden liian tiheästi. Odota jonkin aikaa ja " +"yritä uudelleen. Jos jatkat yrittämistä, joudut odottamaan vielä pidempään." msgid "The SecurID key entered is invalid." msgstr "Syötetty SecurID-avain on virheellinen." @@ -7256,9 +7240,8 @@ msgid "Search for Buddy by Information" msgstr "Etsi tuttavaa tietojen perusteella" -#, fuzzy msgid "Use clientLogin" -msgstr "Käyttäjä ei ole kirjautuneena sisään" +msgstr "Käytä clientLoginia" msgid "" "Always use AIM/ICQ proxy server for\n" @@ -7916,6 +7899,10 @@ msgid "Enter the text from the image" msgstr "Syötä teksti kuvasta" +#. uid is not exist +msgid "Invalid username." +msgstr "Epäkelpo käyttäjänimi." + #, c-format msgid "Unknown reply when checking password (0x%02X)" msgstr "Tuntematon vastaus tarkistettaessa salasanaa (0x%02X)" @@ -9542,42 +9529,31 @@ msgstr "Tuttavan lisääminen estetty" #. Some error in the received stream -#, fuzzy msgid "Received invalid data" -msgstr "Palvelimeen yhdistettäessä vastaanotettiin virheellisiä tietoja." - -#. Password incorrect -#, fuzzy +msgstr "Vastaanotettiin virheellisiä tietoja" + msgid "Incorrect Password" msgstr "Virheellinen salasana" #. security lock from too many failed login attempts -#, fuzzy msgid "" "Account locked: Too many failed login attempts.\n" "Logging into the Yahoo! website may fix this." msgstr "" -"Tuntematon viesti numero %d. Kirjautumalla Yahoo! verkkosivuille saattaa " -"korjata tämän." - -#. the username does not exist -#, fuzzy -msgid "Username does not exist" -msgstr "Käyttäjää ei ole" +"Käyttäjätili lukittu: liian monta epäonnistuttu kirjautumisyritystä.\n" +"Yahoo!-WWW-sivustolle kirjautuminen saatta korjata tämän." #. indicates a lock of some description -#, fuzzy msgid "" "Account locked: Unknown reason.\n" "Logging into the Yahoo! website may fix this." msgstr "" -"Tuntematon viesti numero %d. Kirjautumalla Yahoo! verkkosivuille saattaa " -"korjata tämän." +"Käyttäjätili lukittu: tuntematon syy.\n" +"Yahoo!-WWW-sivustolle kirjautuminen saatta korjata tämän." #. username or password missing -#, fuzzy msgid "Username or password missing" -msgstr "Virheellinen käyttäjänimi tai salasana" +msgstr "Puuttuva käyttäjänimi tai salasana" #, c-format msgid "" @@ -9693,7 +9669,7 @@ msgstr "Aloita piirtely" msgid "Select the ID you want to activate" -msgstr "" +msgstr "Valitse aktivoitava tunnus (ID)" msgid "Join whom in chat?" msgstr "Kenen seuraan liitytään ryhmäkeskustelussa?" @@ -10478,9 +10454,8 @@ msgid "Please update the necessary fields." msgstr "Päivitä tarvittavat kentät." -#, fuzzy msgid "A_ccount" -msgstr "_Käyttäjätili:" +msgstr "_Käyttäjätili" msgid "" "Please enter the appropriate information about the chat you would like to " @@ -10929,114 +10904,98 @@ msgid "Background Color" msgstr "Taustaväri" -#, fuzzy msgid "The background color for the buddy list" -msgstr "Tämä ryhmä on lisätty tuttaviisi" - -#, fuzzy +msgstr "Tuttavaluettelon taustaväri" + msgid "Layout" -msgstr "lao" +msgstr "Asettelu" msgid "The layout of icons, name, and status of the blist" -msgstr "" +msgstr "Tuttavien kuvakkeiden, nimien ja tilojen asettelu" #. Group -#, fuzzy msgid "Expanded Background Color" -msgstr "Taustaväri" - -#, fuzzy +msgstr "Laajennettu taustaväri" + msgid "The background color of an expanded group" -msgstr "Taustavärin nimi" - -#, fuzzy +msgstr "Laajennetun ryhmän taustavärin" + msgid "Expanded Text" -msgstr "Laajentajan koko" +msgstr "Laajennettu teksti" msgid "The text information for when a group is expanded" -msgstr "" - -#, fuzzy +msgstr "Tekstitieto ryhmää laajennettaessa" + msgid "Collapsed Background Color" -msgstr "Valitse taustaväri" - -#, fuzzy +msgstr "Supistettu taustaväri" + msgid "The background color of a collapsed group" -msgstr "Taustaväri GdkColor-tyyppisenä" - -#, fuzzy +msgstr "Supistetun ryhmän taustaväri" + msgid "Collapsed Text" -msgstr "_Pienennä" +msgstr "Supistettu teksti" msgid "The text information for when a group is collapsed" -msgstr "" +msgstr "Tekstitieto ryhmää supistettaessa" #. Buddy -#, fuzzy msgid "Contact/Chat Background Color" -msgstr "Valitse taustaväri" - -#, fuzzy +msgstr "Yhteystiedon/keskustelun taustaväri" + msgid "The background color of a contact or chat" -msgstr "Taustaväri GdkColor-tyyppisenä" - -#, fuzzy +msgstr "Yhteystiedon tai keskustelun taustaväri" + msgid "Contact Text" -msgstr "Oikotien teksti" +msgstr "Yhteystiedon teksti" msgid "The text information for when a contact is expanded" -msgstr "" - -#, fuzzy +msgstr "Tekstitieto yhteystietoa laajennettaessa" + msgid "On-line Text" -msgstr "Linjoilla" - -#, fuzzy +msgstr "Linjoilla-teksti" + msgid "The text information for when a buddy is online" -msgstr "Hae tietoja valitusta tuttavasta" - -#, fuzzy +msgstr "Tekstitieto tuttavan ollessa linjoilla" + msgid "Away Text" -msgstr "Poissa" - -#, fuzzy +msgstr "Poissa-teksti" + msgid "The text information for when a buddy is away" -msgstr "Hae tietoja valitusta tuttavasta" - -#, fuzzy +msgstr "Tekstitieto tuttavan ollessa poissa" + msgid "Off-line Text" -msgstr "Poissa linjoilta" - -#, fuzzy +msgstr "Poissa linjoilta -teksti" + msgid "The text information for when a buddy is off-line" -msgstr "Hae tietoja valitusta tuttavasta" - -#, fuzzy +msgstr "Tekstitieto tuttavan ollessa poissa linjoilta" + msgid "Idle Text" -msgstr "Mielialan teksti" - -#, fuzzy +msgstr "Joutenoloteksti" + msgid "The text information for when a buddy is idle" -msgstr "Hae tietoja valitusta tuttavasta" +msgstr "Tekstitieto tuttavan ollessa jouten" msgid "Message Text" msgstr "Viestin teksti" msgid "The text information for when a buddy has an unread message" -msgstr "" - -#, fuzzy +msgstr "Tekstitieto kun tuttavalla on lukematon viesti" + msgid "Message (Nick Said) Text" -msgstr "Viestin teksti" +msgstr "Viestin (henkilö sanoi) teksti" msgid "" "The text information for when a chat has an unread message that mentions " "your nick" msgstr "" - -#, fuzzy +"Tekstitieto kun keskustelussa on lukematon viesti, jossa mainitaan " +"kutsumanimesi" + msgid "The text information for a buddy's status" -msgstr "Vaihda käyttäjätietoja - %s" +msgstr "Tekstitieto tuttavan tilalle" + +msgid "Type the host name for this certificate." +msgstr "Kirjoita isäntänimi tälle varmenteelle." #. Widget creation function msgid "SSL Servers" @@ -11534,9 +11493,8 @@ msgid "Hungarian" msgstr "unkari" -#, fuzzy msgid "Armenian" -msgstr "romania" +msgstr "armenia" msgid "Indonesian" msgstr "indonesia" @@ -11635,7 +11593,7 @@ msgstr "ruotsi" msgid "Swahili" -msgstr "" +msgstr "swahili" msgid "Tamil" msgstr "tamil" @@ -11969,7 +11927,7 @@ msgid "Hyperlink visited color" msgstr "Vieraillun hyperlinkin väri" -msgid "Color to draw hyperlinks after it has been visited (or activated)." +msgid "Color to draw hyperlink after it has been visited (or activated)." msgstr "Väri jolla piirretään vierailtu (tai aktivoitu) hyperlinkki." msgid "Hyperlink prelight color" @@ -12005,14 +11963,20 @@ msgid "Action Message Name Color for Whispered Message" msgstr "Toimintoviestin nimen väri kuiskatulle viestille" +msgid "Color to draw the name of a whispered action message." +msgstr "Väri jolla näytetään kuiskatun toimintoviestin nimi." + msgid "Whisper Message Name Color" msgstr "Kuiskatun viestin nimen väri" +msgid "Color to draw the name of a whispered message." +msgstr "Väri jolla näytetään kuiskatun viestin nimi." + msgid "Typing notification color" msgstr "Kirjoittamishuomautuksen väri" -msgid "The color to use for the typing notification font" -msgstr "Väri jota käytetään kirjoittamishuomautuksen kirjasimessa" +msgid "The color to use for the typing notification" +msgstr "Väri jota käytetään kirjoittamishuomautuksessa" msgid "Typing notification font" msgstr "Kirjoittamishuomautuksen kirjasin" @@ -12405,6 +12369,9 @@ "The 'Manual' browser command has been chosen, but no command has been set." msgstr "Oma selainkomento -asetus valittu, mutta komentoa ei ole asetettu." +msgid "No message" +msgstr "Ei viestiä" + msgid "Open All Messages" msgstr "Avaa kaikki viestit" @@ -12420,9 +12387,6 @@ msgid "You have pounced!" msgstr "Uusi ilmoitus" -msgid "No message" -msgstr "Ei viestiä" - msgid "The following plugins will be unloaded." msgstr "Seuraavat liitännäiset otetaan pois käytöstä." @@ -12591,17 +12555,14 @@ msgid "Unknown.... Please report this!" msgstr "Tuntematon... Raportoi tästä!" -#, fuzzy msgid "Theme failed to unpack." -msgstr "Hymiöteeman purkaminen epäonnistui." - -#, fuzzy +msgstr "Teeman purkaminen epäonnistui." + msgid "Theme failed to load." -msgstr "Hymiöteeman purkaminen epäonnistui." - -#, fuzzy +msgstr "Teeman lataaminen epäonnistui." + msgid "Theme failed to copy." -msgstr "Hymiöteeman purkaminen epäonnistui." +msgstr "Teeman kopioiminen epäonnistui." msgid "Install Theme" msgstr "Asenna teema" @@ -12740,8 +12701,9 @@ msgid "Example: stunserver.org" msgstr "Esimerkki: stunserver.org" -msgid "_Autodetect IP address" -msgstr "_Hae IP-osoite automaattisesti" +#, c-format +msgid "Use _automatically detected IP address: %s" +msgstr "Käytä _automaattisesti tunnistettua IP-osoitetta: %s" msgid "Public _IP:" msgstr "Julkinen _IP:" @@ -13108,32 +13070,17 @@ msgid "Status for %s" msgstr "%s:n tila" -#. -#. * TODO: We should enable/disable the add button based on -#. * whether the user has entered all required data. That -#. * would eliminate the need for this check and provide a -#. * better user experience. -#. +#, c-format +msgid "" +"A custom smiley for '%s' already exists. Please use a different shortcut." +msgstr "Oikotielle ”%s” on jo oma hymiö. Valitse toinen oikotie." + msgid "Custom Smiley" msgstr "Oma hymiö" -msgid "More Data needed" -msgstr "Lisää tietoja tarvitaan" - -msgid "Please provide a shortcut to associate with the smiley." -msgstr "Syötä hymiöön liitettävä oikotie." - -#, fuzzy, c-format -msgid "" -"A custom smiley for '%s' already exists. Please use a different shortcut." -msgstr "Valitulle oikotielle on jo oma hymiö. Valitse toisenlainen oikotie." - msgid "Duplicate Shortcut" msgstr "Monista oikotie" -msgid "Please select an image for the smiley." -msgstr "Valitse hymiölle kuva." - msgid "Edit Smiley" msgstr "Muokkaa hymiötä" @@ -13156,9 +13103,8 @@ msgid "Custom Smiley Manager" msgstr "Omien hymiöiden hallinta" -#, fuzzy msgid "Select Buddy Icon" -msgstr "Valitse tuttava" +msgstr "Valitse tuttavakuvake" msgid "Click to change your buddyicon for this account." msgstr "Napsauta muuttaaksesi tämän käyttäjätilin tuttavakuvaketta." @@ -13245,10 +13191,10 @@ msgstr "Käynnistintä ei voi lähettää" msgid "" -"You dragged a desktop launcher. Most likely you wanted to send whatever this " -"launcher points to instead of this launcher itself." -msgstr "" -"Raahasit työpöytäkäynnistimen. Luultavasti halusit lähettää tiedoston johon " +"You dragged a desktop launcher. Most likely you wanted to send the target of " +"this launcher instead of this launcher itself." +msgstr "" +"Raahasit työpöytäkäynnistimen. Luultavasti halusit lähettää kohteen johon " "käynnistin osoittaa, käynnistimen itsensä sijaan." #, c-format @@ -13381,81 +13327,65 @@ msgid "Displays statistical information about your buddies' availability" msgstr "Näyttää tilastotietoja tuttavien läsnäolosta" -#, fuzzy msgid "Server name request" -msgstr "Palvelimen osoite" - -#, fuzzy +msgstr "Palvelinnimen pyyntö" + msgid "Enter an XMPP Server" -msgstr "Syötä konferenssipalvelin" - -#, fuzzy +msgstr "Syötä XMPP-palvelin" + msgid "Select an XMPP server to query" -msgstr "Valitse konferenssipalvelin" - -#, fuzzy +msgstr "Valitse XMPP-palvelin johon kysely lähetetään" + msgid "Find Services" -msgstr "Online-palvelut" - -#, fuzzy +msgstr "Etsi palveluita" + msgid "Add to Buddy List" -msgstr "Lähetä tuttavat" - -#, fuzzy +msgstr "Lisää tuttaviin" + msgid "Gateway" -msgstr "poistuu" - -#, fuzzy +msgstr "Yhdyskäytävä" + msgid "Directory" -msgstr "Lokihakemisto" - -#, fuzzy +msgstr "Hakemisto" + msgid "PubSub Collection" -msgstr "Äänivalinta" - -#, fuzzy +msgstr "PubSub-kokoelma" + msgid "PubSub Leaf" -msgstr "PubSub-palvelu" - -#, fuzzy +msgstr "PubSub-lehti" + msgid "" "\n" "Description: " msgstr "" "\n" -"Kuvaus: Aavemainen" +"Kuvaus: " #. Create the window. -#, fuzzy msgid "Service Discovery" -msgstr "Palvelulöytötiedot" - -#, fuzzy +msgstr "Palveluiden löytö" + msgid "_Browse" -msgstr "_Selain:" - -#, fuzzy +msgstr "_Selaa" + msgid "Server does not exist" -msgstr "Käyttäjää ei ole" - -#, fuzzy +msgstr "Palvelinta ei ole" + msgid "Server does not support service discovery" -msgstr "Palvelin ei tue estämistä" - -#, fuzzy +msgstr "Palvelin ei palveluiden löytämistä" + msgid "XMPP Service Discovery" -msgstr "Palvelulöytötiedot" +msgstr "XMPP-palveluiden löytö" msgid "Allows browsing and registering services." -msgstr "" - -#, fuzzy +msgstr "Sallii palveluiden selaamisen ja rekisteröimisen." + msgid "" "This plugin is useful for registering with legacy transports or other XMPP " "services." msgstr "" -"Tätä liitännäistä voidaan käyttää XMPP-palvelimien tai -asiakasohjelmien " -"virheenjäljitykseen." +"Tätä liitännäistä voidaan käyttää vanhojen siirtotapojen tai muiden XMPP-" +"palveluiden rekisteröimiseen." msgid "Buddy is idle" msgstr "Tuttava on jouten" @@ -13845,7 +13775,7 @@ #. * summary msgid "" "The Music Messaging Plugin allows a number of users to simultaneously work " -"on a piece of music by editting a common score in real-time." +"on a piece of music by editing a common score in real-time." msgstr "" "Musiikkiviestintäliitännäinen sallii usean käyttäjän työskennellä yhtä aikaa " "musiikkikappaleen parissa, muokkaamalla samaa sävellystä yhdessä, " @@ -13968,7 +13898,6 @@ msgid "Highlighted Message Name Color" msgstr "Korostetun viestin nimen väri" -#, fuzzy msgid "Typing Notification Color" msgstr "Kirjoittamishuomautuksen väri" @@ -14001,23 +13930,20 @@ msgid "GTK+ Text Shortcut Theme" msgstr "GTK+-tekstioikopolkuteema" -#, fuzzy msgid "Disable Typing Notification Text" -msgstr "Ota kirjoittamishuomautus käyttöön" - -#, fuzzy +msgstr "Ota kirjoittamishuomautus pois käytöstä" + msgid "GTK+ Theme Control Settings" -msgstr "Pidgin GTK+-teemanhallinta" - -#, fuzzy +msgstr "GTK+-teemanhallinta" + msgid "Colors" -msgstr "Sulje" +msgstr "Värit" msgid "Fonts" msgstr "Kirjasimet" msgid "Miscellaneous" -msgstr "" +msgstr "Sekalaiset" msgid "Gtkrc File Tools" msgstr "Gtkrc-tiedostotyökalut" @@ -14106,7 +14032,7 @@ #. *< summary msgid "" "Adds a Send button to the entry area of the conversation window. Intended " -"for when no physical keyboard is present." +"for use when no physical keyboard is present." msgstr "" "Lisää keskusteluikkunan kirjoitusalueelle Lähetä-painikkeen. Tarkoitettu " "käytettäväksi, kun fyysistä näppäimistöä ei ole käytettävissä." @@ -14162,94 +14088,78 @@ msgid "Replaces text in outgoing messages according to user-defined rules." msgstr "Korvaa lähetettävän tekstin käyttäjän määritelmän mukaan." -#, fuzzy msgid "Just logged in" -msgstr "Et ole kirjautunut sisään." - -#, fuzzy +msgstr "Juuri kirjautunut sisään" + msgid "Just logged out" -msgstr "%s kirjautui ulos." +msgstr "Juuri kirjautunus ulos" msgid "" "Icon for Contact/\n" "Icon for Unknown person" msgstr "" - -#, fuzzy +"Kuvake yhteystiedolle/\n" +"kuvake tuntemattomalle henkilölle" + msgid "Icon for Chat" -msgstr "Liity ryhmäkeskusteluun" - -#, fuzzy +msgstr "Kuvake ryhmäkeskustelulle" + msgid "Ignored" -msgstr "Jätä huomiotta" - -#, fuzzy +msgstr "Jätetty huomiotta" + msgid "Founder" -msgstr "Äänekkäämpi" - -#, fuzzy +msgstr "Perustaja" + msgid "Operator" -msgstr "Opera" +msgstr "Operaattori" msgid "Half Operator" -msgstr "" - -#, fuzzy +msgstr "Puolioperaattori" + msgid "Authorization dialog" -msgstr "Valtuutus annettu" - -#, fuzzy +msgstr "Valtuutusvalintaikkuna" + msgid "Error dialog" -msgstr "Virheet " - -#, fuzzy +msgstr "Virhevalintaikkuna" + msgid "Information dialog" -msgstr "Tiedot" +msgstr "Tietovalintaikkuna" msgid "Mail dialog" -msgstr "" - -#, fuzzy +msgstr "Sähköpostin valintaikkuna" + msgid "Question dialog" -msgstr "Pyyntövalintaikkuna" - -#, fuzzy +msgstr "Kysymysvalintaikkuna" + msgid "Warning dialog" -msgstr "Varoitustaso" +msgstr "Varoitusvalintaikkuna" msgid "What kind of dialog is this?" -msgstr "" - -#, fuzzy +msgstr "Minkä tyyppinen valintaikkuna tämä on?" + msgid "Status Icons" -msgstr "%s:n tila" - -#, fuzzy +msgstr "Tilakuvakkeet" + msgid "Chatroom Emblems" -msgstr "Keskusteluhuoneen paikallisasetus" - -#, fuzzy +msgstr "Keskusteluhuoneiden tunnuskuvat" + msgid "Dialog Icons" -msgstr "Vaihda kuvake" - -#, fuzzy +msgstr "Valintaikkunan kuvakkeet" + msgid "Pidgin Icon Theme Editor" -msgstr "Pidgin GTK+-teemanhallinta" - -#, fuzzy +msgstr "Pidginin kuvaketeemaeditori" + msgid "Contact" -msgstr "Yhteystiedot" - -#, fuzzy +msgstr "Yhteystieto" + msgid "Pidgin Buddylist Theme Editor" -msgstr "Tuttavaluettelon teema" - -#, fuzzy +msgstr "Pidginin tuttavaluettelon teemaeditori" + msgid "Edit Buddylist Theme" -msgstr "Tuttavaluettelon teema" +msgstr "Muokkaa tuttavaluettelon teemaa" msgid "Edit Icon Theme" -msgstr "" +msgstr "Muokkaa kuvaketeemaa" #. *< type #. *< ui_requirement @@ -14258,16 +14168,14 @@ #. *< priority #. *< id #. * description -#, fuzzy msgid "Pidgin Theme Editor" -msgstr "Pidgin GTK+-teemanhallinta" +msgstr "Pidginin teemaeditori" #. *< name #. *< version #. * summary -#, fuzzy msgid "Pidgin Theme Editor." -msgstr "Pidgin GTK+-teemanhallinta" +msgstr "Pidginin teemaeditori." #. *< type #. *< ui_requirement @@ -14442,9 +14350,9 @@ msgstr "Asetukset jotka liittyvät erityisesti Pidginin Windows-versioon " msgid "" -"Provides options specific to Pidgin for Windows , such as buddy list docking." -msgstr "" -"Tarjoaa Windows Pidgin -sidonnaisia valintoja, kuten tuttavat-ikkunan " +"Provides options specific to Pidgin for Windows, such as buddy list docking." +msgstr "" +"Tarjoaa Windows Pidgin -sidonnaisia valintoja, kuten Tuttavat-ikkunan " "telakoinnin." msgid "Logged out." @@ -14486,6 +14394,15 @@ "Tätä liitännäistä voidaan käyttää XMPP-palvelimien tai -asiakasohjelmien " "virheenjäljitykseen." +#~ msgid "More Data needed" +#~ msgstr "Lisää tietoja tarvitaan" + +#~ msgid "Please provide a shortcut to associate with the smiley." +#~ msgstr "Syötä hymiöön liitettävä oikotie." + +#~ msgid "Please select an image for the smiley." +#~ msgstr "Valitse hymiölle kuva." + #~ msgid "Activate which ID?" #~ msgstr "Mikä tunnus (ID) aktivoidaan?" diff -r a6d84d9de605 -r 14131ba5a07c po/sl.po --- a/po/sl.po Mon Jul 06 04:37:06 2009 +0000 +++ b/po/sl.po Mon Jul 06 05:27:30 2009 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Pidgin 2.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-02 01:34-0700\n" +"POT-Creation-Date: 2009-07-04 15:07-0700\n" "PO-Revision-Date: 2009-05-02 16:54+0100\n" "Last-Translator: Martin Srebotnjak \n" "Language-Team: Martin Srebotnjak \n" @@ -2611,9 +2611,10 @@ "dnevnika." #. * description +#, fuzzy msgid "" "When viewing logs, this plugin will include logs from other IM clients. " -"Currently, this includes Adium, MSN Messenger, and Trillian.\n" +"Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n" "\n" "WARNING: This plugin is still alpha code and may crash frequently. Use it " "at your own risk!" @@ -2667,8 +2668,9 @@ msgid "Save messages sent to an offline user as pounce." msgstr "Shrani sporočila, poslana neprijavljenemu uporabniku, kot opozorilo." -msgid "" -"The rest of the messages will be saved as pounce. You can edit/delete the " +#, fuzzy +msgid "" +"The rest of the messages will be saved as pounces. You can edit/delete the " "pounce from the `Buddy Pounce' dialog." msgstr "" "Preostanek sporočila bo shranjen kot opozorilo. Opozorilo lahko uredite/" @@ -4809,7 +4811,8 @@ msgid "Error in chat %s" msgstr "Napaka v pomenku %s" -msgid "An error occured on the in-band bytestream transfer\n" +#, fuzzy +msgid "An error occurred on the in-band bytestream transfer\n" msgstr "V notranje pasovnem zlogovnem pretoku je prišlo do napake\n" msgid "Transfer was closed." @@ -6347,9 +6350,10 @@ "%s appears to be offline and did not receive the message that you just sent." msgstr "%s ni na zvezi in ni sprejel sporočila, ki ste ga pravkar poslali." -msgid "" -"Unable to connect to server. Please enter the address of the server you wish " -"to connect to." +#, fuzzy +msgid "" +"Unable to connect to server. Please enter the address of the server to which " +"you wish to connect." msgstr "" "Ni se mogoče povezati na strežnik. Vnesite naslov strežnika, na katerega se " "želite povezati." @@ -6727,9 +6731,10 @@ msgstr "Ponovno zahtevaj pooblastitev" #. Unregistered username -#. uid is not exist -msgid "Invalid username." -msgstr "Neveljavno uporabniško ime." +#. the username does not exist +#, fuzzy +msgid "Username does not exist" +msgstr "Uporabnik ne obstaja" #. Suspended account msgid "Your account is currently suspended." @@ -7998,6 +8003,10 @@ msgid "Enter the text from the image" msgstr "Vnesite besedilo s slike" +#. uid is not exist +msgid "Invalid username." +msgstr "Neveljavno uporabniško ime." + #, c-format msgid "Unknown reply when checking password (0x%02X)" msgstr "Neznan odgovor pri preverjanju gesla (0x%02X)" @@ -9625,7 +9634,6 @@ msgid "Received invalid data" msgstr "Na povezavi s strežnikom prejeti neveljavni podatki." -#. Password incorrect #, fuzzy msgid "Incorrect Password" msgstr "Neveljavno geslo" @@ -9639,11 +9647,6 @@ "Neznana številka napake %d. Prijavljanje v spletno stran Yahoo! lahko to " "odpravi." -#. the username does not exist -#, fuzzy -msgid "Username does not exist" -msgstr "Uporabnik ne obstaja" - #. indicates a lock of some description #, fuzzy msgid "" @@ -11132,6 +11135,10 @@ msgid "The text information for a buddy's status" msgstr "Spremeni podatke za uporabika %s" +#, fuzzy +msgid "Type the host name for this certificate." +msgstr "Vnesite ime gostitelja, kateremu je namenjeno to digitalno potrdilo." + #. Widget creation function msgid "SSL Servers" msgstr "Strežniki SSL" @@ -12067,7 +12074,8 @@ msgid "Hyperlink visited color" msgstr "Barva obiskane povezave" -msgid "Color to draw hyperlinks after it has been visited (or activated)." +#, fuzzy +msgid "Color to draw hyperlink after it has been visited (or activated)." msgstr "Barva za izpis hiperpovezav, ki ste jih že obiskali (ali aktivirali)." msgid "Hyperlink prelight color" @@ -12104,13 +12112,22 @@ msgid "Action Message Name Color for Whispered Message" msgstr "Ime barve sporočila dejanja za šepetano sporočilo" +#, fuzzy +msgid "Color to draw the name of a whispered action message." +msgstr "Barva izrisa imena na sporočilo dejanja." + msgid "Whisper Message Name Color" msgstr "Barva imena šepetanega sporočila" +#, fuzzy +msgid "Color to draw the name of a whispered message." +msgstr "Barva izrisa imena na sporočilo dejanja." + msgid "Typing notification color" msgstr "Barva obvestila o tipkanju" -msgid "The color to use for the typing notification font" +#, fuzzy +msgid "The color to use for the typing notification" msgstr "Barva pisave za obvestilo o tipkanju" msgid "Typing notification font" @@ -12510,6 +12527,9 @@ "Vašega brskalnika ni bilo mogoče zagnati, ker ste v nastavitvah izbrali " "poljuben brskalnik, a niste nastavili ukaza." +msgid "No message" +msgstr "Ni sporočil" + msgid "Open All Messages" msgstr "Odpri vsa sporočila" @@ -12526,9 +12546,6 @@ msgstr "" "Dobili ste opozorilo prijatelja!" -msgid "No message" -msgstr "Ni sporočil" - msgid "The following plugins will be unloaded." msgstr "Odloženi bodo naslednji vtičniki." @@ -12846,7 +12863,8 @@ msgid "Example: stunserver.org" msgstr "Primer: stunserver.org" -msgid "_Autodetect IP address" +#, fuzzy, c-format +msgid "Use _automatically detected IP address: %s" msgstr "_Samozaznaj naslov IP" msgid "Public _IP:" @@ -13216,32 +13234,17 @@ msgid "Status for %s" msgstr "Stanje za %s" -#. -#. * TODO: We should enable/disable the add button based on -#. * whether the user has entered all required data. That -#. * would eliminate the need for this check and provide a -#. * better user experience. -#. -msgid "Custom Smiley" -msgstr "Smejček po meri" - -msgid "More Data needed" -msgstr "Potrebnih je več podatkov" - -msgid "Please provide a shortcut to associate with the smiley." -msgstr "Podajte tipke za bližnjico, ki bodo povezane s smejčkom." - #, c-format msgid "" "A custom smiley for '%s' already exists. Please use a different shortcut." msgstr "Smejček po meri za '%s' že obstaja. Navedite druge tipke za bližnjico." +msgid "Custom Smiley" +msgstr "Smejček po meri" + msgid "Duplicate Shortcut" msgstr "Podvojena tipka za bližnjico" -msgid "Please select an image for the smiley." -msgstr "Izberite sliko smejčka." - msgid "Edit Smiley" msgstr "Uredi smejčka" @@ -13350,9 +13353,10 @@ msgid "Cannot send launcher" msgstr "Ni mogoče poslati zaganjalnika" -msgid "" -"You dragged a desktop launcher. Most likely you wanted to send whatever this " -"launcher points to instead of this launcher itself." +#, fuzzy +msgid "" +"You dragged a desktop launcher. Most likely you wanted to send the target of " +"this launcher instead of this launcher itself." msgstr "" "Povlekli ste namizni zaganjalnik. Najverjetneje ste želeli namesto samega " "zaganjalnika poslati tisto, na kar ta zaganjalnik kaže." @@ -13947,9 +13951,10 @@ msgstr "Vtičnik za glasbeno sporočanje - za skupinsko skladanje." #. * summary +#, fuzzy msgid "" "The Music Messaging Plugin allows a number of users to simultaneously work " -"on a piece of music by editting a common score in real-time." +"on a piece of music by editing a common score in real-time." msgstr "" "Vtičnik za glasbeno sporočanje omogoča več uporabnikom hkratno sodelovanju " "pri glasbenem ustvarjanju kompozicije v resničnem času." @@ -14212,9 +14217,10 @@ msgstr "Gumb Pošlji okna pogovora" #. *< summary +#, fuzzy msgid "" "Adds a Send button to the entry area of the conversation window. Intended " -"for when no physical keyboard is present." +"for use when no physical keyboard is present." msgstr "" "Doda gumb Pošlji v vnosno območje pogovornega okna. Namenjeno za primere, ko " "fizična tipkovnica ni prisotna." @@ -14544,8 +14550,9 @@ msgid "Options specific to Pidgin for Windows." msgstr "Nastavitve, specifične za %s v okolju Windows." -msgid "" -"Provides options specific to Pidgin for Windows , such as buddy list docking." +#, fuzzy +msgid "" +"Provides options specific to Pidgin for Windows, such as buddy list docking." msgstr "" "Ponuja nastavitve, specifične za %s v okolju Windows, kot je sidranje " "seznama prijateljev." @@ -14591,6 +14598,15 @@ #~ msgid "Activate which ID?" #~ msgstr "Kateri ID naj bo aktiviran?" +#~ msgid "More Data needed" +#~ msgstr "Potrebnih je več podatkov" + +#~ msgid "Please provide a shortcut to associate with the smiley." +#~ msgstr "Podajte tipke za bližnjico, ki bodo povezane s smejčkom." + +#~ msgid "Please select an image for the smiley." +#~ msgstr "Izberite sliko smejčka." + #~ msgid "Cursor Color" #~ msgstr "Barva kazalke" diff -r a6d84d9de605 -r 14131ba5a07c po/zh_CN.po --- a/po/zh_CN.po Mon Jul 06 04:37:06 2009 +0000 +++ b/po/zh_CN.po Mon Jul 06 05:27:30 2009 +0000 @@ -1,20 +1,21 @@ -# pidgin 软件包的简体中文翻译。 -# Copyright (C) 2003 pidgin team. +# Pidgin 软件包的简体中文翻译。 +# Copyright (C) 2009 pidgin team. # This file is distributed under the same license as the pidgin package. # Funda Wang , 2003, 2004. +# liyuekui , 2009. +# Aron Xu , 2009. # msgid "" msgstr "" "Project-Id-Version: pidgin HEAD\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-02 01:34-0700\n" -"PO-Revision-Date: 2007-05-20 20:22+0800\n" -"Last-Translator: Funda Wang \n" -"Language-Team: zh_CN \n" +"POT-Creation-Date: 2009-07-04 15:17-0700\n" +"PO-Revision-Date: 2009-04-23 00:32+0800\n" +"Last-Translator: Aron Xu \n" +"Language-Team: Chinese (simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" #. Translators may want to transliterate the name. #. It is not to be translated. @@ -25,7 +26,7 @@ msgid "%s. Try `%s -h' for more information.\n" msgstr "%s。试试“%s -h”查看帮助。\n" -#, fuzzy, c-format +#, c-format msgid "" "%s\n" "Usage: %s [OPTION]...\n" @@ -60,7 +61,6 @@ msgid "Account was not added" msgstr "账户未添加" -#, fuzzy msgid "Username of an account must be non-empty." msgstr "账户的用户名必须非空。" @@ -70,7 +70,6 @@ msgid "Remember password" msgstr "记住密码" -#, fuzzy msgid "There are no protocol plugins installed." msgstr "未安装协议插件。" @@ -86,9 +85,8 @@ msgid "Protocol:" msgstr "协议:" -#, fuzzy msgid "Username:" -msgstr "用户名(_U):" +msgstr "用户名:" msgid "Password:" msgstr "密码:" @@ -97,7 +95,6 @@ msgstr "别名:" #. Register checkbox -#, fuzzy msgid "Create this account on the server" msgstr "在服务器上创建此新帐户" @@ -179,7 +176,6 @@ msgid "Default" msgstr "默认" -#, fuzzy msgid "You must provide a username for the buddy." msgstr "您必须提供好友的用户名。" @@ -198,13 +194,11 @@ msgid "Username" msgstr "用户名" -#, fuzzy msgid "Alias (optional)" -msgstr "给联系人起名" - -#, fuzzy +msgstr "联系人别名(可选)" + msgid "Add in group" -msgstr "添加组" +msgstr "添加到组" msgid "Account" msgstr "账户" @@ -346,9 +340,8 @@ msgid "Plugins" msgstr "插件" -#, fuzzy msgid "Block/Unblock" -msgstr "取消屏蔽" +msgstr "屏蔽/取消屏蔽" msgid "Block" msgstr "屏蔽" @@ -356,11 +349,10 @@ msgid "Unblock" msgstr "取消屏蔽" -#, fuzzy msgid "" "Please enter the username or alias of the person you would like to Block/" "Unblock." -msgstr "您想要跟谁聊?请输入他/她的用户名或别名。" +msgstr "清输入你想要屏蔽/解除屏蔽的用户名活别名。" #. Not multiline #. Not masked? @@ -371,7 +363,6 @@ msgid "New Instant Message" msgstr "新即时消息" -#, fuzzy msgid "Please enter the username or alias of the person you would like to IM." msgstr "您想要跟谁聊?请输入他/她的用户名或别名。" @@ -387,11 +378,10 @@ msgid "Join" msgstr "加入" -#, fuzzy msgid "" "Please enter the username or alias of the person whose log you would like to " "view." -msgstr "您想要查看谁的日志?请输入他/她的用户名或别名。" +msgstr "您想要查看和谁聊天的日志?请输入他/她的用户名或别名。" #. Create the "Options" frame. msgid "Options" @@ -400,20 +390,17 @@ msgid "Send IM..." msgstr "发送消息..." -#, fuzzy msgid "Block/Unblock..." -msgstr "取消屏蔽" +msgstr "屏蔽/取消屏蔽..." msgid "Join Chat..." msgstr "加入聊天..." -#, fuzzy msgid "View Log..." -msgstr "查看日志" - -#, fuzzy +msgstr "查看日志..." + msgid "View All Logs" -msgstr "查看日志" +msgstr "查看全部日志" msgid "Show" msgstr "显示" @@ -436,19 +423,17 @@ msgid "By Log Size" msgstr "按日志大小" -#, fuzzy msgid "Buddy" -msgstr "好友(_B):" +msgstr "好友" msgid "Chat" msgstr "聊天" -#, fuzzy msgid "Grouping" -msgstr "组" +msgstr "分组" msgid "Certificate Import" -msgstr "证书导入" +msgstr "导入证书" msgid "Specify a hostname" msgstr "指定主机名" @@ -503,17 +488,17 @@ msgstr "" msgid "SSL Host Certificate" -msgstr "" +msgstr "SSL 主机证书" #, c-format msgid "Really delete certificate for %s?" -msgstr "" +msgstr "确实要删除 %s 的证书吗?" msgid "Confirm certificate delete" -msgstr "" +msgstr "确认删除证书" msgid "Certificate Manager" -msgstr "" +msgstr "证书管理器" #. Creating the user splits msgid "Hostname" @@ -615,7 +600,6 @@ msgid "Add Buddy Pounce..." msgstr "添加好友千里眼..." -#, fuzzy msgid "Invite..." msgstr "邀请" @@ -631,7 +615,8 @@ #, fuzzy, c-format msgid "List of %d user:\n" msgid_plural "List of %d users:\n" -msgstr[0] "用户列表:\n" +msgstr[0] "%d 个用户的列表:\n" +msgstr[1] "%d 个用户的列表:\n" msgid "Supported debug options are: version" msgstr "支持的调试选项有: version" @@ -650,7 +635,7 @@ msgid "" "%s is not a valid message class. See '/help msgcolor' for valid message " "classes." -msgstr "" +msgstr "%s 不是有效的信息类型。查看'/help msgcolor' 已查找有效的信息" #, c-format msgid "%s is not a valid color. See '/help msgcolor' for valid colors." @@ -727,6 +712,7 @@ msgid "File Transfers - %d%% of %d file" msgid_plural "File Transfers - %d%% of %d files" msgstr[0] "文件传送 - 已完成 %d%%,共 %d 个文件" +msgstr[1] "文件传送 - 已完成 %d%%,共 %d 个文件" #. Create the window. msgid "File Transfers" @@ -773,13 +759,11 @@ msgid "%.2f KiB/s" msgstr "%.2f KB/秒" -#, fuzzy msgid "Sent" -msgstr "设置(_S)" - -#, fuzzy +msgstr "已发送" + msgid "Received" -msgstr "收到的消息" +msgstr "已收到" msgid "Finished" msgstr "已完成" @@ -788,21 +772,20 @@ msgid "The file was saved as %s." msgstr "文件已另存为 %s。" -#, fuzzy msgid "Sending" -msgstr "发送" - -#, fuzzy +msgstr "正在发送" + msgid "Receiving" -msgstr "剩余" - -#, fuzzy, c-format +msgstr "正在接收" + +# c-format +#, c-format msgid "Conversation in %s on %s" -msgstr "与 %s 的对话" - -#, fuzzy, c-format +msgstr "在 %s 中与 %s 的对话" + +#, c-format msgid "Conversation with %s on %s" -msgstr "与 %s 的对话" +msgstr "与 %s 在 %s 的对话" msgid "%B %Y" msgstr "%Y年%m月" @@ -839,16 +822,14 @@ msgid "Conversations with %s" msgstr "与 %s 的对话" -#, fuzzy msgid "All Conversations" -msgstr "对话" +msgstr "全部对话" msgid "System Log" msgstr "系统日志" -#, fuzzy msgid "Calling ... " -msgstr "正在计算..." +msgstr "正在呼叫..." msgid "Hangup" msgstr "" @@ -874,12 +855,11 @@ msgid "%s is trying to start an unsupported media session type with you." msgstr "" -#, fuzzy msgid "You have rejected the call." -msgstr "您已经参与了频道%s%s" +msgstr "您已经拒绝呼叫" msgid "call: Make an audio call." -msgstr "" +msgstr "呼叫:音频呼叫。" msgid "Emails" msgstr "电子邮件" @@ -893,10 +873,11 @@ msgid "Subject" msgstr "主题" -#, c-format +#, fuzzy, c-format msgid "%s (%s) has %d new message." msgid_plural "%s (%s) has %d new messages." msgstr[0] "%s(%s) 有 %d 封新邮件。" +msgstr[1] "%s(%s) 有 %d 封新邮件。" msgid "New Mail" msgstr "新邮件" @@ -920,16 +901,14 @@ msgid "(none)" msgstr "(无)" -#, fuzzy msgid "URI" -msgstr "UIN" +msgstr "URI" msgid "ERROR" -msgstr "" - -#, fuzzy +msgstr "错误" + msgid "loading plugin failed" -msgstr "Ping 失败" +msgstr "载入插件失败" msgid "unloading plugin failed" msgstr "" @@ -966,9 +945,8 @@ "Please open the debug window and try again to see the exact error message." msgstr "" -#, fuzzy msgid "Select plugin to install" -msgstr "选择文件" +msgstr "选择插件以安装" msgid "You can (un)load plugins from the following list." msgstr "您可以卸载以下列表中的插件。" @@ -1059,16 +1037,14 @@ msgid "Play a sound" msgstr "播放声音" -#, fuzzy msgid "Pounce only when my status is not Available" -msgstr "仅当我的状态不可用时才监视(_O)" +msgstr "仅当我的状态不可用时才监视" msgid "Recurring" msgstr "再现" -#, fuzzy msgid "Cannot create pounce" -msgstr "无法更改昵称" +msgstr "无法创建监视" msgid "You do not have any accounts." msgstr "您没有帐户。" @@ -1174,13 +1150,11 @@ msgid "Logging" msgstr "日志" -#, fuzzy msgid "You must fill all the required fields." -msgstr "填入注册字段。" - -#, fuzzy +msgstr "您必须填入注册字段。" + msgid "The required fields are underlined." -msgstr "所需插件 %s 无法装入。" +msgstr "所需区域已用下划线标出。" msgid "Not implemented yet." msgstr "未实现。" @@ -1191,16 +1165,14 @@ msgid "Open File..." msgstr "打开文件..." -#, fuzzy msgid "Choose Location..." -msgstr "位置" +msgstr "选择位置..." msgid "Hit 'Enter' to find more rooms of this category." -msgstr "" - -#, fuzzy +msgstr "按'Enter'以寻找更多此分类下的聊天室。" + msgid "Get" -msgstr "设置(_S)" +msgstr "获取" #. Create the window. msgid "Room List" @@ -1233,9 +1205,8 @@ msgid "Others talk in chat" msgstr "别人在聊天中发言" -#, fuzzy msgid "Someone says your username in chat" -msgstr "别人在聊天中提到您的名字" +msgstr "有人在聊天中提到您的名字" msgid "GStreamer Failure" msgstr "GStreamer 失败" @@ -1273,7 +1244,7 @@ msgid "Method: " msgstr "方式:" -#, fuzzy, c-format +#, c-format msgid "" "Sound Command\n" "(%s for filename)" @@ -1297,9 +1268,8 @@ msgid "Only when not available" msgstr "仅当不可用时" -#, fuzzy msgid "Volume(0-100):" -msgstr "音量:" +msgstr "音量(0-100):" #. Sound events msgid "Sound Events" @@ -1492,24 +1462,20 @@ msgid "Offline" msgstr "离线" -#, fuzzy msgid "Online Buddies" -msgstr "离线好友" - -#, fuzzy +msgstr "在线好友" + msgid "Offline Buddies" msgstr "离线好友" -#, fuzzy msgid "Online/Offline" -msgstr "上线时间" +msgstr "在线/离线" msgid "Meebo" msgstr "" -#, fuzzy msgid "No Grouping" -msgstr "无声音" +msgstr "未分组" msgid "Nested Subgroup" msgstr "" @@ -1517,12 +1483,11 @@ msgid "Nested Grouping (experimental)" msgstr "" -#, fuzzy msgid "Provides alternate buddylist grouping options." -msgstr "提供与 Evolution 的集成。" +msgstr "提供其他分组选项。" msgid "Lastlog" -msgstr "Lastlog" +msgstr "最近日志" #. Translator Note: The "backlog" is the conversation buffer/history. msgid "lastlog: Searches for a substring in the backlog." @@ -1547,12 +1512,11 @@ msgid "TinyURL (or other) address prefix" msgstr "" -#, fuzzy msgid "TinyURL" -msgstr "URL" +msgstr "TinyURL" msgid "TinyURL plugin" -msgstr "" +msgstr "TinyURL 插件" msgid "When receiving a message with URL(s), TinyURL for easier copying" msgstr "" @@ -1647,13 +1611,13 @@ msgstr "" #. Make messages -#, fuzzy, c-format +#, c-format msgid "Accept certificate for %s?" -msgstr "接受聊天邀请吗?" +msgstr "接受 %s 的聊天邀请吗?" #. TODO: Find what the handle ought to be msgid "SSL Certificate Verification" -msgstr "" +msgstr "SSL 证书验证" msgid "_View Certificate..." msgstr "查看证书(_V)..." @@ -1725,16 +1689,14 @@ msgstr "" #. TODO: Find what the handle ought to be -#, fuzzy msgid "Certificate Information" -msgstr "服务器信息" +msgstr "证书信息" msgid "Registration Error" msgstr "注册错误" -#, fuzzy msgid "Unregistration Error" -msgstr "注册错误" +msgstr "解除注册错误" #, c-format msgid "+++ %s signed on" @@ -1792,7 +1754,6 @@ msgid "%s left the room (%s)." msgstr "%s 离开了聊天室(%s)。" -#, fuzzy msgid "Invite to chat" msgstr "邀请会议" @@ -2166,9 +2127,9 @@ msgid "Unable to load your plugin." msgstr "无法装入您的插件。" -#, fuzzy, c-format +#, c-format msgid "%s requires %s, but it failed to unload." -msgstr "依赖的插件 %s 装入失败。" +msgstr "%s 依赖的插件 %s 卸载失败。" msgid "Autoaccept" msgstr "自动接受" @@ -2224,9 +2185,8 @@ "(only when there's no conversation with the sender)" msgstr "" -#, fuzzy msgid "Create a new directory for each user" -msgstr "选择要搜索的用户目录" +msgstr "为每个用户创建新目录" msgid "Notes" msgstr "备注" @@ -2516,9 +2476,10 @@ msgstr "在日志查看器中包含其它即时通讯客户的日志。" #. * description +#, fuzzy msgid "" "When viewing logs, this plugin will include logs from other IM clients. " -"Currently, this includes Adium, MSN Messenger, and Trillian.\n" +"Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n" "\n" "WARNING: This plugin is still alpha code and may crash frequently. Use it " "at your own risk!" @@ -2571,7 +2532,7 @@ msgstr "" msgid "" -"The rest of the messages will be saved as pounce. You can edit/delete the " +"The rest of the messages will be saved as pounces. You can edit/delete the " "pounce from the `Buddy Pounce' dialog." msgstr "" @@ -2856,9 +2817,8 @@ msgstr "Purple 联系人" #. Creating the options for the protocol -#, fuzzy msgid "Local Port" -msgstr "地区" +msgstr "本地端口" msgid "Bonjour" msgstr "Bonjour" @@ -2879,9 +2839,8 @@ msgid "Could not listen on socket" msgstr "无法在套接字上监听" -#, fuzzy msgid "Error communicating with local mDNSResponder." -msgstr "与服务器通讯出错" +msgstr "与本地 DNS 服务通讯出错" msgid "Invalid proxy settings" msgstr "无效的代理设置" @@ -2906,9 +2865,9 @@ msgid "Buddylist saved successfully!" msgstr "好友列表成功保存!" -#, fuzzy, c-format +#, c-format msgid "Couldn't write buddy list for %s to %s" -msgstr "无法装入好友列表" +msgstr "无法为 %s 写入 %s 好友列表" msgid "Couldn't load buddylist" msgstr "无法装入好友列表" @@ -3246,13 +3205,12 @@ msgid "Ban on %s by %s, set %s ago" msgstr "" -#, fuzzy, c-format +#, c-format msgid "Ban on %s" -msgstr "原因: %s" - -#, fuzzy +msgstr "屏蔽: %s" + msgid "End of ban list" -msgstr "未列出" +msgstr "屏蔽列表结束" #, c-format msgid "You are banned from %s." @@ -3373,13 +3331,12 @@ #. We only want to do the following dance if the connection #. has not been successfully completed. If it has, just #. notify the user that their /nick command didn't go. -#, fuzzy, c-format +#, c-format msgid "The nickname \"%s\" is already being used." -msgstr "此聊天名已经在使用中" - -#, fuzzy +msgstr "昵称 \"%s\" 已被使用。" + msgid "Nickname in use" -msgstr "昵称" +msgstr "昵称已被使用" msgid "Cannot change nick" msgstr "无法更改昵称" @@ -3398,9 +3355,9 @@ msgid "PING reply -- Lag: %lu seconds" msgstr "PING 响应 -- 延后: %lu 秒" -#, fuzzy, c-format +#, c-format msgid "Cannot join %s: Registration is required." -msgstr "需要注册" +msgstr "无法加入 %s:需要注册" msgid "Cannot join channel" msgstr "无法加入频道" @@ -3597,9 +3554,8 @@ msgid "Server requires TLS/SSL for login. No TLS/SSL support found." msgstr "服务器需要 TLS/SSL 才能登录。没有找到 TLS/SSL 支持。" -#, fuzzy msgid "You require encryption, but no TLS/SSL support found." -msgstr "服务器需要 TLS/SSL 才能登录。没有找到 TLS/SSL 支持。" +msgstr "您要求 TLS/SSL 登录,但没有找到 TLS/SSL 支持。" msgid "Server requires plaintext authentication over an unencrypted stream" msgstr "服务器需要在不加密流上使用纯文本验证" @@ -3631,19 +3587,14 @@ msgid "The BOSH connection manager terminated your session." msgstr "" -#, fuzzy msgid "No session ID given" -msgstr "没有给出理由。" - -#, fuzzy +msgstr "没有给出会话 ID" + msgid "Unsupported version of BOSH protocol" -msgstr "不支持的版本" - -#, fuzzy +msgstr "不支持 BOSH 协议的版本" + msgid "Unable to establish a connection with the server" -msgstr "" -"无法建立与服务器:\n" -"%s" +msgstr "无法与服务器建立连接" #, c-format msgid "" @@ -3653,9 +3604,8 @@ "无法建立与服务器:\n" "%s" -#, fuzzy msgid "Unable to establish SSL connection" -msgstr "无法初始化连接" +msgstr "无法建立 SSL 连接" msgid "Unable to create socket" msgstr "无法创建套接字" @@ -3727,12 +3677,11 @@ msgid "Operating System" msgstr "操作系统" -#, fuzzy msgid "Local Time" -msgstr "本地文件:" +msgstr "本地时间" msgid "Last Activity" -msgstr "" +msgstr "最近活动" msgid "Service Discovery Info" msgstr "服务目录信息" @@ -3744,9 +3693,8 @@ msgid "Extended Stanza Addressing" msgstr "额外地址" -#, fuzzy msgid "Multi-User Chat" -msgstr "给聊天起名" +msgstr "多用户聊天" #, fuzzy msgid "Multi-User Chat Extended Presence Information" @@ -3775,17 +3723,15 @@ msgid "In-Band Registration" msgstr "注册错误" -#, fuzzy msgid "User Location" -msgstr "位置" +msgstr "用户位置" #, fuzzy msgid "User Avatar" msgstr "用户搜索" -#, fuzzy msgid "Chat State Notifications" -msgstr "好友状态通知" +msgstr "聊天状态通知" msgid "Software Version" msgstr "软件版本" @@ -3822,9 +3768,8 @@ msgid "Reachability Address" msgstr "电子邮件地址" -#, fuzzy msgid "User Profile" -msgstr "个人资料" +msgstr "用户资料" #, fuzzy msgid "Jingle" @@ -3833,9 +3778,8 @@ msgid "Jingle Audio" msgstr "" -#, fuzzy msgid "User Nickname" -msgstr "用户名" +msgstr "用户昵称" msgid "Jingle ICE UDP" msgstr "" @@ -3956,13 +3900,11 @@ msgid "Unsubscribe" msgstr "退订" -#, fuzzy msgid "Log In" -msgstr "已登入" - -#, fuzzy +msgstr "登录" + msgid "Log Out" -msgstr "记录聊天" +msgstr "退出" msgid "Chatty" msgstr "唠叨" @@ -4009,9 +3951,8 @@ msgid "Email Address" msgstr "电子邮件地址" -#, fuzzy msgid "Search for XMPP users" -msgstr "搜索用户" +msgstr "搜索 XMPP 用户" #. "Search" msgid "Search" @@ -4096,17 +4037,14 @@ msgid "Affiliations:" msgstr "别名:" -#, fuzzy msgid "No users found" msgstr "未找到匹配的用户" -#, fuzzy msgid "Roles:" -msgstr "职务" - -#, fuzzy +msgstr "角色:" + msgid "Ping timeout" -msgstr "纯文本" +msgstr "Ping 超时" msgid "Read Error" msgstr "读取错误" @@ -4131,9 +4069,9 @@ msgid "Registration of %s@%s successful" msgstr "%s@%s 注册成功" -#, fuzzy, c-format +#, c-format msgid "Registration to %s successful" -msgstr "%s@%s 注册成功" +msgstr "%s 注册成功" msgid "Registration Successful" msgstr "注册成功" @@ -4141,17 +4079,15 @@ msgid "Registration Failed" msgstr "注册失败" -#, fuzzy, c-format +#, c-format msgid "Registration from %s successfully removed" -msgstr "%s@%s 注册成功" - -#, fuzzy +msgstr "%s 取消注册成功" + msgid "Unregistration Successful" -msgstr "注册成功" - -#, fuzzy +msgstr "取消注册成功" + msgid "Unregistration Failed" -msgstr "注册失败" +msgstr "取消注册失败" msgid "State" msgstr "州/省" @@ -4171,7 +4107,6 @@ msgid "Unregister" msgstr "取消注册" -#, fuzzy msgid "" "Please fill out the information below to change your account registration." msgstr "请在下面填入信息以注册您新的账户。" @@ -4179,24 +4114,22 @@ msgid "Please fill out the information below to register your new account." msgstr "请在下面填入信息以注册您新的账户。" -#, fuzzy msgid "Register New XMPP Account" -msgstr "注册新的 Jabber 账户" +msgstr "注册新的 XMPP 账户" msgid "Register" msgstr "注册" -#, fuzzy, c-format +#, c-format msgid "Change Account Registration at %s" -msgstr "更改 %s 的用户信息" - -#, fuzzy, c-format +msgstr "更改在 %s 的用户信息" + +#, c-format msgid "Register New Account at %s" -msgstr "注册新的 Jabber 账户" - -#, fuzzy +msgstr "在 %s 注册新账户" + msgid "Change Registration" -msgstr "注册错误" +msgstr "更改帐户" #, fuzzy msgid "Malformed BOSH Connect Server" @@ -4206,16 +4139,14 @@ msgid "Error unregistering account" msgstr "更改账户信息出错" -#, fuzzy msgid "Account successfully unregistered" -msgstr "您成功创建了一个群" +msgstr "取消帐户注册成功" msgid "Initializing Stream" msgstr "初始化流" -#, fuzzy msgid "Initializing SSL/TLS" -msgstr "初始化流" +msgstr "初始化 SSL/TLS" msgid "Authenticating" msgstr "正在认证" @@ -4306,9 +4237,8 @@ msgid "Password (again)" msgstr "再次输入新密码" -#, fuzzy msgid "Change XMPP Password" -msgstr "更改密码" +msgstr "更改 XMPP 密码" msgid "Please enter your new password" msgstr "请输入您的新密码" @@ -4496,9 +4426,9 @@ msgid "Unable to kick user %s" msgstr "无法踢出用户 %s" -#, fuzzy, c-format +#, c-format msgid "Unable to ping user %s" -msgstr "无法屏蔽用户 %s" +msgstr "无法 ping 用户 %s" #, fuzzy, c-format msgid "Unable to buzz, because there is nothing known about %s." @@ -4620,14 +4550,12 @@ #. *< version #. * summary #. * description -#, fuzzy msgid "XMPP Protocol Plugin" -msgstr "MSN 协议插件" +msgstr "XMPP 协议插件" #. Translators: 'domain' is used here in the context of Internet domains, e.g. pidgin.im -#, fuzzy msgid "Domain" -msgstr "罗马尼亚语" +msgstr "域" msgid "Require SSL/TLS" msgstr "" @@ -4647,22 +4575,20 @@ msgid "Connect server" msgstr "连接服务器" -#, fuzzy msgid "File transfer proxies" -msgstr "文件传送端口" +msgstr "文件传送代理" msgid "BOSH URL" msgstr "" #. this should probably be part of global smiley theme settings later on, #. shared with MSN -#, fuzzy msgid "Show Custom Smileys" -msgstr "显示自定义如下:" - -#, fuzzy, c-format +msgstr "显示自定义表情" + +#, c-format msgid "%s has left the conversation." -msgstr "%s 已经关闭了对话。" +msgstr "%s 已经离开了对话。" #, c-format msgid "Message from %s" @@ -4680,11 +4606,10 @@ msgid "Message delivery to %s failed: %s" msgstr "投递到 %s 的消息失败: %s" -#, fuzzy msgid "XMPP Message Error" -msgstr "Jabber 消息错误" - -#, fuzzy, c-format +msgstr "XMPP 消息错误" + +#, c-format msgid "(Code %s)" msgstr " (代码 %s)" @@ -4717,7 +4642,7 @@ msgstr "聊天 %s 出错" #, fuzzy -msgid "An error occured on the in-band bytestream transfer\n" +msgid "An error occurred on the in-band bytestream transfer\n" msgstr "打开文件时发生了错误。" #, fuzzy @@ -5437,7 +5362,7 @@ msgid "Mobile message was not sent because it was too long." msgstr "消息未发出,因为您尚未登入。" -#, c-format +#, fuzzy, c-format msgid "" "The MSN server will shut down for maintenance in %d minute. You will " "automatically be signed out at that time. Please finish any conversations " @@ -5457,6 +5382,11 @@ "现在进行中的对话。\n" "\n" "维护完成后,您将能够成功登入。" +msgstr[1] "" +"MSN 服务器即将于 %d 分钟后关闭进行维护。到那时,您将会被自动登出。请尽快关闭" +"现在进行中的对话。\n" +"\n" +"维护完成后,您将能够成功登入。" msgid "" "Message was not sent because the system is unavailable. This normally " @@ -6260,9 +6190,10 @@ "%s appears to be offline and did not receive the message that you just sent." msgstr "%s 显示为离线,因此未接受到您刚刚发出的消息。" -msgid "" -"Unable to connect to server. Please enter the address of the server you wish " -"to connect to." +#, fuzzy +msgid "" +"Unable to connect to server. Please enter the address of the server to which " +"you wish to connect." msgstr "无法连接到服务器。请输入您想要连接的服务器的地址。" msgid "Error. SSL support is not installed." @@ -6482,7 +6413,7 @@ #. Label msgid "Buddy Icon" -msgstr "好友图标" +msgstr "用户头像" msgid "Voice" msgstr "语音" @@ -6629,10 +6560,10 @@ msgstr "收到的认证" #. Unregistered username -#. uid is not exist -#, fuzzy -msgid "Invalid username." -msgstr "名称无效" +#. the username does not exist +#, fuzzy +msgid "Username does not exist" +msgstr "用户不存在" #. Suspended account msgid "Your account is currently suspended." @@ -6757,40 +6688,46 @@ msgid "_Decline" msgstr "拒绝(_D)" -#, c-format +#, fuzzy, c-format msgid "You missed %hu message from %s because it was invalid." msgid_plural "You missed %hu messages from %s because they were invalid." msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因是这些消息无效。" - -#, c-format +msgstr[1] "您错过了 %2$s 的 %1$hu 条消息,原因是这些消息无效。" + +#, fuzzy, c-format msgid "You missed %hu message from %s because it was too large." msgid_plural "You missed %hu messages from %s because they were too large." msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因是这些消息太大。" - -#, c-format +msgstr[1] "您错过了 %2$s 的 %1$hu 条消息,原因是这些消息太大。" + +#, fuzzy, c-format msgid "" "You missed %hu message from %s because the rate limit has been exceeded." msgid_plural "" "You missed %hu messages from %s because the rate limit has been exceeded." msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因是达到了等级限制。" +msgstr[1] "您错过了 %2$s 的 %1$hu 条消息,原因是达到了等级限制。" #, fuzzy, c-format msgid "" "You missed %hu message from %s because his/her warning level is too high." msgid_plural "" "You missed %hu messages from %s because his/her warning level is too high." -msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因是他/她太可恶了。" +msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因是他/她的警告级别过高。" +msgstr[1] "您错过了 %2$s 的 %1$hu 条消息,原因是他/她的警告级别过高。" #, fuzzy, c-format msgid "You missed %hu message from %s because your warning level is too high." msgid_plural "" "You missed %hu messages from %s because your warning level is too high." -msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因是您太可恶了。" - -#, c-format +msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因是您的警告级别过高。" +msgstr[1] "您错过了 %2$s 的 %1$hu 条消息,原因是您的警告级别过高。" + +#, fuzzy, c-format msgid "You missed %hu message from %s for an unknown reason." msgid_plural "You missed %hu messages from %s for an unknown reason." msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因未知。" +msgstr[1] "您错过了 %2$s 的 %1$hu 条消息,原因未知。" #. Data is assumed to be the destination bn #, c-format @@ -6945,7 +6882,7 @@ "您在登录过程完成之前请求设定配置文件。您的配置文件尚未设定;请在您完全连接后" "再试一次。" -#, c-format +#, fuzzy, c-format msgid "" "The maximum profile length of %d byte has been exceeded. It has been " "truncated for you." @@ -6953,11 +6890,12 @@ "The maximum profile length of %d bytes has been exceeded. It has been " "truncated for you." msgstr[0] "已经超过了配置文件的最大长度 %d 字节。程序为您自动截断了。" +msgstr[1] "已经超过了配置文件的最大长度 %d 字节。程序为您自动截断了。" msgid "Profile too long." msgstr "配置文件太长。" -#, c-format +#, fuzzy, c-format msgid "" "The maximum away message length of %d byte has been exceeded. It has been " "truncated for you." @@ -6965,6 +6903,7 @@ "The maximum away message length of %d bytes has been exceeded. It has been " "truncated for you." msgstr[0] "已经超过了离开消息的最大长度 %d 字节。程序自动为您截断了消息。" +msgstr[1] "已经超过了离开消息的最大长度 %d 字节。程序自动为您截断了消息。" msgid "Away message too long." msgstr "离开消息太长。" @@ -7904,6 +7843,11 @@ msgid "Enter the text from the image" msgstr "请输入组名称" +#. uid is not exist +#, fuzzy +msgid "Invalid username." +msgstr "名称无效" + #, c-format msgid "Unknown reply when checking password (0x%02X)" msgstr "" @@ -9489,7 +9433,6 @@ msgid "Received invalid data" msgstr "在与服务器的连接中收到了无效的数据。" -#. Password incorrect #, fuzzy msgid "Incorrect Password" msgstr "密码不对" @@ -9501,11 +9444,6 @@ "Logging into the Yahoo! website may fix this." msgstr "位置错误号 %d。登录到 Yahoo! 网站可能修复。" -#. the username does not exist -#, fuzzy -msgid "Username does not exist" -msgstr "用户不存在" - #. indicates a lock of some description #, fuzzy msgid "" @@ -10124,35 +10062,41 @@ msgid "Unknown." msgstr "未知。" -#, c-format +#, fuzzy, c-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d 秒" - -#, c-format +msgstr[1] "%d 秒" + +#, fuzzy, c-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d 天" - -#, c-format +msgstr[1] "%d 天" + +#, fuzzy, c-format msgid "%s, %d hour" msgid_plural "%s, %d hours" msgstr[0] "%s %d 小时" - -#, c-format +msgstr[1] "%s %d 小时" + +#, fuzzy, c-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d 小时" - -#, c-format +msgstr[1] "%d 小时" + +#, fuzzy, c-format msgid "%s, %d minute" msgid_plural "%s, %d minutes" msgstr[0] "%s %d 分" - -#, c-format +msgstr[1] "%s %d 分" + +#, fuzzy, c-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d 分" +msgstr[1] "%d 分" #, c-format msgid "Could not open %s: Redirected too many times" @@ -10273,7 +10217,7 @@ #. Buddy icon msgid "Use this buddy _icon for this account:" -msgstr "此账户使用此好友图标(_I):" +msgstr "用作当前账户头像(_I):" msgid "_Advanced" msgstr "高级(_A)" @@ -10370,11 +10314,12 @@ "如果您想要回到此窗口以便添加、编辑或删除帐户,可以从好友列表中窗口中选择帐" "户->添加/编辑" -#, c-format +#, fuzzy, c-format msgid "You have %d contact named %s. Would you like to merge them?" msgid_plural "" "You currently have %d contacts named %s. Would you like to merge them?" msgstr[0] "您已经有名为 %2$s 的 %1$d 位联系人。您是否想要合并?" +msgstr[1] "您已经有名为 %2$s 的 %1$d 位联系人。您是否想要合并?" msgid "" "Merging these contacts will cause them to share a single entry on the buddy " @@ -10384,11 +10329,9 @@ "合并联系人将会使得这些联系人在好友列表中只显示单一的一项,并且使用单一的对话" "窗口。如果您想再解散合并后的联系人,可以从联系人的快捷菜单中选择“展开”" -#, fuzzy msgid "Please update the necessary fields." msgstr "请更新必要的字段。" -#, fuzzy msgid "A_ccount" msgstr "账户(_C):" @@ -10687,10 +10630,11 @@ msgid "/Tools/Room List" msgstr "/工具(T)/房间列表(O)" -#, c-format +#, fuzzy, c-format msgid "%d unread message from %s\n" msgid_plural "%d unread messages from %s\n" msgstr[0] "来自 %2$s 的 %1$d 条未读消息\n" +msgstr[1] "来自 %2$s 的 %1$d 条未读消息\n" msgid "Manually" msgstr "手动" @@ -10949,6 +10893,10 @@ msgid "The text information for a buddy's status" msgstr "更改 %s 的用户信息" +#, fuzzy +msgid "Type the host name for this certificate." +msgstr "输入此证书所适用的主机名。" + #. Widget creation function msgid "SSL Servers" msgstr "SSL 服务器" @@ -11206,10 +11154,11 @@ msgid "0 people in room" msgstr "聊天室里没有人" -#, c-format +#, fuzzy, c-format msgid "%d person in room" msgid_plural "%d people in room" msgstr[0] "聊天室里有 %d 个人" +msgstr[1] "聊天室里有 %d 个人" msgid "Typing" msgstr "正打字" @@ -11691,7 +11640,7 @@ msgid "Enter an alias for this chat." msgstr "请输入此聊天的别名。" -#, c-format +#, fuzzy, c-format msgid "" "You are about to remove the contact containing %s and %d other buddy from " "your buddy list. Do you want to continue?" @@ -11701,6 +11650,9 @@ msgstr[0] "" "您即将从您的好友列表中删除包含 %s 及 %d 个其它好友的联系人。您真的要这么做" "吗?" +msgstr[1] "" +"您即将从您的好友列表中删除包含 %s 及 %d 个其它好友的联系人。您真的要这么做" +"吗?" msgid "Remove Contact" msgstr "删除联系人" @@ -11884,7 +11836,7 @@ msgstr "超级链接颜色" #, fuzzy -msgid "Color to draw hyperlinks after it has been visited (or activated)." +msgid "Color to draw hyperlink after it has been visited (or activated)." msgstr "绘制超级链接悬停时的颜色。" msgid "Hyperlink prelight color" @@ -11922,15 +11874,22 @@ msgid "Action Message Name Color for Whispered Message" msgstr "" +msgid "Color to draw the name of a whispered action message." +msgstr "" + msgid "Whisper Message Name Color" msgstr "" +msgid "Color to draw the name of a whispered message." +msgstr "" + #, fuzzy msgid "Typing notification color" msgstr "通知删除" -msgid "The color to use for the typing notification font" -msgstr "" +#, fuzzy +msgid "The color to use for the typing notification" +msgstr "新邮件通知" #, fuzzy msgid "Typing notification font" @@ -12275,15 +12234,17 @@ msgid "%s wishes to start a video session with you." msgstr "" -#, c-format +#, fuzzy, c-format msgid "%s has %d new message." msgid_plural "%s has %d new messages." msgstr[0] "%s 有 %d 封新邮件。" - -#, c-format +msgstr[1] "%s 有 %d 封新邮件。" + +#, fuzzy, c-format msgid "%d new email." msgid_plural "%d new emails." msgstr[0] "%d 封新邮件。" +msgstr[1] "%d 封新邮件。" #, c-format msgid "The browser command \"%s\" is invalid." @@ -12300,6 +12261,10 @@ "The 'Manual' browser command has been chosen, but no command has been set." msgstr "选择了“手动”浏览器命令,但未设置命令。" +#, fuzzy +msgid "No message" +msgstr "未知信息" + msgid "Open All Messages" msgstr "打开全部消息" @@ -12317,10 +12282,6 @@ msgid "You have pounced!" msgstr "您有新邮件了!" -#, fuzzy -msgid "No message" -msgstr "未知信息" - msgid "The following plugins will be unloaded." msgstr "下列插件将会被卸载。" @@ -12642,7 +12603,8 @@ msgid "Example: stunserver.org" msgstr "例:stunserver.org" -msgid "_Autodetect IP address" +#, fuzzy, c-format +msgid "Use _automatically detected IP address: %s" msgstr "自动检测 IP 地址(_A)" msgid "Public _IP:" @@ -12822,31 +12784,26 @@ "声音命令(_O):\n" "(%s 代表文件名)" -#, fuzzy msgid "M_ute sounds" -msgstr "静音" +msgstr "静音(_U)" msgid "Sounds when conversation has _focus" msgstr "对话获得焦点后发声(_F)" -#, fuzzy msgid "_Enable sounds:" -msgstr "启用声音:" - -#, fuzzy +msgstr "开启声音(_E):" + msgid "V_olume:" -msgstr "音量:" +msgstr "音量(_O):" msgid "Play" msgstr "播放" -#, fuzzy msgid "_Browse..." -msgstr "浏览(_E)..." - -#, fuzzy +msgstr "浏览(_B)..." + msgid "_Reset" -msgstr "重置" +msgstr "重置(_R)" msgid "_Report idle time:" msgstr "报告发呆时间(_R):" @@ -12920,9 +12877,8 @@ msgstr "设置隐私的账户:" #. Remove All button -#, fuzzy msgid "Remove Al_l" -msgstr "删除" +msgstr "全部删除(_L)" msgid "Permit User" msgstr "允许用户" @@ -13018,46 +12974,26 @@ msgid "Status for %s" msgstr "%s 的状态" -#. -#. * TODO: We should enable/disable the add button based on -#. * whether the user has entered all required data. That -#. * would eliminate the need for this check and provide a -#. * better user experience. -#. -#, fuzzy -msgid "Custom Smiley" -msgstr "插入表情" - -msgid "More Data needed" -msgstr "" - -msgid "Please provide a shortcut to associate with the smiley." -msgstr "" - #, c-format msgid "" "A custom smiley for '%s' already exists. Please use a different shortcut." msgstr "" +msgid "Custom Smiley" +msgstr "自定义表情" + #, fuzzy msgid "Duplicate Shortcut" msgstr "重复更正" -#, fuzzy -msgid "Please select an image for the smiley." -msgstr "请输入 %s 的新名称" - -#, fuzzy msgid "Edit Smiley" -msgstr "插入表情" - -#, fuzzy +msgstr "修改表情" + msgid "Add Smiley" -msgstr "表情" - -#, fuzzy +msgstr "添加表情" + msgid "_Image:" -msgstr "图像(_I)" +msgstr "图像(_I):" #. Shortcut text #, fuzzy @@ -13079,22 +13015,18 @@ msgid "Select Buddy Icon" msgstr "选择好友" -#, fuzzy msgid "Click to change your buddyicon for this account." -msgstr "此账户使用此好友图标(_I):" - -#, fuzzy +msgstr "点此修改当前账户所用图标。" + msgid "Click to change your buddyicon for all accounts." -msgstr "此账户使用此好友图标(_I):" +msgstr "点此修改所有账户所用图标。" msgid "Waiting for network connection" msgstr "正在等待网络连接" -#, fuzzy msgid "New status..." -msgstr "新消息..." - -#, fuzzy +msgstr "新状态..." + msgid "Saved statuses..." msgstr "已存状态" @@ -13132,7 +13064,7 @@ "您可以通过文件传送发送此图像,将其嵌入到此消息中,或者将其用作此用户的头像。" msgid "Set as buddy icon" -msgstr "设置为好友头像" +msgstr "设置为用户头像" msgid "Send image file" msgstr "发送图像文件" @@ -13146,12 +13078,12 @@ msgid "" "You can send this image as a file transfer, or use it as the buddy icon for " "this user." -msgstr "您可以通过文件传送发送此图像,或者将其用作此用户的头像。" +msgstr "您可以通过文件传送发送该图片,或者将其用作此用户的头像。" msgid "" "You can insert this image into this message, or use it as the buddy icon for " "this user" -msgstr "您可以通过文件传送发送此图像,或者将其用作此用户的头像。" +msgstr "您可以在消息中插入该图片,或者将其用作此用户的头像。" #. I don't know if we really want to do anything here. Most of the desktop item types are crap like #. * "MIME Type" (I have no clue how that would be a desktop item) and "Comment"... nothing we can really @@ -13161,9 +13093,10 @@ msgid "Cannot send launcher" msgstr "无法发送启动器" -msgid "" -"You dragged a desktop launcher. Most likely you wanted to send whatever this " -"launcher points to instead of this launcher itself." +#, fuzzy +msgid "" +"You dragged a desktop launcher. Most likely you wanted to send the target of " +"this launcher instead of this launcher itself." msgstr "" "您拖曳的是桌面启动器。在大多数情况下,您可能想要发送此启动器所指向的文件,而" "非启动器自身。" @@ -13199,7 +13132,7 @@ #, fuzzy msgid "_Open Link" -msgstr "打开链接的方式(_O):" +msgstr "打开链接(_O):" msgid "_Copy Link Location" msgstr "复制链接地址(_C)" @@ -13225,24 +13158,20 @@ msgid "_Invite" msgstr "邀请(_I)" -#, fuzzy msgid "_Modify..." -msgstr "修改(_M)" - -#, fuzzy +msgstr "修改(_M)..." + msgid "_Add..." -msgstr "添加(_A)" +msgstr "添加(_A)..." msgid "_Open Mail" msgstr "打开邮件(_O)" -#, fuzzy msgid "_Edit" -msgstr "编辑" - -#, fuzzy +msgstr "编辑(_E)" + msgid "Pidgin Tooltip" -msgstr "Pidgin" +msgstr "Pidgin 工具提示" msgid "Pidgin smileys" msgstr "Pidgin 表情" @@ -13256,9 +13185,8 @@ msgid "none" msgstr "无" -#, fuzzy msgid "Small" -msgstr "电子邮件" +msgstr "小" msgid "Smaller versions of the default smilies" msgstr "" @@ -13528,7 +13456,6 @@ msgstr "提供鼠标手势的支持" #. * description -#, fuzzy msgid "" "Allows support for mouse gestures in conversation windows. Drag the middle " "mouse button to perform certain actions:\n" @@ -13539,9 +13466,9 @@ "允许在对话窗口中支持鼠标手势。\n" "拖曳鼠标中键可执行特定操作:\n" "\n" -"向下再向右可关闭对话。\n" -"向上再向左可切换到上个对话。\n" -"向上再向右可切换到下个对话。" +"·向下再向右可关闭对话。\n" +"·向上再向左可切换到上个对话。\n" +"·向上再向右可切换到下个对话。" msgid "Instant Messaging" msgstr "即时通讯" @@ -13617,7 +13544,6 @@ msgid "Please enter the person's information below." msgstr "请在下面输入联系人的信息。" -#, fuzzy msgid "Please enter the buddy's username and account type below." msgstr "请在下面输入好友的用户名和账户类型。" @@ -13653,11 +13579,13 @@ msgid "Test to see that all ui signals are working properly." msgstr "测试看看所有的 UI 信号是否都工作正确。" -#, fuzzy, c-format +#, c-format msgid "" "\n" "Buddy Note: %s" -msgstr "好友备注" +msgstr "" +"\n" +"好友备注: %s" msgid "History" msgstr "历史" @@ -13687,20 +13615,17 @@ msgid "Adds a small box to the buddy list that shows if you have new mail." msgstr "在好友列表旁显示一个小方块,标明您是否有新邮件。" -#, fuzzy msgid "Markerline" -msgstr "下划线" - -#, fuzzy +msgstr "分割线" + msgid "Draw a line to indicate new messages in a conversation." -msgstr "对话时显示通知消息" - -#, fuzzy +msgstr "在对话中以分割线突出显示新消息。" + msgid "Jump to markerline" -msgstr "下划线" +msgstr "跳至分割线" msgid "Draw Markerline in " -msgstr "" +msgstr "分割线使用在" msgid "_IM windows" msgstr "即时消息窗口(_I)" @@ -13750,18 +13675,18 @@ msgstr "合作作曲的音乐信使插件。" #. * summary +#, fuzzy msgid "" "The Music Messaging Plugin allows a number of users to simultaneously work " -"on a piece of music by editting a common score in real-time." +"on a piece of music by editing a common score in real-time." msgstr "音乐信使插件允许多个用户同时在同一份曲谱上工作。" #. ---------- "Notify For" ---------- msgid "Notify For" msgstr "提醒" -#, fuzzy msgid "\t_Only when someone says your username" -msgstr "\t仅当别人在聊天中提到您的名字(_O)" +msgstr "\t仅当别人提到您的名字时(_O)" msgid "_Focused windows" msgstr "聚焦窗口(_F)" @@ -13785,18 +13710,16 @@ msgid "Set window manager \"_URGENT\" hint" msgstr "设置窗口管理器“紧急”提示(_U)" -#, fuzzy msgid "_Flash window" -msgstr "聊天窗口(_H)" +msgstr "闪烁窗口(_F)" #. Raise window method button msgid "R_aise conversation window" msgstr "升起对话窗口(_A)" #. Present conversation method button -#, fuzzy msgid "_Present conversation window" -msgstr "升起对话窗口(_A)" +msgstr "当前对话窗口(_P)" #. ---------- "Notification Removals" ---------- msgid "Notification Removal" @@ -13868,9 +13791,8 @@ msgid "Hyperlink Color" msgstr "超级链接颜色" -#, fuzzy msgid "Visited Hyperlink Color" -msgstr "超级链接颜色" +msgstr "访问过的超级链接颜色" #, fuzzy msgid "Highlighted Message Name Color" @@ -13963,13 +13885,11 @@ msgid "New Version Available" msgstr "新版本可用" -#, fuzzy msgid "Later" -msgstr "日期" - -#, fuzzy +msgstr "稍后" + msgid "Download Now" -msgstr "%s 上的用户数: %s" +msgstr "立即下载" #. *< type #. *< ui_requirement @@ -14000,21 +13920,20 @@ #. *< dependencies #. *< priority #. *< id -#, fuzzy msgid "Send Button" -msgstr "发送到" +msgstr "发送按钮" #. *< name #. *< version -#, fuzzy msgid "Conversation Window Send Button." -msgstr "对话窗口隐藏" +msgstr "对话窗口的发送按钮" #. *< summary +#, fuzzy msgid "" "Adds a Send button to the entry area of the conversation window. Intended " -"for when no physical keyboard is present." -msgstr "" +"for use when no physical keyboard is present." +msgstr "在对话窗口的输入栏添加一个发送按钮,适用于非键盘输入。" msgid "Duplicate Correction" msgstr "重复更正" @@ -14336,8 +14255,9 @@ msgid "Options specific to Pidgin for Windows." msgstr "Pidgin for Windows 特定的选项。" -msgid "" -"Provides options specific to Pidgin for Windows , such as buddy list docking." +#, fuzzy +msgid "" +"Provides options specific to Pidgin for Windows, such as buddy list docking." msgstr "提供 Pidgin for Windows 特定的选项,比如好友列表停靠。" msgid "Logged out." @@ -14380,6 +14300,9 @@ #~ msgid "Activate which ID?" #~ msgstr "激活哪个 ID?" +#~ msgid "Please select an image for the smiley." +#~ msgstr "请给这个表情选择一个图片" + #~ msgid "Cursor Color" #~ msgstr "光标颜色"