changeset 27434:69511e781717

merge of '46a46162666e1d23ae6161df2639044132cb894f' and 'ada690f0424ce05fc000d5e97d25079fc1909318'
author Etan Reisner <pidgin@unreliablesource.net>
date Sun, 05 Jul 2009 15:08:20 +0000
parents 5b07c7253ba4 (current diff) c7a80c1c40c7 (diff)
children d137b369eb9c
files ChangeLog ChangeLog.API
diffstat 22 files changed, 1265 insertions(+), 1464 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sun Jul 05 06:51:35 2009 +0000
+++ b/ChangeLog	Sun Jul 05 15:08:20 2009 +0000
@@ -12,6 +12,8 @@
 	* Fixed NTLM authentication on big-endian systems.
 	* The Pidgin and Purple perl modules are no longer installed into @INC,
 	  this should hopefulll prevent some minor confusion.
+	* Use GLib's implementations of SHA1, SHA256, and MD5 when available.
+	  (GLib 2.14 or higher)
 
 	libpurple:
 	* Various memory cleanups when unloading libpurple. (Nick Hebner)
@@ -26,6 +28,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.
 
 	Gadu-Gadu:
 	* Accounts can specify a server to which to connect.
--- a/ChangeLog.API	Sun Jul 05 06:51:35 2009 +0000
+++ b/ChangeLog.API	Sun Jul 05 15:08:20 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
--- a/libpurple/cipher.c	Sun Jul 05 06:51:35 2009 +0000
+++ b/libpurple/cipher.c	Sun Jul 05 15:08:20 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
  ******************************************************************************/
--- a/libpurple/debug.c	Sun Jul 05 06:51:35 2009 +0000
+++ b/libpurple/debug.c	Sun Jul 05 15:08:20 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);
 }
+
--- a/libpurple/debug.h	Sun Jul 05 06:51:35 2009 +0000
+++ b/libpurple/debug.h	Sun Jul 05 15:08:20 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);
+
 /*@}*/
 
 /**************************************************************************/
--- a/libpurple/internal.h	Sun Jul 05 06:51:35 2009 +0000
+++ b/libpurple/internal.h	Sun Jul 05 15:08:20 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 <glib/gstdio.h>
 #endif
--- a/libpurple/protocols/jabber/buddy.c	Sun Jul 05 06:51:35 2009 +0000
+++ b/libpurple/protocols/jabber/buddy.c	Sun Jul 05 15:08:20 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<br/>", 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);
 	}
--- a/libpurple/protocols/msn/soap.c	Sun Jul 05 06:51:35 2009 +0000
+++ b/libpurple/protocols/msn/soap.c	Sun Jul 05 15:08:20 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;
 }
 
--- a/libpurple/protocols/yahoo/util.c	Sun Jul 05 06:51:35 2009 +0000
+++ b/libpurple/protocols/yahoo/util.c	Sun Jul 05 15:08:20 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);
--- a/libpurple/protocols/yahoo/yahoo.c	Sun Jul 05 06:51:35 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoo.c	Sun Jul 05 15:08:20 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 <ding> on account %s to buddy %s.\n", username, c->name);
+	purple_debug_info("yahoo", "Sending <ding> on account %s to buddy %s.\n",
+			username, c->name);
 	purple_conv_im_send_with_flags(PURPLE_CONV_IM(c), "<ding>", PURPLE_MESSAGE_INVISIBLE);
 
 	return TRUE;
--- a/libpurple/protocols/yahoo/yahoo_filexfer.c	Sun Jul 05 06:51:35 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoo_filexfer.c	Sun Jul 05 15:08:20 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))
--- a/libpurple/protocols/yahoo/yahoo_packet.c	Sun Jul 05 06:51:35 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoo_packet.c	Sun Jul 05 15:08:20 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 */
 }
 
--- a/libpurple/protocols/yahoo/yahoochat.c	Sun Jul 05 06:51:35 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoochat.c	Sun Jul 05 15:08:20 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);
--- a/libpurple/protocols/yahoo/ycht.c	Sun Jul 05 06:51:35 2009 +0000
+++ b/libpurple/protocols/yahoo/ycht.c	Sun Jul 05 15:08:20 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);
--- a/libpurple/tests/test_cipher.c	Sun Jul 05 06:51:35 2009 +0000
+++ b/libpurple/tests/test_cipher.c	Sun Jul 05 15:08:20 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);
--- a/libpurple/util.c	Sun Jul 05 06:51:35 2009 +0000
+++ b/libpurple/util.c	Sun Jul 05 15:08:20 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);
--- a/pidgin/gtkdialogs.c	Sun Jul 05 06:51:35 2009 +0000
+++ b/pidgin/gtkdialogs.c	Sun Jul 05 15:08:20 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}
 };
--- a/po/ChangeLog	Sun Jul 05 06:51:35 2009 +0000
+++ b/po/ChangeLog	Sun Jul 05 15:08:20 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
--- a/po/de.po	Sun Jul 05 06:51:35 2009 +0000
+++ b/po/de.po	Sun Jul 05 15:08:20 2009 +0000
@@ -11,8 +11,8 @@
 msgstr ""
 "Project-Id-Version: de\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-04 12:30+0200\n"
-"PO-Revision-Date: 2009-07-04 12:30+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 <jochenkemnade@web.de>\n"
 "Language-Team: Deutsch <de@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -2191,9 +2191,8 @@
 msgid "(%s) %s <AUTO-REPLY>: %s\n"
 msgstr "(%s) %s <AUTO-REPLY>: %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."
@@ -2600,7 +2599,6 @@
 "Mitschnittsbetrachter an."
 
 #. * description
-#, fuzzy
 msgid ""
 "When viewing logs, this plugin will include logs from other IM clients. "
 "Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n"
@@ -2609,8 +2607,8 @@
 "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!"
 
@@ -2657,12 +2655,11 @@
 msgid "Save messages sent to an offline user as pounce."
 msgstr "Sichert Nachrichten an einen Offline-Benutzer als Alarm."
 
-#, fuzzy
 msgid ""
 "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"
@@ -5095,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"
@@ -6317,7 +6162,6 @@
 "%s scheint offline zu sein und hat die Nachricht, die Sie gerade gesendet "
 "haben, nicht empfangen."
 
-#, fuzzy
 msgid ""
 "Unable to connect to server. Please enter the address of the server to which "
 "you wish to connect."
@@ -6352,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 ""
@@ -6916,6 +6759,9 @@
 msgid "Member Since"
 msgstr "Mitglied seit"
 
+msgid "Capabilities"
+msgstr "Fähigkeiten"
+
 msgid "Profile"
 msgstr "Profil"
 
@@ -8167,6 +8013,9 @@
 msgid "Video Camera"
 msgstr "Videokamera"
 
+msgid "File Transfer"
+msgstr "Dateiübertragung"
+
 msgid "Supports"
 msgstr "Unterstützt"
 
@@ -8992,6 +8841,9 @@
 msgid "Network Statistics"
 msgstr "Netzwerkstatistik"
 
+msgid "Ping"
+msgstr "Ping"
+
 msgid "Ping failed"
 msgstr "Ping fehlgeschlagen"
 
@@ -11004,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"
@@ -11019,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
@@ -11055,41 +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 ""
+msgstr "Die Textinformation für einen untätigen Buddy"
 
 msgid "Message Text"
 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 ""
@@ -11098,10 +10950,11 @@
 "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."
@@ -12093,7 +11946,6 @@
 msgid "Typing notification color"
 msgstr "Farbe der Tipp-Benachrichtigung"
 
-#, fuzzy
 msgid "The color to use for the typing notification"
 msgstr ""
 "Die Farbe, die für die Tipp-Benachrichtigungsmeldung benutzt werden soll"
@@ -13907,7 +13759,6 @@
 msgstr "Musik-Nachrichten-Plugin zum gemeinschaftlichen Komponieren."
 
 #. *  summary
-#, fuzzy
 msgid ""
 "The Music Messaging Plugin allows a number of users to simultaneously work "
 "on a piece of music by editing a common score in real-time."
@@ -14067,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+"
@@ -14166,7 +14016,6 @@
 msgstr "Senden-Knopf für das Gesprächsfenster."
 
 #. *< summary
-#, fuzzy
 msgid ""
 "Adds a Send button to the entry area of the conversation window. Intended "
 "for use when no physical keyboard is present."
@@ -14225,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"
@@ -14242,9 +14089,8 @@
 msgid "Icon for Chat"
 msgstr "Chat betreten"
 
-#, fuzzy
 msgid "Ignored"
-msgstr "Ignorieren"
+msgstr "Ignoriert"
 
 #, fuzzy
 msgid "Founder"
@@ -14257,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
@@ -14322,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
@@ -14499,7 +14332,6 @@
 msgid "Options specific to Pidgin for Windows."
 msgstr "Optionen für Pidgin unter Windows."
 
-#, fuzzy
 msgid ""
 "Provides options specific to Pidgin for Windows, such as buddy list docking."
 msgstr ""
--- a/po/fi.po	Sun Jul 05 06:51:35 2009 +0000
+++ b/po/fi.po	Sun Jul 05 15:08:20 2009 +0000
@@ -1,4 +1,4 @@
-# Pidgin Finnish translation
+# Piidgin Finnish translation
 # Copyright (C) 2002 Tero Kuusela <teroajk@subdimension.com>
 # Copyright (C) 2003-2005 Arto Alakulju <arto@alakulju.net>
 # Copyright (C) 2005-2009 Timo Jyrinki <timo.jyrinki@iki.fi>
@@ -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 <timo.jyrinki@iki.fi>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
@@ -2176,9 +2176,8 @@
 msgid "(%s) %s <AUTO-REPLY>: %s\n"
 msgstr "(%s) %s <AUTOMAATTIVASTAUS>: %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 &lt;user&gt; [reason]:  Ban a user from the room."
 msgstr "ban &lt;käyttäjä&gt; [syy]: Estä käyttäjä huoneesta."
 
-#, fuzzy
 msgid ""
 "affiliate &lt;owner|admin|member|outcast|none&gt; [nick1] [nick2] ...: Get "
 "the users with an affiliation or set users' affiliation with the room."
 msgstr ""
-"affiliate &lt;user&gt; &lt;owner|admin|member|outcast|none&gt;: Aseta "
+"affiliate &lt;owner|admin|member|outcast|none&gt; [nimi1] [nimi2] ...: Aseta "
 "käyttäjän käyttäjäluokka tälle huoneelle."
 
-#, fuzzy
 msgid ""
 "role &lt;moderator|participant|visitor|none&gt; [nick1] [nick2] ...: Get the "
 "users with an role or set users' role with the room."
 msgstr ""
-"role &lt;user&gt; &lt;moderator|participant|visitor|none&gt;: Aseta "
+"role &lt;moderator|participant|visitor|none&gt; [nimi1] [nimi2] ...: Aseta "
 "käyttäjän rooli huoneessa."
 
 msgid "invite &lt;user&gt; [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 "<span weight=\"bold\" size=\"larger\">You have pounced!</span>"
 msgstr "<span weight=\"bold\" size=\"larger\">Uusi ilmoitus</span>"
 
-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 "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">Esimerkki: stunserver.org</span>"
 
-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"
 "<b>Description:</b> "
 msgstr ""
 "\n"
-"<b>Kuvaus:</b> Aavemainen"
+"<b>Kuvaus:</b> "
 
 #. 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 "<font color='#777777'>Logged out.</font>"
@@ -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?"
 
--- a/po/sl.po	Sun Jul 05 06:51:35 2009 +0000
+++ b/po/sl.po	Sun Jul 05 15:08:20 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  <miles@filmsi.net>\n"
 "Language-Team: Martin Srebotnjak <miles@filmsi.net>\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 ""
 "<span weight=\"bold\" size=\"larger\">Dobili ste opozorilo prijatelja!</span>"
 
-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 "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">Primer: stunserver.org</span>"
 
-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"
 
--- a/po/zh_CN.po	Sun Jul 05 06:51:35 2009 +0000
+++ b/po/zh_CN.po	Sun Jul 05 15:08:20 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 <fundawang@linux.net.cn>, 2003, 2004.
+# liyuekui <liyuekui@gmail.com>, 2009.
+# Aron Xu <aronmalache@163.com>, 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 <fundawang@linux.net.cn>\n"
-"Language-Team: zh_CN <i18n-translation@lists.linux.net.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 <aronmalache@163.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\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 @@
 "如果您想要回到此窗口以便添加、编辑或删除帐户,可以从好友列表中窗口中选择<b>帐"
 "户->添加/编辑</b>"
 
-#, 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 "<b>%d new email.</b>"
 msgid_plural "<b>%d new emails.</b>"
 msgstr[0] "<b>%d 封新邮件。</b>"
+msgstr[1] "<b>%d 封新邮件。</b>"
 
 #, 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 "<span weight=\"bold\" size=\"larger\">You have pounced!</span>"
 msgstr "<span weight=\"bold\" size=\"larger\">您有新邮件了!</span>"
 
-#, fuzzy
-msgid "No message"
-msgstr "未知信息"
-
 msgid "The following plugins will be unloaded."
 msgstr "下列插件将会被卸载。"
 
@@ -12642,7 +12603,8 @@
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">例:stunserver.org</span>"
 
-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"
 "<b>Buddy Note</b>: %s"
-msgstr "好友备注"
+msgstr ""
+"\n"
+"<b>好友备注</b>: %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 "<font color='#777777'>Logged out.</font>"
@@ -14380,6 +14300,9 @@
 #~ msgid "Activate which ID?"
 #~ msgstr "激活哪个 ID?"
 
+#~ msgid "Please select an image for the smiley."
+#~ msgstr "请给这个表情选择一个图片"
+
 #~ msgid "Cursor Color"
 #~ msgstr "光标颜色"