Mercurial > pidgin.yaz
changeset 27866:b522393714d6
propagate from branch 'im.pidgin.pidgin' (head 46d8b3ade8e097ae2dc4ecc334074fe286f6b27e)
to branch 'im.pidgin.pidgin.yaz' (head 782f03c632c5d3481df26ae115d5c6b70e6001ef)
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Thu, 07 Aug 2008 16:00:16 +0000 |
parents | 76f1fd403f2c (diff) 86e7e2b5e59a (current diff) |
children | d777355b4a82 |
files | libpurple/protocols/irc/irc.c libpurple/protocols/irc/parse.c libpurple/protocols/msn/msn.c libpurple/protocols/msn/slpsession.c libpurple/protocols/msn/slpsession.h libpurple/protocols/oscar/oscar.h libpurple/protocols/qq/buddy_status.c libpurple/protocols/qq/buddy_status.h libpurple/protocols/qq/keep_alive.c libpurple/protocols/qq/keep_alive.h libpurple/protocols/qq/login_logout.c libpurple/protocols/qq/login_logout.h libpurple/util.c |
diffstat | 168 files changed, 5865 insertions(+), 8551 deletions(-) [+] |
line wrap: on
line diff
--- a/COPYRIGHT Thu Jul 31 06:23:55 2008 +0000 +++ b/COPYRIGHT Thu Aug 07 16:00:16 2008 +0000 @@ -162,6 +162,7 @@ Christian Hammond Erick Hamness Fred Hampton +John Hanauer Phil Hannent Casey Harkins Andy Harrison
--- a/ChangeLog Thu Jul 31 06:23:55 2008 +0000 +++ b/ChangeLog Thu Aug 07 16:00:16 2008 +0000 @@ -12,6 +12,8 @@ IRC: * /ctcp command (Vladislav Guberinić) + * Allow for auto-detection of incoming UTF-8 formatted text on + accounts which are configured to use some other encoding. MSN: * Update MSN support to protocol 15 (Elliott Sales de Andrade, Jorge @@ -23,6 +25,7 @@ * Aliasing is now supported server-side. * Buddies are now emblemed. Bots and web clients should now be distinguished. + * Update smiley set for non-faces. * Failing to update a buddy icon when the buddy has gone offline no longer crashes. * Custom smileys received in a chat no longer go to a new window. @@ -36,6 +39,7 @@ side. * Offer to add new buddies into the same contact as existing buddies in the same group if the alias given is the same. + * Minor smiley style update. General: * Group and Chat buddy list entries can now be given custom buddy
--- a/libpurple/plugins/perl/common/Account.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Account.xs Thu Aug 07 16:00:16 2008 +0000 @@ -107,10 +107,9 @@ t_GL = NULL; t_len = av_len((AV *)SvRV(status_types)); - for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL = g_list_append(t_GL, SvPV(*av_fetch((AV *)SvRV(status_types), i, 0), t_sl)); - } + for (i = 0; i < t_len; i++) + t_GL = g_list_append(t_GL, SvPVutf8_nolen(*av_fetch((AV *)SvRV(status_types), i, 0))); + purple_account_set_status_types(account, t_GL); void @@ -210,10 +209,9 @@ t_GL = NULL; t_len = av_len((AV *)SvRV(list)); - for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL = g_list_append(t_GL, SvPV(*av_fetch((AV *)SvRV(list), i, 0), t_sl)); - } + for (i = 0; i < t_len; i++) + t_GL = g_list_append(t_GL, SvPVutf8_nolen(*av_fetch((AV *)SvRV(list), i, 0))); + purple_account_add_buddies(account, t_GL); g_list_free(t_GL); @@ -240,18 +238,15 @@ t_GL1 = NULL; t_len = av_len((AV *)SvRV(A)); - for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL1 = g_list_append(t_GL1, SvPV(*av_fetch((AV *)SvRV(A), i, 0), t_sl)); - } + for (i = 0; i < t_len; i++) + t_GL1 = g_list_append(t_GL1, SvPVutf8_nolen(*av_fetch((AV *)SvRV(A), i, 0))); t_GL2 = NULL; t_len = av_len((AV *)SvRV(B)); - for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL2 = g_list_append(t_GL2, SvPV(*av_fetch((AV *)SvRV(B), i, 0), t_sl)); - } + for (i = 0; i < t_len; i++) + t_GL2 = g_list_append(t_GL2, SvPVutf8_nolen(*av_fetch((AV *)SvRV(B), i, 0))); + purple_account_remove_buddies(account, t_GL1, t_GL2); g_list_free(t_GL1); g_list_free(t_GL2); @@ -315,18 +310,5 @@ const char * name const char * protocol -void -purple_accounts_set_ui_ops(ops) - Purple::Account::UiOps ops - -Purple::Account::UiOps -purple_accounts_get_ui_ops() - Purple::Handle purple_accounts_get_handle() - -void -purple_accounts_init() - -void -purple_accounts_uninit()
--- a/libpurple/plugins/perl/common/AccountOpts.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/AccountOpts.xs Thu Aug 07 16:00:16 2008 +0000 @@ -44,10 +44,9 @@ t_GL = NULL; t_len = av_len((AV *)SvRV(values)); - for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL = g_list_append(t_GL, SvPV(*av_fetch((AV *)SvRV(values), i, 0), t_sl)); - } + for (i = 0; i < t_len; i++) + t_GL = g_list_append(t_GL, SvPVutf8_nolen(*av_fetch((AV *)SvRV(values), i, 0))); + RETVAL = purple_account_option_list_new(text, pref_name, t_GL); OUTPUT: RETVAL @@ -133,10 +132,9 @@ t_GL = NULL; t_len = av_len((AV *)SvRV(values)); - for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL = g_list_append(t_GL, SvPV(*av_fetch((AV *)SvRV(values), i, 0), t_sl)); - } + for (i = 0; i < t_len; i++) + t_GL = g_list_append(t_GL, SvPVutf8_nolen(*av_fetch((AV *)SvRV(values), i, 0))); + purple_account_option_set_list(option, t_GL); void
--- a/libpurple/plugins/perl/common/BuddyIcon.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/BuddyIcon.xs Thu Aug 07 16:00:16 2008 +0000 @@ -45,7 +45,7 @@ int *width int *height -char * +gchar_own * purple_buddy_icon_get_full_path(icon); Purple::Buddy::Icon icon @@ -69,8 +69,3 @@ Purple::Handle purple_buddy_icons_get_handle(); -void -purple_buddy_icons_init(); - -void -purple_buddy_icons_uninit()
--- a/libpurple/plugins/perl/common/BuddyList.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/BuddyList.xs Thu Aug 07 16:00:16 2008 +0000 @@ -246,25 +246,12 @@ void purple_blist_request_add_group() -void -purple_blist_set_ui_ops(ops) - Purple::BuddyList::UiOps ops - -Purple::BuddyList::UiOps -purple_blist_get_ui_ops() - Purple::Handle purple_blist_get_handle() Purple::BuddyList::Node purple_blist_get_root() -void -purple_blist_init() - -void -purple_blist_uninit() - MODULE = Purple::BuddyList PACKAGE = Purple::BuddyList::Node PREFIX = purple_blist_node_ PROTOTYPES: ENABLE @@ -362,7 +349,7 @@ for (t_HE = hv_iternext(t_HV); t_HE != NULL; t_HE = hv_iternext(t_HV) ) { t_key = hv_iterkey(t_HE, &len); t_SV = *hv_fetch(t_HV, t_key, len, 0); - t_value = SvPV(t_SV, PL_na); + t_value = SvPVutf8_nolen(t_SV); g_hash_table_insert(t_GHash, t_key, t_value); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/plugins/perl/common/Certificate.xs Thu Aug 07 16:00:16 2008 +0000 @@ -0,0 +1,302 @@ +#include "module.h" + +struct cb_data { + SV *cb; + SV *user_data; +}; + +static void cb_cert_verify(PurpleCertificateVerificationStatus st, struct cb_data *d) { + dSP; + + ENTER; + SAVETMPS; + + PUSHMARK(SP); + + XPUSHs(sv_2mortal(newSViv(st))); + XPUSHs(d->user_data); + + PUTBACK; + + call_sv(d->cb, G_VOID | G_EVAL); + + if(SvTRUE(ERRSV)) { + STRLEN l_a; + purple_debug_warning("perl", "Failed to run 'certificate verify' callback: %s\n", SvPV(ERRSV, l_a)); + } + + FREETMPS; + LEAVE; + + SvREFCNT_dec(d->cb); + SvREFCNT_dec(d->user_data); + + g_free(d); +} + +MODULE = Purple::Certificate PACKAGE = Purple::Certificate PREFIX = purple_certificate_ +PROTOTYPES: ENABLE + +BOOT: +{ + HV *stash = gv_stashpv("Purple::Certificate", 1); + + static const constiv *civ, const_iv[] = { +#define const_iv(name) {#name, (IV)PURPLE_CERTIFICATE_##name} + const_iv(INVALID), + const_iv(VALID), + }; + + for (civ = const_iv + sizeof(const_iv) / sizeof(const_iv[0]); civ-- > const_iv; ) + newCONSTSUB(stash, (char *)civ->name, newSViv(civ->iv)); +} + +void +purple_certificate_add_ca_search_path(path) + const char* path + +gboolean +purple_certificate_check_subject_name(crt, name) + Purple::Certificate crt + const gchar* name + +Purple::Certificate +purple_certificate_copy(crt) + Purple::Certificate crt + +void +purple_certificate_destroy(crt) + Purple::Certificate crt + +void +purple_certificate_display_x509(crt) + Purple::Certificate crt + +## changed order of arguments, so that $cert->export($file) could be used +gboolean +purple_certificate_export(crt, filename) + const gchar* filename + Purple::Certificate crt + C_ARGS: + filename, crt + +Purple::Certificate::Pool +purple_certificate_find_pool(scheme_name, pool_name) + const gchar* scheme_name + const gchar* pool_name + +Purple::Certificate::Scheme +purple_certificate_find_scheme(name) + const gchar* name + +Purple::Certificate::Verifier +purple_certificate_find_verifier(scheme_name, ver_name) + const gchar* scheme_name + const gchar* ver_name + +Purple::Handle +purple_certificate_get_handle() + +gchar_own* +purple_certificate_get_issuer_unique_id(crt) + Purple::Certificate crt + +gchar_own* +purple_certificate_get_subject_name(crt) + Purple::Certificate crt + +gchar_own* +purple_certificate_get_unique_id(crt) + Purple::Certificate crt + +Purple::Certificate +purple_certificate_import(scheme, filename) + Purple::Certificate::Scheme scheme + const gchar* filename + +gboolean +purple_certificate_register_pool(pool) + Purple::Certificate::Pool pool + +gboolean +purple_certificate_register_scheme(scheme) + Purple::Certificate::Scheme scheme + +gboolean +purple_certificate_register_verifier(vr) + Purple::Certificate::Verifier vr + +gboolean +purple_certificate_signed_by(crt, issuer) + Purple::Certificate crt + Purple::Certificate issuer + +gboolean +purple_certificate_unregister_pool(pool) + Purple::Certificate::Pool pool + +gboolean +purple_certificate_unregister_scheme(scheme) + Purple::Certificate::Scheme scheme + +gboolean +purple_certificate_unregister_verifier(vr) + Purple::Certificate::Verifier vr + +void +purple_certificate_verify_complete(vrq, st) + Purple::Certificate::VerificationRequest vrq + Purple::Certificate::VerificationStatus st + +gboolean +purple_certificate_get_times(crt, OUTLIST time_t activation, OUTLIST time_t expiration) + Purple::Certificate crt + PROTOTYPE: $ + +void +purple_certificate_destroy_list(...) + PREINIT: + GList* l = NULL; + int i = 0; + CODE: + for(i = 0; i < items; i++) { /* PurpleCertificate */ + l = g_list_prepend(l, purple_perl_ref_object(ST(i))); + } + purple_certificate_destroy_list(l); + +void +purple_certificate_get_pools() + PREINIT: + GList *l; + PPCODE: + for(l = purple_certificate_get_pools(); l; l = l->next) { + XPUSHs(sv_2mortal(purple_perl_bless_object(l->data, "Purple::Certificate::Pool"))); + } + +void +purple_certificate_get_schemes() + PREINIT: + GList *l; + PPCODE: + for(l = purple_certificate_get_schemes(); l; l = l->next) { + XPUSHs(sv_2mortal(purple_perl_bless_object(l->data, "Purple::Certificate::Scheme"))); + } + +void +purple_certificate_get_verifiers() + PREINIT: + GList *l; + PPCODE: + for(l = purple_certificate_get_verifiers(); l; l = l->next) { + XPUSHs(sv_2mortal(purple_perl_bless_object(l->data, "Purple::Certificate::Verifier"))); + } + +void +purple_certificate_check_signature_chain(...) + PREINIT: + GList *l = NULL; + gboolean ret; + int i; + PPCODE: + for(i = 0; i < items; i++) { /* PurpleCertificate */ + l = g_list_prepend(l, purple_perl_ref_object(ST(i))); + } + l = g_list_reverse(l); + ret = purple_certificate_check_signature_chain(l); + g_list_free(l); + if(ret) XSRETURN_YES; + XSRETURN_NO; + +SV* +purple_certificate_get_fingerprint_sha1(crt) + Purple::Certificate crt + PREINIT: + GByteArray *gba = NULL; + CODE: + gba = purple_certificate_get_fingerprint_sha1(crt); + RETVAL = newSVpv(gba->data, gba->len); + g_byte_array_free(gba, TRUE); + OUTPUT: + RETVAL + +void +purple_certificate_verify(verifier, subject_name, cert_chain, cb, cb_data) + Purple::Certificate::Verifier verifier + const gchar* subject_name + AV* cert_chain + CV *cb + SV *cb_data + PREINIT: + GList *l = NULL; + int len = 0, i = 0; + struct cb_data *d = NULL; + PPCODE: + len = av_len(cert_chain) + 1; + for(i = 0; i < len; i++) { + SV **sv = av_fetch(cert_chain, i, 0); + if(!sv || !purple_perl_is_ref_object(*sv)) { + g_list_free(l); + warn("Purple::Certificate::verify: cert_chain: non-purple object in array..."); + XSRETURN_UNDEF; + } + l = g_list_prepend(l, purple_perl_ref_object(*sv)); + } + l = g_list_reverse(l); + + d = g_new0(struct cb_data, 1); + d->cb = newSVsv(ST(3)); + d->user_data = newSVsv(cb_data); + + purple_certificate_verify(verifier, subject_name, l, (PurpleCertificateVerifiedCallback) cb_cert_verify, d); + + g_list_free(l); + +MODULE = Purple::Certificate PACKAGE = Purple::Certificate::Pool PREFIX = purple_certificate_pool_ +PROTOTYPES: ENABLE + +void +purple_certificate_pool_get_idlist(pool) + Purple::Certificate::Pool pool + PREINIT: + GList *l, *b; + PPCODE: + b = purple_certificate_pool_get_idlist(pool); + for(l = b; l; l = l->next) { + XPUSHs(sv_2mortal(newSVpv(l->data, 0))); + } + purple_certificate_pool_destroy_idlist(b); + +gboolean +purple_certificate_pool_contains(pool, id) + Purple::Certificate::Pool pool + const gchar* id + +gboolean +purple_certificate_pool_delete(pool, id) + Purple::Certificate::Pool pool + const gchar* id + +Purple::Certificate::Scheme +purple_certificate_pool_get_scheme(pool) + Purple::Certificate::Pool pool + +gchar_own* +purple_certificate_pool_mkpath(pool, id) + Purple::Certificate::Pool pool + const gchar* id + +Purple::Certificate +purple_certificate_pool_retrieve(pool, id) + Purple::Certificate::Pool pool + const gchar* id + +gboolean +purple_certificate_pool_store(pool, id, crt) + Purple::Certificate::Pool pool + const gchar* id + Purple::Certificate crt + +gboolean +purple_certificate_pool_usable(pool) + Purple::Certificate::Pool pool +
--- a/libpurple/plugins/perl/common/Cipher.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Cipher.xs Thu Aug 07 16:00:16 2008 +0000 @@ -3,6 +3,49 @@ MODULE = Purple::Cipher PACKAGE = Purple::Cipher PREFIX = purple_cipher_ PROTOTYPES: ENABLE +BOOT: +{ + HV *stash = gv_stashpv("Purple::Cipher::BatchMode", 1); + HV *cipher_caps = gv_stashpv("Purple::Cipher::Caps", 1); + + static const constiv *civ, const_iv[] = { +#define const_iv(name) {#name, (IV)PURPLE_CIPHER_BATCH_MODE_##name} + const_iv(ECB), + const_iv(CBC), +#undef const_iv + }; + + static const constiv bm_const_iv[] = { +#define const_iv(name) {#name, (IV)PURPLE_CIPHER_CAPS_##name} + const_iv(SET_OPT), + const_iv(GET_OPT), + const_iv(INIT), + const_iv(RESET), + const_iv(UNINIT), + const_iv(SET_IV), + const_iv(APPEND), + const_iv(DIGEST), + const_iv(ENCRYPT), + const_iv(DECRYPT), + const_iv(SET_SALT), + const_iv(GET_SALT_SIZE), + const_iv(SET_KEY), + const_iv(GET_KEY_SIZE), + const_iv(SET_BATCH_MODE), + const_iv(GET_BATCH_MODE), + const_iv(GET_BLOCK_SIZE), + const_iv(SET_KEY_WITH_LEN), + const_iv(UNKNOWN), +#undef const_iv + }; + + for (civ = const_iv + sizeof(const_iv) / sizeof(const_iv[0]); civ-- > const_iv; ) + newCONSTSUB(stash, (char *)civ->name, newSViv(civ->iv)); + + for (civ = bm_const_iv + sizeof(bm_const_iv) / sizeof(bm_const_iv[0]); civ-- > bm_const_iv; ) + newCONSTSUB(cipher_caps, (char *)civ->name, newSViv(civ->iv)); +} + const gchar * purple_cipher_get_name(cipher) Purple::Cipher cipher @@ -11,14 +54,51 @@ purple_cipher_get_capabilities(cipher) Purple::Cipher cipher -gboolean -purple_cipher_digest_region(name, data, data_len, in_len, digest, out_len) - const gchar * name - const guchar * data - size_t data_len +size_t +purple_cipher_digest_region(name, data_sv, in_len, digest) + const gchar *name + SV *data_sv size_t in_len - guchar &digest - size_t * out_len + SV *digest + PREINIT: + gboolean ret; + guchar *buff = NULL; + guchar *data = NULL; + size_t data_len; + CODE: + data = SvPV(data_sv, data_len); + SvUPGRADE(digest, SVt_PV); + buff = SvGROW(digest, in_len); + ret = purple_cipher_digest_region(name, data, data_len, in_len, buff, &RETVAL); + if(!ret) { + SvSetSV_nosteal(digest, &PL_sv_undef); + XSRETURN_UNDEF; + } + SvCUR_set(digest, RETVAL); + SvPOK_only(digest); + OUTPUT: + RETVAL + +gchar_own* +purple_cipher_http_digest_calculate_response(algorithm, method, digest_uri, qop, entity, nonce, nonce_count, client_nonce, session_key) + const gchar* algorithm + const gchar* method + const gchar* digest_uri + const gchar* qop + const gchar* entity + const gchar* nonce + const gchar* nonce_count + const gchar* client_nonce + const gchar* session_key + +gchar_own* +purple_cipher_http_digest_calculate_session_key(algorithm, username, realm, password, nonce, client_nonce) + const gchar* algorithm + const gchar* username + const gchar* realm + const gchar* password + const gchar* nonce + const gchar* client_nonce MODULE = Purple::Cipher PACKAGE = Purple::Ciphers PREFIX = purple_ciphers_ PROTOTYPES: ENABLE @@ -48,12 +128,6 @@ Purple::Handle purple_ciphers_get_handle() -void -purple_ciphers_init() - -void -purple_ciphers_uninit() - MODULE = Purple::Cipher PACKAGE = Purple::Cipher::Context PREFIX = purple_cipher_context_ PROTOTYPES: ENABLE @@ -69,17 +143,19 @@ gchar *name Purple::Cipher::Context -purple_cipher_context_new(cipher, extra) +purple_cipher_context_new(klass, cipher, extra = NULL) Purple::Cipher cipher void *extra + C_ARGS: cipher, extra Purple::Cipher::Context -purple_cipher_context_new_by_name(name, extra) +purple_cipher_context_new_by_name(klass, name, extra = NULL) gchar *name void *extra + C_ARGS: name, extra void -purple_cipher_context_reset(context, extra) +purple_cipher_context_reset(context, extra = NULL) Purple::Cipher::Context context gpointer extra @@ -88,46 +164,103 @@ Purple::Cipher::Context context void -purple_cipher_context_set_iv(context, iv, len) - Purple::Cipher::Context context - guchar * iv - size_t len +purple_cipher_context_set_iv(Purple::Cipher::Context context, guchar *iv, size_t length(iv)) + PROTOTYPE: $$ void -purple_cipher_context_append(context, data, len) +purple_cipher_context_append(Purple::Cipher::Context context, guchar *data, size_t length(data)) + PROTOTYPE: $$ + +size_t +purple_cipher_context_digest(context, in_len, digest) Purple::Cipher::Context context - guchar * data - size_t len + size_t in_len + SV *digest + PREINIT: + gboolean ret; + guchar *buff = NULL; + CODE: + SvUPGRADE(digest, SVt_PV); + buff = SvGROW(digest, in_len); + ret = purple_cipher_context_digest(context, in_len, buff, &RETVAL); + if(!ret) { + SvSetSV_nosteal(digest, &PL_sv_undef); + XSRETURN_UNDEF; + } + SvCUR_set(digest, RETVAL); + SvPOK_only(digest); + OUTPUT: + RETVAL -gboolean -purple_cipher_context_digest(context, in_len, digest, out_len) +size_t +purple_cipher_context_digest_to_str(context, in_len, digest_s) Purple::Cipher::Context context size_t in_len - guchar &digest - size_t &out_len - -gboolean -purple_cipher_context_digest_to_str(context, in_len, digest_s, out_len) - Purple::Cipher::Context context - size_t in_len - gchar &digest_s - size_t &out_len + SV *digest_s + PREINIT: + gboolean ret; + gchar *buff = NULL; + CODE: + in_len += 1; /* perl shouldn't need to care about '\0' at the end */ + SvUPGRADE(digest_s, SVt_PV); + buff = SvGROW(digest_s, in_len); + ret = purple_cipher_context_digest_to_str(context, in_len, buff, &RETVAL); + if(!ret) { + SvSetSV_nosteal(digest_s, &PL_sv_undef); + XSRETURN_UNDEF; + } + SvCUR_set(digest_s, RETVAL); + SvPOK_only(digest_s); + OUTPUT: + RETVAL gint -purple_cipher_context_encrypt(context, data, len, output, outlen) +purple_cipher_context_encrypt(context, data_sv, output, OUTLIST size_t outlen) Purple::Cipher::Context context - guchar &data - size_t len - guchar &output - size_t &outlen + SV *data_sv + SV *output + PROTOTYPE: $$$ + PREINIT: + size_t datalen; + guchar *buff = NULL; + guchar *data = NULL; + CODE: + data = SvPV(data_sv, datalen); + SvUPGRADE(output, SVt_PV); + buff = SvGROW(output, datalen); + RETVAL = purple_cipher_context_encrypt(context, data, datalen, buff, &outlen); + if(outlen != 0) { + SvPOK_only(output); + SvCUR_set(output, outlen); + } else { + SvSetSV_nosteal(output, &PL_sv_undef); + } + OUTPUT: + RETVAL gint -purple_cipher_context_decrypt(context, data, len, output, outlen) +purple_cipher_context_decrypt(context, data_sv, output, OUTLIST size_t outlen) Purple::Cipher::Context context - guchar &data - size_t len - guchar &output - size_t &outlen + SV *data_sv + SV *output + PROTOTYPE: $$$ + PREINIT: + size_t datalen; + guchar *buff = NULL; + guchar *data = NULL; + CODE: + data = SvPV(data_sv, datalen); + SvUPGRADE(output, SVt_PV); + buff = SvGROW(output, datalen); + RETVAL = purple_cipher_context_decrypt(context, data, datalen, buff, &outlen); + if(outlen != 0) { + SvPOK_only(output); + SvCUR_set(output, outlen); + } else { + SvSetSV_nosteal(output, &PL_sv_undef); + } + OUTPUT: + RETVAL void purple_cipher_context_set_salt(context, salt) @@ -155,3 +288,21 @@ gpointer purple_cipher_context_get_data(context) Purple::Cipher::Context context + +Purple::Cipher::BatchMode +purple_cipher_context_get_batch_mode(context) + Purple::Cipher::Context context + +size_t +purple_cipher_context_get_block_size(context) + Purple::Cipher::Context context + +void +purple_cipher_context_set_batch_mode(context, mode) + Purple::Cipher::Context context + Purple::Cipher::BatchMode mode + +void +purple_cipher_context_set_key_with_len(Purple::Cipher::Context context, guchar *key, size_t length(key)) + PROTOTYPE: $$ +
--- a/libpurple/plugins/perl/common/Connection.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Connection.xs Thu Aug 07 16:00:16 2008 +0000 @@ -87,18 +87,5 @@ XPUSHs(sv_2mortal(purple_perl_bless_object(l->data, "Purple::Connection"))); } -void -purple_connections_set_ui_ops(ops) - Purple::Connection::UiOps ops - -Purple::Connection::UiOps -purple_connections_get_ui_ops() - -void -purple_connections_init() - -void -purple_connections_uninit() - Purple::Handle purple_connections_get_handle()
--- a/libpurple/plugins/perl/common/Conversation.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Conversation.xs Thu Aug 07 16:00:16 2008 +0000 @@ -124,12 +124,6 @@ Purple::Handle purple_conversations_get_handle() -void -purple_conversations_init() - -void -purple_conversations_uninit() - MODULE = Purple::Conversation PACKAGE = Purple::Conversation PREFIX = purple_conversation_ PROTOTYPES: ENABLE @@ -342,10 +336,8 @@ t_GL = NULL; t_len = av_len((AV *)SvRV(users)); - for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL = g_list_append(t_GL, SvPV(*av_fetch((AV *)SvRV(users), i, 0), t_sl)); - } + for (i = 0; i < t_len; i++) + t_GL = g_list_append(t_GL, SvPVutf8_nolen(*av_fetch((AV *)SvRV(users), i, 0))); for (l = purple_conv_chat_set_users(chat, t_GL); l != NULL; l = l->next) { XPUSHs(sv_2mortal(purple_perl_bless_object(l->data, "Purple::ListEntry"))); @@ -382,10 +374,8 @@ t_GL = NULL; t_len = av_len((AV *)SvRV(ignored)); - for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL = g_list_append(t_GL, SvPV(*av_fetch((AV *)SvRV(ignored), i, 0), t_sl)); - } + for (i = 0; i < t_len; i++) + t_GL = g_list_append(t_GL, SvPVutf8_nolen(*av_fetch((AV *)SvRV(ignored), i, 0))); for (l = purple_conv_chat_set_ignored(chat, t_GL); l != NULL; l = l->next) { XPUSHs(sv_2mortal(purple_perl_bless_object(l->data, "Purple::ListEntry"))); @@ -441,26 +431,20 @@ t_GL_users = NULL; t_len = av_len((AV *)SvRV(users)); - for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL_users = g_list_append(t_GL_users, SvPV(*av_fetch((AV *)SvRV(users), i, 0), t_sl)); - } + for (i = 0; i < t_len; i++) + t_GL_users = g_list_append(t_GL_users, SvPVutf8_nolen(*av_fetch((AV *)SvRV(users), i, 0))); t_GL_flags = NULL; t_len = av_len((AV *)SvRV(flags)); - for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL_flags = g_list_append(t_GL_flags, SvPV(*av_fetch((AV *)SvRV(flags), i, 0), t_sl)); - } + for (i = 0; i < t_len; i++) + t_GL_flags = g_list_append(t_GL_flags, SvPVutf8_nolen(*av_fetch((AV *)SvRV(flags), i, 0))); t_GL_extra_msgs = NULL; t_len = av_len((AV *)SvRV(extra_msgs)); - for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL_extra_msgs = g_list_append(t_GL_extra_msgs, SvPV(*av_fetch((AV *)SvRV(extra_msgs), i, 0), t_sl)); - } + for (i = 0; i < t_len; i++) + t_GL_extra_msgs = g_list_append(t_GL_extra_msgs, SvPVutf8_nolen(*av_fetch((AV *)SvRV(extra_msgs), i, 0))); purple_conv_chat_add_users(chat, t_GL_users, t_GL_extra_msgs, t_GL_flags, new_arrivals);
--- a/libpurple/plugins/perl/common/Core.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Core.xs Thu Aug 07 16:00:16 2008 +0000 @@ -19,10 +19,3 @@ const char * purple_core_get_ui() -void -purple_core_set_ui_ops(ops) - Purple::Core::UiOps ops - -Purple::Core::UiOps -purple_core_get_ui_ops() -
--- a/libpurple/plugins/perl/common/FT.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/FT.xs Thu Aug 07 16:00:16 2008 +0000 @@ -112,10 +112,6 @@ purple_xfer_get_type(xfer) Purple::Xfer xfer -Purple::XferUiOps -purple_xfer_get_ui_ops(xfer) - Purple::Xfer xfer - gboolean purple_xfer_is_canceled(xfer) Purple::Xfer xfer @@ -188,11 +184,4 @@ MODULE = Purple::Xfer PACKAGE = Purple::Xfers PREFIX = purple_xfers_ PROTOTYPES: ENABLE -Purple::XferUiOps -purple_xfers_get_ui_ops() - -void -purple_xfers_set_ui_ops(ops) - Purple::XferUiOps ops -
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/plugins/perl/common/Idle.xs Thu Aug 07 16:00:16 2008 +0000 @@ -0,0 +1,12 @@ +#include "module.h" + +MODULE = Purple::Idle PACKAGE = Purple::Idle PREFIX = purple_idle_ +PROTOTYPES: ENABLE + +void +purple_idle_touch() + +void +purple_idle_set(time) + time_t time +
--- a/libpurple/plugins/perl/common/Log.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Log.xs Thu Aug 07 16:00:16 2008 +0000 @@ -100,9 +100,6 @@ Purple::Account account void -purple_log_init() - -void purple_log_logger_free(logger) Purple::Log::Logger logger
--- a/libpurple/plugins/perl/common/Makefile.mingw Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Makefile.mingw Thu Aug 07 16:00:16 2008 +0000 @@ -39,11 +39,13 @@ BuddyList.xs \ Cipher.xs \ Cmds.xs \ + Certificate.xs \ Connection.xs \ Conversation.xs \ Core.xs \ Debug.xs \ FT.xs \ + Idle.xs \ Purple.xs \ ImgStore.xs \ Log.xs \ @@ -67,6 +69,7 @@ Status.xs \ Stringref.xs \ Util.xs \ + Whiteboard.xs \ XMLNode.xs #FALLBACKS = const-c.inc const-xs.inc
--- a/libpurple/plugins/perl/common/Network.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Network.xs Thu Aug 07 16:00:16 2008 +0000 @@ -18,9 +18,6 @@ const char * purple_network_get_public_ip() -void -purple_network_init() - const unsigned char * purple_network_ip_atoi(ip) const char *ip
--- a/libpurple/plugins/perl/common/Notify.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Notify.xs Thu Aug 07 16:00:16 2008 +0000 @@ -93,13 +93,6 @@ Purple::NotifyCloseCallback cb gpointer user_data -Purple::NotifyUiOps -purple_notify_get_ui_ops() - -void -purple_notify_set_ui_ops(ops) - Purple::NotifyUiOps ops - void * purple_notify_message(handle, type, title, primary, secondary, cb, user_data) void * handle
--- a/libpurple/plugins/perl/common/Plugin.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Plugin.xs Thu Aug 07 16:00:16 2008 +0000 @@ -164,9 +164,3 @@ Purple::Handle purple_plugins_get_handle() - -void -purple_plugins_init() - -void -purple_plugins_uninit()
--- a/libpurple/plugins/perl/common/PluginPref.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/PluginPref.xs Thu Aug 07 16:00:16 2008 +0000 @@ -62,7 +62,7 @@ const char *label # Do the appropriate conversion based on the perl type specified. # Currently only Strings and Ints will work. - gpointer choice = (SvPOKp($arg) ? SvPV($arg, PL_na) : (SvIOKp($arg) ? GINT_TO_POINTER(SvIV($arg)) : NULL)); + gpointer choice = (SvPOKp($arg) ? SvPVutf8_nolen($arg) : (SvIOKp($arg) ? GINT_TO_POINTER(SvIV($arg)) : NULL)); void purple_plugin_pref_destroy(pref) @@ -176,5 +176,7 @@ gpp_type = PURPLE_PLUGIN_PREF_CHOICE; } else if (type == 2) { gpp_type = PURPLE_PLUGIN_PREF_INFO; + } else if (type == 3) { + gpp_type = PURPLE_PLUGIN_PREF_STRING_FORMAT; } purple_plugin_pref_set_type(pref, gpp_type);
--- a/libpurple/plugins/perl/common/Pounce.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Pounce.xs Thu Aug 07 16:00:16 2008 +0000 @@ -121,15 +121,9 @@ Purple::Handle purple_pounces_get_handle() -void -purple_pounces_init() - gboolean purple_pounces_load() void -purple_pounces_uninit() - -void purple_pounces_unregister_handler(ui) const char *ui
--- a/libpurple/plugins/perl/common/Prefs.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Prefs.xs Thu Aug 07 16:00:16 2008 +0000 @@ -53,14 +53,35 @@ t_GL = NULL; t_len = av_len((AV *)SvRV(value)); - for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL = g_list_append(t_GL, SvPV(*av_fetch((AV *)SvRV(value), i, 0), t_sl)); - } + for (i = 0; i < t_len; i++) + t_GL = g_list_append(t_GL, SvPVutf8_nolen(*av_fetch((AV *)SvRV(value), i, 0))); + purple_prefs_add_string_list(name, t_GL); g_list_free(t_GL); void +purple_prefs_add_path(name, value) + const char *name + const char *value + +void +purple_prefs_add_path_list(name, value) + const char *name + SV *value +PREINIT: + GList *t_GL; + int i, t_len; +PPCODE: + t_GL = NULL; + t_len = av_len((AV *)SvRV(value)); + + for (i = 0; i < t_len; i++) + t_GL = g_list_append(t_GL, SvPVutf8_nolen(*av_fetch((AV *)SvRV(value), i, 0))); + + purple_prefs_add_path_list(name, t_GL); + g_list_free(t_GL); + +void purple_prefs_destroy() guint @@ -90,6 +111,21 @@ purple_prefs_exists(name) const char *name +const char * +purple_prefs_get_path(name) + const char *name + +void +purple_prefs_get_path_list(name) + const char *name +PREINIT: + GList *l; +PPCODE: + for (l = purple_prefs_get_path_list(name); l != NULL; l = g_list_delete_link(l, l)) { + XPUSHs(sv_2mortal(newSVpv(l->data, 0))); + g_free(l->data); + } + gboolean purple_prefs_get_bool(name) const char *name @@ -120,9 +156,6 @@ purple_prefs_get_type(name) const char *name -void -purple_prefs_init() - gboolean purple_prefs_load() @@ -171,14 +204,36 @@ t_GL = NULL; t_len = av_len((AV *)SvRV(value)); - for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL = g_list_append(t_GL, SvPV(*av_fetch((AV *)SvRV(value), i, 0), t_sl)); - } + for (i = 0; i < t_len; i++) + t_GL = g_list_append(t_GL, SvPVutf8_nolen(*av_fetch((AV *)SvRV(value), i, 0))); + purple_prefs_set_string_list(name, t_GL); g_list_free(t_GL); void +purple_prefs_set_path(name, value) + const char *name + const char *value + +void +purple_prefs_set_path_list(name, value) + const char *name + SV *value +PREINIT: + GList *t_GL; + int i, t_len; +PPCODE: + t_GL = NULL; + t_len = av_len((AV *)SvRV(value)); + + for (i = 0; i < t_len; i++) + t_GL = g_list_append(t_GL, SvPVutf8_nolen(*av_fetch((AV *)SvRV(value), i, 0))); + + purple_prefs_set_path_list(name, t_GL); + g_list_free(t_GL); + + +void purple_prefs_trigger_callback(name) const char *name @@ -194,7 +249,4 @@ } void -purple_prefs_uninit() - -void purple_prefs_update_old()
--- a/libpurple/plugins/perl/common/Privacy.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Privacy.xs Thu Aug 07 16:00:16 2008 +0000 @@ -3,16 +3,6 @@ MODULE = Purple::Privacy PACKAGE = Purple::Privacy PREFIX = purple_privacy_ PROTOTYPES: ENABLE -Purple::Privacy::UiOps -purple_privacy_get_ui_ops() - -void -purple_privacy_init() - -void -purple_privacy_set_ui_ops(ops) - Purple::Privacy::UiOps ops - gboolean purple_privacy_permit_add(account, name, local_only) Purple::Account account
--- a/libpurple/plugins/perl/common/Proxy.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Proxy.xs Thu Aug 07 16:00:16 2008 +0000 @@ -24,9 +24,6 @@ Purple::Handle purple_proxy_get_handle() -void -purple_proxy_init() - MODULE = Purple::Proxy PACKAGE = Purple::ProxyInfo PREFIX = purple_proxy_info_ PROTOTYPES: ENABLE
--- a/libpurple/plugins/perl/common/Purple.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Purple.xs Thu Aug 07 16:00:16 2008 +0000 @@ -6,6 +6,7 @@ PURPLE_PERL_BOOT_PROTO(Account__Option); PURPLE_PERL_BOOT_PROTO(Buddy__Icon); PURPLE_PERL_BOOT_PROTO(BuddyList); +PURPLE_PERL_BOOT_PROTO(Certificate); PURPLE_PERL_BOOT_PROTO(Cipher); PURPLE_PERL_BOOT_PROTO(Cmd); PURPLE_PERL_BOOT_PROTO(Connection); @@ -13,6 +14,7 @@ PURPLE_PERL_BOOT_PROTO(Core); PURPLE_PERL_BOOT_PROTO(Debug); PURPLE_PERL_BOOT_PROTO(Xfer); +PURPLE_PERL_BOOT_PROTO(Idle); PURPLE_PERL_BOOT_PROTO(ImgStore); PURPLE_PERL_BOOT_PROTO(Log); PURPLE_PERL_BOOT_PROTO(Network); @@ -35,6 +37,7 @@ PURPLE_PERL_BOOT_PROTO(Status); PURPLE_PERL_BOOT_PROTO(Stringref); PURPLE_PERL_BOOT_PROTO(Util); +PURPLE_PERL_BOOT_PROTO(Whiteboard); PURPLE_PERL_BOOT_PROTO(XMLNode); MODULE = Purple PACKAGE = Purple PREFIX = purple_ @@ -45,6 +48,7 @@ PURPLE_PERL_BOOT(Account__Option); PURPLE_PERL_BOOT(Buddy__Icon); PURPLE_PERL_BOOT(BuddyList); + PURPLE_PERL_BOOT(Certificate); PURPLE_PERL_BOOT(Cipher); PURPLE_PERL_BOOT(Cmd); PURPLE_PERL_BOOT(Connection); @@ -52,6 +56,7 @@ PURPLE_PERL_BOOT(Core); PURPLE_PERL_BOOT(Debug); PURPLE_PERL_BOOT(Xfer); + PURPLE_PERL_BOOT(Idle); PURPLE_PERL_BOOT(ImgStore); PURPLE_PERL_BOOT(Log); PURPLE_PERL_BOOT(Network); @@ -74,6 +79,7 @@ PURPLE_PERL_BOOT(Status); PURPLE_PERL_BOOT(Stringref); PURPLE_PERL_BOOT(Util); + PURPLE_PERL_BOOT(Whiteboard); PURPLE_PERL_BOOT(XMLNode); guint
--- a/libpurple/plugins/perl/common/Request.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Request.xs Thu Aug 07 16:00:16 2008 +0000 @@ -47,7 +47,7 @@ SAVETMPS; PUSHMARK(sp); - XPUSHs(purple_perl_bless_object(fields, "Purple::Request::Fields")); + XPUSHs(sv_2mortal(purple_perl_bless_object(fields, "Purple::Request::Fields"))); PUTBACK; call_sv(gpr->ok_fun, G_EVAL | G_SCALAR); SPAGAIN; @@ -69,7 +69,7 @@ SAVETMPS; PUSHMARK(sp); - XPUSHs(purple_perl_bless_object(fields, "Purple::Request::Fields")); + XPUSHs(sv_2mortal(purple_perl_bless_object(fields, "Purple::Request::Fields"))); PUTBACK; call_sv(gpr->cancel_fun, G_EVAL | G_SCALAR); SPAGAIN; @@ -206,12 +206,6 @@ purple_request_close_with_handle(handle) void * handle -Purple::Request::UiOps -purple_request_get_ui_ops() - -void -purple_request_set_ui_ops(ops) - Purple::Request::UiOps ops MODULE = Purple::Request PACKAGE = Purple::Request::Field PREFIX = purple_request_field_ PROTOTYPES: ENABLE
--- a/libpurple/plugins/perl/common/Roomlist.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Roomlist.xs Thu Aug 07 16:00:16 2008 +0000 @@ -45,10 +45,6 @@ purple_roomlist_get_list(gc) Purple::Connection gc -Purple::Roomlist::UiOps -purple_roomlist_get_ui_ops() - - Purple::Roomlist purple_roomlist_new(account) Purple::Account account @@ -84,10 +80,9 @@ t_GL = NULL; t_len = av_len((AV *)SvRV(fields)); - for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL = g_list_append(t_GL, SvPV(*av_fetch((AV *)SvRV(fields), i, 0), t_sl)); - } + for (i = 0; i < t_len; i++) + t_GL = g_list_append(t_GL, SvPVutf8_nolen(*av_fetch((AV *)SvRV(fields), i, 0))); + purple_roomlist_set_fields(list, t_GL); void @@ -96,10 +91,6 @@ gboolean in_progress void -purple_roomlist_set_ui_ops(ops) - Purple::Roomlist::UiOps ops - -void purple_roomlist_show_with_account(account) Purple::Account account
--- a/libpurple/plugins/perl/common/SSLConn.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/SSLConn.xs Thu Aug 07 16:00:16 2008 +0000 @@ -35,9 +35,6 @@ Purple::Ssl::Ops purple_ssl_get_ops() -void -purple_ssl_init() - gboolean purple_ssl_is_supported() @@ -51,9 +48,6 @@ purple_ssl_set_ops(ops) Purple::Ssl::Ops ops -void -purple_ssl_uninit() - size_t purple_ssl_write(gsc, buffer, len) Purple::Ssl::Connection gsc
--- a/libpurple/plugins/perl/common/SavedStatuses.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/SavedStatuses.xs Thu Aug 07 16:00:16 2008 +0000 @@ -150,9 +150,3 @@ Purple::Handle purple_savedstatuses_get_handle() - -void -purple_savedstatuses_init() - -void -purple_savedstatuses_uninit()
--- a/libpurple/plugins/perl/common/Server.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Server.xs Thu Aug 07 16:00:16 2008 +0000 @@ -85,7 +85,7 @@ for (t_HE = hv_iternext(t_HV); t_HE != NULL; t_HE = hv_iternext(t_HV) ) { t_key = hv_iterkey(t_HE, &len); t_SV = *hv_fetch(t_HV, t_key, len, 0); - t_value = SvPV(t_SV, PL_na); + t_value = SvPVutf8_nolen(t_SV); g_hash_table_insert(t_GHash, t_key, t_value); } @@ -140,7 +140,7 @@ for (t_HE = hv_iternext(t_HV); t_HE != NULL; t_HE = hv_iternext(t_HV) ) { t_key = hv_iterkey(t_HE, &len); t_SV = *hv_fetch(t_HV, t_key, len, 0); - t_value = SvPV(t_SV, PL_na); + t_value = SvPVutf8_nolen(t_SV); g_hash_table_insert(t_GHash, t_key, t_value); } @@ -170,7 +170,7 @@ for (t_HE = hv_iternext(t_HV); t_HE != NULL; t_HE = hv_iternext(t_HV) ) { t_key = hv_iterkey(t_HE, &len); t_SV = *hv_fetch(t_HV, t_key, len, 0); - t_value = SvPV(t_SV, PL_na); + t_value = SvPVutf8_nolen(t_SV); g_hash_table_insert(t_GHash, t_key, t_value); }
--- a/libpurple/plugins/perl/common/Sound.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Sound.xs Thu Aug 07 16:00:16 2008 +0000 @@ -26,12 +26,6 @@ newCONSTSUB(stash, (char *)civ->name, newSViv(civ->iv)); } -Purple::Sound::UiOps -purple_sound_get_ui_ops() - -void -purple_sound_init() - void purple_sound_play_event(event, account) Purple::SoundEventID event @@ -41,10 +35,3 @@ purple_sound_play_file(filename, account) const char *filename Purple::Account account - -void -purple_sound_set_ui_ops(ops) - Purple::Sound::UiOps ops - -void -purple_sound_uninit()
--- a/libpurple/plugins/perl/common/Status.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Status.xs Thu Aug 07 16:00:16 2008 +0000 @@ -86,8 +86,7 @@ t_len = av_len((AV *)SvRV(source_list)); for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL = g_list_append(t_GL, SvPV(*av_fetch((AV *)SvRV(source_list), i, 0), t_sl)); + t_GL = g_list_append(t_GL, SvPVutf8_nolen(*av_fetch((AV *)SvRV(source_list), i, 0))); } purple_presence_add_list(presence, t_GL); g_list_free(t_GL); @@ -342,12 +341,6 @@ const char *id const char *value -void -purple_status_init() - -void -purple_status_uninit() - MODULE = Purple::Status PACKAGE = Purple::StatusType PREFIX = purple_status_type_ PROTOTYPES: ENABLE @@ -389,8 +382,7 @@ t_len = av_len((AV *)SvRV(status_types)); for (i = 0; i < t_len; i++) { - STRLEN t_sl; - t_GL = g_list_append(t_GL, SvPV(*av_fetch((AV *)SvRV(status_types), i, 0), t_sl)); + t_GL = g_list_append(t_GL, SvPVutf8_nolen(*av_fetch((AV *)SvRV(status_types), i, 0))); } RETVAL = (PurpleStatusType *)purple_status_type_find_with_id(t_GL, id); g_list_free(t_GL);
--- a/libpurple/plugins/perl/common/Util.xs Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/Util.xs Thu Aug 07 16:00:16 2008 +0000 @@ -26,9 +26,24 @@ LEAVE; } +static void markup_find_tag_foreach(GQuark key_id, char *data, HV *hv) { + const char *key = NULL; + key = g_quark_to_string(key_id); + hv_store(hv, key, strlen(key), newSVpv(data, 0), 0); +} + MODULE = Purple::Util PACKAGE = Purple::Util PREFIX = purple_ PROTOTYPES: ENABLE +gboolean +purple_running_gnome() + +gboolean +purple_running_kde() + +gboolean +purple_running_osx() + int purple_build_dir(path, mode) const char *path @@ -49,15 +64,30 @@ const gchar * purple_home_dir() -gboolean -purple_message_meify(message, len) - char *message - size_t len +gchar_own* +purple_message_meify(SV *msg) + PREINIT: + char *message = NULL; + gboolean ret; + gssize len; + CODE: + message = SvPV(msg, len); + message = g_strndup(message, len); + ret = purple_message_meify(message, len); + if(ret) { + /* message will get g_free()'d later on, since RETVAL is gchar_own* */ + RETVAL = message; + } else { + RETVAL = NULL; + g_free(message); + } + OUTPUT: + RETVAL FILE * -purple_mkstemp(path, binary) - char **path +purple_mkstemp(OUTLIST gchar_own *path, binary) gboolean binary + PROTOTYPE: $ const char * purple_normalize(account, str) @@ -122,14 +152,36 @@ purple_url_encode(str) const char *str -gboolean -purple_url_parse(url, ret_host, ret_port, ret_path, ret_user, ret_passwd) + # XXX: this made perl assert()... + # + #gboolean + #purple_url_parse(url, OUTLIST gchar_own *ret_host, OUTLIST int ret_port, OUTLIST gchar_own *ret_path, OUTLIST gchar_own *ret_user, OUTLIST gchar_own *ret_passwd) + # const char *url + # PROTOTYPE: $ + +void +purple_url_parse(url) const char *url - char **ret_host - int *ret_port - char **ret_path - char **ret_user - char **ret_passwd + PREINIT: + char *ret_host; + int ret_port; + char *ret_path; + char *ret_user; + char *ret_passwd; + gboolean ret; + PPCODE: + ret = purple_url_parse(url, &ret_host, &ret_port, &ret_path, &ret_user, &ret_passwd); + XPUSHs(sv_2mortal(newSViv(ret))); + XPUSHs(ret_host ? sv_2mortal(newSVpv(ret_host, 0)) : sv_2mortal(newSV(0))); + XPUSHs(sv_2mortal(newSViv(ret_port))); + XPUSHs(ret_path ? sv_2mortal(newSVpv(ret_path, 0)) : sv_2mortal(newSV(0))); + XPUSHs(ret_user ? sv_2mortal(newSVpv(ret_user, 0)) : sv_2mortal(newSV(0))); + XPUSHs(ret_passwd ? sv_2mortal(newSVpv(ret_passwd, 0)) : sv_2mortal(newSV(0))); + g_free(ret_host); + g_free(ret_path); + g_free(ret_user); + g_free(ret_passwd); + const char * purple_user_dir() @@ -137,6 +189,144 @@ const char * purple_utf8_strftime(const char *format, const struct tm *tm); +gboolean +purple_utf8_has_word(haystack, needle) + const char* haystack + const char* needle + +gchar_own* +purple_utf8_ncr_decode(in) + const char* in + +gchar_own* +purple_utf8_ncr_encode(in) + const char* in + +gchar_own* +purple_utf8_salvage(str) + const char* str + +int +purple_utf8_strcasecmp(a, b) + const char* a + const char* b + +gchar_own* +purple_utf8_try_convert(str) + const char* str + +gboolean +purple_ip_address_is_valid(ip) + const char* ip + +const char* +purple_normalize_nocase(account, str) + Purple::Account account + const char* str + +const gchar* +purple_gai_strerror(errnum) + gint errnum + +void +purple_got_protocol_handler_uri(uri) + const char* uri + +gchar_own* +purple_base16_encode(const guchar *data, gsize length(data)) + PROTOTYPE: $ + +gchar_own* +purple_base16_encode_chunked(const guchar *data, gsize length(data)) + PROTOTYPE: $ + +gchar_own* +purple_base64_encode(const guchar *data, gsize length(data)) + PROTOTYPE: $ + +void +purple_restore_default_signal_handlers() + +SV * +purple_base16_decode(str) + const char* str + PREINIT: + gsize len; + guchar *ret; + CODE: + ret = purple_base16_decode(str, &len); + if(len) { + RETVAL = newSVpv(ret, len); + } else { + g_free(ret); + XSRETURN_UNDEF; + } + g_free(ret); + OUTPUT: + RETVAL + +SV* +purple_base64_decode(str) + const char* str + PREINIT: + gsize len; + guchar *ret; + CODE: + ret = purple_base64_decode(str, &len); + if(len) { + RETVAL = newSVpv(ret, len); + } else { + g_free(ret); + XSRETURN_UNDEF; + } + g_free(ret); + OUTPUT: + RETVAL + +SV* +purple_quotedp_decode(str) + const char* str + PREINIT: + gsize len; + guchar *ret; + CODE: + ret = purple_quotedp_decode(str, &len); + if(len) { + RETVAL = newSVpv(ret, len); + } else { + g_free(ret); + XSRETURN_UNDEF; + } + g_free(ret); + OUTPUT: + RETVAL + +void +purple_uri_list_extract_uris(uri_list) + const gchar* uri_list + PREINIT: + GList *l = NULL, *gl = NULL; + PPCODE: + gl = purple_uri_list_extract_uris(uri_list); + for(l = gl; l; l = l->next) { + XPUSHs(sv_2mortal(newSVpv(l->data, 0))); + g_free(l->data); + } + g_list_free(gl); + +void +purple_uri_list_extract_filenames(uri_list) + const gchar* uri_list + PREINIT: + GList *l = NULL, *gl = NULL; + PPCODE: + gl = purple_uri_list_extract_filenames(uri_list); + for(l = gl; l; l = l->next) { + XPUSHs(sv_2mortal(newSVpv(l->data, 0))); + g_free(l->data); + } + g_list_free(gl); + MODULE = Purple::Util PACKAGE = Purple::Util::Str PREFIX = purple_str_ PROTOTYPES: ENABLE @@ -145,9 +335,8 @@ const char *str gchar_own * -purple_str_binary_to_ascii(binary, len) - const unsigned char *binary - guint len +purple_str_binary_to_ascii(const unsigned char *binary, guint length(binary)) + PROTOTYPE: $ gboolean purple_str_has_prefix(s, p) @@ -168,17 +357,15 @@ size_t size void -purple_str_strip_char(str, thechar) - char *str +purple_str_strip_char(IN_OUT char str, thechar) char thechar time_t -purple_str_to_time(timestamp, utc = FALSE, tm = NULL, tz_off = NULL, rest = NULL) +purple_str_to_time(timestamp, utc = FALSE, tm = NULL, OUTLIST long tz_off, OUTLIST const char *rest) const char *timestamp gboolean utc struct tm *tm - long *tz_off - const char **rest + PROTOTYPE: $;$$ MODULE = Purple::Util PACKAGE = Purple::Util::Date PREFIX = purple_date_ PROTOTYPES: ENABLE @@ -213,23 +400,38 @@ const char *link_prefix Purple::Util::InfoFieldFormatCallback format_cb -gboolean -purple_markup_find_tag(needle, haystack, start, end, attributes) + # XXX: returning start/end to perl doesn't make a lot of sense... + # XXX: the actual tag data can be gotten with $start =~ s/$end//g; +void +purple_markup_find_tag(needle, haystack) const char *needle const char *haystack - const char **start - const char **end - GData **attributes + PREINIT: + const char *start = NULL; + const char *end = NULL; + GData *attributes; + gboolean ret; + HV *hv = NULL; + PPCODE: + ret = purple_markup_find_tag(needle, haystack, &start, &end, &attributes); + if(!ret) XSRETURN_UNDEF; + + hv = newHV(); + g_datalist_foreach(&attributes, (GDataForeachFunc) markup_find_tag_foreach, hv); + g_datalist_clear(&attributes); + + XPUSHs(sv_2mortal(newSVpv(start, 0))); + XPUSHs(sv_2mortal(newSVpv(end, 0))); + XPUSHs(sv_2mortal(newRV_noinc((SV *) hv))); gchar_own * purple_markup_get_tag_name(tag) const char *tag void -purple_markup_html_to_xhtml(html, dest_xhtml, dest_plain) +purple_markup_html_to_xhtml(html, OUTLIST gchar_own *dest_xhtml, OUTLIST gchar_own *dest_plain) const char *html - char **dest_xhtml - char **dest_plain + PROTOTYPE: $ gchar_own * purple_markup_linkify(str) @@ -245,9 +447,33 @@ purple_markup_strip_html(str) const char *str +gchar_own * +purple_markup_get_css_property(style, opt) + const gchar* style + const gchar* opt + +SV* +purple_markup_unescape_entity(text) + const char* text + PREINIT: + int length; + CODE: + { + const char *str = purple_markup_unescape_entity(text, &length); + if(length) { + RETVAL = newSVpv(str, length); + } else { + XSRETURN_UNDEF; + } + } + OUTPUT: + RETVAL + + MODULE = Purple::Util PACKAGE = Purple::Util PREFIX = purple_util_ PROTOTYPES: ENABLE + #XXX: expand... void purple_util_fetch_url(plugin, url, full, user_agent, http11, cb) Purple::Plugin plugin @@ -256,14 +482,19 @@ const char *user_agent gboolean http11 SV * cb -CODE: +PREINIT: + PurpleUtilFetchUrlData *data; +PPCODE: + /* XXX: i don't like this... only plugins can use it... */ SV *sv = purple_perl_sv_from_fun(plugin, cb); if (sv != NULL) { - purple_util_fetch_url(url, full, user_agent, http11, + data = purple_util_fetch_url(url, full, user_agent, http11, purple_perl_util_url_cb, sv); + XPUSHs(sv_2mortal(purple_perl_bless_object(data, "Purple::Util::FetchUrlData"))); } else { purple_debug_warning("perl", "Callback not a valid type, only strings and coderefs allowed in purple_util_fetch_url.\n"); + XSRETURN_UNDEF; } void @@ -271,7 +502,43 @@ const char *dir gboolean -purple_util_write_data_to_file(filename, data, size) +purple_util_write_data_to_file(filename, const char *data, size_t length(data)) const char *filename - const char *data - size_t size + PROTOTYPE: $$ + +void +purple_util_set_current_song(title, artist, album) + const char *title + const char *artist + const char *album + +void +purple_util_chrreplace(IN_OUT char string, delimiter, replacement) + char delimiter + char replacement + +gchar_own* +purple_util_format_song_info(title, artist, album, unused) + const char* title + const char* artist + const char* album + gpointer unused + +const char* +purple_util_get_image_extension(gconstpointer data, size_t length(data)) + PROTOTYPE: $ + +gchar_own* +purple_util_get_image_filename(gconstpointer image_data, size_t length(image_data)) + PROTOTYPE: $ + +Purple::XMLNode +purple_util_read_xml_from_file(filename, description) + const char* filename + const char* description + +gboolean +purple_util_write_data_to_file_absolute(filename_full, char *data, gssize length(data)) + const char* filename_full + PROTOTYPE: $$ +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/plugins/perl/common/Whiteboard.xs Thu Aug 07 16:00:16 2008 +0000 @@ -0,0 +1,78 @@ +#include "module.h" + +MODULE = Purple::Whiteboard PACKAGE = Purple::Whiteboard PREFIX = purple_whiteboard_ +PROTOTYPES: ENABLE + +void +purple_whiteboard_clear(wb) + Purple::Whiteboard wb + +Purple::Whiteboard +purple_whiteboard_create(account, who, state) + Purple::Account account + const char* who + int state + +void +purple_whiteboard_destroy(wb) + Purple::Whiteboard wb + +void +purple_whiteboard_draw_line(wb, x1, y1, x2, y2, color, size) + Purple::Whiteboard wb + int x1 + int y1 + int x2 + int y2 + int color + int size + +void +purple_whiteboard_draw_point(wb, x, y, color, size) + Purple::Whiteboard wb + int x + int y + int color + int size + +Purple::Whiteboard +purple_whiteboard_get_session(account, who) + Purple::Account account + const char* who + +void +purple_whiteboard_send_brush(wb, size, color) + Purple::Whiteboard wb + int size + int color + +void +purple_whiteboard_send_clear(wb) + Purple::Whiteboard wb + +void +purple_whiteboard_set_brush(wb, size, color) + Purple::Whiteboard wb + int size + int color + +void +purple_whiteboard_set_dimensions(wb, width, height) + Purple::Whiteboard wb + int width + int height + +gboolean +purple_whiteboard_get_brush(wb, OUTLIST int size, OUTLIST int color) + Purple::Whiteboard wb + PROTOTYPE: $ + +gboolean +purple_whiteboard_get_dimensions(wb, OUTLIST int width, OUTLIST int height) + Purple::Whiteboard wb + PROTOTYPE: $ + +void +purple_whiteboard_start(wb) + Purple::Whiteboard wb +
--- a/libpurple/plugins/perl/common/module.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/module.h Thu Aug 07 16:00:16 2008 +0000 @@ -20,6 +20,7 @@ #include "accountopt.h" #include "blist.h" #include "buddyicon.h" +#include "certificate.h" #include "cipher.h" #include "cmds.h" #include "connection.h" @@ -36,6 +37,7 @@ #include "gtkconv.h" #include "gtkutils.h" #endif +#include "idle.h" #include "imgstore.h" #include "network.h" #include "notify.h" @@ -59,19 +61,18 @@ /* Ewww. perl has it's own util.h which is in the include path :( */ #include "libpurple/util.h" #include "value.h" +#include "whiteboard.h" #include "xmlnode.h" /* account.h */ typedef PurpleAccount * Purple__Account; typedef PurpleAccountOption * Purple__Account__Option; -typedef PurpleAccountUiOps * Purple__Account__UiOps; typedef PurpleAccountUserSplit * Purple__Account__UserSplit; /* blist.h */ typedef PurpleBlistNode * Purple__BuddyList__Node; typedef PurpleBlistNodeFlags Purple__BuddyList__NodeFlags; typedef PurpleBlistNodeType Purple__BuddyList__NodeType; -typedef PurpleBlistUiOps * Purple__BuddyList__UiOps; typedef PurpleBuddyList * Purple__BuddyList; typedef PurpleBuddy * Purple__BuddyList__Buddy; typedef PurpleChat * Purple__BuddyList__Chat; @@ -81,11 +82,20 @@ /* buddyicon.h */ typedef PurpleBuddyIcon * Purple__Buddy__Icon; +/* certificate.h */ +typedef PurpleCertificate * Purple__Certificate; +typedef PurpleCertificatePool * Purple__Certificate__Pool; +typedef PurpleCertificateScheme * Purple__Certificate__Scheme; +typedef PurpleCertificateVerifier * Purple__Certificate__Verifier; +typedef PurpleCertificateVerificationRequest * Purple__Certificate__VerificationRequest; +typedef PurpleCertificateVerificationStatus Purple__Certificate__VerificationStatus; + /* cipher.h */ typedef PurpleCipher * Purple__Cipher; typedef PurpleCipherCaps Purple__CipherCaps; typedef PurpleCipherContext * Purple__Cipher__Context; typedef PurpleCipherOps * Purple__Cipher__Ops; +typedef PurpleCipherBatchMode Purple__Cipher__BatchMode; /* cmds.h */ typedef PurpleCmdFlag Purple__Cmd__Flag; @@ -97,7 +107,6 @@ typedef PurpleConnection * Purple__Connection; typedef PurpleConnectionFlags Purple__ConnectionFlags; typedef PurpleConnectionState Purple__ConnectionState; -typedef PurpleConnectionUiOps * Purple__Connection__UiOps; /* conversation.h */ typedef PurpleConversationType Purple__ConversationType; @@ -106,7 +115,6 @@ typedef PurpleMessageFlags Purple__MessageFlags; typedef PurpleConvChatBuddyFlags Purple__ConvChatBuddyFlags; typedef PurpleConversation * Purple__Conversation; -typedef PurpleConversationUiOps * Purple__Conversation__UiOps; typedef PurpleConvIm * Purple__Conversation__IM; typedef PurpleConvChat * Purple__Conversation__Chat; typedef PurpleConvChatBuddy * Purple__Conversation__ChatBuddy; @@ -114,7 +122,6 @@ /* core.h */ typedef PurpleCore * Purple__Core; -typedef PurpleCoreUiOps * Purple__Core__UiOps; /* debug.h */ typedef PurpleDebugLevel Purple__DebugLevel; @@ -125,13 +132,12 @@ /* eventloop.h */ typedef PurpleInputCondition * Purple__InputCondition; -typedef PurpleEventLoopUiOps * Purple__EventLoopUiOps; /* ft.h */ typedef PurpleXfer * Purple__Xfer; typedef PurpleXferType Purple__XferType; typedef PurpleXferStatusType Purple__XferStatusType; -typedef PurpleXferUiOps * Purple__XferUiOps; + #ifdef PURPLE_GTKPERL /* gtkblish.h */ @@ -182,7 +188,6 @@ typedef PurpleNotifySearchColumn * Purple__NotifySearchColumn; typedef PurpleNotifySearchButton * Purple__NotifySearchButton; typedef PurpleNotifyType Purple__NotifyType; -typedef PurpleNotifyUiOps * Purple__NotifyUiOps; typedef PurpleNotifyUserInfo * Purple__NotifyUserInfo; typedef PurpleNotifyUserInfoEntry * Purple__NotifyUserInfoEntry; @@ -209,7 +214,6 @@ /* privacy.h */ typedef PurplePrivacyType Purple__PrivacyType; -typedef PurplePrivacyUiOps * Purple__Privacy__UiOps; /* proxy.h */ typedef PurpleProxyInfo * Purple__ProxyInfo; @@ -227,7 +231,6 @@ typedef PurpleRequestFieldGroup * Purple__Request__Field__Group; typedef PurpleRequestFieldType Purple__RequestFieldType; typedef PurpleRequestType Purple__RequestType; -typedef PurpleRequestUiOps * Purple__Request__UiOps; /* roomlist.h */ typedef PurpleRoomlist * Purple__Roomlist; @@ -235,7 +238,6 @@ typedef PurpleRoomlistFieldType Purple__RoomlistFieldType; typedef PurpleRoomlistRoom * Purple__Roomlist__Room; typedef PurpleRoomlistRoomType Purple__RoomlistRoomType; -typedef PurpleRoomlistUiOps * Purple__Roomlist__UiOps; /* savedstatuses.h */ typedef PurpleSavedStatus * Purple__SavedStatus; @@ -246,7 +248,6 @@ /* sound.h */ typedef PurpleSoundEventID Purple__SoundEventID; -typedef PurpleSoundUiOps * Purple__Sound__UiOps; /* sslconn.h */ typedef PurpleInputCondition * Purple__Input__Condition; @@ -273,6 +274,9 @@ /* value.h */ typedef PurpleValue * Purple__Value; +/* whiteboard.h */ +typedef PurpleWhiteboard * Purple__Whiteboard; + /* xmlnode.h */ typedef xmlnode * Purple__XMLNode; typedef XMLNodeType XMLNode__Type; @@ -286,3 +290,4 @@ const char *name; IV iv; } constiv; +
--- a/libpurple/plugins/perl/common/typemap Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/common/typemap Thu Aug 07 16:00:16 2008 +0000 @@ -18,7 +18,7 @@ gchar * T_PV gchar_own * T_GCHAR_OWN guchar T_IV -guchar * T_PTR +guchar * T_PV guchar ** T_PTR const guchar * T_PV char * T_PV @@ -30,7 +30,7 @@ GString * T_PTR GData * T_PTR GData ** T_PTR -const unsigned char * T_PTR +const unsigned char * T_PV struct tm * T_PTR const struct tm * T_PTR xmlnode * T_PTR @@ -40,7 +40,6 @@ Purple::Account T_PurpleObj Purple::Account::Option T_PurpleObj -Purple::Account::UiOps T_PurpleObj Purple::Account::UserSplit T_PurpleObj Purple::Buddy::Icon T_PurpleObj @@ -53,7 +52,6 @@ Purple::BuddyList::Node T_PurpleObj Purple::BuddyList::NodeFlags T_IV Purple::BuddyList::NodeType T_IV -Purple::BuddyList::UiOps T_PurpleObj Purple::Cipher T_PurpleObj Purple::CipherCaps T_IV @@ -64,14 +62,11 @@ Purple::Cmd::Priority T_IV Purple::Cmd::Ret T_IV Purple::Connection T_PurpleObj -Purple::Connection::UiOps T_PurpleObj Purple::Conversation T_PurpleObj Purple::Conversation::Chat T_PurpleObj Purple::Conversation::ChatBuddy T_PurpleObj Purple::Conversation::IM T_PurpleObj -Purple::Conversation::UiOps T_PurpleObj Purple::Core T_PurpleObj -Purple::Core::UiOps T_PurpleObj Purple::Desktop::Item T_PurpleObj Purple::DesktopItemType T_IV @@ -99,7 +94,6 @@ Purple::NotifySearchColumn T_PurpleObj Purple::NotifySearchButton T_PurpleObj Purple::NotifyType T_IV -Purple::NotifyUiOps T_PurpleObj Purple::NotifyUserInfo T_PurpleObj Purple::NotifyUserInfoEntry T_PurpleObj @@ -118,7 +112,6 @@ Purple::PounceEvent T_IV Purple::Presence T_PurpleObj Purple::PrivacyType T_IV -Purple::Privacy::UiOps T_PurpleObj Purple::ProtocolOptions T_IV Purple::ProxyInfo T_PurpleObj Purple::ProxyType T_IV @@ -128,12 +121,10 @@ Purple::Request::Field T_PurpleObj Purple::Request::Fields T_PurpleObj Purple::Request::Field::Group T_PurpleObj -Purple::Request::UiOps T_PurpleObj Purple::Roomlist T_PurpleObj Purple::Roomlist::Room T_PurpleObj Purple::Roomlist::Field T_PurpleObj -Purple::Roomlist::UiOps T_PurpleObj Purple::RoomlistFieldType T_IV Purple::RoomlistRoomType T_IV @@ -142,7 +133,6 @@ Purple::SavedStatus::Sub T_PurpleObj const Purple::SavedStatus::Sub T_PurpleObj Purple::SoundEventID T_IV -Purple::Sound::UiOps T_PurpleObj Purple::Input::Condition T_PurpleObj Purple::SslErrorType T_IV @@ -168,14 +158,22 @@ Purple::Xfer T_PurpleObj Purple::XferType T_IV Purple::XferStatusType T_IV -Purple::XferUiOps T_IV Purple::XMLNode T_PurpleObj XMLNode::Type T_IV /* enums */ +/* certificate.h */ +Purple::Certificate T_PurpleObj +Purple::Certificate::Pool T_PurpleObj +Purple::Certificate::Scheme T_PurpleObj +Purple::Certificate::Verifier T_PurpleObj +Purple::Certificate::VerificationRequest T_PurpleObj +Purple::Certificate::VerificationStatus T_IV + /* cipher.h */ +Purple::Cipher::BatchMode T_IV /* blist.h */ @@ -185,7 +183,7 @@ /* conversation.h */ Purple::ConvChatBuddyFlags T_IV Purple::ConvUpdateType T_IV -Purple::ConversationType T_IV +Purple::ConversationType T_IV Purple::MessageFlags T_IV Purple::TypingState T_IV Purple::UnseenState T_IV @@ -194,6 +192,9 @@ Purple::ConnectionFlags T_IV Purple::ConnectionState T_IV +/* whiteboard.h */ +Purple::Whiteboard T_PurpleObj + INPUT T_PurpleObj
--- a/libpurple/plugins/perl/perl-common.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/perl-common.c Thu Aug 07 16:00:16 2008 +0000 @@ -176,7 +176,6 @@ { int count = 0, i, ret_value = 1; SV *sv_args[argc]; - STRLEN na; dSP; PERL_SET_CONTEXT(my_perl); /* @@ -207,7 +206,7 @@ if (SvTRUE(ERRSV)) { purple_debug(PURPLE_DEBUG_ERROR, "perl", "Perl function %s exited abnormally: %s\n", - function, SvPV(ERRSV, na)); + function, SvPVutf8_nolen(ERRSV)); (void)POPs; } else if (count != 1) { /* @@ -235,7 +234,7 @@ * of hackish. I should fix it. Look how long this comment is. * Holy crap. */ - args[i] = g_strdup(SvPV(sv_args[i], na)); + args[i] = g_strdup(SvPVutf8_nolen(sv_args[i])); } } @@ -381,7 +380,6 @@ void * purple_perl_data_from_sv(PurpleValue *value, SV *sv) { - STRLEN na; switch (purple_value_get_type(value)) { case PURPLE_TYPE_BOOLEAN: return (void *)SvIV(sv); @@ -391,7 +389,7 @@ case PURPLE_TYPE_ULONG: return (void *)SvUV(sv); case PURPLE_TYPE_INT64: return (void *)SvIV(sv); case PURPLE_TYPE_UINT64: return (void *)SvUV(sv); - case PURPLE_TYPE_STRING: return g_strdup((void *)SvPV(sv, na)); + case PURPLE_TYPE_STRING: return g_strdup(SvPVutf8_nolen(sv)); case PURPLE_TYPE_POINTER: return (void *)SvIV(sv); case PURPLE_TYPE_BOXED: return (void *)SvIV(sv);
--- a/libpurple/plugins/perl/perl-handlers.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/perl-handlers.c Thu Aug 07 16:00:16 2008 +0000 @@ -23,7 +23,6 @@ gchar *hvname; PurplePlugin *plugin; PurplePerlScript *gps; - STRLEN na; dSP; plugin = action->plugin; @@ -54,7 +53,7 @@ if (SvTRUE(ERRSV)) { purple_debug_error("perl", "Perl plugin action function exited abnormally: %s\n", - SvPV(ERRSV, na)); + SvPVutf8_nolen(ERRSV)); } PUTBACK; @@ -68,7 +67,6 @@ GList *l = NULL; PurplePerlScript *gps; int i = 0, count = 0; - STRLEN na; dSP; gps = plugin->info->extra_info; @@ -94,7 +92,7 @@ if (SvTRUE(ERRSV)) { purple_debug_error("perl", "Perl plugin actions lookup exited abnormally: %s\n", - SvPV(ERRSV, na)); + SvPVutf8_nolen(ERRSV)); } if (count == 0) @@ -102,14 +100,10 @@ for (i = 0; i < count; i++) { SV *sv; - gchar *label; - PurplePluginAction *act = NULL; + PurplePluginAction *act; sv = POPs; - label = SvPV_nolen(sv); - /* XXX I think this leaks, but doing it without the strdup - * just showed garbage */ - act = purple_plugin_action_new(g_strdup(label), purple_perl_plugin_action_cb); + act = purple_plugin_action_new(SvPVutf8_nolen(sv), purple_perl_plugin_action_cb); l = g_list_prepend(l, act); } @@ -129,7 +123,6 @@ MAGIC *mg; GtkWidget *ret; PurplePerlScript *gps; - STRLEN na; dSP; gps = plugin->info->extra_info; @@ -147,7 +140,7 @@ if (SvTRUE(ERRSV)) { purple_debug_error("perl", "Perl gtk plugin frame init exited abnormally: %s\n", - SvPV(ERRSV, na)); + SvPVutf8_nolen(ERRSV)); } /* We have a Gtk2::Frame on top of the stack */ @@ -173,7 +166,6 @@ int count; PurplePerlScript *gps; PurplePluginPrefFrame *ret_frame; - STRLEN na; dSP; gps = (PurplePerlScript *)plugin->info->extra_info; @@ -192,7 +184,7 @@ if (SvTRUE(ERRSV)) { purple_debug_error("perl", "Perl plugin prefs frame init exited abnormally: %s\n", - SvPV(ERRSV, na)); + SvPVutf8_nolen(ERRSV)); } if (count != 1) @@ -249,7 +241,6 @@ { PurplePerlTimeoutHandler *handler = data; gboolean ret = FALSE; - STRLEN na; dSP; ENTER; @@ -263,7 +254,7 @@ if (SvTRUE(ERRSV)) { purple_debug_error("perl", "Perl timeout function exited abnormally: %s\n", - SvPV(ERRSV, na)); + SvPVutf8_nolen(ERRSV)); } ret = POPi; @@ -291,7 +282,6 @@ PurpleValue *ret_value, **values; SV **sv_args; DATATYPE **copy_args; - STRLEN na; dSP; ENTER; @@ -334,7 +324,7 @@ if (SvTRUE(ERRSV)) { purple_debug_error("perl", "Perl function exited abnormally: %s\n", - SvPV(ERRSV, na)); + SvPVutf8_nolen(ERRSV)); } /* See if any parameters changed. */ @@ -373,14 +363,13 @@ if (strcmp(*((char **)copy_args[i]), SvPVX(sv_args[i]))) { g_free(*((char **)copy_args[i])); *((char **)copy_args[i]) = - g_strdup(SvPV(sv_args[i], na)); + g_strdup(SvPVutf8_nolen(sv_args[i])); } + /* Clean up sv_args[i] - we're done with it */ + sv_2mortal(sv_args[i]); break; case PURPLE_TYPE_POINTER: - *((void **)copy_args[i]) = (void *)SvIV(sv_args[i]); - break; - case PURPLE_TYPE_BOXED: *((void **)copy_args[i]) = (void *)SvIV(sv_args[i]); break; @@ -392,6 +381,7 @@ break; } + #if 0 *((void **)copy_args[i]) = purple_perl_data_from_sv(values[i], sv_args[i]); @@ -564,7 +554,6 @@ gchar **args, gchar **error, void *data) { int i = 0, count, ret_value = PURPLE_CMD_RET_OK; - STRLEN na; SV *cmdSV, *tmpSV, *convSV; PurplePerlCmdHandler *handler = data; @@ -604,7 +593,7 @@ if (SvTRUE(ERRSV)) { purple_debug_error("perl", "Perl plugin command function exited abnormally: %s\n", - SvPV(ERRSV, na)); + SvPVutf8_nolen(ERRSV)); } SPAGAIN; @@ -718,7 +707,6 @@ gpointer data) { PurplePerlPrefsHandler *handler = data; - STRLEN na; dSP; ENTER; @@ -767,7 +755,7 @@ if (SvTRUE(ERRSV)) { purple_debug_error("perl", "Perl prefs callback function exited abnormally: %s\n", - SvPV(ERRSV, na)); + SvPVutf8_nolen(ERRSV)); } PUTBACK;
--- a/libpurple/plugins/perl/perl.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/plugins/perl/perl.c Thu Aug 07 16:00:16 2008 +0000 @@ -288,24 +288,24 @@ ret = perl_parse(prober, xs_init, argc, argv, NULL); if (ret != 0) { - STRLEN len; const char * errmsg = "Unknown error"; if (SvTRUE(ERRSV)) - errmsg = SvPV(ERRSV, len); + errmsg = SvPVutf8_nolen(ERRSV); purple_debug_error("perl", "Unable to parse plugin %s (%d:%s)\n", plugin->path, ret, errmsg); + status = FALSE; goto cleanup; } ret = perl_run(prober); if (ret != 0) { - STRLEN len; const char * errmsg = "Unknown error"; if (SvTRUE(ERRSV)) - errmsg = SvPV(ERRSV, len); + errmsg = SvPVutf8_nolen(ERRSV); purple_debug_error("perl", "Unable to run perl interpreter on plugin %s (%d:%s)\n", plugin->path, ret, errmsg); + status = FALSE; goto cleanup; } @@ -335,7 +335,6 @@ PurplePluginInfo *info; PurplePerlScript *gps; char *basename; - STRLEN len; info = g_new0(PurplePluginInfo, 1); gps = g_new0(PurplePerlScript, 1); @@ -358,9 +357,9 @@ /* We know this one exists. */ key = hv_fetch(plugin_info, "name", strlen("name"), 0); - info->name = g_strdup(SvPV(*key, len)); + info->name = g_strdup(SvPVutf8_nolen(*key)); /* Set id here in case we don't find one later. */ - info->id = g_strdup(SvPV(*key, len)); + info->id = g_strdup(info->name); #ifdef PURPLE_GTKPERL if ((key = hv_fetch(plugin_info, "GTK_UI", @@ -370,40 +369,40 @@ if ((key = hv_fetch(plugin_info, "url", strlen("url"), 0))) - info->homepage = g_strdup(SvPV(*key, len)); + info->homepage = g_strdup(SvPVutf8_nolen(*key)); if ((key = hv_fetch(plugin_info, "author", strlen("author"), 0))) - info->author = g_strdup(SvPV(*key, len)); + info->author = g_strdup(SvPVutf8_nolen(*key)); if ((key = hv_fetch(plugin_info, "summary", strlen("summary"), 0))) - info->summary = g_strdup(SvPV(*key, len)); + info->summary = g_strdup(SvPVutf8_nolen(*key)); if ((key = hv_fetch(plugin_info, "description", strlen("description"), 0))) - info->description = g_strdup(SvPV(*key, len)); + info->description = g_strdup(SvPVutf8_nolen(*key)); if ((key = hv_fetch(plugin_info, "version", strlen("version"), 0))) - info->version = g_strdup(SvPV(*key, len)); + info->version = g_strdup(SvPVutf8_nolen(*key)); /* We know this one exists. */ key = hv_fetch(plugin_info, "load", strlen("load"), 0); gps->load_sub = g_strdup_printf("%s::%s", gps->package, - SvPV(*key, len)); + SvPVutf8_nolen(*key)); if ((key = hv_fetch(plugin_info, "unload", strlen("unload"), 0))) gps->unload_sub = g_strdup_printf("%s::%s", gps->package, - SvPV(*key, len)); + SvPVutf8_nolen(*key)); if ((key = hv_fetch(plugin_info, "id", strlen("id"), 0))) { g_free(info->id); info->id = g_strdup_printf("perl-%s", - SvPV(*key, len)); + SvPVutf8_nolen(*key)); } /********************************************************/ @@ -424,7 +423,7 @@ * will create a frame for us */ gps->prefs_sub = g_strdup_printf("%s::%s", gps->package, - SvPV(*key, len)); + SvPVutf8_nolen(*key)); info->prefs_info = &ui_info; } @@ -435,7 +434,7 @@ * will create a frame for us */ gps->gtk_prefs_sub = g_strdup_printf("%s::%s", gps->package, - SvPV(*key, len)); + SvPVutf8_nolen(*key)); info->ui_info = >k_ui_info; } #endif @@ -444,7 +443,7 @@ strlen("plugin_action_sub"), 0))) { gps->plugin_action_sub = g_strdup_printf("%s::%s", gps->package, - SvPV(*key, len)); + SvPVutf8_nolen(*key)); info->actions = purple_perl_plugin_actions; } @@ -499,11 +498,9 @@ SPAGAIN; if (SvTRUE(ERRSV)) { - STRLEN len; - purple_debug(PURPLE_DEBUG_ERROR, "perl", "Perl function %s exited abnormally: %s\n", - gps->load_sub, SvPV(ERRSV, len)); + gps->load_sub, SvPVutf8_nolen(ERRSV)); } PUTBACK; @@ -525,7 +522,7 @@ SAVETMPS; PUSHMARK(SP); - XPUSHs(sv_2mortal(newSVpv(package, strlen(package)))); + XPUSHs(sv_2mortal(newSVpv(package, 0))); PUTBACK; perl_call_pv("Purple::PerlLoader::destroy_package", @@ -563,11 +560,9 @@ SPAGAIN; if (SvTRUE(ERRSV)) { - STRLEN len; - purple_debug(PURPLE_DEBUG_ERROR, "perl", "Perl function %s exited abnormally: %s\n", - gps->load_sub, SvPV(ERRSV, len)); + gps->unload_sub, SvPVutf8_nolen(ERRSV)); } PUTBACK; @@ -592,21 +587,23 @@ PurplePerlScript *gps; g_free(plugin->info->name); - g_free(plugin->info->version); + g_free(plugin->info->id); + g_free(plugin->info->homepage); + g_free(plugin->info->author); g_free(plugin->info->summary); g_free(plugin->info->description); - g_free(plugin->info->author); - g_free(plugin->info->homepage); + g_free(plugin->info->version); gps = (PurplePerlScript *)plugin->info->extra_info; if (gps != NULL) { + g_free(gps->package); g_free(gps->load_sub); g_free(gps->unload_sub); - g_free(gps->package); g_free(gps->prefs_sub); #ifdef PURPLE_GTKPERL g_free(gps->gtk_prefs_sub); #endif + g_free(gps->plugin_action_sub); g_free(gps); plugin->info->extra_info = NULL; }
--- a/libpurple/protocols/irc/irc.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/irc/irc.c Thu Aug 07 16:00:16 2008 +0000 @@ -989,6 +989,9 @@ option = purple_account_option_string_new(_("Encodings"), "encoding", IRC_DEFAULT_CHARSET); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + option = purple_account_option_bool_new(_("Auto-detect incoming UTF-8"), "autodetect_utf8", IRC_DEFAULT_AUTODETECT); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + option = purple_account_option_bool_new(_("Use SO/SI to send hankaku kana"), "irc_use_sosi", FALSE); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
--- a/libpurple/protocols/irc/irc.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/irc/irc.h Thu Aug 07 16:00:16 2008 +0000 @@ -35,6 +35,7 @@ #define IRC_DEFAULT_SSL_PORT 994 #define IRC_DEFAULT_CHARSET "UTF-8" +#define IRC_DEFAULT_AUTODETECT FALSE #define IRC_DEFAULT_ALIAS "purple" #define IRC_DEFAULT_QUIT "Leaving."
--- a/libpurple/protocols/irc/parse.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/irc/parse.c Thu Aug 07 16:00:16 2008 +0000 @@ -338,6 +338,7 @@ char *utf8 = NULL; const gchar *charset, *enclist; gchar **encodings; + gboolean autodetect; int i; GError *err; gboolean retry; @@ -354,6 +355,12 @@ return purple_utf8_salvage(string); } + autodetect = purple_account_get_bool(irc->account, "autodetect_utf8", IRC_DEFAULT_AUTODETECT); + + if (autodetect && g_utf8_validate(string, -1, NULL)) { + return g_strdup(string); + } + for (i = 0; encodings[i] != NULL; i++) { charset = encodings[i]; while (*charset == ' ')
--- a/libpurple/protocols/jabber/jabber.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/jabber/jabber.h Thu Aug 07 16:00:16 2008 +0000 @@ -108,6 +108,37 @@ GHashTable *buddies; gboolean roster_parsed; + /* + * This boolean was added to eliminate a heinous bug where we would + * get into a loop with the server and move a buddy back and forth + * from one group to another. + * + * The sequence goes something like this: + * 1. Our resource and another resource both approve an authorization + * request at the exact same time. We put the buddy in group A and + * the other resource put the buddy in group B. + * 2. The server receives the roster add for group B and sends us a + * roster push. + * 3. We receive this roster push and modify our local blist. This + * triggers us to send a roster add for group B. + * 4. The server recieves our earlier roster add for group A and sends + * us a roster push. + * 5. We receive this roster push and modify our local blist. This + * triggers us to send a roster add for group A. + * 6. The server receives our earlier roster add for group B and sends + * us a roster push. + * (repeat steps 3 through 6 ad infinitum) + * + * This boolean is used to short-circuit the sending of a roster add + * when we receive a roster push. + * + * See these bug reports: + * http://trac.adiumx.com/ticket/8834 + * http://developer.pidgin.im/ticket/5484 + * http://developer.pidgin.im/ticket/6188 + */ + gboolean currently_parsing_roster_push; + GHashTable *chats; GList *chat_servers; PurpleRoomlist *roomlist;
--- a/libpurple/protocols/jabber/roster.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/jabber/roster.c Thu Aug 07 16:00:16 2008 +0000 @@ -31,7 +31,6 @@ #include <string.h> - void jabber_roster_request(JabberStream *js) { JabberIq *iq; @@ -169,6 +168,8 @@ if(!query) return; + js->currently_parsing_roster_push = TRUE; + for(item = xmlnode_get_child(query, "item"); item; item = xmlnode_get_next_twin(item)) { const char *jid, *name, *subscription, *ask; @@ -251,6 +252,8 @@ } } + js->currently_parsing_roster_push = FALSE; + /* if we're just now parsing the roster for the first time, * then now would be the time to send our initial presence */ if(!js->roster_parsed) { @@ -269,6 +272,9 @@ JabberIq *iq; xmlnode *query, *item, *group; + if (js->currently_parsing_roster_push) + return; + if(!(b = purple_find_buddy(js->gc->account, name))) return;
--- a/libpurple/protocols/msn/Makefile.am Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/msn/Makefile.am Thu Aug 07 16:00:16 2008 +0000 @@ -48,8 +48,6 @@ slplink.h \ slpmsg.c \ slpmsg.h \ - slpsession.c \ - slpsession.h \ soap.c \ soap.h \ state.c \
--- a/libpurple/protocols/msn/Makefile.mingw Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/msn/Makefile.mingw Thu Aug 07 16:00:16 2008 +0000 @@ -59,7 +59,6 @@ slpcall.c \ slplink.c \ slpmsg.c \ - slpsession.c \ soap.c\ state.c \ switchboard.c \
--- a/libpurple/protocols/msn/msn.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/msn/msn.c Thu Aug 07 16:00:16 2008 +0000 @@ -618,10 +618,13 @@ if (ret) { MsnSession *session = gc->proto_data; - MsnUser *user = msn_userlist_find_user(session->userlist, who); - if (user) - ret = (user->clientid & MSN_CLIENT_CAP_WEBMSGR) == 0; - /* Include these too: MSN_CLIENT_CAP_MSNMOBILE|MSN_CLIENT_CAP_MSNDIRECT ? */ + if (session) { + MsnUser *user = msn_userlist_find_user(session->userlist, who); + if (user) + /* Include these too: MSN_CLIENT_CAP_MSNMOBILE|MSN_CLIENT_CAP_MSNDIRECT ? */ + ret = (user->clientid & MSN_CLIENT_CAP_WEBMSGR) == 0; + } else + ret = FALSE; } return ret;
--- a/libpurple/protocols/msn/nexus.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/msn/nexus.c Thu Aug 07 16:00:16 2008 +0000 @@ -390,7 +390,7 @@ msn_session_set_login_step(session, MSN_LOGIN_STEP_GET_COOKIE); username = purple_account_get_username(session->account); - password = g_strndup(purple_connection_get_password(session->account->gc), 16); + password = g_markup_escape_text(purple_connection_get_password(session->account->gc), 16); purple_debug_info("msn", "Logging on %s, with policy '%s', nonce '%s'\n", username, nexus->policy, nexus->nonce);
--- a/libpurple/protocols/msn/servconn.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/msn/servconn.c Thu Aug 07 16:00:16 2008 +0000 @@ -391,7 +391,8 @@ session = servconn->session; len = read(servconn->fd, buf, sizeof(buf) - 1); - servconn->session->account->gc->last_received = time(NULL); + if (servconn->type == MSN_SERVCONN_NS) + servconn->session->account->gc->last_received = time(NULL); if (len < 0 && errno == EAGAIN) { return;
--- a/libpurple/protocols/msn/slp.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/msn/slp.c Thu Aug 07 16:00:16 2008 +0000 @@ -25,7 +25,6 @@ #include "slp.h" #include "slpcall.h" #include "slpmsg.h" -#include "slpsession.h" #include "object.h" #include "user.h" @@ -256,7 +255,6 @@ /* Emoticon or UserDisplay */ char *content; gsize len; - MsnSlpSession *slpsession; MsnSlpLink *slplink; MsnSlpMessage *slpmsg; MsnObject *obj; @@ -306,14 +304,10 @@ g_return_if_reached(); } - slpsession = msn_slplink_find_slp_session(slplink, - slpcall->session_id); - /* DATA PREP */ slpmsg = msn_slpmsg_new(slplink); slpmsg->slpcall = slpcall; - slpmsg->slpsession = slpsession; - slpmsg->session_id = slpsession->id; + slpmsg->session_id = slpcall->session_id; msn_slpmsg_set_body(slpmsg, NULL, 4); #ifdef MSN_DEBUG_SLP slpmsg->info = "SLP DATA PREP"; @@ -323,7 +317,6 @@ /* DATA */ slpmsg = msn_slpmsg_new(slplink); slpmsg->slpcall = slpcall; - slpmsg->slpsession = slpsession; slpmsg->flags = 0x20; #ifdef MSN_DEBUG_SLP slpmsg->info = "SLP DATA";
--- a/libpurple/protocols/msn/slpcall.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/msn/slpcall.c Thu Aug 07 16:00:16 2008 +0000 @@ -24,7 +24,6 @@ #include "msn.h" #include "msnutils.h" #include "slpcall.h" -#include "slpsession.h" #include "slp.h" @@ -98,8 +97,10 @@ if (slpcall->end_cb != NULL) slpcall->end_cb(slpcall, session); - if (slpcall->xfer != NULL) + if (slpcall->xfer != NULL) { + slpcall->xfer->data = NULL; purple_xfer_unref(slpcall->xfer); + } g_free(slpcall); } @@ -115,12 +116,8 @@ void msn_slp_call_session_init(MsnSlpCall *slpcall) { - MsnSlpSession *slpsession; - - slpsession = msn_slp_session_new(slpcall); - if (slpcall->session_init_cb) - slpcall->session_init_cb(slpsession); + slpcall->session_init_cb(slpcall); slpcall->started = TRUE; }
--- a/libpurple/protocols/msn/slpcall.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/msn/slpcall.h Thu Aug 07 16:00:16 2008 +0000 @@ -25,11 +25,11 @@ #define _MSN_SLPCALL_H_ #include "internal.h" +#include "ft.h" typedef struct _MsnSlpCall MsnSlpCall; #include "slplink.h" -#include "slpsession.h" /* The official client seems to timeout slp calls after 5 minutes */ #define MSN_SLPCALL_TIMEOUT 300000 @@ -66,12 +66,12 @@ void (*progress_cb)(MsnSlpCall *slpcall, gsize total_length, gsize len, gsize offset); - void (*session_init_cb)(MsnSlpSession *slpsession); + void (*session_init_cb)(MsnSlpCall *slpcall); /* Can be checksum, or smile */ char *data_info; - void *xfer; + PurpleXfer *xfer; MsnSlpCb cb; void (*end_cb)(MsnSlpCall *slpcall, MsnSession *session);
--- a/libpurple/protocols/msn/slplink.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/msn/slplink.c Thu Aug 07 16:00:16 2008 +0000 @@ -154,23 +154,6 @@ return slplink; } -MsnSlpSession * -msn_slplink_find_slp_session(MsnSlpLink *slplink, long session_id) -{ - GList *l; - MsnSlpSession *slpsession; - - for (l = slplink->slp_sessions; l != NULL; l = l->next) - { - slpsession = l->data; - - if (slpsession->id == session_id) - return slpsession; - } - - return NULL; -} - void msn_slplink_add_slpcall(MsnSlpLink *slplink, MsnSlpCall *slpcall) { @@ -394,12 +377,12 @@ } else if (slpmsg->flags == 0x20 || slpmsg->flags == 0x1000030) { - MsnSlpSession *slpsession; - slpsession = slpmsg->slpsession; + MsnSlpCall *slpcall; + slpcall = slpmsg->slpcall; - g_return_if_fail(slpsession != NULL); - msg->msnslp_header.session_id = slpsession->id; - msg->msnslp_footer.value = slpsession->app_id; + g_return_if_fail(slpcall != NULL); + msg->msnslp_header.session_id = slpcall->session_id; + msg->msnslp_footer.value = slpcall->app_id; msg->msnslp_header.ack_id = rand() % 0xFFFFFF00; } else if (slpmsg->flags == 0x100) @@ -476,18 +459,15 @@ } static void -send_file_cb(MsnSlpSession *slpsession) +send_file_cb(MsnSlpCall *slpcall) { - MsnSlpCall *slpcall; MsnSlpMessage *slpmsg; struct stat st; PurpleXfer *xfer; - slpcall = slpsession->slpcall; slpmsg = msn_slpmsg_new(slpcall->slplink); slpmsg->slpcall = slpcall; slpmsg->flags = 0x1000030; - slpmsg->slpsession = slpsession; #ifdef MSN_DEBUG_SLP slpmsg->info = "SLP FILE"; #endif @@ -556,10 +536,17 @@ if (xfer != NULL) { - purple_xfer_start(slpmsg->slpcall->xfer, - 0, NULL, 0); - slpmsg->fp = ((PurpleXfer *)slpmsg->slpcall->xfer)->dest_fp; - xfer->dest_fp = NULL; /* Disable double fclose() */ + purple_xfer_ref(xfer); + purple_xfer_start(xfer, 0, NULL, 0); + + if (xfer->data == NULL) { + purple_xfer_unref(xfer); + return; + } else { + purple_xfer_unref(xfer); + slpmsg->fp = xfer->dest_fp; + xfer->dest_fp = NULL; /* Disable double fclose() */ + } } } }
--- a/libpurple/protocols/msn/slplink.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/msn/slplink.h Thu Aug 07 16:00:16 2008 +0000 @@ -53,7 +53,6 @@ MsnDirectConn *directconn; GList *slp_calls; - GList *slp_sessions; GList *slp_msgs; GQueue *slp_msg_queue; @@ -74,8 +73,6 @@ */ MsnSlpLink *msn_session_get_slplink(MsnSession *session, const char *username); -MsnSlpSession *msn_slplink_find_slp_session(MsnSlpLink *slplink, - long session_id); void msn_slplink_add_slpcall(MsnSlpLink *slplink, MsnSlpCall *slpcall); void msn_slplink_remove_slpcall(MsnSlpLink *slplink, MsnSlpCall *slpcall); MsnSlpCall *msn_slplink_find_slp_call(MsnSlpLink *slplink,
--- a/libpurple/protocols/msn/slpmsg.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/msn/slpmsg.c Thu Aug 07 16:00:16 2008 +0000 @@ -132,22 +132,6 @@ slpmsg->size = purple_imgstore_get_size(img); } -void -msn_slpmsg_open_file(MsnSlpMessage *slpmsg, const char *file_name) -{ - struct stat st; - - /* We can only have one data source at a time. */ - g_return_if_fail(slpmsg->buffer == NULL); - g_return_if_fail(slpmsg->img == NULL); - g_return_if_fail(slpmsg->fp == NULL); - - slpmsg->fp = g_fopen(file_name, "rb"); - - if (g_stat(file_name, &st) == 0) - slpmsg->size = st.st_size; -} - #ifdef MSN_DEBUG_SLP void msn_slpmsg_show(MsnMessage *msg)
--- a/libpurple/protocols/msn/slpmsg.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/msn/slpmsg.h Thu Aug 07 16:00:16 2008 +0000 @@ -28,7 +28,6 @@ #include "imgstore.h" -#include "slpsession.h" #include "slpcall.h" #include "slplink.h" #include "session.h" @@ -42,7 +41,6 @@ */ struct _MsnSlpMessage { - MsnSlpSession *slpsession; MsnSlpCall *slpcall; /**< The slpcall to which this slp message belongs (if applicable). */ MsnSlpLink *slplink; /**< The slplink through which this slp message is being sent. */ MsnSession *session;
--- a/libpurple/protocols/msn/slpsession.c Thu Jul 31 06:23:55 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/** - * @file slpsession.h SLP Session functions - * - * purple - * - * Purple is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - */ -#include "slpsession.h" - -/************************************************************************** - * SLP Session - **************************************************************************/ - -MsnSlpSession * -msn_slp_session_new(MsnSlpCall *slpcall) -{ - MsnSlpSession *slpsession; - - g_return_val_if_fail(slpcall != NULL, NULL); - - slpsession = g_new0(MsnSlpSession, 1); - - slpsession->slpcall = slpcall; - slpsession->id = slpcall->session_id; - slpsession->app_id = slpcall->app_id; - - slpcall->slplink->slp_sessions = - g_list_append(slpcall->slplink->slp_sessions, slpsession); - - return slpsession; -} - -void -msn_slp_session_destroy(MsnSlpSession *slpsession) -{ - g_return_if_fail(slpsession != NULL); - - slpsession->slpcall->slplink->slp_sessions = - g_list_remove(slpsession->slpcall->slplink->slp_sessions, slpsession); - - g_free(slpsession); -} - -#if 0 -static void -msn_slp_session_send_slpmsg(MsnSlpSession *slpsession, MsnSlpMessage *slpmsg) -{ - slpmsg->slpsession = slpsession; - -#if 0 - slpmsg->session_id = slpsession->id; - slpmsg->app_id = slpsession->app_id; -#endif - - msn_slplink_send_slpmsg(slpsession->slpcall->slplink, slpmsg); -} -#endif
--- a/libpurple/protocols/msn/slpsession.h Thu Jul 31 06:23:55 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/** - * @file slpsession.h SLP Session functions - * - * purple - * - * Purple is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - */ -#ifndef _MSN_SLPSESSION_H_ -#define _MSN_SLPSESSION_H_ - -typedef struct _MsnSlpSession MsnSlpSession; - -#include "slpcall.h" -#include "slpsession.h" -#include "slpmsg.h" - -struct _MsnSlpSession -{ - /* MsnSlpLink *slplink; */ - MsnSlpCall *slpcall; - - long id; - - long app_id; -}; - -MsnSlpSession *msn_slp_session_new(MsnSlpCall *slpcall); -void msn_slp_session_destroy(MsnSlpSession *slpsession); -void msn_slpsession_send_slpmsg(MsnSlpSession *slpsession, - MsnSlpMessage *slpmsg); -#endif /* _MSN_SLPSESSION_H_ */
--- a/libpurple/protocols/msn/soap.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/msn/soap.c Thu Aug 07 16:00:16 2008 +0000 @@ -38,7 +38,7 @@ #endif #define SOAP_TIMEOUT (5 * 60) - +#define MSN_UNSAFE_DEBUG 1 typedef struct _MsnSoapRequest { char *path; MsnSoapMessage *message;
--- a/libpurple/protocols/oscar/family_locate.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/oscar/family_locate.c Thu Aug 07 16:00:16 2008 +0000 @@ -63,7 +63,8 @@ {0x09, 0x46, 0x00, 0x01, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}, - {OSCAR_CAPABILITY_XHTML_IM, + /* OSCAR_CAPABILITY_XHTML_IM */ + {OSCAR_CAPABILITY_GENERICUNKNOWN, {0x09, 0x46, 0x00, 0x02, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}, @@ -82,7 +83,8 @@ 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}, /* "Microphone" support in Windows AIM 5.5.3501 and newer */ - {OSCAR_CAPABILITY_MICROPHONE, + /* OSCAR_CAPABILITY_MICROPHONE */ + {OSCAR_CAPABILITY_GENERICUNKNOWN, {0x09, 0x46, 0x01, 0x03, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
--- a/libpurple/protocols/oscar/oscar.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/oscar/oscar.h Thu Aug 07 16:00:16 2008 +0000 @@ -357,15 +357,13 @@ OSCAR_CAPABILITY_HIPTOP = 0x00100000, OSCAR_CAPABILITY_SECUREIM = 0x00200000, OSCAR_CAPABILITY_SMS = 0x00400000, - OSCAR_CAPABILITY_MICROPHONE = 0x00800000, - OSCAR_CAPABILITY_VIDEO = 0x01000000, - OSCAR_CAPABILITY_ICHATAV = 0x02000000, - OSCAR_CAPABILITY_LIVEVIDEO = 0x04000000, - OSCAR_CAPABILITY_CAMERA = 0x08000000, - OSCAR_CAPABILITY_ICHAT_SCREENSHARE = 0x10000000, - OSCAR_CAPABILITY_XHTML_IM = 0x20000000, - OSCAR_CAPABILITY_GENERICUNKNOWN = 0x40000000, - OSCAR_CAPABILITY_LAST = 0x80000000 + OSCAR_CAPABILITY_VIDEO = 0x00800000, + OSCAR_CAPABILITY_ICHATAV = 0x01000000, + OSCAR_CAPABILITY_LIVEVIDEO = 0x02000000, + OSCAR_CAPABILITY_CAMERA = 0x04000000, + OSCAR_CAPABILITY_ICHAT_SCREENSHARE = 0x08000000, + OSCAR_CAPABILITY_GENERICUNKNOWN = 0x10000000, + OSCAR_CAPABILITY_LAST = 0x20000000 } OscarCapability; /*
--- a/libpurple/protocols/qq/ChangeLog Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/ChangeLog Thu Aug 07 16:00:16 2008 +0000 @@ -1,3 +1,60 @@ +2008.08.03 - csyfek <csyfek(at)gmail.com> + * Commit lost files to Pidgin + +2008.08.02 - csyfek <csyfek(at)gmail.com> + * Commit to Pidgin + * Tickets: + Fixes #1861 + Fixes #1902 + References #5112 + +2008.08.02 - ccpaging <ecc_hy(at)hotmail.com> + * Store all keys and md5 values of qq_data in char[QQ_KEY_LENGTH] + * Use random value in inikey + * TEA header padding in crypt.c + * Rewrite login part of qq_process + +2008.07.31 - ccpaging <ecc_hy(at)hotmail.com> + * Fixed: send reply when get duplicate server command. The server may not get our reply before. + * Tag custom picture as text "(Broken)" + +2008.07.30 - ccpaging <ecc_hy(at)hotmail.com>, csyfek <csyfek(at)gmail.com> + * Change some debug message + * Modify buddy status flag according to eva for QQ2006 + * Modify buddy status parse and correspond to eva2 + * Add getIP/putIP functions to packet_parse.c, and replace some gen_ip_str + * Replace guint32 *ip with struct in_addr, and reduce g_new/g_free operation + * Source file changed: + Merge buddy_status into buddy_list + Change login_logout to qq_base + Merge keep_alive into qq_base + New qq_process extract from qq_network + * Fixed: Byte alignment bug in crypt.c, tested in ARM PDA + * Fixed: group chat message may get in before getting group info, and so group info is empty + * Add qq_send_cmd_group_get_group_info when joined a group chat in group_im.c + * Add some new group command identify according eva but further program + * Add some new QQ client version identify + * Fixed: Identify buddy's client version by IM packet, and not by status + * Add some new info in buddy's tooltip text + * Add video falg to buddy's emblem. But those flag in buddy status may not prasing correctly + * Use new timeout function to handle send keep_alive, resend packet, update buddy status + * Add new advanced options: + The end user may change interval of keep_alive, resend packet, update buddy status to feed their need. + For example, saving network flow when use mobile phone. + Keep alive packet must be sent in 60-120 seconds whatever client rcved data of not. + The intervals of keep alive and update status should be multiple of resend's interval, + Since we use counter not time() in a single timeout function for efficiency. + * Rewrite qq_trans.c, and use one g_list to manage: + Store server packet before login, and prase all of them when get login + Store client send packet for resend scanning, confirm server reply, filter duplicate server reply + Store server packet for filter out duplicate + * Add QQ_MSG_SYS_NOTICE = 0x06 in sys_msg.c + * Rewrite qq_proc_cmd_reply and qq_proc_cmd_server: + In QQ protocol, one packet reply may need a new packet send later. + We may call it packet trigger. The triggers always is hided in every qq_process_reply. + Now we try to extract those triggers and put into a single function, + and then every trigger should be obviously and easy to manage. + 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com> * Fixed: Always lost connection. Now send keep alive packet in every 30 seconds * Minor fix for debug information
--- a/libpurple/protocols/qq/Makefile.am Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/Makefile.am Thu Aug 07 16:00:16 2008 +0000 @@ -10,8 +10,6 @@ buddy_list.h \ buddy_opt.c \ buddy_opt.h \ - buddy_status.c \ - buddy_status.h \ char_conv.c \ char_conv.h \ crypt.c \ @@ -44,10 +42,10 @@ header_info.h \ im.c \ im.h \ - keep_alive.c \ - keep_alive.h \ - login_logout.c \ - login_logout.h \ + qq_process.c \ + qq_process.h \ + qq_base.c \ + qq_base.h \ packet_parse.c \ packet_parse.h \ qq.c \
--- a/libpurple/protocols/qq/Makefile.mingw Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/Makefile.mingw Thu Aug 07 16:00:16 2008 +0000 @@ -42,7 +42,6 @@ buddy_info.c \ buddy_list.c \ buddy_opt.c \ - buddy_status.c \ char_conv.c \ crypt.c \ file_trans.c \ @@ -59,13 +58,13 @@ group_search.c \ header_info.c \ im.c \ - keep_alive.c \ - login_logout.c \ packet_parse.c \ qq.c \ + qq_base.c \ qq_network.c \ + qq_process.c \ + qq_trans.c \ send_file.c \ - qq_trans.c \ sys_msg.c \ utils.c
--- a/libpurple/protocols/qq/buddy_info.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/buddy_info.c Thu Aug 07 16:00:16 2008 +0000 @@ -29,11 +29,12 @@ #include "utils.h" #include "packet_parse.h" +#include "buddy_list.h" #include "buddy_info.h" #include "char_conv.h" #include "crypt.h" #include "header_info.h" -#include "keep_alive.h" +#include "qq_base.h" #include "qq_network.h" #define QQ_PRIMARY_INFORMATION _("Primary Information") @@ -85,6 +86,7 @@ }; #define QQ_CONTACT_FIELDS 37 +#define QQ_FACES 100 /* There is no user id stored in the reply packet for information query * we have to manually store the query, so that we know the query source */ @@ -954,23 +956,23 @@ GList *node = qd->buddies; gint bytes = 0; - if (qd->buddies) { - /* server only sends back levels for online buddies, no point - * in asking for anyone else */ - size = 4 * g_list_length(qd->buddies) + 1; - buf = g_new0(guint8, size); - bytes += 1; - - while (NULL != node) { - q_bud = (qq_buddy *) node->data; - if (NULL != q_bud) { - bytes += qq_put32(buf + bytes, q_bud->uid); - } - node = node->next; + if ( qd->buddies == NULL) { + return; + } + /* server only sends back levels for online buddies, no point + * in asking for anyone else */ + size = 4 * g_list_length(qd->buddies) + 1; + buf = g_newa(guint8, size); + bytes += qq_put8(buf + bytes, 0x00); + + while (NULL != node) { + q_bud = (qq_buddy *) node->data; + if (NULL != q_bud) { + bytes += qq_put32(buf + bytes, q_bud->uid); } - qq_send_cmd(qd, QQ_CMD_GET_LEVEL, buf, size); - g_free(buf); + node = node->next; } + qq_send_cmd(qd, QQ_CMD_GET_LEVEL, buf, size); } void qq_process_get_level_reply(guint8 *buf, gint buf_len, PurpleConnection *gc) @@ -1009,8 +1011,8 @@ bytes += qq_get32(&onlineTime, decr_buf + bytes); bytes += qq_get16(&level, decr_buf + bytes); bytes += qq_get16(&timeRemainder, decr_buf + bytes); - purple_debug(PURPLE_DEBUG_INFO, "QQ", - "Level uid: %d, onlineTime: %d, level: %d, timeRemainder: %d\n", + purple_debug(PURPLE_DEBUG_INFO, "QQ_LEVEL", + "%d, tmOnline: %d, level: %d, tmRemainder: %d\n", uid, onlineTime, level, timeRemainder); purple_name = uid_to_purple_name(uid); b = purple_find_buddy(account, purple_name); @@ -1033,3 +1035,4 @@ } g_free(decr_buf); } +
--- a/libpurple/protocols/qq/buddy_info.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/buddy_info.h Thu Aug 07 16:00:16 2008 +0000 @@ -31,11 +31,34 @@ #include "buddy_opt.h" #include "qq.h" -#define QQ_COMM_FLAG_QQ_MEMBER 0x02 -#define QQ_COMM_FLAG_TCP_MODE 0x10 -#define QQ_COMM_FLAG_MOBILE 0x20 -#define QQ_COMM_FLAG_BIND_MOBILE 0x40 -#define QQ_COMM_FLAG_VIDEO 0x80 +/* use is openq2005 + * ext_flag: (0-7) + * bit1 => qq space + * comm_flag: (0-7) + * bit1 => member + * bit4 => TCP mode + * bit5 => open mobile QQ + * bit6 => bind to mobile + * bit7 => whether having a video +#define QQ_COMM_FLAG_QQ_MEMBER 0x02 +#define QQ_COMM_FLAG_TCP_MODE 0x10 +#define QQ_COMM_FLAG_MOBILE 0x20 +#define QQ_COMM_FLAG_BIND_MOBILE 0x40 +#define QQ_COMM_FLAG_VIDEO 0x80 + */ +/* status in eva for qq2006 +#define QQ_FRIEND_FLAG_QQ_MEMBER 0x01 +#define QQ_FRIEND_FLAG_MOBILE 0x10 +#define QQ_FRIEND_FLAG_BIND_MOBILE 0x20 +*/ +#define QQ_COMM_FLAG_QQ_MEMBER 0x02 +#define QQ_COMM_FLAG_QQ_VIP 0x04 +#define QQ_COMM_FLAG_TCP_MODE 0x10 +#define QQ_COMM_FLAG_MOBILE 0x20 +#define QQ_COMM_FLAG_BIND_MOBILE 0x40 +#define QQ_COMM_FLAG_VIDEO 0x80 + +#define QQ_EXT_FLAG_SPACE 0x02 #define QQ_BUDDY_GENDER_GG 0x00 #define QQ_BUDDY_GENDER_MM 0x01 @@ -54,5 +77,4 @@ void qq_send_packet_get_level(PurpleConnection *gc, guint32 uid); void qq_send_packet_get_buddies_levels(PurpleConnection *gc); void qq_process_get_level_reply(guint8 *buf, gint buf_len, PurpleConnection *gc); - #endif
--- a/libpurple/protocols/qq/buddy_list.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/buddy_list.c Thu Aug 07 16:00:16 2008 +0000 @@ -32,12 +32,11 @@ #include "packet_parse.h" #include "buddy_info.h" #include "buddy_list.h" -#include "buddy_status.h" #include "buddy_opt.h" #include "char_conv.h" #include "crypt.h" #include "header_info.h" -#include "keep_alive.h" +#include "qq_base.h" #include "group.h" #include "group_find.h" #include "group_internal.h" @@ -48,16 +47,14 @@ #define QQ_GET_ONLINE_BUDDY_02 0x02 #define QQ_GET_ONLINE_BUDDY_03 0x03 /* unknown function */ -#define QQ_ONLINE_BUDDY_ENTRY_LEN 38 - -typedef struct _qq_friends_online_entry { - qq_buddy_status *s; +typedef struct _qq_buddy_online { + qq_buddy_status bs; guint16 unknown1; - guint8 flag1; + guint8 ext_flag; guint8 comm_flag; guint16 unknown2; guint8 ending; /* 0x00 */ -} qq_friends_online_entry; +} qq_buddy_online; /* get a list of online_buddies */ void qq_send_packet_get_buddies_online(PurpleConnection *gc, guint8 position) @@ -81,7 +78,7 @@ /* 003-004 */ bytes += qq_put16(raw_data + bytes, 0x0000); - qq_send_cmd(qd, QQ_CMD_GET_FRIENDS_ONLINE, raw_data, 5); + qq_send_cmd(qd, QQ_CMD_GET_BUDDIES_ONLINE, raw_data, 5); qd->last_get_online = time(NULL); } @@ -102,7 +99,7 @@ * March 22, found the 00,00,00 starts to work as well */ bytes += qq_put8(raw_data + bytes, 0x00); - qq_send_cmd(qd, QQ_CMD_GET_FRIENDS_LIST, raw_data, bytes); + qq_send_cmd(qd, QQ_CMD_GET_BUDDIES_LIST, raw_data, bytes); } /* get all list, buddies & Quns with groupsid support */ @@ -123,27 +120,45 @@ qq_send_cmd(qd, QQ_CMD_GET_ALL_LIST_WITH_GROUP, raw_data, bytes); } -static void _qq_buddies_online_reply_dump_unclear(qq_friends_online_entry *fe) +/* parse the data into qq_buddy_status */ +static gint get_buddy_status(qq_buddy_status *bs, guint8 *data) { - GString *dump; + gint bytes = 0; - g_return_if_fail(fe != NULL); - - qq_buddy_status_dump_unclear(fe->s); + g_return_val_if_fail(data != NULL && bs != NULL, -1); - dump = g_string_new(""); - g_string_append_printf(dump, "unclear fields for [%d]:\n", fe->s->uid); - g_string_append_printf(dump, "031-032: %04x (unknown)\n", fe->unknown1); - g_string_append_printf(dump, "033: %02x (flag1)\n", fe->flag1); - g_string_append_printf(dump, "034: %02x (comm_flag)\n", fe->comm_flag); - g_string_append_printf(dump, "035-036: %04x (unknown)\n", fe->unknown2); + /* 000-003: uid */ + bytes += qq_get32(&bs->uid, data + bytes); + /* 004-004: 0x01 */ + bytes += qq_get8(&bs->unknown1, data + bytes); + /* this is no longer the IP, it seems QQ (as of 2006) no longer sends + * the buddy's IP in this packet. all 0s */ + /* 005-008: ip */ + bytes += qq_getIP(&bs->ip, data + bytes); + /* port info is no longer here either */ + /* 009-010: port */ + bytes += qq_get16(&bs->port, data + bytes); + /* 011-011: 0x00 */ + bytes += qq_get8(&bs->unknown2, data + bytes); + /* 012-012: status */ + bytes += qq_get8(&bs->status, data + bytes); + /* 013-014: client_version */ + bytes += qq_get16(&bs->unknown3, data + bytes); + /* 015-030: unknown key */ + bytes += qq_getdata(&(bs->unknown_key[0]), QQ_KEY_LENGTH, data + bytes); - purple_debug(PURPLE_DEBUG_INFO, "QQ", "Online buddy entry, %s", dump->str); - g_string_free(dump, TRUE); + purple_debug(PURPLE_DEBUG_INFO, "QQ_STATUS", + "uid: %d, U1: %d, ip: %s:%d, U2:%d, status:%d, U3:%04X\n", + bs->uid, bs->unknown1, inet_ntoa(bs->ip), bs->port, + bs->unknown2, bs->status, bs->unknown3); + + return bytes; } +#define QQ_ONLINE_BUDDY_ENTRY_LEN 38 + /* process the reply packet for get_buddies_online packet */ -void qq_process_get_buddies_online_reply(guint8 *buf, gint buf_len, PurpleConnection *gc) +guint8 qq_process_get_buddies_online_reply(guint8 *buf, gint buf_len, PurpleConnection *gc) { qq_data *qd; gint len, bytes, bytes_buddy; @@ -151,9 +166,9 @@ guint8 *data, position; PurpleBuddy *b; qq_buddy *q_bud; - qq_friends_online_entry *fe; + qq_buddy_online bo; - g_return_if_fail(buf != NULL && buf_len != 0); + g_return_val_if_fail(buf != NULL && buf_len != 0, -1); qd = (qq_data *) gc->proto_data; len = buf_len; @@ -163,70 +178,68 @@ if (!qq_decrypt(buf, buf_len, qd->session_key, data, &len)) { purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Error decrypt buddies online"); - return; + return -1; } - qq_show_packet("Get buddies online reply packet", data, len); + /* qq_show_packet("Get buddies online reply packet", data, len); */ bytes = 0; bytes += qq_get8(&position, data + bytes); - fe = g_newa(qq_friends_online_entry, 1); - fe->s = g_newa(qq_buddy_status, 1); - count = 0; while (bytes < len) { + if (len - bytes < QQ_ONLINE_BUDDY_ENTRY_LEN) { + purple_debug(PURPLE_DEBUG_ERROR, "QQ", + "[buddies online] only %d, need %d", + (len - bytes), QQ_ONLINE_BUDDY_ENTRY_LEN); + break; + } + memset(&bo, 0 ,sizeof(bo)); + /* set flag */ bytes_buddy = bytes; /* based on one online buddy entry */ - /* ATTTENTION! NEWED in the sub function, but FREED here */ /* 000-030 qq_buddy_status */ - bytes += qq_buddy_status_read(fe->s, data + bytes); - /* 031-032: unknown4 */ - bytes += qq_get16(&fe->unknown1, data + bytes); - /* 033-033: flag1 */ - bytes += qq_get8(&fe->flag1, data + bytes); + bytes += get_buddy_status(&(bo.bs), data + bytes); + /* 031-032: */ + bytes += qq_get16(&bo.unknown1, data + bytes); + /* 033-033: ext_flag */ + bytes += qq_get8(&bo.ext_flag, data + bytes); /* 034-034: comm_flag */ - bytes += qq_get8(&fe->comm_flag, data + bytes); + bytes += qq_get8(&bo.comm_flag, data + bytes); /* 035-036: */ - bytes += qq_get16(&fe->unknown2, data + bytes); + bytes += qq_get16(&bo.unknown2, data + bytes); /* 037-037: */ - bytes += qq_get8(&fe->ending, data + bytes); /* 0x00 */ + bytes += qq_get8(&bo.ending, data + bytes); /* 0x00 */ - if (fe->s->uid == 0 || (bytes - bytes_buddy) != QQ_ONLINE_BUDDY_ENTRY_LEN) { + if (bo.bs.uid == 0 || (bytes - bytes_buddy) != QQ_ONLINE_BUDDY_ENTRY_LEN) { purple_debug(PURPLE_DEBUG_ERROR, "QQ", "uid=0 or entry complete len(%d) != %d", (bytes - bytes_buddy), QQ_ONLINE_BUDDY_ENTRY_LEN); - g_free(fe->s->ip); - g_free(fe->s->unknown_key); continue; } /* check if it is a valid entry */ - if (QQ_DEBUG) { - _qq_buddies_online_reply_dump_unclear(fe); - } - /* update buddy information */ - b = purple_find_buddy(purple_connection_get_account(gc), uid_to_purple_name(fe->s->uid)); + b = purple_find_buddy(purple_connection_get_account(gc), + uid_to_purple_name(bo.bs.uid) ); q_bud = (b == NULL) ? NULL : (qq_buddy *) b->proto_data; - - if (q_bud != NULL) { /* we find one and update qq_buddy */ - if(0 != fe->s->client_version) - q_bud->client_version = fe->s->client_version; - g_memmove(q_bud->ip, fe->s->ip, 4); - q_bud->port = fe->s->port; - q_bud->status = fe->s->status; - q_bud->flag1 = fe->flag1; - q_bud->comm_flag = fe->comm_flag; - qq_update_buddy_contact(gc, q_bud); - count++; - } else { + if (q_bud == NULL) { purple_debug(PURPLE_DEBUG_ERROR, "QQ", - "Got an online buddy %d, but not in my buddy list\n", fe->s->uid); + "Got an online buddy %d, but not in my buddy list\n", bo.bs.uid); + continue; } - - g_free(fe->s->ip); - g_free(fe->s->unknown_key); + /* we find one and update qq_buddy */ + /* + if(0 != fe->s->client_version) + q_bud->client_version = fe->s->client_version; + */ + q_bud->ip.s_addr = bo.bs.ip.s_addr; + q_bud->port = bo.bs.port; + q_bud->status = bo.bs.status; + q_bud->ext_flag = bo.ext_flag; + q_bud->comm_flag = bo.comm_flag; + qq_update_buddy_contact(gc, q_bud); + count++; } if(bytes > len) { @@ -236,20 +249,12 @@ purple_debug(PURPLE_DEBUG_INFO, "QQ", "Received %d online buddies, nextposition=%u\n", count, (guint) position); - if (position != QQ_FRIENDS_ONLINE_POSITION_END - && position != QQ_FRIENDS_ONLINE_POSITION_START) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "Requesting for more online buddies\n"); - qq_send_packet_get_buddies_online(gc, position); - } else { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "All online buddies received\n"); - qq_send_packet_get_buddies_levels(gc); - qq_refresh_all_buddy_status(gc); - } + return position; } /* process reply for get_buddies_list */ -void qq_process_get_buddies_list_reply(guint8 *buf, gint buf_len, PurpleConnection *gc) +guint16 qq_process_get_buddies_list_reply(guint8 *buf, gint buf_len, PurpleConnection *gc) { qq_data *qd; qq_buddy *q_bud; @@ -260,7 +265,7 @@ gchar *name; PurpleBuddy *b; - g_return_if_fail(buf != NULL && buf_len != 0); + g_return_val_if_fail(buf != NULL && buf_len != 0, -1); qd = (qq_data *) gc->proto_data; len = buf_len; @@ -268,7 +273,7 @@ if (!qq_decrypt(buf, buf_len, qd->session_key, data, &len)) { purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Error decrypt buddies list"); - return; + return -1; } bytes = 0; bytes += qq_get16(&position, data + bytes); @@ -291,16 +296,7 @@ bytes += pascal_len; bytes += qq_get16(&unknown, data + bytes); - /* flag1: (0-7) - * bit1 => qq show - * comm_flag: (0-7) - * bit1 => member - * bit4 => TCP mode - * bit5 => open mobile QQ - * bit6 => bind to mobile - * bit7 => whether having a video - */ - bytes += qq_get8(&q_bud->flag1, data + bytes); + bytes += qq_get8(&q_bud->ext_flag, data + bytes); bytes += qq_get8(&q_bud->comm_flag, data + bytes); bytes_expected = 12 + pascal_len; @@ -317,8 +313,8 @@ if (QQ_DEBUG) { purple_debug(PURPLE_DEBUG_INFO, "QQ", - "buddy [%09d]: flag1=0x%02x, comm_flag=0x%02x, nick=%s\n", - q_bud->uid, q_bud->flag1, q_bud->comm_flag, q_bud->nickname); + "buddy [%09d]: ext_flag=0x%02x, comm_flag=0x%02x, nick=%s\n", + q_bud->uid, q_bud->ext_flag, q_bud->comm_flag, q_bud->nickname); } name = uid_to_purple_name(q_bud->uid); @@ -341,17 +337,10 @@ purple_debug(PURPLE_DEBUG_INFO, "QQ", "Received %d buddies, nextposition=%u\n", count, (guint) position); - if (position != QQ_FRIENDS_LIST_POSITION_START - && position != QQ_FRIENDS_LIST_POSITION_END) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "Requesting for more buddies\n"); - qq_send_packet_get_buddies_list(gc, position); - } else { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "All buddies received. Requesting for online buddies list\n"); - qq_send_packet_get_buddies_online(gc, QQ_FRIENDS_LIST_POSITION_START); - } + return position; } -void qq_process_get_all_list_with_group_reply(guint8 *buf, gint buf_len, PurpleConnection *gc) +guint32 qq_process_get_all_list_with_group_reply(guint8 *buf, gint buf_len, PurpleConnection *gc) { qq_data *qd; gint len, i, j; @@ -363,7 +352,7 @@ guint8 type, groupid; qq_group *group; - g_return_if_fail(buf != NULL && buf_len != 0); + g_return_val_if_fail(buf != NULL && buf_len != 0, -1); qd = (qq_data *) gc->proto_data; len = buf_len; @@ -371,11 +360,11 @@ if (!qq_decrypt(buf, buf_len, qd->session_key, data, &len)) { purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Error decrypt all list with group"); - return; + return -1; } bytes += qq_get8(&sub_cmd, data + bytes); - g_return_if_fail(sub_cmd == 0x01); + g_return_val_if_fail(sub_cmd == 0x01, -1); bytes += qq_get8(&reply_code, data + bytes); if(0 != reply_code) { @@ -429,14 +418,273 @@ "qq_process_get_all_list_with_group_reply: Dangerous error! maybe protocol changed, notify developers!"); } - purple_debug(PURPLE_DEBUG_INFO, "QQ", "Get all list done, %d buddies and %d Quns\n", i, j); purple_debug(PURPLE_DEBUG_INFO, "QQ", "Received %d buddies and %d groups, nextposition=%u\n", i, j, (guint) position); + return position; +} + +#define QQ_MISC_STATUS_HAVING_VIIDEO 0x00000001 +#define QQ_CHANGE_ONLINE_STATUS_REPLY_OK 0x30 /* ASCII value of "0" */ + +/* TODO: figure out what's going on with the IP region. Sometimes I get valid IP addresses, + * but the port number's weird, other times I get 0s. I get these simultaneously on the same buddy, + * using different accounts to get info. */ + +/* check if status means online or offline */ +gboolean is_online(guint8 status) +{ + switch(status) { + case QQ_BUDDY_ONLINE_NORMAL: + case QQ_BUDDY_ONLINE_AWAY: + case QQ_BUDDY_ONLINE_INVISIBLE: + return TRUE; + case QQ_BUDDY_ONLINE_OFFLINE: + return FALSE; + } + return FALSE; +} + +/* Help calculate the correct icon index to tell the server. */ +gint get_icon_offset(PurpleConnection *gc) +{ + PurpleAccount *account; + PurplePresence *presence; + + account = purple_connection_get_account(gc); + presence = purple_account_get_presence(account); + + if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_INVISIBLE)) { + return 2; + } else if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_AWAY) + || purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_EXTENDED_AWAY) + || purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_UNAVAILABLE)) { + return 1; + } else { + return 0; + } +} + +/* send a packet to change my online status */ +void qq_send_packet_change_status(PurpleConnection *gc) +{ + qq_data *qd; + guint8 raw_data[16] = {0}; + gint bytes = 0; + guint8 away_cmd; + guint32 misc_status; + gboolean fake_video; + PurpleAccount *account; + PurplePresence *presence; + + account = purple_connection_get_account(gc); + presence = purple_account_get_presence(account); - if (position != QQ_FRIENDS_ALL_LIST_POSITION_START - && position != QQ_FRIENDS_ALL_LIST_POSITION_END) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "Requesting for more buddies and groups\n"); - qq_send_packet_get_all_list_with_group(gc, position); + qd = (qq_data *) gc->proto_data; + if (!qd->logged_in) + return; + + if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_INVISIBLE)) { + away_cmd = QQ_BUDDY_ONLINE_INVISIBLE; + } else if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_AWAY) + || purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_EXTENDED_AWAY) + || purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_UNAVAILABLE)) { + away_cmd = QQ_BUDDY_ONLINE_AWAY; } else { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "All buddies and groups received\n"); + away_cmd = QQ_BUDDY_ONLINE_NORMAL; + } + + misc_status = 0x00000000; + fake_video = purple_prefs_get_bool("/plugins/prpl/qq/show_fake_video"); + if (fake_video) + misc_status |= QQ_MISC_STATUS_HAVING_VIIDEO; + + bytes = 0; + bytes += qq_put8(raw_data + bytes, away_cmd); + bytes += qq_put32(raw_data + bytes, misc_status); + + qq_send_cmd(qd, QQ_CMD_CHANGE_ONLINE_STATUS, raw_data, bytes); +} + +/* parse the reply packet for change_status */ +void qq_process_change_status_reply(guint8 *buf, gint buf_len, PurpleConnection *gc) +{ + qq_data *qd; + gint len, bytes; + guint8 *data, reply; + PurpleBuddy *b; + qq_buddy *q_bud; + gchar *name; + + g_return_if_fail(buf != NULL && buf_len != 0); + + qd = (qq_data *) gc->proto_data; + len = buf_len; + data = g_newa(guint8, len); + + if ( !qq_decrypt(buf, buf_len, qd->session_key, data, &len) ) { + purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Error decrypt chg status reply\n"); + return; + } + + bytes = 0; + bytes = qq_get8(&reply, data + bytes); + if (reply != QQ_CHANGE_ONLINE_STATUS_REPLY_OK) { + purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Change status fail 0x%02X\n", reply); + return; + } + + /* purple_debug(PURPLE_DEBUG_INFO, "QQ", "Change status OK\n"); */ + name = uid_to_purple_name(qd->uid); + b = purple_find_buddy(gc->account, name); + g_free(name); + q_bud = (b == NULL) ? NULL : (qq_buddy *) b->proto_data; + if (q_bud != NULL) { + qq_update_buddy_contact(gc, q_bud); } } + +/* it is a server message indicating that one of my buddies has changed its status */ +void qq_process_buddy_change_status(guint8 *buf, gint buf_len, PurpleConnection *gc) +{ + qq_data *qd; + gint bytes; + guint32 my_uid; + guint8 *data; + gint data_len; + PurpleBuddy *b; + qq_buddy *q_bud; + qq_buddy_status bs; + gchar *name; + + g_return_if_fail(buf != NULL && buf_len != 0); + + qd = (qq_data *) gc->proto_data; + data_len = buf_len; + data = g_newa(guint8, data_len); + + if ( !qq_decrypt(buf, buf_len, qd->session_key, data, &data_len) ) { + purple_debug(PURPLE_DEBUG_ERROR, "QQ", "[buddy status change] Failed decrypt\n"); + return; + } + + if (data_len < 35) { + purple_debug(PURPLE_DEBUG_ERROR, "QQ", "[buddy status change] only %d, need 35 bytes\n", data_len); + return; + } + + memset(&bs, 0, sizeof(bs)); + bytes = 0; + /* 000-030: qq_buddy_status */ + bytes += get_buddy_status(&bs, data + bytes); + /* 031-034: Unknow, maybe my uid */ + /* This has a value of 0 when we've changed our status to + * QQ_BUDDY_ONLINE_INVISIBLE */ + bytes += qq_get32(&my_uid, data + bytes); + + name = uid_to_purple_name(bs.uid); + b = purple_find_buddy(gc->account, name); + g_free(name); + q_bud = (b == NULL) ? NULL : (qq_buddy *) b->proto_data; + if (q_bud == NULL) { + purple_debug(PURPLE_DEBUG_ERROR, "QQ", + "got information of unknown buddy %d\n", bs.uid); + return; + } + + purple_debug(PURPLE_DEBUG_INFO, "QQ", "status:.uid = %d, q_bud->uid = %d\n", bs.uid , q_bud->uid); + if(bs.ip.s_addr != 0) { + q_bud->ip.s_addr = bs.ip.s_addr; + q_bud->port = bs.port; + } + q_bud->status =bs.status; + + if (q_bud->status == QQ_BUDDY_ONLINE_NORMAL) { + qq_send_packet_get_level(gc, q_bud->uid); + } + qq_update_buddy_contact(gc, q_bud); +} + +/*TODO: maybe this should be qq_update_buddy_status() ?*/ +void qq_update_buddy_contact(PurpleConnection *gc, qq_buddy *q_bud) +{ + gchar *name; + PurpleBuddy *bud; + gchar *status_id; + + g_return_if_fail(q_bud != NULL); + + name = uid_to_purple_name(q_bud->uid); + bud = purple_find_buddy(gc->account, name); + + if (bud == NULL) { + purple_debug(PURPLE_DEBUG_ERROR, "QQ", "unknown buddy: %d\n", q_bud->uid); + g_free(name); + return; + } + + purple_blist_server_alias_buddy(bud, q_bud->nickname); /* server */ + q_bud->last_refresh = time(NULL); + + /* purple supports signon and idle time + * but it is not much use for QQ, I do not use them */ + /* serv_got_update(gc, name, online, 0, q_bud->signon, q_bud->idle, bud->uc); */ + status_id = "available"; + switch(q_bud->status) { + case QQ_BUDDY_OFFLINE: + status_id = "offline"; + break; + case QQ_BUDDY_ONLINE_NORMAL: + status_id = "available"; + break; + case QQ_BUDDY_ONLINE_OFFLINE: + status_id = "offline"; + break; + case QQ_BUDDY_ONLINE_AWAY: + status_id = "away"; + break; + case QQ_BUDDY_ONLINE_INVISIBLE: + status_id = "invisible"; + break; + default: + status_id = "invisible"; + purple_debug(PURPLE_DEBUG_ERROR, "QQ", "unknown status: %x\n", q_bud->status); + break; + } + purple_debug(PURPLE_DEBUG_INFO, "QQ", "buddy %d %s\n", q_bud->uid, status_id); + purple_prpl_got_user_status(gc->account, name, status_id, NULL); + + if (q_bud->comm_flag & QQ_COMM_FLAG_MOBILE && q_bud->status != QQ_BUDDY_OFFLINE) + purple_prpl_got_user_status(gc->account, name, "mobile", NULL); + else + purple_prpl_got_user_status_deactive(gc->account, name, "mobile"); + + if (q_bud->comm_flag & QQ_COMM_FLAG_VIDEO && q_bud->status != QQ_BUDDY_OFFLINE) + purple_prpl_got_user_status(gc->account, name, "video", NULL); + else + purple_prpl_got_user_status_deactive(gc->account, name, "video"); + + g_free(name); +} + +/* refresh all buddies online/offline, + * after receiving reply for get_buddies_online packet */ +void qq_refresh_all_buddy_status(PurpleConnection *gc) +{ + time_t now; + GList *list; + qq_data *qd; + qq_buddy *q_bud; + + qd = (qq_data *) (gc->proto_data); + now = time(NULL); + list = qd->buddies; + + while (list != NULL) { + q_bud = (qq_buddy *) list->data; + if (q_bud != NULL && now > q_bud->last_refresh + QQ_UPDATE_ONLINE_INTERVAL + && q_bud->status != QQ_BUDDY_ONLINE_INVISIBLE) { + q_bud->status = QQ_BUDDY_ONLINE_OFFLINE; + qq_update_buddy_contact(gc, q_bud); + } + list = list->next; + } +}
--- a/libpurple/protocols/qq/buddy_list.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/buddy_list.h Thu Aug 07 16:00:16 2008 +0000 @@ -28,18 +28,45 @@ #include <glib.h> #include "connection.h" -#define QQ_FRIENDS_LIST_POSITION_START 0x0000 -#define QQ_FRIENDS_LIST_POSITION_END 0xffff -#define QQ_FRIENDS_ONLINE_POSITION_START 0x00 -#define QQ_FRIENDS_ONLINE_POSITION_END 0xff -#define QQ_FRIENDS_ALL_LIST_POSITION_START 0x00000000 -#define QQ_FRIENDS_ALL_LIST_POSITION_END 0xffffffff +#include "qq.h" +typedef struct _qq_buddy_status { + guint32 uid; + guint8 unknown1; + struct in_addr ip; + guint16 port; + guint8 unknown2; + guint8 status; + guint16 unknown3; + guint8 unknown_key[QQ_KEY_LENGTH]; +} qq_buddy_status; + +enum { + QQ_BUDDY_OFFLINE = 0x00, + QQ_BUDDY_ONLINE_NORMAL = 0x0a, + QQ_BUDDY_ONLINE_OFFLINE = 0x14, + QQ_BUDDY_ONLINE_AWAY = 0x1e, + QQ_BUDDY_ONLINE_INVISIBLE = 0x28 +}; void qq_send_packet_get_buddies_online(PurpleConnection *gc, guint8 position); -void qq_process_get_buddies_online_reply(guint8 *buf, gint buf_len, PurpleConnection *gc); +guint8 qq_process_get_buddies_online_reply(guint8 *buf, gint buf_len, PurpleConnection *gc); + void qq_send_packet_get_buddies_list(PurpleConnection *gc, guint16 position); -void qq_process_get_buddies_list_reply(guint8 *buf, gint buf_len, PurpleConnection *gc); +guint16 qq_process_get_buddies_list_reply(guint8 *buf, gint buf_len, PurpleConnection *gc); + void qq_send_packet_get_all_list_with_group(PurpleConnection *gc, guint32 position); -void qq_process_get_all_list_with_group_reply(guint8 *buf, gint buf_len, PurpleConnection *gc); +guint32 qq_process_get_all_list_with_group_reply(guint8 *buf, gint buf_len, PurpleConnection *gc); + +void qq_refresh_all_buddy_status(PurpleConnection *gc); + +gboolean is_online(guint8 status); + +gint get_icon_offset(PurpleConnection *gc); +void qq_send_packet_change_status(PurpleConnection *gc); +void qq_process_change_status_reply(guint8 *buf, gint buf_len, PurpleConnection *gc); +void qq_process_buddy_change_status(guint8 *buf, gint buf_len, PurpleConnection *gc); + +void qq_refresh_all_buddy_status(PurpleConnection *gc); +void qq_update_buddy_contact(PurpleConnection *gc, qq_buddy *q_bud); #endif
--- a/libpurple/protocols/qq/buddy_opt.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/buddy_opt.c Thu Aug 07 16:00:16 2008 +0000 @@ -34,7 +34,7 @@ #include "crypt.h" #include "header_info.h" #include "im.h" -#include "keep_alive.h" +#include "qq_base.h" #include "packet_parse.h" #include "qq_network.h" #include "utils.h" @@ -67,7 +67,7 @@ g_return_if_fail(uid > 0); g_snprintf(uid_str, sizeof(uid_str), "%d", uid); - qq_send_cmd(qd, QQ_CMD_DEL_FRIEND, (guint8 *) uid_str, strlen(uid_str)); + qq_send_cmd(qd, QQ_CMD_DEL_BUDDY, (guint8 *) uid_str, strlen(uid_str)); } /* try to remove myself from someone's buddy list */ @@ -95,7 +95,7 @@ /* we need to send the ascii code of this uid to qq server */ g_snprintf(uid_str, sizeof(uid_str), "%d", uid); - qq_send_cmd(qd, QQ_CMD_ADD_FRIEND_WO_AUTH, (guint8 *) uid_str, strlen(uid_str)); + qq_send_cmd(qd, QQ_CMD_ADD_BUDDY_WO_AUTH, (guint8 *) uid_str, strlen(uid_str)); /* must be set after sending packet to get the correct send_seq */ req = g_new0(qq_add_buddy_request, 1); @@ -481,7 +481,7 @@ b->proto_data = q_bud; qd->buddies = g_list_append(qd->buddies, q_bud); qq_send_packet_get_info(gc, q_bud->uid, FALSE); - qq_send_packet_get_buddies_online(gc, QQ_FRIENDS_ONLINE_POSITION_START); + qq_send_packet_get_buddies_online(gc, 0); } purple_blist_add_buddy(b, NULL, g, NULL);
--- a/libpurple/protocols/qq/buddy_status.c Thu Jul 31 06:23:55 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,280 +0,0 @@ -/** - * @file buddy_status.c - * - * purple - * - * Purple is the legal property ofr its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - */ - -#include <string.h> -#include "internal.h" -#include "debug.h" -#include "prefs.h" - -#include "buddy_info.h" -#include "buddy_status.h" -#include "crypt.h" -#include "header_info.h" -#include "keep_alive.h" -#include "packet_parse.h" -#include "utils.h" - -#include "qq_network.h" - -#define QQ_MISC_STATUS_HAVING_VIIDEO 0x00000001 -#define QQ_CHANGE_ONLINE_STATUS_REPLY_OK 0x30 /* ASCII value of "0" */ - -void qq_buddy_status_dump_unclear(qq_buddy_status *s) -{ - GString *dump; - - g_return_if_fail(s != NULL); - - dump = g_string_new(""); - g_string_append_printf(dump, "unclear fields for [%d]:\n", s->uid); - g_string_append_printf(dump, "004: %02x (unknown)\n", s->unknown1); - /* g_string_append_printf(dump, "005-008: %09x (ip)\n", *(s->ip)); */ - g_string_append_printf(dump, "009-010: %04x (port)\n", s->port); - g_string_append_printf(dump, "011: %02x (unknown)\n", s->unknown2); - g_string_append_printf(dump, "012: %02x (status)\n", s->status); - g_string_append_printf(dump, "013-014: %04x (client_version)\n", s->client_version); - /* g_string_append_printf(dump, "015-030: %s (unknown key)\n", s->unknown_key); */ - purple_debug(PURPLE_DEBUG_INFO, "QQ", "Buddy status entry, %s", dump->str); - qq_show_packet("Unknown key", s->unknown_key, QQ_KEY_LENGTH); - g_string_free(dump, TRUE); -} - -/* TODO: figure out what's going on with the IP region. Sometimes I get valid IP addresses, - * but the port number's weird, other times I get 0s. I get these simultaneously on the same buddy, - * using different accounts to get info. */ - -/* parse the data into qq_buddy_status */ -gint qq_buddy_status_read(qq_buddy_status *s, guint8 *data) -{ - gint bytes = 0; - - g_return_val_if_fail(data != NULL && s != NULL, -1); - - /* 000-003: uid */ - bytes += qq_get32(&s->uid, data + bytes); - /* 004-004: 0x01 */ - bytes += qq_get8(&s->unknown1, data + bytes); - /* this is no longer the IP, it seems QQ (as of 2006) no longer sends - * the buddy's IP in this packet. all 0s */ - /* 005-008: ip */ - s->ip = g_new0(guint8, 4); - bytes += qq_getdata(s->ip, 4, data + bytes); - /* port info is no longer here either */ - /* 009-010: port */ - bytes += qq_get16(&s->port, data + bytes); - /* 011-011: 0x00 */ - bytes += qq_get8(&s->unknown2, data + bytes); - /* 012-012: status */ - bytes += qq_get8(&s->status, data + bytes); - /* 013-014: client_version */ - bytes += qq_get16(&s->client_version, data + bytes); - /* 015-030: unknown key */ - s->unknown_key = g_new0(guint8, QQ_KEY_LENGTH); - bytes += qq_getdata(s->unknown_key, QQ_KEY_LENGTH, data + bytes); - - if (s->uid == 0 || bytes != 31) - return -1; - - return bytes; -} - -/* check if status means online or offline */ -gboolean is_online(guint8 status) -{ - switch(status) { - case QQ_BUDDY_ONLINE_NORMAL: - case QQ_BUDDY_ONLINE_AWAY: - case QQ_BUDDY_ONLINE_INVISIBLE: - return TRUE; - case QQ_BUDDY_ONLINE_OFFLINE: - return FALSE; - } - return FALSE; -} - -/* Help calculate the correct icon index to tell the server. */ -gint get_icon_offset(PurpleConnection *gc) -{ - PurpleAccount *account; - PurplePresence *presence; - - account = purple_connection_get_account(gc); - presence = purple_account_get_presence(account); - - if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_INVISIBLE)) { - return 2; - } else if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_AWAY) - || purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_EXTENDED_AWAY) - || purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_UNAVAILABLE)) { - return 1; - } else { - return 0; - } -} - -/* send a packet to change my online status */ -void qq_send_packet_change_status(PurpleConnection *gc) -{ - qq_data *qd; - guint8 raw_data[16] = {0}; - gint bytes = 0; - guint8 away_cmd; - guint32 misc_status; - gboolean fake_video; - PurpleAccount *account; - PurplePresence *presence; - - account = purple_connection_get_account(gc); - presence = purple_account_get_presence(account); - - qd = (qq_data *) gc->proto_data; - if (!qd->logged_in) - return; - - if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_INVISIBLE)) { - away_cmd = QQ_BUDDY_ONLINE_INVISIBLE; - } else if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_AWAY) - || purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_EXTENDED_AWAY) - || purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_UNAVAILABLE)) { - away_cmd = QQ_BUDDY_ONLINE_AWAY; - } else { - away_cmd = QQ_BUDDY_ONLINE_NORMAL; - } - - misc_status = 0x00000000; - fake_video = purple_prefs_get_bool("/plugins/prpl/qq/show_fake_video"); - if (fake_video) - misc_status |= QQ_MISC_STATUS_HAVING_VIIDEO; - - bytes = 0; - bytes += qq_put8(raw_data + bytes, away_cmd); - bytes += qq_put32(raw_data + bytes, misc_status); - - qq_send_cmd(qd, QQ_CMD_CHANGE_ONLINE_STATUS, raw_data, bytes); -} - -/* parse the reply packet for change_status */ -void qq_process_change_status_reply(guint8 *buf, gint buf_len, PurpleConnection *gc) -{ - qq_data *qd; - gint len, bytes; - guint8 *data, reply; - PurpleBuddy *b; - qq_buddy *q_bud; - gchar *name; - - g_return_if_fail(buf != NULL && buf_len != 0); - - qd = (qq_data *) gc->proto_data; - len = buf_len; - data = g_newa(guint8, len); - - if ( !qq_decrypt(buf, buf_len, qd->session_key, data, &len) ) { - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Error decrypt chg status reply\n"); - return; - } - - bytes = 0; - bytes = qq_get8(&reply, data + bytes); - if (reply != QQ_CHANGE_ONLINE_STATUS_REPLY_OK) { - purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Change status fail\n"); - } else { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "Change status OK\n"); - name = uid_to_purple_name(qd->uid); - b = purple_find_buddy(gc->account, name); - g_free(name); - q_bud = (b == NULL) ? NULL : (qq_buddy *) b->proto_data; - if (q_bud != NULL) { - qq_update_buddy_contact(gc, q_bud); - } - } -} - -/* it is a server message indicating that one of my buddies has changed its status */ -void qq_process_friend_change_status(guint8 *buf, gint buf_len, PurpleConnection *gc) -{ - qq_data *qd; - gint len, bytes; - guint32 my_uid; - guint8 *data; - PurpleBuddy *b; - qq_buddy *q_bud; - qq_buddy_status *s; - gchar *name; - - g_return_if_fail(buf != NULL && buf_len != 0); - - qd = (qq_data *) gc->proto_data; - len = buf_len; - data = g_newa(guint8, len); - - if ( !qq_decrypt(buf, buf_len, qd->session_key, data, &len) ) { - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Error decrypt buddy status change packet\n"); - return; - } - - s = g_new0(qq_buddy_status, 1); - bytes = 0; - /* 000-030: qq_buddy_status */ - bytes += qq_buddy_status_read(s, data + bytes); - /* 031-034: my uid */ - /* This has a value of 0 when we've changed our status to - * QQ_BUDDY_ONLINE_INVISIBLE */ - bytes += qq_get32(&my_uid, data + bytes); - - if (bytes != 35) { - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "bytes(%d) != 35\n", bytes); - g_free(s->ip); - g_free(s->unknown_key); - g_free(s); - return; - } - - name = uid_to_purple_name(s->uid); - b = purple_find_buddy(gc->account, name); - g_free(name); - q_bud = (b == NULL) ? NULL : (qq_buddy *) b->proto_data; - if (q_bud) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "s->uid = %d, q_bud->uid = %d\n", s->uid , q_bud->uid); - if(0 != *((guint32 *)s->ip)) { - g_memmove(q_bud->ip, s->ip, 4); - q_bud->port = s->port; - } - q_bud->status = s->status; - if(0 != s->client_version) { - q_bud->client_version = s->client_version; - } - if (q_bud->status == QQ_BUDDY_ONLINE_NORMAL) { - qq_send_packet_get_level(gc, q_bud->uid); - } - qq_update_buddy_contact(gc, q_bud); - } else { - purple_debug(PURPLE_DEBUG_ERROR, "QQ", - "got information of unknown buddy %d\n", s->uid); - } - - g_free(s->ip); - g_free(s->unknown_key); - g_free(s); -}
--- a/libpurple/protocols/qq/buddy_status.h Thu Jul 31 06:23:55 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -/** - * @file buddy_status.h - * - * purple - * - * Purple is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - * - */ - -#ifndef _QQ_BUDDY_STATUS_H_ -#define _QQ_BUDDY_STATUS_H_ - -#include <glib.h> -#include "connection.h" -#include "qq.h" - -typedef struct _qq_buddy_status { - guint32 uid; - guint8 unknown1; - guint8 *ip; - guint16 port; - guint8 unknown2; - guint8 status; - guint16 client_version; - guint8 *unknown_key; -} qq_buddy_status; - -enum { - QQ_BUDDY_OFFLINE = 0x00, - QQ_BUDDY_ONLINE_NORMAL = 0x0a, - QQ_BUDDY_ONLINE_OFFLINE = 0x14, - QQ_BUDDY_ONLINE_AWAY = 0x1e, - QQ_BUDDY_ONLINE_INVISIBLE = 0x28 -}; - -void qq_buddy_status_dump_unclear(qq_buddy_status *s); -gboolean is_online(guint8 status); - -gint qq_buddy_status_read(qq_buddy_status *s, guint8 *data); -gint get_icon_offset(PurpleConnection *gc); - -void qq_send_packet_change_status(PurpleConnection *gc); - -void qq_process_change_status_reply(guint8 *buf, gint buf_len, PurpleConnection *gc); -void qq_process_friend_change_status(guint8 *buf, gint buf_len, PurpleConnection *gc); -#endif
--- a/libpurple/protocols/qq/char_conv.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/char_conv.c Thu Aug 07 16:00:16 2008 +0000 @@ -37,7 +37,7 @@ #define QQ_CHARSET_ENG "ISO-8859-1" #define QQ_NULL_MSG "(NULL)" /* return this if conversion fails */ -#define QQ_NULL_SMILEY "(SM)" /* return this if smiley conversion fails */ +#define QQ_NULL_SMILEY "(Broken)" /* return this if smiley conversion fails */ const gchar qq_smiley_map[QQ_SMILEY_AMOUNT] = { 0x41, 0x43, 0x42, 0x44, 0x45, 0x46, 0x47, 0x48, @@ -113,9 +113,9 @@ } /* conversion error */ - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "%s\n", error->message); + purple_debug(PURPLE_DEBUG_ERROR, "QQ_CONVERT", "%s\n", error->message); - qq_hex_dump(PURPLE_DEBUG_WARNING, "QQ", + qq_hex_dump(PURPLE_DEBUG_WARNING, "QQ_CONVERT", (guint8 *) str, (len == -1) ? strlen(str) : len, "Dump failed text"); @@ -151,7 +151,7 @@ gint bytes = 0; /* checked qq_show_packet OK */ - qq_show_packet("QQ_MESG recv for font style", data, len); + /* qq_show_packet("QQ_MESG recv for font style", data, len); */ bytes += qq_get8(&font_attr, data + bytes); bytes += qq_getdata(color, 3, data + bytes); /* red,green,blue */ @@ -231,7 +231,7 @@ GString *converted; converted = g_string_new(""); - segments = split_data((guint8 *) text, strlen(text), "\x14", 0); + segments = split_data((guint8 *) text, strlen(text), "\x14\x15", 0); g_string_append(converted, segments[0]); while ((*(++segments)) != NULL) { @@ -286,7 +286,7 @@ } for (temp = str; *temp != 0; temp++) { - if (*temp == '\r' || *temp == '\n') *temp = 0x20; + if (*temp == '\r' || *temp == '\n') *temp = ' '; } g_strstrip(str); }
--- a/libpurple/protocols/qq/crypt.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/crypt.c Thu Aug 07 16:00:16 2008 +0000 @@ -19,7 +19,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * * QQ encryption algorithm @@ -28,7 +28,7 @@ * Puzzlebird, Nov-Dec 2002 */ -/*Notes: (QQ uses 16 rounds, and modified something...) +/* Notes: (QQ uses 16 rounds, and modified something...) IN : 64 bits of data in v[0] - v[1]. OUT: 64 bits of data in w[0] - w[1]. @@ -45,6 +45,13 @@ #include "crypt.h" #include "debug.h" +/* 1, fixed alignment problem, when compiled on different platform + * 2, whether we need core debug + * 20070717, s3e */ +#if 0 +#define CORE_DEBUG +#endif + /******************************************************************** * encryption *******************************************************************/ @@ -52,7 +59,8 @@ /* Tiny Encryption Algorithm (TEA) */ static void qq_encipher(guint32 *const v, const guint32 *const k, guint32 *const w) { - register guint32 y = g_ntohl(v[0]), + register guint32 + y = g_ntohl(v[0]), z = g_ntohl(v[1]), a = g_ntohl(k[0]), b = g_ntohl(k[1]), @@ -72,24 +80,86 @@ w[1] = g_htonl(z); } -static gint rand(void) { /* it can be the real random seed function */ - return 0xdead; -} /* override with number, convenient for debug */ +/* it can be the real random seed function */ +/* override with number, convenient for debug */ +#ifdef DEBUG +static gint rand(void) { + return 0xdead; +} +#else +#include <stdlib.h> +#endif /* 64-bit blocks and some kind of feedback mode of operation */ -static void encrypt_block(guint8 *plain, guint8 *plain_pre_8, guint8 **crypted, +static inline void encrypt_block(guint8 *plain, guint8 *plain_pre_8, guint8 **crypted, guint8 **crypted_pre_8, const guint8 *const key, gint *count, gint *pos_in_block, gint *is_header) { + /* loop it */ + int j; + /* ships in encipher */ + guint32 ptr_p[2]; /* 64 bits, guint32[2] */ + guint32 ptr_k[4]; /* 128 bits, guint32[4] */ + guint32 ptr_c[2]; /* 64 bits, guint32[2] */ + /* prepare input text */ - if (!*is_header) - *(guint64 *) plain ^= **(guint64 **) crypted_pre_8; +#ifdef CORE_DEBUG + purple_debug(PURPLE_DEBUG_ERROR, "QQ_CORE_DEBUG", + "!we are in encrypt_block! *pos_in_block comes: %d, *is_header comes: %d\n", + *pos_in_block, *is_header); +#endif + for(j = 0; j < 8; j++) { +#ifdef CORE_DEBUG + purple_debug(PURPLE_DEBUG_INFO, "QQ_CORE_DEBUG", + "plain[%d]: 0x%02x, plain_pre_8[%d]: 0x%02x\n", + j, plain[j], j, plain_pre_8[j]); +#endif + if (!*is_header) { +#ifdef CORE_DEBUG + purple_debug(PURPLE_DEBUG_INFO, "QQ_CORE_DEBUG", + "(*crypted_pre_8 + %d): 0x%02x\n", + j, *(*crypted_pre_8 + j)); +#endif + plain[j] ^= (*(*crypted_pre_8 + j)); +#ifdef CORE_DEBUG + purple_debug(PURPLE_DEBUG_INFO, "QQ_CORE_DEBUG", + "NOW plain[%d]: 0x%02x\n", + j, plain[j]); +#endif + } else { + plain[j] ^= plain_pre_8[j]; +#ifdef CORE_DEBUG + purple_debug(PURPLE_DEBUG_INFO, "QQ_CORE_DEBUG", + "NOW plain[%d]: 0x%02x\n", + j, plain[j]); +#endif + } + } + + g_memmove(ptr_p, plain, 8); + g_memmove(ptr_k, key, 16); + g_memmove(ptr_c, *crypted, 8); /* encrypt it */ - qq_encipher((guint32 *) plain, (guint32 *) key, (guint32 *) *crypted); + qq_encipher(ptr_p, ptr_k, ptr_c); + + g_memmove(plain, ptr_p, 8); + g_memmove(*crypted, ptr_c, 8); - **(guint64 **) crypted ^= *(guint64 *) plain_pre_8; - + for(j = 0; j < 8; j++) { +#ifdef CORE_DEBUG + purple_debug(PURPLE_DEBUG_INFO, "QQ_CORE_DEBUG", + "j: %d, *(*crypted + %d): 0x%02x, plain_pre_8[%d]: 0x%02x\n", + j, j, *(*crypted + j), j, plain_pre_8[j]); +#endif + (*(*crypted + j)) ^= plain_pre_8[j]; +#ifdef CORE_DEBUG + purple_debug(PURPLE_DEBUG_INFO, "QQ_CORE_DEBUG", + "NOW *(*crypted + [%d]): 0x%02x\n", + j, *(*crypted + j)); +#endif + } + memcpy(plain_pre_8, plain, 8); /* prepare next */ *crypted_pre_8 = *crypted; /* store position of previous 8 byte */ @@ -171,7 +241,8 @@ static void qq_decipher(guint32 *const v, const guint32 *const k, guint32 *const w) { - register guint32 y = g_ntohl(v[0]), + register guint32 + y = g_ntohl(v[0]), z = g_ntohl(v[1]), a = g_ntohl(k[0]), b = g_ntohl(k[1]), @@ -196,12 +267,25 @@ const guint8 *const key, gint *context_start, guint8 *decrypted, gint *pos_in_block) { + /* loop */ + int i; + /* ships in decipher */ + guint32 ptr_v[2]; + guint32 ptr_k[4]; + if (*context_start == instrlen) return 1; - *(guint64 *) decrypted ^= **(guint64 **) crypt_buff; + for(i = 0; i < 8; i++) { + decrypted[i] ^= (*(*crypt_buff + i)); + } + + g_memmove(ptr_v, decrypted, 8); + g_memmove(ptr_k, key, 16); - qq_decipher((guint32 *) decrypted, (guint32 *) key, (guint32 *) decrypted); + qq_decipher(ptr_v, ptr_k, ptr_v); + + g_memmove(decrypted, ptr_v, 8); *context_start += 8; *crypt_buff += 8; @@ -218,6 +302,10 @@ guint8 decrypted[8], m[8], *outp; const guint8 *crypt_buff, *crypt_buff_pre_8; gint count, context_start, pos_in_block, padding; + /* ships */ + guint32 ptr_instr[2]; + guint32 ptr_key[4]; + guint32 ptr_decr[2]; /* at least 16 bytes and %8 == 0 */ if ((instrlen % 8) || (instrlen < 16)) { @@ -226,8 +314,14 @@ instrlen); return 0; } - /* get information from header */ - qq_decipher((guint32 *) instr, (guint32 *) key, (guint32 *) decrypted); + g_memmove(ptr_instr, instr, 8); + g_memmove(ptr_key, key, 16); + g_memmove(ptr_decr, decrypted, 8); + + qq_decipher(ptr_instr, ptr_key, ptr_decr); + + g_memmove(decrypted, ptr_decr, 8); + pos_in_block = decrypted[0] & 0x7; count = instrlen - pos_in_block - 10; /* this is the plaintext length */ /* return if outstr buffer is not large enough or error plaintext length */ @@ -294,22 +388,6 @@ } } } - return 1; -} - -/* return 1 is succeed, otherwise return 0 -gint qq_crypt(gint flag, - const guint8 *const instr, gint instrlen, - const guint8 *const key, - guint8 *outstr, gint *outstrlen_ptr) -{ - if (flag == DECRYPT) - return qq_decrypt(instr, instrlen, key, outstr, outstrlen_ptr); - else if (flag == ENCRYPT) - qq_encrypt(instr, instrlen, key, outstr, outstrlen_ptr); - else - return 0; return 1; } -*/
--- a/libpurple/protocols/qq/crypt.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/crypt.h Thu Aug 07 16:00:16 2008 +0000 @@ -1,4 +1,4 @@ -/** + /** * @file crypt.h * * purple @@ -19,7 +19,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _QQ_CRYPT_H_ @@ -27,6 +27,9 @@ #include <glib.h> +#define DECRYPT 0x00 +#define ENCRYPT 0x01 + void qq_encrypt(const guint8 *const instr, gint instrlen, const guint8 *const key, guint8 *outstr, gint *outstrlen_ptr); @@ -34,14 +37,4 @@ gint qq_decrypt(const guint8 *const instr, gint instrlen, const guint8 *const key, guint8 *outstr, gint *outstrlen_ptr); - -/* -#define DECRYPT 0x00 -#define ENCRYPT 0x01 - -gint qq_crypt(gint flag, - const guint8 *const instr, gint instrlen, - const guint8 *const key, - guint8 *outstr, gint *outstrlen_ptr); -*/ #endif
--- a/libpurple/protocols/qq/file_trans.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/file_trans.c Thu Aug 07 16:00:16 2008 +0000 @@ -76,26 +76,10 @@ return (~uid) ^ key; } -static void _fill_filename_md5(const gchar *filename, guint8 *md5) -{ - PurpleCipher *cipher; - PurpleCipherContext *context; - - g_return_if_fail(filename != NULL && md5 != NULL); - - cipher = purple_ciphers_find_cipher("md5"); - context = purple_cipher_context_new(cipher, NULL); - purple_cipher_context_append(context, (guint8 *) filename, strlen(filename)); - purple_cipher_context_digest(context, 16, md5, NULL); - purple_cipher_context_destroy(context); -} - static void _fill_file_md5(const gchar *filename, gint filelen, guint8 *md5) { FILE *fp; guint8 *buffer; - PurpleCipher *cipher; - PurpleCipherContext *context; size_t wc; const gint QQ_MAX_FILE_MD5_LENGTH = 10002432; @@ -118,11 +102,7 @@ return; } - cipher = purple_ciphers_find_cipher("md5"); - context = purple_cipher_context_new(cipher, NULL); - purple_cipher_context_append(context, buffer, filelen); - purple_cipher_context_digest(context, 16, md5, NULL); - purple_cipher_context_destroy(context); + qq_get_md5(md5, QQ_KEY_LENGTH, buffer, filelen); } static gint _qq_get_file_header(qq_file_header *fh, guint8 *buf) @@ -265,7 +245,7 @@ ft_info *info; qd = (qq_data *) gc->proto_data; - g_return_val_if_fail(qd->session_key != NULL, -1); + info = (ft_info *) qd->xfer->data; raw_data = g_newa(guint8, MAX_PACKET_SIZE); @@ -395,7 +375,7 @@ guint8 *raw_data, filename_md5[QQ_KEY_LENGTH], file_md5[QQ_KEY_LENGTH]; gint bytes; guint32 fragment_size = 1000; - gchar *filename; + const char *filename; gint filename_len, filesize; qq_data *qd; ft_info *info; @@ -403,7 +383,7 @@ qd = (qq_data *) gc->proto_data; info = (ft_info *) qd->xfer->data; - filename = (gchar *) purple_xfer_get_filename(qd->xfer); + filename = purple_xfer_get_filename(qd->xfer); filesize = purple_xfer_get_size(qd->xfer); raw_data = g_newa(guint8, MAX_PACKET_SIZE); @@ -423,11 +403,11 @@ { case QQ_FILE_BASIC_INFO: filename_len = strlen(filename); - _fill_filename_md5(filename, filename_md5); + qq_get_md5(filename_md5, sizeof(filename_md5), (guint8 *)filename, filename_len); _fill_file_md5(purple_xfer_get_local_filename(qd->xfer), purple_xfer_get_size(qd->xfer), file_md5); - + info->fragment_num = (filesize - 1) / QQ_FILE_FRAGMENT_MAXLEN + 1; info->fragment_len = QQ_FILE_FRAGMENT_MAXLEN;
--- a/libpurple/protocols/qq/group_conv.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/group_conv.c Thu Aug 07 16:00:16 2008 +0000 @@ -27,8 +27,8 @@ #include "conversation.h" -#include "buddy_status.h" #include "group_conv.h" +#include "buddy_list.h" #include "utils.h" /* show group conversation window */
--- a/libpurple/protocols/qq/group_find.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/group_find.c Thu Aug 07 16:00:16 2008 +0000 @@ -138,6 +138,9 @@ group = NULL; while (list != NULL) { group = (qq_group *) list->data; + if (group->group_name_utf8 == NULL) { + continue; + } if (!g_ascii_strcasecmp(purple_conversation_get_name(conv), group->group_name_utf8)) break; list = list->next;
--- a/libpurple/protocols/qq/group_free.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/group_free.c Thu Aug 07 16:00:16 2008 +0000 @@ -26,7 +26,7 @@ #include "debug.h" -#include "buddy_status.h" +#include "buddy_list.h" #include "group_free.h" #include "group_network.h"
--- a/libpurple/protocols/qq/group_im.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/group_im.c Thu Aug 07 16:00:16 2008 +0000 @@ -65,7 +65,7 @@ g_return_if_fail(group != NULL && msg != NULL); msg_filtered = purple_markup_strip_html(msg); - purple_debug_info("QQ_MESG", "filterd qq qun mesg: %s\n", msg_filtered); + purple_debug_info("QQ_MESG", "Send qun mesg filterd: %s\n", msg_filtered); msg_len = strlen(msg_filtered); data_len = 7 + msg_len + QQ_SEND_IM_AFTER_MSG_LEN; @@ -311,9 +311,7 @@ qd = (qq_data *) gc->proto_data; - qq_hex_dump(PURPLE_DEBUG_INFO, "QQ", - data, data_len, - "group im hex dump"); + /* qq_hex_dump(PURPLE_DEBUG_INFO, "QQ", data, data_len, "group im hex dump"); */ im_group = g_newa(qq_recv_group_im, 1); @@ -379,6 +377,9 @@ conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, group->group_name_utf8, purple_connection_get_account(gc)); if (conv == NULL && purple_prefs_get_bool("/plugins/prpl/qq/prompt_group_msg_on_recv")) { + /* New conv should open, get group info*/ + qq_send_cmd_group_get_group_info(gc, group); + serv_got_joined_chat(gc, qd->channel++, group->group_name_utf8); conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, group->group_name_utf8, purple_connection_get_account(gc)); }
--- a/libpurple/protocols/qq/group_info.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/group_info.c Thu Aug 07 16:00:16 2008 +0000 @@ -27,12 +27,11 @@ #include "conversation.h" #include "debug.h" -#include "buddy_status.h" #include "char_conv.h" #include "group_find.h" #include "group_internal.h" #include "group_info.h" -#include "buddy_status.h" +#include "buddy_list.h" #include "group_network.h" /* we check who needs to update member info every minutes @@ -77,6 +76,27 @@ } /* send packet to get online group member, called by keep_alive */ +void qq_send_cmd_group_all_get_online_members(PurpleConnection *gc) +{ + qq_data *qd; + qq_group *group; + GList *list; + + g_return_if_fail(gc != NULL && gc->proto_data != NULL); + qd = (qq_data *) gc->proto_data; + + list = qd->groups; + while (list != NULL) { + group = (qq_group *) list->data; + if (group->my_status == QQ_GROUP_MEMBER_STATUS_IS_MEMBER || + group->my_status == QQ_GROUP_MEMBER_STATUS_IS_ADMIN) + /* no need to get info time and time again, online members enough */ + qq_send_cmd_group_get_online_members(gc, group); + + list = list->next; + } +} + void qq_send_cmd_group_get_online_members(PurpleConnection *gc, qq_group *group) { guint8 raw_data[16] = {0}; @@ -87,7 +107,7 @@ /* only get online members when conversation window is on */ if (NULL == purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT,group->group_name_utf8, purple_connection_get_account(gc))) { purple_debug(PURPLE_DEBUG_WARNING, "QQ", - "Conversation for \"%s\" is not open, ignore to get online members\n", group->group_name_utf8); + "Conversation \"%s\" is not open, ignore to get online members\n", group->group_name_utf8); return; } @@ -113,7 +133,7 @@ } if (num <= 0) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "No group member needs to to update info now.\n"); + purple_debug(PURPLE_DEBUG_INFO, "QQ", "No group member info needs to be updated now.\n"); return; } @@ -209,9 +229,11 @@ bytes += qq_get8(&organization, data + bytes); bytes += qq_get8(&role, data + bytes); + /* if(organization != 0 || role != 0) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "group member %d: organization=%d, role=%d\n", member_uid, organization, role); + purple_debug(PURPLE_DEBUG_INFO, "QQ_GRP", "%d, organization=%d, role=%d\n", member_uid, organization, role); } + */ member = qq_group_find_or_add_member(gc, group, member_uid); if (member != NULL) member->role = role; @@ -231,7 +253,7 @@ group->group_name_utf8, purple_connection_get_account(gc)); if(NULL == purple_conv) { purple_debug(PURPLE_DEBUG_WARNING, "QQ", - "Conversation for \"%s\" is not open, do not set topic\n", group->group_name_utf8); + "Conversation \"%s\" is not open, do not set topic\n", group->group_name_utf8); return; } @@ -322,7 +344,7 @@ bytes += qq_get8(&(member->gender), data + bytes); bytes += convert_as_pascal_string(data + bytes, &nick, QQ_CHARSET_DEFAULT); bytes += qq_get16(&unknown, data + bytes); - bytes += qq_get8(&(member->flag1), data + bytes); + bytes += qq_get8(&(member->ext_flag), data + bytes); bytes += qq_get8(&(member->comm_flag), data + bytes); /* filter \r\n in nick */ @@ -333,8 +355,8 @@ /* if (QQ_DEBUG) { purple_debug(PURPLE_DEBUG_INFO, "QQ", - "member [%09d]: flag1=0x%02x, comm_flag=0x%02x, nick=%s\n", - member_uid, member->flag1, member->comm_flag, member->nickname); + "member [%09d]: ext_flag=0x%02x, comm_flag=0x%02x, nick=%s\n", + member_uid, member->ext_flag, member->comm_flag, member->nickname); } */
--- a/libpurple/protocols/qq/group_info.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/group_info.h Thu Aug 07 16:00:16 2008 +0000 @@ -31,7 +31,10 @@ void qq_send_cmd_group_get_group_info(PurpleConnection *gc, qq_group *group); void qq_send_cmd_group_get_online_members(PurpleConnection *gc, qq_group *group); +void qq_send_cmd_group_all_get_online_members(PurpleConnection *gc); + void qq_send_cmd_group_get_members_info(PurpleConnection *gc, qq_group *group); + void qq_process_group_cmd_get_group_info(guint8 *data, gint len, PurpleConnection *gc); void qq_process_group_cmd_get_online_members(guint8 *data, gint len, PurpleConnection *gc); void qq_process_group_cmd_get_members_info(guint8 *data, gint len, PurpleConnection *gc);
--- a/libpurple/protocols/qq/group_network.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/group_network.c Thu Aug 07 16:00:16 2008 +0000 @@ -75,6 +75,30 @@ return "QQ_GROUP_CMD_GET_ONLINE_MEMBER"; case QQ_GROUP_CMD_GET_MEMBER_INFO: return "QQ_GROUP_CMD_GET_MEMBER_INFO"; + case QQ_GROUP_CMD_MODIFY_CARD: + return "QQ_GROUP_CMD_MODIFY_CARD"; + case QQ_GROUP_CMD_REQUEST_ALL_REALNAMES: + return "QQ_GROUP_CMD_REQUEST_ALL_REALNAMES"; + case QQ_GROUP_CMD_REQUEST_CARD: + return "QQ_GROUP_CMD_REQUEST_CARD"; + case QQ_GROUP_CMD_SEND_IM_EX: + return "QQ_GROUP_CMD_SEND_IM_EX"; + case QQ_GROUP_CMD_ADMIN: + return "QQ_GROUP_CMD_ADMIN"; + case QQ_GROUP_CMD_TRANSFER: + return "QQ_GROUP_CMD_TRANSFER"; + case QQ_GROUP_CMD_CREATE_TEMP_QUN: + return "QQ_GROUP_CMD_CREATE_TEMP_QUN"; + case QQ_GROUP_CMD_MODIFY_TEMP_QUN_MEMBER: + return "QQ_GROUP_CMD_MODIFY_TEMP_QUN_MEMBER"; + case QQ_GROUP_CMD_EXIT_TEMP_QUN: + return "QQ_GROUP_CMD_EXIT_TEMP_QUN"; + case QQ_GROUP_CMD_GET_TEMP_QUN_INFO: + return "QQ_GROUP_CMD_GET_TEMP_QUN_INFO"; + case QQ_GROUP_CMD_SEND_TEMP_QUN_IM: + return "QQ_GROUP_CMD_SEND_TEMP_QUN_IM"; + case QQ_GROUP_CMD_GET_TEMP_QUN_MEMBERS: + return "QQ_GROUP_CMD_GET_TEMP_QUN_MEMBERS"; default: return "Unknown QQ Group Command"; }
--- a/libpurple/protocols/qq/group_network.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/group_network.h Thu Aug 07 16:00:16 2008 +0000 @@ -42,7 +42,20 @@ QQ_GROUP_CMD_EXIT_GROUP = 0x09, QQ_GROUP_CMD_SEND_MSG = 0x0a, QQ_GROUP_CMD_GET_ONLINE_MEMBER = 0x0b, - QQ_GROUP_CMD_GET_MEMBER_INFO = 0x0c + QQ_GROUP_CMD_GET_MEMBER_INFO = 0x0c, + + QQ_GROUP_CMD_MODIFY_CARD = 0x0E, + QQ_GROUP_CMD_REQUEST_ALL_REALNAMES = 0x0F, + QQ_GROUP_CMD_REQUEST_CARD = 0x10, + QQ_GROUP_CMD_SEND_IM_EX = 0x1A, + QQ_GROUP_CMD_ADMIN = 0x1B, + QQ_GROUP_CMD_TRANSFER = 0x1C, + QQ_GROUP_CMD_CREATE_TEMP_QUN = 0x30, + QQ_GROUP_CMD_MODIFY_TEMP_QUN_MEMBER = 0x31, + QQ_GROUP_CMD_EXIT_TEMP_QUN = 0x32, + QQ_GROUP_CMD_GET_TEMP_QUN_INFO = 0x33, + QQ_GROUP_CMD_SEND_TEMP_QUN_IM = 0x35, + QQ_GROUP_CMD_GET_TEMP_QUN_MEMBERS = 0x37, } qq_group_cmd; typedef struct _group_packet {
--- a/libpurple/protocols/qq/header_info.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/header_info.c Thu Aug 07 16:00:16 2008 +0000 @@ -34,11 +34,31 @@ #define QQ_CLIENT_0B2F 0x0b2f /* GB QQ2003iii build 0117 */ #define QQ_CLIENT_0B35 0x0b35 /* GB QQ2003iii build 0304 (offical release) */ #define QQ_CLIENT_0B37 0x0b37 /* GB QQ2003iii build 0304 (April 05 updates) */ -#define QQ_CLIENT_0E1B 0x0e1b /* QQ2005? QQ2006? */ +#define QQ_CLIENT_0E1B 0x0e1b /* QQ2005 ? */ #define QQ_CLIENT_0E35 0x0e35 /* EN QQ2005 V05.0.200.020 */ #define QQ_CLIENT_0F15 0x0f15 /* QQ2006 Spring Festival build */ #define QQ_CLIENT_0F5F 0x0f5f /* QQ2006 final build */ +#define QQ_CLIENT_0C0B 0x0C0B /* QQ2004 */ +#define QQ_CLIENT_0C0D 0x0C0D /* QQ2004 preview*/ +#define QQ_CLIENT_0C21 0x0C21 /* QQ2004 */ +#define QQ_CLIENT_0C49 0x0C49 /* QQ2004II */ +#define QQ_CLIENT_0D05 0x0D05 /* QQ2005 beta1 */ +#define QQ_CLIENT_0D51 0x0D51 /* QQ2005 beta2 */ +#define QQ_CLIENT_0D61 0x0D61 /* QQ2005 */ +#define QQ_CLIENT_05A5 0x05A5 /* ? */ +#define QQ_CLIENT_05F1 0x0F15 /* QQ2006 Spring Festival */ +#define QQ_CLIENT_0F4B 0x0F4B /* QQ2006 Beta 3 */ + +#define QQ_CLIENT_1105 0x1105 /* QQ2007 beta4*/ +#define QQ_CLIENT_111D 0x111D /* QQ2007 */ +#define QQ_CLIENT_115B 0x115B /* QQ2008 */ +#define QQ_CLIENT_1203 0x1203 /* QQ2008 */ +#define QQ_CLIENT_1205 0x1205 /* QQ2008 */ +#define QQ_CLIENT_120B 0x120B /* QQ2008 July 8.0.978.400 */ +#define QQ_CLIENT_1412 0x1412 /* QQMac 1.0 preview1 build 670 */ +#define QQ_CLIENT_1441 0x1441 /* QQ2009 preview2 */ + #define QQ_SERVER_0100 0x0100 /* server */ /* given command alias, return the command name accordingly */ @@ -55,10 +75,10 @@ return "QQ_CMD_SEARCH_USER"; case QQ_CMD_GET_USER_INFO: return "QQ_CMD_GET_USER_INFO"; - case QQ_CMD_ADD_FRIEND_WO_AUTH: - return "QQ_CMD_ADD_FRIEND_WO_AUTH"; - case QQ_CMD_DEL_FRIEND: - return "QQ_CMD_DEL_FRIEND"; + case QQ_CMD_ADD_BUDDY_WO_AUTH: + return "QQ_CMD_ADD_BUDDY_WO_AUTH"; + case QQ_CMD_DEL_BUDDY: + return "QQ_CMD_DEL_BUDDY"; case QQ_CMD_BUDDY_AUTH: return "QQ_CMD_BUDDY_AUTH"; case QQ_CMD_CHANGE_ONLINE_STATUS: @@ -73,29 +93,29 @@ return "QQ_CMD_REMOVE_SELF"; case QQ_CMD_LOGIN: return "QQ_CMD_LOGIN"; - case QQ_CMD_GET_FRIENDS_LIST: - return "QQ_CMD_GET_FRIENDS_LIST"; - case QQ_CMD_GET_FRIENDS_ONLINE: - return "QQ_CMD_GET_FRIENDS_ONLINE"; + case QQ_CMD_GET_BUDDIES_LIST: + return "QQ_CMD_GET_BUDDIES_LIST"; + case QQ_CMD_GET_BUDDIES_ONLINE: + return "QQ_CMD_GET_BUDDIES_ONLINE"; case QQ_CMD_GROUP_CMD: return "QQ_CMD_GROUP_CMD"; case QQ_CMD_GET_ALL_LIST_WITH_GROUP: return "QQ_CMD_GET_ALL_LIST_WITH_GROUP"; case QQ_CMD_GET_LEVEL: return "QQ_CMD_GET_LEVEL"; - case QQ_CMD_REQUEST_LOGIN_TOKEN: - return "QQ_CMD_REQUEST_LOGIN_TOKEN"; + case QQ_CMD_TOKEN: + return "QQ_CMD_TOKEN"; case QQ_CMD_RECV_MSG_SYS: return "QQ_CMD_RECV_MSG_SYS"; - case QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS: - return "QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS"; + case QQ_CMD_RECV_MSG_BUDDY_CHANGE_STATUS: + return "QQ_CMD_RECV_MSG_BUDDY_CHANGE_STATUS"; default: - return "UNKNOWN_TYPE"; + return "Unknown"; } } /* given source tag, return its description accordingly */ -const gchar *qq_get_source_str(gint source) +const gchar *qq_get_ver_desc(gint source) { switch (source) { case QQ_CLIENT_062E: @@ -114,17 +134,46 @@ return "GB QQ2003iii build 0304"; case QQ_CLIENT_0B37: return "GB QQ2003iii build 0304 (April 5 update)"; + case QQ_CLIENT_0C0B: + return "QQ2004"; + case QQ_CLIENT_0C0D: + return "QQ2004 preview"; + case QQ_CLIENT_0C21: + return "QQ2004"; + case QQ_CLIENT_0C49: + return "QQ2004II"; + case QQ_CLIENT_0D05: + return "QQ2005 beta1"; + case QQ_CLIENT_0D51: + return "QQ2005 beta2"; + case QQ_CLIENT_0D61: + return "QQ2005"; case QQ_CLIENT_0E1B: return "QQ2005 or QQ2006"; case QQ_CLIENT_0E35: return "En QQ2005 V05.0.200.020"; case QQ_CLIENT_0F15: - return "QQ2006 Spring Festival build"; + return "QQ2006 Spring Festival"; + case QQ_CLIENT_0F4B: + return "QQ2006 beta3"; case QQ_CLIENT_0F5F: return "QQ2006 final build"; + case QQ_CLIENT_1105: + return "QQ2007 beta4"; + case QQ_CLIENT_111D: + return "QQ2007"; + case QQ_CLIENT_115B: + case QQ_CLIENT_1203: + case QQ_CLIENT_1205: + case QQ_CLIENT_120B: + return "QQ2008"; + case QQ_CLIENT_1412: + return "QQMac 1.0 preview1 build 670"; + case QQ_CLIENT_1441: + return "QQ2009 preview2"; case QQ_SERVER_0100: return "QQ Server 0100"; default: - return "QQ unknown version"; + return "Unknown"; } }
--- a/libpurple/protocols/qq/header_info.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/header_info.h Thu Aug 07 16:00:16 2008 +0000 @@ -42,8 +42,8 @@ QQ_CMD_UPDATE_INFO = 0x0004, /* update information */ QQ_CMD_SEARCH_USER = 0x0005, /* search for user */ QQ_CMD_GET_USER_INFO = 0x0006, /* get user information */ - QQ_CMD_ADD_FRIEND_WO_AUTH = 0x0009, /* add friend without auth */ - QQ_CMD_DEL_FRIEND = 0x000a, /* delete a friend */ + QQ_CMD_ADD_BUDDY_WO_AUTH = 0x0009, /* add buddy without auth */ + QQ_CMD_DEL_BUDDY = 0x000a, /* delete a buddy */ QQ_CMD_BUDDY_AUTH = 0x000b, /* buddy authentication */ QQ_CMD_CHANGE_ONLINE_STATUS = 0x000d, /* change my online status */ QQ_CMD_ACK_SYS_MSG = 0x0012, /* ack system message */ @@ -53,19 +53,19 @@ QQ_CMD_REQUEST_KEY = 0x001d, /* request key for file transfer */ QQ_CMD_CELL_PHONE_1 = 0x0021, /* cell phone 1 */ QQ_CMD_LOGIN = 0x0022, /* login */ - QQ_CMD_GET_FRIENDS_LIST = 0x0026, /* retrieve my freinds list */ - QQ_CMD_GET_FRIENDS_ONLINE = 0x0027, /* get my online friends list */ + QQ_CMD_GET_BUDDIES_LIST = 0x0026, /* get buddies list */ + QQ_CMD_GET_BUDDIES_ONLINE = 0x0027, /* get online buddies list */ QQ_CMD_CELL_PHONE_2 = 0x0029, /* cell phone 2 */ QQ_CMD_GROUP_CMD = 0x0030, /* group command */ QQ_CMD_GET_ALL_LIST_WITH_GROUP = 0x0058, QQ_CMD_GET_LEVEL = 0x005C, /* get level for one or more buddies */ - QQ_CMD_REQUEST_LOGIN_TOKEN = 0x0062, /* get login token */ + QQ_CMD_TOKEN = 0x0062, /* get login token */ QQ_CMD_RECV_MSG_SYS = 0x0080, /* receive a system message */ - QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS = 0x0081, /* friends change status */ + QQ_CMD_RECV_MSG_BUDDY_CHANGE_STATUS = 0x0081, /* buddy change status */ }; const gchar *qq_get_cmd_desc(gint type); -const gchar *qq_get_source_str(gint source); +const gchar *qq_get_ver_desc(gint source); #endif
--- a/libpurple/protocols/qq/im.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/im.c Thu Aug 07 16:00:16 2008 +0000 @@ -79,7 +79,7 @@ guint16 sender_ver; guint32 sender_uid; guint32 receiver_uid; - guint8 *session_md5; + guint8 session_md5[QQ_KEY_LENGTH]; guint16 normal_im_type; }; @@ -109,7 +109,7 @@ guint32 sender_uid; guint32 receiver_uid; guint32 server_im_seq; - guint8 sender_ip[4]; + struct in_addr sender_ip; guint16 sender_port; guint16 im_type; }; @@ -179,7 +179,7 @@ send_im_tail[5] = 0x00; send_im_tail[6] = 0x86; send_im_tail[7] = 0x22; /* encoding, 0x8622=GB, 0x0000=EN, define BIG5 support here */ - qq_show_packet("QQ_MESG", send_im_tail, tail_len); + /* qq_show_packet("QQ_MESG", send_im_tail, tail_len); */ return (guint8 *) send_im_tail; } @@ -237,10 +237,7 @@ bytes += qq_get16(&(common->sender_ver), data + bytes); bytes += qq_get32(&(common->sender_uid), data + bytes); bytes += qq_get32(&(common->receiver_uid), data + bytes); - - common->session_md5 = g_memdup(data + bytes, QQ_KEY_LENGTH); - bytes += QQ_KEY_LENGTH; - + bytes += qq_getdata(common->session_md5, QQ_KEY_LENGTH, data + bytes); bytes += qq_get16(&(common->normal_im_type), data + bytes); if (bytes != 28) { /* read common place fail */ @@ -261,6 +258,8 @@ qq_data *qd; qq_recv_normal_im_text *im_text; gint bytes = 0; + PurpleBuddy *b; + qq_buddy *qq_b; g_return_if_fail(common != NULL); qd = (qq_data *) gc->proto_data; @@ -308,9 +307,16 @@ } /* if im_text->msg_type */ name = uid_to_purple_name(common->sender_uid); - if (purple_find_buddy(gc->account, name) == NULL) + b = purple_find_buddy(gc->account, name); + if (b == NULL) { qq_add_buddy_by_recv_packet(gc, common->sender_uid, FALSE, TRUE); - + b = purple_find_buddy(gc->account, name); + } + qq_b = (b == NULL) ? NULL : (qq_buddy *) b->proto_data; + if (qq_b != NULL) { + qq_b->client_version = common->sender_ver; + } + purple_msg_type = (im_text->msg_type == QQ_IM_AUTO_REPLY) ? PURPLE_MESSAGE_AUTO_RESP : 0; msg_with_purple_smiley = qq_smiley_to_purple(im_text->msg); @@ -353,9 +359,9 @@ switch (common->normal_im_type) { case QQ_NORMAL_IM_TEXT: purple_debug (PURPLE_DEBUG_INFO, "QQ", - "Normal IM, text type:\n [%d] => [%d], src: %s\n", + "Normal IM, text type:\n [%d] => [%d], src: %s (%04X)\n", common->sender_uid, common->receiver_uid, - qq_get_source_str (common->sender_ver)); + qq_get_ver_desc (common->sender_ver), common->sender_ver); if (bytes >= len - 1) { purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Received normal IM text is empty\n"); return; @@ -387,11 +393,8 @@ "Normal IM, unprocessed type [0x%04x], len %d\n", common->normal_im_type, im_unprocessed->length); qq_show_packet ("QQ unk-im", im_unprocessed->unknown, im_unprocessed->length); - g_free (common->session_md5); return; } - - g_free (common->session_md5); } /* process im from system administrator */ @@ -603,7 +606,7 @@ bytes += qq_get32(&(im_header->receiver_uid), data + bytes); bytes += qq_get32(&(im_header->server_im_seq), data + bytes); /* if the message is delivered via server, it is server IP/port */ - bytes += qq_getdata((guint8 *) & (im_header->sender_ip), 4, data + bytes); + bytes += qq_getIP(&(im_header->sender_ip), data + bytes); bytes += qq_get16(&(im_header->sender_port), data + bytes); bytes += qq_get16(&(im_header->im_type), data + bytes); /* im_header prepared */
--- a/libpurple/protocols/qq/keep_alive.c Thu Jul 31 06:23:55 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,180 +0,0 @@ -/** - * @file keep_alive.c - * - * purple - * - * Purple is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - * - * - * OICQ encryption algorithm - * Convert from ASM code provided by PerlOICQ - * - * Puzzlebird, Nov-Dec 2002 - */ - -#include "internal.h" - -#include "debug.h" -#include "server.h" - -#include "buddy_info.h" -#include "buddy_list.h" -#include "buddy_status.h" -#include "crypt.h" -#include "header_info.h" -#include "keep_alive.h" -#include "packet_parse.h" -#include "qq_network.h" -#include "utils.h" - -#define QQ_UPDATE_ONLINE_INTERVAL 300 /* in sec */ - -/* send keep-alive packet to QQ server (it is a heart-beat) */ -void qq_send_packet_keep_alive(PurpleConnection *gc) -{ - qq_data *qd; - guint8 raw_data[16] = {0}; - gint bytes= 0; - - qd = (qq_data *) gc->proto_data; - - /* In fact, we can send whatever we like to server - * with this command, server return the same result including - * the amount of online QQ users, my ip and port */ - bytes += qq_put32(raw_data + bytes, qd->uid); - - qq_send_cmd(qd, QQ_CMD_KEEP_ALIVE, raw_data, 4); -} - -/* parse the return of keep-alive packet, it includes some system information */ -void qq_process_keep_alive_reply(guint8 *buf, gint buf_len, PurpleConnection *gc) -{ - qq_data *qd; - gint len; - gchar **segments; - guint8 *data; - - g_return_if_fail(buf != NULL && buf_len != 0); - - qd = (qq_data *) gc->proto_data; - len = buf_len; - data = g_newa(guint8, len); - - if (qq_decrypt(buf, buf_len, qd->session_key, data, &len)) { - /* the last one is 60, don't know what it is */ - if (NULL == (segments = split_data(data, len, "\x1f", 6))) - return; - /* segments[0] and segment[1] are all 0x30 ("0") */ - qd->all_online = strtol(segments[2], NULL, 10); - if(0 == qd->all_online) - purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, - _("Keep alive error")); - g_free(qd->my_ip); - qd->my_ip = g_strdup(segments[3]); - qd->my_port = strtol(segments[4], NULL, 10); - g_strfreev(segments); - } else - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Error decrypt keep alive reply\n"); - - /* we refresh buddies's online status periodically */ - /* qd->last_get_online is updated when setting get_buddies_online packet */ - if ((time(NULL) - qd->last_get_online) >= QQ_UPDATE_ONLINE_INTERVAL) - qq_send_packet_get_buddies_online(gc, QQ_FRIENDS_ONLINE_POSITION_START); -} - -/* refresh all buddies online/offline, - * after receiving reply for get_buddies_online packet */ -void qq_refresh_all_buddy_status(PurpleConnection *gc) -{ - time_t now; - GList *list; - qq_data *qd; - qq_buddy *q_bud; - - qd = (qq_data *) (gc->proto_data); - now = time(NULL); - list = qd->buddies; - - while (list != NULL) { - q_bud = (qq_buddy *) list->data; - if (q_bud != NULL && now > q_bud->last_refresh + QQ_UPDATE_ONLINE_INTERVAL - && q_bud->status != QQ_BUDDY_ONLINE_INVISIBLE) { - q_bud->status = QQ_BUDDY_ONLINE_OFFLINE; - qq_update_buddy_contact(gc, q_bud); - } - list = list->next; - } -} - -/*TODO: maybe this should be qq_update_buddy_status() ?*/ -void qq_update_buddy_contact(PurpleConnection *gc, qq_buddy *q_bud) -{ - gchar *name; - PurpleBuddy *bud; - gchar *status_id; - - g_return_if_fail(q_bud != NULL); - - name = uid_to_purple_name(q_bud->uid); - bud = purple_find_buddy(gc->account, name); - g_return_if_fail(bud != NULL); - - if (bud != NULL) { - purple_blist_server_alias_buddy(bud, q_bud->nickname); /* server */ - q_bud->last_refresh = time(NULL); - - /* purple supports signon and idle time - * but it is not much use for QQ, I do not use them */ - /* serv_got_update(gc, name, online, 0, q_bud->signon, q_bud->idle, bud->uc); */ - status_id = "available"; - switch(q_bud->status) { - case QQ_BUDDY_OFFLINE: - status_id = "offline"; - break; - case QQ_BUDDY_ONLINE_NORMAL: - status_id = "available"; - break; - case QQ_BUDDY_ONLINE_OFFLINE: - status_id = "offline"; - break; - case QQ_BUDDY_ONLINE_AWAY: - status_id = "away"; - break; - case QQ_BUDDY_ONLINE_INVISIBLE: - status_id = "invisible"; - break; - default: - status_id = "invisible"; - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "unknown status: %x\n", q_bud->status); - break; - } - purple_debug(PURPLE_DEBUG_INFO, "QQ", "set buddy %d to %s\n", q_bud->uid, status_id); - purple_prpl_got_user_status(gc->account, name, status_id, NULL); - - if (q_bud->comm_flag & QQ_COMM_FLAG_BIND_MOBILE && q_bud->status != QQ_BUDDY_OFFLINE) - purple_prpl_got_user_status(gc->account, name, "mobile", NULL); - else - purple_prpl_got_user_status_deactive(gc->account, name, "mobile"); - } else { - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "unknown buddy: %d\n", q_bud->uid); - } - - purple_debug(PURPLE_DEBUG_INFO, "QQ", "qq_update_buddy_contact, client=%04x\n", q_bud->client_version); - g_free(name); -}
--- a/libpurple/protocols/qq/keep_alive.h Thu Jul 31 06:23:55 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/** - * @file keep_alive.h - * - * purple - * - * Purple is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - * - */ - -#ifndef _QQ_KEEP_ALIVE_H_ -#define _QQ_KEEP_ALIVE_H_ - -#include <glib.h> -#include "connection.h" -#include "qq.h" - -void qq_send_packet_keep_alive(PurpleConnection *gc); - -void qq_process_keep_alive_reply(guint8 *buf, gint buf_len, PurpleConnection *gc); -void qq_refresh_all_buddy_status(PurpleConnection *gc); - -void qq_update_buddy_contact(PurpleConnection *gc, qq_buddy *q_bud); - -#endif
--- a/libpurple/protocols/qq/login_logout.c Thu Jul 31 06:23:55 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,520 +0,0 @@ -/** - * @file login_logout.c - * - * purple - * - * Purple is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - */ - -#include "debug.h" -#include "internal.h" -#include "server.h" -#include "cipher.h" - -#include "buddy_info.h" -#include "buddy_list.h" -#include "buddy_status.h" -#include "char_conv.h" -#include "crypt.h" -#include "group.h" -#include "header_info.h" -#include "login_logout.h" -#include "packet_parse.h" -#include "qq.h" -#include "qq_network.h" -#include "utils.h" - -#define QQ_LOGIN_DATA_LENGTH 416 -#define QQ_LOGIN_REPLY_OK_PACKET_LEN 139 -#define QQ_LOGIN_REPLY_REDIRECT_PACKET_LEN 11 - -#define QQ_REQUEST_LOGIN_TOKEN_REPLY_OK 0x00 - -#define QQ_LOGIN_REPLY_OK 0x00 -#define QQ_LOGIN_REPLY_REDIRECT 0x01 -#define QQ_LOGIN_REPLY_PWD_ERROR 0x05 -#define QQ_LOGIN_REPLY_MISC_ERROR 0xff /* defined by myself */ - -/* for QQ 2003iii 0117, fixed value */ -/* static const guint8 login_23_51[29] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbf, 0x14, 0x11, 0x20, - 0x03, 0x9d, 0xb2, 0xe6, 0xb3, 0x11, 0xb7, 0x13, - 0x95, 0x67, 0xda, 0x2c, 0x01 -}; */ - -/* for QQ 2003iii 0304, fixed value */ -/* -static const guint8 login_23_51[29] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x9a, 0x93, 0xfe, 0x85, - 0xd3, 0xd9, 0x2a, 0x41, 0xc8, 0x0d, 0xff, 0xb6, - 0x40, 0xb8, 0xac, 0x32, 0x01 -}; -*/ - -/* for QQ 2005? copy from lumaqq */ -/* FIXME: change to guint8 */ -static const guint8 login_23_51[29] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x86, 0xcc, 0x4c, 0x35, - 0x2c, 0xd3, 0x73, 0x6c, 0x14, 0xf6, 0xf6, 0xaf, - 0xc3, 0xfa, 0x33, 0xa4, 0x01 -}; - -static const guint8 login_53_68[16] = { - 0x8D, 0x8B, 0xFA, 0xEC, 0xD5, 0x52, 0x17, 0x4A, - 0x86, 0xF9, 0xA7, 0x75, 0xE6, 0x32, 0xD1, 0x6D -}; - -static const guint8 login_100_bytes[100] = { - 0x40, 0x0B, 0x04, 0x02, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xE9, 0x03, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF3, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xED, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xEC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xEE, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xEF, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xEB, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00 -}; - - -/* fixed value, not affected by version, or mac address */ -/* -static const guint8 login_53_68[16] = { - 0x82, 0x2a, 0x91, 0xfd, 0xa5, 0xca, 0x67, 0x4c, - 0xac, 0x81, 0x1f, 0x6f, 0x52, 0x05, 0xa7, 0xbf -}; -*/ - - -typedef struct _qq_login_reply_ok qq_login_reply_ok_packet; -typedef struct _qq_login_reply_redirect qq_login_reply_redirect_packet; - -struct _qq_login_reply_ok { - guint8 result; - guint8 *session_key; - guint32 uid; - guint8 client_ip[4]; /* those detected by server */ - guint16 client_port; - guint8 server_ip[4]; - guint16 server_port; - time_t login_time; - guint8 unknown1[26]; - guint8 unknown_server1_ip[4]; - guint16 unknown_server1_port; - guint8 unknown_server2_ip[4]; - guint16 unknown_server2_port; - guint16 unknown2; /* 0x0001 */ - guint16 unknown3; /* 0x0000 */ - guint8 unknown4[32]; - guint8 unknown5[12]; - guint8 last_client_ip[4]; - time_t last_login_time; - guint8 unknown6[8]; -}; - -struct _qq_login_reply_redirect { - guint8 result; - guint32 uid; - guint8 new_server_ip[4]; - guint16 new_server_port; -}; - -/* generate a md5 key using uid and session_key */ -static guint8 *gen_session_md5(gint uid, guint8 *session_key) -{ - guint8 *src, md5_str[QQ_KEY_LENGTH]; - PurpleCipher *cipher; - PurpleCipherContext *context; - - src = g_newa(guint8, 20); - /* bug found by QuLogic */ - memcpy(src, &uid, sizeof(uid)); - memcpy(src + sizeof(uid), session_key, QQ_KEY_LENGTH); - - cipher = purple_ciphers_find_cipher("md5"); - context = purple_cipher_context_new(cipher, NULL); - purple_cipher_context_append(context, src, 20); - purple_cipher_context_digest(context, sizeof(md5_str), md5_str, NULL); - purple_cipher_context_destroy(context); - - return g_memdup(md5_str, QQ_KEY_LENGTH); -} - -/* process login reply which says OK */ -static gint _qq_process_login_ok(PurpleConnection *gc, guint8 *data, gint len) -{ - gint bytes; - qq_data *qd; - qq_login_reply_ok_packet lrop; - - qd = (qq_data *) gc->proto_data; - /* FIXME, check QQ_LOGIN_REPLY_OK_PACKET_LEN here */ - bytes = 0; - - /* 000-000: reply code */ - bytes += qq_get8(&lrop.result, data + bytes); - /* 001-016: session key */ - lrop.session_key = g_memdup(data + bytes, QQ_KEY_LENGTH); - bytes += QQ_KEY_LENGTH; - purple_debug(PURPLE_DEBUG_INFO, "QQ", "Get session_key done\n"); - /* 017-020: login uid */ - bytes += qq_get32(&lrop.uid, data + bytes); - /* 021-024: server detected user public IP */ - bytes += qq_getdata((guint8 *) &lrop.client_ip, 4, data + bytes); - /* 025-026: server detected user port */ - bytes += qq_get16(&lrop.client_port, data + bytes); - /* 027-030: server detected itself ip 127.0.0.1 ? */ - bytes += qq_getdata((guint8 *) &lrop.server_ip, 4, data + bytes); - /* 031-032: server listening port */ - bytes += qq_get16(&lrop.server_port, data + bytes); - /* 033-036: login time for current session */ - bytes += qq_getime(&lrop.login_time, data + bytes); - /* 037-062: 26 bytes, unknown */ - bytes += qq_getdata((guint8 *) &lrop.unknown1, 26, data + bytes); - /* 063-066: unknown server1 ip address */ - bytes += qq_getdata((guint8 *) &lrop.unknown_server1_ip, 4, data + bytes); - /* 067-068: unknown server1 port */ - bytes += qq_get16(&lrop.unknown_server1_port, data + bytes); - /* 069-072: unknown server2 ip address */ - bytes += qq_getdata((guint8 *) &lrop.unknown_server2_ip, 4, data + bytes); - /* 073-074: unknown server2 port */ - bytes += qq_get16(&lrop.unknown_server2_port, data + bytes); - /* 075-076: 2 bytes unknown */ - bytes += qq_get16(&lrop.unknown2, data + bytes); - /* 077-078: 2 bytes unknown */ - bytes += qq_get16(&lrop.unknown3, data + bytes); - /* 079-110: 32 bytes unknown */ - bytes += qq_getdata((guint8 *) &lrop.unknown4, 32, data + bytes); - /* 111-122: 12 bytes unknown */ - bytes += qq_getdata((guint8 *) &lrop.unknown5, 12, data + bytes); - /* 123-126: login IP of last session */ - bytes += qq_getdata((guint8 *) &lrop.last_client_ip, 4, data + bytes); - /* 127-130: login time of last session */ - bytes += qq_getime(&lrop.last_login_time, data + bytes); - /* 131-138: 8 bytes unknown */ - bytes += qq_getdata((guint8 *) &lrop.unknown6, 8, data + bytes); - - if (bytes != QQ_LOGIN_REPLY_OK_PACKET_LEN) { /* fail parsing login info */ - purple_debug(PURPLE_DEBUG_WARNING, "QQ", - "Fail parsing login info, expect %d bytes, read %d bytes\n", - QQ_LOGIN_REPLY_OK_PACKET_LEN, bytes); - } /* but we still go on as login OK */ - - g_return_val_if_fail(qd->session_key == NULL, QQ_LOGIN_REPLY_MISC_ERROR); - qd->session_key = lrop.session_key; - - g_return_val_if_fail(qd->session_md5 == NULL, QQ_LOGIN_REPLY_MISC_ERROR); - qd->session_md5 = gen_session_md5(qd->uid, qd->session_key); - - g_return_val_if_fail(qd->my_ip == NULL, QQ_LOGIN_REPLY_MISC_ERROR); - qd->my_ip = gen_ip_str(lrop.client_ip); - - qd->my_port = lrop.client_port; - qd->login_time = lrop.login_time; - qd->last_login_time = lrop.last_login_time; - qd->last_login_ip = gen_ip_str(lrop.last_client_ip); - - purple_connection_set_state(gc, PURPLE_CONNECTED); - qd->logged_in = TRUE; /* must be defined after sev_finish_login */ - - /* now initiate QQ Qun, do it first as it may take longer to finish */ - qq_group_init(gc); - - /* Now goes on updating my icon/nickname, not showing info_window */ - qd->modifying_face = FALSE; - qq_send_packet_get_info(gc, qd->uid, FALSE); - /* grab my level */ - qq_send_packet_get_level(gc, qd->uid); - - qq_send_packet_change_status(gc); - - /* refresh buddies */ - qq_send_packet_get_buddies_list(gc, QQ_FRIENDS_LIST_POSITION_START); - /* refresh groups */ - qq_send_packet_get_all_list_with_group(gc, QQ_FRIENDS_LIST_POSITION_START); - - return QQ_LOGIN_REPLY_OK; -} - -/* process login reply packet which includes redirected new server address */ -static gint _qq_process_login_redirect(PurpleConnection *gc, guint8 *data, gint len) -{ - gint bytes, ret; - qq_data *qd; - qq_login_reply_redirect_packet lrrp; - - qd = (qq_data *) gc->proto_data; - bytes = 0; - /* 000-000: reply code */ - bytes += qq_get8(&lrrp.result, data + bytes); - /* 001-004: login uid */ - bytes += qq_get32(&lrrp.uid, data + bytes); - /* 005-008: redirected new server IP */ - bytes += qq_getdata(lrrp.new_server_ip, 4, data + bytes); - /* 009-010: redirected new server port */ - bytes += qq_get16(&lrrp.new_server_port, data + bytes); - - if (bytes != QQ_LOGIN_REPLY_REDIRECT_PACKET_LEN) { - purple_debug(PURPLE_DEBUG_ERROR, "QQ", - "Fail parsing login redirect packet, expect %d bytes, read %d bytes\n", - QQ_LOGIN_REPLY_REDIRECT_PACKET_LEN, bytes); - ret = QQ_LOGIN_REPLY_MISC_ERROR; - } else { - /* redirect to new server, do not disconnect or connect here - * those connect should be called at packet_process */ - if (qd->real_hostname) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "free real_hostname\n"); - g_free(qd->real_hostname); - qd->real_hostname = NULL; - } - qd->real_hostname = gen_ip_str(lrrp.new_server_ip); - qd->real_port = lrrp.new_server_port; - qd->is_redirect = TRUE; - - purple_debug(PURPLE_DEBUG_WARNING, "QQ", - "Redirected to new server: %s:%d\n", qd->real_hostname, qd->real_port); - - ret = QQ_LOGIN_REPLY_REDIRECT; - } - - return ret; -} - -/* process login reply which says wrong password */ -static gint _qq_process_login_wrong_pwd(PurpleConnection *gc, guint8 *data, gint len) -{ - gchar *server_reply, *server_reply_utf8; - server_reply = g_new0(gchar, len); - g_memmove(server_reply, data + 1, len - 1); - server_reply_utf8 = qq_to_utf8(server_reply, QQ_CHARSET_DEFAULT); - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Wrong password, server msg in UTF8: %s\n", server_reply_utf8); - g_free(server_reply); - g_free(server_reply_utf8); - - return QQ_LOGIN_REPLY_PWD_ERROR; -} - -/* request before login */ -void qq_send_packet_request_login_token(PurpleConnection *gc) -{ - qq_data *qd; - guint8 buf[16] = {0}; - gint bytes = 0; - - g_return_if_fail(gc != NULL && gc->proto_data != NULL); - qd = (qq_data *) gc->proto_data; - - bytes += qq_put8(buf + bytes, 0); - - qq_send_data(qd, QQ_CMD_REQUEST_LOGIN_TOKEN, buf, bytes); -} - -/* send login packet to QQ server */ -static void qq_send_packet_login(PurpleConnection *gc, guint8 token_length, guint8 *token) -{ - qq_data *qd; - guint8 *buf, *raw_data; - gint bytes; - guint8 *encrypted_data; - gint encrypted_len; - - g_return_if_fail(gc != NULL && gc->proto_data != NULL); - qd = (qq_data *) gc->proto_data; - - raw_data = g_newa(guint8, QQ_LOGIN_DATA_LENGTH); - memset(raw_data, 0, QQ_LOGIN_DATA_LENGTH); - - encrypted_data = g_newa(guint8, QQ_LOGIN_DATA_LENGTH + 16); /* 16 bytes more */ - if (qd->inikey) { - g_free(qd->inikey); - } - qd->inikey = (guint8 *) g_strnfill(QQ_KEY_LENGTH, 0x01); - - bytes = 0; - /* now generate the encrypted data - * 000-015 use pwkey as key to encrypt empty string */ - qq_encrypt((guint8 *) "", 0, qd->pwkey, raw_data + bytes, &encrypted_len); - bytes += 16; - /* 016-016 */ - bytes += qq_put8(raw_data + bytes, 0x00); - /* 017-020, used to be IP, now zero */ - bytes += qq_put32(raw_data + bytes, 0x00000000); - /* 021-022, used to be port, now zero */ - bytes += qq_put16(raw_data + bytes, 0x0000); - /* 023-051, fixed value, unknown */ - bytes += qq_putdata(raw_data + bytes, login_23_51, 29); - /* 052-052, login mode */ - bytes += qq_put8(raw_data + bytes, qd->login_mode); - /* 053-068, fixed value, maybe related to per machine */ - bytes += qq_putdata(raw_data + bytes, login_53_68, 16); - /* 069, login token length */ - bytes += qq_put8(raw_data + bytes, token_length); - /* 070-093, login token, normally 24 bytes */ - bytes += qq_putdata(raw_data + bytes, token, token_length); - /* 100 bytes unknown */ - bytes += qq_putdata(raw_data + bytes, login_100_bytes, 100); - /* all zero left */ - - qq_encrypt(raw_data, QQ_LOGIN_DATA_LENGTH, qd->inikey, encrypted_data, &encrypted_len); - - buf = g_newa(guint8, MAX_PACKET_SIZE); - memset(buf, 0, MAX_PACKET_SIZE); - bytes = 0; - bytes += qq_putdata(buf + bytes, qd->inikey, QQ_KEY_LENGTH); - bytes += qq_putdata(buf + bytes, encrypted_data, encrypted_len); - - qq_send_data(qd, QQ_CMD_LOGIN, buf, bytes); -} - -void qq_process_request_login_token_reply(guint8 *buf, gint buf_len, PurpleConnection *gc) -{ - qq_data *qd; - gchar *error_msg; - - g_return_if_fail(buf != NULL && buf_len != 0); - - qd = (qq_data *) gc->proto_data; - - if (buf[0] == QQ_REQUEST_LOGIN_TOKEN_REPLY_OK) { - if (buf[1] != buf_len-2) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", - "Malformed login token reply packet. Packet specifies length of %d, actual length is %d\n", buf[1], buf_len-2); - purple_debug(PURPLE_DEBUG_INFO, "QQ", - "Attempting to proceed with the actual packet length.\n"); - } - qq_hex_dump(PURPLE_DEBUG_INFO, "QQ", - buf+2, buf_len-2, - "<<< got a token -> [default] decrypt and dump"); - qq_send_packet_login(gc, buf_len-2, buf+2); - } else { - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Unknown request login token reply code : %d\n", buf[0]); - qq_hex_dump(PURPLE_DEBUG_WARNING, "QQ", - buf, buf_len, - ">>> [default] decrypt and dump"); - error_msg = try_dump_as_gbk(buf, buf_len); - if (error_msg) { - purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, error_msg); - g_free(error_msg); - } else { - purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, - _("Error requesting login token")); - } - } -} - -/* send logout packets to QQ server */ -void qq_send_packet_logout(PurpleConnection *gc) -{ - gint i; - qq_data *qd; - - qd = (qq_data *) gc->proto_data; - for (i = 0; i < 4; i++) - qq_send_cmd_detail(qd, QQ_CMD_LOGOUT, 0xffff, FALSE, qd->pwkey, QQ_KEY_LENGTH); - - qd->logged_in = FALSE; /* update login status AFTER sending logout packets */ -} - -/* process the login reply packet */ -void qq_process_login_reply(guint8 *buf, gint buf_len, PurpleConnection *gc) -{ - gint len, ret, bytes; - guint8 *data; - qq_data *qd; - gchar* error_msg; - - g_return_if_fail(buf != NULL && buf_len != 0); - - qd = (qq_data *) gc->proto_data; - len = buf_len; - data = g_newa(guint8, len); - - if (qq_decrypt(buf, buf_len, qd->pwkey, data, &len)) { - /* should be able to decrypt with pwkey */ - purple_debug(PURPLE_DEBUG_INFO, "QQ", "Decrypt login reply packet with pwkey, %d bytes\n", len); - if (data[0] == QQ_LOGIN_REPLY_OK) { - ret = _qq_process_login_ok(gc, data, len); - } else { - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Unknown login reply code : %d\n", data[0]); - ret = QQ_LOGIN_REPLY_MISC_ERROR; - } - } else { /* decrypt with pwkey error */ - len = buf_len; /* reset len, decrypt will fail if len is too short */ - if (qq_decrypt(buf, buf_len, qd->inikey, data, &len)) { - /* decrypt ok with inipwd, it might be password error */ - purple_debug(PURPLE_DEBUG_WARNING, "QQ", - "Decrypt login reply packet with inikey, %d bytes\n", len); - bytes = 0; - switch (data[0]) { - case QQ_LOGIN_REPLY_REDIRECT: - ret = _qq_process_login_redirect(gc, data, len); - break; - case QQ_LOGIN_REPLY_PWD_ERROR: - ret = _qq_process_login_wrong_pwd(gc, data, len); - break; - default: - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Unknown reply code: %d\n", data[0]); - qq_hex_dump(PURPLE_DEBUG_WARNING, "QQ", - data, len, - ">>> [default] decrypt and dump"); - error_msg = try_dump_as_gbk(data, len); - if (error_msg) { - purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, error_msg); - g_free(error_msg); - } - ret = QQ_LOGIN_REPLY_MISC_ERROR; - } - } else { /* no idea how to decrypt */ - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "No idea how to decrypt login reply\n"); - ret = QQ_LOGIN_REPLY_MISC_ERROR; - } - } - - switch (ret) { - case QQ_LOGIN_REPLY_PWD_ERROR: - if (!purple_account_get_remember_password(gc->account)) - purple_account_set_password(gc->account, NULL); - purple_connection_error_reason(gc, - PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, _("Incorrect password.")); - break; - case QQ_LOGIN_REPLY_MISC_ERROR: - if (purple_debug_is_enabled()) - purple_connection_error_reason(gc, - PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Unable to login. Check debug log.")); - else - purple_connection_error_reason(gc, - PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Unable to login")); - break; - case QQ_LOGIN_REPLY_OK: - purple_debug(PURPLE_DEBUG_INFO, "QQ", "Login repliess OK; everything is fine\n"); - break; - case QQ_LOGIN_REPLY_REDIRECT: - /* the redirect has been done in _qq_process_login_reply */ - break; - default:{; - } - } -}
--- a/libpurple/protocols/qq/login_logout.h Thu Jul 31 06:23:55 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/** - * file login_logout.h - * - * purple - * - * Purple is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - */ - -#ifndef _QQ_LOGIN_LOGOUT_H_ -#define _QQ_LOGIN_LOGOUT_H_ - -#include <glib.h> -#include "connection.h" - -#define QQ_LOGIN_MODE_NORMAL 0x0a -#define QQ_LOGIN_MODE_AWAY 0x1e -#define QQ_LOGIN_MODE_HIDDEN 0x28 - -void qq_send_packet_request_login_token(PurpleConnection *gc); -void qq_process_request_login_token_reply(guint8 *buf, gint buf_len, PurpleConnection *gc); -void qq_process_login_reply(guint8 *buf, gint buf_len, PurpleConnection *gc); -void qq_send_packet_logout(PurpleConnection *gc); - -#endif
--- a/libpurple/protocols/qq/packet_parse.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/packet_parse.c Thu Aug 07 16:00:16 2008 +0000 @@ -27,7 +27,6 @@ #include "packet_parse.h" #include "debug.h" - /*------------------------------------------------PUT------------------------------------------------*/ /* note: @@ -68,7 +67,6 @@ return sizeof(w_dest); } - /* read four bytes as "guint32" from buf, * return the number of bytes read if succeeds, otherwise return -1 */ gint qq_get32(guint32 *dw, guint8 *buf) @@ -83,6 +81,11 @@ return sizeof(dw_dest); } +gint qq_getIP(struct in_addr *ip, guint8 *buf) +{ + memcpy(ip, buf, sizeof(struct in_addr)); + return sizeof(struct in_addr); +} /* read datalen bytes from buf, * return the number of bytes read if succeeds, otherwise return -1 */ @@ -158,6 +161,11 @@ return sizeof(dw_porter); } +gint qq_putIP(guint8* buf, struct in_addr *ip) +{ + memcpy(buf, ip, sizeof(struct in_addr)); + return sizeof(struct in_addr); +} /* pack datalen bytes into buf * return the number of bytes packed, otherwise return -1 */
--- a/libpurple/protocols/qq/packet_parse.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/packet_parse.h Thu Aug 07 16:00:16 2008 +0000 @@ -37,15 +37,23 @@ */ #define MAX_PACKET_SIZE 65535 +#ifndef _WIN32 +#include <netinet/in.h> +#else +#include "win32dep.h" +#endif + gint qq_get8(guint8 *b, guint8 *buf); gint qq_get16(guint16 *w, guint8 *buf); gint qq_get32(guint32 *dw, guint8 *buf); +gint qq_getIP(struct in_addr *ip, guint8 *buf); gint qq_getime(time_t *t, guint8 *buf); gint qq_getdata(guint8 *data, gint datalen, guint8 *buf); gint qq_put8(guint8 *buf, guint8 b); gint qq_put16(guint8 *buf, guint16 w); gint qq_put32(guint8 *buf, guint32 dw); +gint qq_putIP(guint8* buf, struct in_addr *ip); gint qq_putdata(guint8 *buf, const guint8 *data, const int datalen); /*
--- a/libpurple/protocols/qq/qq.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/qq.c Thu Aug 07 16:00:16 2008 +0000 @@ -40,7 +40,7 @@ #include "buddy_info.h" #include "buddy_opt.h" -#include "buddy_status.h" +#include "buddy_list.h" #include "char_conv.h" #include "crypt.h" #include "group.h" @@ -51,8 +51,8 @@ #include "group_opt.h" #include "header_info.h" #include "im.h" -#include "keep_alive.h" -#include "login_logout.h" +#include "qq_process.h" +#include "qq_base.h" #include "packet_parse.h" #include "qq.h" #include "qq_network.h" @@ -237,78 +237,110 @@ static void _qq_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full) { qq_buddy *q_bud; - gchar *ip_str; - char *tmp; - const char *tmp2; + gchar *tmp; + GString *str; g_return_if_fail(b != NULL); q_bud = (qq_buddy *) b->proto_data; - g_return_if_fail(q_bud != NULL); + if (q_bud == NULL) + return; + + /* if (PURPLE_BUDDY_IS_ONLINE(b) && q_bud != NULL) */ + if (q_bud->ip.s_addr != 0) { + str = g_string_new(NULL); + g_string_printf(str, "%s:%d", inet_ntoa(q_bud->ip), q_bud->port); + if (q_bud->comm_flag & QQ_COMM_FLAG_TCP_MODE) { + g_string_append(str, " TCP"); + } else { + g_string_append(str, " UDP"); + } + g_string_free(str, TRUE); + } - if (PURPLE_BUDDY_IS_ONLINE(b) && q_bud != NULL) - { - ip_str = gen_ip_str(q_bud->ip); - if (strlen(ip_str) != 0) { - if (q_bud->comm_flag & QQ_COMM_FLAG_TCP_MODE) - tmp2 = _("TCP Address"); - else - tmp2 = _("UDP Address"); - tmp = g_strdup_printf("%s:%d", ip_str, q_bud->port); - purple_notify_user_info_add_pair(user_info, tmp2, tmp); - g_free(tmp); - } - g_free(ip_str); + tmp = g_strdup_printf("%d", q_bud->age); + purple_notify_user_info_add_pair(user_info, _("Age"), tmp); + g_free(tmp); - tmp = g_strdup_printf("%d", q_bud->age); - purple_notify_user_info_add_pair(user_info, _("Age"), tmp); + switch (q_bud->gender) { + case QQ_BUDDY_GENDER_GG: + purple_notify_user_info_add_pair(user_info, _("Gender"), _("Male")); + break; + case QQ_BUDDY_GENDER_MM: + purple_notify_user_info_add_pair(user_info, _("Gender"), _("Female")); + break; + case QQ_BUDDY_GENDER_UNKNOWN: + purple_notify_user_info_add_pair(user_info, _("Gender"), _("Unknown")); + break; + default: + tmp = g_strdup_printf("Error (%d)", q_bud->gender); + purple_notify_user_info_add_pair(user_info, _("Gender"), tmp); g_free(tmp); + } - switch (q_bud->gender) { - case QQ_BUDDY_GENDER_GG: - purple_notify_user_info_add_pair(user_info, _("Gender"), _("Male")); - break; - case QQ_BUDDY_GENDER_MM: - purple_notify_user_info_add_pair(user_info, _("Gender"), _("Female")); - break; - case QQ_BUDDY_GENDER_UNKNOWN: - purple_notify_user_info_add_pair(user_info, _("Gender"), _("Unknown")); - break; - default: - tmp = g_strdup_printf("Error (%d)", q_bud->gender); - purple_notify_user_info_add_pair(user_info, _("Gender"), tmp); - g_free(tmp); - } + if (q_bud->level) { + tmp = g_strdup_printf("%d", q_bud->level); + purple_notify_user_info_add_pair(user_info, _("Level"), tmp); + g_free(tmp); + } - if (q_bud->level) { - tmp = g_strdup_printf("%d", q_bud->level); - purple_notify_user_info_add_pair(user_info, _("Level"), tmp); - g_free(tmp); - } - /* For debugging */ - /* - g_string_append_printf(tooltip, "\n<b>Flag:</b> %01x", q_bud->flag1); - g_string_append_printf(tooltip, "\n<b>CommFlag:</b> %01x", q_bud->comm_flag); - g_string_append_printf(tooltip, "\n<b>Client:</b> %04x", q_bud->client_version); - */ + str = g_string_new(NULL); + if (q_bud->comm_flag & QQ_COMM_FLAG_QQ_MEMBER) { + g_string_append( str, _("Member") ); + } + if (q_bud->comm_flag & QQ_COMM_FLAG_QQ_VIP) { + g_string_append( str, _(" VIP") ); + } + if (q_bud->comm_flag & QQ_COMM_FLAG_TCP_MODE) { + g_string_append( str, _(" TCP") ); + } + if (q_bud->comm_flag & QQ_COMM_FLAG_MOBILE) { + g_string_append( str, _(" FromMobile") ); + } + if (q_bud->comm_flag & QQ_COMM_FLAG_BIND_MOBILE) { + g_string_append( str, _(" BindMobile") ); + } + if (q_bud->comm_flag & QQ_COMM_FLAG_VIDEO) { + g_string_append( str, _(" Video") ); } + + if (q_bud->ext_flag & QQ_EXT_FLAG_SPACE) { + g_string_append( str, _(" Space") ); + } + purple_notify_user_info_add_pair(user_info, _("Flag"), str->str); + + g_string_free(str, TRUE); + +#ifdef DEBUG + tmp = g_strdup_printf( "%s (%04X)", + qq_get_ver_desc(q_bud->client_version), + q_bud->client_version ); + purple_notify_user_info_add_pair(user_info, _("Ver"), tmp); + g_free(tmp); + + tmp = g_strdup_printf( "Ext 0x%X, Comm 0x%X", + q_bud->ext_flag, q_bud->comm_flag ); + purple_notify_user_info_add_pair(user_info, _("Flag"), tmp); + g_free(tmp); +#endif } /* we can show tiny icons on the four corners of buddy icon, */ static const char *_qq_list_emblem(PurpleBuddy *b) { /* each char** are refering to a filename in pixmaps/purple/status/default/ */ - - qq_buddy *q_bud = b->proto_data; + qq_buddy *q_bud; + + if (!b || !(q_bud = b->proto_data)) { + return NULL; + } - if (q_bud) { - if (q_bud->comm_flag & QQ_COMM_FLAG_QQ_MEMBER) - return "qq_member"; - /* - if (q_bud->comm_flag & QQ_COMM_FLAG_VIDEO) - return "video"; - */ - } + if (q_bud->comm_flag & QQ_COMM_FLAG_MOBILE) + return "mobile"; + if (q_bud->comm_flag & QQ_COMM_FLAG_VIDEO) + return "video"; + if (q_bud->comm_flag & QQ_COMM_FLAG_QQ_MEMBER) + return "qq_member"; return NULL; } @@ -393,6 +425,7 @@ group = qq_group_find_by_channel(gc, channel); g_return_val_if_fail(group != NULL, -1); + purple_debug_info("QQ_MESG", "Send qun mesg in utf8: %s\n", message); msg = utf8_to_qq(message, QQ_CHARSET_DEFAULT); msg_with_qq_smiley = purple_smiley_to_qq(msg); qq_send_packet_group_im(gc, group, msg_with_qq_smiley); @@ -479,7 +512,7 @@ qd = (qq_data *) gc->proto_data; info = g_string_new("<html><body>\n"); - g_string_append_printf(info, _("<b>Current Online</b>: %d<br>\n"), qd->all_online); + g_string_append_printf(info, _("<b>Current Online</b>: %d<br>\n"), qd->total_online); g_string_append_printf(info, _("<b>Last Refresh</b>: %s<br>\n"), ctime(&qd->last_get_online)); g_string_append(info, "<hr>\n"); @@ -487,7 +520,7 @@ g_string_append_printf(info, _("<b>Server</b>: %s: %d<br>\n"), qd->server_name, qd->real_port); g_string_append_printf(info, _("<b>Connection Mode</b>: %s<br>\n"), qd->use_tcp ? "TCP" : "UDP"); g_string_append_printf(info, _("<b>Real hostname</b>: %s: %d<br>\n"), qd->real_hostname, qd->real_port); - g_string_append_printf(info, _("<b>My Public IP</b>: %s<br>\n"), qd->my_ip); + g_string_append_printf(info, _("<b>My Public IP</b>: %s<br>\n"), inet_ntoa(qd->my_ip)); g_string_append(info, "<hr>\n"); g_string_append(info, "<i>Information below may not be accurate</i><br>\n"); @@ -636,30 +669,6 @@ return m; } - -static void qq_keep_alive(PurpleConnection *gc) -{ - qq_group *group; - qq_data *qd; - GList *list; - - if (NULL == (qd = (qq_data *) gc->proto_data)) - return; - - list = qd->groups; - while (list != NULL) { - group = (qq_group *) list->data; - if (group->my_status == QQ_GROUP_MEMBER_STATUS_IS_MEMBER || - group->my_status == QQ_GROUP_MEMBER_STATUS_IS_ADMIN) - /* no need to get info time and time again, online members enough */ - qq_send_cmd_group_get_online_members(gc, group); - - list = list->next; - } - - qq_send_packet_keep_alive(gc); -} - /* convert chat nickname to qq-uid to get this buddy info */ /* who is the nickname of buddy in QQ chat-room (Qun) */ static void _qq_get_chat_buddy_info(PurpleConnection *gc, gint channel, const gchar *who) @@ -680,8 +689,8 @@ return chat_name_to_purple_name(who); } -PurplePlugin *my_protocol = NULL; -static PurplePluginProtocolInfo prpl_info = { +static PurplePluginProtocolInfo prpl_info = +{ OPT_PROTO_CHAT_TOPIC | OPT_PROTO_USE_POINTSIZE, NULL, /* user_splits */ NULL, /* protocol_options */ @@ -718,8 +727,8 @@ NULL, /* chat_invite */ NULL, /* chat_leave */ NULL, /* chat_whisper */ - _qq_chat_send, /* chat_send */ - qq_keep_alive, /* keepalive */ + _qq_chat_send, /* chat_send */ + NULL, /* keepalive */ NULL, /* register_user */ _qq_get_chat_buddy_info, /* get_cb_info */ NULL, /* get_cb_away */ @@ -738,17 +747,17 @@ qq_roomlist_cancel, /* roomlist_cancel */ NULL, /* roomlist_expand_category */ NULL, /* can_receive_file */ - qq_send_file, /* send_file */ + NULL, /* qq_send_file send_file */ NULL, /* new xfer */ NULL, /* offline_message */ NULL, /* PurpleWhiteboardPrplOps */ NULL, /* send_raw */ NULL, /* roomlist_room_serialize */ + NULL, /* unregister_user */ + NULL, /* send_attention */ + NULL, /* get attention_types */ - /* padding */ - NULL, - NULL, - NULL, + sizeof(PurplePluginProtocolInfo), /* struct_size */ NULL }; @@ -802,7 +811,14 @@ option = purple_account_option_bool_new(_("Connect using TCP"), "use_tcp", TRUE); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); - my_protocol = plugin; + option = purple_account_option_int_new(_("resend interval(s)"), "resend_interval", 10); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + + option = purple_account_option_int_new(_("Keep alive interval(s)"), "keep_alive_interval", 60); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + + option = purple_account_option_int_new(_("Update interval(s)"), "update_interval", 300); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); purple_prefs_add_none("/plugins/prpl/qq"); purple_prefs_add_bool("/plugins/prpl/qq/show_status_by_icon", TRUE);
--- a/libpurple/protocols/qq/qq.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/qq.h Thu Aug 07 16:00:16 2008 +0000 @@ -34,7 +34,6 @@ #include "proxy.h" #include "roomlist.h" -#define QQ_FACES 100 #define QQ_KEY_LENGTH 16 #define QQ_DEBUG 1 /* whether we are doing DEBUG */ @@ -45,6 +44,13 @@ typedef struct _qq_data qq_data; typedef struct _qq_buddy qq_buddy; +typedef struct _qq_interval qq_interval; + +struct _qq_interval { + gint resend; + gint keep_alive; + gint update; +}; struct _qq_buddy { guint32 uid; @@ -52,10 +58,10 @@ guint8 age; guint8 gender; gchar *nickname; - guint8 ip[4]; + struct in_addr ip; guint16 port; guint8 status; - guint8 flag1; + guint8 ext_flag; guint8 comm_flag; /* details in qq_buddy_list.c */ guint16 client_version; guint8 onlineTime; @@ -88,12 +94,12 @@ gint fd; /* socket file handler */ gint tx_handler; /* socket can_write handle, use in udp connecting and tcp send out */ - GList *send_trans; /* check ack packet and resend */ - guint resend_timeout; + qq_interval itv_config; + qq_interval itv_count; + guint network_timeout; + + GList *transactions; /* check ack packet and resend */ - guint8 rcv_window[1 << 13]; /* windows for check duplicate packet */ - GQueue *rcv_trans; /* queue to store packet can not process before login */ - /* tcp related */ PurpleCircBuffer *tcp_txbuf; guint8 *tcp_rxqueue; @@ -103,10 +109,12 @@ PurpleDnsQueryData *udp_query_data; guint32 uid; /* QQ number */ - guint8 *inikey; /* initial key to encrypt login packet */ - guint8 *pwkey; /* password in md5 (or md5' md5) */ - guint8 *session_key; /* later use this as key in this session */ - guint8 *session_md5; /* concatenate my uid with session_key and md5 it */ + guint8 *token; /* get from server*/ + int token_len; + guint8 inikey[QQ_KEY_LENGTH]; /* initial key to encrypt login packet */ + guint8 password_twice_md5[QQ_KEY_LENGTH]; /* password in md5 (or md5' md5) */ + guint8 session_key[QQ_KEY_LENGTH]; /* later use this as key in this session */ + guint8 session_md5[QQ_KEY_LENGTH]; /* concatenate my uid with session_key and md5 it */ guint16 send_seq; /* send sequence number */ guint8 login_mode; /* online of invisible */ @@ -119,11 +127,11 @@ time_t last_login_time; gchar *last_login_ip; /* get from keep_alive packet */ - gchar *my_ip; /* my ip address detected by server */ + struct in_addr my_ip; /* my ip address detected by server */ guint16 my_port; /* my port detected by server */ guint16 my_icon; /* my icon index */ guint16 my_level; /* my level */ - guint32 all_online; /* the number of online QQ users */ + guint32 total_online; /* the number of online QQ users */ time_t last_get_online; /* last time send get_friends_online packet */ PurpleRoomlist *roomlist;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/qq/qq_base.c Thu Aug 07 16:00:16 2008 +0000 @@ -0,0 +1,523 @@ +/** + * @file qq_base.c + * + * purple + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include "debug.h" +#include "internal.h" +#include "server.h" +#include "cipher.h" + +#include "buddy_info.h" +#include "buddy_list.h" +#include "char_conv.h" +#include "crypt.h" +#include "group.h" +#include "header_info.h" +#include "qq_base.h" +#include "packet_parse.h" +#include "qq.h" +#include "qq_network.h" +#include "utils.h" + +#define QQ_LOGIN_DATA_LENGTH 416 +#define QQ_LOGIN_REPLY_OK_PACKET_LEN 139 +#define QQ_LOGIN_REPLY_REDIRECT_PACKET_LEN 11 + +/* for QQ 2003iii 0117, fixed value */ +/* static const guint8 login_23_51[29] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xbf, 0x14, 0x11, 0x20, + 0x03, 0x9d, 0xb2, 0xe6, 0xb3, 0x11, 0xb7, 0x13, + 0x95, 0x67, 0xda, 0x2c, 0x01 +}; */ + +/* for QQ 2003iii 0304, fixed value */ +/* +static const guint8 login_23_51[29] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0x93, 0xfe, 0x85, + 0xd3, 0xd9, 0x2a, 0x41, 0xc8, 0x0d, 0xff, 0xb6, + 0x40, 0xb8, 0xac, 0x32, 0x01 +}; +*/ + +/* for QQ 2005? copy from lumaqq */ +/* FIXME: change to guint8 */ +static const guint8 login_23_51[29] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x86, 0xcc, 0x4c, 0x35, + 0x2c, 0xd3, 0x73, 0x6c, 0x14, 0xf6, 0xf6, 0xaf, + 0xc3, 0xfa, 0x33, 0xa4, 0x01 +}; + +static const guint8 login_53_68[16] = { + 0x8D, 0x8B, 0xFA, 0xEC, 0xD5, 0x52, 0x17, 0x4A, + 0x86, 0xF9, 0xA7, 0x75, 0xE6, 0x32, 0xD1, 0x6D +}; + +static const guint8 login_100_bytes[100] = { + 0x40, 0x0B, 0x04, 0x02, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xE9, 0x03, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF3, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xED, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xEC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xEE, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xEF, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xEB, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00 +}; + + +/* fixed value, not affected by version, or mac address */ +/* +static const guint8 login_53_68[16] = { + 0x82, 0x2a, 0x91, 0xfd, 0xa5, 0xca, 0x67, 0x4c, + 0xac, 0x81, 0x1f, 0x6f, 0x52, 0x05, 0xa7, 0xbf +}; +*/ + + +typedef struct _qq_login_reply_ok qq_login_reply_ok_packet; +typedef struct _qq_login_reply_redirect qq_login_reply_redirect_packet; + +struct _qq_login_reply_ok { + guint8 result; + guint8 session_key[QQ_KEY_LENGTH]; + guint32 uid; + struct in_addr client_ip; /* those detected by server */ + guint16 client_port; + struct in_addr server_ip; + guint16 server_port; + time_t login_time; + guint8 unknown1[26]; + struct in_addr unknown_server1_ip; + guint16 unknown_server1_port; + struct in_addr unknown_server2_ip; + guint16 unknown_server2_port; + guint16 unknown2; /* 0x0001 */ + guint16 unknown3; /* 0x0000 */ + guint8 unknown4[32]; + guint8 unknown5[12]; + struct in_addr last_client_ip; + time_t last_login_time; + guint8 unknown6[8]; +}; + +struct _qq_login_reply_redirect { + guint8 result; + guint32 uid; + struct in_addr new_server_ip; + guint16 new_server_port; +}; + +/* generate a md5 key using uid and session_key */ +static void get_session_md5(guint8 *session_md5, guint32 uid, guint8 *session_key) +{ + guint8 src[QQ_KEY_LENGTH + QQ_KEY_LENGTH]; + gint bytes = 0; + + bytes += qq_put32(src + bytes, uid); + bytes += qq_putdata(src + bytes, session_key, QQ_KEY_LENGTH); + + qq_get_md5(session_md5, QQ_KEY_LENGTH, src, bytes); +} + +/* process login reply which says OK */ +static gint8 process_login_ok(PurpleConnection *gc, guint8 *data, gint len) +{ + gint bytes; + qq_data *qd; + qq_login_reply_ok_packet lrop; + + qd = (qq_data *) gc->proto_data; + /* FIXME, check QQ_LOGIN_REPLY_OK_PACKET_LEN here */ + bytes = 0; + + /* 000-000: reply code */ + bytes += qq_get8(&lrop.result, data + bytes); + /* 001-016: session key */ + bytes += qq_getdata(lrop.session_key, sizeof(lrop.session_key), data + bytes); + purple_debug(PURPLE_DEBUG_INFO, "QQ", "Get session_key done\n"); + /* 017-020: login uid */ + bytes += qq_get32(&lrop.uid, data + bytes); + /* 021-024: server detected user public IP */ + bytes += qq_getIP(&lrop.client_ip, data + bytes); + /* 025-026: server detected user port */ + bytes += qq_get16(&lrop.client_port, data + bytes); + /* 027-030: server detected itself ip 127.0.0.1 ? */ + bytes += qq_getIP(&lrop.server_ip, data + bytes); + /* 031-032: server listening port */ + bytes += qq_get16(&lrop.server_port, data + bytes); + /* 033-036: login time for current session */ + bytes += qq_getime(&lrop.login_time, data + bytes); + /* 037-062: 26 bytes, unknown */ + bytes += qq_getdata((guint8 *) &lrop.unknown1, 26, data + bytes); + /* 063-066: unknown server1 ip address */ + bytes += qq_getIP(&lrop.unknown_server1_ip, data + bytes); + /* 067-068: unknown server1 port */ + bytes += qq_get16(&lrop.unknown_server1_port, data + bytes); + /* 069-072: unknown server2 ip address */ + bytes += qq_getIP(&lrop.unknown_server2_ip, data + bytes); + /* 073-074: unknown server2 port */ + bytes += qq_get16(&lrop.unknown_server2_port, data + bytes); + /* 075-076: 2 bytes unknown */ + bytes += qq_get16(&lrop.unknown2, data + bytes); + /* 077-078: 2 bytes unknown */ + bytes += qq_get16(&lrop.unknown3, data + bytes); + /* 079-110: 32 bytes unknown */ + bytes += qq_getdata((guint8 *) &lrop.unknown4, 32, data + bytes); + /* 111-122: 12 bytes unknown */ + bytes += qq_getdata((guint8 *) &lrop.unknown5, 12, data + bytes); + /* 123-126: login IP of last session */ + bytes += qq_getIP(&lrop.last_client_ip, data + bytes); + /* 127-130: login time of last session */ + bytes += qq_getime(&lrop.last_login_time, data + bytes); + /* 131-138: 8 bytes unknown */ + bytes += qq_getdata((guint8 *) &lrop.unknown6, 8, data + bytes); + + if (bytes != QQ_LOGIN_REPLY_OK_PACKET_LEN) { /* fail parsing login info */ + purple_debug(PURPLE_DEBUG_WARNING, "QQ", + "Fail parsing login info, expect %d bytes, read %d bytes\n", + QQ_LOGIN_REPLY_OK_PACKET_LEN, bytes); + } /* but we still go on as login OK */ + + memcpy(qd->session_key, lrop.session_key, sizeof(qd->session_key)); + get_session_md5(qd->session_md5, qd->uid, qd->session_key); + + qd->my_ip.s_addr = lrop.client_ip.s_addr; + + qd->my_port = lrop.client_port; + qd->login_time = lrop.login_time; + qd->last_login_time = lrop.last_login_time; + qd->last_login_ip = g_strdup( inet_ntoa(lrop.last_client_ip) ); + + return QQ_LOGIN_REPLY_OK; +} + +/* process login reply packet which includes redirected new server address */ +static gint8 process_login_redirect(PurpleConnection *gc, guint8 *data, gint len) +{ + qq_data *qd; + gint bytes; + qq_login_reply_redirect_packet lrrp; + + qd = (qq_data *) gc->proto_data; + bytes = 0; + /* 000-000: reply code */ + bytes += qq_get8(&lrrp.result, data + bytes); + /* 001-004: login uid */ + bytes += qq_get32(&lrrp.uid, data + bytes); + /* 005-008: redirected new server IP */ + bytes += qq_getIP(&lrrp.new_server_ip, data + bytes); + /* 009-010: redirected new server port */ + bytes += qq_get16(&lrrp.new_server_port, data + bytes); + + if (bytes != QQ_LOGIN_REPLY_REDIRECT_PACKET_LEN) { + purple_debug(PURPLE_DEBUG_ERROR, "QQ", + "Fail parsing login redirect packet, expect %d bytes, read %d bytes\n", + QQ_LOGIN_REPLY_REDIRECT_PACKET_LEN, bytes); + return QQ_LOGIN_REPLY_ERR_MISC; + } + + /* redirect to new server, do not disconnect or connect here + * those connect should be called at packet_process */ + if (qd->real_hostname) { + purple_debug(PURPLE_DEBUG_INFO, "QQ", "free real_hostname\n"); + g_free(qd->real_hostname); + qd->real_hostname = NULL; + } + qd->real_hostname = g_strdup( inet_ntoa(lrrp.new_server_ip) ); + qd->real_port = lrrp.new_server_port; + + return QQ_LOGIN_REPLY_REDIRECT; +} + +/* process login reply which says wrong password */ +static gint8 process_login_wrong_pwd(PurpleConnection *gc, guint8 *data, gint len) +{ + gchar *server_reply, *server_reply_utf8; + server_reply = g_new0(gchar, len); + g_memmove(server_reply, data + 1, len - 1); + server_reply_utf8 = qq_to_utf8(server_reply, QQ_CHARSET_DEFAULT); + purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Wrong password, server msg in UTF8: %s\n", server_reply_utf8); + g_free(server_reply); + g_free(server_reply_utf8); + + return QQ_LOGIN_REPLY_ERR_PWD; +} + +/* request before login */ +void qq_send_packet_token(PurpleConnection *gc) +{ + qq_data *qd; + guint8 buf[16] = {0}; + gint bytes = 0; + + g_return_if_fail(gc != NULL && gc->proto_data != NULL); + qd = (qq_data *) gc->proto_data; + + bytes += qq_put8(buf + bytes, 0); + + qd->send_seq++; + qq_send_data(qd, QQ_CMD_TOKEN, qd->send_seq, TRUE, buf, bytes); +} + +/* send login packet to QQ server */ +void qq_send_packet_login(PurpleConnection *gc) +{ + qq_data *qd; + guint8 *buf, *raw_data; + gint bytes; + guint8 *encrypted_data; + gint encrypted_len; + + g_return_if_fail(gc != NULL && gc->proto_data != NULL); + qd = (qq_data *) gc->proto_data; + + g_return_if_fail(qd->token != NULL && qd->token_len > 0); + + raw_data = g_newa(guint8, QQ_LOGIN_DATA_LENGTH); + memset(raw_data, 0, QQ_LOGIN_DATA_LENGTH); + + encrypted_data = g_newa(guint8, QQ_LOGIN_DATA_LENGTH + 16); /* 16 bytes more */ +#ifdef DEBUG + memset(qd->inikey, 0x01, sizeof(qd->inikey)); +#else + for (bytes = 0; bytes < sizeof(qd->inikey); bytes++) { + qd->inikey[bytes] = (guint8) (g_random_int_range(0, 255) % 256); + } +#endif + + bytes = 0; + /* now generate the encrypted data + * 000-015 use password_twice_md5 as key to encrypt empty string */ + qq_encrypt((guint8 *) "", 0, qd->password_twice_md5, raw_data + bytes, &encrypted_len); + bytes += 16; + /* 016-016 */ + bytes += qq_put8(raw_data + bytes, 0x00); + /* 017-020, used to be IP, now zero */ + bytes += qq_put32(raw_data + bytes, 0x00000000); + /* 021-022, used to be port, now zero */ + bytes += qq_put16(raw_data + bytes, 0x0000); + /* 023-051, fixed value, unknown */ + bytes += qq_putdata(raw_data + bytes, login_23_51, 29); + /* 052-052, login mode */ + bytes += qq_put8(raw_data + bytes, qd->login_mode); + /* 053-068, fixed value, maybe related to per machine */ + bytes += qq_putdata(raw_data + bytes, login_53_68, 16); + /* 069, login token length */ + bytes += qq_put8(raw_data + bytes, qd->token_len); + /* 070-093, login token, normally 24 bytes */ + bytes += qq_putdata(raw_data + bytes, qd->token, qd->token_len); + /* 100 bytes unknown */ + bytes += qq_putdata(raw_data + bytes, login_100_bytes, 100); + /* all zero left */ + + qq_encrypt(raw_data, QQ_LOGIN_DATA_LENGTH, qd->inikey, encrypted_data, &encrypted_len); + + buf = g_newa(guint8, MAX_PACKET_SIZE); + memset(buf, 0, MAX_PACKET_SIZE); + bytes = 0; + bytes += qq_putdata(buf + bytes, qd->inikey, QQ_KEY_LENGTH); + bytes += qq_putdata(buf + bytes, encrypted_data, encrypted_len); + + qd->send_seq++; + qq_send_data(qd, QQ_CMD_LOGIN, qd->send_seq, TRUE, buf, bytes); +} + +guint8 qq_process_token_reply(PurpleConnection *gc, gchar *error_msg, guint8 *buf, gint buf_len) +{ + qq_data *qd; + guint8 ret; + int token_len; + + g_return_val_if_fail(buf != NULL && buf_len != 0, -1); + + g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, -1); + qd = (qq_data *) gc->proto_data; + + ret = buf[0]; + + if (ret != QQ_TOKEN_REPLY_OK) { + purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Unknown request login token reply code : %d\n", buf[0]); + qq_hex_dump(PURPLE_DEBUG_WARNING, "QQ", + buf, buf_len, + ">>> [default] decrypt and dump"); + error_msg = try_dump_as_gbk(buf, buf_len); + return ret; + } + + token_len = buf_len-2; + if (token_len <= 0) { + error_msg = g_strdup_printf( _("Invalid token len, %d"), token_len); + return -1; + } + + if (buf[1] != token_len) { + purple_debug(PURPLE_DEBUG_INFO, "QQ", + "Invalid token len. Packet specifies length of %d, actual length is %d\n", buf[1], buf_len-2); + } + qq_hex_dump(PURPLE_DEBUG_INFO, "QQ", + buf+2, token_len, + "<<< got a token -> [default] decrypt and dump"); + + qd->token = g_new0(guint8, token_len); + qd->token_len = token_len; + g_memmove(qd->token, buf + 2, qd->token_len); + return ret; +} + +/* send logout packets to QQ server */ +void qq_send_packet_logout(PurpleConnection *gc) +{ + gint i; + qq_data *qd; + + qd = (qq_data *) gc->proto_data; + for (i = 0; i < 4; i++) + qq_send_cmd_detail(qd, QQ_CMD_LOGOUT, 0xffff, FALSE, qd->password_twice_md5, QQ_KEY_LENGTH); + + qd->logged_in = FALSE; /* update login status AFTER sending logout packets */ +} + +/* process the login reply packet */ +guint8 qq_process_login_reply(guint8 *buf, gint buf_len, PurpleConnection *gc) +{ + qq_data *qd; + guint8 *data; + gint data_len; + gchar* error_msg; + + g_return_val_if_fail(buf != NULL && buf_len != 0, QQ_LOGIN_REPLY_ERR_MISC); + + qd = (qq_data *) gc->proto_data; + + data_len = buf_len; + data = g_newa(guint8, data_len); + + if (qq_decrypt(buf, buf_len, qd->inikey, data, &data_len)) { + purple_debug(PURPLE_DEBUG_WARNING, "QQ", + "Decrypt login reply packet with inikey, %d bytes\n", data_len); + } else { + /* reset data_len since it may changed */ + data_len = buf_len; + if (qq_decrypt(buf, buf_len, qd->password_twice_md5, data, &data_len)) { + purple_debug(PURPLE_DEBUG_INFO, "QQ", + "Decrypt login reply packet with password_twice_md5, %d bytes\n", data_len); + } else { + purple_debug(PURPLE_DEBUG_ERROR, "QQ", + "No idea how to decrypt login reply\n"); + return QQ_LOGIN_REPLY_ERR_MISC; + } + } + + switch (data[0]) { + case QQ_LOGIN_REPLY_OK: + purple_debug(PURPLE_DEBUG_INFO, "QQ", "Login reply is OK\n"); + return process_login_ok(gc, data, data_len); + case QQ_LOGIN_REPLY_REDIRECT: + purple_debug(PURPLE_DEBUG_INFO, "QQ", "Login reply is redirect\n"); + return process_login_redirect(gc, data, data_len); + case QQ_LOGIN_REPLY_ERR_PWD: + purple_debug(PURPLE_DEBUG_INFO, "QQ", "Login reply is error password\n"); + return process_login_wrong_pwd(gc, data, data_len); + case QQ_LOGIN_REPLY_NEED_REACTIVE: + case QQ_LOGIN_REPLY_REDIRECT_EX: + purple_debug(PURPLE_DEBUG_INFO, "QQ", "Login reply is not actived or redirect extend\n"); + default: + break; + } + + purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Unknown reply code: %d\n", data[0]); + qq_hex_dump(PURPLE_DEBUG_WARNING, "QQ", + data, data_len, + ">>> [default] decrypt and dump"); + error_msg = try_dump_as_gbk(data, data_len); + if (error_msg) { + purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, error_msg); + g_free(error_msg); + } + return QQ_LOGIN_REPLY_ERR_MISC; +} + +/* send keep-alive packet to QQ server (it is a heart-beat) */ +void qq_send_packet_keep_alive(PurpleConnection *gc) +{ + qq_data *qd; + guint8 raw_data[16] = {0}; + gint bytes= 0; + + qd = (qq_data *) gc->proto_data; + + /* In fact, we can send whatever we like to server + * with this command, server return the same result including + * the amount of online QQ users, my ip and port */ + bytes += qq_put32(raw_data + bytes, qd->uid); + + qq_send_cmd(qd, QQ_CMD_KEEP_ALIVE, raw_data, 4); +} + +/* parse the return of keep-alive packet, it includes some system information */ +gboolean qq_process_keep_alive(guint8 *buf, gint buf_len, PurpleConnection *gc) +{ + qq_data *qd; + gint len; + gchar **segments; + guint8 *data; + + g_return_val_if_fail(buf != NULL && buf_len != 0, FALSE); + + qd = (qq_data *) gc->proto_data; + len = buf_len; + data = g_newa(guint8, len); + + if ( !qq_decrypt(buf, buf_len, qd->session_key, data, &len) ) { + purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Error decrypt keep alive reply\n"); + return FALSE; + } + + /* qq_show_packet("Keep alive reply packet", data, len); */ + + /* the last one is 60, don't know what it is */ + if (NULL == (segments = split_data(data, len, "\x1f", 6))) + return TRUE; + + /* segments[0] and segment[1] are all 0x30 ("0") */ + qd->total_online = strtol(segments[2], NULL, 10); + if(0 == qd->total_online) { + purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, + _("Keep alive error")); + } + qd->my_ip.s_addr = inet_addr(segments[3]); + qd->my_port = strtol(segments[4], NULL, 10); + + purple_debug(PURPLE_DEBUG_INFO, "QQ", "keep alive, %s:%d\n", + inet_ntoa(qd->my_ip), qd->my_port); + + g_strfreev(segments); + return TRUE; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/qq/qq_base.h Thu Aug 07 16:00:16 2008 +0000 @@ -0,0 +1,56 @@ +/** + * file qq_base.h + * + * purple + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#ifndef _QQ_BASE_H_ +#define _QQ_BASE_H_ + +#include <glib.h> +#include "connection.h" + +#define QQ_TOKEN_REPLY_OK 0x00 + +#define QQ_LOGIN_REPLY_OK 0x00 +#define QQ_LOGIN_REPLY_REDIRECT 0x01 +#define QQ_LOGIN_REPLY_ERR_PWD 0x05 +#define QQ_LOGIN_REPLY_NEED_REACTIVE 0x06 +#define QQ_LOGIN_REPLY_REDIRECT_EX 0x0A +#define QQ_LOGIN_REPLY_ERR_MISC 0xff /* defined by myself */ + +#define QQ_LOGIN_MODE_NORMAL 0x0a +#define QQ_LOGIN_MODE_AWAY 0x1e +#define QQ_LOGIN_MODE_HIDDEN 0x28 + +#define QQ_UPDATE_ONLINE_INTERVAL 300 /* in sec */ + +void qq_send_packet_token(PurpleConnection *gc); +guint8 qq_process_token_reply(PurpleConnection *gc, gchar *error_msg, guint8 *buf, gint buf_len); + +void qq_send_packet_login(PurpleConnection *gc); +guint8 qq_process_login_reply(guint8 *buf, gint buf_len, PurpleConnection *gc); + +void qq_send_packet_logout(PurpleConnection *gc); + +void qq_send_packet_keep_alive(PurpleConnection *gc); +gboolean qq_process_keep_alive(guint8 *buf, gint buf_len, PurpleConnection *gc); +#endif
--- a/libpurple/protocols/qq/qq_network.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/qq_network.c Thu Aug 07 16:00:16 2008 +0000 @@ -32,26 +32,23 @@ #endif #include "buddy_info.h" -#include "buddy_list.h" -#include "buddy_opt.h" -#include "buddy_status.h" +#include "group_info.h" #include "group_free.h" -#include "char_conv.h" #include "crypt.h" -#include "group_network.h" #include "header_info.h" -#include "keep_alive.h" -#include "im.h" -#include "login_logout.h" +#include "qq_base.h" +#include "buddy_list.h" #include "packet_parse.h" #include "qq_network.h" #include "qq_trans.h" -#include "sys_msg.h" #include "utils.h" +#include "qq_process.h" /* set QQ_RECONNECT_MAX to 1, when test reconnecting */ #define QQ_RECONNECT_MAX 4 #define QQ_RECONNECT_INTERVAL 5000 +#define QQ_KEEP_ALIVE_INTERVAL 60000 +#define QQ_TRANS_INTERVAL 10000 static gboolean set_new_server(qq_data *qd) { @@ -107,60 +104,6 @@ return TRUE; } -/* QQ 2003iii uses double MD5 for the pwkey to get the session key */ -static guint8 *encrypt_account_password(const gchar *pwd) -{ - PurpleCipher *cipher; - PurpleCipherContext *context; - - guchar pwkey_tmp[QQ_KEY_LENGTH]; - - cipher = purple_ciphers_find_cipher("md5"); - context = purple_cipher_context_new(cipher, NULL); - purple_cipher_context_append(context, (guchar *) pwd, strlen(pwd)); - purple_cipher_context_digest(context, sizeof(pwkey_tmp), pwkey_tmp, NULL); - purple_cipher_context_destroy(context); - context = purple_cipher_context_new(cipher, NULL); - purple_cipher_context_append(context, pwkey_tmp, QQ_KEY_LENGTH); - purple_cipher_context_digest(context, sizeof(pwkey_tmp), pwkey_tmp, NULL); - purple_cipher_context_destroy(context); - - return g_memdup(pwkey_tmp, QQ_KEY_LENGTH); -} - -/* default process, decrypt and dump */ -static void process_cmd_unknow(PurpleConnection *gc, guint8 *buf, gint buf_len, guint16 cmd, guint16 seq) -{ - qq_data *qd; - guint8 *data; - gint data_len; - gchar *msg_utf8 = NULL; - - g_return_if_fail(buf != NULL && buf_len != 0); - - qq_show_packet("Processing unknown packet", buf, buf_len); - - qd = (qq_data *) gc->proto_data; - - data_len = buf_len; - data = g_newa(guint8, data_len); - memset(data, 0, data_len); - if ( !qq_decrypt(buf, buf_len, qd->session_key, data, &data_len )) { - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Fail decrypt packet with default process\n"); - return; - } - - qq_hex_dump(PURPLE_DEBUG_WARNING, "QQ", - data, data_len, - ">>> [%d] %s -> [default] decrypt and dump", - seq, qq_get_cmd_desc(cmd)); - - msg_utf8 = try_dump_as_gbk(data, data_len); - if (msg_utf8) { - g_free(msg_utf8); - } -} - static gint packet_get_header(guint8 *header_tag, guint16 *source_tag, guint16 *cmd, guint16 *seq, guint8 *buf) { @@ -172,38 +115,6 @@ return bytes; } -/* check whether one sequence number is duplicated or not - * return TRUE if it is duplicated, otherwise FALSE */ -static gboolean packet_is_dup(qq_data *qd, guint16 seq) -{ - guint8 *byte, mask; - - g_return_val_if_fail(qd != NULL, FALSE); - - byte = &(qd->rcv_window[seq / 8]); - mask = (1 << (seq % 8)); - - if ((*byte) & mask) - return TRUE; /* check mask */ - (*byte) |= mask; - return FALSE; /* set mask */ -} - -static gboolean packet_check_ack(qq_data *qd, guint16 cmd, guint16 seq) -{ - gpointer trans; - - g_return_val_if_fail(qd != NULL, FALSE); - - trans = qq_send_trans_find(qd, cmd, seq); - if (trans == NULL) { - return FALSE; - } - - qq_send_trans_remove(qd, trans); - return TRUE; -} - static gboolean reconnect_later_cb(gpointer data) { PurpleConnection *gc; @@ -244,85 +155,6 @@ reconnect_later_cb, gc); } -static void process_cmd_server( - PurpleConnection *gc, guint16 cmd, guint16 seq, guint8 *data, gint data_len) -{ - /* now process the packet */ - switch (cmd) { - case QQ_CMD_RECV_IM: - qq_process_recv_im(data, data_len, seq, gc); - break; - case QQ_CMD_RECV_MSG_SYS: - qq_process_msg_sys(data, data_len, seq, gc); - break; - case QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS: - qq_process_friend_change_status(data, data_len, gc); - break; - default: - process_cmd_unknow(gc, data, data_len, cmd, seq); - break; - } -} - -static void process_cmd_reply( - PurpleConnection *gc, guint16 cmd, guint16 seq, guint8 *data, gint data_len) -{ - /* now process the packet */ - switch (cmd) { - case QQ_CMD_KEEP_ALIVE: - qq_process_keep_alive_reply(data, data_len, gc); - break; - case QQ_CMD_UPDATE_INFO: - qq_process_modify_info_reply(data, data_len, gc); - break; - case QQ_CMD_ADD_FRIEND_WO_AUTH: - qq_process_add_buddy_reply(data, data_len, seq, gc); - break; - case QQ_CMD_DEL_FRIEND: - qq_process_remove_buddy_reply(data, data_len, gc); - break; - case QQ_CMD_REMOVE_SELF: - qq_process_remove_self_reply(data, data_len, gc); - break; - case QQ_CMD_BUDDY_AUTH: - qq_process_add_buddy_auth_reply(data, data_len, gc); - break; - case QQ_CMD_GET_USER_INFO: - qq_process_get_info_reply(data, data_len, gc); - break; - case QQ_CMD_CHANGE_ONLINE_STATUS: - qq_process_change_status_reply(data, data_len, gc); - break; - case QQ_CMD_SEND_IM: - qq_process_send_im_reply(data, data_len, gc); - break; - case QQ_CMD_LOGIN: - qq_process_login_reply(data, data_len, gc); - break; - case QQ_CMD_GET_FRIENDS_LIST: - qq_process_get_buddies_list_reply(data, data_len, gc); - break; - case QQ_CMD_GET_FRIENDS_ONLINE: - qq_process_get_buddies_online_reply(data, data_len, gc); - break; - case QQ_CMD_GROUP_CMD: - qq_process_group_cmd_reply(data, data_len, seq, gc); - break; - case QQ_CMD_GET_ALL_LIST_WITH_GROUP: - qq_process_get_all_list_with_group_reply(data, data_len, gc); - break; - case QQ_CMD_GET_LEVEL: - qq_process_get_level_reply(data, data_len, gc); - break; - case QQ_CMD_REQUEST_LOGIN_TOKEN: - qq_process_request_login_token_reply(data, data_len, gc); - break; - default: - process_cmd_unknow(gc, data, data_len, cmd, seq); - break; - } -} - /* process the incoming packet from qq_pending */ static void packet_process(PurpleConnection *gc, guint8 *buf, gint buf_len) { @@ -330,15 +162,13 @@ gint bytes, bytes_not_read; gboolean prev_login_status; - guint8 *new_data; - gint new_data_len; guint8 header_tag; guint16 source_tag; guint16 cmd; guint16 seq; /* May be ack_seq or send_seq, depends on cmd */ - gboolean is_reply; + qq_transaction *trans; g_return_if_fail(buf != NULL && buf_len > 0); @@ -353,35 +183,38 @@ if (QQ_DEBUG) { purple_debug(PURPLE_DEBUG_INFO, "QQ", "==> [%05d] 0x%04X %s, from (0x%04X %s)\n", - seq, cmd, qq_get_cmd_desc(cmd), source_tag, qq_get_source_str(source_tag)); + seq, cmd, qq_get_cmd_desc(cmd), source_tag, qq_get_ver_desc(source_tag)); } bytes_not_read = buf_len - bytes - 1; /* ack packet, we need to update send tranactions */ /* we do not check duplication for server ack */ - is_reply = packet_check_ack(qd, cmd, seq); - if ( !is_reply ) { - if ( !qd->logged_in ) { - /* packets before login */ - qq_rcv_trans_push(qd, cmd, seq, buf + bytes, bytes_not_read); - return; /* do not process it now */ + trans = qq_trans_find_rcved(qd, cmd, seq); + if (trans == NULL) { + /* new server command */ + qq_trans_add_server_cmd(qd, cmd, seq, buf + bytes, bytes_not_read); + if ( qd->logged_in ) { + qq_proc_cmd_server(gc, cmd, seq, buf + bytes, bytes_not_read); } - - /* server intiated packet, we need to send ack and check duplicaion - * this must be put after processing b4_packet - * as these packets will be passed in twice */ - if (packet_is_dup(qd, seq)) { - purple_debug(PURPLE_DEBUG_WARNING, - "QQ", "dup [%05d] %s, discard...\n", seq, qq_get_cmd_desc(cmd)); - return; + return; + } + + if (qq_trans_is_dup(trans)) { + purple_debug(PURPLE_DEBUG_WARNING, + "QQ", "dup [%05d] %s, discard...\n", seq, qq_get_cmd_desc(cmd)); + return; + } + + if (qq_trans_is_server(trans)) { + if ( qd->logged_in ) { + qq_proc_cmd_server(gc, cmd, seq, buf + bytes, bytes_not_read); } - process_cmd_server(gc, cmd, seq, buf + bytes, bytes_not_read); return; } /* this is the length of all the encrypted data (also remove tail tag */ - process_cmd_reply(gc, cmd, seq, buf + bytes, bytes_not_read); + qq_proc_cmd_reply(gc, cmd, seq, buf + bytes, bytes_not_read); /* check is redirect or not, and do it now */ if (qd->is_redirect) { @@ -394,18 +227,7 @@ if (prev_login_status != qd->logged_in && qd->logged_in == TRUE) { /* logged_in, but we have packets before login */ - new_data = g_newa(guint8, MAX_PACKET_SIZE); - while (1) { - memset(new_data, 0, MAX_PACKET_SIZE); - new_data_len = qq_rcv_trans_pop(qd, &cmd, &seq, new_data, MAX_PACKET_SIZE); - if (new_data_len < 0) { - break; - } - if (new_data_len == 0) { - continue; - } - process_cmd_reply(gc, seq, cmd, new_data, new_data_len); - } + qq_trans_process_before_login(qd); } } @@ -464,8 +286,10 @@ * QQ need a keep alive packet in every 60 seconds gc->last_received = time(NULL); */ + /* purple_debug(PURPLE_DEBUG_INFO, "TCP_PENDING", "Read %d bytes from socket, rxlen is %d\n", buf_len, qd->tcp_rxlen); + */ qd->tcp_rxqueue = g_realloc(qd->tcp_rxqueue, buf_len + qd->tcp_rxlen); memcpy(qd->tcp_rxqueue + qd->tcp_rxlen, buf, buf_len); qd->tcp_rxlen += buf_len; @@ -482,9 +306,10 @@ break; } + /* purple_debug(PURPLE_DEBUG_INFO, "TCP_PENDING", "Packet len is %d bytes, rxlen is %d\n", pkt_len, qd->tcp_rxlen); - + */ if ( pkt_len < QQ_TCP_HEADER_LENGTH || *(qd->tcp_rxqueue + bytes) != QQ_PACKET_TAG || *(qd->tcp_rxqueue + pkt_len - 1) != QQ_PACKET_TAIL) { @@ -518,14 +343,14 @@ /* jump to next packet */ qd->tcp_rxlen -= pkt_len; if (qd->tcp_rxlen) { - purple_debug(PURPLE_DEBUG_ERROR, "TCP_PENDING", - "shrink tcp_rxqueue to %d\n", qd->tcp_rxlen); + /* + purple_debug(PURPLE_DEBUG_ERROR, "TCP_PENDING", "shrink tcp_rxqueue to %d\n", qd->tcp_rxlen); + */ jump = g_memdup(qd->tcp_rxqueue + pkt_len, qd->tcp_rxlen); g_free(qd->tcp_rxqueue); qd->tcp_rxqueue = jump; } else { - purple_debug(PURPLE_DEBUG_ERROR, "TCP_PENDING", - "free tcp_rxqueue\n"); + /* purple_debug(PURPLE_DEBUG_ERROR, "TCP_PENDING", "free tcp_rxqueue\n"); */ g_free(qd->tcp_rxqueue); qd->tcp_rxqueue = NULL; } @@ -591,8 +416,10 @@ g_return_val_if_fail(qd != NULL && qd->fd >= 0 && data != NULL && data_len > 0, -1); - purple_debug(PURPLE_DEBUG_INFO, "QQ", "Send %d bytes to socket %d\n", data_len, qd->fd); - + /* + purple_debug(PURPLE_DEBUG_INFO, "UDP_SEND_OUT", "Send %d bytes to socket %d\n", data_len, qd->fd); + */ + errno = 0; ret = send(qd->fd, data, data_len, 0); if (ret < 0 && errno == EAGAIN) { @@ -601,7 +428,7 @@ if (ret < 0) { /* TODO: what to do here - do we really have to disconnect? */ - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Send failed: %d, %s\n", errno, g_strerror(errno)); + purple_debug(PURPLE_DEBUG_ERROR, "UDP_SEND_OUT", "Send failed: %d, %s\n", errno, g_strerror(errno)); purple_connection_error_reason(qd->gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, g_strerror(errno)); } return ret; @@ -642,7 +469,7 @@ g_return_val_if_fail(qd != NULL && qd->fd >= 0 && data != NULL && data_len > 0, -1); /* - * purple_debug(PURPLE_DEBUG_INFO, "TCP_SEND_OUT", "Send %d bytes to socket %d\n", data_len, qd->fd); + purple_debug(PURPLE_DEBUG_INFO, "TCP_SEND_OUT", "Send %d bytes to socket %d\n", data_len, qd->fd); */ if (qd->tx_handler == 0) { @@ -652,13 +479,13 @@ errno = EAGAIN; } + /* purple_debug(PURPLE_DEBUG_INFO, "TCP_SEND_OUT", "Socket %d, total %d bytes is sent %d\n", qd->fd, data_len, ret); + */ if (ret < 0 && errno == EAGAIN) { /* socket is busy, send later */ - /* - * purple_debug(PURPLE_DEBUG_INFO, "TCP_SEND_OUT", "Socket is busy and send later\n"); - */ + purple_debug(PURPLE_DEBUG_INFO, "TCP_SEND_OUT", "Socket is busy and send later\n"); ret = 0; } else if (ret <= 0) { /* TODO: what to do here - do we really have to disconnect? */ @@ -679,70 +506,44 @@ return ret; } -static gboolean trans_timeout(gpointer data) +static gboolean network_timeout(gpointer data) { - PurpleConnection *gc; + PurpleConnection *gc = (PurpleConnection *) data; qq_data *qd; - guint8 *buf; - gint buf_len = 0; - guint16 cmd; - gint retries = 0; - int index; - - gc = (PurpleConnection *) data; + gboolean is_lost_conn; + g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, TRUE); + qd = (qq_data *) gc->proto_data; - qd = (qq_data *) gc->proto_data; - - index = 0; - buf = g_newa(guint8, MAX_PACKET_SIZE); + is_lost_conn = qq_trans_scan(qd); + if (is_lost_conn) { + purple_connection_error_reason(gc, + PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Connection lost")); + return TRUE; + } - while (1) { - if (index < 0) { - /* next record is NULL */ - break; - } - /* purple_debug(PURPLE_DEBUG_ERROR, "QQ", "scan begin %d\n", index); */ - memset(buf, 0, MAX_PACKET_SIZE); - buf_len = qq_send_trans_scan(qd, &index, buf, MAX_PACKET_SIZE, &cmd, &retries); - if (buf_len <= 0) { - /* curr record is empty, whole trans is NULL */ - break; - } - /* index = -1, when get last record of transactions */ - - /* purple_debug(PURPLE_DEBUG_ERROR, "QQ", "retries %d next index %d\n", retries, index); */ - if (retries > 0) { - if (qd->use_tcp) { - tcp_send_out(qd, buf, buf_len); - } else { - udp_send_out(qd, buf, buf_len); - } - continue; - } + if ( !qd->logged_in ) { + return TRUE; + } + + qd->itv_count.keep_alive--; + if (qd->itv_count.keep_alive <= 0) { + qd->itv_count.keep_alive = qd->itv_config.keep_alive; + qq_send_packet_keep_alive(gc); + return TRUE; + } - /* retries <= 0 */ - switch (cmd) { - case QQ_CMD_KEEP_ALIVE: - if (qd->logged_in) { - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Connection lost!\n"); - purple_connection_error_reason(gc, - PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Connection lost")); - qd->logged_in = FALSE; - } - break; - case QQ_CMD_LOGIN: - case QQ_CMD_REQUEST_LOGIN_TOKEN: - if (!qd->logged_in) { - /* cancel login progress */ - purple_connection_error_reason(gc, - PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Login failed, no reply")); - } - break; - default: - purple_debug(PURPLE_DEBUG_WARNING, "QQ", - "%s packet lost.\n", qq_get_cmd_desc(cmd)); - } + if (qd->itv_config.update <= 0) { + return TRUE; + } + + qd->itv_count.update--; + if (qd->itv_count.update <= 0) { + qd->itv_count.update = qd->itv_config.update; + qq_send_packet_get_buddies_online(gc, 0); + + qq_send_cmd_group_all_get_online_members(gc); + return TRUE; } return TRUE; /* if return FALSE, timeout callback stops */ @@ -756,6 +557,7 @@ PurpleConnection *gc; gchar *conn_msg; const gchar *passwd; + PurpleAccount *account ; gc = (PurpleConnection *) data; @@ -768,6 +570,7 @@ g_return_if_fail(gc != NULL && gc->proto_data != NULL); qd = (qq_data *) gc->proto_data; + account = purple_connection_get_account(gc); /* Connect is now complete; clear the PurpleProxyConnectData */ qd->connect_data = NULL; @@ -791,12 +594,34 @@ /* now generate md5 processed passwd */ passwd = purple_account_get_password(purple_connection_get_account(gc)); - g_return_if_fail(qd->pwkey == NULL); - qd->pwkey = encrypt_account_password(passwd); + + /* use twice-md5 of user password as session key since QQ 2003iii */ + qq_get_md5(qd->password_twice_md5, sizeof(qd->password_twice_md5), + (guint8 *)passwd, strlen(passwd)); + qq_get_md5(qd->password_twice_md5, sizeof(qd->password_twice_md5), + qd->password_twice_md5, sizeof(qd->password_twice_md5)); + + g_return_if_fail(qd->network_timeout == 0); + qd->itv_config.resend = purple_account_get_int(account, "resend_interval", 10); + if (qd->itv_config.resend <= 0) qd->itv_config.resend = 10; - g_return_if_fail(qd->resend_timeout == 0); - /* call trans_timeout every 5 seconds */ - qd->resend_timeout = purple_timeout_add(5000, trans_timeout, gc); + qd->itv_config.keep_alive = purple_account_get_int(account, "keep_alive_interval", 60); + if (qd->itv_config.keep_alive < 30) qd->itv_config.keep_alive = 30; + qd->itv_config.keep_alive /= qd->itv_config.resend; + qd->itv_count.keep_alive = qd->itv_config.keep_alive; + + qd->itv_config.update = purple_account_get_int(account, "update_interval", 300); + if (qd->itv_config.update > 0) { + if (qd->itv_config.update < qd->itv_config.keep_alive) { + qd->itv_config.update = qd->itv_config.keep_alive; + } + qd->itv_config.update /= qd->itv_config.resend; + qd->itv_count.update = qd->itv_config.update; + } else { + qd->itv_config.update = 0; + } + + qd->network_timeout = purple_timeout_add(qd->itv_config.resend *1000, network_timeout, gc); if (qd->use_tcp) gc->inpa = purple_input_add(qd->fd, PURPLE_INPUT_READ, tcp_pending, gc); @@ -808,7 +633,7 @@ purple_connection_update_progress(gc, conn_msg, QQ_CONNECT_STEPS - 1, QQ_CONNECT_STEPS); g_free(conn_msg); - qq_send_packet_request_login_token(gc); + qq_send_packet_token(gc); } static void udp_can_write(gpointer data, gint source, PurpleInputCondition cond) @@ -1039,16 +864,17 @@ qd = (qq_data *) gc->proto_data; purple_debug(PURPLE_DEBUG_INFO, "QQ", "Disconnecting ...\n"); + + if (qd->network_timeout > 0) { + purple_timeout_remove(qd->network_timeout); + qd->network_timeout = 0; + } + /* finish all I/O */ if (qd->fd >= 0 && qd->logged_in) { qq_send_packet_logout(gc); } - if (qd->resend_timeout > 0) { - purple_timeout_remove(qd->resend_timeout); - qd->resend_timeout = 0; - } - if (gc->inpa > 0) { purple_input_remove(gc->inpa); gc->inpa = 0; @@ -1092,35 +918,20 @@ qd->udp_query_data = NULL; } - memset(qd->rcv_window, 0, sizeof(qd->rcv_window)); - qq_rcv_trans_remove_all(qd); - qq_send_trans_remove_all(qd); + qq_trans_remove_all(qd); - if (qd->inikey) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "free inikey\n"); - g_free(qd->inikey); - qd->inikey = NULL; - } - if (qd->pwkey) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "free pwkey\n"); - g_free(qd->pwkey); - qd->pwkey = NULL; + if (qd->token) { + purple_debug(PURPLE_DEBUG_INFO, "QQ", "free token\n"); + g_free(qd->token); + qd->token = NULL; + qd->token_len = 0; } - if (qd->session_key) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "free session_key\n"); - g_free(qd->session_key); - qd->session_key = NULL; - } - if (qd->session_md5) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "free session_md5\n"); - g_free(qd->session_md5); - qd->session_md5 = NULL; - } - if (qd->my_ip) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "free my_ip\n"); - g_free(qd->my_ip); - qd->my_ip = NULL; - } + memset(qd->inikey, 0, sizeof(qd->inikey)); + memset(qd->password_twice_md5, 0, sizeof(qd->password_twice_md5)); + memset(qd->session_key, 0, sizeof(qd->session_key)); + memset(qd->session_md5, 0, sizeof(qd->session_md5)); + + qd->my_ip.s_addr = 0; qq_group_packets_free(qd); qq_group_free_all(qd); @@ -1168,19 +979,19 @@ return bytes; } -gint qq_send_data(qq_data *qd, guint16 cmd, guint8 *data, gint data_len) +/* data has been encrypted before */ +gint qq_send_data(qq_data *qd, guint16 cmd, guint16 seq, gboolean need_ack, + guint8 *data, gint data_len) { guint8 *buf; gint buf_len; gint bytes_sent; - gint seq; g_return_val_if_fail(qd != NULL, -1); g_return_val_if_fail(data != NULL && data_len > 0, -1); buf = g_newa(guint8, MAX_PACKET_SIZE); memset(buf, 0, MAX_PACKET_SIZE); - seq = ++(qd->send_seq); buf_len = encap(qd, buf, MAX_PACKET_SIZE, cmd, seq, data, data_len); if (buf_len <= 0) { return -1; @@ -1192,11 +1003,12 @@ bytes_sent = udp_send_out(qd, buf, buf_len); } - /* always need ack */ - qq_send_trans_append(qd, buf, buf_len, cmd, seq); - + if (need_ack) { + qq_trans_add_client_cmd(qd, cmd, seq, data, data_len); + } + if (QQ_DEBUG) { - qq_show_packet("QQ_SEND_DATA", buf, buf_len); + /* qq_show_packet("QQ_SEND_DATA", buf, buf_len); */ purple_debug(PURPLE_DEBUG_INFO, "QQ", "<== [%05d], %s, total %d bytes is sent %d\n", seq, qq_get_cmd_desc(cmd), buf_len, bytes_sent); @@ -1204,19 +1016,14 @@ return bytes_sent; } -/* send the packet generated with the given cmd and data - * return the number of bytes sent to socket if succeeds - * return -1 if there is any error */ +/* Encrypt data with session_key, then call qq_send_data */ gint qq_send_cmd_detail(qq_data *qd, guint16 cmd, guint16 seq, gboolean need_ack, guint8 *data, gint data_len) { - guint8 *buf; - gint buf_len; guint8 *encrypted_data; gint encrypted_len; - gint bytes_sent; - g_return_val_if_fail(qd != NULL && qd->session_key != NULL, -1); + g_return_val_if_fail(qd != NULL, -1); g_return_val_if_fail(data != NULL && data_len > 0, -1); encrypted_len = data_len + 16; /* at most 16 bytes more */ @@ -1224,35 +1031,10 @@ qq_encrypt(data, data_len, qd->session_key, encrypted_data, &encrypted_len); - buf = g_newa(guint8, MAX_PACKET_SIZE); - memset(buf, 0, MAX_PACKET_SIZE); - buf_len = encap(qd, buf, MAX_PACKET_SIZE, cmd, seq, encrypted_data, encrypted_len); - if (buf_len <= 0) { - return -1; - } - - if (QQ_DEBUG) { - qq_show_packet("QQ_SEND_CMD", buf, buf_len); - } - if (qd->use_tcp) { - bytes_sent = tcp_send_out(qd, buf, buf_len); - } else { - bytes_sent = udp_send_out(qd, buf, buf_len); - } - - /* if it does not need ACK, we send ACK manually several times */ - if (need_ack) { - qq_send_trans_append(qd, buf, buf_len, cmd, seq); - } - - if (QQ_DEBUG) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", - "<== [%05d], %s, total %d bytes is sent %d\n", - seq, qq_get_cmd_desc(cmd), buf_len, bytes_sent); - } - return bytes_sent; + return qq_send_data(qd, cmd, seq, need_ack, encrypted_data, encrypted_len); } +/* set seq and need_ack, then call qq_send_cmd_detail */ gint qq_send_cmd(qq_data *qd, guint16 cmd, guint8 *data, gint data_len) { g_return_val_if_fail(qd != NULL, -1);
--- a/libpurple/protocols/qq/qq_network.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/qq_network.h Thu Aug 07 16:00:16 2008 +0000 @@ -22,8 +22,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ -#ifndef _QQ_PROXY_H -#define _QQ_PROXY_H +#ifndef _QQ_NETWORK_H +#define _QQ_NETWORK_H #include <glib.h> #include "connection.h" @@ -36,8 +36,9 @@ void qq_disconnect(PurpleConnection *gc); void qq_connect_later(PurpleConnection *gc); -gint qq_send_data(qq_data *qd, guint16 cmd, guint8 *data, gint datalen); gint qq_send_cmd(qq_data *qd, guint16 cmd, guint8 *data, gint datalen); +gint qq_send_data(qq_data *qd, guint16 cmd, guint16 seq, gboolean need_ack, + guint8 *data, gint data_len); gint qq_send_cmd_detail(qq_data *qd, guint16 cmd, guint16 seq, gboolean need_ack, guint8 *data, gint data_len);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/qq/qq_process.c Thu Aug 07 16:00:16 2008 +0000 @@ -0,0 +1,266 @@ +/** + * @file qq_network.c + * + * purple + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include "cipher.h" +#include "debug.h" +#include "internal.h" + +#ifdef _WIN32 +#define random rand +#define srandom srand +#endif + +#include "buddy_info.h" +#include "buddy_list.h" +#include "buddy_opt.h" +#include "group_info.h" +#include "group_free.h" +#include "char_conv.h" +#include "crypt.h" +#include "group_network.h" +#include "header_info.h" +#include "qq_base.h" +#include "im.h" +#include "qq_process.h" +#include "packet_parse.h" +#include "qq_network.h" +#include "qq_trans.h" +#include "sys_msg.h" +#include "utils.h" + +/* default process, decrypt and dump */ +static void process_cmd_unknow(PurpleConnection *gc,gchar *title, guint8 *buf, gint buf_len, guint16 cmd, guint16 seq) +{ + qq_data *qd; + guint8 *data; + gint data_len; + gchar *msg_utf8 = NULL; + + g_return_if_fail(buf != NULL && buf_len != 0); + + qq_show_packet(title, buf, buf_len); + + qd = (qq_data *) gc->proto_data; + + data_len = buf_len; + data = g_newa(guint8, data_len); + memset(data, 0, data_len); + if ( !qq_decrypt(buf, buf_len, qd->session_key, data, &data_len )) { + purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Fail decrypt packet with default process\n"); + return; + } + + qq_hex_dump(PURPLE_DEBUG_WARNING, "QQ", + data, data_len, + ">>> [%d] %s -> [default] decrypt and dump", + seq, qq_get_cmd_desc(cmd)); + + msg_utf8 = try_dump_as_gbk(data, data_len); + if (msg_utf8) { + g_free(msg_utf8); + } +} + +void qq_proc_cmd_server(PurpleConnection *gc, + guint16 cmd, guint16 seq, guint8 *data, gint data_len) +{ + /* now process the packet */ + switch (cmd) { + case QQ_CMD_RECV_IM: + qq_process_recv_im(data, data_len, seq, gc); + break; + case QQ_CMD_RECV_MSG_SYS: + qq_process_msg_sys(data, data_len, seq, gc); + break; + case QQ_CMD_RECV_MSG_BUDDY_CHANGE_STATUS: + qq_process_buddy_change_status(data, data_len, gc); + break; + default: + process_cmd_unknow(gc, "Unknow SERVER CMD", data, data_len, cmd, seq); + break; + } +} + +static void process_cmd_login(PurpleConnection *gc, guint8 *data, gint data_len) +{ + qq_data *qd; + guint ret_8; + + g_return_if_fail (gc != NULL && gc->proto_data != NULL); + + qd = (qq_data *) gc->proto_data; + + ret_8 = qq_process_login_reply(data, data_len, gc); + if (ret_8 == QQ_LOGIN_REPLY_OK) { + purple_debug(PURPLE_DEBUG_INFO, "QQ", "Login repliess OK; everything is fine\n"); + + purple_connection_set_state(gc, PURPLE_CONNECTED); + qd->logged_in = TRUE; /* must be defined after sev_finish_login */ + + /* now initiate QQ Qun, do it first as it may take longer to finish */ + qq_group_init(gc); + + /* Now goes on updating my icon/nickname, not showing info_window */ + qd->modifying_face = FALSE; + + qq_send_packet_get_info(gc, qd->uid, FALSE); + /* grab my level */ + qq_send_packet_get_level(gc, qd->uid); + + qq_send_packet_change_status(gc); + + /* refresh buddies */ + qq_send_packet_get_buddies_list(gc, 0); + + /* refresh groups */ + qq_send_packet_get_all_list_with_group(gc, 0); + + return; + } + + if (ret_8 == QQ_LOGIN_REPLY_REDIRECT) { + qd->is_redirect = TRUE; + /* + purple_debug(PURPLE_DEBUG_WARNING, "QQ", + "Redirected to new server: %s:%d\n", qd->real_hostname, qd->real_port); + */ + return; + } + + if (ret_8 == QQ_LOGIN_REPLY_ERR_PWD) { + if (!purple_account_get_remember_password(gc->account)) { + purple_account_set_password(gc->account, NULL); + } + purple_connection_error_reason(gc, + PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, _("Incorrect password.")); + return; + } + + if (ret_8 == QQ_LOGIN_REPLY_ERR_MISC) { + if (purple_debug_is_enabled()) + purple_connection_error_reason(gc, + PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Unable to login. Check debug log.")); + else + purple_connection_error_reason(gc, + PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Unable to login")); + return; + } +} + +void qq_proc_cmd_reply(PurpleConnection *gc, + guint16 cmd, guint16 seq, guint8 *data, gint data_len) +{ + guint8 ret_8 = 0; + guint16 ret_16 = 0; + guint32 ret_32 = 0; + gchar *error_msg = NULL; + + switch (cmd) { + case QQ_CMD_TOKEN: + ret_8 = qq_process_token_reply(gc, error_msg, data, data_len); + if (ret_8 != QQ_TOKEN_REPLY_OK) { + if (error_msg == NULL) { + error_msg = g_strdup_printf( _("Invalid token reply code, 0x%02X"), ret_8); + } + purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, error_msg); + g_free(error_msg); + return; + } + + qq_send_packet_login(gc); + break; + case QQ_CMD_LOGIN: + process_cmd_login(gc, data, data_len); + break; + case QQ_CMD_UPDATE_INFO: + qq_process_modify_info_reply(data, data_len, gc); + break; + case QQ_CMD_ADD_BUDDY_WO_AUTH: + qq_process_add_buddy_reply(data, data_len, seq, gc); + break; + case QQ_CMD_DEL_BUDDY: + qq_process_remove_buddy_reply(data, data_len, gc); + break; + case QQ_CMD_REMOVE_SELF: + qq_process_remove_self_reply(data, data_len, gc); + break; + case QQ_CMD_BUDDY_AUTH: + qq_process_add_buddy_auth_reply(data, data_len, gc); + break; + case QQ_CMD_GET_USER_INFO: + qq_process_get_info_reply(data, data_len, gc); + break; + case QQ_CMD_CHANGE_ONLINE_STATUS: + qq_process_change_status_reply(data, data_len, gc); + break; + case QQ_CMD_SEND_IM: + qq_process_send_im_reply(data, data_len, gc); + break; + case QQ_CMD_KEEP_ALIVE: + qq_process_keep_alive(data, data_len, gc); + break; + case QQ_CMD_GET_BUDDIES_ONLINE: + ret_8 = qq_process_get_buddies_online_reply(data, data_len, gc); + if (ret_8 > 0 && ret_8 < 0xff) { + purple_debug(PURPLE_DEBUG_INFO, "QQ", "Requesting for more online buddies\n"); + qq_send_packet_get_buddies_online(gc, ret_8); + } else { + purple_debug(PURPLE_DEBUG_INFO, "QQ", "All online buddies received\n"); + /* Fixme: this should not be called once*/ + qq_send_packet_get_buddies_levels(gc); + + qq_refresh_all_buddy_status(gc); + } + break; + case QQ_CMD_GET_LEVEL: + qq_process_get_level_reply(data, data_len, gc); + break; + case QQ_CMD_GET_BUDDIES_LIST: + ret_16 = qq_process_get_buddies_list_reply(data, data_len, gc); + if (ret_16 > 0 && ret_16 < 0xffff) { + purple_debug(PURPLE_DEBUG_INFO, "QQ", "Requesting for more buddies\n"); + qq_send_packet_get_buddies_list(gc, ret_16); + } else { + purple_debug(PURPLE_DEBUG_INFO, "QQ", "All buddies received. Requesting buddies' levels\n"); + qq_send_packet_get_buddies_online(gc, 0); + } + break; + case QQ_CMD_GROUP_CMD: + qq_process_group_cmd_reply(data, data_len, seq, gc); + break; + case QQ_CMD_GET_ALL_LIST_WITH_GROUP: + ret_32 = qq_process_get_all_list_with_group_reply(data, data_len, gc); + if (ret_32 > 0 && ret_32 < 0xffffffff) { + purple_debug(PURPLE_DEBUG_INFO, "QQ", "Requesting for more buddies and groups\n"); + qq_send_packet_get_all_list_with_group(gc, ret_32); + } else { + purple_debug(PURPLE_DEBUG_INFO, "QQ", "All buddies and groups received\n"); + } + break; + default: + process_cmd_unknow(gc, "Unknow reply CMD", data, data_len, cmd, seq); + break; + } +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/qq/qq_process.h Thu Aug 07 16:00:16 2008 +0000 @@ -0,0 +1,38 @@ +/** + * @file qq_process.h + * + * purple + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#ifndef _QQ_PROCESS_H +#define _QQ_PROCESS_H + +#include <glib.h> +#include "connection.h" + +#include "qq.h" + +void qq_proc_cmd_reply(PurpleConnection *gc, + guint16 cmd, guint16 seq, guint8 *data, gint data_len); +void qq_proc_cmd_server(PurpleConnection *gc, + guint16 cmd, guint16 seq, guint8 *data, gint data_len); +#endif +
--- a/libpurple/protocols/qq/qq_trans.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/qq_trans.c Thu Aug 07 16:00:16 2008 +0000 @@ -32,215 +32,259 @@ #include "header_info.h" #include "qq_network.h" +#include "qq_process.h" #include "qq_trans.h" -#define QQ_RESEND_MAX 8 /* max resend per packet */ - -typedef struct _transaction { - guint16 seq; - guint16 cmd; - guint8 *buf; - gint buf_len; - - gint fd; - gint retries; - time_t create_time; -} transaction; - -void qq_send_trans_append(qq_data *qd, guint8 *buf, gint buf_len, guint16 cmd, guint16 seq) -{ - transaction *trans = g_new0(transaction, 1); - - g_return_if_fail(trans != NULL); +#define QQ_RESEND_MAX 3 /* max resend per packet */ - trans->fd = qd->fd; - trans->cmd = cmd; - trans->seq = seq; - trans->retries = QQ_RESEND_MAX; - trans->create_time = time(NULL); - trans->buf = g_memdup(buf, buf_len); /* don't use g_strdup, may have 0x00 */ - trans->buf_len = buf_len; - - purple_debug(PURPLE_DEBUG_ERROR, "QQ", - "Add to transaction, seq = %d, buf = %p, len = %d\n", - trans->seq, trans->buf, trans->buf_len); - qd->send_trans = g_list_append(qd->send_trans, trans); -} - -/* Remove a packet with seq from send trans */ -void qq_send_trans_remove(qq_data *qd, gpointer data) -{ - transaction *trans = (transaction *)data; - - g_return_if_fail(qd != NULL && data != NULL); - - purple_debug(PURPLE_DEBUG_INFO, "QQ", - "ack [%05d] %s, remove from send tranactions\n", - trans->seq, qq_get_cmd_desc(trans->cmd)); - - if (trans->buf) g_free(trans->buf); - qd->send_trans = g_list_remove(qd->send_trans, trans); - g_free(trans); -} - -gpointer qq_send_trans_find(qq_data *qd, guint16 cmd, guint16 seq) +qq_transaction *qq_trans_find_rcved(qq_data *qd, guint16 cmd, guint16 seq) { GList *curr; GList *next; - transaction *trans; + qq_transaction *trans; + + if (qd->transactions == NULL) { + return NULL; + } - curr = qd->send_trans; - while(curr) { + next = qd->transactions; + while( (curr = next) ) { next = curr->next; - trans = (transaction *) (curr->data); + + trans = (qq_transaction *) (curr->data); if(trans->cmd == cmd && trans->seq == seq) { + if (trans->rcved_times == 0) { + trans->scan_times = 0; + } + trans->rcved_times++; + if (qq_trans_is_server(trans) && qq_trans_is_dup(trans)) { + /* server may not get our confirm reply before, send reply again*/ + if (trans->data != NULL && trans->data_len > 0) { + qq_send_data(qd, trans->cmd, trans->seq, FALSE, trans->data, trans->data_len); + } + } return trans; } - curr = next; } return NULL; } -/* clean up send trans and free all contents */ -void qq_send_trans_remove_all(qq_data *qd) +gboolean qq_trans_is_server(qq_transaction *trans) +{ + g_return_val_if_fail(trans != NULL, FALSE); + + if (trans->flag & QQ_TRANS_IS_SERVER) + return TRUE; + else + return FALSE; +} + +gboolean qq_trans_is_dup(qq_transaction *trans) +{ + g_return_val_if_fail(trans != NULL, TRUE); + + if (trans->rcved_times > 1) + return TRUE; + else + return FALSE; +} + +/* Remove a packet with seq from send trans */ +static void trans_remove(qq_data *qd, qq_transaction *trans) +{ + g_return_if_fail(qd != NULL && trans != NULL); + + purple_debug(PURPLE_DEBUG_INFO, "QQ_TRANS", + "Remove [%s%05d] retry %d rcved %d scan %d %s\n", + (trans->flag & QQ_TRANS_IS_SERVER) ? "SRV-" : "", + trans->seq, + trans->send_retries, trans->rcved_times, trans->scan_times, + qq_get_cmd_desc(trans->cmd)); + + if (trans->data) g_free(trans->data); + qd->transactions = g_list_remove(qd->transactions, trans); + g_free(trans); +} + +void qq_trans_add_client_cmd(qq_data *qd, guint16 cmd, guint16 seq, guint8 *data, gint data_len) +{ + qq_transaction *trans = g_new0(qq_transaction, 1); + + g_return_if_fail(trans != NULL); + + trans->flag = 0; + if (cmd == QQ_CMD_TOKEN || cmd == QQ_CMD_LOGIN || cmd == QQ_CMD_KEEP_ALIVE) { + trans->flag |= QQ_TRANS_CLI_IMPORT; + } + trans->fd = qd->fd; + trans->cmd = cmd; + trans->seq = seq; + trans->send_retries = QQ_RESEND_MAX; + trans->rcved_times = 0; + trans->scan_times = 0; + trans->data = NULL; + trans->data_len = 0; + if (data != NULL && data_len > 0) { + trans->data = g_memdup(data, data_len); /* don't use g_strdup, may have 0x00 */ + trans->data_len = data_len; + } + purple_debug(PURPLE_DEBUG_ERROR, "QQ_TRANS", + "Add client cmd, seq = %d, data = %p, len = %d\n", + trans->seq, trans->data, trans->data_len); + qd->transactions = g_list_append(qd->transactions, trans); +} + +void qq_trans_add_server_cmd(qq_data *qd, guint16 cmd, guint16 seq, guint8 *data, gint data_len) +{ + qq_transaction *trans = g_new0(qq_transaction, 1); + + g_return_if_fail(trans != NULL); + + trans->flag = QQ_TRANS_IS_SERVER; + if ( !qd->logged_in ) { + trans->flag |= QQ_TRANS_BEFORE_LOGIN; + } + trans->fd = qd->fd; + trans->cmd = cmd; + trans->seq = seq; + trans->send_retries = 0; + trans->rcved_times = 1; + trans->scan_times = 0; + trans->data = NULL; + trans->data_len = 0; + if (data != NULL && data_len > 0) { + trans->data = g_memdup(data, data_len); /* don't use g_strdup, may have 0x00 */ + trans->data_len = data_len; + } + purple_debug(PURPLE_DEBUG_ERROR, "QQ_TRANS", + "Add server cmd, seq = %d, data = %p, len = %d\n", + trans->seq, trans->data, trans->data_len); + qd->transactions = g_list_append(qd->transactions, trans); +} + +void qq_trans_process_before_login(qq_data *qd) { GList *curr; GList *next; - transaction *trans; + qq_transaction *trans; + + g_return_if_fail(qd != NULL); + + next = qd->transactions; + while( (curr = next) ) { + next = curr->next; + trans = (qq_transaction *) (curr->data); + /* purple_debug(PURPLE_DEBUG_ERROR, "QQ_TRANS", "Scan [%d]\n", trans->seq); */ + + if ( !(trans->flag & QQ_TRANS_IS_SERVER) ) { + continue; + } + if ( !(trans->flag & QQ_TRANS_BEFORE_LOGIN) ) { + continue; + } + // set QQ_TRANS_BEFORE_LOGIN off + trans->flag &= ~QQ_TRANS_BEFORE_LOGIN; + + purple_debug(PURPLE_DEBUG_ERROR, "QQ_TRANS", + "Process server cmd before login, seq %d, data %p, len %d, send_retries %d\n", + trans->seq, trans->data, trans->data_len, trans->send_retries); + + qq_proc_cmd_reply(qd->gc, trans->seq, trans->cmd, trans->data, trans->data_len); + } + + /* purple_debug(PURPLE_DEBUG_INFO, "QQ_TRANS", "Scan finished\n"); */ + return; +} + +gboolean qq_trans_scan(qq_data *qd) +{ + GList *curr; + GList *next; + qq_transaction *trans; + + g_return_val_if_fail(qd != NULL, FALSE); + + next = qd->transactions; + while( (curr = next) ) { + next = curr->next; + trans = (qq_transaction *) (curr->data); + /* purple_debug(PURPLE_DEBUG_INFO, "QQ_TRANS", "Scan [%d]\n", trans->seq); */ + + if (trans->flag & QQ_TRANS_BEFORE_LOGIN) { + /* keep server cmd before login*/ + continue; + } + + trans->scan_times++; + if (trans->scan_times <= 1) { + /* skip in 10 seconds */ + continue; + } + + if (trans->rcved_times > 0) { + /* Has been received */ + trans_remove(qd, trans); + continue; + } + + if (trans->flag & QQ_TRANS_IS_SERVER) { + continue; + } + + /* Never get reply */ + trans->send_retries--; + if (trans->send_retries <= 0) { + purple_debug(PURPLE_DEBUG_WARNING, "QQ_TRANS", + "[%d] %s is lost.\n", + trans->seq, qq_get_cmd_desc(trans->cmd)); + if (trans->flag & QQ_TRANS_CLI_IMPORT) { + return TRUE; + } + + purple_debug(PURPLE_DEBUG_ERROR, "QQ_TRANS", + "Lost [%d] %s, data %p, len %d, retries %d\n", + trans->seq, qq_get_cmd_desc(trans->cmd), + trans->data, trans->data_len, trans->send_retries); + trans_remove(qd, trans); + continue; + } + + purple_debug(PURPLE_DEBUG_ERROR, "QQ_TRANS", + "Resend [%d] %s data %p, len %d, send_retries %d\n", + trans->seq, qq_get_cmd_desc(trans->cmd), + trans->data, trans->data_len, trans->send_retries); + qq_send_data(qd, trans->cmd, trans->seq, FALSE, trans->data, trans->data_len); + } + + /* purple_debug(PURPLE_DEBUG_INFO, "QQ_TRANS", "Scan finished\n"); */ + return FALSE; +} + +/* clean up send trans and free all contents */ +void qq_trans_remove_all(qq_data *qd) +{ + GList *curr; + GList *next; + qq_transaction *trans; gint count = 0; - curr = qd->send_trans; + curr = qd->transactions; while(curr) { next = curr->next; - trans = (transaction *) (curr->data); + trans = (qq_transaction *) (curr->data); /* - purple_debug(PURPLE_DEBUG_ERROR, "QQ", + purple_debug(PURPLE_DEBUG_ERROR, "QQ_TRANS", "Remove to transaction, seq = %d, buf = %p, len = %d\n", trans->seq, trans->buf, trans->len); */ - qq_send_trans_remove(qd, trans); + trans_remove(qd, trans); count++; curr = next; } - g_list_free(qd->send_trans); - - purple_debug(PURPLE_DEBUG_INFO, "QQ", "%d packets in send tranactions are freed!\n", count); -} - -gint qq_send_trans_scan(qq_data *qd, gint *start, - guint8 *buf, gint maxlen, guint16 *cmd, gint *retries) -{ - GList *curr; - GList *next = NULL; - transaction *trans; - gint copylen; - - g_return_val_if_fail(qd != NULL && *start >= 0 && maxlen > 0, -1); - - /* purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Scan from %d\n", *start); */ - curr = g_list_nth(qd->send_trans, *start); - while(curr) { - next = curr->next; - *start = g_list_position(qd->send_trans, next); - - trans = (transaction *) (curr->data); - if (trans->buf == NULL || trans->buf_len <= 0) { - qq_send_trans_remove(qd, trans); - curr = next; - continue; - } - - if (trans->retries < 0) { - purple_debug(PURPLE_DEBUG_ERROR, "QQ", - "Remove transaction, seq %d, buf %p, len %d, retries %d, next %d\n", - trans->seq, trans->buf, trans->buf_len, trans->retries, *start); - qq_send_trans_remove(qd, trans); - curr = next; - continue; - } - - purple_debug(PURPLE_DEBUG_ERROR, "QQ", - "Resend transaction, seq %d, buf %p, len %d, retries %d, next %d\n", - trans->seq, trans->buf, trans->buf_len, trans->retries, *start); - copylen = MIN(trans->buf_len, maxlen); - g_memmove(buf, trans->buf, copylen); - - *cmd = trans->cmd; - *retries = trans->retries; - trans->retries--; - return copylen; - } - - /* purple_debug(PURPLE_DEBUG_INFO, "QQ", "Scan finished\n"); */ - return -1; -} - -void qq_rcv_trans_push(qq_data *qd, guint16 cmd, guint16 seq, guint8 *data, gint data_len) -{ - transaction *trans = g_new0(transaction, 1); - - g_return_if_fail(data != NULL && data_len > 0); - g_return_if_fail(trans != NULL); + g_list_free(qd->transactions); - trans->cmd = cmd; - trans->seq = seq; - trans->buf = g_memdup(data, data_len); - trans->buf_len = data_len; - trans->create_time = time(NULL); - - if (qd->rcv_trans == NULL) - qd->rcv_trans = g_queue_new(); - - g_queue_push_head(qd->rcv_trans, trans); + purple_debug(PURPLE_DEBUG_INFO, "QQ_TRANS", "Free all %d packets\n", count); } - -gint qq_rcv_trans_pop(qq_data *qd, guint16 *cmd, guint16 *seq, guint8 *data, gint max_len) -{ - transaction *trans = NULL; - gint copy_len; - - g_return_val_if_fail(data != NULL && max_len > 0, -1); - - if (g_queue_is_empty(qd->rcv_trans)) { - return -1; - } - trans = (transaction *) g_queue_pop_head(qd->rcv_trans); - if (trans == NULL) { - return 0; - } - if (trans->buf == NULL || trans->buf_len <= 0) { - return 0; - } - - copy_len = MIN(max_len, trans->buf_len); - g_memmove(data, trans->buf, copy_len); - *cmd = trans->cmd; - *seq = trans->seq; - - g_free(trans->buf); - g_free(trans); - return copy_len; -} - -/* clean up the packets before login */ -void qq_rcv_trans_remove_all(qq_data *qd) -{ - transaction *trans = NULL; - gint count = 0; - - g_return_if_fail(qd != NULL); - - /* now clean up my own data structures */ - if (qd->rcv_trans != NULL) { - while (NULL != (trans = g_queue_pop_tail(qd->rcv_trans))) { - g_free(trans->buf); - g_free(trans); - count++; - } - g_queue_free(qd->rcv_trans); - } - purple_debug(PURPLE_DEBUG_INFO, "QQ", "%d packets in receive tranactions are freed!\n", count); -}
--- a/libpurple/protocols/qq/qq_trans.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/qq_trans.h Thu Aug 07 16:00:16 2008 +0000 @@ -28,15 +28,34 @@ #include <glib.h> #include "qq.h" -void qq_send_trans_append(qq_data *qd, guint8 *buf, gint bus_len, guint16 cmd, guint16 seq); -void qq_send_trans_remove(qq_data *qd, gpointer data); -gpointer qq_send_trans_find(qq_data *qd, guint16 cmd, guint16 seq); -void qq_send_trans_remove_all(qq_data *qd); +enum { + QQ_TRANS_IS_SERVER = 0x01, /* Is server command or client command */ + /* prefix QQ_TRANS_CLI is for client command*/ + QQ_TRANS_CLI_EMERGE = 0x02, /* send at once; or may wait for next reply*/ + QQ_TRANS_CLI_IMPORT = 0x04, /* Only notice if not get reply; or resend, disconn if reties get 0*/ + QQ_TRANS_BEFORE_LOGIN = 0x08, /* server command before login*/ +}; + +typedef struct _qq_transaction { + guint8 flag; + guint16 seq; + guint16 cmd; + guint8 *data; + gint data_len; -gint qq_send_trans_scan(qq_data *qd, gint *start, guint8 *buf, gint maxlen, guint16 *cmd, gint *retries); + gint fd; + gint send_retries; + gint rcved_times; + gint scan_times; +} qq_transaction; -void qq_rcv_trans_push(qq_data *qd, guint16 cmd, guint16 seq, guint8 *data, gint data_len); -gint qq_rcv_trans_pop(qq_data *qd, guint16 *cmd, guint16* seq, guint8 *data, gint max_len); -void qq_rcv_trans_remove_all(qq_data *qd); +qq_transaction *qq_trans_find_rcved(qq_data *qd, guint16 cmd, guint16 seq); +gboolean qq_trans_is_server(qq_transaction *trans) ; +gboolean qq_trans_is_dup(qq_transaction *trans); +void qq_trans_add_client_cmd(qq_data *qd, guint16 cmd, guint16 seq, guint8 *data, gint data_len); +void qq_trans_add_server_cmd(qq_data *qd, guint16 cmd, guint16 seq, guint8 *data, gint data_len); +void qq_trans_process_before_login(qq_data *qd); +gboolean qq_trans_scan(qq_data *qd); +void qq_trans_remove_all(qq_data *qd); #endif
--- a/libpurple/protocols/qq/send_file.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/send_file.c Thu Aug 07 16:00:16 2008 +0000 @@ -29,12 +29,12 @@ #include "network.h" #include "notify.h" -#include "buddy_status.h" +#include "buddy_list.h" #include "crypt.h" #include "file_trans.h" #include "header_info.h" #include "im.h" -#include "keep_alive.h" +#include "qq_base.h" #include "packet_parse.h" #include "qq_network.h" #include "utils.h" @@ -447,7 +447,7 @@ info = g_new0(ft_info, 1); info->to_uid = to_uid; info->send_seq = qd->send_seq; - info->local_internet_ip = g_ntohl(inet_addr(qd->my_ip)); + info->local_internet_ip = qd->my_ip.s_addr; info->local_internet_port = qd->my_port; info->local_real_ip = 0x00000000; info->conn_method = 0x00; @@ -784,7 +784,7 @@ qd = (qq_data *) gc->proto_data; info = g_newa(ft_info, 1); - info->local_internet_ip = g_ntohl(inet_addr(qd->my_ip)); + info->local_internet_ip = qd->my_ip.s_addr; info->local_internet_port = qd->my_port; info->local_real_ip = 0x00000000; info->to_uid = sender_uid; @@ -814,11 +814,11 @@ q_bud = (b == NULL) ? NULL : (qq_buddy *) b->proto_data; if (q_bud) { if(0 != info->remote_real_ip) { - g_memmove(q_bud->ip, &info->remote_real_ip, 4); + g_memmove(&(q_bud->ip), &info->remote_real_ip, sizeof(q_bud->ip)); q_bud->port = info->remote_minor_port; } else if (0 != info->remote_internet_ip) { - g_memmove(q_bud->ip, &info->remote_internet_ip, 4); + g_memmove(&(q_bud->ip), &info->remote_internet_ip, sizeof(q_bud->ip)); q_bud->port = info->remote_major_port; } @@ -831,7 +831,7 @@ } else - purple_debug(PURPLE_DEBUG_WARNING, "QQ", "buddy %d is not in my friendlist\n", sender_uid); + purple_debug(PURPLE_DEBUG_WARNING, "QQ", "buddy %d is not in list\n", sender_uid); g_free(sender_name); g_strfreev(fileinfo);
--- a/libpurple/protocols/qq/send_file.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/send_file.h Thu Aug 07 16:00:16 2008 +0000 @@ -26,11 +26,12 @@ #define _QQ_QQ_SEND_FILE_H_ #include "ft.h" +#include "qq.h" typedef struct _ft_info { guint32 to_uid; guint16 send_seq; - guint8 file_session_key[16]; + guint8 file_session_key[QQ_KEY_LENGTH]; guint8 conn_method; guint32 remote_internet_ip; guint16 remote_internet_port;
--- a/libpurple/protocols/qq/sys_msg.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/sys_msg.c Thu Aug 07 16:00:16 2008 +0000 @@ -44,6 +44,7 @@ QQ_MSG_SYS_ADD_CONTACT_REQUEST = 0x02, QQ_MSG_SYS_ADD_CONTACT_APPROVED = 0x03, QQ_MSG_SYS_ADD_CONTACT_REJECTED = 0x04, + QQ_MSG_SYS_NOTICE= 0x06, QQ_MSG_SYS_NEW_VERSION = 0x09 }; @@ -277,6 +278,20 @@ g_free(name); } +static void _qq_process_msg_sys_notice(PurpleConnection *gc, gchar *from, gchar *to, gchar *msg_utf8) +{ + gchar *title, *content; + + g_return_if_fail(from != NULL && to != NULL); + + title = g_strdup_printf(_("Notice from: %s"), from); + content = g_strdup_printf(_("%s"), msg_utf8); + + purple_notify_info(gc, NULL, title, content); + g_free(title); + g_free(content); +} + void qq_process_msg_sys(guint8 *buf, gint buf_len, guint16 seq, PurpleConnection *gc) { qq_data *qd; @@ -320,9 +335,12 @@ case QQ_MSG_SYS_ADD_CONTACT_REJECTED: _qq_process_msg_sys_add_contact_rejected(gc, from, to, msg_utf8); break; + case QQ_MSG_SYS_NOTICE: + _qq_process_msg_sys_notice(gc, from, to, msg_utf8); + break; case QQ_MSG_SYS_NEW_VERSION: purple_debug(PURPLE_DEBUG_WARNING, "QQ", - "QQ server says there is newer version than %s\n", qq_get_source_str(QQ_CLIENT)); + "QQ server says there is newer version than %s\n", qq_get_ver_desc(QQ_CLIENT)); break; default: purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Recv unknown sys msg code: %s\n", code);
--- a/libpurple/protocols/qq/utils.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/utils.c Thu Aug 07 16:00:16 2008 +0000 @@ -30,6 +30,8 @@ #include "win32dep.h" #endif +#include "cipher.h" + #include "char_conv.h" #include "debug.h" #include "prefs.h" @@ -50,6 +52,21 @@ } */ +void qq_get_md5(guint8 *md5, gint md5_len, const guint8* const src, gint src_len) +{ + PurpleCipher *cipher; + PurpleCipherContext *context; + + g_return_if_fail(md5 != NULL && md5_len > 0); + g_return_if_fail(src != NULL && src_len > 0); + + cipher = purple_ciphers_find_cipher("md5"); + context = purple_cipher_context_new(cipher, NULL); + purple_cipher_context_append(context, src, src_len); + purple_cipher_context_digest(context, md5_len, md5, NULL); + purple_cipher_context_destroy(context); +} + gchar *get_name_by_index_str(gchar **array, const gchar *index_str, gint amount) { gint index; @@ -97,7 +114,7 @@ g_memmove(input, data, len); input[len] = 0x00; - segments = g_strsplit((gchar *) input, delimit, 0); + segments = g_strsplit_set((gchar *) input, delimit, 0); if (expected_fields <= 0) return segments; @@ -123,10 +140,20 @@ return segments; } -/* given a four-byte ip data, convert it into a human readable ip string - * the return needs to be freed */ -gchar *gen_ip_str(guint8 *ip) +/* convert Purple name to original QQ UID */ +guint32 purple_name_to_uid(const gchar *const name) { + guint32 ret; + g_return_val_if_fail(name != NULL, 0); + + ret = strtol(name, NULL, 10); + if (errno == ERANGE) + return 0; + else + return ret; +} + +gchar *gen_ip_str(guint8 *ip) { gchar *ret; if (ip == NULL || ip[0] == 0) { ret = g_new(gchar, 1); @@ -149,19 +176,6 @@ return ip; } -/* convert Purple name to original QQ UID */ -guint32 purple_name_to_uid(const gchar *const name) -{ - guint32 ret; - g_return_val_if_fail(name != NULL, 0); - - ret = strtol(name, NULL, 10); - if (errno == ERANGE) - return 0; - else - return ret; -} - /* convert a QQ UID to a unique name of Purple * the return needs to be freed */ gchar *uid_to_purple_name(guint32 uid)
--- a/libpurple/protocols/qq/utils.h Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/qq/utils.h Thu Aug 07 16:00:16 2008 +0000 @@ -30,6 +30,8 @@ #include "debug.h" +void qq_get_md5(guint8 *md5, gint md5_len, const guint8* const src, gint src_len); + gchar *get_name_by_index_str(gchar **array, const gchar *index_str, gint amount); gchar *get_index_str_by_name(gchar **array, const gchar *name, gint amount); gint qq_string_to_dec_value(const gchar *str);
--- a/libpurple/protocols/sametime/sametime.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/sametime/sametime.c Thu Aug 07 16:00:16 2008 +0000 @@ -1816,7 +1816,7 @@ who = g_strdup_printf(_("Announcement from %s"), who); msg = purple_markup_linkify(text); - purple_conversation_write(conv, who, msg, PURPLE_MESSAGE_RECV, time(NULL)); + purple_conversation_write(conv, who, msg ? msg : "", PURPLE_MESSAGE_RECV, time(NULL)); g_free(who); g_free(msg); }
--- a/libpurple/protocols/yahoo/yahoo_picture.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/protocols/yahoo/yahoo_picture.c Thu Aug 07 16:00:16 2008 +0000 @@ -27,6 +27,7 @@ #include "accountopt.h" #include "blist.h" #include "debug.h" +#include "privacy.h" #include "prpl.h" #include "proxy.h" #include "util.h" @@ -109,6 +110,11 @@ l = l->next; } + if (!purple_privacy_check(purple_connection_get_account(gc), who)) { + purple_debug_info("yahoo", "Picture packet from %s dropped.\n", who); + return; + } + /* Yahoo IM 6 spits out 0.png as the URL if the buddy icon is not set */ if (who && got_icon_info && url && !g_ascii_strncasecmp(url, "http://", 7)) { /* TODO: make this work p2p, try p2p before the url */
--- a/libpurple/util.c Thu Jul 31 06:23:55 2008 +0000 +++ b/libpurple/util.c Thu Aug 07 16:00:16 2008 +0000 @@ -2033,8 +2033,12 @@ gunichar g; gboolean inside_html = FALSE; int inside_paren = 0; - GString *ret = g_string_new(""); - /* Assumes you have a buffer able to carry at least BUF_LEN * 2 bytes */ + GString *ret; + + if (text == NULL) + return NULL; + + ret = g_string_new(""); c = text; while (*c) {
--- a/pidgin/gtksmiley.c Thu Jul 31 06:23:55 2008 +0000 +++ b/pidgin/gtksmiley.c Thu Aug 07 16:00:16 2008 +0000 @@ -275,7 +275,8 @@ g_free(buffer); } emoticon = purple_smiley_new_from_file(entry, s->filename); - pidgin_smiley_add_to_list(emoticon); + if (emoticon) + pidgin_smiley_add_to_list(emoticon); } if (smiley_manager != NULL)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pixmaps/emblems/16/scalable/birthday.svg Thu Aug 07 16:00:16 2008 +0000 @@ -0,0 +1,629 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16px" + height="16px" + id="svg8140" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="birthday.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs8142"> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4232" + id="linearGradient3007" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.7499999,14.982194,1.1250003)" + x1="7.5089025" + y1="2.218369" + x2="7.5089025" + y2="4.8258252" /> + <linearGradient + id="linearGradient4380" + inkscape:collect="always"> + <stop + id="stop4382" + offset="0" + style="stop-color:#fcaf3e;stop-opacity:1;" /> + <stop + id="stop4384" + offset="1" + style="stop-color:#ffffff;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4380" + id="linearGradient3005" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.7499999,-2.9821948,0.3750003)" + x1="15.491097" + y1="4.2733984" + x2="15.491097" + y2="2.7707961" /> + <linearGradient + id="linearGradient4142" + inkscape:collect="always"> + <stop + id="stop4144" + offset="0" + style="stop-color:#5c3566;stop-opacity:1;" /> + <stop + id="stop4146" + offset="1" + style="stop-color:#9253a2;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4142" + id="linearGradient3029" + gradientUnits="userSpaceOnUse" + x1="15.5" + y1="10.635184" + x2="15.5" + y2="7.1438446" + gradientTransform="matrix(1,0,0,0.8000001,-2.9821944,0.2999994)" /> + <linearGradient + id="linearGradient4150" + inkscape:collect="always"> + <stop + id="stop4152" + offset="0" + style="stop-color:#3c7704;stop-opacity:1" /> + <stop + id="stop4154" + offset="1" + style="stop-color:#59b106;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4150" + id="linearGradient3034" + gradientUnits="userSpaceOnUse" + x1="7.5" + y1="9.4861355" + x2="7.5" + y2="7.0554562" + gradientTransform="matrix(1,0,0,0.8000001,-3,0.2999994)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4232" + id="linearGradient3048" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.7499999,-3.0178049,0.3750005)" + x1="7.5089025" + y1="2.218369" + x2="7.5089025" + y2="4.8258252" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4374"> + <stop + style="stop-color:#fcaf3e;stop-opacity:1;" + offset="0" + id="stop4376" /> + <stop + style="stop-color:#ffffff;stop-opacity:1" + offset="1" + id="stop4378" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4374" + id="linearGradient3046" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.463041,0,0,1.1368063,-10.850902,0.678176)" + x1="6.3242626" + y1="2.3645318" + x2="6.3242626" + y2="1.6300712" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4232"> + <stop + style="stop-color:#f57900;stop-opacity:1;" + offset="0" + id="stop4234" /> + <stop + style="stop-color:#b25800;stop-opacity:1" + offset="1" + id="stop4236" /> + </linearGradient> + <linearGradient + y2="4.8258252" + x2="7.5089025" + y1="2.218369" + x1="7.5089025" + gradientTransform="matrix(1,0,0,0.7499999,1.0000002,-0.6249996)" + gradientUnits="userSpaceOnUse" + id="linearGradient4308" + xlink:href="#linearGradient4232" + inkscape:collect="always" /> + <linearGradient + id="linearGradient4368" + inkscape:collect="always"> + <stop + id="stop4370" + offset="0" + style="stop-color:#fcaf3e;stop-opacity:1;" /> + <stop + id="stop4372" + offset="1" + style="stop-color:#ffffff;stop-opacity:1" /> + </linearGradient> + <linearGradient + y2="1.6300712" + x2="6.3242626" + y1="2.3645318" + x1="6.3242626" + gradientTransform="matrix(2.463041,0,0,1.1368063,-6.8330964,-0.3218242)" + gradientUnits="userSpaceOnUse" + id="linearGradient4306" + xlink:href="#linearGradient4368" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3425"> + <stop + style="stop-color:#204a87;stop-opacity:1;" + offset="0" + id="stop3427" /> + <stop + style="stop-color:#2e69c2;stop-opacity:1" + offset="1" + id="stop3429" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3425" + id="linearGradient3431" + x1="11.5" + y1="9.961833" + x2="11.241222" + y2="6.6366434" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-2.9999997,-2.0000001)" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4388"> + <stop + style="stop-color:#d3d7cf;stop-opacity:1;" + offset="0" + id="stop4390" /> + <stop + style="stop-color:#d3d7cf;stop-opacity:0;" + offset="1" + id="stop4392" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4388" + id="linearGradient4394" + x1="2.9999998" + y1="11.5" + x2="21" + y2="11.5" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4158"> + <stop + style="stop-color:#9a9c98;stop-opacity:1" + offset="0" + id="stop4160" /> + <stop + style="stop-color:#666763;stop-opacity:1" + offset="1" + id="stop4162" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4158" + id="linearGradient4164" + x1="16.274719" + y1="9.7764273" + x2="17.448" + y2="13.753902" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.7894737,0,0,0.6666667,-1.4736843,1.8333322)" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4048"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4050" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4052" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4048" + id="linearGradient4054" + x1="-10.516191" + y1="10.124428" + x2="36.795452" + y2="19.026175" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3941"> + <stop + style="stop-color:#af6d02;stop-opacity:1" + offset="0" + id="stop3943" /> + <stop + style="stop-color:#5f3b00;stop-opacity:1" + offset="1" + id="stop3945" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3941" + id="linearGradient3947" + x1="15.917198" + y1="16.659033" + x2="16.463091" + y2="20.489477" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.7894737,0,0,0.7,-1.473684,0.4500012)" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4003"> + <stop + style="stop-color:#c17d11;stop-opacity:1" + offset="0" + id="stop4005" /> + <stop + style="stop-color:#e9b96e;stop-opacity:1" + offset="1" + id="stop4007" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4003" + id="linearGradient4009" + x1="16.815628" + y1="16.941942" + x2="10.718681" + y2="16.941942" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.7894737,0,0,0.7,-1.473684,0.4500012)" /> + <filter + inkscape:collect="always" + id="filter4540" + x="-0.087152615" + width="1.1743052" + y="-0.21174857" + height="1.4234971"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.37221428" + id="feGaussianBlur4542" /> + </filter> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 8 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="16 : 8 : 1" + inkscape:persp3d-origin="8 : 5.3333333 : 1" + id="perspective8148" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="22.197802" + inkscape:cx="8" + inkscape:cy="8" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:grid-bbox="true" + inkscape:document-units="px" + inkscape:window-width="641" + inkscape:window-height="669" + inkscape:window-x="0" + inkscape:window-y="22"> + <inkscape:grid + type="xygrid" + id="grid8150" /> + </sodipodi:namedview> + <metadata + id="metadata8145"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:label="Layer 1" + inkscape:groupmode="layer"> + <path + sodipodi:type="arc" + style="opacity:0.47499999999999998;fill:#edd400;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4540);enable-background:accumulate" + id="path4466" + sodipodi:cx="12.03125" + sodipodi:cy="4.265625" + sodipodi:rx="5.125" + sodipodi:ry="2.109375" + d="M 17.15625,4.265625 A 5.125,2.109375 0 1 1 6.90625,4.265625 A 5.125,2.109375 0 1 1 17.15625,4.265625 z" + transform="matrix(1.3658536,0,0,1.1656218,-8.4329267,-2.4721054)" /> + <path + style="fill:url(#linearGradient4009);fill-opacity:1;stroke:url(#linearGradient3947);stroke-width:1.00000072000000007;stroke-miterlimit:4;stroke-opacity:1" + d="m 0.50000029,9.8437508 0,3.5562497 C 0.50000029,14.5592 3.8600006,15.5 8.0000002,15.5 12.14,15.5 15.5,14.559199 15.5,13.4 l 0,-3.5562497 z" + id="path3936" + sodipodi:nodetypes="ccsccc" /> + <rect + style="opacity:0.26499999000000002;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect4624" + width="2" + height="3" + x="3" + y="11" /> + <path + sodipodi:type="inkscape:offset" + inkscape:radius="-1.0054175" + inkscape:original="M 2.5 11.5 L 2.5 18.5 C 2.5 20.155999 6.7560004 21.5 12 21.5 C 17.243999 21.5 21.5 20.155998 21.5 18.5 L 21.5 11.5 L 2.5 11.5 z " + style="fill:none;stroke:url(#linearGradient4054);stroke-width:1.44648218000000006;stroke-miterlimit:4;stroke-opacity:1" + id="path3983" + d="m 3.5,12.5 0,6 c 0,-0.016662 0.0034472,0.121066 0.34375,0.375 0.3403028,0.253934 0.9602178,0.531845 1.75,0.78125 C 7.1733144,20.15506 9.4638941,20.5 12,20.5 c 2.536106,0 4.826685,-0.34494 6.40625,-0.84375 0.789782,-0.249405 1.409697,-0.527316 1.75,-0.78125 C 20.496553,18.621066 20.5,18.483337 20.5,18.5 l 0,-6 z" + transform="matrix(0.7647058,0,0,0.6249999,-1.1764702,1.6875019)" /> + <rect + style="opacity:0.83499995000000005;color:#000000;fill:#8f5902;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect4056" + width="1" + height="3" + x="6" + y="11" + rx="0.5" + ry="0.5" /> + <rect + style="opacity:0.83499995000000005;color:#000000;fill:#8f5902;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect4078" + width="1" + height="3" + x="3" + y="10" + rx="0.5" + ry="0.5" /> + <rect + style="opacity:0.83499995000000005;color:#000000;fill:#8f5902;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect4131" + width="1" + height="3" + x="12" + y="10" + rx="0.5" + ry="0.5" /> + <rect + style="opacity:0.26499999000000002;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect2655" + width="2" + height="3" + x="10" + y="11" /> + <rect + style="opacity:0.26499999000000002;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect2664" + width="2" + height="2" + x="13" + y="11" /> + <rect + style="opacity:0.26499999000000002;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect2646" + width="2" + height="3" + x="7" + y="12" /> + <rect + style="opacity:0.83499995000000005;color:#000000;fill:#8f5902;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect4140" + width="1" + height="3" + x="8" + y="10" + rx="0.5" + ry="0.5" /> + <path + style="fill:#eeeeec;fill-opacity:1;stroke:url(#linearGradient4164);stroke-width:1.00000059999999991;stroke-miterlimit:4;stroke-opacity:1" + d="M 15.500001,9.5000002 C 15.500001,10.604 12.139999,11.5 8,11.5 3.8600003,11.5 0.5000003,10.604 0.5000003,9.5000004 0.5000003,8.3960006 3.8600004,7.5000001 8,7.5000001 c 4.140001,0 7.500001,0.89600032 7.500001,2.0000001 z" + id="path1307" /> + <path + sodipodi:type="inkscape:offset" + inkscape:radius="-1.0051613" + inkscape:original="M 12 8.5 C 6.7560004 8.5 2.5000001 9.844 2.5 11.5 C 2.5 13.155999 6.7560004 14.5 12 14.5 C 17.243999 14.5 21.5 13.155999 21.5 11.5 C 21.5 9.844 17.244 8.5000008 12 8.5 z " + xlink:href="#path4198" + style="fill:url(#linearGradient4394);fill-opacity:1;stroke:#ffffff;stroke-width:1.61721622999999992;stroke-miterlimit:4;stroke-opacity:1" + id="path4200" + d="M 12,9.5 C 9.4638721,9.5 7.1733501,9.8449289 5.59375,10.34375 4.80395,10.593161 4.1840886,10.87104 3.84375,11.125 3.5034114,11.37896 3.5,11.516552 3.5,11.5 c 0,-0.016553 0.0034113,0.12104 0.34375,0.375 0.3403387,0.25396 0.9601999,0.531839 1.75,0.78125 C 7.1733501,13.155071 9.4638722,13.5 12,13.5 c 2.536128,0 4.82665,-0.344929 6.40625,-0.84375 0.7898,-0.249411 1.409661,-0.52729 1.75,-0.78125 C 20.496589,11.62104 20.5,11.483447 20.5,11.5 c 0,0.016552 -0.003411,-0.12104 -0.34375,-0.375 -0.340339,-0.25396 -0.9602,-0.53184 -1.75,-0.78125 C 16.82665,9.844929 14.536128,9.5000004 12,9.5 z" + transform="matrix(0.7647058,0,0,0.4999999,-1.1764702,3.7500016)" /> + <rect + style="opacity:1;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3431);stroke-width:1.00000011999999994;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3304" + width="2" + height="4.999999" + x="7.5" + y="4.500001" + rx="1" + ry="1" /> + <rect + style="opacity:0.55500033999999998;color:#000000;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3308" + width="1" + height="1" + x="8" + y="6" /> + <rect + style="opacity:0.55500033999999998;color:#000000;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3330" + width="1" + height="1" + x="8" + y="8" /> + <rect + style="opacity:0.31000000999999999;color:#000000;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3608" + width="1" + height="1" + x="7" + y="6" /> + <rect + style="opacity:0.31000000999999999;color:#000000;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3617" + width="1" + height="1" + x="7" + y="8" /> + <rect + style="opacity:0.31000000999999999;color:#000000;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3626" + width="1" + height="1" + x="9" + y="8" /> + <rect + style="opacity:0.31000000999999999;color:#000000;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3635" + width="1" + height="1" + x="9" + y="6" /> + <path + style="fill:url(#linearGradient4306);fill-opacity:1;stroke:url(#linearGradient4308);stroke-width:1.00000119000000010;stroke-miterlimit:4;stroke-opacity:1" + d="m 8.9999763,3.4999993 c -0.827986,0 -1.499975,-0.6719998 -1.499975,-1.4999993 0,-0.82799966 0.671989,-1.4999994 1.4999755,-1.4999994 0.5378079,0 0.8279864,2.9999986 0,2.9999987 z" + id="path4284" + sodipodi:nodetypes="csss" /> + <path + style="fill:url(#linearGradient3046);fill-opacity:1;stroke:url(#linearGradient3048);stroke-width:1.00000119000000010;stroke-miterlimit:4;stroke-opacity:1" + d="M 4.9821711,4.4999994 C 4.1541851,4.4999994 3.4821961,3.8279997 3.4821961,3.0000001 C 3.4821961,2.1720004 4.1541851,1.5000007 4.9821711,1.5000007 C 5.5199791,1.5000007 5.8101571,4.4999993 4.9821711,4.4999994 L 4.9821711,4.4999994 z" + id="path2289" + sodipodi:nodetypes="csss" /> + <rect + style="fill:#6ec31b;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3034);stroke-width:1.00000024000000010;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3469" + width="2" + height="4" + x="3.5" + y="5.5" + rx="1" + ry="1" /> + <rect + style="opacity:0.55500033999999998;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3471" + width="1" + height="1" + x="4" + y="5.9999995" /> + <rect + style="opacity:0.55500033999999998;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3473" + width="1" + height="1" + x="4" + y="7.9999995" /> + <rect + style="fill:#ad7fa8;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3029);stroke-width:1.00000024000000010;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3533" + width="2" + height="4" + x="11.517806" + y="5.5" + rx="1" + ry="1" /> + <rect + style="opacity:0.55500033999999998;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3535" + width="1" + height="1" + x="12.017806" + y="5.9999995" /> + <rect + style="opacity:0.55500033999999998;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3537" + width="1" + height="1" + x="12.017806" + y="7.9999995" /> + <rect + style="opacity:0.31000000999999999;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3559" + width="1" + height="1" + x="3" + y="6" /> + <rect + style="opacity:0.31000000999999999;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3581" + width="1" + height="1" + x="3" + y="8" /> + <rect + style="opacity:0.31000000999999999;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3590" + width="1" + height="1" + x="5" + y="8" /> + <rect + style="opacity:0.31000000999999999;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3599" + width="1" + height="1" + x="5" + y="6" /> + <rect + style="opacity:0.31000000999999999;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3644" + width="1" + height="1" + x="11.017806" + y="6" /> + <rect + style="opacity:0.31000000999999999;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3653" + width="1" + height="1" + x="13.017806" + y="6" /> + <rect + style="opacity:0.31000000999999999;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3662" + width="1" + height="1" + x="13.017806" + y="8" /> + <rect + style="opacity:0.31000000999999999;fill:#c6d7ed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect3671" + width="1" + height="1" + x="11.017806" + y="8" /> + <path + style="fill:url(#linearGradient3005);fill-opacity:1;stroke:url(#linearGradient3007);stroke-width:1.00000119000000010;stroke-miterlimit:4;stroke-opacity:1" + d="M 12.999976,4.4999993 C 12.17199,4.4999993 11.500001,3.8279995 11.500001,3 C 11.500001,2.1720003 12.17199,1.5000006 12.999977,1.5000006 C 13.537784,1.5000006 13.827963,4.4999992 12.999977,4.4999993 L 12.999976,4.4999993 z" + id="path4348" + sodipodi:nodetypes="csss" /> + </g> +</svg>
--- a/pidgin/pixmaps/emotes/default/24/Makefile.am Thu Jul 31 06:23:55 2008 +0000 +++ b/pidgin/pixmaps/emotes/default/24/Makefile.am Thu Aug 07 16:00:16 2008 +0000 @@ -16,6 +16,7 @@ boy.png \ brb.png \ bulgy-eyes.png \ + bunny.png \ bye.png \ cake.png \ call-me.png \
--- a/pidgin/pixmaps/emotes/default/24/default.theme.in Thu Jul 31 06:23:55 2008 +0000 +++ b/pidgin/pixmaps/emotes/default/24/default.theme.in Thu Aug 07 16:00:16 2008 +0000 @@ -3,7 +3,6 @@ Icon=wink.png Author=Hylke Bons - # Default smileys [default] smile.png :) :-) @@ -125,6 +124,7 @@ party.png <:o) eyeroll.png 8-) yawn.png |-) +bunny.png ('.') ! skywalker.png C:-) c:-) C:) c:) ! monkey.png :-(|) :(|)
--- a/pidgin/pixmaps/toolbar/16/scalable/emote-select.svg Thu Jul 31 06:23:55 2008 +0000 +++ b/pidgin/pixmaps/toolbar/16/scalable/emote-select.svg Thu Aug 07 16:00:16 2008 +0000 @@ -2,113 +2,26 @@ <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://web.resource.org/cc/" + xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16px" - height="16px" - id="svg4346" + id="svg2" sodipodi:version="0.32" - inkscape:version="0.44.1" - sodipodi:docbase="/home/hbons/Desktop/pidgin improvements" - sodipodi:docname="inser-emote.svg" - inkscape:export-filename="/home/hbons/Desktop/pidgin improvements/insert-emote.png" + inkscape:version="0.46" + width="16" + height="16" + version="1.0" + sodipodi:docname="emote-select.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/hbons/Pidgin objects refresh/emote-select.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"> - <defs - id="defs4348"> - <linearGradient - inkscape:collect="always" - id="linearGradient5269"> - <stop - style="stop-color:#fcaf3e;stop-opacity:1;" - offset="0" - id="stop5271" /> - <stop - style="stop-color:#fcaf3e;stop-opacity:0;" - offset="1" - id="stop5273" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient3104"> - <stop - style="stop-color:#eeeeec;stop-opacity:1;" - offset="0" - id="stop3106" /> - <stop - style="stop-color:#eeeeec;stop-opacity:0;" - offset="1" - id="stop3108" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient3104" - id="radialGradient3114" - cx="5.7434092" - cy="16.737026" - fx="5.7434092" - fy="16.737026" - r="9.975256" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(-1.30241,1.304442,-1.325199,-1.323009,41.46631,16.11711)" /> - <linearGradient - inkscape:collect="always" - id="linearGradient3150"> - <stop - style="stop-color:#2e3436;stop-opacity:1;" - offset="0" - id="stop3152" /> - <stop - style="stop-color:#2e3436;stop-opacity:0;" - offset="1" - id="stop3154" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient3150" - id="radialGradient3156" - cx="10.748654" - cy="10.457643" - fx="10.748654" - fy="10.457643" - r="6.6449099" - gradientTransform="matrix(-0.842757,0,0,-0.35721,19.80716,14.19321)" - gradientUnits="userSpaceOnUse" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient5269" - id="linearGradient5275" - x1="26.243328" - y1="13.001364" - x2="26.243328" - y2="10.507664" - gradientUnits="userSpaceOnUse" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="31.392433" - inkscape:cx="14.469085" - inkscape:cy="9.6077349" - inkscape:current-layer="layer1" - showgrid="true" - inkscape:grid-bbox="true" - inkscape:document-units="px" - inkscape:window-width="1274" - inkscape:window-height="966" - inkscape:window-x="3" - inkscape:window-y="25" /> <metadata - id="metadata4351"> + id="metadata7"> <rdf:RDF> <cc:Work rdf:about=""> @@ -118,84 +31,573 @@ </cc:Work> </rdf:RDF> </metadata> - <g - id="layer1" - inkscape:label="Layer 1" - inkscape:groupmode="layer"> - <path - sodipodi:type="arc" - style="opacity:1;fill:#fce94f;fill-opacity:1;stroke:#f57900;stroke-width:1.53872597;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path1307" - sodipodi:cx="11.806158" - sodipodi:cy="10.983024" - sodipodi:rx="9.975256" - sodipodi:ry="9.975256" - d="M 21.781414 10.983024 A 9.975256 9.975256 0 1 1 1.8309021,10.983024 A 9.975256 9.975256 0 1 1 21.781414 10.983024 z" - transform="matrix(0.651503,0,0,0.651499,-0.691896,-0.15554)" /> - <path - sodipodi:type="arc" - style="opacity:0.79545456;fill:url(#radialGradient3114);fill-opacity:1;stroke:none;stroke-width:1.05274069;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path3102" - sodipodi:cx="11.806158" - sodipodi:cy="10.983024" - sodipodi:rx="9.975256" - sodipodi:ry="9.975256" - d="M 21.781414 10.983024 A 9.975256 9.975256 0 1 1 1.8309021,10.983024 A 9.975256 9.975256 0 1 1 21.781414 10.983024 z" - transform="matrix(0.601488,0,0,0.601488,-0.101266,0.39384)" /> - <path - sodipodi:type="arc" - style="opacity:0.5;fill:none;fill-opacity:1;stroke:white;stroke-width:1.81368434;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2184" - sodipodi:cx="11.806158" - sodipodi:cy="10.983024" - sodipodi:rx="9.975256" - sodipodi:ry="9.975256" - d="M 21.781414 10.983024 A 9.975256 9.975256 0 1 1 1.8309021,10.983024 A 9.975256 9.975256 0 1 1 21.781414 10.983024 z" - transform="matrix(0.551364,0,0,0.551364,0.490507,0.944359)" /> - <path - style="opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 15.725806,10.961292 C 15.725806,15.032532 14.403819,17 12,17 C 9.596182,17 8.1945569,15.02924 8.1945569,10.961292 C 9.1602707,14.990359 9.904443,15.152467 12,15.152467 C 14.095556,15.152468 14.914933,15.003949 15.725806,10.961292 z " - id="path2186" - sodipodi:nodetypes="cscsc" - transform="matrix(1.062241,0,0,0.5,-5.704588,1.519354)" /> - <path - sodipodi:type="arc" - style="opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2191" - sodipodi:cx="9.0598059" - sodipodi:cy="8.7845774" - sodipodi:rx="1.1679889" - sodipodi:ry="1.4520943" - d="M 10.227795 8.7845774 A 1.1679889 1.4520943 0 1 1 7.891817,8.7845774 A 1.1679889 1.4520943 0 1 1 10.227795 8.7845774 z" - transform="matrix(0.856175,0,0,1.032991,-2.756776,-3.574387)" /> - <path - sodipodi:type="arc" - style="opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2193" - sodipodi:cx="9.0598059" - sodipodi:cy="8.7845774" - sodipodi:rx="1.1679889" - sodipodi:ry="1.4520943" - d="M 10.227795 8.7845774 A 1.1679889 1.4520943 0 1 1 7.891817,8.7845774 A 1.1679889 1.4520943 0 1 1 10.227795 8.7845774 z" - transform="matrix(0.85617,0,0,1.032991,1.243263,-3.574387)" /> - <image - id="image4376" - height="16" - width="16" - sodipodi:absref="/home/hbons/Desktop/pidgin improvements/insert-image.png" - xlink:href="insert-image.png" - transform="translate(17,-1)" /> - <path - transform="matrix(1.046767,0,0,0.836179,-16.0259,3.13821)" - style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06887114;stroke-miterlimit:4;stroke-opacity:1" - d="M 22,10 L 29.642574,10 L 25.830275,14.783663 L 22,10 z " - id="path4382" - sodipodi:nodetypes="cccc" /> - <path - transform="matrix(1.046767,0,0,0.836179,-16.52887,3.138211)" - style="fill:url(#linearGradient5275);fill-opacity:1;stroke:#d5680b;stroke-width:1.06887114;stroke-miterlimit:4;stroke-opacity:1" - d="M 22,10 L 29.642574,10 L 25.830275,14.783663 L 22,10 z " - id="rect4379" - sodipodi:nodetypes="cccc" /> - </g> + <defs + id="defs5"> + <linearGradient + inkscape:collect="always" + id="linearGradient3398"> + <stop + style="stop-color:#fe9906;stop-opacity:1;" + offset="0" + id="stop3400" /> + <stop + style="stop-color:#ffffff;stop-opacity:1" + offset="1" + id="stop3402" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3390"> + <stop + style="stop-color:#fe9906;stop-opacity:1" + offset="0" + id="stop3392" /> + <stop + style="stop-color:#ffffff;stop-opacity:1" + offset="1" + id="stop3394" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3378"> + <stop + style="stop-color:#a64a00;stop-opacity:1;" + offset="0" + id="stop3380" /> + <stop + style="stop-color:#a64a00;stop-opacity:0;" + offset="1" + id="stop3382" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3357"> + <stop + style="stop-color:#dd6c00;stop-opacity:1" + offset="0" + id="stop3359" /> + <stop + style="stop-color:#7c3c00;stop-opacity:1" + offset="1" + id="stop3361" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective9" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="10.507664" + x2="26.243328" + y1="13.001364" + x1="26.243328" + id="linearGradient5275" + xlink:href="#linearGradient5269" + inkscape:collect="always" /> + <radialGradient + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.842757,0,0,-0.35721,19.80716,14.19321)" + r="6.6449099" + fy="10.457643" + fx="10.748654" + cy="10.457643" + cx="10.748654" + id="radialGradient3156" + xlink:href="#linearGradient3150" + inkscape:collect="always" /> + <linearGradient + id="linearGradient3150" + inkscape:collect="always"> + <stop + id="stop3152" + offset="0" + style="stop-color:#2e3436;stop-opacity:1;" /> + <stop + id="stop3154" + offset="1" + style="stop-color:#2e3436;stop-opacity:0;" /> + </linearGradient> + <radialGradient + gradientTransform="matrix(-1.30241,1.304442,-1.325199,-1.323009,41.46631,16.11711)" + gradientUnits="userSpaceOnUse" + r="9.975256" + fy="16.737026" + fx="5.7434092" + cy="16.737026" + cx="5.7434092" + id="radialGradient3114" + xlink:href="#linearGradient3104" + inkscape:collect="always" /> + <linearGradient + id="linearGradient3104" + inkscape:collect="always"> + <stop + id="stop3106" + offset="0" + style="stop-color:#eeeeec;stop-opacity:1;" /> + <stop + id="stop3108" + offset="1" + style="stop-color:#eeeeec;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient5269" + inkscape:collect="always"> + <stop + id="stop5271" + offset="0" + style="stop-color:#fcaf3e;stop-opacity:1;" /> + <stop + id="stop5273" + offset="1" + style="stop-color:#fcaf3e;stop-opacity:0;" /> + </linearGradient> + <inkscape:perspective + id="perspective3186" + inkscape:persp3d-origin="8 : 5.3333333 : 1" + inkscape:vp_z="16 : 8 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 8 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + r="9.975256" + fy="14.186539" + fx="8.3343515" + cy="14.186539" + cx="8.3343515" + gradientTransform="matrix(-0.9327,0.932656,-0.947494,-0.947449,33.02126,11.96667)" + gradientUnits="userSpaceOnUse" + id="radialGradient2264" + xlink:href="#linearGradient3104" + inkscape:collect="always" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3104" + id="radialGradient2233" + cx="8.3343515" + cy="14.186539" + fx="8.3343515" + fy="14.186539" + r="9.975256" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.9327,0.932656,-0.947494,-0.947449,33.02126,11.96667)" /> + <radialGradient + r="9.975256" + fy="14.186539" + fx="8.3343515" + cy="14.186539" + cx="8.3343515" + gradientTransform="matrix(-0.9327,0.932656,-0.947494,-0.947449,33.02126,11.96667)" + gradientUnits="userSpaceOnUse" + id="radialGradient2349" + xlink:href="#linearGradient3104" + inkscape:collect="always" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3104" + id="radialGradient2303" + cx="8.3343515" + cy="14.186539" + fx="8.3343515" + fy="14.186539" + r="9.975256" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.9327,0.932656,-0.947494,-0.947449,33.02126,11.96667)" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="17.682426" + x2="12.720216" + y1="20.952612" + x1="12.720216" + id="linearGradient2873" + xlink:href="#linearGradient2867" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="20.761486" + x2="12.746171" + y1="18.202251" + x1="12.5" + id="linearGradient2853" + xlink:href="#linearGradient2847" + inkscape:collect="always" /> + <radialGradient + gradientTransform="matrix(-0.9327,0.932656,-0.947494,-0.947449,33.02126,11.96667)" + gradientUnits="userSpaceOnUse" + r="9.975256" + fy="14.186539" + fx="8.3343515" + cy="14.186539" + cx="8.3343515" + id="radialGradient2230" + xlink:href="#linearGradient3104" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2382" + inkscape:collect="always"> + <stop + id="stop2384" + offset="0" + style="stop-color:#d3d7cf;stop-opacity:1;" /> + <stop + id="stop2386" + offset="1" + style="stop-color:#d3d7cf;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2847" + inkscape:collect="always"> + <stop + id="stop2849" + offset="0" + style="stop-color:#888a85;stop-opacity:1;" /> + <stop + id="stop2851" + offset="1" + style="stop-color:#888a85;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2867" + inkscape:collect="always"> + <stop + id="stop2869" + offset="0" + style="stop-color:#d3d7cf;stop-opacity:1;" /> + <stop + id="stop2871" + offset="1" + style="stop-color:#d3d7cf;stop-opacity:0;" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2382" + id="radialGradient2259" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.591138,1.574803,-1.783257,-1.76495,68.854751,-2.8442229)" + cx="17.911736" + cy="11.083743" + fx="17.911736" + fy="11.083743" + r="2.5781252" /> + <radialGradient + gradientTransform="matrix(-0.9327,0.932656,-0.947494,-0.947449,33.02126,11.96667)" + gradientUnits="userSpaceOnUse" + r="9.975256" + fy="14.186539" + fx="8.3343515" + cy="14.186539" + cx="8.3343515" + id="radialGradient3313" + xlink:href="#linearGradient3104" + inkscape:collect="always" /> + <radialGradient + r="9.975256" + fy="14.186539" + fx="8.3343515" + cy="14.186539" + cx="8.3343515" + gradientTransform="matrix(-0.9327,0.932656,-0.947494,-0.947449,33.02126,11.96667)" + gradientUnits="userSpaceOnUse" + id="radialGradient2255" + xlink:href="#linearGradient3104" + inkscape:collect="always" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3104" + id="radialGradient2214" + cx="8.7359829" + cy="18.005522" + fx="8.7359829" + fy="18.005522" + r="9.975256" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.3308754,1.3308124,-1.4391023,-1.4390341,45.391773,16.51952)" /> + <radialGradient + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.842757,0,0,-0.35721,19.80716,14.19321)" + r="6.6449099" + fy="10.457643" + fx="10.748654" + cy="10.457643" + cx="10.748654" + id="radialGradient3292" + xlink:href="#linearGradient3150" + inkscape:collect="always" /> + <radialGradient + gradientTransform="matrix(-0.9327,0.932656,-0.947494,-0.947449,33.02126,11.96667)" + gradientUnits="userSpaceOnUse" + r="9.975256" + fy="14.186539" + fx="8.3343515" + cy="14.186539" + cx="8.3343515" + id="radialGradient3175" + xlink:href="#linearGradient3104" + inkscape:collect="always" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3104" + id="radialGradient3191" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.3308754,1.3308124,-1.4391023,-1.4390341,45.391773,16.51952)" + cx="8.7359829" + cy="18.005522" + fx="8.7359829" + fy="18.005522" + r="9.975256" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="15.449714" + x2="10.698112" + y1="16.037401" + x1="12.845698" + id="linearGradient3269" + xlink:href="#linearGradient3263" + inkscape:collect="always" /> + <radialGradient + gradientTransform="matrix(-0.9327,0.932656,-0.947494,-0.947449,33.02126,11.96667)" + gradientUnits="userSpaceOnUse" + r="9.975256" + fy="14.186539" + fx="8.3343515" + cy="14.186539" + cx="8.3343515" + id="radialGradient2216" + xlink:href="#linearGradient3104" + inkscape:collect="always" /> + <linearGradient + id="linearGradient3263" + inkscape:collect="always"> + <stop + id="stop3265" + offset="0" + style="stop-color:#555753;stop-opacity:1;" /> + <stop + id="stop3267" + offset="1" + style="stop-color:#555753;stop-opacity:0;" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3104" + id="radialGradient2247" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.3308754,1.3308124,-1.4391023,-1.4390341,45.391773,16.51952)" + cx="8.7359829" + cy="18.005522" + fx="8.7359829" + fy="18.005522" + r="9.975256" /> + <radialGradient + gradientTransform="matrix(-0.9327,0.932656,-0.947494,-0.947449,33.02126,11.96667)" + gradientUnits="userSpaceOnUse" + r="9.975256" + fy="14.186539" + fx="8.3343515" + cy="14.186539" + cx="8.3343515" + id="radialGradient3274" + xlink:href="#linearGradient3104" + inkscape:collect="always" /> + <inkscape:perspective + id="perspective3265" + inkscape:persp3d-origin="12 : 8 : 1" + inkscape:vp_z="24 : 12 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 12 : 1" + sodipodi:type="inkscape:persp3d" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3104" + id="radialGradient3331" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.30241,1.304442,-1.325199,-1.323009,41.46631,16.11711)" + cx="5.7434092" + cy="16.737026" + fx="5.7434092" + fy="16.737026" + r="9.975256" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3104" + id="radialGradient3344" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.30241,1.304442,-1.325199,-1.323009,41.46631,16.11711)" + cx="5.7434092" + cy="16.737026" + fx="5.7434092" + fy="16.737026" + r="9.975256" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3357" + id="linearGradient3363" + x1="12.549859" + y1="12.357164" + x2="13.745301" + y2="19.751348" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3378" + id="radialGradient3384" + cx="11.76924" + cy="25.560368" + fx="11.76924" + fy="25.560368" + r="9.8412299" + gradientTransform="matrix(1.6444693,0,0,1.4596828,-7.5849142,-16.236248)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3390" + id="linearGradient3396" + x1="5.0167913" + y1="6.0080996" + x2="5.9832082" + y2="6.9919" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3398" + id="linearGradient3404" + x1="9.9935493" + y1="9.1751938" + x2="9.4590645" + y2="10.073978" + gradientUnits="userSpaceOnUse" /> + </defs> + <sodipodi:namedview + inkscape:window-height="849" + inkscape:window-width="1440" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + guidetolerance="10.0" + gridtolerance="10.0" + objecttolerance="10.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" + showgrid="true" + inkscape:snap-bbox="true" + inkscape:snap-nodes="false" + inkscape:zoom="20.32932" + inkscape:cx="16.928433" + inkscape:cy="11.656784" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:current-layer="svg2"> + <inkscape:grid + type="xygrid" + id="grid3156" + visible="true" + enabled="true" /> + </sodipodi:namedview> + <path + sodipodi:type="arc" + style="fill:#edd400;fill-opacity:1;stroke:url(#linearGradient3363);stroke-width:1.33355486000000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3317" + sodipodi:cx="11.806158" + sodipodi:cy="10.983024" + sodipodi:rx="9.975256" + sodipodi:ry="9.975256" + d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z" + transform="matrix(0.751736,0,0,0.751736,-0.8751143,-0.2563346)" /> + <path + sodipodi:type="arc" + style="opacity:0.64044948999999995;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.53465486000000007;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3321" + sodipodi:cx="11.806158" + sodipodi:cy="10.983024" + sodipodi:rx="9.975256" + sodipodi:ry="9.975256" + d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z" + transform="matrix(0.6516124,0,0,0.6516124,0.3069616,0.8433262)" /> + <path + sodipodi:type="arc" + style="opacity:0.79545456;fill:url(#radialGradient3344);fill-opacity:1;stroke:none;stroke-width:1.05274069;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3319" + sodipodi:cx="11.806158" + sodipodi:cy="10.983024" + sodipodi:rx="9.975256" + sodipodi:ry="9.975256" + d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z" + transform="matrix(0.7017364,0,0,0.7017364,-0.2848107,0.2928127)" /> + <path + style="fill:#eeeeec;fill-opacity:1;stroke:url(#linearGradient3396);stroke-width:0.99999987999999995;stroke-miterlimit:4;stroke-opacity:1" + d="M 7.5,6.5000001 C 7.5,7.6040001 6.6040006,8.5000002 5.5000006,8.5000002 C 4.3960003,8.5000002 3.4999999,7.6040001 3.4999999,6.5000001 C 3.4999999,5.3959999 4.3960003,4.5 5.5000006,4.5 C 6.6040006,4.5 7.5,5.3959999 7.5,6.5000001 z" + id="path3154" /> + <path + sodipodi:type="arc" + style="fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path2172" + sodipodi:cx="9.7069349" + sodipodi:cy="9.6526775" + sodipodi:rx="1.0259361" + sodipodi:ry="1.9413869" + d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z" + transform="matrix(0.9747194,0,0,0.5150957,-3.4615376,2.0279472)" /> + <path + sodipodi:type="arc" + style="fill:#eeeeec;fill-opacity:1;stroke:url(#linearGradient3404);stroke-width:0.70564497000000004;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3152" + sodipodi:cx="9.7069349" + sodipodi:cy="9.6526775" + sodipodi:rx="1.0259361" + sodipodi:ry="1.9413869" + d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z" + transform="matrix(1.9494389,0,0,1.0301914,-8.4230764,-3.4441052)" /> + <path + sodipodi:type="arc" + style="opacity:0.75;fill:none;fill-opacity:1;stroke:#ce5c00;stroke-width:0.85073602000000004;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path2259" + sodipodi:cx="8.3258924" + sodipodi:cy="9.2232141" + sodipodi:rx="1.2276785" + sodipodi:ry="1.7410715" + d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499" + transform="matrix(1.4017776,0.3494647,-0.2648498,0.9196421,1.6361947,-7.2342213)" + sodipodi:start="3.5782199" + sodipodi:end="5.6135639" + sodipodi:open="true" /> + <path + sodipodi:type="arc" + style="opacity:0.75;fill:none;fill-opacity:1;stroke:#ce5c00;stroke-width:0.85073620000000005;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path2261" + sodipodi:cx="8.3258924" + sodipodi:cy="9.2232141" + sodipodi:rx="1.2276785" + sodipodi:ry="1.7410715" + d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499" + transform="matrix(-1.4017777,0.3494645,0.2648498,0.9196416,14.363806,-7.2342154)" + sodipodi:start="3.5782199" + sodipodi:end="5.6135639" + sodipodi:open="true" /> + <path + sodipodi:type="arc" + style="fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3346" + sodipodi:cx="9.7069349" + sodipodi:cy="9.6526775" + sodipodi:rx="1.0259361" + sodipodi:ry="1.9413869" + d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z" + transform="matrix(0.9747195,0,0,0.5150957,0.5384613,2.0279474)" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:none;fill-opacity:1;stroke:url(#radialGradient3384);stroke-width:2.21672367999999986;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3367" + sodipodi:cx="11.806158" + sodipodi:cy="10.983024" + sodipodi:rx="9.975256" + sodipodi:ry="9.975256" + d="M 20.502108,15.870372 A 9.975256,9.975256 0 0 1 3.0363724,15.736611" + transform="matrix(0.4511163,0,0,0.4511162,2.6740503,3.0453797)" + sodipodi:start="0.51202919" + sodipodi:end="2.6448802" + sodipodi:open="true" /> </svg>
--- a/po/POTFILES.in Thu Jul 31 06:23:55 2008 +0000 +++ b/po/POTFILES.in Thu Aug 07 16:00:16 2008 +0000 @@ -140,10 +140,10 @@ libpurple/protocols/qq/group_network.c libpurple/protocols/qq/group_opt.c libpurple/protocols/qq/im.c -libpurple/protocols/qq/keep_alive.c -libpurple/protocols/qq/login_logout.c libpurple/protocols/qq/qq.c +libpurple/protocols/qq/qq_base.c libpurple/protocols/qq/qq_network.c +libpurple/protocols/qq/qq_process.c libpurple/protocols/qq/send_file.c libpurple/protocols/qq/sys_msg.c libpurple/protocols/sametime/sametime.c @@ -174,6 +174,7 @@ libpurple/protocols/yahoo/ycht.c libpurple/protocols/zephyr/zephyr.c libpurple/proxy.c +libpurple/prpl.c libpurple/request.h libpurple/savedstatuses.c libpurple/server.c
--- a/po/de.po Thu Jul 31 06:23:55 2008 +0000 +++ b/po/de.po Thu Aug 07 16:00:16 2008 +0000 @@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-07-11 17:26+0200\n" -"PO-Revision-Date: 2008-07-11 17:25+0200\n" +"POT-Creation-Date: 2008-08-06 17:47+0200\n" +"PO-Revision-Date: 2008-08-06 17:47+0200\n" "Last-Translator: Jochen Kemnade <jochenkemnade@web.de>\n" "Language-Team: Deutsch <de@li.org>\n" "MIME-Version: 1.0\n" @@ -652,9 +652,11 @@ msgid "<AUTO-REPLY> " msgstr "<AUTO-REPLY> " -#. Print the list of users in the room -msgid "List of users:\n" -msgstr "Liste der Benutzer:\n" +#, fuzzy, c-format +msgid "List of %d user:\n" +msgid_plural "List of %d users:\n" +msgstr[0] "Liste der Benutzer:\n" +msgstr[1] "Liste der Benutzer:\n" msgid "Supported debug options are: version" msgstr "Unterstützte Debug-Optionen sind: version" @@ -2230,6 +2232,9 @@ "Dateiübertragung abgeschlossen ist\n" "(nur, wenn es keine Unterhaltung mit dem Sender gibt)" +msgid "Create a new directory for each user" +msgstr "Für jeden Benutzer ein neues Verzeichnis anlegen" + msgid "Notes" msgstr "Notizen" @@ -2873,9 +2878,6 @@ msgid "Cannot open socket" msgstr "Kann die Socket nicht öffnen" -msgid "Error setting socket options" -msgstr "Fehler beim Setzen der Socket-Optionen" - msgid "Could not bind socket to port" msgstr "Kann die Socket nicht an den Port binden" @@ -3218,6 +3220,9 @@ msgid "Encodings" msgstr "Kodierungen" +msgid "Auto-detect incoming UTF-8" +msgstr "Eingehendes UTF-8 automatisch erkennen" + msgid "Real name" msgstr "Echter Name" @@ -3403,6 +3408,9 @@ "away [Nachricht]: Setzen Sie eine Abwesenheitsnachricht. Verwenden Sie " "keine Nachricht, um wieder zurückzukehren." +msgid "ctcp <nick> <msg>: sends ctcp msg to nick." +msgstr "ctcp <nick> <anfrage>: Sendet CTCP-Anfrage an nick." + msgid "chanserv: Send a command to chanserv" msgstr "chanserv: Sendet ein Kommando zum Chanserv" @@ -4895,8 +4903,21 @@ msgid "Disallow" msgstr "Verbieten" -msgid "This Hotmail account may not be active." -msgstr "Dieses Hotmail-Konto ist vielleicht nicht aktiv." +#, c-format +msgid "Blocked Text for %s" +msgstr "Blockierter Text für %s" + +msgid "No text is blocked for this account." +msgstr "Für dieses Konto ist kein Text blockiert." + +#, c-format +msgid "" +"MSN servers are currently blocking the following regular expressions:<br/>%s" +msgstr "" +"MSN-Server blockieren momentan die folgenden regulären Ausdrücke:<br/>%s" + +msgid "This account does not have email enabled." +msgstr "Dieses Konto hat E-Mail nicht aktiviert." msgid "Send a mobile message." msgstr "Eine SMS senden." @@ -4955,6 +4976,9 @@ msgid "Allow/Disallow Mobile Pages..." msgstr "Erlaube/verbiete mobile Webseiten..." +msgid "View Blocked Text..." +msgstr "Blockierten Text anzeigen..." + msgid "Open Hotmail Inbox" msgstr "Öffne Hotmail-Posteingang" @@ -5158,16 +5182,8 @@ msgid "Windows Live ID authentication:Unable to connect" msgstr "Windows Live ID-Authentifikation:Kann nicht verbinden" -#. we must have failed! -msgid "" -"Windows Live ID authentication: cannot find authenticate token in server " -"response" -msgstr "" -"Windows Live ID Authentifikation: Kann Authenfikationstoken nicht in der " -"Serverantwort finden" - -msgid "Windows Live ID authentication Failed" -msgstr "Windows Live ID - Authentifikation fehlgeschlagen" +msgid "Windows Live ID authentication:Invalid response" +msgstr "Windows Live ID-Authentifikation:Ungültige Antwort" #, c-format msgid "%s is not a valid group." @@ -5214,6 +5230,9 @@ msgid "Service Temporarily Unavailable." msgstr "Dienst momentan nicht verfügbar." +msgid "Mobile message was not sent because it was too long." +msgstr "Mobile Nachricht wurde nicht gesendet, da sie zu lang war." + msgid "Unable to rename group" msgstr "Kann die Gruppe nicht umbenennen" @@ -5250,6 +5269,28 @@ "Nach Beendigung der Wartungsarbeiten können Sie sich wieder problemlos " "anmelden." +msgid "" +"Message was not sent because the system is unavailable. This normally " +"happens when the user is blocked or does not exist." +msgstr "" +"Nachricht wurde nicht gesendet, da das System nicht erreichbar ist. Dies " +"passiert normalerweise, wenn der Benutzer blockiert ist oder nicht existiert." + +msgid "Message was not sent because messages are being sent too quickly." +msgstr "" +"Nachricht konnte nicht gesendet werden, da Nachrichten zu schnell gesendet " +"werden." + +msgid "Message was not sent because an unknown encoding error occurred." +msgstr "" +"Nachricht konnte nicht gesendet werden, da ein unbekannter Kodierungsfehler " +"aufgetreten ist." + +msgid "Message was not sent because an unknown error occurred." +msgstr "" +"Nachricht konnte nicht gesendet werden, da ein unbekannter Fehler " +"aufgetreten ist." + msgid "Unable to connect" msgstr "Verbindung nicht möglich" @@ -5379,6 +5420,9 @@ msgid "The username specified is invalid." msgstr "Der angegebene Benutzername ist ungültig." +msgid "This Hotmail account may not be active." +msgstr "Dieses Hotmail-Konto ist vielleicht nicht aktiv." + msgid "Has you" msgstr "Hat Sie" @@ -7321,31 +7365,43 @@ msgid "Failed to send IM." msgstr "Senden der Nachricht fehlgeschlagen." -msgid "Keep alive error" -msgstr "Fehler beim Aufrechterhalten der Verbindung (Keep alive)" - -msgid "Error requesting login token" -msgstr "Fehler beim Abfragen des Anmelde-Tokens" - -msgid "Unable to login. Check debug log." -msgstr "Anmeldung fehlgeschlagen, Debugmitschnitt beachten." - -msgid "Unable to login" -msgstr "Anmeldung fehlgeschlagen" - #, c-format msgid "Unknown-%d" msgstr "Unbekannt-%d" -msgid "TCP Address" -msgstr "TCP-Adresse" - -msgid "UDP Address" -msgstr "UDP-Adresse" - msgid "Level" msgstr "Stufe" +msgid "Member" +msgstr "Mitglied" + +msgid " VIP" +msgstr " VIP" + +msgid " TCP" +msgstr " TCP" + +#, fuzzy +msgid " FromMobile" +msgstr "Mobil" + +#, fuzzy +msgid " BindMobile" +msgstr "Mobil" + +msgid " Video" +msgstr " Video" + +#, fuzzy +msgid " Space" +msgstr "MySpace" + +msgid "Flag" +msgstr "" + +msgid "Ver" +msgstr "" + msgid "Invalid name" msgstr "QQ: Ungültiger Name" @@ -7419,6 +7475,23 @@ msgid "Connect using TCP" msgstr "Über TCP verbinden" +msgid "resend interval(s)" +msgstr "" + +#, fuzzy +msgid "Keep alive interval(s)" +msgstr "Fehler beim Aufrechterhalten der Verbindung (Keep alive)" + +msgid "Update interval(s)" +msgstr "" + +#, fuzzy, c-format +msgid "Invalid token len, %d" +msgstr "Ungültige Bezeichnung" + +msgid "Keep alive error" +msgstr "Fehler beim Aufrechterhalten der Verbindung (Keep alive)" + msgid "Failed to connect server" msgstr "Verbinden zum Server fehlgeschlagen" @@ -7442,9 +7515,6 @@ msgid "Connection lost" msgstr "Verbindung verloren" -msgid "Login failed, no reply" -msgstr "Anmeldung fehlgeschlagen, keine Antwort" - msgid "Couldn't resolve host" msgstr "Kann den Hostnamen nicht auflösen" @@ -7462,6 +7532,16 @@ msgid "Could not resolve hostname" msgstr "Konnte den Hostnamen nicht auflösen" +msgid "Unable to login. Check debug log." +msgstr "Anmeldung fehlgeschlagen, Debugmitschnitt beachten." + +msgid "Unable to login" +msgstr "Anmeldung fehlgeschlagen" + +#, c-format +msgid "Invalid token reply code, 0x%02X" +msgstr "" + #, c-format msgid "%d has declined the file %s" msgstr "%d hat die Datei %s abgelehnt" @@ -7509,6 +7589,14 @@ msgid "%s is not in your buddy list" msgstr "%s ist nicht in Ihrer Buddy-Liste" +#, fuzzy, c-format +msgid "Notice from: %s" +msgstr "Ankündigung von %s" + +#, c-format +msgid "%s" +msgstr "%s" + msgid "Connection closed (writing)" msgstr "Verbindung geschlossen (schreibend)" @@ -9724,6 +9812,14 @@ msgid "Could not resolve host name" msgstr "Kann den Hostnamen nicht auflösen" +#, c-format +msgid "Requesting %s's attention..." +msgstr "Bitte um %ss Aufmerksamkeit..." + +#, c-format +msgid "%s has requested your attention!" +msgstr "%s hat um Ihre Aufmerksamkeit gebeten!" + #. * #. * A wrapper for purple_request_action() that uses @c Yes and @c No buttons. #. @@ -9753,14 +9849,6 @@ msgstr "%s heißt jetzt %s.\n" #, c-format -msgid "Requesting %s's attention..." -msgstr "Bitte um %s's Aufmerksamkeit..." - -#, c-format -msgid "%s has requested your attention!" -msgstr "%s hat um Ihre Aufmerksamkeit gebeten!" - -#, c-format msgid "" "%s has invited %s to the chat room %s:\n" "%s" @@ -9956,6 +10044,10 @@ msgid "Connection refused." msgstr "Verbindung abgelehnt." +#. 10048 +msgid "Address already in use." +msgstr "Adresse wird bereits benutzt." + msgid "Internet Messenger" msgstr "Internet-Sofortnachrichtendienst" @@ -10906,6 +10998,10 @@ msgid "developer" msgstr "Entwickler" +#. feel free to not translate this +msgid "Ka-Hing Cheung" +msgstr "Ka-Hing Cheung" + msgid "support" msgstr "Support"
--- a/po/fi.po Thu Jul 31 06:23:55 2008 +0000 +++ b/po/fi.po Thu Aug 07 16:00:16 2008 +0000 @@ -10,8 +10,8 @@ msgstr "" "Project-Id-Version: Pidgin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-05-07 12:09+0300\n" -"PO-Revision-Date: 2008-05-07 12:09+0300\n" +"POT-Creation-Date: 2008-08-06 16:01+0300\n" +"PO-Revision-Date: 2008-08-06 16:01+0300\n" "Last-Translator: Timo Jyrinki <timo.jyrinki@iki.fi>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -21,17 +21,13 @@ #. Translators may want to transliterate the name. #. It is not to be translated. -#: ../finch/finch.c:64 ../finch/finch.c:300 ../finch/finch.c:329 -#: ../finch/finch.c:417 msgid "Finch" msgstr "Finch" -#: ../finch/finch.c:206 #, c-format msgid "%s. Try `%s -h' for more information.\n" msgstr "%s. Kirjoita \"%s -h\" saadaksesi lisää tietoja.\n" -#: ../finch/finch.c:208 #, c-format msgid "" "%s\n" @@ -52,7 +48,6 @@ " -n, --nologin älä kirjaudu automaattisesti\n" " -v, --version näytä nykyinen versionumero ja poistu\n" -#: ../finch/finch.c:327 ../pidgin/gtkmain.c:738 #, c-format msgid "" "%s encountered errors migrating your settings from %s to %s. Please " @@ -63,254 +58,105 @@ "Tutki asiaa ja suorita asetusten siirto käsin. Ilmoita tästä ongelmasta " "osoitteessa http://developer.pidgin.im/" -#: ../finch/gntaccount.c:124 ../finch/gntaccount.c:484 ../finch/gntblist.c:595 -#: ../finch/gntblist.c:759 ../finch/gntblist.c:772 ../finch/gntplugin.c:196 -#: ../finch/gntplugin.c:244 ../finch/gntrequest.c:380 ../finch/gntstatus.c:301 -#: ../finch/gntstatus.c:310 ../finch/plugins/gntclipboard.c:115 -#: ../finch/plugins/gntclipboard.c:121 ../finch/plugins/gntclipboard.c:128 -#: ../libpurple/protocols/jabber/buddy.c:2079 -#: ../libpurple/protocols/jabber/chat.c:682 -#: ../libpurple/protocols/jabber/chat.c:693 -#: ../libpurple/protocols/jabber/jabber.c:1594 -#: ../libpurple/protocols/qq/group_join.c:328 -#: ../libpurple/protocols/qq/im.c:576 ../libpurple/protocols/silc/ops.c:76 -#: ../libpurple/protocols/silc/ops.c:1473 -#: ../libpurple/protocols/silc10/ops.c:1451 msgid "Error" msgstr "Virhe" -#: ../finch/gntaccount.c:124 msgid "Account was not added" msgstr "Käyttäjätiliä ei lisätty" -#: ../finch/gntaccount.c:125 msgid "Username of an account must be non-empty." msgstr "Käyttäjätilin käyttäjänimi ei voi olla tyhjä." -#: ../finch/gntaccount.c:437 msgid "New mail notifications" msgstr "Ilmoita uudesta sähköpostista" -#: ../finch/gntaccount.c:447 msgid "Remember password" msgstr "Muista salasana" -#: ../finch/gntaccount.c:485 msgid "There's no protocol plugins installed." msgstr "Yhteyskäytäntöliitännäisiä ei ole asennettu." -#: ../finch/gntaccount.c:486 msgid "(You probably forgot to 'make install'.)" msgstr "(Unohdit luultavasti suorittaa \"make install\".)" -#: ../finch/gntaccount.c:496 ../finch/gntconn.c:138 -#: ../pidgin/gtkaccount.c:1449 ../pidgin/gtkblist.c:4671 msgid "Modify Account" msgstr "Muokkaa tiliä" -#: ../finch/gntaccount.c:496 msgid "New Account" msgstr "Uusi tili" -#: ../finch/gntaccount.c:521 ../pidgin/gtkft.c:696 msgid "Protocol:" msgstr "Yhteyskäytäntö:" -#: ../finch/gntaccount.c:529 -#: ../pidgin/plugins/gevolution/new_person_dialog.c:294 msgid "Username:" msgstr "Käyttäjänimi:" -#: ../finch/gntaccount.c:542 msgid "Password:" msgstr "Salasana:" -#: ../finch/gntaccount.c:552 msgid "Alias:" msgstr "Lempinimi:" +#. Register checkbox +msgid "Create this account on the server" +msgstr "Luo tämä käyttäjätili palvelimelle" + #. Cancel button #. Cancel -#: ../finch/gntaccount.c:575 ../finch/gntaccount.c:639 -#: ../finch/gntaccount.c:890 ../finch/gntblist.c:641 ../finch/gntblist.c:747 -#: ../finch/gntblist.c:782 ../finch/gntblist.c:1134 ../finch/gntblist.c:1360 -#: ../finch/gntblist.c:1494 ../finch/gntblist.c:2661 ../finch/gntblist.c:2712 -#: ../finch/gntblist.c:2776 ../finch/gntblist.c:2838 ../finch/gntcertmgr.c:90 -#: ../finch/gntplugin.c:532 ../finch/gntpounce.c:471 ../finch/gntpounce.c:679 -#: ../finch/gntprefs.c:265 ../finch/gntsound.c:1064 ../finch/gntstatus.c:145 -#: ../finch/gntstatus.c:485 ../finch/gntstatus.c:610 -#: ../finch/plugins/gnthistory.c:178 ../libpurple/account.c:1118 -#: ../libpurple/account.c:1437 ../libpurple/account.c:1472 -#: ../libpurple/conversation.c:1235 ../libpurple/plugins/buddynote.c:51 -#: ../libpurple/protocols/gg/gg.c:508 ../libpurple/protocols/gg/gg.c:667 -#: ../libpurple/protocols/gg/gg.c:804 ../libpurple/protocols/gg/gg.c:886 -#: ../libpurple/protocols/jabber/buddy.c:758 -#: ../libpurple/protocols/jabber/buddy.c:2473 -#: ../libpurple/protocols/jabber/buddy.c:2509 -#: ../libpurple/protocols/jabber/chat.c:791 -#: ../libpurple/protocols/jabber/jabber.c:1063 -#: ../libpurple/protocols/jabber/jabber.c:1072 -#: ../libpurple/protocols/jabber/jabber.c:1787 -#: ../libpurple/protocols/jabber/si.c:1118 -#: ../libpurple/protocols/jabber/usermood.c:199 -#: ../libpurple/protocols/jabber/usernick.c:78 -#: ../libpurple/protocols/jabber/xdata.c:403 -#: ../libpurple/protocols/msn/msn.c:301 ../libpurple/protocols/msn/msn.c:318 -#: ../libpurple/protocols/msn/msn.c:335 ../libpurple/protocols/msn/msn.c:352 -#: ../libpurple/protocols/msn/msn.c:373 ../libpurple/protocols/msnp9/msn.c:284 -#: ../libpurple/protocols/msnp9/msn.c:301 -#: ../libpurple/protocols/msnp9/msn.c:318 -#: ../libpurple/protocols/msnp9/msn.c:335 -#: ../libpurple/protocols/msnp9/msn.c:356 -#: ../libpurple/protocols/myspace/user.c:582 -#: ../libpurple/protocols/myspace/user.c:676 -#: ../libpurple/protocols/oscar/oscar.c:6207 -#: ../libpurple/protocols/oscar/peer.c:1048 -#: ../libpurple/protocols/qq/buddy_info.c:525 -#: ../libpurple/protocols/qq/buddy_opt.c:214 -#: ../libpurple/protocols/qq/buddy_opt.c:411 -#: ../libpurple/protocols/qq/group.c:124 -#: ../libpurple/protocols/qq/group_join.c:140 -#: ../libpurple/protocols/qq/group_join.c:365 -#: ../libpurple/protocols/qq/group_opt.c:120 -#: ../libpurple/protocols/qq/group_opt.c:375 -#: ../libpurple/protocols/qq/sys_msg.c:115 -#: ../libpurple/protocols/qq/sys_msg.c:175 -#: ../libpurple/protocols/qq/sys_msg.c:269 -#: ../libpurple/protocols/sametime/sametime.c:3440 -#: ../libpurple/protocols/sametime/sametime.c:3526 -#: ../libpurple/protocols/sametime/sametime.c:3700 -#: ../libpurple/protocols/sametime/sametime.c:5453 -#: ../libpurple/protocols/sametime/sametime.c:5543 -#: ../libpurple/protocols/sametime/sametime.c:5668 -#: ../libpurple/protocols/silc/buddy.c:455 -#: ../libpurple/protocols/silc/buddy.c:1079 -#: ../libpurple/protocols/silc/buddy.c:1194 -#: ../libpurple/protocols/silc/chat.c:619 -#: ../libpurple/protocols/silc/chat.c:753 -#: ../libpurple/protocols/silc/ops.c:1833 -#: ../libpurple/protocols/silc/silc.c:1039 -#: ../libpurple/protocols/silc/silc.c:1247 -#: ../libpurple/protocols/silc10/buddy.c:468 -#: ../libpurple/protocols/silc10/buddy.c:1087 -#: ../libpurple/protocols/silc10/buddy.c:1192 -#: ../libpurple/protocols/silc10/chat.c:600 -#: ../libpurple/protocols/silc10/chat.c:730 -#: ../libpurple/protocols/silc10/ops.c:1910 -#: ../libpurple/protocols/silc10/silc.c:742 -#: ../libpurple/protocols/silc10/silc.c:948 -#: ../libpurple/protocols/yahoo/yahoo.c:993 -#: ../libpurple/protocols/yahoo/yahoo.c:3564 -#: ../libpurple/protocols/yahoo/yahoo.c:3575 ../pidgin/gtkaccount.c:1843 -#: ../pidgin/gtkaccount.c:2404 ../pidgin/gtkblist.c:684 -#: ../pidgin/gtkblist.c:6879 ../pidgin/gtkcertmgr.c:197 -#: ../pidgin/gtkdialogs.c:767 ../pidgin/gtkdialogs.c:906 -#: ../pidgin/gtkdialogs.c:998 ../pidgin/gtkdialogs.c:1018 -#: ../pidgin/gtkdialogs.c:1042 ../pidgin/gtkdialogs.c:1064 -#: ../pidgin/gtkdialogs.c:1112 ../pidgin/gtkdialogs.c:1153 -#: ../pidgin/gtkdialogs.c:1209 ../pidgin/gtkdialogs.c:1248 -#: ../pidgin/gtkdialogs.c:1275 ../pidgin/gtkimhtmltoolbar.c:438 -#: ../pidgin/gtklog.c:327 ../pidgin/gtkplugin.c:302 ../pidgin/gtkpounce.c:1113 -#: ../pidgin/gtkprivacy.c:509 ../pidgin/gtkprivacy.c:525 -#: ../pidgin/gtkprivacy.c:550 ../pidgin/gtkprivacy.c:564 -#: ../pidgin/gtkrequest.c:273 ../pidgin/gtksavedstatuses.c:345 -#: ../pidgin/gtkstatusbox.c:1619 msgid "Cancel" msgstr "Peru" #. Save button #. Save -#: ../finch/gntaccount.c:579 ../finch/gntcertmgr.c:310 ../finch/gntdebug.c:297 -#: ../finch/gntplugin.c:532 ../finch/gntpounce.c:477 ../finch/gntprefs.c:265 -#: ../finch/gntsound.c:1061 ../finch/gntstatus.c:488 ../finch/gntstatus.c:598 -#: ../libpurple/account.c:1471 ../libpurple/plugins/buddynote.c:50 -#: ../libpurple/protocols/jabber/buddy.c:757 ../pidgin/gtkblist.c:684 -#: ../pidgin/gtkdebug.c:746 ../pidgin/gtkrequest.c:279 msgid "Save" msgstr "Tallenna" -#: ../finch/gntaccount.c:632 ../pidgin/gtkaccount.c:1834 -#: ../pidgin/gtksavedstatuses.c:333 ../pidgin/gtkstatusbox.c:1613 #, c-format msgid "Are you sure you want to delete %s?" msgstr "Haluatko varmasti poistaa %s:n?" -#: ../finch/gntaccount.c:635 msgid "Delete Account" msgstr "Poista tili" #. Delete button -#: ../finch/gntaccount.c:638 ../finch/gntaccount.c:708 -#: ../finch/gntcertmgr.c:318 ../finch/gntpounce.c:678 ../finch/gntpounce.c:741 -#: ../finch/gntstatus.c:144 ../finch/gntstatus.c:210 -#: ../pidgin/gtkaccount.c:1842 ../pidgin/gtklog.c:326 -#: ../pidgin/gtkpounce.c:1112 ../pidgin/gtkrequest.c:276 -#: ../pidgin/gtksavedstatuses.c:344 ../pidgin/gtkstatusbox.c:1618 msgid "Delete" msgstr "Poista" -#: ../finch/gntaccount.c:670 ../finch/gntblist.c:2528 ../finch/gntui.c:94 -#: ../pidgin/gtkaccount.c:2263 ../pidgin/gtkdocklet.c:716 msgid "Accounts" msgstr "Käyttäjätilit" -#: ../finch/gntaccount.c:676 msgid "You can enable/disable accounts from the following list." msgstr "" "Voit ottaa käyttöön/pois käytöstä käyttäjätilejä seuraavasta luettelosta." #. Add button -#: ../finch/gntaccount.c:699 ../finch/gntaccount.c:889 ../finch/gntblist.c:640 -#: ../finch/gntblist.c:747 ../finch/gntblist.c:782 ../finch/gntblist.c:2947 -#: ../finch/gntcertmgr.c:305 ../finch/gntnotify.c:385 ../finch/gntpounce.c:725 -#: ../finch/gntroomlist.c:274 ../finch/gntstatus.c:199 -#: ../libpurple/protocols/gg/gg.c:885 ../libpurple/protocols/qq/sys_msg.c:116 -#: ../libpurple/protocols/qq/sys_msg.c:176 -#: ../libpurple/protocols/qq/sys_msg.c:270 -#: ../libpurple/protocols/sametime/sametime.c:5542 -#: ../libpurple/protocols/silc/chat.c:618 -#: ../libpurple/protocols/silc10/chat.c:599 ../pidgin/gtkaccount.c:2403 -#: ../pidgin/gtkblist.c:6878 ../pidgin/gtkconv.c:1699 -#: ../pidgin/gtkrequest.c:277 msgid "Add" msgstr "Lisää" #. Modify button -#: ../finch/gntaccount.c:704 ../finch/gntpounce.c:733 msgid "Modify" msgstr "Muokkaa" -#: ../finch/gntaccount.c:812 ../pidgin/gtkaccount.c:2350 #, c-format msgid "%s%s%s%s has made %s his or her buddy%s%s" msgstr "%s%s%s%s on tehnyt käyttäjästä %s tuttavansa%s%s" -#: ../finch/gntaccount.c:885 ../pidgin/gtkaccount.c:2402 msgid "Add buddy to your list?" msgstr "Lisää tuttava tuttavaluetteloon?" -#: ../finch/gntaccount.c:945 ../pidgin/gtkaccount.c:2460 #, c-format msgid "%s%s%s%s wants to add %s to his or her buddy list%s%s" msgstr "%s%s%s%s haluaa lisätä käyttäjän %s tuttavaluetteloonsa%s%s" -#: ../finch/gntaccount.c:970 ../finch/gntaccount.c:973 -#: ../finch/gntaccount.c:1000 ../pidgin/gtkaccount.c:2483 -#: ../pidgin/gtkaccount.c:2490 msgid "Authorize buddy?" msgstr "Valtuuta tuttava?" -#: ../finch/gntaccount.c:977 ../finch/gntaccount.c:1004 -#: ../pidgin/gtkaccount.c:2484 ../pidgin/gtkaccount.c:2491 msgid "Authorize" msgstr "Valtuuta" -#: ../finch/gntaccount.c:978 ../finch/gntaccount.c:1005 -#: ../pidgin/gtkaccount.c:2485 ../pidgin/gtkaccount.c:2492 msgid "Deny" msgstr "Kiellä" -#: ../finch/gntblist.c:265 #, c-format msgid "" "Online: %d\n" @@ -319,12 +165,10 @@ "Kirjautuneena: %d\n" "Yhteensä: %d" -#: ../finch/gntblist.c:274 #, c-format msgid "Account: %s (%s)" msgstr "Tili: %s (%s)" -#: ../finch/gntblist.c:286 #, c-format msgid "" "\n" @@ -333,344 +177,182 @@ "\n" "Viimeksi nähty: %s sitten" -#: ../finch/gntblist.c:306 ../pidgin/gtkprefs.c:327 -#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:1 msgid "Default" msgstr "Oletus" -#: ../finch/gntblist.c:584 msgid "You must provide a username for the buddy." msgstr "Tuttavan käyttäjänimi on annettava." -#: ../finch/gntblist.c:586 msgid "You must provide a group." msgstr "Ryhmä on määritettävä." -#: ../finch/gntblist.c:588 msgid "You must select an account." msgstr "Käyttäjätili täytyy valita." -#: ../finch/gntblist.c:590 msgid "The selected account is not online." msgstr "Valittu käyttäjätili ei ole linjoilla." -#: ../finch/gntblist.c:595 msgid "Error adding buddy" msgstr "Virhe lisättäessä tuttavaa" -#: ../finch/gntblist.c:622 ../libpurple/protocols/irc/irc.c:974 -#: ../libpurple/protocols/irc/msgs.c:364 -#: ../libpurple/protocols/jabber/jabber.c:974 -#: ../libpurple/protocols/jabber/jabber.c:976 -#: ../libpurple/protocols/oscar/oscar.c:2942 -#: ../libpurple/protocols/oscar/oscar.c:3959 -#: ../libpurple/protocols/silc/buddy.c:1542 -#: ../libpurple/protocols/silc/ops.c:1210 -#: ../libpurple/protocols/silc/ops.c:1213 -#: ../libpurple/protocols/silc/ops.c:1349 -#: ../libpurple/protocols/silc/ops.c:1352 -#: ../libpurple/protocols/silc/silc.c:1221 -#: ../libpurple/protocols/silc10/buddy.c:1542 -#: ../libpurple/protocols/silc10/ops.c:1191 -#: ../libpurple/protocols/silc10/ops.c:1194 -#: ../libpurple/protocols/silc10/ops.c:1340 -#: ../libpurple/protocols/silc10/ops.c:1343 -#: ../libpurple/protocols/silc10/silc.c:922 ../pidgin/gtkaccount.c:1916 -#: ../pidgin/gtksavedstatuses.c:971 msgid "Username" msgstr "Käyttäjänimi" -#: ../finch/gntblist.c:625 msgid "Alias (optional)" msgstr "Lempinimi (valinnainen) " -#: ../finch/gntblist.c:628 msgid "Add in group" msgstr "Lisää ryhmään" -#: ../finch/gntblist.c:632 ../finch/gntblist.c:726 ../finch/gntblist.c:1705 -#: ../finch/gntblist.c:2642 ../finch/gntblist.c:2698 ../finch/gntblist.c:2763 -#: ../finch/gntblist.c:2823 ../finch/gntnotify.c:174 ../finch/gntstatus.c:576 -#: ../libpurple/plugins/idle.c:153 ../libpurple/plugins/idle.c:190 -#: ../pidgin/gtkblist.c:3319 ../pidgin/gtknotify.c:526 -#: ../pidgin/gtkpounce.c:1281 ../pidgin/plugins/gevolution/gevolution.c:447 msgid "Account" msgstr "Tili" -#: ../finch/gntblist.c:638 ../finch/gntblist.c:1183 -#: ../libpurple/protocols/silc/buddy.c:725 -#: ../libpurple/protocols/silc/buddy.c:1030 -#: ../libpurple/protocols/silc/buddy.c:1075 -#: ../libpurple/protocols/silc/buddy.c:1185 -#: ../libpurple/protocols/silc10/buddy.c:737 -#: ../libpurple/protocols/silc10/buddy.c:1036 -#: ../libpurple/protocols/silc10/buddy.c:1083 -#: ../libpurple/protocols/silc10/buddy.c:1183 -#: ../libpurple/protocols/yahoo/yahoo.c:3400 ../pidgin/gtkblist.c:6427 -#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:449 msgid "Add Buddy" msgstr "Lisää tuttava" -#: ../finch/gntblist.c:638 msgid "Please enter buddy information." msgstr "Syötä tuttavan tiedot." -#: ../finch/gntblist.c:694 ../libpurple/blist.c:1237 msgid "Chats" msgstr "Ryhmäkeskustelut" #. Extract their Name and put it in -#: ../finch/gntblist.c:732 ../finch/gntblist.c:2637 ../finch/gntblist.c:2693 -#: ../finch/gntblist.c:2818 ../finch/gntroomlist.c:298 -#: ../libpurple/protocols/jabber/jabber.c:991 -#: ../libpurple/protocols/jabber/jabber.c:994 -#: ../libpurple/protocols/msn/msn.c:1754 ../libpurple/protocols/msn/msn.c:1819 -#: ../libpurple/protocols/msn/msn.c:1846 -#: ../libpurple/protocols/msnp9/msn.c:1595 -#: ../libpurple/protocols/msnp9/msn.c:1660 -#: ../libpurple/protocols/msnp9/msn.c:1687 -#: ../libpurple/protocols/qq/buddy_info.c:44 ../pidgin/gtkplugin.c:766 -#: ../pidgin/gtkroomlist.c:749 -#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:132 -#: ../pidgin/plugins/gevolution/assoc-buddy.c:123 msgid "Name" msgstr "Nimi" -#: ../finch/gntblist.c:735 ../finch/gntblist.c:1646 -#: ../libpurple/protocols/msn/msn.c:1573 -#: ../libpurple/protocols/msnp9/msn.c:1413 -#: ../libpurple/protocols/silc/chat.c:609 -#: ../libpurple/protocols/silc10/chat.c:590 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:704 -#: ../libpurple/protocols/zephyr/zephyr.c:792 -#: ../libpurple/protocols/zephyr/zephyr.c:1167 ../pidgin/gtkdialogs.c:1017 -#: ../pidgin/gtkdialogs.c:1041 ../pidgin/gtkdialogs.c:1063 -#: ../pidgin/gtkrequest.c:280 msgid "Alias" msgstr "Lempinimi" -#: ../finch/gntblist.c:738 ../finch/gntblist.c:2963 msgid "Group" msgstr "Ryhmä" -#: ../finch/gntblist.c:742 ../finch/gntblist.c:1150 msgid "Auto-join" msgstr "Liity automaattisesti" -#: ../finch/gntblist.c:745 ../finch/gntblist.c:1185 ../pidgin/gtkblist.c:6792 msgid "Add Chat" msgstr "Lisää ryhmäkeskustelu" -#: ../finch/gntblist.c:746 msgid "You can edit more information from the context menu later." msgstr "Voit muokata lisää tietoja myöhemmin pikavalikosta." -#: ../finch/gntblist.c:759 ../finch/gntblist.c:772 msgid "Error adding group" msgstr "Virhe lisättäessä ryhmää" -#: ../finch/gntblist.c:760 msgid "You must give a name for the group to add." msgstr "Lisättävän ryhmän nimi on annettava." -#: ../finch/gntblist.c:773 msgid "A group with the name already exists." msgstr "Valitun niminen ryhmä on jo olemassa" -#: ../finch/gntblist.c:780 ../finch/gntblist.c:1187 -#: ../libpurple/protocols/sametime/sametime.c:5452 -#: ../libpurple/protocols/sametime/sametime.c:5540 ../pidgin/gtkblist.c:6875 msgid "Add Group" msgstr "Lisää ryhmä" -#: ../finch/gntblist.c:780 msgid "Enter the name of the group" msgstr "Anna ryhmän nimi" -#: ../finch/gntblist.c:1133 ../pidgin/gtkblist.c:683 msgid "Edit Chat" msgstr "Muokkaa ryhmäkeskustelua" -#: ../finch/gntblist.c:1133 msgid "Please Update the necessary fields." msgstr "Päivitä vaaditut kentät." -#: ../finch/gntblist.c:1134 ../finch/gntstatus.c:205 msgid "Edit" msgstr "Muokkaa" -#: ../finch/gntblist.c:1159 msgid "Edit Settings" msgstr "Muokkaa asetuksia" -#: ../finch/gntblist.c:1195 ../pidgin/gtkutils.c:980 msgid "Information" msgstr "Tiedot" -#: ../finch/gntblist.c:1195 ../pidgin/gtkutils.c:980 msgid "Retrieving..." msgstr "Haetaan..." -#: ../finch/gntblist.c:1249 ../finch/gntconv.c:591 -#: ../libpurple/protocols/silc/chat.c:906 -#: ../libpurple/protocols/silc10/chat.c:883 msgid "Get Info" msgstr "Hae tiedot" -#: ../finch/gntblist.c:1253 msgid "Add Buddy Pounce" msgstr "Lisää tuttavailmoitin" #. if (q_bud && is_online(q_bud->status)) { -#: ../finch/gntblist.c:1260 ../finch/gntconv.c:603 -#: ../libpurple/protocols/jabber/si.c:1118 -#: ../libpurple/protocols/oscar/oscar.c:655 ../libpurple/protocols/qq/qq.c:588 -#: ../pidgin/gtkconv.c:1647 msgid "Send File" msgstr "Lähetä tiedosto" -#: ../finch/gntblist.c:1267 ../libpurple/protocols/gg/gg.c:1629 -#: ../libpurple/protocols/msn/msn.c:674 ../libpurple/protocols/msnp9/msn.c:562 msgid "Blocked" msgstr "Estetty" -#: ../finch/gntblist.c:1273 ../finch/gntblist.c:1662 ../finch/gntblist.c:2832 msgid "View Log" msgstr "Näytä loki" -#: ../finch/gntblist.c:1355 #, c-format msgid "Please enter the new name for %s" msgstr "Anna uusi nimi kohteelle %s" -#: ../finch/gntblist.c:1357 ../finch/gntblist.c:1646 msgid "Rename" msgstr "Nimeä uudelleen" -#: ../finch/gntblist.c:1357 msgid "Set Alias" msgstr "Aseta lempinimi" -#: ../finch/gntblist.c:1358 msgid "Enter empty string to reset the name." msgstr "Syötä tyhjä merkkijono palauttaaksesi oletusnimen." -#: ../finch/gntblist.c:1472 msgid "Removing this contact will also remove all the buddies in the contact" msgstr "Kontaktin poistaminen poistaa myös kaikki kontaktissa olevat tuttavat" -#: ../finch/gntblist.c:1480 msgid "Removing this group will also remove all the buddies in the group" msgstr "Ryhmän poistaminen poistaa myös kaikki ryhmässä olevat tuttavat" -#: ../finch/gntblist.c:1485 #, c-format msgid "Are you sure you want to remove %s?" msgstr "Haluatko varmasti poistaa %s:n?" #. XXX: anything to do with the returned ui-handle? -#: ../finch/gntblist.c:1488 msgid "Confirm Remove" msgstr "Vahvista poistaminen" -#: ../finch/gntblist.c:1493 ../finch/gntblist.c:1648 ../finch/gntft.c:243 -#: ../pidgin/gtkconv.c:1696 ../pidgin/gtkrequest.c:278 -#: ../pidgin/gtkstatusbox.c:268 msgid "Remove" msgstr "Poista" #. Buddy List -#: ../finch/gntblist.c:1622 ../finch/gntblist.c:3004 ../finch/gntprefs.c:258 -#: ../finch/gntui.c:95 ../pidgin/gtkblist.c:5166 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:326 msgid "Buddy List" msgstr "Tuttavat" -#: ../finch/gntblist.c:1653 msgid "Place tagged" msgstr "Paikka merkitty" -#: ../finch/gntblist.c:1658 msgid "Toggle Tag" msgstr "Merkitse/poista merkintä" #. General -#: ../finch/gntblist.c:1698 ../libpurple/protocols/gg/gg.c:638 -#: ../libpurple/protocols/gg/gg.c:1052 ../libpurple/protocols/gg/gg.c:1125 -#: ../libpurple/protocols/gg/gg.c:2228 -#: ../libpurple/protocols/jabber/buddy.c:309 -#: ../libpurple/protocols/jabber/buddy.c:1284 -#: ../libpurple/protocols/jabber/buddy.c:2264 -#: ../libpurple/protocols/jabber/buddy.c:2456 -#: ../libpurple/protocols/jabber/jabber.c:1002 -#: ../libpurple/protocols/jabber/jabber.c:1614 -#: ../libpurple/protocols/jabber/jabber.c:1628 -#: ../libpurple/protocols/jabber/jabber.c:1642 -#: ../libpurple/protocols/jabber/jabber.c:1656 -#: ../libpurple/protocols/jabber/jabber.c:1670 -#: ../libpurple/protocols/msn/msn.c:1581 ../libpurple/protocols/msn/msn.c:1757 -#: ../libpurple/protocols/msnp9/msn.c:1421 -#: ../libpurple/protocols/msnp9/msn.c:1598 -#: ../libpurple/protocols/qq/buddy_info.c:43 -#: ../libpurple/protocols/silc/buddy.c:1538 -#: ../libpurple/protocols/silc/ops.c:1016 -#: ../libpurple/protocols/silc/ops.c:1199 -#: ../libpurple/protocols/silc/ops.c:1337 -#: ../libpurple/protocols/silc10/buddy.c:1538 -#: ../libpurple/protocols/silc10/ops.c:1036 -#: ../libpurple/protocols/silc10/ops.c:1179 -#: ../libpurple/protocols/silc10/ops.c:1328 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1073 ../pidgin/gtkblist.c:3343 msgid "Nickname" msgstr "Kutsumanimi" #. Idle stuff -#: ../finch/gntblist.c:1720 ../finch/gntprefs.c:261 -#: ../libpurple/protocols/bonjour/bonjour.c:376 -#: ../libpurple/protocols/jabber/buddy.c:817 -#: ../libpurple/protocols/jabber/buddy.c:981 -#: ../libpurple/protocols/msn/msn.c:621 ../libpurple/protocols/msn/msn.c:639 -#: ../libpurple/protocols/msn/msn.c:647 ../libpurple/protocols/msn/state.c:32 -#: ../libpurple/protocols/msnp9/msn.c:541 -#: ../libpurple/protocols/msnp9/state.c:32 -#: ../libpurple/protocols/novell/novell.c:2843 -#: ../libpurple/protocols/oscar/oscar.c:2966 -#: ../libpurple/protocols/yahoo/yahoo.c:3154 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:710 ../pidgin/gtkblist.c:3371 -#: ../pidgin/gtkblist.c:3831 ../pidgin/gtkprefs.c:2056 msgid "Idle" msgstr "Jouten" -#: ../finch/gntblist.c:1734 msgid "On Mobile" msgstr "Liikkeellä" -#: ../finch/gntblist.c:2035 ../pidgin/gtkdocklet.c:582 msgid "New..." msgstr "Uusi..." -#: ../finch/gntblist.c:2042 ../pidgin/gtkdocklet.c:583 msgid "Saved..." msgstr "Tallennettu..." -#: ../finch/gntblist.c:2496 ../finch/gntplugin.c:352 ../finch/gntui.c:100 -#: ../pidgin/gtkdocklet.c:717 ../pidgin/gtkplugin.c:715 msgid "Plugins" msgstr "Liitännäiset" -#: ../finch/gntblist.c:2650 ../finch/gntblist.c:2655 msgid "Block/Unblock" msgstr "Estä/poista esto" -#: ../finch/gntblist.c:2651 ../libpurple/protocols/gg/gg.c:1665 msgid "Block" msgstr "Estä" -#: ../finch/gntblist.c:2652 ../libpurple/protocols/gg/gg.c:1661 msgid "Unblock" msgstr "Poista esto" -#: ../finch/gntblist.c:2657 msgid "" "Please enter the username or alias of the person you would like to Block/" "Unblock." @@ -681,156 +363,92 @@ #. Not multiline #. Not masked? #. No hints? -#: ../finch/gntblist.c:2660 ../finch/gntblist.c:2711 ../finch/gntblist.c:2837 -#: ../finch/gntcertmgr.c:89 ../finch/gntconn.c:137 ../finch/gntnotify.c:80 -#: ../finch/plugins/gnthistory.c:177 ../libpurple/account.c:1117 -#: ../libpurple/account.c:1436 ../libpurple/protocols/gg/gg.c:507 -#: ../libpurple/protocols/gg/gg.c:666 ../libpurple/protocols/gg/gg.c:803 -#: ../libpurple/protocols/jabber/jabber.c:1786 -#: ../libpurple/protocols/jabber/xdata.c:402 -#: ../libpurple/protocols/msn/msn.c:300 ../libpurple/protocols/msn/msn.c:317 -#: ../libpurple/protocols/msn/msn.c:334 ../libpurple/protocols/msn/msn.c:351 -#: ../libpurple/protocols/msnp9/msn.c:283 -#: ../libpurple/protocols/msnp9/msn.c:300 -#: ../libpurple/protocols/msnp9/msn.c:317 -#: ../libpurple/protocols/msnp9/msn.c:334 -#: ../libpurple/protocols/myspace/user.c:581 -#: ../libpurple/protocols/myspace/user.c:675 -#: ../libpurple/protocols/oscar/oscar.c:6206 -#: ../libpurple/protocols/silc/buddy.c:454 -#: ../libpurple/protocols/silc/buddy.c:1193 -#: ../libpurple/protocols/silc/chat.c:448 -#: ../libpurple/protocols/silc/chat.c:485 -#: ../libpurple/protocols/silc/chat.c:752 -#: ../libpurple/protocols/silc/ops.c:1306 -#: ../libpurple/protocols/silc/ops.c:1832 -#: ../libpurple/protocols/silc/silc.c:1038 -#: ../libpurple/protocols/silc10/buddy.c:467 -#: ../libpurple/protocols/silc10/buddy.c:1191 -#: ../libpurple/protocols/silc10/chat.c:425 -#: ../libpurple/protocols/silc10/chat.c:464 -#: ../libpurple/protocols/silc10/chat.c:729 -#: ../libpurple/protocols/silc10/ops.c:1297 -#: ../libpurple/protocols/silc10/ops.c:1909 -#: ../libpurple/protocols/silc10/silc.c:741 -#: ../libpurple/protocols/yahoo/yahoo.c:992 -#: ../libpurple/protocols/yahoo/yahoo.c:3563 -#: ../libpurple/protocols/yahoo/yahoo.c:3574 ../pidgin/gtkcertmgr.c:195 -#: ../pidgin/gtkdialogs.c:766 ../pidgin/gtkdialogs.c:905 -#: ../pidgin/gtkdialogs.c:997 ../pidgin/gtkrequest.c:272 msgid "OK" msgstr "OK" -#: ../finch/gntblist.c:2706 ../pidgin/gtkdialogs.c:761 msgid "New Instant Message" msgstr "Uusi pikaviesti" -#: ../finch/gntblist.c:2708 ../pidgin/gtkdialogs.c:763 msgid "Please enter the username or alias of the person you would like to IM." msgstr "" "Syötä sen henkilön käyttäjänimi tai lempinimi, jolle haluat lähettää " "pikaviestin." -#: ../finch/gntblist.c:2759 msgid "Channel" msgstr "Kanava" -#: ../finch/gntblist.c:2771 ../pidgin/gtkblist.c:1036 msgid "Join a Chat" msgstr "Liity ryhmäkeskusteluun" -#: ../finch/gntblist.c:2773 msgid "Please enter the name of the chat you want to join." msgstr "Syötä liityttävän ryhmäkeskustelun nimi." -#: ../finch/gntblist.c:2775 ../finch/gntnotify.c:394 msgid "Join" msgstr "Liity" -#: ../finch/gntblist.c:2834 ../pidgin/gtkdialogs.c:994 msgid "" "Please enter the username or alias of the person whose log you would like to " "view." msgstr "Syötä sen henkilön käyttäjänimi jonka lokia haluat katsella." #. Create the "Options" frame. -#: ../finch/gntblist.c:2882 ../finch/gntpounce.c:459 ../pidgin/gtkpounce.c:802 msgid "Options" msgstr "Valinnat" -#: ../finch/gntblist.c:2888 msgid "Send IM..." msgstr "Lähetä pikaviesti..." -#: ../finch/gntblist.c:2893 msgid "Block/Unblock..." msgstr "Estä/poista esto..." -#: ../finch/gntblist.c:2898 msgid "Join Chat..." msgstr "Liity ryhmäkeskusteluun..." -#: ../finch/gntblist.c:2903 ../finch/gntconv.c:611 msgid "View Log..." msgstr "Näytä loki..." -#: ../finch/gntblist.c:2908 +msgid "View All Logs" +msgstr "Näytä kaikki lokit" + msgid "Show" msgstr "Näytä" -#: ../finch/gntblist.c:2913 msgid "Empty groups" msgstr "Tyhjät ryhmät" -#: ../finch/gntblist.c:2920 msgid "Offline buddies" msgstr "Poissa linjoilta olevat tuttavat" -#: ../finch/gntblist.c:2927 msgid "Sort" msgstr "Lajittele" -#: ../finch/gntblist.c:2932 msgid "By Status" msgstr "Tilan mukaan" -#: ../finch/gntblist.c:2937 ../pidgin/gtkblist.c:4322 msgid "Alphabetically" msgstr "Aakkosittain" -#: ../finch/gntblist.c:2942 msgid "By Log Size" msgstr "Lokin koon mukaan" -#: ../finch/gntblist.c:2953 msgid "Buddy" msgstr "Tuttava" -#: ../finch/gntblist.c:2958 ../libpurple/protocols/oscar/oscar.c:649 -#: ../libpurple/protocols/silc/silc.c:984 -#: ../libpurple/protocols/silc/util.c:559 -#: ../libpurple/protocols/silc10/silc.c:685 -#: ../libpurple/protocols/silc10/util.c:553 msgid "Chat" msgstr "Keskustelu" -#: ../finch/gntblist.c:2968 ../finch/plugins/grouping.c:255 msgid "Grouping" msgstr "Ryhmittely" -#: ../finch/gntcertmgr.c:85 ../pidgin/gtkcertmgr.c:188 msgid "Certificate Import" msgstr "Varmenteen tuonti" -#: ../finch/gntcertmgr.c:86 ../pidgin/gtkcertmgr.c:189 msgid "Specify a hostname" msgstr "Määrittele isäntänimi" -#: ../finch/gntcertmgr.c:87 ../pidgin/gtkcertmgr.c:190 msgid "Type the host name this certificate is for." msgstr "Kirjoita se isäntänimi jolle tämä varmenne on tehty." -#: ../finch/gntcertmgr.c:96 ../pidgin/gtkcertmgr.c:210 #, c-format msgid "" "File %s could not be imported.\n" @@ -839,19 +457,15 @@ "Tiedostoa %s ei voi tuoda.\n" "Varmista että tiedosto on luettavissa ja PEM-muodossa.\n" -#: ../finch/gntcertmgr.c:98 ../pidgin/gtkcertmgr.c:212 msgid "Certificate Import Error" msgstr "Varmenteen tuontivirhe" -#: ../finch/gntcertmgr.c:99 ../pidgin/gtkcertmgr.c:213 msgid "X.509 certificate import failed" msgstr "X.509-varmenteen tuonti epäonnistui" -#: ../finch/gntcertmgr.c:109 ../pidgin/gtkcertmgr.c:224 msgid "Select a PEM certificate" msgstr "Valitse PEM-varmenne" -#: ../finch/gntcertmgr.c:126 ../pidgin/gtkcertmgr.c:245 #, c-format msgid "" "Export to file %s failed.\n" @@ -860,24 +474,19 @@ "Tiedostoon %s vienti epäonnistui.\n" "Tarkista että kohdepolkuun on kirjoitusoikeudet\n" -#: ../finch/gntcertmgr.c:128 ../pidgin/gtkcertmgr.c:247 msgid "Certificate Export Error" msgstr "Varmenteen vientivirhe" -#: ../finch/gntcertmgr.c:129 ../pidgin/gtkcertmgr.c:248 msgid "X.509 certificate export failed" msgstr "X.509-varmenteen vienti epäonnistui" -#: ../finch/gntcertmgr.c:158 ../pidgin/gtkcertmgr.c:298 msgid "PEM X.509 Certificate Export" msgstr "PEM X.509 -varmenteen vienti" -#: ../finch/gntcertmgr.c:187 #, c-format msgid "Certificate for %s" msgstr "Varmenne kohteelle %s" -#: ../finch/gntcertmgr.c:194 #, c-format msgid "" "Common name: %s\n" @@ -890,57 +499,38 @@ "SHA1-sormenjälki:\n" "%s" -#: ../finch/gntcertmgr.c:197 msgid "SSL Host Certificate" msgstr "SSL Host -varmenne" -#: ../finch/gntcertmgr.c:232 ../pidgin/gtkcertmgr.c:371 #, c-format msgid "Really delete certificate for %s?" msgstr "Poistetaanko kohteen %s varmenne?" -#: ../finch/gntcertmgr.c:235 ../pidgin/gtkcertmgr.c:373 msgid "Confirm certificate delete" msgstr "Vahvista varmenteen poisto" -#: ../finch/gntcertmgr.c:292 ../pidgin/gtkcertmgr.c:613 msgid "Certificate Manager" msgstr "Varmennehallinta" #. Creating the user splits -#: ../finch/gntcertmgr.c:297 ../libpurple/protocols/bonjour/bonjour.c:694 -#: ../libpurple/protocols/silc/silc.c:1223 -#: ../libpurple/protocols/silc10/silc.c:924 ../pidgin/gtkcertmgr.c:446 msgid "Hostname" msgstr "Isäntä" -#: ../finch/gntcertmgr.c:314 ../finch/gntnotify.c:388 ../pidgin/gtkconv.c:1675 -#: ../pidgin/gtkdebug.c:832 msgid "Info" msgstr "Tiedot" #. Close button -#: ../finch/gntcertmgr.c:323 ../finch/gntft.c:253 ../finch/gntnotify.c:182 -#: ../finch/gntplugin.c:220 ../finch/gntplugin.c:413 ../finch/gntpounce.c:750 -#: ../finch/gntroomlist.c:275 ../finch/gntstatus.c:216 -#: ../libpurple/protocols/msn/msn.c:417 ../libpurple/protocols/msnp9/msn.c:400 -#: ../libpurple/protocols/silc/util.c:385 -#: ../libpurple/protocols/silc10/util.c:377 ../pidgin/gtkaccount.c:2377 -#: ../pidgin/gtkrequest.c:275 msgid "Close" msgstr "Sulje" -#: ../finch/gntconn.c:126 #, c-format msgid "%s (%s)" msgstr "%s (%s)" -#: ../finch/gntconn.c:129 #, c-format msgid "%s disconnected." msgstr "Yhteys katkennut kohteeseen %s." -#: ../finch/gntconn.c:130 #, c-format msgid "" "%s\n" @@ -953,11 +543,9 @@ "Finch ei yritä uudelleenyhdistää käyttäjätiliä kunnes korjaat virheen ja " "otat tilin uudelleen käyttöön." -#: ../finch/gntconn.c:139 msgid "Re-enable Account" msgstr "Ota tili uudelleen käyttöön" -#: ../finch/gntconn.c:156 msgid "" "The account has disconnected and you are no longer in this chat. You will be " "automatically rejoined in the chat when the account reconnects." @@ -965,46 +553,36 @@ "Yhteys käyttäjätiliin on katkennut, etkä ole enää tässä keskustelussa. " "Keskusteluun liitytään uudelleen kun käyttäjätili on jälleen yhdistettynä. " -#: ../finch/gntconv.c:159 msgid "No such command." msgstr "Sellaista komentoa ei ole." -#: ../finch/gntconv.c:163 ../pidgin/gtkconv.c:495 msgid "Syntax Error: You typed the wrong number of arguments to that command." msgstr "" "Syntaksivirhe: Syötit väärän määrän argumentteja kyseiselle komennolle." -#: ../finch/gntconv.c:168 ../pidgin/gtkconv.c:501 msgid "Your command failed for an unknown reason." msgstr "Komento epäonnistui tuntemattomasta syystä." -#: ../finch/gntconv.c:173 ../pidgin/gtkconv.c:508 msgid "That command only works in chats, not IMs." msgstr "Komento toimii vain ryhmäkeskusteluissa, ei pikaviesteissä." -#: ../finch/gntconv.c:176 ../pidgin/gtkconv.c:511 msgid "That command only works in IMs, not chats." msgstr "Komento toimii vain pikaviesteissä, ei ryhmäkeskusteluissa." -#: ../finch/gntconv.c:180 ../pidgin/gtkconv.c:516 msgid "That command doesn't work on this protocol." msgstr "Tämä komento ei toimi tälle yhteyskäytännölle." -#: ../finch/gntconv.c:188 msgid "Message was not sent, because you are not signed on." msgstr "Viestiä ei lähetetty, koska ei olla kirjauduttu sisään." -#: ../finch/gntconv.c:268 #, c-format msgid "%s (%s -- %s)" msgstr "%s (%s -- %s)" -#: ../finch/gntconv.c:291 #, c-format msgid "%s [%s]" msgstr "%s [%s]" -#: ../finch/gntconv.c:296 ../finch/gntconv.c:882 ../pidgin/gtkconv.c:3540 #, c-format msgid "" "\n" @@ -1013,68 +591,71 @@ "\n" "%s kirjoittaa..." -#: ../finch/gntconv.c:315 msgid "You have left this chat." msgstr "Olet poistunut tästä keskustelusta." -#: ../finch/gntconv.c:433 ../pidgin/gtkconv.c:1381 msgid "Logging started. Future messages in this conversation will be logged." msgstr "" "Kirjaaminen lokiin aloitettu. Tämän keskustelun viestit kirjataan nyt lokiin." -#: ../finch/gntconv.c:437 ../pidgin/gtkconv.c:1389 msgid "" "Logging stopped. Future messages in this conversation will not be logged." msgstr "" "Kirjaaminen lokiin lopetettu. Tämän keskustelun viestejä ei enää kirjata " "lokiin." -#: ../finch/gntconv.c:523 msgid "Send To" msgstr "Lähetä käyttäjälle" -#: ../finch/gntconv.c:568 +msgid "Invite message" +msgstr "Kutsuviesti" + +msgid "Invite" +msgstr "Kutsu" + +msgid "" +"Please enter the name of the user you wish to invite,\n" +"along with an optional invite message." +msgstr "" +"Anna kutsuttavan käyttäjän nimi sekä vapaaehtoinen \n" +"kutsuviesti." + msgid "Conversation" msgstr "Keskustelu" -#: ../finch/gntconv.c:574 msgid "Clear Scrollback" msgstr "Tyhjennä takaisinvieritys" -#: ../finch/gntconv.c:578 ../finch/gntprefs.c:191 msgid "Show Timestamps" msgstr "Näytä aikaleimat" -#: ../finch/gntconv.c:596 msgid "Add Buddy Pounce..." msgstr "Lisää tuttavailmoitin..." -#: ../finch/gntconv.c:615 +msgid "Invite..." +msgstr "Kutsu..." + msgid "Enable Logging" msgstr "Ota lokiinkirjaus käyttöön" -#: ../finch/gntconv.c:621 msgid "Enable Sounds" msgstr "Ota äänet käyttöön" -#: ../finch/gntconv.c:835 msgid "<AUTO-REPLY> " msgstr "<AUTOMAATTIVASTAUS> " -#. Print the list of users in the room -#: ../finch/gntconv.c:970 -msgid "List of users:\n" -msgstr "Luettelo käyttäjistä:\n" - -#: ../finch/gntconv.c:1132 ../pidgin/gtkconv.c:340 +#, c-format +msgid "List of %d user:\n" +msgid_plural "List of %d users:\n" +msgstr[0] "Luettelo %d käyttäjästä:\n" +msgstr[1] "Luettelo %d käyttäjistä:\n" + msgid "Supported debug options are: version" msgstr "Tuetut vianjäljitysvalinnat ovat: versio" -#: ../finch/gntconv.c:1168 ../pidgin/gtkconv.c:392 msgid "No such command (in this context)." msgstr "Komento ei saatavilla (tässä kontekstissa)." -#: ../finch/gntconv.c:1171 ../pidgin/gtkconv.c:395 msgid "" "Use \"/help <command>\" for help on a specific command.\n" "The following commands are available in this context:\n" @@ -1082,7 +663,20 @@ "Kirjoita \"/help <komento>\" saadaksesi ohjeen tietystä komennosta.\n" "Seuraavat komennot ovat saatavilla tässä kontekstissa:\n" -#: ../finch/gntconv.c:1244 ../pidgin/gtkconv.c:7942 +#, c-format +msgid "" +"%s is not a valid message class. See '/help msgcolor' for valid message " +"classes." +msgstr "" +"%s ei ole kelvollinen viestiluokka. Katso kelvolliset viestiluokat " +"komennolla \"/help msgcolor\"." + +#, c-format +msgid "%s is not a valid color. See '/help msgcolor' for valid colors." +msgstr "" +"%s ei ole kelvollinen väri. Katso kelvolliset värit komennolla \"/help " +"msgcolor\"." + msgid "" "say <message>: Send a message normally as if you weren't using a " "command." @@ -1090,61 +684,60 @@ "say <viesti>: Lähetä viesti normaalisti, niin kuin et olisi " "käyttämässä komentoa." -#: ../finch/gntconv.c:1247 ../pidgin/gtkconv.c:7945 msgid "me <action>: Send an IRC style action to a buddy or chat." msgstr "" "me <toiminta>: Lähetä IRC-tyylinen toiminta tuttavalle tai " "keskusteluun." -#: ../finch/gntconv.c:1250 ../pidgin/gtkconv.c:7948 msgid "" "debug <option>: Send various debug information to the current " "conversation." msgstr "" "debug <valinta>: Lähetä eri debug-tietoja senhetkiseen keskusteluun." -#: ../finch/gntconv.c:1253 ../pidgin/gtkconv.c:7951 msgid "clear: Clears the conversation scrollback." msgstr "clear: Tyhjentää keskustelun" -#: ../finch/gntconv.c:1256 ../pidgin/gtkconv.c:7957 msgid "help <command>: Help on a specific command." msgstr "help <komento>: Ohje tietylle komennolle." -#: ../finch/gntconv.c:1259 msgid "users: Show the list of users in the chat." msgstr "users: Näytä luettelo keskustelussa olevista käyttäjistä" -#: ../finch/gntconv.c:1264 msgid "plugins: Show the plugins window." msgstr "plugins: Näytä liitännäiset-ikkuna." -#: ../finch/gntconv.c:1267 msgid "buddylist: Show the buddylist." msgstr "buddylist: Näytä tuttavaluettelo." -#: ../finch/gntconv.c:1270 msgid "accounts: Show the accounts window." msgstr "accounts: Näytä käyttäjätilit-ikkuna." -#: ../finch/gntconv.c:1273 msgid "debugwin: Show the debug window." msgstr "debugwin: Näytä virheenjäljitysikkuna." -#: ../finch/gntconv.c:1276 msgid "prefs: Show the preference window." msgstr "prefs: Näytä asetukset-ikkuna." -#: ../finch/gntconv.c:1279 msgid "statuses: Show the savedstatuses window." msgstr "statuses: Näytä tallennetut tilat -ikkuna" -#: ../finch/gntdebug.c:231 ../pidgin/gtkconv.c:945 ../pidgin/gtkconv.c:2681 -#: ../pidgin/gtkdebug.c:219 ../pidgin/gtkft.c:543 +msgid "" +"msgcolor <class> <foreground> <background>: Set the color " +"for different classes of messages in the conversation window.<br> <" +"class>: receive, send, highlight, action, timestamp<br> <foreground/" +"background>: black, red, green, blue, white, gray, darkgray, magenta, " +"cyan, default<br><br>EXAMPLE:<br> msgcolor send cyan default" +msgstr "" +"msgcolor <luokka> <edustaväri> <taustaväri>: Aseta " +"keskusteluikkunan värit eri viestiluokille.<br > <luokka>: receive, " +"send, highlight, action, timestamp<br> <edusta/taustaväri>: black, " +"red, green, blue, white, gray, darkgray, magenta, cyan, " +"default<br><br>ESIMERKKI:<br> msgcolor send cyan default" + msgid "Unable to open file." msgstr "Tiedoston avaaminen epäonnistui." -#: ../finch/gntdebug.c:271 ../finch/gntui.c:98 ../pidgin/gtkdebug.c:689 msgid "Debug Window" msgstr "Virheenjäljitysikkuna" @@ -1152,144 +745,96 @@ #. * it's necessary to make the width of the debug window resizable ... like I said, #. * it doesn't make sense. The bug is likely in the packing in gntbox.c. #. -#: ../finch/gntdebug.c:292 ../pidgin/gtkdebug.c:751 msgid "Clear" msgstr "Tyhjennä" -#: ../finch/gntdebug.c:303 msgid "Filter:" msgstr "Suodatin:" -#: ../finch/gntdebug.c:309 ../pidgin/gtkdebug.c:760 msgid "Pause" msgstr "Tauko" -#: ../finch/gntft.c:120 ../pidgin/gtkft.c:229 -#, c-format -msgid "File Transfers - %d%% of %d files" -msgstr "Tiedostonsiirrrot - tiedosto %d%% / %d" +#, c-format +msgid "File Transfers - %d%% of %d file" +msgid_plural "File Transfers - %d%% of %d files" +msgstr[0] "Tiedostonsiirrot - tiedosto %d%% / %d" +msgstr[1] "Tiedostonsiirrot - tiedosto %d%% / %d" #. Create the window. -#: ../finch/gntft.c:125 ../finch/gntft.c:212 ../finch/gntui.c:99 -#: ../pidgin/gtkft.c:234 ../pidgin/gtkft.c:761 msgid "File Transfers" msgstr "Tiedostonsiirrot" -#: ../finch/gntft.c:217 ../pidgin/gtkft.c:645 msgid "Progress" msgstr "Valmiina" -#: ../finch/gntft.c:217 ../pidgin/gtkft.c:652 msgid "Filename" msgstr "Tiedoston nimi" -#: ../finch/gntft.c:217 ../pidgin/gtkft.c:659 msgid "Size" msgstr "Koko" -#: ../finch/gntft.c:217 msgid "Speed" msgstr "Nopeus" -#: ../finch/gntft.c:217 ../pidgin/gtkft.c:666 msgid "Remaining" msgstr "Jäljellä" #. XXX: Use of ggp_str_to_uin() is an ugly hack! -#: ../finch/gntft.c:217 ../finch/gntstatus.c:547 ../finch/gntstatus.c:576 -#: ../libpurple/protocols/bonjour/bonjour.c:380 -#: ../libpurple/protocols/gg/gg.c:1041 ../libpurple/protocols/gg/gg.c:1584 -#: ../libpurple/protocols/gg/gg.c:1592 -#: ../libpurple/protocols/jabber/buddy.c:808 -#: ../libpurple/protocols/jabber/buddy.c:812 -#: ../libpurple/protocols/jabber/buddy.c:971 -#: ../libpurple/protocols/jabber/jabber.c:1579 -#: ../libpurple/protocols/msn/msn.c:631 ../libpurple/protocols/msn/msn.c:641 -#: ../libpurple/protocols/msn/msn.c:646 ../libpurple/protocols/msn/msn.c:649 -#: ../libpurple/protocols/msnp9/msn.c:540 -#: ../libpurple/protocols/novell/novell.c:2853 -#: ../libpurple/protocols/oscar/oscar.c:822 -#: ../libpurple/protocols/oscar/oscar.c:827 -#: ../libpurple/protocols/oscar/oscar.c:829 -#: ../libpurple/protocols/oscar/oscar.c:2754 -#: ../libpurple/protocols/oscar/oscar.c:3817 -#: ../libpurple/protocols/sametime/sametime.c:3315 -#: ../libpurple/protocols/sametime/sametime.c:4206 -#: ../libpurple/protocols/yahoo/yahoo.c:3305 ../pidgin/gtkblist.c:3415 -#: ../pidgin/gtkblist.c:3429 ../pidgin/gtkblist.c:3431 -#: ../pidgin/gtksavedstatuses.c:990 ../pidgin/gtksavedstatuses.c:1134 msgid "Status" msgstr "Tila" -#: ../finch/gntft.c:227 msgid "Close this window when all transfers finish" msgstr "Sulje tämä ikkuna kun kaikki siirrot ovat valmiita" -#: ../finch/gntft.c:234 msgid "Clear finished transfers" msgstr "Poista valmiit siirrot" -#: ../finch/gntft.c:248 ../finch/gntroomlist.c:272 msgid "Stop" msgstr "Pysäytä" -#: ../finch/gntft.c:321 ../pidgin/gtkft.c:169 ../pidgin/gtkft.c:934 msgid "Waiting for transfer to begin" msgstr "Odotetaan lähetyksen alkamista" -#: ../finch/gntft.c:388 ../pidgin/gtkft.c:163 ../pidgin/gtkft.c:1015 msgid "Canceled" msgstr "Peruutettu" -#: ../finch/gntft.c:390 ../pidgin/gtkft.c:1017 msgid "Failed" msgstr "Epäonnistunut" -#: ../finch/gntft.c:436 ../pidgin/gtkft.c:134 #, c-format msgid "%.2f KiB/s" msgstr "%.2f KiB/s" -#: ../finch/gntft.c:447 msgid "Sent" msgstr "Lähetetty" -#: ../finch/gntft.c:447 msgid "Received" msgstr "Vastaanotettu" -#: ../finch/gntft.c:448 ../pidgin/gtkft.c:160 ../pidgin/gtkft.c:1080 msgid "Finished" msgstr "Valmis" -#: ../finch/gntft.c:450 #, c-format msgid "The file was saved as %s." msgstr "Tiedosto tallennettiin nimellä %s." -#: ../finch/gntft.c:457 msgid "Sending" msgstr "Lähetetään" -#: ../finch/gntft.c:457 msgid "Receiving" msgstr "Vastaanotetaan" -#: ../finch/gntlog.c:184 #, c-format msgid "Conversation in %s on %s" msgstr "Keskustelu paikassa %s aiheesta %s" -#: ../finch/gntlog.c:187 #, c-format msgid "Conversation with %s on %s" msgstr "Keskustelu henkilön %s kanssa aiheesta %s" -#: ../finch/gntlog.c:230 ../pidgin/gtklog.c:503 msgid "%B %Y" msgstr "%B %Y" -#: ../finch/gntlog.c:270 ../pidgin/gtklog.c:550 msgid "" "System events will only be logged if the \"Log all status changes to system " "log\" preference is enabled." @@ -1297,7 +842,6 @@ "Järjestelmätapahtumat kirjataan lokiin vain jos \"Kirjaa kaikki " "tilamuutokset järjestelmälokiin\" on asetettu." -#: ../finch/gntlog.c:274 ../pidgin/gtklog.c:554 msgid "" "Instant messages will only be logged if the \"Log all instant messages\" " "preference is enabled." @@ -1305,111 +849,85 @@ "Pikaviestit kirjataan lokiin vain jos \"Kirjaa kaikki pikaviestit lokiin\" " "on asetettu." -#: ../finch/gntlog.c:277 ../pidgin/gtklog.c:557 msgid "" "Chats will only be logged if the \"Log all chats\" preference is enabled." msgstr "" "Ryhmäkeskustelut kirjataan lokiin vain jos \"Kirjaa kaikki ryhmäkeskustelut " "lokiin\" on asetettu." -#: ../finch/gntlog.c:283 ../pidgin/gtklog.c:566 msgid "No logs were found" msgstr "Lokeja ei löytynyt" -#: ../finch/gntlog.c:330 ../pidgin/gtklog.c:646 msgid "Total log size:" msgstr "Lokin kokonaiskoko:" #. Search box ********* -#: ../finch/gntlog.c:338 msgid "Scroll/Search: " msgstr "Vieritä/etsi:" -#: ../finch/gntlog.c:382 ../pidgin/gtklog.c:716 #, c-format msgid "Conversations in %s" msgstr "Keskustelut paikassa %s" -#: ../finch/gntlog.c:390 ../finch/gntlog.c:448 ../pidgin/gtklog.c:724 -#: ../pidgin/gtklog.c:799 #, c-format msgid "Conversations with %s" msgstr "Keskustelut käyttäjän %s kanssa" -#: ../finch/gntlog.c:473 ../pidgin/gtklog.c:824 +msgid "All Conversations" +msgstr "Kaikki keskustelut" + msgid "System Log" msgstr "Järjestelmäloki" -#: ../finch/gntnotify.c:165 msgid "Emails" msgstr "Sähköpostit" -#: ../finch/gntnotify.c:171 ../finch/gntnotify.c:226 msgid "You have mail!" msgstr "Sinulle on postia." -#: ../finch/gntnotify.c:174 ../pidgin/gtknotify.c:533 msgid "Sender" msgstr "Lähettäjä" -#: ../finch/gntnotify.c:174 ../pidgin/gtknotify.c:540 msgid "Subject" msgstr "Aihe" -#: ../finch/gntnotify.c:202 #, c-format msgid "%s (%s) has %d new message." msgid_plural "%s (%s) has %d new messages." msgstr[0] "%s (%s): %d uusi viesti." msgstr[1] "%s (%s): %d uutta viestiä." -#: ../finch/gntnotify.c:226 ../pidgin/gtknotify.c:352 msgid "New Mail" msgstr "Uusi sähköposti" -#: ../finch/gntnotify.c:291 ../pidgin/gtknotify.c:972 #, c-format msgid "Info for %s" msgstr "%s tiedot" -#: ../finch/gntnotify.c:292 ../libpurple/protocols/toc/toc.c:476 -#: ../pidgin/gtknotify.c:973 msgid "Buddy Information" msgstr "Tuttavan tiedot" -#: ../finch/gntnotify.c:382 ../libpurple/protocols/qq/group_join.c:367 msgid "Continue" msgstr "Jatka" -#: ../finch/gntnotify.c:391 ../pidgin/gtkconv.c:1636 msgid "IM" msgstr "Pikaviesti" -#: ../finch/gntnotify.c:397 ../libpurple/protocols/sametime/sametime.c:3525 -msgid "Invite" -msgstr "Kutsu" - -#: ../finch/gntnotify.c:400 msgid "(none)" msgstr "(ei mitään)" -#: ../finch/gntnotify.c:426 msgid "URI" msgstr "URI" -#: ../finch/gntplugin.c:84 ../finch/gntplugin.c:93 msgid "ERROR" msgstr "VIRHE" -#: ../finch/gntplugin.c:84 msgid "loading plugin failed" msgstr "liitännäisen lataus epäonnistui" -#: ../finch/gntplugin.c:93 msgid "unloading plugin failed" msgstr "liitännäisen poistaminen käytöstä epäonnistui" -#: ../finch/gntplugin.c:139 #, c-format msgid "" "Name: %s\n" @@ -1426,43 +944,34 @@ "Sivusto: %s\n" "Tiedostonimi: %s\n" -#: ../finch/gntplugin.c:197 msgid "Plugin need to be loaded before you can configure it." msgstr "" "Liitännäinen tulee olla käytössä ennen kuin sen asetuksia voidaan muuttaa." -#: ../finch/gntplugin.c:245 msgid "No configuration options for this plugin." msgstr "Tälle liitännäiselle ei ole asetuksia." -#: ../finch/gntplugin.c:266 msgid "Error loading plugin" msgstr "Liitännäistä ladattaessa tapahtui virhe" -#: ../finch/gntplugin.c:267 msgid "The selected file is not a valid plugin." msgstr "Valittu tiedosto ei ole kelvollinen liitännäinen." -#: ../finch/gntplugin.c:268 msgid "" "Please open the debug window and try again to see the exact error message." msgstr "" "Avaa virheenjäljitysikkuna ja yritä uudelleen nähdäksesi tarkan virheviestin." -#: ../finch/gntplugin.c:331 msgid "Select plugin to install" msgstr "Valitse asennettava liitännäinen" -#: ../finch/gntplugin.c:357 msgid "You can (un)load plugins from the following list." msgstr "" "Voit ottaa käyttöön/pois käytöstä liitännäisiä seuraavasta luettelosta." -#: ../finch/gntplugin.c:408 msgid "Install Plugin..." msgstr "Asenna liitännäinen..." -#: ../finch/gntplugin.c:418 msgid "Configure Plugin" msgstr "Liitännäisen asetukset" @@ -1471,388 +980,290 @@ #. (that should have been "effect," right?) #. Back to instant-apply! I win! BU-HAHAHA! #. Create the window -#: ../finch/gntplugin.c:524 ../finch/gntplugin.c:531 ../finch/gntprefs.c:264 -#: ../finch/gntui.c:103 ../pidgin/gtkdocklet.c:718 ../pidgin/gtkprefs.c:2180 msgid "Preferences" msgstr "Asetukset" -#: ../finch/gntpounce.c:193 ../pidgin/gtkpounce.c:256 msgid "Please enter a buddy to pounce." msgstr "Syötä ilmoitettava tuttava." -#: ../finch/gntpounce.c:338 ../pidgin/gtkpounce.c:524 msgid "New Buddy Pounce" msgstr "Uusi tuttavailmoitin" -#: ../finch/gntpounce.c:338 ../pidgin/gtkpounce.c:524 msgid "Edit Buddy Pounce" msgstr "Muokkaa tuttavailmoitinta" -#: ../finch/gntpounce.c:343 msgid "Pounce Who" msgstr "Kenestä ilmoitetaan" #. Account: -#: ../finch/gntpounce.c:346 ../finch/gntstatus.c:456 msgid "Account:" msgstr "Käyttäjätili:" -#: ../finch/gntpounce.c:368 msgid "Buddy name:" msgstr "Tuttavan nimi:" #. Create the "Pounce When Buddy..." frame. -#: ../finch/gntpounce.c:386 ../pidgin/gtkpounce.c:592 msgid "Pounce When Buddy..." msgstr "Ilmoita kun tuttava..." -#: ../finch/gntpounce.c:388 msgid "Signs on" msgstr "kirjautuu sisään" -#: ../finch/gntpounce.c:389 msgid "Signs off" msgstr "kirjautuu ulos" -#: ../finch/gntpounce.c:390 msgid "Goes away" msgstr "poistuu" -#: ../finch/gntpounce.c:391 msgid "Returns from away" msgstr "palaa" -#: ../finch/gntpounce.c:392 msgid "Becomes idle" msgstr "on jouten" -#: ../finch/gntpounce.c:393 msgid "Is no longer idle" msgstr "ei enää ole jouten" -#: ../finch/gntpounce.c:394 msgid "Starts typing" msgstr "alkaa kirjoittaa" -#: ../finch/gntpounce.c:395 msgid "Pauses while typing" msgstr "keskeyttää kirjoittamisen" -#: ../finch/gntpounce.c:396 msgid "Stops typing" msgstr "lopettaa kirjoittamisen" -#: ../finch/gntpounce.c:397 msgid "Sends a message" msgstr "lähettää viestin" #. Create the "Action" frame. -#: ../finch/gntpounce.c:426 ../pidgin/gtkpounce.c:653 msgid "Action" msgstr "Toiminto" -#: ../finch/gntpounce.c:428 msgid "Open an IM window" msgstr "Avaa pikaviesti-ikkuna" -#: ../finch/gntpounce.c:429 msgid "Pop up a notification" msgstr "Ponnahdusilmoitus" -#: ../finch/gntpounce.c:430 msgid "Send a message" msgstr "Lähetä viesti" -#: ../finch/gntpounce.c:431 msgid "Execute a command" msgstr "Suorita komento" -#: ../finch/gntpounce.c:432 msgid "Play a sound" msgstr "Soita ääni" -#: ../finch/gntpounce.c:460 msgid "Pounce only when my status is not Available" msgstr "Ilmoita vain kun tilani ei ole Tavoitettavissa" -#: ../finch/gntpounce.c:462 ../pidgin/gtkpounce.c:1294 msgid "Recurring" msgstr "Toistuva" -#: ../finch/gntpounce.c:630 msgid "Cannot create pounce" msgstr "Ilmoitinta ei voi luoda" -#: ../finch/gntpounce.c:631 msgid "You do not have any accounts." msgstr "Yhtäkään käyttäjätiliä ei ole määritelty." -#: ../finch/gntpounce.c:632 msgid "You must create an account first before you can create a pounce." msgstr "Käyttäjätili tulee luoda ennen ilmoittimen luomista." -#: ../finch/gntpounce.c:674 ../pidgin/gtkpounce.c:1108 #, c-format msgid "Are you sure you want to delete the pounce on %s for %s?" msgstr "Haluatko varmasti poistaa ilmoituksen %s käyttäjältä %s?" -#: ../finch/gntpounce.c:708 ../finch/gntui.c:96 ../pidgin/gtkpounce.c:1337 msgid "Buddy Pounces" msgstr "Tuttavailmoittimet" -#: ../finch/gntpounce.c:817 ../pidgin/gtkpounce.c:1436 #, c-format msgid "%s has started typing to you (%s)" msgstr "%s alkoi kirjoittaa sinulle (%s)" -#: ../finch/gntpounce.c:818 ../pidgin/gtkpounce.c:1438 #, c-format msgid "%s has paused while typing to you (%s)" msgstr "%s keskeytti kirjoittamisen sinulle (%s)" -#: ../finch/gntpounce.c:819 ../pidgin/gtkpounce.c:1440 #, c-format msgid "%s has signed on (%s)" msgstr "%s on kirjautunut sisään (%s)" -#: ../finch/gntpounce.c:820 ../pidgin/gtkpounce.c:1442 #, c-format msgid "%s has returned from being idle (%s)" msgstr "%s on palannut oltuaan jouten (%s)" -#: ../finch/gntpounce.c:821 ../pidgin/gtkpounce.c:1444 #, c-format msgid "%s has returned from being away (%s)" msgstr "%s on palannut oltuaan poissa (%s)" -#: ../finch/gntpounce.c:822 ../pidgin/gtkpounce.c:1446 #, c-format msgid "%s has stopped typing to you (%s)" msgstr "%s on lopettanut kirjoittamisen sinulle (%s)" -#: ../finch/gntpounce.c:823 ../pidgin/gtkpounce.c:1448 #, c-format msgid "%s has signed off (%s)" msgstr "%s on kirjautunut ulos (%s)" -#: ../finch/gntpounce.c:824 ../pidgin/gtkpounce.c:1450 #, c-format msgid "%s has become idle (%s)" msgstr "%s on jouten (%s)" -#: ../finch/gntpounce.c:825 ../pidgin/gtkpounce.c:1452 #, c-format msgid "%s has gone away. (%s)" msgstr "%s on poissa. (%s)" -#: ../finch/gntpounce.c:826 ../pidgin/gtkpounce.c:1454 #, c-format msgid "%s has sent you a message. (%s)" msgstr "%s on lähettämässä sinulle viestiä. (%s)" -#: ../finch/gntpounce.c:845 ../pidgin/gtkpounce.c:1455 #, c-format msgid "Unknown pounce event. Please report this!" msgstr "Tuntematon ilmoitinviesti. Raportoi tästä!" -#: ../finch/gntprefs.c:92 msgid "Based on keyboard use" msgstr "Perustuen näppäimistön käyttöön" -#: ../finch/gntprefs.c:94 ../pidgin/gtkprefs.c:2061 msgid "From last sent message" msgstr "Viimeisestä lähetetystä viestistä" -#: ../finch/gntprefs.c:96 ../pidgin/gtkprefs.c:948 ../pidgin/gtkprefs.c:956 -#: ../pidgin/gtkprefs.c:2060 ../pidgin/gtkprefs.c:2074 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:333 msgid "Never" msgstr "Ei koskaan" -#: ../finch/gntprefs.c:184 msgid "Show Idle Time" msgstr "Näytä joutenoloaika" -#: ../finch/gntprefs.c:185 msgid "Show Offline Buddies" msgstr "Näytä poissa linjoilta olevat tuttavat" -#: ../finch/gntprefs.c:192 msgid "Notify buddies when you are typing" msgstr "Ilmoita tuttaville kun kirjoitat heille" -#: ../finch/gntprefs.c:198 ../finch/plugins/gnthistory.c:153 msgid "Log format" msgstr "Lokin muoto" -#: ../finch/gntprefs.c:199 ../finch/plugins/gnthistory.c:143 msgid "Log IMs" msgstr "Kirjaa pikaviestit" -#: ../finch/gntprefs.c:200 ../finch/plugins/gnthistory.c:144 msgid "Log chats" msgstr "Kirjaa ryhmäkeskustelut" -#: ../finch/gntprefs.c:201 msgid "Log status change events" msgstr "Kirjaa tilamuutokset" -#: ../finch/gntprefs.c:207 msgid "Report Idle time" msgstr "Ilmoita joutenoloaika" -#: ../finch/gntprefs.c:208 msgid "Change status when idle" msgstr "Vaihda tila, kun ollaan jouten" -#: ../finch/gntprefs.c:209 msgid "Minutes before changing status" msgstr "Minuutteja ennen tilan asetusta" -#: ../finch/gntprefs.c:210 msgid "Change status to" msgstr "Vaihda tila seuraavaksi" #. Conversations -#: ../finch/gntprefs.c:259 ../pidgin/gtkprefs.c:1046 ../pidgin/gtkprefs.c:2147 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:340 msgid "Conversations" msgstr "Keskustelut" -#: ../finch/gntprefs.c:260 ../finch/plugins/gnthistory.c:151 -#: ../pidgin/gtkprefs.c:1617 ../pidgin/gtkprefs.c:2158 msgid "Logging" msgstr "Kirjataan lokiin" -#: ../finch/gntrequest.c:381 msgid "You must fill all the required fields." msgstr "Täytä kaikki vaaditut kentät." -#: ../finch/gntrequest.c:382 msgid "The required fields are underlined." msgstr "Alleviivatut kentät ovat vaadittuja." -#: ../finch/gntrequest.c:640 msgid "Not implemented yet." msgstr "Ominaisuutta ei ole vielä toteutettu." -#: ../finch/gntrequest.c:745 ../pidgin/gtkrequest.c:1553 -#: ../pidgin/gtkrequest.c:1599 msgid "Save File..." msgstr "Tallenna tiedosto..." -#: ../finch/gntrequest.c:745 ../pidgin/gtkrequest.c:1554 -#: ../pidgin/gtkrequest.c:1600 msgid "Open File..." msgstr "Avaa tiedosto..." -#: ../finch/gntrequest.c:762 msgid "Choose Location..." msgstr "Valitse sijainti..." -#: ../finch/gntroomlist.c:208 msgid "Hit 'Enter' to find more rooms of this category." msgstr "Paina \"Enter\" nähdäksesi lisää tämän luokan huoneita." -#: ../finch/gntroomlist.c:273 msgid "Get" msgstr "Hae" #. Create the window. -#: ../finch/gntroomlist.c:285 ../finch/gntui.c:101 ../pidgin/gtkroomlist.c:530 msgid "Room List" msgstr "Huoneluettelo" -#: ../finch/gntsound.c:96 ../pidgin/gtksound.c:62 msgid "Buddy logs in" msgstr "Tuttava kirjautuu sisään" -#: ../finch/gntsound.c:97 ../pidgin/gtksound.c:63 msgid "Buddy logs out" msgstr "Tuttava kirjautuu ulos" -#: ../finch/gntsound.c:98 ../pidgin/gtksound.c:64 msgid "Message received" msgstr "Viesti vastaanotettu" -#: ../finch/gntsound.c:99 ../pidgin/gtksound.c:65 msgid "Message received begins conversation" msgstr "Vastaanotettu viesti aloittaa keskustelun" -#: ../finch/gntsound.c:100 ../pidgin/gtksound.c:66 msgid "Message sent" msgstr "Viesti lähetetty" -#: ../finch/gntsound.c:101 ../pidgin/gtksound.c:67 msgid "Person enters chat" msgstr "Joku saapuu ryhmäkeskusteluun" -#: ../finch/gntsound.c:102 ../pidgin/gtksound.c:68 msgid "Person leaves chat" msgstr "Joku poistuu ryhmäkeskustelusta" -#: ../finch/gntsound.c:103 ../pidgin/gtksound.c:69 msgid "You talk in chat" msgstr "Sinä puhut ryhmäkeskustelussa" -#: ../finch/gntsound.c:104 ../pidgin/gtksound.c:70 msgid "Others talk in chat" msgstr "Muut puhuvat ryhmäkeskustelussa" -#: ../finch/gntsound.c:106 ../pidgin/gtksound.c:73 msgid "Someone says your username in chat" msgstr "Joku sanoo käyttäjänimesi ryhmäkeskustelussa" -#: ../finch/gntsound.c:367 ../pidgin/gtksound.c:309 msgid "GStreamer Failure" msgstr "GStreamer-virhe" -#: ../finch/gntsound.c:368 ../pidgin/gtksound.c:310 msgid "GStreamer failed to initialize." msgstr "GStreameria ei voi alustaa." -#: ../finch/gntsound.c:722 ../finch/gntsound.c:808 ../pidgin/gtkprefs.c:1741 -#: ../pidgin/gtkprefs.c:1830 ../pidgin/gtkprefs.c:2003 msgid "(default)" msgstr "(oletus)" -#: ../finch/gntsound.c:735 msgid "Select Sound File ..." msgstr "Valitse äänitiedosto..." -#: ../finch/gntsound.c:910 msgid "Sound Preferences" msgstr "Ääniasetukset" -#: ../finch/gntsound.c:921 msgid "Profiles" msgstr "Profiilit" -#: ../finch/gntsound.c:960 ../pidgin/gtkprefs.c:1868 msgid "Automatic" msgstr "Automaattinen" -#: ../finch/gntsound.c:963 msgid "Console Beep" msgstr "Konsoliäänimerkki" -#: ../finch/gntsound.c:964 ../pidgin/gtkprefs.c:1872 msgid "Command" msgstr "Komento" -#: ../finch/gntsound.c:965 msgid "No Sound" msgstr "Ei ääntä" -#: ../finch/gntsound.c:967 ../pidgin/gtkprefs.c:1863 msgid "Sound Method" msgstr "Äänimenetelmä" -#: ../finch/gntsound.c:972 msgid "Method: " msgstr "Menetelmä: " -#: ../finch/gntsound.c:979 #, c-format msgid "" "Sound Command\n" @@ -1862,82 +1273,56 @@ "(%s tiedostonimeksi)" #. Sound options -#: ../finch/gntsound.c:987 ../pidgin/gtkprefs.c:1894 msgid "Sound Options" msgstr "Äänivalinnat" -#: ../finch/gntsound.c:988 msgid "Sounds when conversation has focus" msgstr "Äänet kun keskusteluikkuna on aktiivinen" -#: ../finch/gntsound.c:996 ../pidgin/gtkprefs.c:946 ../pidgin/gtkprefs.c:958 -#: ../pidgin/gtkprefs.c:1901 ../pidgin/plugins/timestamp_format.c:42 -#: ../pidgin/plugins/timestamp_format.c:51 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:334 msgid "Always" msgstr "Aina" -#: ../finch/gntsound.c:997 ../pidgin/gtkprefs.c:1899 msgid "Only when available" msgstr "Kun tavoitettavissa" -#: ../finch/gntsound.c:998 ../pidgin/gtkprefs.c:1900 msgid "Only when not available" msgstr "Kun ei tavoitettavissa" -#: ../finch/gntsound.c:1005 msgid "Volume(0-100):" msgstr "Äänenvoimakkuus(0-100):" #. Sound events -#: ../finch/gntsound.c:1024 ../pidgin/gtkprefs.c:1929 msgid "Sound Events" msgstr "Äänitapahtumat" -#: ../finch/gntsound.c:1026 ../pidgin/gtkprefs.c:1988 msgid "Event" msgstr "Tapahtuma" -#: ../finch/gntsound.c:1026 msgid "File" msgstr "Tiedosto" -#: ../finch/gntsound.c:1045 ../pidgin/gtkprefs.c:2007 msgid "Test" msgstr "Kokeile" -#: ../finch/gntsound.c:1048 ../pidgin/gtkprefs.c:2011 msgid "Reset" msgstr "Nollaa" -#: ../finch/gntsound.c:1051 ../pidgin/gtkprefs.c:2015 msgid "Choose..." msgstr "Valitse..." -#: ../finch/gntstatus.c:138 #, c-format msgid "Are you sure you want to delete \"%s\"" msgstr "Haluatko varmasti poistaa kohteen \"%s\"" -#: ../finch/gntstatus.c:141 msgid "Delete Status" msgstr "Poista tila" -#: ../finch/gntstatus.c:176 ../pidgin/gtksavedstatuses.c:597 msgid "Saved Statuses" msgstr "Tallennetut tilat" -#: ../finch/gntstatus.c:183 ../finch/gntstatus.c:539 -#: ../libpurple/protocols/jabber/buddy.c:321 -#: ../libpurple/protocols/jabber/buddy.c:1396 -#: ../libpurple/protocols/msn/msn.c:747 -#: ../libpurple/protocols/myspace/myspace.c:171 -#: ../libpurple/protocols/novell/novell.c:1493 -#: ../pidgin/gtksavedstatuses.c:500 msgid "Title" msgstr "Otsikko" -#: ../finch/gntstatus.c:183 ../pidgin/gtksavedstatuses.c:515 msgid "Type" msgstr "Tyyppi" @@ -1949,132 +1334,71 @@ #. user_settable #. not independent #. Attributes - each status can have a message. -#: ../finch/gntstatus.c:183 ../finch/gntstatus.c:564 ../finch/gntstatus.c:576 -#: ../libpurple/protocols/bonjour/bonjour.c:292 -#: ../libpurple/protocols/bonjour/bonjour.c:299 -#: ../libpurple/protocols/bonjour/bonjour.c:382 -#: ../libpurple/protocols/gg/gg.c:1079 ../libpurple/protocols/gg/gg.c:1587 -#: ../libpurple/protocols/gg/gg.c:1605 ../libpurple/protocols/gg/gg.c:1615 -#: ../libpurple/protocols/gg/gg.c:1621 ../libpurple/protocols/gg/gg.c:1630 -#: ../libpurple/protocols/gg/gg.c:1635 ../libpurple/protocols/irc/irc.c:245 -#: ../libpurple/protocols/jabber/jabber.c:1611 -#: ../libpurple/protocols/jabber/jabber.c:1625 -#: ../libpurple/protocols/jabber/jabber.c:1639 -#: ../libpurple/protocols/jabber/jabber.c:1653 -#: ../libpurple/protocols/jabber/jabber.c:1667 -#: ../libpurple/protocols/jabber/jabber.c:1683 -#: ../libpurple/protocols/msn/msn.c:699 ../libpurple/protocols/msn/msn.c:705 -#: ../libpurple/protocols/msn/msn.c:711 ../libpurple/protocols/msn/msn.c:717 -#: ../libpurple/protocols/msn/msn.c:722 ../libpurple/protocols/msn/msn.c:727 -#: ../libpurple/protocols/myspace/myspace.c:148 -#: ../libpurple/protocols/novell/novell.c:2856 -#: ../libpurple/protocols/novell/novell.c:2959 -#: ../libpurple/protocols/novell/novell.c:2965 -#: ../libpurple/protocols/novell/novell.c:2971 -#: ../libpurple/protocols/oscar/oscar.c:5667 -#: ../libpurple/protocols/oscar/oscar.c:5885 -#: ../libpurple/protocols/oscar/oscar.c:5899 -#: ../libpurple/protocols/oscar/oscar.c:5915 -#: ../libpurple/protocols/oscar/oscar.c:5922 -#: ../libpurple/protocols/oscar/oscar.c:5929 -#: ../libpurple/protocols/sametime/sametime.c:3338 -#: ../libpurple/protocols/sametime/sametime.c:3344 -#: ../libpurple/protocols/sametime/sametime.c:3350 -#: ../libpurple/protocols/sametime/sametime.c:3429 -#: ../libpurple/protocols/silc/buddy.c:1554 -#: ../libpurple/protocols/silc10/buddy.c:1554 -#: ../libpurple/protocols/simple/simple.c:247 -#: ../libpurple/protocols/yahoo/yahoo.c:3817 -#: ../libpurple/protocols/yahoo/yahoo.c:3823 -#: ../libpurple/protocols/zephyr/zephyr.c:2352 -#: ../pidgin/gtksavedstatuses.c:526 ../pidgin/gtksavedstatuses.c:1001 msgid "Message" msgstr "Viesti" #. Use -#: ../finch/gntstatus.c:194 ../finch/gntstatus.c:593 msgid "Use" msgstr "Käytä" -#: ../finch/gntstatus.c:301 msgid "Invalid title" msgstr "Epäkelpo otsikko" -#: ../finch/gntstatus.c:302 msgid "Please enter a non-empty title for the status." msgstr "Tilan otsikko ei voi olla tyhjä." -#: ../finch/gntstatus.c:310 msgid "Duplicate title" msgstr "Otsikon toisinto" -#: ../finch/gntstatus.c:311 msgid "Please enter a different title for the status." msgstr "Anna toinen otsikko tilalle." -#: ../finch/gntstatus.c:452 msgid "Substatus" msgstr "Alatila" -#: ../finch/gntstatus.c:464 ../pidgin/gtkft.c:699 msgid "Status:" msgstr "Tila:" -#: ../finch/gntstatus.c:479 msgid "Message:" msgstr "Viesti:" -#: ../finch/gntstatus.c:528 msgid "Edit Status" msgstr "Muokkaa tilaa" -#: ../finch/gntstatus.c:570 msgid "Use different status for following accounts" msgstr "Käytä eri tilaa seuraaville käyttäjätileille" #. Save & Use -#: ../finch/gntstatus.c:604 msgid "Save & Use" msgstr "Tallenna ja käytä" -#: ../finch/gntui.c:97 msgid "Certificates" msgstr "Varmenteet" -#: ../finch/gntui.c:102 ../pidgin/gtkprefs.c:2149 msgid "Sounds" msgstr "Äänet" -#: ../finch/gntui.c:104 msgid "Statuses" msgstr "Tilat" -#: ../finch/plugins/gntclipboard.c:115 ../finch/plugins/gntclipboard.c:121 -#: ../finch/plugins/gntclipboard.c:128 msgid "Error loading the plugin." msgstr "Liitännäistä ladattaessa tapahtui virhe." -#: ../finch/plugins/gntclipboard.c:116 msgid "Couldn't find X display" msgstr "X-näyttöä ei löydetty" -#: ../finch/plugins/gntclipboard.c:122 msgid "Couldn't find window" msgstr "Ikkunaa ei löydetty" -#: ../finch/plugins/gntclipboard.c:129 msgid "This plugin cannot be loaded because it was not built with X11 support." msgstr "Liitännäistä ei voi ladata, koska sitä ei käännetty X11-tuella." -#: ../finch/plugins/gntclipboard.c:158 msgid "GntClipboard" msgstr "GntClipboard" -#: ../finch/plugins/gntclipboard.c:160 msgid "Clipboard plugin" msgstr "Leikepöytäliitännäinen" -#: ../finch/plugins/gntclipboard.c:161 msgid "" "When the gnt clipboard contents change, the contents are made available to " "X, if possible." @@ -2082,77 +1406,60 @@ "Kun gnt:n leikepöydän sisältö muuttuu, sisältö annetaan X:lle jos " "mahdollista." -#: ../finch/plugins/gntgf.c:231 #, c-format msgid "%s just signed on" msgstr "%s kirjautui sisään" -#: ../finch/plugins/gntgf.c:238 #, c-format msgid "%s just signed off" msgstr "%s kirjautui ulos" -#: ../finch/plugins/gntgf.c:246 #, c-format msgid "%s sent you a message" msgstr "%s lähetti sinulle viestin" -#: ../finch/plugins/gntgf.c:265 #, c-format msgid "%s said your nick in %s" msgstr "%s mainitsi kutsumanimesi keskustelussa %s" -#: ../finch/plugins/gntgf.c:267 #, c-format msgid "%s sent a message in %s" msgstr "%s lähetti viestin keskustelussa %s" -#: ../finch/plugins/gntgf.c:305 msgid "Buddy signs on/off" msgstr "Tuttava kirjautuu sisään/ulos" -#: ../finch/plugins/gntgf.c:306 msgid "You receive an IM" msgstr "Saat pikaviestin" -#: ../finch/plugins/gntgf.c:307 msgid "Someone speaks in a chat" msgstr "Joku sanoo jotain ryhmäkeskustelussa" -#: ../finch/plugins/gntgf.c:308 msgid "Someone says your name in a chat" msgstr "Joku sanoo nimesi ryhmäkeskustelussa" -#: ../finch/plugins/gntgf.c:336 msgid "Notify with a toaster when" msgstr "Huomauta leivänpaahtimella kun" -#: ../finch/plugins/gntgf.c:351 msgid "Beep too!" msgstr "Anna myös äänimerkki." -#: ../finch/plugins/gntgf.c:357 msgid "Set URGENT for the terminal window." msgstr "Aseta pääteikkuna tilaan \"kiireellinen\"." -#: ../finch/plugins/gntgf.c:377 msgid "GntGf" msgstr "GntGf" -#: ../finch/plugins/gntgf.c:379 ../finch/plugins/gntgf.c:380 msgid "Toaster plugin" msgstr "Leivänpaahdin-liitännäinen" -#: ../finch/plugins/gnthistory.c:114 ../pidgin/plugins/history.c:125 #, c-format msgid "<b>Conversation with %s on %s:</b><br>" msgstr "<b>Keskustelu käyttäjän %s kanssa %s:</b><br>" -#: ../finch/plugins/gnthistory.c:172 ../pidgin/plugins/history.c:153 msgid "History Plugin Requires Logging" msgstr "Historia-liitännäinen vaatii lokiinkirjauksen käyttöä" -#: ../finch/plugins/gnthistory.c:173 ../pidgin/plugins/history.c:154 msgid "" "Logging can be enabled from Tools -> Preferences -> Logging.\n" "\n" @@ -2165,15 +1472,12 @@ "Lokien käyttöönotto pikaviesteille ja/tai ryhmäkeskusteluille ottaa käyttöön " "historiatoiminnon vastaaville keskustelutyypeille." -#: ../finch/plugins/gnthistory.c:217 msgid "GntHistory" msgstr "GntHistory" -#: ../finch/plugins/gnthistory.c:219 ../pidgin/plugins/history.c:197 msgid "Shows recently logged conversations in new conversations." msgstr "Näyttää osan edellistä keskustelua uudessa keskustelussa." -#: ../finch/plugins/gnthistory.c:220 ../pidgin/plugins/history.c:198 msgid "" "When a new conversation is opened this plugin will insert the last " "conversation into the current conversation." @@ -2181,169 +1485,113 @@ "Kun uusi keskustelu aloitetaan, tämä liitännäinen näyttää edellisen " "keskustelun keskusteluikkunassa." -#: ../finch/plugins/grouping.c:42 ../libpurple/protocols/oscar/oscar.c:740 #, c-format msgid "Online" msgstr "Linjoilla" -#: ../finch/plugins/grouping.c:44 ../finch/plugins/grouping.c:145 -#: ../libpurple/protocols/gg/gg.c:1010 -#: ../libpurple/protocols/jabber/buddy.c:2081 -#: ../libpurple/protocols/novell/novell.c:2846 -#: ../libpurple/protocols/oscar/oscar.c:829 -#: ../libpurple/protocols/oscar/oscar.c:5717 -#: ../libpurple/protocols/qq/qq.c:171 ../libpurple/protocols/qq/qq.c:178 -#: ../libpurple/protocols/qq/qq.c:293 -#: ../libpurple/protocols/yahoo/yahoo.c:3156 ../libpurple/status.c:155 -#: ../pidgin/gtkblist.c:3415 ../pidgin/gtkblist.c:3807 -#: ../pidgin/gtkdocklet.c:561 ../pidgin/gtkstatusbox.c:1090 msgid "Offline" msgstr "Poissa linjoilta" -#: ../finch/plugins/grouping.c:117 ../pidgin/gtkblist.c:3451 msgid "Online Buddies" msgstr "Tuttavat linjoilla" -#: ../finch/plugins/grouping.c:117 msgid "Offline Buddies" msgstr "Tuttavat poissa linjoilta" -#: ../finch/plugins/grouping.c:127 msgid "Online/Offline" msgstr "Linjoilla/poissa linjoilta" -#: ../finch/plugins/grouping.c:168 msgid "Meebo" msgstr "Meebo" -#: ../finch/plugins/grouping.c:217 msgid "No Grouping" msgstr "Ei ryhmittelyä" -#: ../finch/plugins/grouping.c:257 ../finch/plugins/grouping.c:258 msgid "Provides alternate buddylist grouping options." msgstr "Mahdollistaa vaihtoehtoisia tuttavien ryhmittelyvalintoja." -#: ../finch/plugins/lastlog.c:69 msgid "Lastlog" msgstr "Lastlog" #. Translator Note: The "backlog" is the conversation buffer/history. -#: ../finch/plugins/lastlog.c:100 msgid "lastlog: Searches for a substring in the backlog." msgstr "lastlog: Etsii merkkijonoa muistissa olevasta lokista." -#: ../finch/plugins/lastlog.c:122 msgid "GntLastlog" msgstr "GntLastLog" -#: ../finch/plugins/lastlog.c:124 ../finch/plugins/lastlog.c:125 msgid "Lastlog plugin." msgstr "Lastlog-liitännäinen." -#: ../libpurple/account.c:887 msgid "accounts" msgstr "käyttäjätilit" -#: ../libpurple/account.c:1063 ../libpurple/protocols/jabber/auth.c:204 -#: ../libpurple/protocols/silc/silc.c:473 msgid "Password is required to sign on." msgstr "Salasana tarvitaan kirjautumiseen." -#: ../libpurple/account.c:1097 #, c-format msgid "Enter password for %s (%s)" msgstr "Anna salasana käyttäjätilille %s (%s)" -#: ../libpurple/account.c:1104 msgid "Enter Password" msgstr "Anna salasana" -#: ../libpurple/account.c:1109 msgid "Save password" msgstr "Tallenna salasana" -#: ../libpurple/account.c:1144 ../libpurple/connection.c:118 -#: ../libpurple/connection.c:191 #, c-format msgid "Missing protocol plugin for %s" msgstr "%s-yhteyskäytäntöliitännäinen puuttuu" -#: ../libpurple/account.c:1146 ../libpurple/connection.c:121 msgid "Connection Error" msgstr "Yhteysvirhe" -#: ../libpurple/account.c:1357 ../libpurple/protocols/gg/gg.c:708 -#: ../libpurple/protocols/jabber/jabber.c:1739 msgid "New passwords do not match." msgstr "Uudet salasanat eivät täsmää." -#: ../libpurple/account.c:1370 msgid "Fill out all fields completely." msgstr "Täytä kaikki kentät kokonaan." -#: ../libpurple/account.c:1402 msgid "Original password" msgstr "Vanha salasana" -#: ../libpurple/account.c:1410 msgid "New password" msgstr "Uusi salasana" -#: ../libpurple/account.c:1418 msgid "New password (again)" msgstr "Uusi salasana (uudelleen)" -#: ../libpurple/account.c:1425 #, c-format msgid "Change password for %s" msgstr "Vaihda %s:n salasana" -#: ../libpurple/account.c:1433 msgid "Please enter your current password and your new password." msgstr "Anna nykyinen sekä uusi salasana." -#: ../libpurple/account.c:1464 #, c-format msgid "Change user information for %s" msgstr "Vaihda käyttäjätietoja - %s" -#: ../libpurple/account.c:1467 ../libpurple/protocols/toc/toc.c:1670 msgid "Set User Info" msgstr "Aseta käyttäjätiedot" -#: ../libpurple/account.c:1938 ../libpurple/protocols/gg/gg.c:1019 -#: ../libpurple/protocols/jabber/buddy.c:812 -#: ../libpurple/protocols/jabber/buddy.c:2077 -#: ../libpurple/protocols/jabber/buddy.c:2094 -#: ../libpurple/protocols/novell/novell.c:2849 -#: ../libpurple/protocols/qq/qq.c:233 ../pidgin/gtkft.c:166 msgid "Unknown" msgstr "Tuntematon" -#: ../libpurple/blist.c:521 ../libpurple/blist.c:1348 -#: ../libpurple/blist.c:1558 ../libpurple/protocols/jabber/roster.c:69 -#: ../libpurple/protocols/myspace/myspace.c:3442 ../pidgin/gtkblist.c:6317 -#: ../pidgin/plugins/gevolution/gevo-util.c:67 -#: ../pidgin/plugins/gevolution/gevolution.c:96 msgid "Buddies" msgstr "Tuttavat" -#: ../libpurple/blist.c:548 msgid "buddy list" msgstr "tuttavat" -#: ../libpurple/certificate.c:558 msgid "(DOES NOT MATCH)" msgstr "(EI TÄSMÄÄ)" #. Make messages -#: ../libpurple/certificate.c:562 #, c-format msgid "%s has presented the following certificate for just-this-once use:" msgstr "%s on esittänyt seuraavan varmenteen vain tätä kertaa varten:" -#: ../libpurple/certificate.c:563 #, c-format msgid "" "Common name: %s %s\n" @@ -2353,53 +1601,40 @@ "Sormenjälki (SHA1): %s" #. TODO: Find what the handle ought to be -#: ../libpurple/certificate.c:568 msgid "Single-use Certificate Verification" msgstr "Kertakäyttöisen varmenteen tarkistus" #. Scheme name #. Pool name -#: ../libpurple/certificate.c:894 msgid "Certificate Authorities" msgstr "Varmentajat" #. Scheme name #. Pool name -#: ../libpurple/certificate.c:1062 msgid "SSL Peers Cache" msgstr "SSL Peers -välimuisti" #. Make messages -#: ../libpurple/certificate.c:1193 #, c-format msgid "Accept certificate for %s?" msgstr "Hyväksy varmenne kohteelle %s?" #. TODO: Find what the handle ought to be -#: ../libpurple/certificate.c:1199 msgid "SSL Certificate Verification" msgstr "SSL-varmenteen tarkistus" #. Number of actions -#: ../libpurple/certificate.c:1208 msgid "Accept" msgstr "Hyväksy" -#: ../libpurple/certificate.c:1209 ../libpurple/protocols/qq/buddy_opt.c:214 -#: ../libpurple/protocols/qq/group_im.c:144 -#: ../libpurple/protocols/qq/group_opt.c:103 -#: ../libpurple/protocols/qq/sys_msg.c:91 -#: ../libpurple/protocols/qq/sys_msg.c:249 msgid "Reject" msgstr "Kieltäydy" -#: ../libpurple/certificate.c:1210 msgid "_View Certificate..." msgstr "_Näytä varmenne..." #. Prompt the user to authenticate the certificate #. vrq will be completed by user_auth -#: ../libpurple/certificate.c:1311 #, c-format msgid "" "The certificate presented by \"%s\" is self-signed. It cannot be " @@ -2408,7 +1643,6 @@ "Kohteen \"%s\" esittämä varmenne on itseallekirjoitettu. Sitä ei voida " "automaattisesti tarkistaa." -#: ../libpurple/certificate.c:1329 #, c-format msgid "The certificate chain presented for %s is not valid." msgstr "Kohteelle %s esitetty varmenneketju ei ole kelvollinen." @@ -2418,16 +1652,13 @@ #. stifle it. #. TODO: Probably wrong. #. TODO: Probably wrong -#: ../libpurple/certificate.c:1337 ../libpurple/certificate.c:1407 msgid "SSL Certificate Error" msgstr "SSL-varmennevirhe" -#: ../libpurple/certificate.c:1338 msgid "Invalid certificate chain" msgstr "Epäkelpo varmenneketju" #. vrq will be completed by user_auth -#: ../libpurple/certificate.c:1359 msgid "" "You have no database of root certificates, so this certificate cannot be " "validated." @@ -2435,12 +1666,10 @@ "Juurivarmennetietokantaa ei ole, joten tätä varmennetta ei voi kelpuuttaa." #. vrq will be completed by user_auth -#: ../libpurple/certificate.c:1382 msgid "" "The root certificate this one claims to be issued by is unknown to Pidgin." msgstr "Tämän varmenteen myöntäjän juurivarmenne on tuntematon Pidginille." -#: ../libpurple/certificate.c:1399 #, c-format msgid "" "The certificate chain presented by %s does not have a valid digital " @@ -2450,7 +1679,6 @@ "Kohteen %s esittämällä varmenneketjulla ei ole kelvollista digitaalista " "allekirjoitusta varmentajalta jolta se väittää allekirjoituksen olevan." -#: ../libpurple/certificate.c:1408 msgid "Invalid certificate authority signature" msgstr "Epäkelpo varmentajan allekirjoitus" @@ -2458,7 +1686,6 @@ #. TODO: Provide the user with more guidance about why he is #. being prompted #. vrq will be completed by user_auth -#: ../libpurple/certificate.c:1434 #, c-format msgid "" "The certificate presented by \"%s\" claims to be from \"%s\" instead. This " @@ -2468,7 +1695,6 @@ "saattaa tarkoittaa ettet ole yhdistämässä siihen palveluun johon luulet." #. Make messages -#: ../libpurple/certificate.c:1896 #, c-format msgid "" "Common name: %s\n" @@ -2486,127 +1712,94 @@ "Vanhenemispäivä: %s\n" #. TODO: Find what the handle ought to be -#: ../libpurple/certificate.c:1905 msgid "Certificate Information" msgstr "Varmennetiedot" -#: ../libpurple/connection.c:120 msgid "Registration Error" msgstr "Rekisteröintivirhe" -#: ../libpurple/connection.c:193 msgid "Unregistration Error" msgstr "Rekisteröinnin poistamisen virhe" -#: ../libpurple/connection.c:347 #, c-format msgid "+++ %s signed on" msgstr "+++ %s kirjautui sisään" -#: ../libpurple/connection.c:377 #, c-format msgid "+++ %s signed off" msgstr "+++ %s kirjautui ulos" -#: ../libpurple/connection.c:530 ../libpurple/plugin.c:277 -#: ../libpurple/protocols/jabber/buddy.c:2397 -#: ../libpurple/protocols/msn/servconn.c:141 -#: ../libpurple/protocols/msn/session.c:377 -#: ../libpurple/protocols/msnp9/servconn.c:139 -#: ../libpurple/protocols/msnp9/session.c:329 -#: ../libpurple/protocols/oscar/family_chatnav.c:63 msgid "Unknown error" msgstr "Tuntematon virhe" -#: ../libpurple/conversation.c:170 msgid "Unable to send message: The message is too large." msgstr "Viestiä ei voi lähettää: viesti on liian suuri." -#: ../libpurple/conversation.c:173 ../libpurple/conversation.c:186 #, c-format msgid "Unable to send message to %s." msgstr "Viestiä ei voi lähettää käyttäjälle %s." -#: ../libpurple/conversation.c:174 msgid "The message is too large." msgstr "Viesti on liian suuri." -#: ../libpurple/conversation.c:183 ../libpurple/protocols/bonjour/jabber.c:294 -#: ../libpurple/protocols/bonjour/jabber.c:337 msgid "Unable to send message." msgstr "Viestiä ei voi lähettää." -#: ../libpurple/conversation.c:1231 msgid "Send Message" msgstr "Lähetä viesti" -#: ../libpurple/conversation.c:1234 msgid "_Send Message" msgstr "_Lähetä viesti" -#: ../libpurple/conversation.c:1640 #, c-format msgid "%s entered the room." msgstr "%s saapui huoneeseen." -#: ../libpurple/conversation.c:1643 #, c-format msgid "%s [<I>%s</I>] entered the room." msgstr "%s [<I>%s</I>] saapui huoneeseen." -#: ../libpurple/conversation.c:1753 #, c-format msgid "You are now known as %s" msgstr "Olet nyt nimeltäsi %s" -#: ../libpurple/conversation.c:1773 #, c-format msgid "%s is now known as %s" msgstr "%s on nyt nimeltään %s" -#: ../libpurple/conversation.c:1848 #, c-format msgid "%s left the room." msgstr "%s poistui huoneesta." -#: ../libpurple/conversation.c:1851 #, c-format msgid "%s left the room (%s)." msgstr "%s poistui huoneesta (%s)." -#: ../libpurple/dbus-server.c:586 #, c-format msgid "Failed to get connection: %s" msgstr "Yhteyden saaminen epäonnistui: %s" # c-format -#: ../libpurple/dbus-server.c:598 #, c-format msgid "Failed to get name: %s" msgstr "Nimen saaminen epäonnistui: %s" -#: ../libpurple/dbus-server.c:612 #, c-format msgid "Failed to get serv name: %s" msgstr "Palvelinnimen saaminen epäonnistui: %s" -#: ../libpurple/dbus-server.h:86 msgid "Purple's D-BUS server is not running for the reason listed below" msgstr "Purplen D-BUS-palvelin ei ole käynnissä alla mainitusta syystä" -#: ../libpurple/desktopitem.c:287 ../libpurple/desktopitem.c:878 msgid "No name" msgstr "Ei nimeä" -#: ../libpurple/dnsquery.c:532 msgid "Unable to create new resolver process\n" msgstr "Selvitysprosessin luominen epäonnistui\n" -#: ../libpurple/dnsquery.c:537 msgid "Unable to send request to resolver process\n" msgstr "Pyyntöä ei voi lähettää selvitysprosessille\n" -#: ../libpurple/dnsquery.c:570 ../libpurple/dnsquery.c:719 #, c-format msgid "" "Error resolving %s:\n" @@ -2615,13 +1808,10 @@ "Virhe selvitettäessä %s:\n" "%s" -#: ../libpurple/dnsquery.c:573 ../libpurple/dnsquery.c:733 -#: ../libpurple/dnsquery.c:851 #, c-format msgid "Error resolving %s: %d" msgstr "Virhe selvitettäessä %s: %d" -#: ../libpurple/dnsquery.c:595 #, c-format msgid "" "Error reading from resolver process:\n" @@ -2630,21 +1820,17 @@ "Virhe luettaessa selvitysprosessista:\n" "%s" -#: ../libpurple/dnsquery.c:599 #, c-format msgid "EOF while reading from resolver process" msgstr "EOF luettaessa selvitysprosessista" -#: ../libpurple/dnsquery.c:783 #, c-format msgid "Thread creation failure: %s" msgstr "Säikeen luonti epäonnistui: %s" -#: ../libpurple/dnsquery.c:784 msgid "Unknown reason" msgstr "Tuntematon syy" -#: ../libpurple/ft.c:210 #, c-format msgid "" "Error reading %s: \n" @@ -2653,7 +1839,6 @@ "Virhe luettaessa %s: \n" "%s.\n" -#: ../libpurple/ft.c:214 #, c-format msgid "" "Error writing %s: \n" @@ -2662,7 +1847,6 @@ "Virhe kirjoitettaessa %s: \n" "%s.\n" -#: ../libpurple/ft.c:218 #, c-format msgid "" "Error accessing %s: \n" @@ -2671,39 +1855,31 @@ "Virhe käytettäessä tiedostoa %s: \n" "%s.\n" -#: ../libpurple/ft.c:254 msgid "Directory is not writable." msgstr "Kansioon ei ole kirjoitusoikeuksia." -#: ../libpurple/ft.c:269 msgid "Cannot send a file of 0 bytes." msgstr "Ei voi lähettää tiedostoa, jonka koko on 0 tavua." -#: ../libpurple/ft.c:279 msgid "Cannot send a directory." msgstr "Kansiota ei voi lähettää." -#: ../libpurple/ft.c:288 #, c-format msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n" msgstr "%s ei ole tavallinen tiedosto. Ei suostuta ylikirjoittamaan sitä.\n" -#: ../libpurple/ft.c:348 #, c-format msgid "%s wants to send you %s (%s)" msgstr "%s on lähettämässä sinulle %s (%s)" -#: ../libpurple/ft.c:355 #, c-format msgid "%s wants to send you a file" msgstr "Käyttäjä %s tahtoo lähettää sinulle tiedoston" -#: ../libpurple/ft.c:398 #, c-format msgid "Accept file transfer request from %s?" msgstr "Hyväksytäänkö tiedostonsiirtopyyntö käyttäjältä %s?" -#: ../libpurple/ft.c:402 #, c-format msgid "" "A file is available for download from:\n" @@ -2714,135 +1890,105 @@ "Etäkone: %s\n" "Portti: %d" -#: ../libpurple/ft.c:437 #, c-format msgid "%s is offering to send file %s" msgstr "%s tarjoaa tiedostoa %s" -#: ../libpurple/ft.c:490 #, c-format msgid "%s is not a valid filename.\n" msgstr "%s ei ole kelvollinen tiedostonimi.\n" -#: ../libpurple/ft.c:511 #, c-format msgid "Offering to send %s to %s" msgstr "Tarjotaan tiedostoa %s lähetettäväksi käyttäjälle %s." -#: ../libpurple/ft.c:523 #, c-format msgid "Starting transfer of %s from %s" msgstr "Aloitetaan tiedoston %s siirto käyttäjältä %s" -#: ../libpurple/ft.c:700 #, c-format msgid "Transfer of file %s complete" msgstr "Tiedoston %s siirto valmis" -#: ../libpurple/ft.c:703 #, c-format msgid "File transfer complete" msgstr "Tiedostonsiirto valmis" -#: ../libpurple/ft.c:1138 #, c-format msgid "You canceled the transfer of %s" msgstr "Peruutit tiedoston %s siirron" -#: ../libpurple/ft.c:1143 #, c-format msgid "File transfer cancelled" msgstr "Tiedostonsiirto peruutettu" -#: ../libpurple/ft.c:1201 #, c-format msgid "%s canceled the transfer of %s" msgstr "%s peruutti tiedoston %s siirron" -#: ../libpurple/ft.c:1206 #, c-format msgid "%s canceled the file transfer" msgstr "Käyttäjä %s peruutti tiedostonsiirron" -#: ../libpurple/ft.c:1263 #, c-format msgid "File transfer to %s failed." msgstr "Tiedostonsiirto käyttäjälle %s epäonnistui." -#: ../libpurple/ft.c:1265 #, c-format msgid "File transfer from %s failed." msgstr "Tiedostonsiirto käyttäjältä %s epäonnistui." -#: ../libpurple/gconf/purple.schemas.in.h:1 msgid "Run the command in a terminal" msgstr "Suorita komento päätteessä" -#: ../libpurple/gconf/purple.schemas.in.h:2 msgid "The command used to handle \"aim\" URLs, if enabled." msgstr "Komento jota käytetään \"aim\"-URLien käsittelyyn, jos käytössä." -#: ../libpurple/gconf/purple.schemas.in.h:3 msgid "The command used to handle \"gg\" URLs, if enabled." msgstr "Komento jota käytetään \"gg\"-URLien käsittelyyn, jos käytössä." -#: ../libpurple/gconf/purple.schemas.in.h:4 msgid "The command used to handle \"icq\" URLs, if enabled." msgstr "Komento jota käytetään \"icq\"-URLien käsittelyyn, jos käytössä." -#: ../libpurple/gconf/purple.schemas.in.h:5 msgid "The command used to handle \"irc\" URLs, if enabled." msgstr "Komento jota käytetään \"irc\"-URLien käsittelyyn, jos käytössä." -#: ../libpurple/gconf/purple.schemas.in.h:6 msgid "The command used to handle \"msnim\" URLs, if enabled." msgstr "Komento jota käytetään \"msnim\"-URLien käsittelyyn, jos käytössä." -#: ../libpurple/gconf/purple.schemas.in.h:7 msgid "The command used to handle \"sip\" URLs, if enabled." msgstr "Komento jota käytetään \"sip\"-URLien käsittelyyn, jos käytössä." -#: ../libpurple/gconf/purple.schemas.in.h:8 msgid "The command used to handle \"xmpp\" URLs, if enabled." msgstr "Komento jota käytetään \"xmpp\"-URLien käsittelyyn, jos käytössä." -#: ../libpurple/gconf/purple.schemas.in.h:9 msgid "The command used to handle \"ymsgr\" URLs, if enabled." msgstr "Komento jota käytetään \"ymsgr\"-URLien käsittelyyn, jos käytössä." -#: ../libpurple/gconf/purple.schemas.in.h:10 msgid "The handler for \"aim\" URLs" msgstr "\"aim\"-URLien käsittelijä" -#: ../libpurple/gconf/purple.schemas.in.h:11 msgid "The handler for \"gg\" URLs" msgstr "\"gg\"-URLien käsittelijä" -#: ../libpurple/gconf/purple.schemas.in.h:12 msgid "The handler for \"icq\" URLs" msgstr "\"icq\"-URLien käsittelijä" -#: ../libpurple/gconf/purple.schemas.in.h:13 msgid "The handler for \"irc\" URLs" msgstr "\"irc\"-URLien käsittelijä" -#: ../libpurple/gconf/purple.schemas.in.h:14 msgid "The handler for \"msnim\" URLs" msgstr "\"msnim\"-URLien käsittelijä" -#: ../libpurple/gconf/purple.schemas.in.h:15 msgid "The handler for \"sip\" URLs" msgstr "\"sip\"-URLien käsittelijä" -#: ../libpurple/gconf/purple.schemas.in.h:16 msgid "The handler for \"xmpp\" URLs" msgstr "\"xmpp\"-URLien käsittelijä" -#: ../libpurple/gconf/purple.schemas.in.h:17 msgid "The handler for \"ymsgr\" URLs" msgstr "\"ymsgr\"-URLien käsittelijä" -#: ../libpurple/gconf/purple.schemas.in.h:18 msgid "" "True if the command specified in the \"command\" key should handle \"aim\" " "URLs." @@ -2850,7 +1996,6 @@ "Tosi, jos \"komento\"-avaimessa määriteltyä komentoa tulisi käyttää \"aim\"-" "URLien käsittelyyn." -#: ../libpurple/gconf/purple.schemas.in.h:19 msgid "" "True if the command specified in the \"command\" key should handle \"gg\" " "URLs." @@ -2858,7 +2003,6 @@ "Tosi, jos \"komento\"-avaimessa määriteltyä komentoa tulisi käyttää \"gg\"-" "URLien käsittelyyn." -#: ../libpurple/gconf/purple.schemas.in.h:20 msgid "" "True if the command specified in the \"command\" key should handle \"icq\" " "URLs." @@ -2866,7 +2010,6 @@ "Tosi, jos \"komento\"-avaimessa määriteltyä komentoa tulisi käyttää \"icq\"-" "URLien käsittelyyn." -#: ../libpurple/gconf/purple.schemas.in.h:21 msgid "" "True if the command specified in the \"command\" key should handle \"irc\" " "URLs." @@ -2874,7 +2017,6 @@ "Tosi, jos \"komento\"-avaimessa määriteltyä komentoa tulisi käyttää \"irc\"-" "URLien käsittelyyn." -#: ../libpurple/gconf/purple.schemas.in.h:22 msgid "" "True if the command specified in the \"command\" key should handle \"msnim\" " "URLs." @@ -2882,7 +2024,6 @@ "Tosi, jos \"komento\"-avaimessa määriteltyä komentoa tulisi käyttää \"msnim" "\"-URLien käsittelyyn." -#: ../libpurple/gconf/purple.schemas.in.h:23 msgid "" "True if the command specified in the \"command\" key should handle \"sip\" " "URLs." @@ -2890,7 +2031,6 @@ "Tosi, jos \"komento\"-avaimessa määriteltyä komentoa tulisi käyttää \"sip\"-" "URLien käsittelyyn." -#: ../libpurple/gconf/purple.schemas.in.h:24 msgid "" "True if the command specified in the \"command\" key should handle \"xmpp\" " "URLs." @@ -2898,7 +2038,6 @@ "Tosi, jos \"komento\"-avaimessa määriteltyä komentoa tulisi käyttää \"xmpp\"-" "URLien käsittelyyn." -#: ../libpurple/gconf/purple.schemas.in.h:25 msgid "" "True if the command specified in the \"command\" key should handle \"ymsgr\" " "URLs." @@ -2906,7 +2045,6 @@ "Tosi, jos \"komento\"-avaimessa määriteltyä komentoa tulisi käyttää \"ymsgr" "\"-URLien käsittelyyn." -#: ../libpurple/gconf/purple.schemas.in.h:26 msgid "" "True if the command used to handle this type of URL should be run in a " "terminal." @@ -2914,63 +2052,48 @@ "Tosi, jos tämäntyyppisen URL:n käsittelyyn käytettävä komento tulisi ajaa " "päätteessä." -#: ../libpurple/gconf/purple.schemas.in.h:27 msgid "Whether the specified command should handle \"aim\" URLs" msgstr "Määritellyn komennon tulee käsitellä \"aim\"-URLt" -#: ../libpurple/gconf/purple.schemas.in.h:28 msgid "Whether the specified command should handle \"gg\" URLs" msgstr "Määritellyn komennon tulee käsitellä \"gg\"-URLt" -#: ../libpurple/gconf/purple.schemas.in.h:29 msgid "Whether the specified command should handle \"icq\" URLs" msgstr "Määritellyn komennon tulee käsitellä \"icq\"-URLt" -#: ../libpurple/gconf/purple.schemas.in.h:30 msgid "Whether the specified command should handle \"irc\" URLs" msgstr "Määritellyn komennon tulee käsitellä \"irc\"-URLt" -#: ../libpurple/gconf/purple.schemas.in.h:31 msgid "Whether the specified command should handle \"msnim\" URLs" msgstr "Määritellyn komennon tulee käsitellä \"msnim\"-URLt" -#: ../libpurple/gconf/purple.schemas.in.h:32 msgid "Whether the specified command should handle \"sip\" URLs" msgstr "Määritellyn komennon tulee käsitellä \"sip\"-URLt" -#: ../libpurple/gconf/purple.schemas.in.h:33 msgid "Whether the specified command should handle \"xmpp\" URLs" msgstr "Määritellyn komennon tulee käsitellä \"xmpp\"-URLt" -#: ../libpurple/gconf/purple.schemas.in.h:34 msgid "Whether the specified command should handle \"ymsgr\" URLs" msgstr "Määritellyn komennon tulee käsitellä \"ymsgr\"-URLt" -#: ../libpurple/log.c:183 msgid "<b><font color=\"red\">The logger has no read function</font></b>" msgstr "<b><font color=\"red\">Lokilla ei ole read-funktiota</font></b>" -#: ../libpurple/log.c:597 msgid "HTML" msgstr "HTML" -#: ../libpurple/log.c:611 msgid "Plain text" msgstr "Teksti" -#: ../libpurple/log.c:625 msgid "Old flat format" msgstr "Vanha tasainen muoto" -#: ../libpurple/log.c:850 msgid "Logging of this conversation failed." msgstr "Tämän keskustelun kirjaaminen lokiin epäonnistui." -#: ../libpurple/log.c:1293 msgid "XML" msgstr "XML" -#: ../libpurple/log.c:1377 #, c-format msgid "" "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" @@ -2979,7 +2102,6 @@ "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <" "AUTOMAATTIVASTAUS>:</b></font> %s<br/>\n" -#: ../libpurple/log.c:1379 #, c-format msgid "" "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" @@ -2988,45 +2110,39 @@ "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <" "AUTOMAATTIVASTAUS>:</b></font> %s<br/>\n" -#: ../libpurple/log.c:1437 ../libpurple/log.c:1570 msgid "<font color=\"red\"><b>Unable to find log path!</b></font>" msgstr "<font color=\"red\"><b>Lokin hakemistopolkua ei löydy!</b></font>" -#: ../libpurple/log.c:1449 ../libpurple/log.c:1579 #, c-format msgid "<font color=\"red\"><b>Could not read file: %s</b></font>" msgstr "<font color=\"red\"><b>Ei voi lukea tiedostoa: %s</b></font>" -#: ../libpurple/log.c:1511 #, c-format msgid "(%s) %s <AUTO-REPLY>: %s\n" msgstr "(%s) %s <AUTOMAATTIVASTAUS>: %s\n" -#: ../libpurple/plugin.c:360 #, c-format msgid "You are using %s, but this plugin requires %s." msgstr "Käytät: %s, mutta tämä liitännäinen vaatii: %s." -#: ../libpurple/plugin.c:375 #, c-format msgid "This plugin has not defined an ID." msgstr "Tämä liitännäinen ei ole määritellyt tunnistetta (ID)." -#: ../libpurple/plugin.c:443 #, c-format msgid "Plugin magic mismatch %d (need %d)" msgstr "Liitännäistaikojen ristiriita %d (tarvitaan %d)" -#: ../libpurple/plugin.c:460 #, c-format msgid "ABI version mismatch %d.%d.x (need %d.%d.x)" msgstr "ABI-version ristiriita %d.%d.x (tarvitaan %d.%d.x)" -#: ../libpurple/plugin.c:477 -msgid "Plugin does not implement all required functions" -msgstr "Liitännäinen ei toteuta kaikkia tarvittavia toimintoja" - -#: ../libpurple/plugin.c:542 +msgid "" +"Plugin does not implement all required functions (list_icon, login and close)" +msgstr "" +"Liitännäinen ei toteuta kaikkia tarvittavia toimintoja (list_icon, login ja " +"close" + #, c-format msgid "" "The required plugin %s was not found. Please install this plugin and try " @@ -3034,88 +2150,62 @@ msgstr "" "Vaadittu liitännäinen %s puuttuu. Ole hyvä ja asenna se ja yritä uudelleen." -#: ../libpurple/plugin.c:547 msgid "Unable to load the plugin" msgstr "Liitännäistä ei kyetty lataamaan" -#: ../libpurple/plugin.c:569 #, c-format msgid "The required plugin %s was unable to load." msgstr "Vaadittu liitännäinen %s ei latautunut." -#: ../libpurple/plugin.c:573 msgid "Unable to load your plugin." msgstr "Liitännäistä ei kyetty lataamaan" -#: ../libpurple/plugin.c:663 #, c-format msgid "%s requires %s, but it failed to unload." msgstr "" "%s vaatii liitännäisen %s, mutta sitä ei onnistuttu poistamaan käytöstä" -#: ../libpurple/plugins/autoaccept.c:23 msgid "Autoaccept" msgstr "Automaattihyväksyminen" -#: ../libpurple/plugins/autoaccept.c:25 ../libpurple/plugins/autoaccept.c:26 msgid "Auto-accept file transfer requests from selected users." msgstr "" "Hyväksytäänkö tiedostonsiirtopyynnöt valituilta käyttäjiltä automaattisesti." -#: ../libpurple/plugins/autoaccept.c:80 #, c-format msgid "Autoaccepted file transfer of \"%s\" from \"%s\" completed." msgstr "" "Automaattisesti hyväksytty tiedoston \"%s\" siirto käyttäjältä \"%s\" valmis." -#: ../libpurple/plugins/autoaccept.c:82 msgid "Autoaccept complete" msgstr "Valmis (automaattinen hyväksyntä)" -#: ../libpurple/plugins/autoaccept.c:171 #, c-format msgid "When a file-transfer request arrives from %s" msgstr "Kun tiedostonsiirtopyyntö saapuu käyttäjältä %s" -#: ../libpurple/plugins/autoaccept.c:173 msgid "Set Autoaccept Setting" msgstr "Aseta automaattihyväksynnän asetus" -#: ../libpurple/plugins/autoaccept.c:175 msgid "_Save" msgstr "_Tallenna" -#: ../libpurple/plugins/autoaccept.c:176 ../libpurple/plugins/idle.c:170 -#: ../libpurple/plugins/idle.c:204 ../libpurple/plugins/idle.c:230 -#: ../libpurple/protocols/oscar/oscar.c:1496 -#: ../libpurple/protocols/oscar/oscar.c:2288 -#: ../libpurple/protocols/oscar/oscar.c:2336 -#: ../libpurple/protocols/oscar/oscar.c:5999 -#: ../libpurple/protocols/oscar/oscar.c:6054 -#: ../libpurple/protocols/oscar/oscar.c:6281 -#: ../libpurple/protocols/oscar/oscar.c:6351 ../libpurple/request.h:1401 -#: ../libpurple/request.h:1411 msgid "_Cancel" msgstr "_Peru" -#: ../libpurple/plugins/autoaccept.c:179 msgid "Ask" msgstr "Kysy" -#: ../libpurple/plugins/autoaccept.c:180 msgid "Auto Accept" msgstr "Hyväksy automaattisesti" -#: ../libpurple/plugins/autoaccept.c:181 msgid "Auto Reject" msgstr "Hylkää automaattisesti" -#: ../libpurple/plugins/autoaccept.c:196 msgid "Autoaccept File Transfers..." msgstr "Tiedostonsiirtojen automaattihyväksyminen..." #. XXX: Is there a better way than this? There really should be. -#: ../libpurple/plugins/autoaccept.c:226 msgid "" "Path to save the files in\n" "(Please provide the full path)" @@ -3123,11 +2213,9 @@ "Polku johon tiedostot tallennetaan\n" "(Anna koko polku)" -#: ../libpurple/plugins/autoaccept.c:231 msgid "Automatically reject from users not in buddy list" msgstr "Hylkää automaattisesti käyttäjiltä jotka eivät ole tuttavia" -#: ../libpurple/plugins/autoaccept.c:235 msgid "" "Notify with a popup when an autoaccepted file transfer is complete\n" "(only when there's no conversation with the sender)" @@ -3136,18 +2224,15 @@ "valmis\n" "(vain kun keskustelua lähettäjän kanssa ei avoinna)" -#: ../libpurple/plugins/buddynote.c:46 ../libpurple/protocols/msn/msn.c:1830 -#: ../libpurple/protocols/msn/msn.c:1860 -#: ../libpurple/protocols/msnp9/msn.c:1671 -#: ../libpurple/protocols/msnp9/msn.c:1701 +msgid "Create a new directory for each user" +msgstr "Luo uusi hakemisto jokaiselle käyttäjälle" + msgid "Notes" msgstr "Merkinnät" -#: ../libpurple/plugins/buddynote.c:47 msgid "Enter your notes below..." msgstr "Kirjoita merkintäsi alle..." -#: ../libpurple/plugins/buddynote.c:65 msgid "Edit Notes..." msgstr "Muokkaa merkintöjä..." @@ -3159,18 +2244,15 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/buddynote.c:90 ../pidgin/plugins/gtkbuddynote.c:74 msgid "Buddy Notes" msgstr "Tuttavamerkinnät" #. *< name #. *< version -#: ../libpurple/plugins/buddynote.c:92 ../pidgin/plugins/gtkbuddynote.c:76 msgid "Store notes on particular buddies." msgstr "Tallenna merkintöjä tiettyjen tuttavien kohdalle." #. *< summary -#: ../libpurple/plugins/buddynote.c:93 ../pidgin/plugins/gtkbuddynote.c:77 msgid "Adds the option to store notes for buddies on your buddy list." msgstr "Lisää valinnan merkintöjen tallentamiseen tuttaviesi kohdalle." @@ -3180,7 +2262,6 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/ciphertest.c:264 msgid "Cipher Test" msgstr "Salaustesti" @@ -3188,7 +2269,6 @@ #. *< version #. * summary #. * description -#: ../libpurple/plugins/ciphertest.c:267 ../libpurple/plugins/ciphertest.c:269 msgid "Tests the ciphers that ship with libpurple." msgstr "Testaa libpurplen mukana tulevat salausmenetelmät." @@ -3198,7 +2278,6 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/dbus-example.c:155 msgid "DBus Example" msgstr "DBus-esimerkki" @@ -3206,8 +2285,6 @@ #. *< version #. * summary #. * description -#: ../libpurple/plugins/dbus-example.c:158 -#: ../libpurple/plugins/dbus-example.c:160 msgid "DBus Plugin Example" msgstr "DBus-esimerkkiliitännäinen" @@ -3217,7 +2294,6 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/filectl.c:248 msgid "File Control" msgstr "Komentotiedostohallinta" @@ -3225,50 +2301,38 @@ #. *< version #. * summary #. * description -#: ../libpurple/plugins/filectl.c:251 ../libpurple/plugins/filectl.c:253 msgid "Allows control by entering commands in a file." msgstr "Mahdollistaa hallinnan komentotiedostolla." -#: ../libpurple/plugins/idle.c:158 ../libpurple/plugins/idle.c:218 msgid "Minutes" msgstr "Minuuttia" #. This is a cultural reference. Dy'er Mak'er is a song by Led Zeppelin. #. If that doesn't translate well into your language, drop the 's before translating. -#: ../libpurple/plugins/idle.c:165 ../libpurple/plugins/idle.c:199 -#: ../libpurple/plugins/idle.c:225 ../libpurple/plugins/idle.c:318 msgid "I'dle Mak'er" msgstr "Joutenoloajan säätö" -#: ../libpurple/plugins/idle.c:166 ../libpurple/plugins/idle.c:258 msgid "Set Account Idle Time" msgstr "Aseta tilin joutenoloaika" -#: ../libpurple/plugins/idle.c:169 ../libpurple/plugins/idle.c:229 msgid "_Set" msgstr "_Aseta" -#: ../libpurple/plugins/idle.c:184 msgid "None of your accounts are idle." msgstr "Yksikään käyttäjätileistäsi ei ole jouten." -#: ../libpurple/plugins/idle.c:200 ../libpurple/plugins/idle.c:262 msgid "Unset Account Idle Time" msgstr "Poista tilin joutenoloajan asetus" -#: ../libpurple/plugins/idle.c:203 msgid "_Unset" msgstr "_Poista asetus" -#: ../libpurple/plugins/idle.c:226 ../libpurple/plugins/idle.c:266 msgid "Set Idle Time for All Accounts" msgstr "Aseta joutenoloaika kaikille käyttäjätileille" -#: ../libpurple/plugins/idle.c:271 msgid "Unset Idle Time for All Idled Accounts" msgstr "Ota pois joutenoloaika kaikilta jouten olevilta tileiltä" -#: ../libpurple/plugins/idle.c:320 ../libpurple/plugins/idle.c:321 msgid "Allows you to hand-configure how long you've been idle" msgstr "Antaa sinun säätää itse kuinka kauan olet ollut jouten" @@ -3278,19 +2342,16 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/ipc-test-client.c:87 msgid "IPC Test Client" msgstr "IPC-testiasiakasohjelma" #. *< name #. *< version #. * summary -#: ../libpurple/plugins/ipc-test-client.c:90 msgid "Test plugin IPC support, as a client." msgstr "Testiliitännäinen - IPC asiakasohjelmana" #. * description -#: ../libpurple/plugins/ipc-test-client.c:92 msgid "" "Test plugin IPC support, as a client. This locates the server plugin and " "calls the commands registered." @@ -3304,31 +2365,25 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/ipc-test-server.c:74 msgid "IPC Test Server" msgstr "IPC-testipalvelin" #. *< name #. *< version #. * summary -#: ../libpurple/plugins/ipc-test-server.c:77 msgid "Test plugin IPC support, as a server." msgstr "Testiliitännäinen - IPC palvelimena" #. * description -#: ../libpurple/plugins/ipc-test-server.c:79 msgid "Test plugin IPC support, as a server. This registers the IPC commands." msgstr "Testiliitännäinen - IPC palvelimena. Tämä rekisteröi IPC-komennot." -#: ../libpurple/plugins/joinpart.c:228 msgid "Join/Part Hiding Configuration" msgstr "Liittymisen/poistumisen piilotuksen asetukset" -#: ../libpurple/plugins/joinpart.c:232 msgid "Minimum Room Size" msgstr "Huoneen minimikoko" -#: ../libpurple/plugins/joinpart.c:238 msgid "User Inactivity Timeout (in minutes)" msgstr "Käyttäjän inaktiivisuuden aikakatkaisu (minuuteissa)" @@ -3338,19 +2393,16 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/joinpart.c:269 msgid "Join/Part Hiding" msgstr "Liity/poistu piilotus" #. *< name #. *< version #. * summary -#: ../libpurple/plugins/joinpart.c:272 msgid "Hides extraneous join/part messages." msgstr "Piilottaa ylimääräiset liittymis/poistumisviestit." #. * description -#: ../libpurple/plugins/joinpart.c:274 msgid "" "This plugin hides join/part messages in large rooms, except for those users " "actively taking part in a conversation." @@ -3362,34 +2414,25 @@ #. * offset is way off. The user should never really see it, but #. * it's here just in case. The parens are to make it clear it's #. * not a real timezone. -#: ../libpurple/plugins/log_reader.c:499 msgid "(UTC)" msgstr "(UTC)" -#: ../libpurple/plugins/log_reader.c:1554 msgid "User is offline." msgstr "Käyttäjä on poissa linjoilta." -#: ../libpurple/plugins/log_reader.c:1560 msgid "Auto-response sent:" msgstr "Automaattinen vastaus lähetetty:" -#: ../libpurple/plugins/log_reader.c:1570 -#: ../libpurple/plugins/log_reader.c:1573 -#: ../libpurple/plugins/statenotify.c:84 #, c-format msgid "%s has signed off." msgstr "%s on kirjautunut ulos." -#: ../libpurple/plugins/log_reader.c:1587 msgid "One or more messages may have been undeliverable." msgstr "Yksi tai useampi viesti on saattanut jäädä lähettämättä." -#: ../libpurple/plugins/log_reader.c:1597 msgid "You were disconnected from the server." msgstr "Yhteys palvelimeen on katkennut." -#: ../libpurple/plugins/log_reader.c:1605 msgid "" "You are currently disconnected. Messages will not be received unless you are " "logged in." @@ -3397,85 +2440,65 @@ "Yhteyttä ei tällä hetkellä ole. Viestejä ei vastaanoteta ellet olet " "kirjautuneena sisään." -#: ../libpurple/plugins/log_reader.c:1620 msgid "Message could not be sent because the maximum length was exceeded." msgstr "Viestiä ei voi lähettää koska suurin viestin koko ylitettiin." -#: ../libpurple/plugins/log_reader.c:1625 msgid "Message could not be sent." msgstr "Viestiäsi ei voi lähettää." #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2699 -#: ../libpurple/plugins/log_reader.c:2855 msgid "Adium" msgstr "Adium" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2712 -#: ../libpurple/plugins/log_reader.c:2860 msgid "Fire" msgstr "Fire" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2724 -#: ../libpurple/plugins/log_reader.c:2864 msgid "Messenger Plus!" msgstr "Messenger Plus!" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2738 -#: ../libpurple/plugins/log_reader.c:2869 msgid "QIP" msgstr "QIP" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2750 -#: ../libpurple/plugins/log_reader.c:2873 msgid "MSN Messenger" msgstr "MSN Messenger" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2762 -#: ../libpurple/plugins/log_reader.c:2877 msgid "Trillian" msgstr "Trillian" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2774 -#: ../libpurple/plugins/log_reader.c:2881 msgid "aMSN" msgstr "aMSN" #. Add general preferences. -#: ../libpurple/plugins/log_reader.c:2837 msgid "General Log Reading Configuration" msgstr "Yleiset lokikatselimen asetukset" -#: ../libpurple/plugins/log_reader.c:2841 msgid "Fast size calculations" msgstr "Nopeat koon laskemiset" -#: ../libpurple/plugins/log_reader.c:2845 msgid "Use name heuristics" msgstr "Käytä nimiheuristiikkaa" #. Add Log Directory preferences. -#: ../libpurple/plugins/log_reader.c:2851 msgid "Log Directory" msgstr "Lokihakemisto" @@ -3485,19 +2508,16 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/log_reader.c:2910 msgid "Log Reader" msgstr "Lokikatselin" #. *< name #. *< version #. * summary -#: ../libpurple/plugins/log_reader.c:2914 msgid "Includes other IM clients' logs in the log viewer." msgstr "Sisällyttää muiden pikaviestinohjelmien lokit lokikatselimeen." #. * description -#: ../libpurple/plugins/log_reader.c:2918 msgid "" "When viewing logs, this plugin will include logs from other IM clients. " "Currently, this includes Adium, MSN Messenger, and Trillian.\n" @@ -3511,20 +2531,15 @@ "\n" "Varoitus: Tämä liitännäinen on vielä kehitysasteella ja voi kaatua usein." -#: ../libpurple/plugins/mono/loader/mono.c:217 msgid "Mono Plugin Loader" msgstr "Mono-liitännäisen lataaja" -#: ../libpurple/plugins/mono/loader/mono.c:219 -#: ../libpurple/plugins/mono/loader/mono.c:220 msgid "Loads .NET plugins with Mono." msgstr "Lataa .NET-liitännäisiä Monon avulla." -#: ../libpurple/plugins/newline.c:57 msgid "Add new line in IMs" msgstr "Lisää rivinvaihto pikaviesteihin" -#: ../libpurple/plugins/newline.c:61 msgid "Add new line in Chats" msgstr "Lisää rivinvaihto keskusteluihin" @@ -3537,18 +2552,15 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/newline.c:104 msgid "New Line" msgstr "Rivinvaihto" #. *< name #. *< version -#: ../libpurple/plugins/newline.c:106 msgid "Prepends a newline to displayed message." msgstr "Lisää näytettävän viestin eteen rivinvaihdon." #. *< summary -#: ../libpurple/plugins/newline.c:107 msgid "" "Prepends a newline to messages so that the rest of the message appears below " "the username in the conversation window." @@ -3556,17 +2568,14 @@ "Lisää viestien eteen rivinvaihdon niin, että viesti näkyy käyttäjänimen " "alapuolella keskusteluikkunassa." -#: ../libpurple/plugins/offlinemsg.c:23 msgid "Offline Message Emulation" msgstr "Yhteydettömien viestien emulointi" -#: ../libpurple/plugins/offlinemsg.c:25 ../libpurple/plugins/offlinemsg.c:26 msgid "Save messages sent to an offline user as pounce." msgstr "" "Tallenna lähetetyt viestit poissa linjoilta olevalle käyttäjälle " "tuttavailmoittimen avulla." -#: ../libpurple/plugins/offlinemsg.c:95 msgid "" "The rest of the messages will be saved as pounce. You can edit/delete the " "pounce from the `Buddy Pounce' dialog." @@ -3574,7 +2583,6 @@ "Loput viesteistä tallennetaan ilmoittimeen. Voit muokata/poistaa sen " "\"Tuttavailmoittimet\"-valintaikkunasta." -#: ../libpurple/plugins/offlinemsg.c:156 #, c-format msgid "" "\"%s\" is currently offline. Do you want to save the rest of the messages in " @@ -3584,50 +2592,22 @@ "viesteistä tuttavailmoittimeen, ja automaattisesti lähettää ne kun \"%s\" " "kirjautuu takaisin sisään?" -#: ../libpurple/plugins/offlinemsg.c:160 msgid "Offline Message" msgstr "Yhteydetön viesti" -#: ../libpurple/plugins/offlinemsg.c:161 msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog" msgstr "" "Voit muokata/poistaa ilmoittimen \"Tuttavailmoittimet\"-valintaikkunassa" -#: ../libpurple/plugins/offlinemsg.c:165 -#: ../libpurple/protocols/msn/dialog.c:141 -#: ../libpurple/protocols/msn/msn.c:675 -#: ../libpurple/protocols/msnp9/dialog.c:133 -#: ../libpurple/protocols/msnp9/msn.c:547 -#: ../libpurple/protocols/msnp9/msn.c:563 -#: ../libpurple/protocols/novell/novell.c:1929 -#: ../libpurple/protocols/silc/buddy.c:317 -#: ../libpurple/protocols/silc/pk.c:113 ../libpurple/protocols/silc/wb.c:308 -#: ../libpurple/protocols/silc10/buddy.c:314 -#: ../libpurple/protocols/silc10/pk.c:119 -#: ../libpurple/protocols/silc10/wb.c:307 ../pidgin/gtkrequest.c:270 msgid "Yes" msgstr "Kyllä" -#: ../libpurple/plugins/offlinemsg.c:166 -#: ../libpurple/protocols/msn/dialog.c:142 -#: ../libpurple/protocols/msn/msn.c:675 -#: ../libpurple/protocols/msnp9/dialog.c:134 -#: ../libpurple/protocols/msnp9/msn.c:547 -#: ../libpurple/protocols/msnp9/msn.c:563 -#: ../libpurple/protocols/novell/novell.c:1930 -#: ../libpurple/protocols/silc/buddy.c:318 -#: ../libpurple/protocols/silc/pk.c:114 ../libpurple/protocols/silc/wb.c:309 -#: ../libpurple/protocols/silc10/buddy.c:315 -#: ../libpurple/protocols/silc10/pk.c:120 -#: ../libpurple/protocols/silc10/wb.c:308 ../pidgin/gtkrequest.c:271 msgid "No" msgstr "Ei" -#: ../libpurple/plugins/offlinemsg.c:193 msgid "Save offline messages in pounce" msgstr "Tallenna yhteydettömät viestit ilmoittimeen" -#: ../libpurple/plugins/offlinemsg.c:197 msgid "Do not ask. Always save in pounce." msgstr "Älä kysy. Tallenna aina ilmoittimeen." @@ -3637,26 +2617,21 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/perl/perl.c:601 msgid "Perl Plugin Loader" msgstr "Perl-liitännäisten lataaja" #. *< name #. *< version #. *< summary -#: ../libpurple/plugins/perl/perl.c:603 ../libpurple/plugins/perl/perl.c:604 msgid "Provides support for loading perl plugins." msgstr "Tuo mahdollisuuden ladata perl-liitännäisiä." -#: ../libpurple/plugins/psychic.c:20 msgid "Psychic Mode" msgstr "Meediotila" -#: ../libpurple/plugins/psychic.c:21 msgid "Psychic mode for incoming conversation" msgstr "Meediotila sisääntuleville keskusteluille" -#: ../libpurple/plugins/psychic.c:22 msgid "" "Causes conversation windows to appear as other users begin to message you. " "This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" @@ -3665,23 +2640,18 @@ "sinulle. Tämä toimii AIM-, ICQ-, XMPP-, Sametime- ja Yahoo!-" "yhteyskäytännöillä." -#: ../libpurple/plugins/psychic.c:72 msgid "You feel a disturbance in the force..." msgstr "Tunnet häiriön voimassa..." -#: ../libpurple/plugins/psychic.c:91 msgid "Only enable for users on the buddy list" msgstr "Salli vain tuttavaluettelossa oleville käyttäjille" -#: ../libpurple/plugins/psychic.c:96 msgid "Disable when away" msgstr "Pois käytöstä poissa ollessa" -#: ../libpurple/plugins/psychic.c:100 msgid "Display notification message in conversations" msgstr "Näytä ilmoitusviesti keskusteluissa" -#: ../libpurple/plugins/psychic.c:105 msgid "Raise psychic conversations" msgstr "Nosta meediotilan huomaamat keskustelut" @@ -3691,7 +2661,6 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/signals-test.c:753 msgid "Signals Test" msgstr "Signaalitesti" @@ -3699,8 +2668,6 @@ #. *< version #. * summary #. * description -#: ../libpurple/plugins/signals-test.c:756 -#: ../libpurple/plugins/signals-test.c:758 msgid "Test to see that all signals are working properly." msgstr "Kokeile nähdäksesi että kaikki signaalit toimivat oikein." @@ -3710,7 +2677,6 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/simple.c:37 msgid "Simple Plugin" msgstr "\"Yksinkertainen\"-liitännäinen" @@ -3718,13 +2684,10 @@ #. *< version #. * summary #. * description -#: ../libpurple/plugins/simple.c:40 ../libpurple/plugins/simple.c:42 msgid "Tests to see that most things are working." msgstr "Kokeilee että useimmat asiat toimivat." #. Scheme name -#: ../libpurple/plugins/ssl/ssl-gnutls.c:910 -#: ../libpurple/plugins/ssl/ssl-nss.c:731 msgid "X.509 Certificates" msgstr "X.509-varmenteet" @@ -3734,7 +2697,6 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/ssl/ssl-gnutls.c:994 msgid "GNUTLS" msgstr "GNUTLS" @@ -3742,8 +2704,6 @@ #. *< version #. * summary #. * description -#: ../libpurple/plugins/ssl/ssl-gnutls.c:997 -#: ../libpurple/plugins/ssl/ssl-gnutls.c:999 msgid "Provides SSL support through GNUTLS." msgstr "Tuo SSL-tuen GNUTLS:n kautta." @@ -3753,7 +2713,6 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/ssl/ssl-nss.c:816 msgid "NSS" msgstr "NSS" @@ -3761,8 +2720,6 @@ #. *< version #. * summary #. * description -#: ../libpurple/plugins/ssl/ssl-nss.c:819 -#: ../libpurple/plugins/ssl/ssl-nss.c:821 msgid "Provides SSL support through Mozilla NSS." msgstr "Tuo SSL-tuen Mozilla-NSS:n kautta." @@ -3772,7 +2729,6 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/ssl/ssl.c:94 msgid "SSL" msgstr "SSL" @@ -3780,48 +2736,38 @@ #. *< version #. * summary #. * description -#: ../libpurple/plugins/ssl/ssl.c:97 ../libpurple/plugins/ssl/ssl.c:99 msgid "Provides a wrapper around SSL support libraries." msgstr "Luo liittymän eri SSL-tukikirjastoille." -#: ../libpurple/plugins/statenotify.c:54 #, c-format msgid "%s is no longer away." msgstr "%s palasi." -#: ../libpurple/plugins/statenotify.c:56 #, c-format msgid "%s has gone away." msgstr "%s poistui." -#: ../libpurple/plugins/statenotify.c:66 #, c-format msgid "%s has become idle." msgstr "%s on jouten." -#: ../libpurple/plugins/statenotify.c:68 #, c-format msgid "%s is no longer idle." msgstr "%s ei enää ole jouten." -#: ../libpurple/plugins/statenotify.c:77 #, c-format msgid "%s has signed on." msgstr "%s on kirjautunut sisään." -#: ../libpurple/plugins/statenotify.c:95 msgid "Notify When" msgstr "Huomautus kun" -#: ../libpurple/plugins/statenotify.c:98 msgid "Buddy Goes _Away" msgstr "Tuttava poi_stuu" -#: ../libpurple/plugins/statenotify.c:101 msgid "Buddy Goes _Idle" msgstr "Tuttava on _jouten" -#: ../libpurple/plugins/statenotify.c:104 msgid "Buddy _Signs On/Off" msgstr "Tuttava _kirjautuu sisään/ulos" @@ -3831,7 +2777,6 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/statenotify.c:152 msgid "Buddy State Notification" msgstr "Tuttavan tilan ilmoitus" @@ -3839,8 +2784,6 @@ #. *< version #. * summary #. * description -#: ../libpurple/plugins/statenotify.c:155 -#: ../libpurple/plugins/statenotify.c:158 msgid "" "Notifies in a conversation window when a buddy goes or returns from away or " "idle." @@ -3848,15 +2791,12 @@ "Ilmoittaa keskusteluikkunassa kun tuttava on poissa tai jouten ja kun hän " "palaa." -#: ../libpurple/plugins/tcl/tcl.c:423 msgid "Tcl Plugin Loader" msgstr "Tcl-liitännäisten lataaja" -#: ../libpurple/plugins/tcl/tcl.c:425 ../libpurple/plugins/tcl/tcl.c:426 msgid "Provides support for loading Tcl plugins" msgstr "Mahdollistaa Tcl-liitännäisten latauksen." -#: ../libpurple/plugins/tcl/tcl.c:509 msgid "" "Unable to detect ActiveTCL installation. If you wish to use TCL plugins, " "install ActiveTCL from http://www.activestate.com\n" @@ -3864,61 +2804,35 @@ "ActiveTCL-asennusta ei havaittu. Jos haluat käyttää TCL-liitännäisiä, asenna " "ActiveTCL osoitteesta http://www.activestate.com\n" -#: ../libpurple/protocols/bonjour/bonjour.c:101 -msgid "" -"The Apple Bonjour For Windows toolkit wasn't found, see the FAQ at: http://" -"developer.pidgin.im/wiki/Using%20Pidgin#CanIusePidginforBonjourLink-" -"LocalMessaging for more information." +msgid "" +"The Apple Bonjour For Windows toolkit wasn't found, see the FAQ at: http://d." +"pidgin.im/BonjourWindows for more information." msgstr "" "Apple Bonjour for Windows -työkalupakettia ei löytynyt, tarkista usein " "kysytyt kysymykset osoitteessa http://developer.pidgin.im/wiki/Using%" -"20Pidgin#CanIusePidginforBonjourLink-LocalMessaging." - -#: ../libpurple/protocols/bonjour/bonjour.c:120 +"20Pidgin#CanIusePidginforBonjourLink-LocalMessaging ." + msgid "Unable to listen for incoming IM connections\n" msgstr "Sisääntulevia pikaviestintäyhteyksiä ei voi kuunnella\n" -#: ../libpurple/protocols/bonjour/bonjour.c:147 msgid "" "Unable to establish connection with the local mDNS server. Is it running?" msgstr "" "Paikalliseen mDNS-palvelimeen ei voi luoda yhteyttä. Onko se käynnissä?" #. Creating the options for the protocol -#: ../libpurple/protocols/bonjour/bonjour.c:392 -#: ../libpurple/protocols/bonjour/bonjour.c:698 -#: ../libpurple/protocols/gg/gg.c:633 -#: ../libpurple/protocols/jabber/jabber.c:1006 msgid "First name" msgstr "Etunimi" -#: ../libpurple/protocols/bonjour/bonjour.c:394 -#: ../libpurple/protocols/bonjour/bonjour.c:701 -#: ../libpurple/protocols/gg/gg.c:628 -#: ../libpurple/protocols/jabber/jabber.c:1010 msgid "Last name" msgstr "Sukunimi" -#: ../libpurple/protocols/bonjour/bonjour.c:398 -#: ../libpurple/protocols/jabber/buddy.c:318 -#: ../libpurple/protocols/jabber/buddy.c:1362 -#: ../libpurple/protocols/jabber/buddy.c:1372 -#: ../libpurple/protocols/jabber/buddy.c:2266 -#: ../libpurple/protocols/silc/ops.c:1055 -#: ../libpurple/protocols/silc/util.c:561 -#: ../libpurple/protocols/silc10/ops.c:1075 -#: ../libpurple/protocols/silc10/util.c:555 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1068 msgid "Email" msgstr "Sähköposti" -#: ../libpurple/protocols/bonjour/bonjour.c:401 -#: ../libpurple/protocols/bonjour/bonjour.c:707 msgid "AIM Account" msgstr "AIM-tili" -#: ../libpurple/protocols/bonjour/bonjour.c:404 -#: ../libpurple/protocols/bonjour/bonjour.c:710 msgid "XMPP Account" msgstr "XMPP-tili" @@ -3932,396 +2846,253 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/bonjour/bonjour.c:508 -#: ../libpurple/protocols/bonjour/bonjour.c:510 msgid "Bonjour Protocol Plugin" msgstr "Bonjour-yhteyskäytäntöliitännäinen" -#: ../libpurple/protocols/bonjour/bonjour.c:651 msgid "Purple Person" msgstr "Purple-henkilö" -#: ../libpurple/protocols/bonjour/bonjour.h:33 msgid "Bonjour" msgstr "Bonjour" -#: ../libpurple/protocols/bonjour/jabber.c:429 #, c-format msgid "%s has closed the conversation." msgstr "%s on sulkenut keskustelun." -#: ../libpurple/protocols/bonjour/jabber.c:479 -#: ../libpurple/protocols/bonjour/jabber.c:544 -#: ../libpurple/protocols/bonjour/jabber.c:589 -#: ../libpurple/protocols/bonjour/jabber.c:766 -#: ../libpurple/protocols/bonjour/jabber.c:784 msgid "Unable to send the message, the conversation couldn't be started." msgstr "Viestiä ei voi lähettää, keskustelua ei voi aloittaa." -#: ../libpurple/protocols/bonjour/jabber.c:683 msgid "Cannot open socket" msgstr "Pistoketta ei voi avata" -#: ../libpurple/protocols/bonjour/jabber.c:693 -msgid "Error setting socket options" -msgstr "Virhe asetettaessa pistokevalintoja" - -#: ../libpurple/protocols/bonjour/jabber.c:719 msgid "Could not bind socket to port" msgstr "Pistoketta ei voi liittää porttiin" -#: ../libpurple/protocols/bonjour/jabber.c:729 msgid "Could not listen on socket" msgstr "Pistoketta ei voi kuunnella" -#: ../libpurple/protocols/bonjour/mdns_win32.c:110 msgid "Error communicating with local mDNSResponder." msgstr "Virhe viestittäessä paikallisen mDNSResponderin kanssa." -#: ../libpurple/protocols/gg/gg.c:76 ../libpurple/proxy.c:1908 msgid "Invalid proxy settings" msgstr "Epäkelvot välipalvelinvalinnat" -#: ../libpurple/protocols/gg/gg.c:77 ../libpurple/proxy.c:1908 msgid "" "Either the host name or port number specified for your given proxy type is " "invalid." msgstr "" "Joko isäntä tai porttinumero on virheellinen annetulle proxy-asetukselle." -#: ../libpurple/protocols/gg/gg.c:115 ../libpurple/protocols/gg/gg.c:137 -#: ../libpurple/protocols/gg/gg.c:180 msgid "Token Error" msgstr "Vastamerkkivirhe" -#: ../libpurple/protocols/gg/gg.c:116 ../libpurple/protocols/gg/gg.c:138 -#: ../libpurple/protocols/gg/gg.c:181 msgid "Unable to fetch the token.\n" msgstr "Polettia ei voi hakea.\n" -#: ../libpurple/protocols/gg/gg.c:267 ../libpurple/protocols/gg/gg.c:274 -#: ../libpurple/protocols/gg/gg.c:280 msgid "Save Buddylist..." msgstr "Tallenna tuttavat..." -#: ../libpurple/protocols/gg/gg.c:268 msgid "Your buddylist is empty, nothing was written to the file." msgstr "Tuttavia ei ole, mitään ei kirjoitettu tiedostoon." -#: ../libpurple/protocols/gg/gg.c:275 msgid "Buddylist saved successfully!" msgstr "Tuttavat tallennettiin onnistuneesti!" -#: ../libpurple/protocols/gg/gg.c:278 #, c-format msgid "Couldn't write buddy list for %s to %s" msgstr "%s-tuttavia ei voi kirjoittaa kohteeseen %s" -#: ../libpurple/protocols/gg/gg.c:303 ../libpurple/protocols/gg/gg.c:304 msgid "Couldn't load buddylist" msgstr "Tuttavien lataus ei onnistunut" -#: ../libpurple/protocols/gg/gg.c:320 msgid "Load Buddylist..." msgstr "Lataa tuttavat..." -#: ../libpurple/protocols/gg/gg.c:321 msgid "Buddylist loaded successfully!" msgstr "Tuttavat ladattiin onnistuneesti." -#: ../libpurple/protocols/gg/gg.c:332 msgid "Save buddylist..." msgstr "Tallenna tuttavat..." -#: ../libpurple/protocols/gg/gg.c:382 +msgid "Load buddylist from file..." +msgstr "Tuo tuttavat tiedostosta..." + msgid "Fill in the registration fields." msgstr "Täytä rekisteröitymiskentät." -#: ../libpurple/protocols/gg/gg.c:389 msgid "Passwords do not match." msgstr "Salasanat eivät täsmää." -#: ../libpurple/protocols/gg/gg.c:399 msgid "Unable to register new account. Error occurred.\n" msgstr "Uuden käyttäjätilin rekisteröinti epäonnistui virheen takia.\n" -#: ../libpurple/protocols/gg/gg.c:412 msgid "New Gadu-Gadu Account Registered" msgstr "Uusi Gadu-Gadu-käyttäjätili rekisteröity" -#: ../libpurple/protocols/gg/gg.c:413 msgid "Registration completed successfully!" msgstr "Rekisteröinti onnistui!" -#: ../libpurple/protocols/gg/gg.c:483 ../libpurple/protocols/gg/gg.c:776 -#: ../libpurple/protocols/jabber/jabber.c:981 -#: ../libpurple/protocols/jabber/jabber.c:984 -#: ../libpurple/protocols/jabber/jabber.c:1772 msgid "Password" msgstr "Salasana" -#: ../libpurple/protocols/gg/gg.c:488 ../libpurple/protocols/gg/gg.c:781 msgid "Password (retype)" msgstr "Salasana (uudelleen)" -#: ../libpurple/protocols/gg/gg.c:493 ../libpurple/protocols/gg/gg.c:786 msgid "Enter current token" msgstr "Syötä nykyinen poletti" -#: ../libpurple/protocols/gg/gg.c:499 ../libpurple/protocols/gg/gg.c:792 msgid "Current token" msgstr "Nykyinen poletti" -#: ../libpurple/protocols/gg/gg.c:503 ../libpurple/protocols/gg/gg.c:504 msgid "Register New Gadu-Gadu Account" msgstr "Rekisteröi uusi Gadu-Gadu-käyttäjätili" -#: ../libpurple/protocols/gg/gg.c:505 msgid "Please, fill in the following fields" msgstr "Täytä seuraavat kentät" -#: ../libpurple/protocols/gg/gg.c:643 ../libpurple/protocols/gg/gg.c:1056 -#: ../libpurple/protocols/gg/gg.c:1128 -#: ../libpurple/protocols/jabber/jabber.c:1018 -#: ../libpurple/protocols/oscar/oscar.c:3826 -#: ../libpurple/protocols/oscar/oscar.c:3839 -#: ../libpurple/protocols/qq/buddy_info.c:49 msgid "City" msgstr "Paikkakunta" -#: ../libpurple/protocols/gg/gg.c:648 msgid "Year of birth" msgstr "Syntymävuosi" -#: ../libpurple/protocols/gg/gg.c:651 ../libpurple/protocols/msn/msn.c:1759 -#: ../libpurple/protocols/msnp9/msn.c:1600 -#: ../libpurple/protocols/myspace/user.c:129 -#: ../libpurple/protocols/oscar/oscar.c:3769 -#: ../libpurple/protocols/qq/buddy_info.c:46 -#: ../libpurple/protocols/qq/qq.c:227 ../libpurple/protocols/qq/qq.c:230 -#: ../libpurple/protocols/qq/qq.c:233 ../libpurple/protocols/qq/qq.c:237 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1098 msgid "Gender" msgstr "Sukupuoli" -#: ../libpurple/protocols/gg/gg.c:652 msgid "Male or female" msgstr "Mies vai nainen" -#: ../libpurple/protocols/gg/gg.c:653 -#: ../libpurple/protocols/oscar/oscar.c:3769 -#: ../libpurple/protocols/qq/buddy_info.c:83 -#: ../libpurple/protocols/qq/qq.c:227 msgid "Male" msgstr "Mies" -#: ../libpurple/protocols/gg/gg.c:654 -#: ../libpurple/protocols/oscar/oscar.c:3769 -#: ../libpurple/protocols/qq/buddy_info.c:84 -#: ../libpurple/protocols/qq/qq.c:230 msgid "Female" msgstr "Nainen" -#: ../libpurple/protocols/gg/gg.c:658 msgid "Only online" msgstr "Vain linjoilla" -#: ../libpurple/protocols/gg/gg.c:662 ../libpurple/protocols/gg/gg.c:663 msgid "Find buddies" msgstr "Etsi tuttavia" -#: ../libpurple/protocols/gg/gg.c:664 msgid "Please, enter your search criteria below" msgstr "Anna hakukriteerisi alla" -#: ../libpurple/protocols/gg/gg.c:702 msgid "Fill in the fields." msgstr "Täytä kentät." -#: ../libpurple/protocols/gg/gg.c:714 msgid "Your current password is different from the one that you specified." msgstr "Nykyinen salasanasi ei ole se jonka kirjoitit." -#: ../libpurple/protocols/gg/gg.c:728 msgid "Unable to change password. Error occurred.\n" msgstr "Salasanaa ei voi muuttaa. Tapahtui virhe.\n" -#: ../libpurple/protocols/gg/gg.c:737 msgid "Change password for the Gadu-Gadu account" msgstr "Vaihda Gadu-Gadu-käyttäjätilin salasana" -#: ../libpurple/protocols/gg/gg.c:738 msgid "Password was changed successfully!" msgstr "Salasanan vaihto onnistui!" -#: ../libpurple/protocols/gg/gg.c:771 msgid "Current password" msgstr "Nykyinen salasana" -#: ../libpurple/protocols/gg/gg.c:796 msgid "Please, enter your current password and your new password for UIN: " msgstr "Syötä sekä nykyinen että uusi salasana tunnukselle: " -#: ../libpurple/protocols/gg/gg.c:800 ../libpurple/protocols/gg/gg.c:801 msgid "Change Gadu-Gadu Password" msgstr "Muuta Gadu-Gadu-salasana" -#: ../libpurple/protocols/gg/gg.c:878 #, c-format msgid "Select a chat for buddy: %s" msgstr "Valitse ryhmäkeskustelu tuttavalle: %s" -#: ../libpurple/protocols/gg/gg.c:881 ../libpurple/protocols/gg/gg.c:882 msgid "Add to chat..." msgstr "Lisää ryhmäkeskusteluun..." -#: ../libpurple/protocols/gg/gg.c:1013 -#: ../libpurple/protocols/jabber/buddy.c:2083 -#: ../libpurple/protocols/msn/state.c:29 ../libpurple/protocols/msn/state.c:30 -#: ../libpurple/protocols/msn/state.c:37 ../libpurple/protocols/msn/state.c:38 -#: ../libpurple/protocols/msnp9/state.c:29 -#: ../libpurple/protocols/msnp9/state.c:30 -#: ../libpurple/protocols/msnp9/state.c:37 -#: ../libpurple/protocols/msnp9/state.c:38 -#: ../libpurple/protocols/novell/novell.c:2834 -#: ../libpurple/protocols/qq/qq.c:281 -#: ../libpurple/protocols/yahoo/yahoo.c:3158 ../libpurple/status.c:156 -#: ../pidgin/gtkdocklet.c:545 ../pidgin/gtkstatusbox.c:1086 msgid "Available" msgstr "Tavoitettavissa" #. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for #. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message #. Away stuff -#: ../libpurple/protocols/gg/gg.c:1016 ../libpurple/protocols/irc/irc.c:544 -#: ../libpurple/protocols/irc/msgs.c:358 -#: ../libpurple/protocols/jabber/buddy.c:2087 -#: ../libpurple/protocols/novell/novell.c:2837 -#: ../libpurple/protocols/oscar/oscar.c:734 -#: ../libpurple/protocols/oscar/oscar.c:5745 -#: ../libpurple/protocols/qq/qq.c:181 ../libpurple/protocols/qq/qq.c:285 -#: ../libpurple/protocols/silc/buddy.c:1479 -#: ../libpurple/protocols/silc10/buddy.c:1479 -#: ../libpurple/protocols/yahoo/yahoo.c:3719 -#: ../libpurple/protocols/yahoo/yahoo.c:3793 ../libpurple/status.c:159 -#: ../pidgin/gtkdocklet.c:549 ../pidgin/gtkprefs.c:2070 -#: ../pidgin/gtkstatusbox.c:1087 #, c-format msgid "Away" msgstr "Poissa" -#: ../libpurple/protocols/gg/gg.c:1045 ../libpurple/protocols/gg/gg.c:1119 -#: ../libpurple/protocols/oscar/oscar.c:2753 -#: ../libpurple/protocols/oscar/oscar.c:3736 msgid "UIN" msgstr "UIN" -#: ../libpurple/protocols/gg/gg.c:1048 ../libpurple/protocols/gg/gg.c:1122 -#: ../libpurple/protocols/jabber/buddy.c:2260 -#: ../libpurple/protocols/jabber/buddy.c:2446 -#: ../libpurple/protocols/oscar/oscar.c:3747 -#: ../libpurple/protocols/silc/ops.c:1004 -#: ../libpurple/protocols/silc10/ops.c:1024 msgid "First Name" msgstr "Etunimi" -#: ../libpurple/protocols/gg/gg.c:1061 ../libpurple/protocols/gg/gg.c:1131 msgid "Birth Year" msgstr "Syntymävuosi" -#: ../libpurple/protocols/gg/gg.c:1113 ../libpurple/protocols/gg/gg.c:1182 -#: ../libpurple/protocols/oscar/oscar.c:3948 msgid "Unable to display the search results." msgstr "Hakutuloksia ei voi näyttää." -#: ../libpurple/protocols/gg/gg.c:1173 msgid "Gadu-Gadu Public Directory" msgstr "Gadu-Gadun julkinen hakemisto" -#: ../libpurple/protocols/gg/gg.c:1174 msgid "Search results" msgstr "Hakutulokset" -#: ../libpurple/protocols/gg/gg.c:1217 msgid "No matching users found" msgstr "Käyttäjistä ei löytynyt osumia" -#: ../libpurple/protocols/gg/gg.c:1218 msgid "There are no users matching your search criteria." msgstr "Hakuvalintojasi vastaavia käyttäjiä ei ole." -#: ../libpurple/protocols/gg/gg.c:1314 ../libpurple/protocols/gg/gg.c:1469 msgid "Unable to read socket" msgstr "Ei kyetty lukemaan pistoketta" -#: ../libpurple/protocols/gg/gg.c:1399 msgid "Buddy list downloaded" msgstr "Tuttavat ladattu" -#: ../libpurple/protocols/gg/gg.c:1400 msgid "Your buddy list was downloaded from the server." msgstr "Tuttavasi ladattiin palvelimelta." -#: ../libpurple/protocols/gg/gg.c:1407 msgid "Buddy list uploaded" msgstr "Tuttavat lähetettiin" -#: ../libpurple/protocols/gg/gg.c:1408 msgid "Your buddy list was stored on the server." msgstr "Tuttavasi tallennettiin palvelimelle." -#: ../libpurple/protocols/gg/gg.c:1517 ../libpurple/protocols/gg/gg.c:1725 msgid "Connection failed." msgstr "Yhteys epäonnistui." -#: ../libpurple/protocols/gg/gg.c:1652 msgid "Add to chat" msgstr "Lisää ryhmäkeskusteluun" -#: ../libpurple/protocols/gg/gg.c:1682 msgid "Chat _name:" msgstr "Keskustelunimi:" -#: ../libpurple/protocols/gg/gg.c:1933 msgid "Chat error" msgstr "Keskusteluvirhe" -#: ../libpurple/protocols/gg/gg.c:1934 msgid "This chat name is already in use" msgstr "Tämä keskustelunimi on jo käytössä" -#: ../libpurple/protocols/gg/gg.c:2019 msgid "Not connected to the server." msgstr "Ei yhdistettynä palvelimeen." -#: ../libpurple/protocols/gg/gg.c:2042 msgid "Find buddies..." msgstr "Etsi tuttavia..." -#: ../libpurple/protocols/gg/gg.c:2048 msgid "Change password..." msgstr "Vaihda salasana..." -#: ../libpurple/protocols/gg/gg.c:2054 msgid "Upload buddylist to Server" msgstr "Vie tuttavat palvelimelle" -#: ../libpurple/protocols/gg/gg.c:2058 msgid "Download buddylist from Server" msgstr "Tuo tuttavat palvelimelta" -#: ../libpurple/protocols/gg/gg.c:2062 msgid "Delete buddylist from Server" msgstr "Poista tuttavat palvelimelta" -#: ../libpurple/protocols/gg/gg.c:2066 msgid "Save buddylist to file..." msgstr "Vie tuttavat tiedostoon..." -#: ../libpurple/protocols/gg/gg.c:2070 -msgid "Load buddylist from file..." -msgstr "Tuo tuttavat tiedostosta..." - #. magic #. major_version #. minor_version @@ -4333,152 +3104,81 @@ #. id #. name #. version -#: ../libpurple/protocols/gg/gg.c:2174 msgid "Gadu-Gadu Protocol Plugin" msgstr "Gadu-Gadu-yhteyskäytäntöliitännäinen" #. summary -#: ../libpurple/protocols/gg/gg.c:2175 msgid "Polish popular IM" msgstr "Puolalainen suosittu pikaviestin" -#: ../libpurple/protocols/gg/gg.c:2229 msgid "Gadu-Gadu User" msgstr "Gadu-Gadu-käyttäjä" -#: ../libpurple/protocols/irc/cmds.c:43 -#: ../libpurple/protocols/silc/silc.c:1853 -#: ../libpurple/protocols/silc10/silc.c:1572 #, c-format msgid "Unknown command: %s" msgstr "Tuntematon komento: %s" -#: ../libpurple/protocols/irc/cmds.c:509 -#: ../libpurple/protocols/jabber/chat.c:596 -#: ../libpurple/protocols/silc/silc.c:1561 -#: ../libpurple/protocols/silc10/silc.c:1280 #, c-format msgid "current topic is: %s" msgstr "nykyinen aihe on: %s" -#: ../libpurple/protocols/irc/cmds.c:513 -#: ../libpurple/protocols/jabber/chat.c:600 -#: ../libpurple/protocols/silc/silc.c:1565 -#: ../libpurple/protocols/silc10/silc.c:1284 msgid "No topic is set" msgstr "Aihetta ei ole asetettu" -#: ../libpurple/protocols/irc/dcc_send.c:298 -#: ../libpurple/protocols/irc/dcc_send.c:339 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:318 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:327 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:336 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1110 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1514 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1565 msgid "File Transfer Failed" msgstr "Tiedostonsiirto epäonnistui" -#: ../libpurple/protocols/irc/dcc_send.c:299 -#: ../libpurple/protocols/irc/dcc_send.c:340 msgid "Could not open a listening port." msgstr "Kuuntelevaa porttia ei voi avata." -#: ../libpurple/protocols/irc/irc.c:79 msgid "Error displaying MOTD" msgstr "Virhe näytettäessä MOTD:tä" -#: ../libpurple/protocols/irc/irc.c:79 msgid "No MOTD available" msgstr "MOTD ei ole käytettävissä" -#: ../libpurple/protocols/irc/irc.c:80 msgid "There is no MOTD associated with this connection." msgstr "MOTD:tä ei ole assosioitu tälle yhteydelle." -#: ../libpurple/protocols/irc/irc.c:83 #, c-format msgid "MOTD for %s" msgstr "MOTD %s:lle" -#: ../libpurple/protocols/irc/irc.c:129 ../libpurple/protocols/irc/irc.c:169 -#: ../libpurple/protocols/irc/irc.c:633 ../libpurple/protocols/irc/irc.c:662 -#: ../libpurple/protocols/myspace/myspace.c:2539 msgid "Server has disconnected" msgstr "Palvelin on katkaissut yhteyden" -#: ../libpurple/protocols/irc/irc.c:260 msgid "View MOTD" msgstr "Näytä MOTD" -#: ../libpurple/protocols/irc/irc.c:272 ../libpurple/protocols/silc/chat.c:33 -#: ../libpurple/protocols/silc10/chat.c:33 msgid "_Channel:" msgstr "_Kanava:" -#: ../libpurple/protocols/irc/irc.c:278 -#: ../libpurple/protocols/jabber/chat.c:59 ../pidgin/gtkaccount.c:496 msgid "_Password:" msgstr "_Salasana:" -#: ../libpurple/protocols/irc/irc.c:311 msgid "IRC nicks may not contain whitespace" msgstr "IRC-kutsumanimissä ei tule olla välilyöntejä" #. 1. connect to server #. connect to the server -#: ../libpurple/protocols/irc/irc.c:332 -#: ../libpurple/protocols/jabber/jabber.c:1346 -#: ../libpurple/protocols/msn/session.c:402 -#: ../libpurple/protocols/msnp9/session.c:354 -#: ../libpurple/protocols/myspace/myspace.c:295 -#: ../libpurple/protocols/novell/novell.c:2199 -#: ../libpurple/protocols/oscar/oscar.c:1335 -#: ../libpurple/protocols/qq/qq.c:136 -#: ../libpurple/protocols/sametime/sametime.c:3778 -#: ../libpurple/protocols/simple/simple.c:1915 -#: ../libpurple/protocols/yahoo/yahoo.c:2984 -#: ../libpurple/protocols/zephyr/zephyr.c:1585 ../pidgin/gtkstatusbox.c:686 msgid "Connecting" msgstr "Yhdistetään" -#: ../libpurple/protocols/irc/irc.c:342 -#: ../libpurple/protocols/jabber/jabber.c:674 -#: ../libpurple/protocols/jabber/jabber.c:1155 msgid "SSL support unavailable" msgstr "SSL-tuki ei saatavilla" -#: ../libpurple/protocols/irc/irc.c:355 -#: ../libpurple/protocols/myspace/myspace.c:313 -#: ../libpurple/protocols/simple/simple.c:469 -#: ../libpurple/protocols/simple/simple.c:1825 msgid "Couldn't create socket" msgstr "Pistokkeen luominen epäonnistui" -#: ../libpurple/protocols/irc/irc.c:437 -#: ../libpurple/protocols/oscar/oscar.c:1331 msgid "Couldn't connect to host" msgstr "Yhteyttä isäntään ei voi muodostaa" -#: ../libpurple/protocols/irc/irc.c:628 ../libpurple/protocols/irc/irc.c:657 -#: ../libpurple/protocols/myspace/myspace.c:2533 msgid "Read error" msgstr "Virhe luettaessa" -#: ../libpurple/protocols/irc/irc.c:798 -#: ../libpurple/protocols/silc/chat.c:1401 -#: ../libpurple/protocols/silc10/chat.c:1426 -#: ../libpurple/protocols/yahoo/yahoochat.c:1508 msgid "Users" msgstr "Käyttäjät" -#: ../libpurple/protocols/irc/irc.c:801 -#: ../libpurple/protocols/sametime/sametime.c:3426 -#: ../libpurple/protocols/silc/chat.c:1404 -#: ../libpurple/protocols/silc/ops.c:1406 -#: ../libpurple/protocols/silc10/chat.c:1429 -#: ../libpurple/protocols/silc10/ops.c:1382 -#: ../libpurple/protocols/yahoo/yahoochat.c:1517 msgid "Topic" msgstr "Aihe" @@ -4490,50 +3190,27 @@ #. *< id #. *< name #. *< version -#: ../libpurple/protocols/irc/irc.c:939 msgid "IRC Protocol Plugin" msgstr "IRC-yhteyskäytäntöliitännäinen" #. * summary -#: ../libpurple/protocols/irc/irc.c:940 msgid "The IRC Protocol Plugin that Sucks Less" msgstr "IRC-yhteyskäytäntöliitännäinen joka on vähemmän huono..." #. host to connect to -#: ../libpurple/protocols/irc/irc.c:965 ../libpurple/protocols/irc/msgs.c:371 -#: ../libpurple/protocols/msn/msn.c:2357 -#: ../libpurple/protocols/msnp9/msn.c:2197 -#: ../libpurple/protocols/oscar/oscar.c:6747 -#: ../libpurple/protocols/qq/qq.c:756 -#: ../libpurple/protocols/sametime/sametime.c:5783 -#: ../libpurple/protocols/silc/ops.c:1262 -#: ../libpurple/protocols/silc/ops.c:1356 -#: ../libpurple/protocols/silc10/ops.c:1244 -#: ../libpurple/protocols/silc10/ops.c:1347 -#: ../libpurple/protocols/simple/simple.c:2099 -#: ../libpurple/protocols/toc/toc.c:2327 msgid "Server" msgstr "Palvelin" #. port to connect to -#: ../libpurple/protocols/irc/irc.c:968 ../libpurple/protocols/msn/msn.c:2362 -#: ../libpurple/protocols/msnp9/msn.c:2202 -#: ../libpurple/protocols/oscar/oscar.c:6750 -#: ../libpurple/protocols/qq/qq.c:759 -#: ../libpurple/protocols/sametime/sametime.c:5788 -#: ../libpurple/protocols/silc/silc.c:2143 -#: ../libpurple/protocols/silc10/silc.c:1867 -#: ../libpurple/protocols/toc/toc.c:2331 msgid "Port" msgstr "Portti" -#: ../libpurple/protocols/irc/irc.c:971 msgid "Encodings" msgstr "Merkistöt" -#: ../libpurple/protocols/irc/irc.c:977 ../libpurple/protocols/irc/msgs.c:365 -#: ../libpurple/protocols/silc/silc.c:1225 -#: ../libpurple/protocols/silc10/silc.c:926 +msgid "Auto-detect incoming UTF-8" +msgstr "Tunnista sisääntuleva UTF-8 automaattisesti" + msgid "Real name" msgstr "Oikea nimi" @@ -4541,172 +3218,129 @@ #. option = purple_account_option_string_new(_("Quit message"), "quitmsg", IRC_DEFAULT_QUIT); #. prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); #. -#: ../libpurple/protocols/irc/irc.c:985 msgid "Use SSL" msgstr "Käytä SSL:ää" -#: ../libpurple/protocols/irc/msgs.c:192 msgid "Bad mode" msgstr "Väärä tila" -#: ../libpurple/protocols/irc/msgs.c:214 -#, c-format -msgid "Ban on %s by %s, set %ld seconds ago" -msgstr "Käyttäjän %s esto, asettanut %s %ld sekuntia sitten" - -#: ../libpurple/protocols/irc/msgs.c:217 +#, c-format +msgid "Ban on %s by %s, set %s ago" +msgstr "Käyttäjän %s esto, asettanut %s %s sitten" + #, c-format msgid "Ban on %s" msgstr "Käyttäjän %s esto" -#: ../libpurple/protocols/irc/msgs.c:232 msgid "End of ban list" msgstr "Estolistan loppu" -#: ../libpurple/protocols/irc/msgs.c:246 #, c-format msgid "You are banned from %s." msgstr "Sinut on estetty kanavalta %s." -#: ../libpurple/protocols/irc/msgs.c:247 msgid "Banned" msgstr "Estetty" -#: ../libpurple/protocols/irc/msgs.c:264 #, c-format msgid "Cannot ban %s: banlist is full" msgstr "Käyttäjää %s ei voi estää: estolista on täynnä" -#: ../libpurple/protocols/irc/msgs.c:349 msgid " <i>(ircop)</i>" msgstr " <i>(ircop)</i>" -#: ../libpurple/protocols/irc/msgs.c:350 msgid " <i>(identified)</i>" msgstr "<i>(tunnistettu)</i>" -#: ../libpurple/protocols/irc/msgs.c:351 -#: ../libpurple/protocols/oscar/oscar.c:3737 -#: ../libpurple/protocols/silc/ops.c:1435 -#: ../libpurple/protocols/silc10/ops.c:1414 msgid "Nick" msgstr "Kutsumanimi" -#: ../libpurple/protocols/irc/msgs.c:377 -#: ../libpurple/protocols/silc/ops.c:1281 -#: ../libpurple/protocols/silc10/ops.c:1272 msgid "Currently on" msgstr "Tällä hetkellä" -#: ../libpurple/protocols/irc/msgs.c:382 msgid "Idle for" msgstr "Jouten " -#: ../libpurple/protocols/irc/msgs.c:385 msgid "Online since" msgstr "Linjoilla" -#: ../libpurple/protocols/irc/msgs.c:389 msgid "<b>Defining adjective:</b>" msgstr "<b>Kuvaava adjektiivi:</b>" -#: ../libpurple/protocols/irc/msgs.c:389 msgid "Glorious" msgstr "Loistokas" -#: ../libpurple/protocols/irc/msgs.c:473 #, c-format msgid "%s has changed the topic to: %s" msgstr "%s on vaihtanut aiheeksi: %s" -#: ../libpurple/protocols/irc/msgs.c:475 #, c-format msgid "%s has cleared the topic." msgstr "%s on poistanut aiheen." -#: ../libpurple/protocols/irc/msgs.c:483 #, c-format msgid "The topic for %s is: %s" msgstr "%s:n aihe on: %s" -#: ../libpurple/protocols/irc/msgs.c:501 #, c-format msgid "Unknown message '%s'" msgstr "Tuntematon viesti \"%s\"" -#: ../libpurple/protocols/irc/msgs.c:502 msgid "Unknown message" msgstr "Tuntematon viesti" -#: ../libpurple/protocols/irc/msgs.c:502 msgid "The IRC server received a message it did not understand." msgstr "IRC-palvelin vastaanotti viestin jota se ei ymmärtänyt." -#: ../libpurple/protocols/irc/msgs.c:523 #, c-format msgid "Users on %s: %s" msgstr "Käyttäjät %s: %s" -#: ../libpurple/protocols/irc/msgs.c:630 msgid "Time Response" msgstr "Vastaus time-komentoon " -#: ../libpurple/protocols/irc/msgs.c:631 msgid "The IRC server's local time is:" msgstr "IRC palvelimen paikallinen aika:" -#: ../libpurple/protocols/irc/msgs.c:642 msgid "No such channel" msgstr "Kanavaa ei ole" #. does this happen? -#: ../libpurple/protocols/irc/msgs.c:653 msgid "no such channel" msgstr "kanavaa ei ole" -#: ../libpurple/protocols/irc/msgs.c:656 msgid "User is not logged in" msgstr "Käyttäjä ei ole kirjautuneena sisään" -#: ../libpurple/protocols/irc/msgs.c:661 msgid "No such nick or channel" msgstr "Kutsumanimeä/kanavaa ei ole olemassa" -#: ../libpurple/protocols/irc/msgs.c:681 msgid "Could not send" msgstr "Lähettäminen ei onnistu" -#: ../libpurple/protocols/irc/msgs.c:737 #, c-format msgid "Joining %s requires an invitation." msgstr "Liittyminen kanavalle %s vaatii kutsun." -#: ../libpurple/protocols/irc/msgs.c:738 msgid "Invitation only" msgstr "Vain kutsu" -#: ../libpurple/protocols/irc/msgs.c:854 #, c-format msgid "You have been kicked by %s: (%s)" msgstr "%s on poistanut sinut kanavalta: (%s)" #. Remove user from channel -#: ../libpurple/protocols/irc/msgs.c:859 ../libpurple/protocols/silc/ops.c:714 -#: ../libpurple/protocols/silc10/ops.c:720 #, c-format msgid "Kicked by %s (%s)" msgstr "%s potkaisi (%s)" -#: ../libpurple/protocols/irc/msgs.c:882 #, c-format msgid "mode (%s %s) by %s" msgstr "moodin (%s %s) asetti %s" -#: ../libpurple/protocols/irc/msgs.c:970 ../libpurple/protocols/irc/msgs.c:971 msgid "Invalid nickname" msgstr "Virheellinen lempinimi" -#: ../libpurple/protocols/irc/msgs.c:972 msgid "" "Your selected nickname was rejected by the server. It probably contains " "invalid characters." @@ -4714,7 +3348,6 @@ "Palvelin hylkäsi valitsemasi kutsumanimen. Siinä on todennäköisesti " "kiellettyjä merkkejä." -#: ../libpurple/protocols/irc/msgs.c:977 msgid "" "Your selected account name was rejected by the server. It probably contains " "invalid characters." @@ -4722,53 +3355,40 @@ "Palvelin hylkäsi valitsemasi tilinimen. Siinä on todennäköisesti kiellettyjä " "merkkejä." -#: ../libpurple/protocols/irc/msgs.c:1016 msgid "Cannot change nick" msgstr "Ei kyetty muuttamaan kutsumanimeä" -#: ../libpurple/protocols/irc/msgs.c:1016 msgid "Could not change nick" msgstr "Ei kyetty muuttamaan kutsumanimeä" -#: ../libpurple/protocols/irc/msgs.c:1041 #, c-format msgid "You have parted the channel%s%s" msgstr "Olet poistunut kanavalta %s%s" -#: ../libpurple/protocols/irc/msgs.c:1085 msgid "Error: invalid PONG from server" msgstr "Virhe: epäkelpo PONG palvelimelta" -#: ../libpurple/protocols/irc/msgs.c:1087 #, c-format msgid "PING reply -- Lag: %lu seconds" msgstr "PING vastaus -- Viive: %lu sekuntia" -#: ../libpurple/protocols/irc/msgs.c:1178 #, c-format msgid "Cannot join %s: Registration is required." msgstr "Kohteeseen %s ei voi liittyä: vaatii rekisteröinnin." -#: ../libpurple/protocols/irc/msgs.c:1179 -#: ../libpurple/protocols/silc/ops.c:1106 -#: ../libpurple/protocols/silc10/ops.c:1128 msgid "Cannot join channel" msgstr "Kanavalle ei voi liittyä" -#: ../libpurple/protocols/irc/msgs.c:1213 msgid "Nick or channel is temporarily unavailable." msgstr "Kutsumanimi tai kanava ei tilapäisesti ole käytössä." -#: ../libpurple/protocols/irc/msgs.c:1225 #, c-format msgid "Wallops from %s" msgstr "Wallops %s:ltä" -#: ../libpurple/protocols/irc/parse.c:124 msgid "action <action to perform>: Perform an action." msgstr "action <tehtävä toiminta>: Tee toiminta." -#: ../libpurple/protocols/irc/parse.c:125 msgid "" "away [message]: Set an away message, or use no message to return from being " "away." @@ -4776,11 +3396,13 @@ "away [viesti]: Aseta poissaoloviesti, tai jätä viesti tyhjäksi poistaaksesi " "poissaolotilan." -#: ../libpurple/protocols/irc/parse.c:126 +msgid "ctcp <nick> <msg>: sends ctcp msg to nick." +msgstr "" +"ctcp <nimi> <viesti>: Lähettää CTCP-viestin nimetylle vastaanottajalle." + msgid "chanserv: Send a command to chanserv" msgstr "chanserv: Lähetä komento chanserv:lle" -#: ../libpurple/protocols/irc/parse.c:127 msgid "" "deop <nick1> [nick2] ...: Remove channel operator status from " "someone. You must be a channel operator to do this." @@ -4788,7 +3410,6 @@ "deop <nimi1> [nimi2] ...: Poista kanavaoperaattorin status joltakulta. " "Sinun tulee olla kanavaoperaattori tehdäksesi näin." -#: ../libpurple/protocols/irc/parse.c:128 msgid "" "devoice <nick1> [nick2] ...: Remove channel voice status from " "someone, preventing them from speaking if the channel is moderated (+m). You " @@ -4798,7 +3419,6 @@ "puhumasta jos kanava on moderoitu (+m). Sinun tulee olla kanavaoperaattori " "tehdäksesi näin." -#: ../libpurple/protocols/irc/parse.c:129 msgid "" "invite <nick> [room]: Invite someone to join you in the specified " "channel, or the current channel." @@ -4806,7 +3426,6 @@ "invite <nimi> [huone]: Kutsu joku liittymään kanssasi tietylle tai " "tämänhetkiselle kanavalle." -#: ../libpurple/protocols/irc/parse.c:130 msgid "" "j <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " "channels, optionally providing a channel key for each if needed." @@ -4814,7 +3433,6 @@ "j <huone1>[,huone2][,...] [avain1[,avain2][,...]]: Liity yhdelle tai " "useammalle kanavalle, antaen myös kanava-avaimen mikäli tarpeen." -#: ../libpurple/protocols/irc/parse.c:131 msgid "" "join <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " "channels, optionally providing a channel key for each if needed." @@ -4822,7 +3440,6 @@ "join <huone1>[,huone2][,...] [avain1[,avain2][,...]]: Liity yhdelle " "tai useammalle kanavalle antaen myös kanava-avaimen mikäli tarpeen." -#: ../libpurple/protocols/irc/parse.c:132 msgid "" "kick <nick> [message]: Remove someone from a channel. You must be a " "channel operator to do this." @@ -4830,7 +3447,6 @@ "kick <nimi> [viesti]: Poista joku kanavalta. Sinun tulee olla " "kanavaoperaattori tehdäksesi näin." -#: ../libpurple/protocols/irc/parse.c:133 msgid "" "list: Display a list of chat rooms on the network. <i>Warning, some servers " "may disconnect you upon doing this.</i>" @@ -4838,15 +3454,12 @@ "list: Näytä luettelo keskusteluhuoneista verkossa. <i>Varoitus, jotkut " "palvelimet saattavat katkaista yhteytesi jos teet näin.</i>" -#: ../libpurple/protocols/irc/parse.c:134 msgid "me <action to perform>: Perform an action." msgstr "me <tehtävä toiminto>: Suorita toiminto." -#: ../libpurple/protocols/irc/parse.c:135 msgid "memoserv: Send a command to memoserv" msgstr "memoserv: Lähetä komento memoserv:lle" -#: ../libpurple/protocols/irc/parse.c:136 msgid "" "mode <+|-><A-Za-z> <nick|channel>: Set or unset a channel " "or user mode." @@ -4854,7 +3467,6 @@ "mode <+|-><A-Za-z> <nimi|kanava>: Aseta tai poista kanavan " "tai käyttäjän tila." -#: ../libpurple/protocols/irc/parse.c:137 msgid "" "msg <nick> <message>: Send a private message to a user (as " "opposed to a channel)." @@ -4862,24 +3474,18 @@ "msg <nimi> <viesti>: Lähetä yksityisviesti käyttäjälle " "(ollessasi kanavalla)." -#: ../libpurple/protocols/irc/parse.c:138 msgid "names [channel]: List the users currently in a channel." msgstr "names [kanava]: Listaa kanavalla olevat käyttäjät." -#: ../libpurple/protocols/irc/parse.c:139 -#: ../libpurple/protocols/jabber/jabber.c:2358 msgid "nick <new nickname>: Change your nickname." msgstr "nick <uusi nimi>: Muuta nimesi." -#: ../libpurple/protocols/irc/parse.c:140 msgid "nickserv: Send a command to nickserv" msgstr "nickserv: Lähetä komento nickserv:lle" -#: ../libpurple/protocols/irc/parse.c:141 msgid "notice <target<: Send a notice to a user or channel." msgstr "notice <kohde>: Lähetä ilmoitus käyttäjälle tai kanavalle." -#: ../libpurple/protocols/irc/parse.c:142 msgid "" "op <nick1> [nick2] ...: Grant channel operator status to someone. You " "must be a channel operator to do this." @@ -4887,7 +3493,6 @@ "op <nimi1> [nimi2] ...: Anna kanavaoperaattorin status jollekulle. " "Sinun tulee olla kanavaoperaattori tehdäksesi näin." -#: ../libpurple/protocols/irc/parse.c:143 msgid "" "operwall <message>: If you don't know what this is, you probably " "can't use it." @@ -4895,11 +3500,9 @@ "operwall <viesti>: Jos et tiedä mikä tämä on, sinun ei todennäköisesti " "tule käyttää tätä." -#: ../libpurple/protocols/irc/parse.c:144 msgid "operserv: Send a command to operserv" msgstr "operserv: Lähetä komento operserv:lle" -#: ../libpurple/protocols/irc/parse.c:145 msgid "" "part [room] [message]: Leave the current channel, or a specified channel, " "with an optional message." @@ -4907,7 +3510,6 @@ "part [huone] [viesti]: Poistu tämänhetkiseltä kanavalta tai tietyltä " "kanavalta valinnaisen viestin kanssa." -#: ../libpurple/protocols/irc/parse.c:146 msgid "" "ping [nick]: Asks how much lag a user (or the server if no user specified) " "has." @@ -4915,7 +3517,6 @@ "ping [nimi]: Kysyy kuinka paljon viivettä käyttäjällä(tai palvelimella jos " "ei käyttäjää annettu) on." -#: ../libpurple/protocols/irc/parse.c:147 msgid "" "query <nick> <message>: Send a private message to a user (as " "opposed to a channel)." @@ -4923,15 +3524,12 @@ "query <nimi> <viesti>: Lähetä yksityisviesti käyttäjälle (kun " "olet kanavalla)." -#: ../libpurple/protocols/irc/parse.c:148 msgid "quit [message]: Disconnect from the server, with an optional message." msgstr "quit [viesti]: Katkaise yhteys palvelimelle + valinnainen viesti." -#: ../libpurple/protocols/irc/parse.c:149 msgid "quote [...]: Send a raw command to the server." msgstr "quote [...]: Lähetä \"raaka\" komento palvelimelle." -#: ../libpurple/protocols/irc/parse.c:150 msgid "" "remove <nick> [message]: Remove someone from a room. You must be a " "channel operator to do this." @@ -4939,23 +3537,18 @@ "remove <nimi> [viesti]: Poista joku huoneesta. Sinun tulee olla " "kanavaoperaattori tehdäksesi näin." -#: ../libpurple/protocols/irc/parse.c:151 msgid "time: Displays the current local time at the IRC server." msgstr "time: Näyttää paikallisen ajan IRC palvelimella." -#: ../libpurple/protocols/irc/parse.c:152 msgid "topic [new topic]: View or change the channel topic." msgstr "topic [uusi aihe]: Näytä tai vaihda kanavan aihetta." -#: ../libpurple/protocols/irc/parse.c:153 msgid "umode <+|-><A-Za-z>: Set or unset a user mode." msgstr "umode <nimi1> [nimi2] ...: Aseta tai poista käyttäjän tila." -#: ../libpurple/protocols/irc/parse.c:154 msgid "version [nick]: send CTCP VERSION request to a user" msgstr "version [nimi]: lähetä CTCP VERSION -pyyntö käyttäjälle" -#: ../libpurple/protocols/irc/parse.c:155 msgid "" "voice <nick1> [nick2] ...: Grant channel voice status to someone. You " "must be a channel operator to do this." @@ -4963,7 +3556,6 @@ "voice <nimi1> [nimi2] ...: Aseta kanavan ääni-tila jollekulle. Sinun " "tulee olla kanavaoperaattori tehdäksesi näin." -#: ../libpurple/protocols/irc/parse.c:156 msgid "" "wallops <message>: If you don't know what this is, you probably can't " "use it." @@ -4971,66 +3563,44 @@ "wallops <viesti>: Jos et tiedä mikä tämä on, sinun ei todennäköisesti " "tulee käyttää sitä." -#: ../libpurple/protocols/irc/parse.c:157 msgid "whois [server] <nick>: Get information on a user." msgstr "whois [palvelin] <nimi>: Hae tietoja käyttäjästä." -#: ../libpurple/protocols/irc/parse.c:158 msgid "whowas <nick>: Get information on a user that has logged off." msgstr "whowas <nimi>: Hae tietoja käyttäjästä joka on kirjautunut ulos." -#: ../libpurple/protocols/irc/parse.c:523 #, c-format msgid "Reply time from %s: %lu seconds" msgstr "Vastausaika %s:ltä: %lu sekuntia" -#: ../libpurple/protocols/irc/parse.c:524 msgid "PONG" msgstr "PONG" -#: ../libpurple/protocols/irc/parse.c:524 msgid "CTCP PING reply" msgstr "CTCP PING:n vastaus" -#: ../libpurple/protocols/irc/parse.c:636 -#: ../libpurple/protocols/irc/parse.c:643 ../libpurple/protocols/toc/toc.c:191 -#: ../libpurple/protocols/toc/toc.c:694 ../libpurple/protocols/toc/toc.c:710 -#: ../libpurple/protocols/toc/toc.c:786 msgid "Disconnected." msgstr "Yhteys katkennut." -#: ../libpurple/protocols/jabber/adhoccommands.c:143 -#: ../libpurple/protocols/jabber/jabber.c:735 -#: ../libpurple/protocols/jabber/jabber.c:765 -#: ../libpurple/protocols/jabber/jabber.c:1942 msgid "Unknown Error" msgstr "Tuntematon virhe" -#: ../libpurple/protocols/jabber/adhoccommands.c:145 -#: ../libpurple/protocols/jabber/adhoccommands.c:146 msgid "Ad-Hoc Command Failed" msgstr "Ad-Hoc-komento epäonnistui" -#: ../libpurple/protocols/jabber/adhoccommands.c:182 msgid "execute" msgstr "suorita" -#: ../libpurple/protocols/jabber/auth.c:55 msgid "Server requires TLS/SSL for login. No TLS/SSL support found." msgstr "Palvelin vaatii TSL/SSL-tuen kirjautumiseen. TLS/SSL-tukea ei löydy." -#: ../libpurple/protocols/jabber/auth.c:60 msgid "You require encryption, but no TLS/SSL support found." msgstr "Salausta vaadittu, mutta TLS/SSL-tukea ei löydy." -#: ../libpurple/protocols/jabber/auth.c:125 msgid "Server requires plaintext authentication over an unencrypted stream" msgstr "" "Palvelin vaatii salaamattoman tunnistautumisen salaamattoman yhteyden yli" -#: ../libpurple/protocols/jabber/auth.c:328 -#: ../libpurple/protocols/jabber/auth.c:535 -#: ../libpurple/protocols/jabber/auth.c:729 #, c-format msgid "" "%s requires plaintext authentication over an unencrypted connection. Allow " @@ -5039,139 +3609,74 @@ "%s vaatii tekstipohjaisen tunnistautumisen salaamattoman yhteyden yli. " "Sallitaanko tämä ja jatketaan?" -#: ../libpurple/protocols/jabber/auth.c:330 -#: ../libpurple/protocols/jabber/auth.c:331 -#: ../libpurple/protocols/jabber/auth.c:537 -#: ../libpurple/protocols/jabber/auth.c:538 -#: ../libpurple/protocols/jabber/auth.c:731 -#: ../libpurple/protocols/jabber/auth.c:732 msgid "Plaintext Authentication" msgstr "Tekstipohjainen tunnistus" -#: ../libpurple/protocols/jabber/auth.c:489 -#: ../libpurple/protocols/jabber/auth.c:662 -#: ../libpurple/protocols/jabber/auth.c:913 -#: ../libpurple/protocols/jabber/auth.c:1064 -#: ../libpurple/protocols/jabber/auth.c:1091 -#: ../libpurple/protocols/jabber/auth.c:1137 -#: ../libpurple/protocols/jabber/jabber.c:127 msgid "Invalid response from server." msgstr "Kelvoton vastaus palvelimelta." -#: ../libpurple/protocols/jabber/auth.c:551 -#: ../libpurple/protocols/jabber/auth.c:745 msgid "Server does not use any supported authentication method" msgstr "Palvelin ei käytä mitään tuetuista tunnistautumismenetelmistä" -#: ../libpurple/protocols/jabber/auth.c:936 -#: ../libpurple/protocols/jabber/auth.c:961 msgid "Invalid challenge from server" msgstr "Virheellinen tunnistushaaste palvelimelta" -#: ../libpurple/protocols/jabber/auth.c:1037 msgid "SASL error" msgstr "SASL-virhe" -#: ../libpurple/protocols/jabber/buddy.c:306 -#: ../libpurple/protocols/jabber/buddy.c:1256 -#: ../libpurple/protocols/sametime/sametime.c:4184 -#: ../libpurple/protocols/silc/ops.c:1000 -#: ../libpurple/protocols/silc10/ops.c:1020 msgid "Full Name" msgstr "Koko nimi" -#: ../libpurple/protocols/jabber/buddy.c:307 -#: ../libpurple/protocols/jabber/buddy.c:1268 -#: ../libpurple/protocols/silc/ops.c:1012 -#: ../libpurple/protocols/silc10/ops.c:1032 msgid "Family Name" msgstr "Sukunimi" -#: ../libpurple/protocols/jabber/buddy.c:308 -#: ../libpurple/protocols/jabber/buddy.c:1271 msgid "Given Name" msgstr "Etunimi" -#: ../libpurple/protocols/jabber/buddy.c:310 -#: ../libpurple/protocols/jabber/jabber.c:1034 msgid "URL" msgstr "URL" -#: ../libpurple/protocols/jabber/buddy.c:311 -#: ../libpurple/protocols/jabber/buddy.c:1319 msgid "Street Address" msgstr "Katuosoite" -#: ../libpurple/protocols/jabber/buddy.c:312 -#: ../libpurple/protocols/jabber/buddy.c:1316 msgid "Extended Address" msgstr "Laajennettu osoite" -#: ../libpurple/protocols/jabber/buddy.c:313 -#: ../libpurple/protocols/jabber/buddy.c:1322 msgid "Locality" msgstr "Alue" -#: ../libpurple/protocols/jabber/buddy.c:314 -#: ../libpurple/protocols/jabber/buddy.c:1325 msgid "Region" msgstr "Seutu" -#: ../libpurple/protocols/jabber/buddy.c:315 -#: ../libpurple/protocols/jabber/buddy.c:1328 msgid "Postal Code" msgstr "Postinumero" -#: ../libpurple/protocols/jabber/buddy.c:316 -#: ../libpurple/protocols/jabber/buddy.c:1332 -#: ../libpurple/protocols/silc/silc.c:1231 -#: ../libpurple/protocols/silc10/silc.c:932 msgid "Country" msgstr "Maa" -#: ../libpurple/protocols/jabber/buddy.c:317 -#: ../libpurple/protocols/jabber/buddy.c:1343 -#: ../libpurple/protocols/jabber/buddy.c:1350 +#. lots of clients (including purple) do this, but it's +#. * out of spec msgid "Telephone" msgstr "Puhelin" -#: ../libpurple/protocols/jabber/buddy.c:319 -#: ../libpurple/protocols/jabber/buddy.c:1387 msgid "Organization Name" msgstr "Organisaation nimi" -#: ../libpurple/protocols/jabber/buddy.c:320 -#: ../libpurple/protocols/jabber/buddy.c:1390 msgid "Organization Unit" msgstr "Organisaatioyksikkö" -#: ../libpurple/protocols/jabber/buddy.c:322 -#: ../libpurple/protocols/jabber/buddy.c:1399 msgid "Role" msgstr "Asema" -#: ../libpurple/protocols/jabber/buddy.c:323 -#: ../libpurple/protocols/jabber/buddy.c:1287 -#: ../libpurple/protocols/msn/msn.c:1828 -#: ../libpurple/protocols/msnp9/msn.c:1669 -#: ../libpurple/protocols/oscar/oscar.c:3786 msgid "Birthday" msgstr "Syntymäpäivä" -#: ../libpurple/protocols/jabber/buddy.c:324 -#: ../libpurple/protocols/jabber/buddy.c:1402 -#: ../libpurple/protocols/jabber/chat.c:780 -#: ../libpurple/protocols/jabber/usermood.c:190 ../pidgin/gtkblist.c:3427 -#: ../pidgin/gtkplugin.c:582 ../pidgin/gtkprefs.c:688 msgid "Description" msgstr "Kuvaus" -#: ../libpurple/protocols/jabber/buddy.c:752 -#: ../libpurple/protocols/jabber/buddy.c:753 msgid "Edit XMPP vCard" msgstr "Muokkaa XMPP-vCardia" -#: ../libpurple/protocols/jabber/buddy.c:754 msgid "" "All items below are optional. Enter only the information with which you feel " "comfortable." @@ -5179,386 +3684,231 @@ "Kaikki alla olevat kentät ovat valinnaisia. Kirjoita vain tiedot, joiden " "luovuttamista pidät sopivana." -#: ../libpurple/protocols/jabber/buddy.c:825 -#: ../libpurple/protocols/jabber/buddy.c:990 msgid "Client" msgstr "Asiakasohjelma" -#: ../libpurple/protocols/jabber/buddy.c:829 -#: ../libpurple/protocols/jabber/buddy.c:994 msgid "Operating System" msgstr "Käyttöjärjestelmä" -#: ../libpurple/protocols/jabber/buddy.c:845 -#: ../libpurple/protocols/jabber/buddy.c:1005 msgid "Last Activity" msgstr "Viimeisin aktiivisena olo" -#: ../libpurple/protocols/jabber/buddy.c:847 -#: ../libpurple/protocols/jabber/buddy.c:1007 msgid "Service Discovery Info" msgstr "Palvelulöytötiedot" -#: ../libpurple/protocols/jabber/buddy.c:849 -#: ../libpurple/protocols/jabber/buddy.c:1009 msgid "Service Discovery Items" msgstr "Palvelulöytökohteet" -#: ../libpurple/protocols/jabber/buddy.c:851 -#: ../libpurple/protocols/jabber/buddy.c:1011 msgid "Extended Stanza Addressing" msgstr "Laajennettu raakalohko-osoitus" -#: ../libpurple/protocols/jabber/buddy.c:853 -#: ../libpurple/protocols/jabber/buddy.c:1013 msgid "Multi-User Chat" msgstr "Monen käyttäjän keskustelu" -#: ../libpurple/protocols/jabber/buddy.c:855 -#: ../libpurple/protocols/jabber/buddy.c:1015 msgid "Multi-User Chat Extended Presence Information" msgstr "Monen käyttäjän keskustelun laajennetut läsnäolotiedot" -#: ../libpurple/protocols/jabber/buddy.c:857 -#: ../libpurple/protocols/jabber/buddy.c:1017 msgid "In-Band Bytestreams" msgstr "In-band-tavujonot" -#: ../libpurple/protocols/jabber/buddy.c:859 -#: ../libpurple/protocols/jabber/buddy.c:1019 msgid "Ad-Hoc Commands" msgstr "Ad-Hoc-komennot" -#: ../libpurple/protocols/jabber/buddy.c:861 -#: ../libpurple/protocols/jabber/buddy.c:1021 msgid "PubSub Service" msgstr "PubSub-palvelu" -#: ../libpurple/protocols/jabber/buddy.c:863 -#: ../libpurple/protocols/jabber/buddy.c:1023 msgid "SOCKS5 Bytestreams" msgstr "SOCKS5-tavujonot" -#: ../libpurple/protocols/jabber/buddy.c:865 -#: ../libpurple/protocols/jabber/buddy.c:1025 msgid "Out of Band Data" msgstr "Out of band -tiedot" -#: ../libpurple/protocols/jabber/buddy.c:867 -#: ../libpurple/protocols/jabber/buddy.c:1027 msgid "XHTML-IM" msgstr "XHTML-IM" -#: ../libpurple/protocols/jabber/buddy.c:869 -#: ../libpurple/protocols/jabber/buddy.c:1029 msgid "In-Band Registration" msgstr "Rekisteröinti \"in-band\"" -#: ../libpurple/protocols/jabber/buddy.c:871 -#: ../libpurple/protocols/jabber/buddy.c:1031 msgid "User Location" msgstr "Käyttäjän sijainti" -#: ../libpurple/protocols/jabber/buddy.c:873 -#: ../libpurple/protocols/jabber/buddy.c:1033 msgid "User Avatar" msgstr "Käyttäjän hahmo" -#: ../libpurple/protocols/jabber/buddy.c:875 -#: ../libpurple/protocols/jabber/buddy.c:1035 msgid "Chat State Notifications" msgstr "Keskustelun tilan ilmoitukset" -#: ../libpurple/protocols/jabber/buddy.c:877 -#: ../libpurple/protocols/jabber/buddy.c:1037 msgid "Software Version" msgstr "Ohjelmistoversio" -#: ../libpurple/protocols/jabber/buddy.c:879 -#: ../libpurple/protocols/jabber/buddy.c:1039 msgid "Stream Initiation" msgstr "Virtauksen alustus" -#: ../libpurple/protocols/jabber/buddy.c:881 -#: ../libpurple/protocols/jabber/buddy.c:1041 -#: ../libpurple/protocols/sametime/sametime.c:3287 msgid "File Transfer" msgstr "Tiedostonsiirto" -#: ../libpurple/protocols/jabber/buddy.c:883 -#: ../libpurple/protocols/jabber/buddy.c:1043 msgid "User Mood" msgstr "Käyttäjän mieliala" -#: ../libpurple/protocols/jabber/buddy.c:885 -#: ../libpurple/protocols/jabber/buddy.c:1045 msgid "User Activity" msgstr "Käyttäjän aktiivisuus" -#: ../libpurple/protocols/jabber/buddy.c:887 -#: ../libpurple/protocols/jabber/buddy.c:1047 msgid "Entity Capabilities" msgstr "Entiteetin ominaisuudet" -#: ../libpurple/protocols/jabber/buddy.c:889 -#: ../libpurple/protocols/jabber/buddy.c:1049 msgid "Encrypted Session Negotiations" msgstr "Salatut istuntojen neuvottelut" -#: ../libpurple/protocols/jabber/buddy.c:891 -#: ../libpurple/protocols/jabber/buddy.c:1051 msgid "User Tune" msgstr "Käyttäjänimi" -#: ../libpurple/protocols/jabber/buddy.c:893 -#: ../libpurple/protocols/jabber/buddy.c:1053 msgid "Roster Item Exchange" msgstr "Tuttavaluetteloiden vaihto" -#: ../libpurple/protocols/jabber/buddy.c:895 -#: ../libpurple/protocols/jabber/buddy.c:1055 msgid "Reachability Address" msgstr "Tavoitettavuusosoite" -#: ../libpurple/protocols/jabber/buddy.c:897 -#: ../libpurple/protocols/jabber/buddy.c:1057 msgid "User Profile" msgstr "Käyttäjän profiili" -#: ../libpurple/protocols/jabber/buddy.c:899 -#: ../libpurple/protocols/jabber/buddy.c:1059 msgid "Jingle" msgstr "Jingle" -#: ../libpurple/protocols/jabber/buddy.c:901 -#: ../libpurple/protocols/jabber/buddy.c:1061 msgid "Jingle Audio" msgstr "Jingle-ääni" -#: ../libpurple/protocols/jabber/buddy.c:903 -#: ../libpurple/protocols/jabber/buddy.c:1063 msgid "User Nickname" msgstr "Käyttäjän kutsumanimi" -#: ../libpurple/protocols/jabber/buddy.c:905 -#: ../libpurple/protocols/jabber/buddy.c:1065 msgid "Jingle ICE UDP" msgstr "Jingle ICE UDP" -#: ../libpurple/protocols/jabber/buddy.c:907 -#: ../libpurple/protocols/jabber/buddy.c:1067 msgid "Jingle ICE TCP" msgstr "Jingle ICE TCP" -#: ../libpurple/protocols/jabber/buddy.c:909 -#: ../libpurple/protocols/jabber/buddy.c:1069 msgid "Jingle Raw UDP" msgstr "Jingle raaka-UDP" -#: ../libpurple/protocols/jabber/buddy.c:911 -#: ../libpurple/protocols/jabber/buddy.c:1071 msgid "Jingle Video" msgstr "Jingle-video" -#: ../libpurple/protocols/jabber/buddy.c:913 -#: ../libpurple/protocols/jabber/buddy.c:1073 msgid "Jingle DTMF" msgstr "Jingle DTMF" -#: ../libpurple/protocols/jabber/buddy.c:915 -#: ../libpurple/protocols/jabber/buddy.c:1075 msgid "Message Receipts" msgstr "Viestikuittaukset" -#: ../libpurple/protocols/jabber/buddy.c:917 -#: ../libpurple/protocols/jabber/buddy.c:1077 msgid "Public Key Publishing" msgstr "Julkisen avaimen julkaiseminen" -#: ../libpurple/protocols/jabber/buddy.c:919 -#: ../libpurple/protocols/jabber/buddy.c:1079 msgid "User Chatting" msgstr "Käyttäjä keskustelee" -#: ../libpurple/protocols/jabber/buddy.c:921 -#: ../libpurple/protocols/jabber/buddy.c:1081 msgid "User Browsing" msgstr "Käyttäjä selaa" -#: ../libpurple/protocols/jabber/buddy.c:923 -#: ../libpurple/protocols/jabber/buddy.c:1083 msgid "User Gaming" msgstr "Käyttäjä pelaa" -#: ../libpurple/protocols/jabber/buddy.c:925 -#: ../libpurple/protocols/jabber/buddy.c:1085 msgid "User Viewing" msgstr "Käyttäjä katselee" -#: ../libpurple/protocols/jabber/buddy.c:927 -#: ../libpurple/protocols/jabber/buddy.c:1087 -#: ../libpurple/protocols/silc/ops.c:1613 -#: ../libpurple/protocols/silc/ops.c:1618 -#: ../libpurple/protocols/silc10/ops.c:1612 -#: ../libpurple/protocols/silc10/ops.c:1617 msgid "Ping" msgstr "Ping" -#: ../libpurple/protocols/jabber/buddy.c:929 -#: ../libpurple/protocols/jabber/buddy.c:1089 msgid "Stanza Encryption" msgstr "Raakalohkojen salaus" -#: ../libpurple/protocols/jabber/buddy.c:931 -#: ../libpurple/protocols/jabber/buddy.c:1091 msgid "Entity Time" msgstr "Entiteetin aika" -#: ../libpurple/protocols/jabber/buddy.c:933 -#: ../libpurple/protocols/jabber/buddy.c:1093 msgid "Delayed Delivery" msgstr "Viivästetty toimitus" -#: ../libpurple/protocols/jabber/buddy.c:935 -#: ../libpurple/protocols/jabber/buddy.c:1095 msgid "Collaborative Data Objects" msgstr "Yhteistyötä tekevät dataobjektit" -#: ../libpurple/protocols/jabber/buddy.c:937 -#: ../libpurple/protocols/jabber/buddy.c:1097 msgid "File Repository and Sharing" msgstr "Tiedostovarasto ja jakaminen" -#: ../libpurple/protocols/jabber/buddy.c:939 -#: ../libpurple/protocols/jabber/buddy.c:1099 msgid "STUN Service Discovery for Jingle" msgstr "STUN-palvelun löytäminen Jinglelle" -#: ../libpurple/protocols/jabber/buddy.c:941 -#: ../libpurple/protocols/jabber/buddy.c:1101 msgid "Simplified Encrypted Session Negotiation" msgstr "Yksinkertaistettu salatun istunnon neuvottelu" -#: ../libpurple/protocols/jabber/buddy.c:943 -#: ../libpurple/protocols/jabber/buddy.c:1103 msgid "Hop Check" msgstr "Hyppytarkistus" -#: ../libpurple/protocols/jabber/buddy.c:951 -#: ../libpurple/protocols/jabber/buddy.c:1111 -#: ../libpurple/protocols/oscar/oscar.c:2960 msgid "Capabilities" msgstr "Kyvyt" -#: ../libpurple/protocols/jabber/buddy.c:963 -#: ../libpurple/protocols/jabber/libxmpp.c:209 -#: ../libpurple/protocols/jabber/si.c:1103 +msgid "Priority" +msgstr "Tärkeys" + msgid "Resource" msgstr "Sijainti" -#: ../libpurple/protocols/jabber/buddy.c:965 -#: ../libpurple/protocols/jabber/jabber.c:1610 -#: ../libpurple/protocols/jabber/jabber.c:1624 -#: ../libpurple/protocols/jabber/jabber.c:1638 -#: ../libpurple/protocols/jabber/jabber.c:1652 -#: ../libpurple/protocols/jabber/jabber.c:1666 -msgid "Priority" -msgstr "Tärkeys" - -#: ../libpurple/protocols/jabber/buddy.c:1274 -#: ../libpurple/protocols/silc/ops.c:1008 -#: ../libpurple/protocols/silc10/ops.c:1028 msgid "Middle Name" msgstr "Muut etunimet" -#: ../libpurple/protocols/jabber/buddy.c:1307 -#: ../libpurple/protocols/jabber/jabber.c:1014 -#: ../libpurple/protocols/oscar/oscar.c:3825 -#: ../libpurple/protocols/oscar/oscar.c:3838 -#: ../libpurple/protocols/qq/buddy_info.c:56 -#: ../libpurple/protocols/silc/ops.c:1044 -#: ../libpurple/protocols/silc10/ops.c:1064 msgid "Address" msgstr "Osoite" -#: ../libpurple/protocols/jabber/buddy.c:1313 msgid "P.O. Box" msgstr "Postilokero" -#: ../libpurple/protocols/jabber/buddy.c:1423 msgid "Photo" msgstr "Valokuva" -#: ../libpurple/protocols/jabber/buddy.c:1423 msgid "Logo" msgstr "Logo" -#: ../libpurple/protocols/jabber/buddy.c:1992 msgid "Un-hide From" msgstr "\"Tule esiin\"" -#: ../libpurple/protocols/jabber/buddy.c:1996 msgid "Temporarily Hide From" msgstr "Piiloudu väliaikaisesti tuttavalta" #. && NOT ME -#: ../libpurple/protocols/jabber/buddy.c:2004 msgid "Cancel Presence Notification" msgstr "Peru paikallaoloilmoitus" -#: ../libpurple/protocols/jabber/buddy.c:2011 msgid "(Re-)Request authorization" msgstr "Pyydä valtuutusta uudelleen" #. if(NOT ME) #. shouldn't this just happen automatically when the buddy is #. removed? -#: ../libpurple/protocols/jabber/buddy.c:2020 msgid "Unsubscribe" msgstr "Poista listalta" -#: ../libpurple/protocols/jabber/buddy.c:2035 msgid "Log In" msgstr "Kirjaudu sisään" -#: ../libpurple/protocols/jabber/buddy.c:2039 msgid "Log Out" msgstr "Kirjaudu ulos" -#: ../libpurple/protocols/jabber/buddy.c:2085 -#: ../libpurple/protocols/jabber/jabber.c:1623 msgid "Chatty" msgstr "Juttelutuulella" -#: ../libpurple/protocols/jabber/buddy.c:2089 msgid "Extended Away" msgstr "Pidennetty poissaolo" -#: ../libpurple/protocols/jabber/buddy.c:2091 -#: ../libpurple/protocols/jabber/jabber.c:1665 -#: ../libpurple/protocols/oscar/oscar.c:728 -#: ../libpurple/protocols/oscar/oscar.c:5921 -#: ../libpurple/protocols/sametime/sametime.c:3349 #, c-format msgid "Do Not Disturb" msgstr "Älä häiritse" -#: ../libpurple/protocols/jabber/buddy.c:2258 msgid "JID" msgstr "JID" -#: ../libpurple/protocols/jabber/buddy.c:2262 -#: ../libpurple/protocols/jabber/buddy.c:2451 -#: ../libpurple/protocols/oscar/oscar.c:3748 msgid "Last Name" msgstr "Sukunimi" -#: ../libpurple/protocols/jabber/buddy.c:2294 msgid "The following are the results of your search" msgstr "Hakutulokset" #. current comment from Jabber User Directory users.jabber.org -#: ../libpurple/protocols/jabber/buddy.c:2379 msgid "" "Find a contact by entering the search criteria in the given fields. Note: " "Each field supports wild card searches (%)" @@ -5566,181 +3916,118 @@ "Etsi henkilöä syöttämällä hakukriteerit kenttiin. Huom: jokainen kenttä " "tukee jokerimerkkejä (%)" -#: ../libpurple/protocols/jabber/buddy.c:2399 msgid "Directory Query Failed" msgstr "Hakemistohaku epäonnistui" -#: ../libpurple/protocols/jabber/buddy.c:2400 msgid "Could not query the directory server." msgstr "Hakemistopalvelimelta ei voi hakea." #. Try to translate the message (see static message #. list in jabber_user_dir_comments[]) -#: ../libpurple/protocols/jabber/buddy.c:2434 #, c-format msgid "Server Instructions: %s" msgstr "Palvelimen ohjeet: %s" -#: ../libpurple/protocols/jabber/buddy.c:2441 msgid "Fill in one or more fields to search for any matching XMPP users." msgstr "Täytä yksi tai useampia kentistä etsiäksesi XMPP-käyttäjiä." -#: ../libpurple/protocols/jabber/buddy.c:2461 -#: ../libpurple/protocols/novell/novell.c:1497 -#: ../libpurple/protocols/oscar/oscar.c:3751 -#: ../libpurple/protocols/oscar/oscar.c:3760 msgid "Email Address" msgstr "Sähköpostiosoite" -#: ../libpurple/protocols/jabber/buddy.c:2470 -#: ../libpurple/protocols/jabber/buddy.c:2471 msgid "Search for XMPP users" msgstr "Etsi XMPP-käyttäjiä" #. "Search" -#: ../libpurple/protocols/jabber/buddy.c:2472 -#: ../libpurple/protocols/qq/group.c:123 -#: ../libpurple/protocols/qq/group_im.c:147 -#: ../libpurple/protocols/qq/sys_msg.c:177 -#: ../libpurple/protocols/qq/sys_msg.c:253 -#: ../libpurple/protocols/qq/sys_msg.c:271 -#: ../libpurple/protocols/sametime/sametime.c:5667 -#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:474 -#: ../pidgin/plugins/gevolution/assoc-buddy.c:356 msgid "Search" msgstr "Etsi" -#: ../libpurple/protocols/jabber/buddy.c:2487 msgid "Invalid Directory" msgstr "Virheellinen kansio" -#: ../libpurple/protocols/jabber/buddy.c:2504 msgid "Enter a User Directory" msgstr "Syötä käyttäjähakemisto" -#: ../libpurple/protocols/jabber/buddy.c:2505 msgid "Select a user directory to search" msgstr "Valitse käyttäjähakemisto, josta haetaan" -#: ../libpurple/protocols/jabber/buddy.c:2508 msgid "Search Directory" msgstr "Etsi hakemistosta" -#: ../libpurple/protocols/jabber/chat.c:41 -#: ../libpurple/protocols/oscar/oscar.c:5401 -#: ../libpurple/protocols/yahoo/yahoochat.c:1057 msgid "_Room:" msgstr "_Huone:" -#: ../libpurple/protocols/jabber/chat.c:47 msgid "_Server:" msgstr "_Palvelin:" -#: ../libpurple/protocols/jabber/chat.c:53 msgid "_Handle:" msgstr "_Keskustelunimi:" -#: ../libpurple/protocols/jabber/chat.c:226 #, c-format msgid "%s is not a valid room name" msgstr "%s ei ole kelvollinen keskusteluhuoneen nimi" -#: ../libpurple/protocols/jabber/chat.c:227 msgid "Invalid Room Name" msgstr "Epäkelpo keskusteluhuoneen nimi" -#: ../libpurple/protocols/jabber/chat.c:232 #, c-format msgid "%s is not a valid server name" msgstr "%s ei ole kelvollinen palvelinnimi." -#: ../libpurple/protocols/jabber/chat.c:233 -#: ../libpurple/protocols/jabber/chat.c:234 msgid "Invalid Server Name" msgstr "Palvelimen nimi ei kelpaa" -#: ../libpurple/protocols/jabber/chat.c:238 #, c-format msgid "%s is not a valid room handle" msgstr "%s ei ole kelvollinen keskustelunimi (room handle)" -#: ../libpurple/protocols/jabber/chat.c:239 -#: ../libpurple/protocols/jabber/chat.c:240 msgid "Invalid Room Handle" msgstr "Keskustelunimi ei kelpaa" -#: ../libpurple/protocols/jabber/chat.c:401 msgid "Configuration error" msgstr "Konfigurointivirhe" -#: ../libpurple/protocols/jabber/chat.c:410 -#: ../libpurple/protocols/jabber/chat.c:553 msgid "Unable to configure" msgstr "Asetusten tekeminen ei onnistu" -#: ../libpurple/protocols/jabber/chat.c:425 msgid "Room Configuration Error" msgstr "Huoneen konfigurointivirhe" -#: ../libpurple/protocols/jabber/chat.c:426 msgid "This room is not capable of being configured" msgstr "Tätä huonetta ei voi konfiguroida" -#: ../libpurple/protocols/jabber/chat.c:475 -#: ../libpurple/protocols/jabber/chat.c:544 msgid "Registration error" msgstr "Rekisteröintivirhe" -#: ../libpurple/protocols/jabber/chat.c:632 msgid "Nick changing not supported in non-MUC chatrooms" msgstr "Kutsumanimeä ei voi muuttaa muissa kuin MUC-keskusteluhuoneissa" -#: ../libpurple/protocols/jabber/chat.c:683 -#: ../libpurple/protocols/jabber/chat.c:694 -#: ../libpurple/protocols/silc/ops.c:1473 -#: ../libpurple/protocols/silc10/ops.c:1451 msgid "Error retrieving room list" msgstr "Virhe haettaessa huoneluetteloa" -#: ../libpurple/protocols/jabber/chat.c:742 msgid "Invalid Server" msgstr "Palvelin ei kelpaa" -#: ../libpurple/protocols/jabber/chat.c:786 msgid "Enter a Conference Server" msgstr "Syötä konferenssipalvelin" -#: ../libpurple/protocols/jabber/chat.c:787 msgid "Select a conference server to query" msgstr "Valitse konferenssipalvelin" -#: ../libpurple/protocols/jabber/chat.c:790 msgid "Find Rooms" msgstr "Etsi huoneita" -#: ../libpurple/protocols/jabber/jabber.c:151 msgid "You require encryption, but it is not available on this server." msgstr "Salausta vaadittu, mutta sitä ei tueta tällä palvelimella." -#: ../libpurple/protocols/jabber/jabber.c:269 -#: ../libpurple/protocols/jabber/jabber.c:324 -#: ../libpurple/protocols/jabber/jabber.c:354 msgid "Write error" msgstr "Virhe kirjoituksessa" -#: ../libpurple/protocols/jabber/jabber.c:401 msgid "Ping timeout" msgstr "Pingin aikakatkaisu" -#: ../libpurple/protocols/jabber/jabber.c:451 -#: ../libpurple/protocols/jabber/jabber.c:491 msgid "Read Error" msgstr "Virhe luettaessa" -#: ../libpurple/protocols/jabber/jabber.c:528 -#: ../libpurple/protocols/oscar/flap_connection.c:403 -#: ../libpurple/protocols/yahoo/yahoo.c:2594 -#: ../libpurple/protocols/yahoo/yahoo.c:2626 #, c-format msgid "" "Could not establish a connection with the server:\n" @@ -5749,601 +4036,410 @@ "Yhteyttä palvelimeen ei voi muodostaa:\n" "%s" -#: ../libpurple/protocols/jabber/jabber.c:585 msgid "Unable to create socket" msgstr "Pistokkeen luonti epäonnistui" -#: ../libpurple/protocols/jabber/jabber.c:635 -#: ../libpurple/protocols/jabber/jabber.c:1120 msgid "Invalid XMPP ID" msgstr "Epäkelpo XMPP-ID" -#: ../libpurple/protocols/jabber/jabber.c:642 msgid "Invalid XMPP ID. Domain must be set." msgstr "Epäkelpo XMPP-ID. Verkkoalue pitää olla asetettu." -#: ../libpurple/protocols/jabber/jabber.c:720 #, c-format msgid "Registration of %s@%s successful" msgstr "%s@%s:n rekisteröinti onnistui" -#: ../libpurple/protocols/jabber/jabber.c:726 #, c-format msgid "Registration to %s successful" msgstr "Rekisteröinti kohteeseen %s onnistui" -#: ../libpurple/protocols/jabber/jabber.c:728 -#: ../libpurple/protocols/jabber/jabber.c:729 msgid "Registration Successful" msgstr "Rekisteröinti onnistui" -#: ../libpurple/protocols/jabber/jabber.c:737 -#: ../libpurple/protocols/jabber/jabber.c:738 msgid "Registration Failed" msgstr "Rekisteröinti epäonnistui" -#: ../libpurple/protocols/jabber/jabber.c:756 #, c-format msgid "Registration from %s successfully removed" msgstr "Rekisteröinti kohteesta %s onnistuneesti poistettu" -#: ../libpurple/protocols/jabber/jabber.c:758 -#: ../libpurple/protocols/jabber/jabber.c:759 msgid "Unregistration Successful" msgstr "Rekisteröinnin poisto onnistui" -#: ../libpurple/protocols/jabber/jabber.c:767 -#: ../libpurple/protocols/jabber/jabber.c:768 msgid "Unregistration Failed" msgstr "Rekisteröinnin poisto epäonnistui" -#: ../libpurple/protocols/jabber/jabber.c:934 -#: ../libpurple/protocols/jabber/jabber.c:935 msgid "Already Registered" msgstr "Valmiiksi rekisteröity" -#: ../libpurple/protocols/jabber/jabber.c:1022 -#: ../libpurple/protocols/oscar/oscar.c:3827 -#: ../libpurple/protocols/oscar/oscar.c:3840 msgid "State" msgstr "Lääni" -#: ../libpurple/protocols/jabber/jabber.c:1026 msgid "Postal code" msgstr "Postinumero" -#: ../libpurple/protocols/jabber/jabber.c:1030 -#: ../libpurple/protocols/silc/ops.c:1049 -#: ../libpurple/protocols/silc/silc.c:988 -#: ../libpurple/protocols/silc/util.c:563 -#: ../libpurple/protocols/silc10/ops.c:1069 -#: ../libpurple/protocols/silc10/silc.c:689 -#: ../libpurple/protocols/silc10/util.c:557 msgid "Phone" msgstr "Puhelin" -#: ../libpurple/protocols/jabber/jabber.c:1038 msgid "Date" msgstr "Päiväys" -#: ../libpurple/protocols/jabber/jabber.c:1042 msgid "Unregister" msgstr "Rekisteröinnin poisto" -#: ../libpurple/protocols/jabber/jabber.c:1049 msgid "" "Please fill out the information below to change your account registration." msgstr "Syötä alla olevat tiedot muuttaaksesi käyttäjätilin rekisteröimistä." -#: ../libpurple/protocols/jabber/jabber.c:1052 msgid "Please fill out the information below to register your new account." msgstr "Syötä alla olevat tiedot rekisteröidäksesi uuden tilin." -#: ../libpurple/protocols/jabber/jabber.c:1060 -#: ../libpurple/protocols/jabber/jabber.c:1061 msgid "Register New XMPP Account" msgstr "Rekisteröi uusi XMPP-tili" -#: ../libpurple/protocols/jabber/jabber.c:1062 -#: ../libpurple/protocols/jabber/jabber.c:1071 msgid "Register" msgstr "Rekisteröi" -#: ../libpurple/protocols/jabber/jabber.c:1067 #, c-format msgid "Change Account Registration at %s" msgstr "Vaihda tilin rekisteröitymistä kohteessa %s" -#: ../libpurple/protocols/jabber/jabber.c:1068 #, c-format msgid "Register New Account at %s" msgstr "Rekisteröi uusi tili kohteessa %s" -#: ../libpurple/protocols/jabber/jabber.c:1071 msgid "Change Registration" msgstr "Muuta rekisteröitymistä" -#: ../libpurple/protocols/jabber/jabber.c:1180 -#: ../libpurple/protocols/jabber/jabber.c:1181 msgid "Error unregistering account" msgstr "Virhe poistettaessa käyttäjätilin rekisteröitymistä" -#: ../libpurple/protocols/jabber/jabber.c:1186 -#: ../libpurple/protocols/jabber/jabber.c:1187 msgid "Account successfully unregistered" msgstr "Käyttäjätilin rekisteröinti poistettiin onnistuneesti" -#: ../libpurple/protocols/jabber/jabber.c:1350 msgid "Initializing Stream" msgstr "Alustetaan datavirtaa" -#: ../libpurple/protocols/jabber/jabber.c:1355 msgid "Initializing SSL/TLS" msgstr "Alustetaan SSL/TLS-salausta" -#: ../libpurple/protocols/jabber/jabber.c:1359 -#: ../libpurple/protocols/msn/session.c:408 -#: ../libpurple/protocols/msnp9/session.c:360 msgid "Authenticating" msgstr "Todennetaan" -#: ../libpurple/protocols/jabber/jabber.c:1368 msgid "Re-initializing Stream" msgstr "Uudelleenalustetaan datavirtaa" -#: ../libpurple/protocols/jabber/jabber.c:1462 -#: ../libpurple/protocols/jabber/jabber.c:1920 -#: ../libpurple/protocols/jabber/jabber.c:1963 -#: ../libpurple/protocols/jabber/jabber.c:2001 -#: ../libpurple/protocols/oscar/oscar.c:827 -#: ../libpurple/protocols/oscar/oscar.c:5715 msgid "Not Authorized" msgstr "Ei valtuuksia" -#: ../libpurple/protocols/jabber/jabber.c:1510 msgid "Both" msgstr "molemmille" -#: ../libpurple/protocols/jabber/jabber.c:1512 msgid "From (To pending)" msgstr "vain sinulle (odottaa lupaa)" -#: ../libpurple/protocols/jabber/jabber.c:1514 msgid "From" msgstr "Lähettäjä" -#: ../libpurple/protocols/jabber/jabber.c:1517 msgid "To" msgstr "vain sinulta" -#: ../libpurple/protocols/jabber/jabber.c:1519 msgid "None (To pending)" msgstr "Ei mitään (odottaa lupaa)" -#: ../libpurple/protocols/jabber/jabber.c:1521 -#: ../pidgin/plugins/gevolution/eds-utils.c:73 -#: ../pidgin/plugins/gevolution/eds-utils.c:86 msgid "None" msgstr "Ei mitään" -#: ../libpurple/protocols/jabber/jabber.c:1524 msgid "Subscription" msgstr "Tilailmoitus" -#: ../libpurple/protocols/jabber/jabber.c:1534 -#: ../libpurple/protocols/jabber/jabber.c:1537 -#: ../libpurple/protocols/jabber/jabber.c:1612 -#: ../libpurple/protocols/jabber/jabber.c:1626 -#: ../libpurple/protocols/jabber/jabber.c:1640 -#: ../libpurple/protocols/jabber/jabber.c:1654 -#: ../libpurple/protocols/jabber/jabber.c:1668 -#: ../libpurple/protocols/jabber/usermood.c:181 -#: ../libpurple/protocols/silc/buddy.c:1560 -#: ../libpurple/protocols/silc/ops.c:1225 -#: ../libpurple/protocols/silc10/buddy.c:1560 -#: ../libpurple/protocols/silc10/ops.c:1207 msgid "Mood" msgstr "Mieliala" -#: ../libpurple/protocols/jabber/jabber.c:1546 -#: ../libpurple/protocols/msn/msn.c:656 msgid "Now Listening" msgstr "Kuuntelee nyt" -#: ../libpurple/protocols/jabber/jabber.c:1613 -#: ../libpurple/protocols/jabber/jabber.c:1627 -#: ../libpurple/protocols/jabber/jabber.c:1641 -#: ../libpurple/protocols/jabber/jabber.c:1655 -#: ../libpurple/protocols/jabber/jabber.c:1669 msgid "Mood Text" msgstr "Mielialan teksti" -#: ../libpurple/protocols/jabber/jabber.c:1615 -#: ../libpurple/protocols/jabber/jabber.c:1629 -#: ../libpurple/protocols/jabber/jabber.c:1643 -#: ../libpurple/protocols/jabber/jabber.c:1657 -#: ../libpurple/protocols/jabber/jabber.c:1671 msgid "Allow Buzz" msgstr "Salli äänimerkki" -#: ../libpurple/protocols/jabber/jabber.c:1689 msgid "Tune Artist" msgstr "Kappaleen esittäjä" -#: ../libpurple/protocols/jabber/jabber.c:1690 msgid "Tune Title" msgstr "Kappaleen nimi" -#: ../libpurple/protocols/jabber/jabber.c:1691 msgid "Tune Album" msgstr "Kappaleen levy" -#: ../libpurple/protocols/jabber/jabber.c:1692 msgid "Tune Genre" msgstr "Kappaleen tyylilaji" -#: ../libpurple/protocols/jabber/jabber.c:1693 msgid "Tune Comment" msgstr "Kappaleen kommentti" -#: ../libpurple/protocols/jabber/jabber.c:1694 msgid "Tune Track" msgstr "Kappaleen numero" -#: ../libpurple/protocols/jabber/jabber.c:1695 msgid "Tune Time" msgstr "Kappaleen kesto" -#: ../libpurple/protocols/jabber/jabber.c:1696 msgid "Tune Year" msgstr "Kappaleen vuosi" -#: ../libpurple/protocols/jabber/jabber.c:1697 msgid "Tune URL" msgstr "Kappaleen URL" -#: ../libpurple/protocols/jabber/jabber.c:1713 msgid "Password Changed" msgstr "Salasana muutettu" -#: ../libpurple/protocols/jabber/jabber.c:1714 msgid "Your password has been changed." msgstr "Salasana vaihdettu" -#: ../libpurple/protocols/jabber/jabber.c:1720 -#: ../libpurple/protocols/jabber/jabber.c:1721 msgid "Error changing password" msgstr "Virhe vaihdettaessa salasanaa" -#: ../libpurple/protocols/jabber/jabber.c:1778 msgid "Password (again)" msgstr "Salasana (uudelleen)" -#: ../libpurple/protocols/jabber/jabber.c:1784 -#: ../libpurple/protocols/jabber/jabber.c:1785 msgid "Change XMPP Password" msgstr "Vaihda XMPP-salasana" -#: ../libpurple/protocols/jabber/jabber.c:1785 msgid "Please enter your new password" msgstr "Anna uusi salasanasi" -#: ../libpurple/protocols/jabber/jabber.c:1799 -#: ../libpurple/protocols/oscar/oscar.c:6502 -#: ../libpurple/protocols/silc/silc.c:1309 -#: ../libpurple/protocols/silc10/silc.c:1010 msgid "Set User Info..." msgstr "Aseta käyttäjätiedot..." #. if (js->protocol_options & CHANGE_PASSWORD) { -#: ../libpurple/protocols/jabber/jabber.c:1804 -#: ../libpurple/protocols/oscar/oscar.c:6513 -#: ../libpurple/protocols/silc/silc.c:1305 -#: ../libpurple/protocols/silc10/silc.c:1006 msgid "Change Password..." msgstr "Vaihda salasana..." #. } -#: ../libpurple/protocols/jabber/jabber.c:1809 msgid "Search for Users..." msgstr "Etsi käyttäjiä..." -#: ../libpurple/protocols/jabber/jabber.c:1900 msgid "Bad Request" msgstr "Virheellinen pyyntö" -#: ../libpurple/protocols/jabber/jabber.c:1902 msgid "Conflict" msgstr "Ristiriita" -#: ../libpurple/protocols/jabber/jabber.c:1904 msgid "Feature Not Implemented" msgstr "Ominaisuutta ei ole implementoitu." -#: ../libpurple/protocols/jabber/jabber.c:1906 msgid "Forbidden" msgstr "Estetty" -#: ../libpurple/protocols/jabber/jabber.c:1908 msgid "Gone" msgstr "Poistunut" -#: ../libpurple/protocols/jabber/jabber.c:1910 -#: ../libpurple/protocols/jabber/jabber.c:1991 msgid "Internal Server Error" msgstr "Sisäinen palvelinvirhe" -#: ../libpurple/protocols/jabber/jabber.c:1912 msgid "Item Not Found" msgstr "Kohdetta ei löytynyt" -#: ../libpurple/protocols/jabber/jabber.c:1914 msgid "Malformed XMPP ID" msgstr "Muodoltaan virheellinen XMPP-ID" -#: ../libpurple/protocols/jabber/jabber.c:1916 msgid "Not Acceptable" msgstr "Ei kelvollinen" -#: ../libpurple/protocols/jabber/jabber.c:1918 msgid "Not Allowed" msgstr "Ei sallittu" -#: ../libpurple/protocols/jabber/jabber.c:1922 msgid "Payment Required" msgstr "Vaatii maksun" -#: ../libpurple/protocols/jabber/jabber.c:1924 msgid "Recipient Unavailable" msgstr "Vastaanottaja ei saatavilla." -#: ../libpurple/protocols/jabber/jabber.c:1928 msgid "Registration Required" msgstr "Vaatii rekisteröinnin" -#: ../libpurple/protocols/jabber/jabber.c:1930 msgid "Remote Server Not Found" msgstr "Palvelinta ei löytynyt" -#: ../libpurple/protocols/jabber/jabber.c:1932 msgid "Remote Server Timeout" msgstr "Palvelin aikakatkaisi" -#: ../libpurple/protocols/jabber/jabber.c:1934 msgid "Server Overloaded" msgstr "Palvelin ylikuormitettu" -#: ../libpurple/protocols/jabber/jabber.c:1936 msgid "Service Unavailable" msgstr "Palvelu ei käytettävissä" -#: ../libpurple/protocols/jabber/jabber.c:1938 msgid "Subscription Required" msgstr "Vaatii tilailmoitukset" -#: ../libpurple/protocols/jabber/jabber.c:1940 msgid "Unexpected Request" msgstr "Odottamaton pyyntö" -#: ../libpurple/protocols/jabber/jabber.c:1948 msgid "Authorization Aborted" msgstr "Valtuutus keskeytetty" -#: ../libpurple/protocols/jabber/jabber.c:1950 msgid "Incorrect encoding in authorization" msgstr "Väärä merkistö valtuutusviestissä" -#: ../libpurple/protocols/jabber/jabber.c:1952 msgid "Invalid authzid" msgstr "Epäkelpo authzid" -#: ../libpurple/protocols/jabber/jabber.c:1954 msgid "Invalid Authorization Mechanism" msgstr "Epäkelpo tunnistautumismekanismi" -#: ../libpurple/protocols/jabber/jabber.c:1957 msgid "Authorization mechanism too weak" msgstr "Tunnistautumismekanismi liian heikko" -#: ../libpurple/protocols/jabber/jabber.c:1965 msgid "Temporary Authentication Failure" msgstr "Väliaikainen todennusvirhe" -#: ../libpurple/protocols/jabber/jabber.c:1968 msgid "Authentication Failure" msgstr "Todennus epäonnistui" -#: ../libpurple/protocols/jabber/jabber.c:1976 msgid "Bad Format" msgstr "Väärä muoto" -#: ../libpurple/protocols/jabber/jabber.c:1978 msgid "Bad Namespace Prefix" msgstr "Väärä nimiavaruuden etuliite" -#: ../libpurple/protocols/jabber/jabber.c:1981 msgid "Resource Conflict" msgstr "Sijaintikonflikti" -#: ../libpurple/protocols/jabber/jabber.c:1983 -#: ../libpurple/protocols/silc/silc.c:350 -#: ../libpurple/protocols/silc10/ops.c:1725 msgid "Connection Timeout" msgstr "Ei yhteyttä määräajassa" -#: ../libpurple/protocols/jabber/jabber.c:1985 msgid "Host Gone" msgstr "Verkkoisäntä kadonnut" -#: ../libpurple/protocols/jabber/jabber.c:1987 msgid "Host Unknown" msgstr "Tuntematon isäntä" -#: ../libpurple/protocols/jabber/jabber.c:1989 msgid "Improper Addressing" msgstr "Vääränlainen osoitus" -#: ../libpurple/protocols/jabber/jabber.c:1993 msgid "Invalid ID" msgstr "Epäkelpo ID" -#: ../libpurple/protocols/jabber/jabber.c:1995 msgid "Invalid Namespace" msgstr "Väärä nimiavaruus" -#: ../libpurple/protocols/jabber/jabber.c:1997 msgid "Invalid XML" msgstr "Epäkelpo XML" -#: ../libpurple/protocols/jabber/jabber.c:1999 msgid "Non-matching Hosts" msgstr "Verkkoisännät eivät täsmää" -#: ../libpurple/protocols/jabber/jabber.c:2003 msgid "Policy Violation" msgstr "Menettelykäytäntörikkomus" -#: ../libpurple/protocols/jabber/jabber.c:2005 msgid "Remote Connection Failed" msgstr "Etäyhteydessä yhteydessä virhe" -#: ../libpurple/protocols/jabber/jabber.c:2007 msgid "Resource Constraint" msgstr "Sijaintirajoite" -#: ../libpurple/protocols/jabber/jabber.c:2009 msgid "Restricted XML" msgstr "Rajoitettu XML" -#: ../libpurple/protocols/jabber/jabber.c:2011 msgid "See Other Host" msgstr "Etsi toinen isäntä" -#: ../libpurple/protocols/jabber/jabber.c:2013 msgid "System Shutdown" msgstr "Järjestelmän alasajo" -#: ../libpurple/protocols/jabber/jabber.c:2015 msgid "Undefined Condition" msgstr "Määrittelemätön tila" -#: ../libpurple/protocols/jabber/jabber.c:2017 msgid "Unsupported Encoding" msgstr "Merkistöä ei tueta" -#: ../libpurple/protocols/jabber/jabber.c:2019 msgid "Unsupported Stanza Type" msgstr "Säkeistötyyppiä (stanza type) ei tuettu" -#: ../libpurple/protocols/jabber/jabber.c:2021 msgid "Unsupported Version" msgstr "Versiota ei tueta" -#: ../libpurple/protocols/jabber/jabber.c:2023 msgid "XML Not Well Formed" msgstr "Huonosti muotoiltua XML:ää" -#: ../libpurple/protocols/jabber/jabber.c:2025 msgid "Stream Error" msgstr "Datavirtavirhe" -#: ../libpurple/protocols/jabber/jabber.c:2110 #, c-format msgid "Unable to ban user %s" msgstr "Käyttäjää %s ei voi estää" -#: ../libpurple/protocols/jabber/jabber.c:2130 #, c-format msgid "Unknown affiliation: \"%s\"" msgstr "Tuntematon kytkös: \"%s\"" -#: ../libpurple/protocols/jabber/jabber.c:2135 #, c-format msgid "Unable to affiliate user %s as \"%s\"" msgstr "Käyttäjälle %s ei voi tehdä kytköstä \"%s\"" -#: ../libpurple/protocols/jabber/jabber.c:2154 #, c-format msgid "Unknown role: \"%s\"" msgstr "Tuntematon rooli: \"%s\"" -#: ../libpurple/protocols/jabber/jabber.c:2159 #, c-format msgid "Unable to set role \"%s\" for user: %s" msgstr "Roolia \"%s\" ei voi asettaa käyttäjälle: %s" -#: ../libpurple/protocols/jabber/jabber.c:2212 #, c-format msgid "Unable to kick user %s" msgstr "Käyttäjää %s ei voi potkaista ulos." -#: ../libpurple/protocols/jabber/jabber.c:2243 #, c-format msgid "Unable to ping user %s" msgstr "Käyttäjää %s ei voi pingata." -#: ../libpurple/protocols/jabber/jabber.c:2261 -#: ../libpurple/protocols/jabber/jabber.c:2272 #, c-format msgid "Unable to buzz, because there is nothing known about user %s." msgstr "Äänimerkkiä ei voi lähettää, koska mitään ei tiedetä käyttäjästä %s." -#: ../libpurple/protocols/jabber/jabber.c:2267 #, c-format msgid "Unable to buzz, because user %s might be offline." msgstr "" "Äänimerkkiä ei voi lähettää, koska käyttäjä %s voi olla poissa linjoilta." -#: ../libpurple/protocols/jabber/jabber.c:2298 #, c-format msgid "Unable to buzz, because the user %s does not support it." msgstr "Äänimerkkiä ei voi lähettää, koska käyttäjä %s ei tue sitä." #. Yahoo only supports one attention command: the 'buzz'. #. This is index number YAHOO_BUZZ. -#: ../libpurple/protocols/jabber/jabber.c:2318 -#: ../libpurple/protocols/yahoo/yahoo.c:4167 msgid "Buzz" msgstr "Tööttää" -#: ../libpurple/protocols/jabber/jabber.c:2319 -#: ../libpurple/protocols/jabber/message.c:308 -#: ../libpurple/protocols/yahoo/yahoo.c:4168 #, c-format msgid "%s has buzzed you!" msgstr "%s on töötännyt sinulle." -#: ../libpurple/protocols/jabber/jabber.c:2319 -#: ../libpurple/protocols/yahoo/yahoo.c:4168 #, c-format msgid "Buzzing %s..." msgstr "Töötätään tuttavalle %s..." -#: ../libpurple/protocols/jabber/jabber.c:2350 msgid "config: Configure a chat room." msgstr "config: Konfiguroi ryhmäkeskusteluhuone." -#: ../libpurple/protocols/jabber/jabber.c:2354 msgid "configure: Configure a chat room." msgstr "configure: Konfiguroi ryhmäkeskusteluhuone." -#: ../libpurple/protocols/jabber/jabber.c:2363 msgid "part [room]: Leave the room." msgstr "part [huone]: Poistu huoneesta." -#: ../libpurple/protocols/jabber/jabber.c:2368 msgid "register: Register with a chat room." msgstr "register: Rekisteröidy ryhmäkeskusteluhuoneeseen." -#: ../libpurple/protocols/jabber/jabber.c:2374 msgid "topic [new topic]: View or change the topic." msgstr "topic [uusi aihe]: Näytä tai vaihda aihe." -#: ../libpurple/protocols/jabber/jabber.c:2380 msgid "ban <user> [reason]: Ban a user from the room." msgstr "ban <käyttäjä> [syy]: Estä käyttäjä huoneesta." -#: ../libpurple/protocols/jabber/jabber.c:2386 msgid "" "affiliate <user> <owner|admin|member|outcast|none>: Set a user's " "affiliation with the room." @@ -6351,7 +4447,6 @@ "affiliate <user> <owner|admin|member|outcast|none>: Aseta " "käyttäjän käyttäjäluokka tälle huoneelle." -#: ../libpurple/protocols/jabber/jabber.c:2392 msgid "" "role <user> <moderator|participant|visitor|none>: Set a user's " "role in the room." @@ -6359,31 +4454,24 @@ "role <user> <moderator|participant|visitor|none>: Aseta " "käyttäjän rooli huoneessa." -#: ../libpurple/protocols/jabber/jabber.c:2398 msgid "invite <user> [message]: Invite a user to the room." msgstr "invite <käyttäjä> [viesti]: Kutsu käyttäjä huoneeseen." -#: ../libpurple/protocols/jabber/jabber.c:2404 msgid "join: <room> [password]: Join a chat on this server." msgstr "" "join: <huone> [salasana]: Liity ryhmäkeskusteluun tällä palvelimella." -#: ../libpurple/protocols/jabber/jabber.c:2410 msgid "kick <user> [reason]: Kick a user from the room." msgstr "kick <käyttäjä> [syy]: Potkaise käyttäjä ulos huoneesta." -#: ../libpurple/protocols/jabber/jabber.c:2415 msgid "" "msg <user> <message>: Send a private message to another user." msgstr "" "msh <käyttäjä> <viesti>: Lähetä yksityisviesti käyttäjälle." -#: ../libpurple/protocols/jabber/jabber.c:2421 msgid "ping <jid>:\tPing a user/component/server." msgstr "ping <jid>:\tPingaa käyttäjää/komponenttia/palvelinta." -#: ../libpurple/protocols/jabber/jabber.c:2426 -#: ../libpurple/protocols/yahoo/yahoo.c:4191 msgid "buzz: Buzz a user to get their attention" msgstr "buzz: Tööttää tuttavalle äänimerkki huomion saamiseksi" @@ -6397,96 +4485,70 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/jabber/libxmpp.c:170 -#: ../libpurple/protocols/jabber/libxmpp.c:172 msgid "XMPP Protocol Plugin" msgstr "XMPP-yhteyskäytäntöliitännäinen" #. Translators: 'domain' is used here in the context of Internet domains, e.g. pidgin.im -#: ../libpurple/protocols/jabber/libxmpp.c:205 ../pidgin/gtkaccount.c:478 msgid "Domain" msgstr "Palvelin" -#: ../libpurple/protocols/jabber/libxmpp.c:213 msgid "Require SSL/TLS" msgstr "Vaadi SSL/TLS" -#: ../libpurple/protocols/jabber/libxmpp.c:217 msgid "Force old (port 5223) SSL" msgstr "Käytä vanhaa (portti 5223) SSL:ää" -#: ../libpurple/protocols/jabber/libxmpp.c:222 msgid "Allow plaintext auth over unencrypted streams" msgstr "Salli salaamaton tunnistautuminen salaamattoman yhteyden yli" -#: ../libpurple/protocols/jabber/libxmpp.c:227 -#: ../libpurple/protocols/myspace/myspace.c:3475 -#: ../libpurple/protocols/simple/simple.c:2105 msgid "Connect port" msgstr "Yhdistä porttiin" #. TODO: default to automatically try different ports. Make the user be #. * able to set the first port to try (like LastConnectedPort in Windows client). #. Account options -#: ../libpurple/protocols/jabber/libxmpp.c:231 -#: ../libpurple/protocols/myspace/myspace.c:3472 -#: ../libpurple/protocols/silc/silc.c:2139 -#: ../libpurple/protocols/silc10/silc.c:1863 ../pidgin/gtkaccount.c:811 msgid "Connect server" msgstr "Yhdistä palvelimeen" -#: ../libpurple/protocols/jabber/libxmpp.c:236 msgid "File transfer proxies" msgstr "Tiedostonsiirron välipalvelimet" -#: ../libpurple/protocols/jabber/message.c:106 #, c-format msgid "%s has left the conversation." msgstr "%s on lähtenyt keskustelusta." -#: ../libpurple/protocols/jabber/message.c:162 #, c-format msgid "Message from %s" msgstr "Viesti %s:lta" -#: ../libpurple/protocols/jabber/message.c:226 #, c-format msgid "%s has set the topic to: %s" msgstr "%s vaihtoi aiheeksi: %s" -#: ../libpurple/protocols/jabber/message.c:228 #, c-format msgid "The topic is: %s" msgstr "Aihe on: %s" -#: ../libpurple/protocols/jabber/message.c:276 #, c-format msgid "Message delivery to %s failed: %s" msgstr "Viestin toimitus %s:lle epäonnistui: %s" -#: ../libpurple/protocols/jabber/message.c:279 msgid "XMPP Message Error" msgstr "XMPP-viestivirhe" -#: ../libpurple/protocols/jabber/message.c:408 -#, c-format -msgid " (Code %s)" -msgstr " (Koodi %s)" - -#: ../libpurple/protocols/jabber/parser.c:198 +#, c-format +msgid "(Code %s)" +msgstr "(Koodi %s)" + msgid "XML Parse error" msgstr "Virhe XML-jäsennyksessä" -#: ../libpurple/protocols/jabber/presence.c:453 msgid "Unknown Error in presence" msgstr "Tuntematon virhe tavoitettavuudessa" -#: ../libpurple/protocols/jabber/presence.c:534 -#: ../libpurple/protocols/jabber/presence.c:535 msgid "Create New Room" msgstr "Luo uusi huone" -#: ../libpurple/protocols/jabber/presence.c:536 msgid "" "You are creating a new room. Would you like to configure it, or accept the " "default settings?" @@ -6494,88 +4556,66 @@ "Olet luomassa uutta huonetta. Haluatko muuttaa asetuksia vai käytetäänkö " "oletusasetuksia?" -#: ../libpurple/protocols/jabber/presence.c:542 msgid "_Configure Room" msgstr "_Aseta huoneen asetuksia" -#: ../libpurple/protocols/jabber/presence.c:543 msgid "_Accept Defaults" msgstr "_Hyväksy oletusasetukset" -#: ../libpurple/protocols/jabber/presence.c:585 +#, c-format +msgid "Error joining chat %s" +msgstr "Virhe liityttäessä ryhmäkeskusteluun %s" + #, c-format msgid "Error in chat %s" msgstr "Virhe ryhmäkeskustelussa: %s" -#: ../libpurple/protocols/jabber/presence.c:589 -#, c-format -msgid "Error joining chat %s" -msgstr "Virhe liityttäessä ryhmäkeskusteluun %s" - -#: ../libpurple/protocols/jabber/si.c:1018 #, c-format msgid "Unable to send file to %s, user does not support file transfers" msgstr "" "Tiedostoa ei voi lähettää käyttäjälle %s, käyttäjä ei tue tiedostonsiirtoja" -#: ../libpurple/protocols/jabber/si.c:1019 -#: ../libpurple/protocols/jabber/si.c:1020 -#: ../libpurple/protocols/jabber/si.c:1089 msgid "File Send Failed" msgstr "Tiedoston lähetys epäonnistui" -#: ../libpurple/protocols/jabber/si.c:1082 #, c-format msgid "Unable to send file to %s, invalid JID" msgstr "Tiedostoa ei voi lähettää käyttäjälle %s, virheellinen JID." -#: ../libpurple/protocols/jabber/si.c:1084 #, c-format msgid "Unable to send file to %s, user is not online" msgstr "Tiedostoa ei voi lähettää käyttäjälle %s, käyttäjä ei ole linjoilla" -#: ../libpurple/protocols/jabber/si.c:1086 #, c-format msgid "Unable to send file to %s, not subscribed to user presence" msgstr "" "Tiedostoa ei voi lähettää käyttäjälle %s, käyttäjä ei tue tiedostonsiirtoja" -#: ../libpurple/protocols/jabber/si.c:1101 #, c-format msgid "Please select the resource of %s to which you would like to send a file" msgstr "Valitse käyttäjän %s sijainti johon haluat lähettää tiedoston" -#: ../libpurple/protocols/jabber/si.c:1117 msgid "Select a Resource" msgstr "Valitse sijainti" -#: ../libpurple/protocols/jabber/usermood.c:194 -#: ../libpurple/protocols/jabber/usermood.c:195 msgid "Edit User Mood" msgstr "Muuta käyttäjän mielialaa" -#: ../libpurple/protocols/jabber/usermood.c:196 msgid "Please select your mood from the list." msgstr "Valitse mielialasi luettelosta." -#: ../libpurple/protocols/jabber/usermood.c:198 -#: ../libpurple/protocols/jabber/usernick.c:78 msgid "Set" msgstr "Aseta" -#: ../libpurple/protocols/jabber/usermood.c:206 msgid "Set Mood..." msgstr "Aseta mieliala..." -#: ../libpurple/protocols/jabber/usernick.c:76 msgid "Set User Nickname" msgstr "Aseta käyttäjän kutsumanimi" -#: ../libpurple/protocols/jabber/usernick.c:76 msgid "Please specify a new nickname for you." msgstr "Syötä uusi kutsumanimesi." -#: ../libpurple/protocols/jabber/usernick.c:77 msgid "" "This information is visible to all contacts on your contact list, so choose " "something appropriate." @@ -6583,30 +4623,22 @@ "Tämä tieto on näkyvillä kaikille tuttavissa oleville kontakteille, joten " "valitse jotain soveliasta." -#: ../libpurple/protocols/jabber/usernick.c:100 msgid "Set Nickname..." msgstr "Aseta kutsumanimi..." -#: ../libpurple/protocols/jabber/xdata.c:381 msgid "Actions" msgstr "Toiminnot" -#: ../libpurple/protocols/jabber/xdata.c:383 msgid "Select an action" msgstr "Valitse toiminto" -#: ../libpurple/protocols/msn/contact.c:782 msgid "Unable to retrieve MSN Address Book" msgstr "MSN-osoitekirjaa ei onnistuttu noutamaan" -#: ../libpurple/protocols/msn/dialog.c:118 -#: ../libpurple/protocols/msnp9/dialog.c:110 #, c-format msgid "Buddy list synchronization issue in %s (%s)" msgstr "Tuttavien synkronointiongelma käyttäjätilillä %s (%s)" -#: ../libpurple/protocols/msn/dialog.c:124 -#: ../libpurple/protocols/msnp9/dialog.c:116 #, c-format msgid "" "%s on the local list is inside the group \"%s\" but not on the server list. " @@ -6615,8 +4647,6 @@ "%s paikallisissa tuttavissa on ryhmässä \"%s\" mutta ei ole palvelimen " "tuttavissa. Haluatko että tämä tuttava lisätään?" -#: ../libpurple/protocols/msn/dialog.c:132 -#: ../libpurple/protocols/msnp9/dialog.c:124 #, c-format msgid "" "%s is on the local list but not on the server list. Do you want this buddy " @@ -6625,389 +4655,261 @@ "%s paikallisella tuttavissa mutta ei palvelimen. Haluatko että tämä tuttava " "lisätään?" -#: ../libpurple/protocols/msn/error.c:36 -#: ../libpurple/protocols/msnp9/error.c:36 #, c-format msgid "Unable to parse message" msgstr "Viestin jäsennys epäonnistui" -#: ../libpurple/protocols/msn/error.c:41 -#: ../libpurple/protocols/msnp9/error.c:41 #, c-format msgid "Syntax Error (probably a client bug)" msgstr "Syntaksivirhe (todennäköisesti ohjelmistovirhe)" -#: ../libpurple/protocols/msn/error.c:46 -#: ../libpurple/protocols/msnp9/error.c:46 #, c-format msgid "Invalid email address" msgstr "Epäkelpo sähköpostiosoite" -#: ../libpurple/protocols/msn/error.c:49 -#: ../libpurple/protocols/msnp9/error.c:49 #, c-format msgid "User does not exist" msgstr "Käyttäjää ei ole" -#: ../libpurple/protocols/msn/error.c:53 -#: ../libpurple/protocols/msnp9/error.c:53 #, c-format msgid "Fully qualified domain name missing" msgstr "Täysin kelvollinen verkkoalueen nimi puuttuu" -#: ../libpurple/protocols/msn/error.c:56 -#: ../libpurple/protocols/msnp9/error.c:56 #, c-format msgid "Already logged in" msgstr "Olet jo kirjautuneena sisään" -#: ../libpurple/protocols/msn/error.c:59 -#: ../libpurple/protocols/msnp9/error.c:59 #, c-format msgid "Invalid username" msgstr "Epäkelpo käyttäjänimi." -#: ../libpurple/protocols/msn/error.c:62 -#: ../libpurple/protocols/msnp9/error.c:62 #, c-format msgid "Invalid friendly name" msgstr "Epäkelpo lempinimi" -#: ../libpurple/protocols/msn/error.c:65 -#: ../libpurple/protocols/msnp9/error.c:65 #, c-format msgid "List full" msgstr "Lista täynnä" -#: ../libpurple/protocols/msn/error.c:68 -#: ../libpurple/protocols/msnp9/error.c:68 #, c-format msgid "Already there" msgstr "On jo siellä" -#: ../libpurple/protocols/msn/error.c:72 -#: ../libpurple/protocols/msnp9/error.c:72 #, c-format msgid "Not on list" msgstr "Ei tuttavissa" -#: ../libpurple/protocols/msn/error.c:75 -#: ../libpurple/protocols/msnp9/error.c:75 -#: ../libpurple/protocols/zephyr/zephyr.c:760 #, c-format msgid "User is offline" msgstr "Käyttäjä on poissa linjoilta" -#: ../libpurple/protocols/msn/error.c:78 -#: ../libpurple/protocols/msnp9/error.c:78 #, c-format msgid "Already in the mode" msgstr "Olet jo kyseisessä tilassa" -#: ../libpurple/protocols/msn/error.c:82 -#: ../libpurple/protocols/msnp9/error.c:82 #, c-format msgid "Already in opposite list" msgstr "On jo vastakkaisessa listassa" -#: ../libpurple/protocols/msn/error.c:86 -#: ../libpurple/protocols/msnp9/error.c:86 #, c-format msgid "Too many groups" msgstr "Liian monta ryhmää" -#: ../libpurple/protocols/msn/error.c:89 -#: ../libpurple/protocols/msnp9/error.c:89 #, c-format msgid "Invalid group" msgstr "Epäkelpo ryhmä" -#: ../libpurple/protocols/msn/error.c:92 -#: ../libpurple/protocols/msnp9/error.c:92 #, c-format msgid "User not in group" msgstr "Käyttäjä ei ole ryhmässä" -#: ../libpurple/protocols/msn/error.c:95 -#: ../libpurple/protocols/msnp9/error.c:95 #, c-format msgid "Group name too long" msgstr "Ryhmän nimi liian pitkä" -#: ../libpurple/protocols/msn/error.c:98 -#: ../libpurple/protocols/msnp9/error.c:98 #, c-format msgid "Cannot remove group zero" msgstr "Ryhmää nolla ei voi poistaa" -#: ../libpurple/protocols/msn/error.c:103 -#: ../libpurple/protocols/msnp9/error.c:103 #, c-format msgid "Tried to add a user to a group that doesn't exist" msgstr "Yritettiin lisätä käyttäjää ryhmään jota ei ole" -#: ../libpurple/protocols/msn/error.c:107 -#: ../libpurple/protocols/msnp9/error.c:107 #, c-format msgid "Switchboard failed" msgstr "Kytkentä epäonnistui" -#: ../libpurple/protocols/msn/error.c:111 -#: ../libpurple/protocols/msnp9/error.c:111 #, c-format msgid "Notify transfer failed" msgstr "Siirrosta tiedottaminen epäonnistui" -#: ../libpurple/protocols/msn/error.c:116 -#: ../libpurple/protocols/msnp9/error.c:116 #, c-format msgid "Required fields missing" msgstr "Vaadittuja kenttiä puuttuu" -#: ../libpurple/protocols/msn/error.c:120 -#: ../libpurple/protocols/msnp9/error.c:120 #, c-format msgid "Too many hits to a FND" msgstr "Liian monta osumaa FND:hen" -#: ../libpurple/protocols/msn/error.c:124 -#: ../libpurple/protocols/msnp9/error.c:124 -#: ../libpurple/protocols/oscar/oscar.c:121 #, c-format msgid "Not logged in" msgstr "Et ole kirjautunut sisään." -#: ../libpurple/protocols/msn/error.c:128 -#: ../libpurple/protocols/msnp9/error.c:128 #, c-format msgid "Service temporarily unavailable" msgstr "Palvelu ei tilapäisesti ole käytettävissä" -#: ../libpurple/protocols/msn/error.c:131 -#: ../libpurple/protocols/msnp9/error.c:131 #, c-format msgid "Database server error" msgstr "Tietokantapalvelimen virhe" -#: ../libpurple/protocols/msn/error.c:135 -#: ../libpurple/protocols/msnp9/error.c:135 #, c-format msgid "Command disabled" msgstr "Komento poistettu käytöstä" -#: ../libpurple/protocols/msn/error.c:139 -#: ../libpurple/protocols/msnp9/error.c:139 #, c-format msgid "File operation error" msgstr "Tiedostotoiminnossa virhe" -#: ../libpurple/protocols/msn/error.c:143 -#: ../libpurple/protocols/msnp9/error.c:143 #, c-format msgid "Memory allocation error" msgstr "Muistin varaamisessa virhe" -#: ../libpurple/protocols/msn/error.c:147 -#: ../libpurple/protocols/msnp9/error.c:147 #, c-format msgid "Wrong CHL value sent to server" msgstr "Väärä CHL-arvo lähetetty palvelimelle" -#: ../libpurple/protocols/msn/error.c:152 -#: ../libpurple/protocols/msnp9/error.c:152 #, c-format msgid "Server busy" msgstr "Palvelimella ruuhkaa" -#: ../libpurple/protocols/msn/error.c:155 -#: ../libpurple/protocols/msn/error.c:170 -#: ../libpurple/protocols/msn/error.c:230 -#: ../libpurple/protocols/msnp9/error.c:155 -#: ../libpurple/protocols/msnp9/error.c:170 -#: ../libpurple/protocols/msnp9/error.c:230 #, c-format msgid "Server unavailable" msgstr "Palvelin on tavoittamattomissa" -#: ../libpurple/protocols/msn/error.c:158 -#: ../libpurple/protocols/msnp9/error.c:158 #, c-format msgid "Peer notification server down" msgstr "Vastapään ilmoituspalvelin ei toiminnassa" -#: ../libpurple/protocols/msn/error.c:162 -#: ../libpurple/protocols/msnp9/error.c:162 #, c-format msgid "Database connect error" msgstr "Tietokantayhteysvirhe" -#: ../libpurple/protocols/msn/error.c:167 -#: ../libpurple/protocols/msnp9/error.c:167 #, c-format msgid "Server is going down (abandon ship)" msgstr "Palvelin on poistumassa toiminnasta (jättäkää laiva)" -#: ../libpurple/protocols/msn/error.c:174 -#: ../libpurple/protocols/msnp9/error.c:174 #, c-format msgid "Error creating connection" msgstr "Virhe luotaessa yhteyttä" -#: ../libpurple/protocols/msn/error.c:179 -#: ../libpurple/protocols/msnp9/error.c:179 #, c-format msgid "CVR parameters are either unknown or not allowed" msgstr "CVR-parametrit ovat joko tuntemattomat tai ne eivät ole sallittuja" -#: ../libpurple/protocols/msn/error.c:183 -#: ../libpurple/protocols/msnp9/error.c:183 #, c-format msgid "Unable to write" msgstr "Ei kyetty kirjoittamaan" -#: ../libpurple/protocols/msn/error.c:186 -#: ../libpurple/protocols/msnp9/error.c:186 #, c-format msgid "Session overload" msgstr "Istunnon ylikuormitus" -#: ../libpurple/protocols/msn/error.c:190 -#: ../libpurple/protocols/msnp9/error.c:190 #, c-format msgid "User is too active" msgstr "Käyttäjä on liian aktiivinen" -#: ../libpurple/protocols/msn/error.c:193 -#: ../libpurple/protocols/msnp9/error.c:193 #, c-format msgid "Too many sessions" msgstr "Liian monta istuntoa" -#: ../libpurple/protocols/msn/error.c:196 -#: ../libpurple/protocols/msnp9/error.c:196 #, c-format msgid "Passport not verified" msgstr "Passport-tiliä ei ole varmistettu" -#: ../libpurple/protocols/msn/error.c:199 -#: ../libpurple/protocols/msnp9/error.c:199 #, c-format msgid "Bad friend file" msgstr "Virheellinen tuttavatiedosto" -#: ../libpurple/protocols/msn/error.c:203 -#: ../libpurple/protocols/msnp9/error.c:203 #, c-format msgid "Not expected" msgstr "Odottamaton" -#: ../libpurple/protocols/msn/error.c:209 -#: ../libpurple/protocols/msnp9/error.c:209 #, c-format msgid "Friendly name changes too rapidly" msgstr "Tuttavanimi vaihtuu liian usein" -#: ../libpurple/protocols/msn/error.c:218 -#: ../libpurple/protocols/msnp9/error.c:218 #, c-format msgid "Server too busy" msgstr "Palvelimella liikaa ruuhkaa " -#: ../libpurple/protocols/msn/error.c:222 -#: ../libpurple/protocols/msnp9/error.c:222 -#: ../libpurple/protocols/oscar/oscar.c:1422 -#: ../libpurple/protocols/silc/silc.c:338 -#: ../libpurple/protocols/silc10/ops.c:1713 -#: ../libpurple/protocols/toc/toc.c:728 ../libpurple/proxy.c:1448 #, c-format msgid "Authentication failed" msgstr "Todennus epäonnistui" -#: ../libpurple/protocols/msn/error.c:225 -#: ../libpurple/protocols/msnp9/error.c:225 #, c-format msgid "Not allowed when offline" msgstr "Ei sallittu kun poissa linjoilta" -#: ../libpurple/protocols/msn/error.c:233 -#: ../libpurple/protocols/msnp9/error.c:233 #, c-format msgid "Not accepting new users" msgstr "Ei ota vastaan uusia käyttäjiä" -#: ../libpurple/protocols/msn/error.c:237 -#: ../libpurple/protocols/msnp9/error.c:237 #, c-format msgid "Kids Passport without parental consent" msgstr "Kids Passport - ilman vanhempien hyväksyntää" -#: ../libpurple/protocols/msn/error.c:241 -#: ../libpurple/protocols/msnp9/error.c:241 #, c-format msgid "Passport account not yet verified" msgstr "Passport-tiliä ei ole verifioitu" -#: ../libpurple/protocols/msn/error.c:244 -#: ../libpurple/protocols/msnp9/error.c:244 #, c-format msgid "Bad ticket" msgstr "Bad ticket" -#: ../libpurple/protocols/msn/error.c:249 -#: ../libpurple/protocols/msnp9/error.c:249 #, c-format msgid "Unknown Error Code %d" msgstr "Tuntematon virhekoodi %d" -#: ../libpurple/protocols/msn/error.c:263 -#: ../libpurple/protocols/msnp9/error.c:263 #, c-format msgid "MSN Error: %s\n" msgstr "MSN-virhe: %s\n" -#: ../libpurple/protocols/msn/msn.c:128 ../libpurple/protocols/msnp9/msn.c:129 msgid "Nudge" msgstr "Tönäise" -#: ../libpurple/protocols/msn/msn.c:129 ../libpurple/protocols/msnp9/msn.c:130 #, c-format msgid "%s has nudged you!" msgstr "%s on tönäissyt sinua." -#: ../libpurple/protocols/msn/msn.c:129 ../libpurple/protocols/msnp9/msn.c:130 #, c-format msgid "Nudging %s..." msgstr "Tönäistään tuttavaa %s..." -#: ../libpurple/protocols/msn/msn.c:170 ../libpurple/protocols/msnp9/msn.c:171 +msgid "Email Address..." +msgstr "Sähköpostiosoite..." + msgid "Your new MSN friendly name is too long." msgstr "Uusi MSN-tuttavanimesi on liian pitkä." -#: ../libpurple/protocols/msn/msn.c:296 ../libpurple/protocols/msnp9/msn.c:279 msgid "Set your friendly name." msgstr "Aseta tuttavanimesi." -#: ../libpurple/protocols/msn/msn.c:297 ../libpurple/protocols/msnp9/msn.c:280 msgid "This is the name that other MSN buddies will see you as." msgstr "Tämä on nimi jona MSN-tuttavasi sinut näkevät." -#: ../libpurple/protocols/msn/msn.c:315 ../libpurple/protocols/msnp9/msn.c:298 msgid "Set your home phone number." msgstr "Aseta kotipuhelinnumerosi" -#: ../libpurple/protocols/msn/msn.c:332 ../libpurple/protocols/msnp9/msn.c:315 msgid "Set your work phone number." msgstr "Aseta työpuhelinnumerosi" -#: ../libpurple/protocols/msn/msn.c:349 ../libpurple/protocols/msnp9/msn.c:332 msgid "Set your mobile phone number." msgstr "Aseta matkapuhelinnumerosi" -#: ../libpurple/protocols/msn/msn.c:364 ../libpurple/protocols/msnp9/msn.c:347 msgid "Allow MSN Mobile pages?" msgstr "Salli MSN-mobiilihaut" -#: ../libpurple/protocols/msn/msn.c:365 ../libpurple/protocols/msnp9/msn.c:348 msgid "" "Do you want to allow or disallow people on your buddy list to send you MSN " "Mobile pages to your cell phone or other mobile device?" @@ -7015,69 +4917,53 @@ "Haluatko sallia tai estää henkilöitä tuttavissasi lähettämästä MSN- " "mobiilihakuja matkapuhelimeesi tai muuhun mobiililaitteeseen?" -#: ../libpurple/protocols/msn/msn.c:371 ../libpurple/protocols/msnp9/msn.c:354 msgid "Allow" msgstr "Salli" -#: ../libpurple/protocols/msn/msn.c:372 ../libpurple/protocols/msnp9/msn.c:355 msgid "Disallow" msgstr "Kiellä" -#: ../libpurple/protocols/msn/msn.c:388 ../libpurple/protocols/msnp9/msn.c:371 -msgid "This Hotmail account may not be active." -msgstr "Tämä Hotmail-tili ei välttämättä ole aktiivinen." - -#: ../libpurple/protocols/msn/msn.c:414 ../libpurple/protocols/msnp9/msn.c:397 +#, c-format +msgid "Blocked Text for %s" +msgstr "Estetty teksti käyttäjätilille %s" + +msgid "No text is blocked for this account." +msgstr "Ei estettyä tekstiä tälle käyttäjätilille." + +#, c-format +msgid "" +"MSN servers are currently blocking the following regular expressions:<br/>%s" +msgstr "" +"MSN-palvelimet estävät tällä hetkellä seuraavat säännölliset lausekkeet:<br/>" +"%s" + +msgid "This account does not have email enabled." +msgstr "Tällä käyttäjätilillä ei ole käyttöön otettua sähköpostia." + msgid "Send a mobile message." msgstr "Lähetä mobiiliviestinä" -#: ../libpurple/protocols/msn/msn.c:416 ../libpurple/protocols/msnp9/msn.c:399 msgid "Page" msgstr "Lähetä" -#: ../libpurple/protocols/msn/msn.c:679 ../libpurple/protocols/msnp9/msn.c:567 msgid "Home Phone Number" msgstr "Kotipuhelinnumero" -#: ../libpurple/protocols/msn/msn.c:683 ../libpurple/protocols/msnp9/msn.c:571 msgid "Work Phone Number" msgstr "Työpuhelinnumero" -#: ../libpurple/protocols/msn/msn.c:687 ../libpurple/protocols/msnp9/msn.c:575 msgid "Mobile Phone Number" msgstr "Matkapuhelinnumero" -#: ../libpurple/protocols/msn/msn.c:710 ../libpurple/protocols/msn/state.c:33 -#: ../libpurple/protocols/msnp9/msn.c:594 -#: ../libpurple/protocols/msnp9/state.c:33 -#: ../libpurple/protocols/yahoo/yahoo.c:3134 -#: ../libpurple/protocols/yahoo/yahoo.c:3827 msgid "Be Right Back" msgstr "Tulen pian takaisin" -#: ../libpurple/protocols/msn/msn.c:716 ../libpurple/protocols/msn/state.c:31 -#: ../libpurple/protocols/msnp9/msn.c:598 -#: ../libpurple/protocols/msnp9/state.c:31 -#: ../libpurple/protocols/novell/novell.c:2840 -#: ../libpurple/protocols/novell/novell.c:2970 -#: ../libpurple/protocols/silc/buddy.c:1483 -#: ../libpurple/protocols/silc/silc.c:56 -#: ../libpurple/protocols/silc10/buddy.c:1483 -#: ../libpurple/protocols/silc10/silc.c:47 -#: ../libpurple/protocols/yahoo/yahoo.c:3136 -#: ../libpurple/protocols/yahoo/yahoo.c:3830 msgid "Busy" msgstr "Varattu" -#: ../libpurple/protocols/msn/msn.c:721 ../libpurple/protocols/msnp9/msn.c:602 -#: ../libpurple/protocols/yahoo/yahoo.c:3144 -#: ../libpurple/protocols/yahoo/yahoo.c:3842 msgid "On the Phone" msgstr "Puhelimessa" -#: ../libpurple/protocols/msn/msn.c:726 ../libpurple/protocols/msnp9/msn.c:606 -#: ../libpurple/protocols/yahoo/yahoo.c:3148 -#: ../libpurple/protocols/yahoo/yahoo.c:3848 msgid "Out to Lunch" msgstr "Lounaalla" @@ -7087,337 +4973,187 @@ #. savable #. should be user_settable some day #. independent -#: ../libpurple/protocols/msn/msn.c:745 -#: ../libpurple/protocols/myspace/myspace.c:170 msgid "Artist" msgstr "Esittäjä" -#: ../libpurple/protocols/msn/msn.c:746 msgid "Album" msgstr "Levy" -#: ../libpurple/protocols/msn/msn.c:764 ../libpurple/protocols/msnp9/msn.c:634 msgid "Set Friendly Name..." msgstr "Aseta tuttavanimi..." -#: ../libpurple/protocols/msn/msn.c:769 ../libpurple/protocols/msnp9/msn.c:639 msgid "Set Home Phone Number..." msgstr "Aseta kotipuhelinnumero..." -#: ../libpurple/protocols/msn/msn.c:773 ../libpurple/protocols/msnp9/msn.c:643 msgid "Set Work Phone Number..." msgstr "Aseta työpuhelinnumero..." -#: ../libpurple/protocols/msn/msn.c:777 ../libpurple/protocols/msnp9/msn.c:647 msgid "Set Mobile Phone Number..." msgstr "Aseta matkapuhelinnumero..." -#: ../libpurple/protocols/msn/msn.c:783 ../libpurple/protocols/msnp9/msn.c:653 msgid "Enable/Disable Mobile Devices..." msgstr "Aseta päälle/pois mobiililaitteet..." -#: ../libpurple/protocols/msn/msn.c:788 ../libpurple/protocols/msnp9/msn.c:658 msgid "Allow/Disallow Mobile Pages..." msgstr "Salli/estä mobiilihaut..." -#: ../libpurple/protocols/msn/msn.c:799 ../libpurple/protocols/msnp9/msn.c:669 +msgid "View Blocked Text..." +msgstr "Näytä estetyt tekstit..." + msgid "Open Hotmail Inbox" msgstr "Avaa Hotmailin saapuneet-kansio" -#: ../libpurple/protocols/msn/msn.c:823 ../libpurple/protocols/msnp9/msn.c:693 msgid "Send to Mobile" msgstr "Lähetä mobiililaitteeseen" -#: ../libpurple/protocols/msn/msn.c:833 ../libpurple/protocols/msnp9/msn.c:703 -#: ../libpurple/protocols/novell/novell.c:3426 msgid "Initiate _Chat" msgstr "Aloita _ryhmäkeskustelu" -#: ../libpurple/protocols/msn/msn.c:871 ../libpurple/protocols/msnp9/msn.c:742 msgid "SSL support is needed for MSN. Please install a supported SSL library." msgstr "MSN vaatii SSL-tuen. Asenna tuettu SSL-kirjasto." -#: ../libpurple/protocols/msn/msn.c:901 ../libpurple/protocols/msnp9/msn.c:772 msgid "Failed to connect to server." msgstr "Palvelimeen ei saatu yhteyttä." -#: ../libpurple/protocols/msn/msn.c:1685 ../libpurple/protocols/msn/msn.c:2028 -#: ../libpurple/protocols/msnp9/msn.c:1526 -#: ../libpurple/protocols/msnp9/msn.c:1869 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:808 msgid "Error retrieving profile" msgstr "Virhe haettaessa profiilia" -#: ../libpurple/protocols/msn/msn.c:1751 -#: ../libpurple/protocols/msnp9/msn.c:1592 ../pidgin/plugins/convcolors.c:371 -#: ../pidgin/plugins/pidginrc.c:372 msgid "General" msgstr "Yleinen" -#: ../libpurple/protocols/msn/msn.c:1758 -#: ../libpurple/protocols/msnp9/msn.c:1599 -#: ../libpurple/protocols/myspace/user.c:125 -#: ../libpurple/protocols/oscar/oscar.c:3792 -#: ../libpurple/protocols/qq/buddy_info.c:45 -#: ../libpurple/protocols/qq/qq.c:222 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1088 msgid "Age" msgstr "Ikä" -#: ../libpurple/protocols/msn/msn.c:1760 -#: ../libpurple/protocols/msnp9/msn.c:1601 -#: ../libpurple/protocols/qq/buddy_info.c:51 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1103 msgid "Occupation" msgstr "Ammatti" -#: ../libpurple/protocols/msn/msn.c:1761 -#: ../libpurple/protocols/msnp9/msn.c:1602 -#: ../libpurple/protocols/myspace/user.c:133 -#: ../libpurple/protocols/novell/novell.c:1487 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1083 -#: ../libpurple/protocols/zephyr/zephyr.c:802 -#: ../libpurple/protocols/zephyr/zephyr.c:1175 msgid "Location" msgstr "Sijainti" -#: ../libpurple/protocols/msn/msn.c:1766 ../libpurple/protocols/msn/msn.c:1958 -#: ../libpurple/protocols/msn/msn.c:1964 ../libpurple/protocols/msn/msn.c:1971 -#: ../libpurple/protocols/msnp9/msn.c:1607 -#: ../libpurple/protocols/msnp9/msn.c:1799 -#: ../libpurple/protocols/msnp9/msn.c:1805 -#: ../libpurple/protocols/msnp9/msn.c:1812 msgid "Hobbies and Interests" msgstr "Harrastukset" -#: ../libpurple/protocols/msn/msn.c:1772 ../libpurple/protocols/msn/msn.c:1892 -#: ../libpurple/protocols/msn/msn.c:1898 ../libpurple/protocols/msn/msn.c:1905 -#: ../libpurple/protocols/msn/msn.c:1913 ../libpurple/protocols/msn/msn.c:1920 -#: ../libpurple/protocols/msnp9/msn.c:1613 -#: ../libpurple/protocols/msnp9/msn.c:1733 -#: ../libpurple/protocols/msnp9/msn.c:1739 -#: ../libpurple/protocols/msnp9/msn.c:1746 -#: ../libpurple/protocols/msnp9/msn.c:1754 -#: ../libpurple/protocols/msnp9/msn.c:1761 msgid "A Little About Me" msgstr "Oma kuvaus" -#: ../libpurple/protocols/msn/msn.c:1789 -#: ../libpurple/protocols/msnp9/msn.c:1630 msgid "Social" msgstr "Vapaa-aika" -#: ../libpurple/protocols/msn/msn.c:1791 -#: ../libpurple/protocols/msnp9/msn.c:1632 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1093 msgid "Marital Status" msgstr "Siviilisääty" -#: ../libpurple/protocols/msn/msn.c:1792 -#: ../libpurple/protocols/msnp9/msn.c:1633 msgid "Interests" msgstr "Kiinnostukset" -#: ../libpurple/protocols/msn/msn.c:1793 -#: ../libpurple/protocols/msnp9/msn.c:1634 msgid "Pets" msgstr "Lemmikit" -#: ../libpurple/protocols/msn/msn.c:1794 -#: ../libpurple/protocols/msnp9/msn.c:1635 msgid "Hometown" msgstr "Kotikunta" -#: ../libpurple/protocols/msn/msn.c:1795 -#: ../libpurple/protocols/msnp9/msn.c:1636 msgid "Places Lived" msgstr "Asumispaikat" -#: ../libpurple/protocols/msn/msn.c:1796 -#: ../libpurple/protocols/msnp9/msn.c:1637 msgid "Fashion" msgstr "Tyyli" -#: ../libpurple/protocols/msn/msn.c:1797 -#: ../libpurple/protocols/msnp9/msn.c:1638 msgid "Humor" msgstr "Huumorintaju" -#: ../libpurple/protocols/msn/msn.c:1798 -#: ../libpurple/protocols/msnp9/msn.c:1639 msgid "Music" msgstr "Musiikki" -#: ../libpurple/protocols/msn/msn.c:1799 ../libpurple/protocols/msn/msn.c:1980 -#: ../libpurple/protocols/msn/msn.c:1986 -#: ../libpurple/protocols/msnp9/msn.c:1640 -#: ../libpurple/protocols/msnp9/msn.c:1821 -#: ../libpurple/protocols/msnp9/msn.c:1827 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1145 msgid "Favorite Quote" msgstr "Lempisanonta" -#: ../libpurple/protocols/msn/msn.c:1816 -#: ../libpurple/protocols/msnp9/msn.c:1657 msgid "Contact Info" msgstr "Yhteystiedot" -#: ../libpurple/protocols/msn/msn.c:1817 -#: ../libpurple/protocols/msnp9/msn.c:1658 msgid "Personal" msgstr "Koti" -#: ../libpurple/protocols/msn/msn.c:1820 -#: ../libpurple/protocols/msnp9/msn.c:1661 msgid "Significant Other" msgstr "Elämänkumppani" -#: ../libpurple/protocols/msn/msn.c:1821 -#: ../libpurple/protocols/msnp9/msn.c:1662 msgid "Home Phone" msgstr "Kotipuhelin" -#: ../libpurple/protocols/msn/msn.c:1822 -#: ../libpurple/protocols/msnp9/msn.c:1663 msgid "Home Phone 2" msgstr "Kotipuhelin 2" -#: ../libpurple/protocols/msn/msn.c:1823 -#: ../libpurple/protocols/msnp9/msn.c:1664 -#: ../libpurple/protocols/oscar/oscar.c:3830 msgid "Home Address" msgstr "Kotiosoite" -#: ../libpurple/protocols/msn/msn.c:1824 -#: ../libpurple/protocols/msnp9/msn.c:1665 msgid "Personal Mobile" msgstr "Oma matkapuhelin" -#: ../libpurple/protocols/msn/msn.c:1825 -#: ../libpurple/protocols/msnp9/msn.c:1666 msgid "Home Fax" msgstr "Kotifaksi" -#: ../libpurple/protocols/msn/msn.c:1826 -#: ../libpurple/protocols/msnp9/msn.c:1667 msgid "Personal Email" msgstr "Oma sähköposti" -#: ../libpurple/protocols/msn/msn.c:1827 -#: ../libpurple/protocols/msnp9/msn.c:1668 msgid "Personal IM" msgstr "Oma pikaviestin" -#: ../libpurple/protocols/msn/msn.c:1829 -#: ../libpurple/protocols/msnp9/msn.c:1670 msgid "Anniversary" msgstr "Vuosipäivä" #. Business -#: ../libpurple/protocols/msn/msn.c:1845 -#: ../libpurple/protocols/msnp9/msn.c:1686 msgid "Work" msgstr "Työ" -#: ../libpurple/protocols/msn/msn.c:1847 -#: ../libpurple/protocols/msnp9/msn.c:1688 -#: ../libpurple/protocols/silc/ops.c:1024 -#: ../libpurple/protocols/silc10/ops.c:1044 msgid "Job Title" msgstr "Tehtävänimike" -#: ../libpurple/protocols/msn/msn.c:1848 -#: ../libpurple/protocols/msnp9/msn.c:1689 -#: ../libpurple/protocols/oscar/oscar.c:3851 msgid "Company" msgstr "Yritys" -#: ../libpurple/protocols/msn/msn.c:1849 -#: ../libpurple/protocols/msnp9/msn.c:1690 -#: ../libpurple/protocols/novell/novell.c:1489 msgid "Department" msgstr "Osasto" -#: ../libpurple/protocols/msn/msn.c:1850 -#: ../libpurple/protocols/msnp9/msn.c:1691 msgid "Profession" msgstr "Ammatti" -#: ../libpurple/protocols/msn/msn.c:1851 -#: ../libpurple/protocols/msnp9/msn.c:1692 msgid "Work Phone" msgstr "Työpuhelin" -#: ../libpurple/protocols/msn/msn.c:1852 -#: ../libpurple/protocols/msnp9/msn.c:1693 msgid "Work Phone 2" msgstr "Työpuhelin 2" -#: ../libpurple/protocols/msn/msn.c:1853 -#: ../libpurple/protocols/msnp9/msn.c:1694 -#: ../libpurple/protocols/oscar/oscar.c:3843 msgid "Work Address" msgstr "Työosoite" -#: ../libpurple/protocols/msn/msn.c:1854 -#: ../libpurple/protocols/msnp9/msn.c:1695 msgid "Work Mobile" msgstr "Työmatkapuhelin" -#: ../libpurple/protocols/msn/msn.c:1855 -#: ../libpurple/protocols/msnp9/msn.c:1696 msgid "Work Pager" msgstr "Työhakulaite" -#: ../libpurple/protocols/msn/msn.c:1856 -#: ../libpurple/protocols/msnp9/msn.c:1697 msgid "Work Fax" msgstr "Työfaksi" -#: ../libpurple/protocols/msn/msn.c:1857 -#: ../libpurple/protocols/msnp9/msn.c:1698 msgid "Work Email" msgstr "Työsähköposti" -#: ../libpurple/protocols/msn/msn.c:1858 -#: ../libpurple/protocols/msnp9/msn.c:1699 msgid "Work IM" msgstr "Työ pikaviestin" -#: ../libpurple/protocols/msn/msn.c:1859 -#: ../libpurple/protocols/msnp9/msn.c:1700 msgid "Start Date" msgstr "Aloituspäivä" -#: ../libpurple/protocols/msn/msn.c:1929 ../libpurple/protocols/msn/msn.c:1935 -#: ../libpurple/protocols/msn/msn.c:1942 ../libpurple/protocols/msn/msn.c:1949 -#: ../libpurple/protocols/msnp9/msn.c:1770 -#: ../libpurple/protocols/msnp9/msn.c:1776 -#: ../libpurple/protocols/msnp9/msn.c:1783 -#: ../libpurple/protocols/msnp9/msn.c:1790 msgid "Favorite Things" msgstr "Lempiasiat" -#: ../libpurple/protocols/msn/msn.c:1994 -#: ../libpurple/protocols/msnp9/msn.c:1835 msgid "Last Updated" msgstr "Edellinen päivitys" -#: ../libpurple/protocols/msn/msn.c:2005 -#: ../libpurple/protocols/msnp9/msn.c:1846 -#: ../libpurple/protocols/qq/buddy_info.c:60 -#: ../libpurple/protocols/silc/ops.c:1040 -#: ../libpurple/protocols/silc10/ops.c:1060 msgid "Homepage" msgstr "Kotisivu" -#: ../libpurple/protocols/msn/msn.c:2029 -#: ../libpurple/protocols/msnp9/msn.c:1870 msgid "The user has not created a public profile." msgstr "Käyttäjällä ei ole julkista profiilia." -#: ../libpurple/protocols/msn/msn.c:2030 -#: ../libpurple/protocols/msnp9/msn.c:1871 msgid "" "MSN reported not being able to find the user's profile. This either means " "that the user does not exist, or that the user exists but has not created a " @@ -7426,8 +5162,6 @@ "MSN ilmoitti ettei käyttäjän profiilia löydy. Tämä tarkoittaa joko sitä että " "käyttäjää ei ole tai käyttäjä ei ole luonut julkista profiilia." -#: ../libpurple/protocols/msn/msn.c:2034 -#: ../libpurple/protocols/msnp9/msn.c:1875 msgid "" "Could not find any information in the user's profile. The user most likely " "does not exist." @@ -7435,9 +5169,6 @@ "Käyttäjän profiilista ei löytynyt mitään tietoja. Käyttäjää ei " "todennäköisesti ole olemassa." -#: ../libpurple/protocols/msn/msn.c:2042 -#: ../libpurple/protocols/msnp9/msn.c:1883 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1247 msgid "Profile URL" msgstr "Profiilin URL" @@ -7451,130 +5182,81 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/msn/msn.c:2329 ../libpurple/protocols/msn/msn.c:2331 msgid "Windows Live Messenger Protocol Plugin" msgstr "Windows Live Messenger -yhteyskäytäntöliitännäinen" -#: ../libpurple/protocols/msn/msn.c:2366 -#: ../libpurple/protocols/msnp9/msn.c:2206 msgid "Use HTTP Method" msgstr "Käytä HTTP-yhteystapaa" -#: ../libpurple/protocols/msn/msn.c:2371 -#: ../libpurple/protocols/msnp9/msn.c:2211 msgid "HTTP Method Server" msgstr "HTTP-yhteystavan palvelin" -#: ../libpurple/protocols/msn/msn.c:2376 -#: ../libpurple/protocols/msnp9/msn.c:2216 msgid "Show custom smileys" msgstr "Näytä itse tehdyt / lisätyt hymiöt" -#: ../libpurple/protocols/msn/msn.c:2384 -#: ../libpurple/protocols/msnp9/msn.c:2224 msgid "nudge: nudge a user to get their attention" msgstr "nudge: tönäise tuttavaa huomion saamiseksi" -#: ../libpurple/protocols/msn/nexus.c:71 msgid "Windows Live ID authentication:Unable to connect" -msgstr "Windows Live ID -tunnistautuminen: Yhdistäminen ei onnistu" - -#. we must have failed! -#: ../libpurple/protocols/msn/nexus.c:124 -msgid "" -"Windows Live ID authentication: cannot find authenticate token in server " -"response" -msgstr "" -"Windows Live ID -tunnistautuminen: palvelinvastauksesta ei löydy " -"todentamispolettia" - -#: ../libpurple/protocols/msn/nexus.c:171 -msgid "Windows Live ID authentication Failed" -msgstr "Windows Live ID -tunnistautuminen epäonnistui" - -#: ../libpurple/protocols/msn/notification.c:185 -#: ../libpurple/protocols/msnp9/notification.c:178 +msgstr "Windows Live ID -tunnistautuminen:Yhdistäminen ei onnistu" + +msgid "Windows Live ID authentication:Invalid response" +msgstr "Windows Live ID -tunnistautuminen:Virheellinen vastaus" + #, c-format msgid "%s is not a valid group." msgstr "%s ei ole kelvollinen ryhmä." -#: ../libpurple/protocols/msn/notification.c:191 -#: ../libpurple/protocols/msn/notification.c:935 -#: ../libpurple/protocols/msn/session.c:387 -#: ../libpurple/protocols/msnp9/notification.c:184 -#: ../libpurple/protocols/msnp9/notification.c:534 -#: ../libpurple/protocols/msnp9/session.c:339 msgid "Unknown error." msgstr "Tuntematon virhe." -#: ../libpurple/protocols/msn/notification.c:194 -#: ../libpurple/protocols/msnp9/notification.c:187 #, c-format msgid "%s on %s (%s)" msgstr "%s tilillä %s (%s)" -#: ../libpurple/protocols/msn/notification.c:513 #, c-format msgid "%s just sent you a Nudge!" msgstr "Käyttäjä %s lähetti sinulle juuri tönäisyn!" -#: ../libpurple/protocols/msn/notification.c:840 #, c-format msgid "Unknown error (%d)" msgstr "Tuntematon virhe (%d)" -#: ../libpurple/protocols/msn/notification.c:841 -#: ../libpurple/protocols/sametime/sametime.c:4481 msgid "Unable to add user" msgstr "Käyttäjää ei voi lisätä" -#: ../libpurple/protocols/msn/notification.c:901 -#: ../libpurple/protocols/msnp9/notification.c:500 #, c-format msgid "Unable to add user on %s (%s)" msgstr "Käyttäjää ei voi lisätä %s (%s)" -#: ../libpurple/protocols/msn/notification.c:905 -#: ../libpurple/protocols/msnp9/notification.c:504 #, c-format msgid "Unable to block user on %s (%s)" msgstr "Ei voi estää käyttäjää %s (%s)" -#: ../libpurple/protocols/msn/notification.c:909 -#: ../libpurple/protocols/msnp9/notification.c:508 #, c-format msgid "Unable to permit user on %s (%s)" msgstr "Käyttäjää ei voi sallia %s (%s)" -#: ../libpurple/protocols/msn/notification.c:917 -#: ../libpurple/protocols/msnp9/notification.c:516 #, c-format msgid "%s could not be added because your buddy list is full." msgstr "Käyttäjää %s ei voi lisätä koska tuttavia on liikaa." -#: ../libpurple/protocols/msn/notification.c:926 -#: ../libpurple/protocols/msnp9/notification.c:525 #, c-format msgid "%s is not a valid passport account." msgstr "%s ei ole kelvollinen passport-tili" -#: ../libpurple/protocols/msn/notification.c:931 -#: ../libpurple/protocols/msnp9/notification.c:530 msgid "Service Temporarily Unavailable." msgstr "Palvelu ei tilapäisesti ole käytettävissä." -#: ../libpurple/protocols/msn/notification.c:1336 -#: ../libpurple/protocols/msnp9/notification.c:898 +msgid "Mobile message was not sent because it was too long." +msgstr "Mobiiliviestiä ei lähetetty, koska se on liian pitkä." + msgid "Unable to rename group" msgstr "Ryhmän uudelleen nimeäminen epäonnistui" -#: ../libpurple/protocols/msn/notification.c:1391 -#: ../libpurple/protocols/msnp9/notification.c:953 msgid "Unable to delete group" msgstr "Ryhmää ei voi poistaa" -#: ../libpurple/protocols/msn/notification.c:2008 -#: ../libpurple/protocols/msnp9/notification.c:1372 #, c-format msgid "" "The MSN server will shut down for maintenance in %d minute. You will " @@ -7603,40 +5285,31 @@ "\n" "Kun huolto on suoritettu voit taas kirjautua palveluun." -#: ../libpurple/protocols/msn/servconn.c:135 -#: ../libpurple/protocols/msnp9/nexus.c:146 -#: ../libpurple/protocols/msnp9/servconn.c:133 -#: ../libpurple/protocols/qq/qq_proxy.c:242 -#: ../libpurple/protocols/qq/qq_proxy.c:324 -#: ../libpurple/protocols/qq/qq_proxy.c:369 -#: ../libpurple/protocols/qq/qq_proxy.c:402 -#: ../libpurple/protocols/qq/udp_proxy_s5.c:64 -#: ../libpurple/protocols/qq/udp_proxy_s5.c:167 -#: ../libpurple/protocols/qq/udp_proxy_s5.c:191 -#: ../libpurple/protocols/qq/udp_proxy_s5.c:204 -#: ../libpurple/protocols/qq/udp_proxy_s5.c:233 -#: ../libpurple/protocols/qq/udp_proxy_s5.c:247 -#: ../libpurple/protocols/qq/udp_proxy_s5.c:272 -#: ../libpurple/protocols/qq/udp_proxy_s5.c:307 -#: ../libpurple/protocols/qq/udp_proxy_s5.c:338 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1565 -#: ../libpurple/protocols/yahoo/yahoochat.c:1425 -#: ../libpurple/protocols/yahoo/yahoochat.c:1451 +msgid "" +"Message was not sent because the system is unavailable. This normally " +"happens when the user is blocked or does not exist." +msgstr "" +"Viestiä ei voi lähettää koska järjestelmä ei ole saatavilla. Tämä tapahtuu " +"yleensä jos käyttäjä on estetty tai ei olemassa." + +msgid "Message was not sent because messages are being sent too quickly." +msgstr "Viestiä ei voi lähettää koska viestejä lähetetään liian nopeasti." + +msgid "Message was not sent because an unknown encoding error occurred." +msgstr "Viestiä ei voi lähettää tuntemattoman koodausvirheen vuoksi." + +msgid "Message was not sent because an unknown error occurred." +msgstr "Viestiä ei voi lähettää tuntemattoman virheen vuoksi." + msgid "Unable to connect" msgstr "Yhteyden muodostaminen epäonnistui" -#: ../libpurple/protocols/msn/servconn.c:137 -#: ../libpurple/protocols/msnp9/servconn.c:135 msgid "Writing error" msgstr "Virhe kirjoitettaessa" -#: ../libpurple/protocols/msn/servconn.c:139 -#: ../libpurple/protocols/msnp9/servconn.c:137 msgid "Reading error" msgstr "Virhe luettaessa" -#: ../libpurple/protocols/msn/servconn.c:146 -#: ../libpurple/protocols/msnp9/servconn.c:144 #, c-format msgid "" "Connection error from %s server:\n" @@ -7645,121 +5318,73 @@ "Yhteysvirhe palvelimelta %s:\n" "%s" -#: ../libpurple/protocols/msn/session.c:349 -#: ../libpurple/protocols/msnp9/session.c:301 msgid "Our protocol is not supported by the server." msgstr "Palvelin ei tue yhteyskäytäntöä." -#: ../libpurple/protocols/msn/session.c:354 -#: ../libpurple/protocols/msnp9/session.c:306 msgid "Error parsing HTTP." msgstr "Virhe jäsennettäessä HTTP:tä." -#: ../libpurple/protocols/msn/session.c:358 -#: ../libpurple/protocols/msnp9/session.c:310 -#: ../libpurple/protocols/oscar/flap_connection.c:392 -#: ../libpurple/protocols/yahoo/yahoo.c:155 msgid "You have signed on from another location." msgstr "Olet kirjautunut sisään toisesta paikasta." -#: ../libpurple/protocols/msn/session.c:364 -#: ../libpurple/protocols/msnp9/session.c:316 msgid "The MSN servers are temporarily unavailable. Please wait and try again." msgstr "" "MSN-palvelimet ovat väliaikaisesti tavoittamattomissa. Odota ja yritä " "uudelleen." -#: ../libpurple/protocols/msn/session.c:370 -#: ../libpurple/protocols/msnp9/session.c:322 msgid "The MSN servers are going down temporarily." msgstr "MSN-palvelimet ajetaan alas väliaikaisesti." -#: ../libpurple/protocols/msn/session.c:375 -#: ../libpurple/protocols/msnp9/session.c:327 #, c-format msgid "Unable to authenticate: %s" msgstr "Tunnistautuminen ei onnistu: %s" -#: ../libpurple/protocols/msn/session.c:381 -#: ../libpurple/protocols/msnp9/session.c:333 msgid "" "Your MSN buddy list is temporarily unavailable. Please wait and try again." msgstr "MSN-tuttavia ei väliaikaisesti voi hakea. Yritä myöhemmin uudelleen." -#: ../libpurple/protocols/msn/session.c:403 -#: ../libpurple/protocols/msn/session.c:405 -#: ../libpurple/protocols/msnp9/session.c:355 -#: ../libpurple/protocols/msnp9/session.c:357 msgid "Handshaking" msgstr "Kättely" -#: ../libpurple/protocols/msn/session.c:404 -#: ../libpurple/protocols/msnp9/session.c:356 msgid "Transferring" msgstr "Siirtää" -#: ../libpurple/protocols/msn/session.c:406 -#: ../libpurple/protocols/msnp9/session.c:358 msgid "Starting authentication" msgstr "Aloitetaan tunnistautumista" -#: ../libpurple/protocols/msn/session.c:407 -#: ../libpurple/protocols/msnp9/session.c:359 msgid "Getting cookie" msgstr "Haetaan evästettä" -#: ../libpurple/protocols/msn/session.c:409 -#: ../libpurple/protocols/msnp9/session.c:361 msgid "Sending cookie" msgstr "Lähetetään evästettä" -#: ../libpurple/protocols/msn/session.c:410 -#: ../libpurple/protocols/msnp9/session.c:362 msgid "Retrieving buddy list" msgstr "Noudetaan tuttavia" -#: ../libpurple/protocols/msn/state.c:34 -#: ../libpurple/protocols/msnp9/state.c:34 msgid "Away From Computer" msgstr "Poissa tietokoneelta" -#: ../libpurple/protocols/msn/state.c:35 -#: ../libpurple/protocols/msnp9/state.c:35 msgid "On The Phone" msgstr "Puhelimessa" -#: ../libpurple/protocols/msn/state.c:36 -#: ../libpurple/protocols/msnp9/state.c:36 msgid "Out To Lunch" msgstr "Lounaalla" -#: ../libpurple/protocols/msn/switchboard.c:406 -#: ../libpurple/protocols/msnp9/switchboard.c:411 msgid "Message may have not been sent because a timeout occurred:" msgstr "Viestiä ei välttämättä lähetetty koska tapahtui aikakatkaisu:" -#: ../libpurple/protocols/msn/switchboard.c:414 -#: ../libpurple/protocols/msnp9/switchboard.c:419 msgid "Message could not be sent, not allowed while invisible:" msgstr "Viestien lähetys ei ole sallittu näkymättömänä:" -#: ../libpurple/protocols/msn/switchboard.c:418 -#: ../libpurple/protocols/msnp9/switchboard.c:423 msgid "Message could not be sent because the user is offline:" msgstr "Viestiä ei voi lähettää koska käyttäjä on poissa linjoilta:" -#: ../libpurple/protocols/msn/switchboard.c:422 -#: ../libpurple/protocols/msnp9/switchboard.c:427 msgid "Message could not be sent because a connection error occurred:" msgstr "Viestiä ei voi lähettää yhteysvirheen vuoksi:" -#: ../libpurple/protocols/msn/switchboard.c:426 -#: ../libpurple/protocols/msnp9/switchboard.c:431 msgid "Message could not be sent because we are sending too quickly:" msgstr "Viestiä ei voi lähettää koska viestejä lähetetään liian nopeasti:" -#: ../libpurple/protocols/msn/switchboard.c:430 -#: ../libpurple/protocols/msnp9/switchboard.c:435 msgid "" "Message could not be sent because we were unable to establish a session with " "the server. This is likely a server problem, try again in a few minutes:" @@ -7768,26 +5393,18 @@ "Tämä on luultavasti ongelma palvelimella, yritä uudelleen muutaman minuutin " "päästä:" -#: ../libpurple/protocols/msn/switchboard.c:437 -#: ../libpurple/protocols/msnp9/switchboard.c:442 msgid "" "Message could not be sent because an error with the switchboard occurred:" msgstr "" "Viestiä ei voi lähettää kytkentäpalvelimen kanssa tapahtuneen virheen vuoksi:" -#: ../libpurple/protocols/msn/switchboard.c:445 -#: ../libpurple/protocols/msnp9/switchboard.c:450 msgid "Message may have not been sent because an unknown error occurred:" msgstr "Viestiä ei voi lähettää tuntemattoman virheen vuoksi:" -#: ../libpurple/protocols/msn/userlist.c:243 -#: ../libpurple/protocols/msnp9/userlist.c:262 #, c-format msgid "%s has added you to his or her buddy list." msgstr "Käyttäjä %s on lisännyt sinut tuttaviinsa." -#: ../libpurple/protocols/msn/userlist.c:312 -#: ../libpurple/protocols/msnp9/userlist.c:331 #, c-format msgid "%s has removed you from his or her buddy list." msgstr "%s on poistanut sinut tuttavistaan." @@ -7795,18 +5412,16 @@ #. only notify the user about problems adding to the friends list #. * maybe we should do something else for other lists, but it probably #. * won't cause too many problems if we just ignore it -#: ../libpurple/protocols/msn/userlist.c:713 -#: ../libpurple/protocols/msnp9/userlist.c:653 #, c-format msgid "Unable to add \"%s\"." msgstr "Ei voi lisätä \"%s\"." -#: ../libpurple/protocols/msn/userlist.c:716 -#: ../libpurple/protocols/msnp9/userlist.c:655 msgid "The username specified is invalid." msgstr "Syötetty käyttäjänimi on virheellinen." -#: ../libpurple/protocols/msnp9/msn.c:546 +msgid "This Hotmail account may not be active." +msgstr "Tämä Hotmail-tili ei välttämättä ole aktiivinen." + msgid "Has you" msgstr "Olet hänen listallaan" @@ -7820,20 +5435,15 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/msnp9/msn.c:2170 -#: ../libpurple/protocols/msnp9/msn.c:2172 msgid "MSN Protocol Plugin" msgstr "MSN-yhteyskäytäntöliitännäinen" -#: ../libpurple/protocols/myspace/myspace.c:111 msgid "Missing Cipher" msgstr "Salaus puuttuu" -#: ../libpurple/protocols/myspace/myspace.c:112 msgid "The RC4 cipher could not be found" msgstr "RC4-salausta ei löydetty" -#: ../libpurple/protocols/myspace/myspace.c:113 msgid "" "Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will " "not be loaded." @@ -7841,74 +5451,59 @@ "Päivitä libpurpleen jossa RC4-tuki (>= 2.0.1). MySpaceIM-liitännäistä ei " "ladattu." -#: ../libpurple/protocols/myspace/myspace.c:345 msgid "Reading challenge" msgstr "Luetaan tunnistushaastetta" -#: ../libpurple/protocols/myspace/myspace.c:355 msgid "Unexpected challenge length from server" msgstr "Odottamaton tunnistushaasteen pituus palvelimelta" -#: ../libpurple/protocols/myspace/myspace.c:359 msgid "Logging in" msgstr "Kirjaudutaan sisään" -#: ../libpurple/protocols/myspace/myspace.c:1331 -#, c-format -msgid "Connection to server lost (no data received within %d seconds)" -msgstr "Yhteys palvelimelle katkesi (dataa ei vastaanotettu %d sekunnissa)" +#, c-format +msgid "Connection to server lost (no data received within %d second)" +msgid_plural "Connection to server lost (no data received within %d seconds)" +msgstr[0] "Yhteys palvelimelle katkesi (dataa ei vastaanotettu %d sekunnissa)" +msgstr[1] "Yhteys palvelimelle katkesi (dataa ei vastaanotettu %d sekunnissa)" #. Can't write _()'d strings in array initializers. Workaround. -#: ../libpurple/protocols/myspace/myspace.c:1374 msgid "New mail messages" msgstr "Uusia viestejä postilaatikossa" -#: ../libpurple/protocols/myspace/myspace.c:1375 msgid "New blog comments" msgstr "Uusia blogikommentteja" -#: ../libpurple/protocols/myspace/myspace.c:1376 msgid "New profile comments" msgstr "Uusia profiilikommentteja" -#: ../libpurple/protocols/myspace/myspace.c:1377 msgid "New friend requests!" msgstr "Uusia kaveripyyntöjä." -#: ../libpurple/protocols/myspace/myspace.c:1378 msgid "New picture comments" msgstr "Uusia kuvakommentteja" -#: ../libpurple/protocols/myspace/myspace.c:1408 msgid "MySpace" msgstr "MySpace" -#: ../libpurple/protocols/myspace/myspace.c:1594 msgid "MySpaceIM - No Username Set" msgstr "MySpaceIM - Käyttäjänimeä ei asetettu" -#: ../libpurple/protocols/myspace/myspace.c:1595 msgid "You appear to have no MySpace username." msgstr "Sinulla ei näytä olevan MySpace-käyttäjänimeä." -#: ../libpurple/protocols/myspace/myspace.c:1596 msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)" msgstr "Haluatko asettaa sen nyt? (Huom: TÄTÄ EI VOI MUUTTAA)" #. The session is now set up, ready to be connected. This emits the #. * signedOn signal, so clients can now do anything with msimprpl, and #. * we're ready for it (session key, userid, username all setup). -#: ../libpurple/protocols/myspace/myspace.c:1620 -#: ../libpurple/protocols/sametime/sametime.c:1548 msgid "Connected" msgstr "Yhdistetty" -#: ../libpurple/protocols/myspace/myspace.c:1855 #, c-format msgid "Protocol error, code %d: %s" msgstr "Yhteyskäytäntövirhe, virhekoodi %d: %s" -#: ../libpurple/protocols/myspace/myspace.c:1877 #, c-format msgid "" "%s Your password is %d characters, greater than the expected maximum length " @@ -7921,189 +5516,144 @@ "profileedit.myspace.com/index.cfm?fuseaction=accountSettings.changePassword " "ja yritä uudelleen." -#: ../libpurple/protocols/myspace/myspace.c:1900 msgid "MySpaceIM Error" msgstr "MySpaceIM-virhe" -#: ../libpurple/protocols/myspace/myspace.c:2078 -#: ../libpurple/protocols/myspace/myspace.c:2112 msgid "Failed to add buddy" msgstr "Tuttavan lisääminen epäonnistui" -#: ../libpurple/protocols/myspace/myspace.c:2078 msgid "'addbuddy' command failed." msgstr "\"addbuddy\"-komento epäonnistui." -#: ../libpurple/protocols/myspace/myspace.c:2112 -#: ../libpurple/protocols/myspace/myspace.c:2357 msgid "persist command failed" msgstr "persist-komento epäonnistui" -#: ../libpurple/protocols/myspace/myspace.c:2217 #, c-format msgid "No such user: %s" msgstr "Käyttäjää ei löydy: %s" -#: ../libpurple/protocols/myspace/myspace.c:2219 msgid "User lookup" msgstr "Käyttäjän haku" -#: ../libpurple/protocols/myspace/myspace.c:2338 -#: ../libpurple/protocols/myspace/myspace.c:2357 -#: ../libpurple/protocols/myspace/myspace.c:2379 msgid "Failed to remove buddy" msgstr "Tuttavaa poistaminen epäonnistui" -#: ../libpurple/protocols/myspace/myspace.c:2338 msgid "'delbuddy' command failed" msgstr "\"delbuddy\"-komento epäonnistui" -#: ../libpurple/protocols/myspace/myspace.c:2379 msgid "blocklist command failed" msgstr "blocklist-komento epäonnistui" -#: ../libpurple/protocols/myspace/myspace.c:2493 msgid "Invalid input condition" msgstr "Epäkelpo syötetila" -#: ../libpurple/protocols/myspace/myspace.c:2548 msgid "Read buffer full (2)" msgstr "Lukupuskuri täynnä (2)" -#: ../libpurple/protocols/myspace/myspace.c:2591 msgid "Unparseable message" msgstr "Viestin jäsennys epäonnistui" -#: ../libpurple/protocols/myspace/myspace.c:2662 #, c-format msgid "Couldn't connect to host: %s (%d)" msgstr "Yhteyttä isäntään ei voi muodostaa: %s (%d)" -#: ../libpurple/protocols/myspace/myspace.c:2840 msgid "IM Friends" msgstr "Pikaviestikaverit" -#: ../libpurple/protocols/myspace/myspace.c:2940 -#, c-format -msgid "" +#, c-format +msgid "" +"%d buddy was added or updated from the server (including buddies already on " +"the server-side list)" +msgid_plural "" "%d buddies were added or updated from the server (including buddies already " "on the server-side list)" -msgstr "" +msgstr[0] "" +"%d tuttava lisättiin tai päivitettiin palvelimelta (mukaan lukien jo " +"palvelinpuolen luettelossa olevat)" +msgstr[1] "" "%d tuttavaa lisättiin tai päivitettiin palvelimelta (mukaan lukien jo " "palvelinpuolen luettelossa olevat)" -#: ../libpurple/protocols/myspace/myspace.c:2941 msgid "Add contacts from server" msgstr "Lisää tuttavia palvelimelta" -#: ../libpurple/protocols/myspace/myspace.c:2993 -#: ../libpurple/protocols/myspace/myspace.c:3057 msgid "Add friends from MySpace.com" msgstr "Lisää kavereita MySpacesta" -#: ../libpurple/protocols/myspace/myspace.c:2994 msgid "Importing friends failed" msgstr "Kavereiden tuonti epäonnistui" #. TODO: find out how -#: ../libpurple/protocols/myspace/myspace.c:3050 msgid "Find people..." msgstr "Etsi ihmisiä..." -#: ../libpurple/protocols/myspace/myspace.c:3053 msgid "Change IM name..." msgstr "Vaihda pikaviestinnimeä..." -#: ../libpurple/protocols/myspace/myspace.c:3354 msgid "myim URL handler" msgstr "myim-URL-käsittelijä" -#: ../libpurple/protocols/myspace/myspace.c:3355 msgid "No suitable MySpaceIM account could be found to open this myim URL." msgstr "Tämän myim-osoitteen avaamiseen sopivaa MySpaceIM-tiliä ei löytynyt." -#: ../libpurple/protocols/myspace/myspace.c:3356 msgid "Enable the proper MySpaceIM account and try again." msgstr "Ota sopiva MySpaceIM-käyttäjätili käyttöön ja yritä uudelleen." -#: ../libpurple/protocols/myspace/myspace.c:3479 msgid "Show display name in status text" msgstr "Näytä näyttönimi tilatekstissä" -#: ../libpurple/protocols/myspace/myspace.c:3482 msgid "Show headline in status text" msgstr "Näytä otsikko tilatekstissä" -#: ../libpurple/protocols/myspace/myspace.c:3487 msgid "Send emoticons" msgstr "Lähetä hymiöitä" -#: ../libpurple/protocols/myspace/myspace.c:3492 msgid "Screen resolution (dots per inch)" msgstr "Näytön tarkkuus (pisteitä tuumalla)" -#: ../libpurple/protocols/myspace/myspace.c:3495 msgid "Base font size (points)" msgstr "Peruskirjasinkoko (pisteinä)" -#: ../libpurple/protocols/myspace/user.c:105 -#: ../libpurple/protocols/zephyr/zephyr.c:790 -#: ../libpurple/protocols/zephyr/zephyr.c:1164 msgid "User" msgstr "Käyttäjä" -#: ../libpurple/protocols/myspace/user.c:115 -#: ../libpurple/protocols/oscar/oscar.c:3018 msgid "Profile" msgstr "Profiili" -#: ../libpurple/protocols/myspace/user.c:138 msgid "Headline" msgstr "Otsikko" -#: ../libpurple/protocols/myspace/user.c:153 msgid "Song" msgstr "Kappale" -#: ../libpurple/protocols/myspace/user.c:162 msgid "Total Friends" msgstr "Kavereita yhteensä" -#: ../libpurple/protocols/myspace/user.c:180 msgid "Client Version" msgstr "Asiakasohjelman versio" #. Protocol won't log in now without a username set.. Disconnect -#: ../libpurple/protocols/myspace/user.c:570 msgid "No username set" msgstr "Käyttäjänimeä ei asetettu" -#: ../libpurple/protocols/myspace/user.c:577 -#: ../libpurple/protocols/myspace/user.c:671 msgid "MySpaceIM - Please Set a Username" msgstr "MySpaceIM - Aseta käyttäjänimi" -#: ../libpurple/protocols/myspace/user.c:578 msgid "Please enter a username to check its availability:" msgstr "Syötä käyttäjänimi tarkistaaksesi sen saatavuus:" -#: ../libpurple/protocols/myspace/user.c:658 msgid "MySpaceIM - Username Available" msgstr "MySpaceIM - Käyttäjänimi saatavilla" -#: ../libpurple/protocols/myspace/user.c:659 msgid "This username is available. Would you like to set it?" msgstr "Tämä käyttäjänimi on saatavilla. Haluatko ottaa sen käyttöön?" -#: ../libpurple/protocols/myspace/user.c:660 msgid "ONCE SET, THIS CANNOT BE CHANGED!" msgstr "KUN TÄMÄ ON KERRAN ASETETTU, SITÄ EI VOI MUUTTAA" -#: ../libpurple/protocols/myspace/user.c:672 msgid "This username is unavailable." msgstr "Tämä käyttäjänimi ei ole saatavilla." -#: ../libpurple/protocols/myspace/user.c:673 msgid "Please try another username:" msgstr "Yritä toista käyttäjänimeä:" @@ -8113,32 +5663,25 @@ #. * projectile or weapon." This term often has an electrical #. * connotation, for example, "he was zapped by electricity when #. * he put a fork in the toaster." -#: ../libpurple/protocols/myspace/zap.c:48 -#: ../libpurple/protocols/myspace/zap.c:221 msgid "Zap" msgstr "Läimäise" -#: ../libpurple/protocols/myspace/zap.c:48 #, c-format msgid "%s has zapped you!" msgstr "%s läimäisi sinua." -#: ../libpurple/protocols/myspace/zap.c:49 #, c-format msgid "Zapping %s..." msgstr "Läimäise tuttavaa %s..." #. Whack means "to hit or strike someone with a sharp blow" -#: ../libpurple/protocols/myspace/zap.c:52 msgid "Whack" msgstr "Mätkäytä" -#: ../libpurple/protocols/myspace/zap.c:53 #, c-format msgid "%s has whacked you!" msgstr "%s mätkäisi sinua." -#: ../libpurple/protocols/myspace/zap.c:53 #, c-format msgid "Whacking %s..." msgstr "Mätkäistään tuttavaa %s..." @@ -8146,76 +5689,61 @@ #. Torch means "to set on fire." Don't worry, this doesn't #. * make a whole lot of sense in English, either. Feel free #. * to translate it literally. -#: ../libpurple/protocols/myspace/zap.c:58 msgid "Torch" msgstr "Liekitä" -#: ../libpurple/protocols/myspace/zap.c:59 #, c-format msgid "%s has torched you!" msgstr "%s liekitti sinua." -#: ../libpurple/protocols/myspace/zap.c:59 #, c-format msgid "Torching %s..." msgstr "Liekitetään tuttavaa %s..." #. Smooch means "to kiss someone, often enthusiastically" -#: ../libpurple/protocols/myspace/zap.c:62 msgid "Smooch" msgstr "Syleile" -#: ../libpurple/protocols/myspace/zap.c:63 #, c-format msgid "%s has smooched you!" msgstr "%s syleili sinua." -#: ../libpurple/protocols/myspace/zap.c:63 #, c-format msgid "Smooching %s..." msgstr "Syleillään tuttavaa %s..." #. A hug is a display of affection; wrapping your arms around someone -#: ../libpurple/protocols/myspace/zap.c:66 msgid "Hug" msgstr "Halaa" -#: ../libpurple/protocols/myspace/zap.c:66 #, c-format msgid "%s has hugged you!" msgstr "%s halasi sinua." -#: ../libpurple/protocols/myspace/zap.c:67 #, c-format msgid "Hugging %s..." msgstr "Halataan tuttavaa %s..." #. Slap means "to hit someone with an open/flat hand" -#: ../libpurple/protocols/myspace/zap.c:70 msgid "Slap" msgstr "Läpäytä" -#: ../libpurple/protocols/myspace/zap.c:71 #, c-format msgid "%s has slapped you!" msgstr "%s läpäytti sinua." -#: ../libpurple/protocols/myspace/zap.c:71 #, c-format msgid "Slapping %s..." msgstr "Läpäytetään tuttavaa %s..." #. Goose means "to pinch someone on their butt" -#: ../libpurple/protocols/myspace/zap.c:74 msgid "Goose" msgstr "Purista" -#: ../libpurple/protocols/myspace/zap.c:75 #, c-format msgid "%s has goosed you!" msgstr "%s puristi sinua." -#: ../libpurple/protocols/myspace/zap.c:75 #, c-format msgid "Goosing %s..." msgstr "Puristetaan tuttavaa %s..." @@ -8223,16 +5751,13 @@ #. A high-five is when two people's hands slap each other #. * in the air above their heads. It is done to celebrate #. * something, often a victory, or to congratulate someone. -#: ../libpurple/protocols/myspace/zap.c:80 msgid "High-five" msgstr "Yläfemmaa" -#: ../libpurple/protocols/myspace/zap.c:81 #, c-format msgid "%s has high-fived you!" msgstr "%s yläfemmasi sinulle." -#: ../libpurple/protocols/myspace/zap.c:81 #, c-format msgid "High-fiving %s..." msgstr "Yläfemmataan tuttavalle %s..." @@ -8240,16 +5765,13 @@ #. We're not entirely sure what the MySpace people mean by #. * this... but we think it's the equivalent of "prank." Or, for #. * someone to perform a mischievous trick or practical joke. -#: ../libpurple/protocols/myspace/zap.c:86 msgid "Punk" msgstr "Kujeile" -#: ../libpurple/protocols/myspace/zap.c:87 #, c-format msgid "%s has punk'd you!" msgstr "%s kujeili sinulle." -#: ../libpurple/protocols/myspace/zap.c:87 #, c-format msgid "Punking %s..." msgstr "Kujeillaan tuttavalle %s..." @@ -8261,101 +5783,77 @@ #. * gesture, so it does not carry a harsh negative #. * connotation. It is generally used in a playful tone #. * with friends. -#: ../libpurple/protocols/myspace/zap.c:96 msgid "Raspberry" msgstr "Rutise" -#: ../libpurple/protocols/myspace/zap.c:97 #, c-format msgid "%s has raspberried you!" msgstr "%s rutisi nenäsi edessä." -#: ../libpurple/protocols/myspace/zap.c:97 #, c-format msgid "Raspberrying %s..." msgstr "Rutistaan tuttavalle %s..." -#: ../libpurple/protocols/novell/nmuser.c:1864 msgid "Required parameters not passed in" msgstr "Vaadittuja parametreja ei syötetty" -#: ../libpurple/protocols/novell/nmuser.c:1867 msgid "Unable to write to network" msgstr "Verkkoon ei voi kirjoittaa" -#: ../libpurple/protocols/novell/nmuser.c:1870 msgid "Unable to read from network" msgstr "Verkosta ei voi lukea" -#: ../libpurple/protocols/novell/nmuser.c:1873 msgid "Error communicating with server" msgstr "Virhe kommunikoitaessa palvelimelle" -#: ../libpurple/protocols/novell/nmuser.c:1877 msgid "Conference not found" msgstr "Konferenssia ei löydy" -#: ../libpurple/protocols/novell/nmuser.c:1880 msgid "Conference does not exist" msgstr "Konferenssia ei ole" -#: ../libpurple/protocols/novell/nmuser.c:1884 msgid "A folder with that name already exists" msgstr "Valitun niminen kansio on jo olemassa" -#: ../libpurple/protocols/novell/nmuser.c:1887 msgid "Not supported" msgstr "Ei tueta" -#: ../libpurple/protocols/novell/nmuser.c:1891 msgid "Password has expired" msgstr "Salasana vanhentunut" -#: ../libpurple/protocols/novell/nmuser.c:1894 msgid "Incorrect password" msgstr "Virheellinen salasana" -#: ../libpurple/protocols/novell/nmuser.c:1897 msgid "User not found" msgstr "Käyttäjää ei löydy" -#: ../libpurple/protocols/novell/nmuser.c:1900 msgid "Account has been disabled" msgstr "Käyttäjätili on poistettu käytöstä" -#: ../libpurple/protocols/novell/nmuser.c:1903 msgid "The server could not access the directory" msgstr "Palvelin ei pääse hakemistoon" -#: ../libpurple/protocols/novell/nmuser.c:1906 msgid "Your system administrator has disabled this operation" msgstr "Järjestelmänne ylläpitäjä on estänyt tämän toiminnon." -#: ../libpurple/protocols/novell/nmuser.c:1909 msgid "The server is unavailable; try again later" msgstr "Palvelin ei ole käytössä; yritä myöhemmin uudelleen" -#: ../libpurple/protocols/novell/nmuser.c:1912 msgid "Cannot add a contact to the same folder twice" msgstr "Tuttavaa ei voi lisätä samaan kansioon kahdesti" -#: ../libpurple/protocols/novell/nmuser.c:1915 msgid "Cannot add yourself" msgstr "Et voi lisätä itseäsi" -#: ../libpurple/protocols/novell/nmuser.c:1918 msgid "Master archive is misconfigured" msgstr "Pääarkisto on väärin konfiguroitu" -#: ../libpurple/protocols/novell/nmuser.c:1922 msgid "Incorrect username or password" msgstr "Virheellinen käyttäjänimi tai salasana" -#: ../libpurple/protocols/novell/nmuser.c:1925 msgid "Could not recognize the host of the username you entered" msgstr "Syötetyn käyttäjänimen isäntäpalvelinta ei voi tunnistaa" -#: ../libpurple/protocols/novell/nmuser.c:1928 msgid "" "Your account has been disabled because too many incorrect passwords were " "entered" @@ -8363,31 +5861,24 @@ "Käyttäjätilisi käyttö on estetty koska liian monta väärää salasanaa on " "syötetty" -#: ../libpurple/protocols/novell/nmuser.c:1931 msgid "You cannot add the same person twice to a conversation" msgstr "Et voi lisätä samaa henkilöä kahdesti keskusteluun" -#: ../libpurple/protocols/novell/nmuser.c:1935 msgid "You have reached your limit for the number of contacts allowed" msgstr "Olet saavuttanut rajasi sallittujen tuttavien määrässä" -#: ../libpurple/protocols/novell/nmuser.c:1938 msgid "You have entered an incorrect username" msgstr "Olet syöttänyt epäkelvon käyttäjänimen" -#: ../libpurple/protocols/novell/nmuser.c:1941 msgid "An error occurred while updating the directory" msgstr "Virhe tapahtui päivitettäessä hakemistoa" -#: ../libpurple/protocols/novell/nmuser.c:1944 msgid "Incompatible protocol version" msgstr "Epäyhteensopiva yhteyskäytäntöversio" -#: ../libpurple/protocols/novell/nmuser.c:1947 msgid "The user has blocked you" msgstr "Käyttäjä on estänyt sinut" -#: ../libpurple/protocols/novell/nmuser.c:1950 msgid "" "This evaluation version does not allow more than ten users to log in at one " "time" @@ -8395,54 +5886,43 @@ "Tämä kokeiluversio ei salli enempää kuin kymmenen käyttäjää kirjautuneena " "sisään samaan aikaan" -#: ../libpurple/protocols/novell/nmuser.c:1953 msgid "The user is either offline or you are blocked" msgstr "Käyttäjä on joko poissa linjoilta tai sinut on estetty" -#: ../libpurple/protocols/novell/nmuser.c:1956 #, c-format msgid "Unknown error: 0x%X" msgstr "Tuntematon virhe: 0x%X" -#: ../libpurple/protocols/novell/novell.c:124 #, c-format msgid "Login failed (%s)." msgstr "Kirjautuminen epäonnistui (%s)." -#: ../libpurple/protocols/novell/novell.c:255 #, c-format msgid "Unable to send message. Could not get details for user (%s)." msgstr "Viestiä ei voi lähettää. Ei saatu yksityiskohtia käyttäjälle (%s)." -#: ../libpurple/protocols/novell/novell.c:404 #, c-format msgid "Unable to add %s to your buddy list (%s)." msgstr "%s ei voi lisätä tuttaviin (%s)." #. TODO: Improve this! message to who or for what conference? -#: ../libpurple/protocols/novell/novell.c:430 #, c-format msgid "Unable to send message (%s)." msgstr "Viestiä ei voi lähettää (%s)." -#: ../libpurple/protocols/novell/novell.c:501 -#: ../libpurple/protocols/novell/novell.c:993 #, c-format msgid "Unable to invite user (%s)." msgstr "Käyttäjää ei voi kutsua (%s)." -#: ../libpurple/protocols/novell/novell.c:540 #, c-format msgid "Unable to send message to %s. Could not create the conference (%s)." msgstr "" "Viestiä ei voi lähettää käyttäjälle %s. Konferenssia ei voi luoda (%s)." -#: ../libpurple/protocols/novell/novell.c:545 #, c-format msgid "Unable to send message. Could not create the conference (%s)." msgstr "Viestiä ei voi lähettää. Konferenssia ei voi luoda (%s)." -#: ../libpurple/protocols/novell/novell.c:592 #, c-format msgid "" "Unable to move user %s to folder %s in the server side list. Error while " @@ -8451,7 +5931,6 @@ "Käyttäjää %s ei voi siirtää kansioon %s palvelinpuolen tuttavissa. Virhe " "luotaessa kansiota (%s)." -#: ../libpurple/protocols/novell/novell.c:640 #, c-format msgid "" "Unable to add %s to your buddy list. Error creating folder in server side " @@ -8460,62 +5939,46 @@ "%s ei voi lisätä tuttaviin. Virhe luotaessa kansiota palvelinpuolen " "tuttaviin (%s)." -#: ../libpurple/protocols/novell/novell.c:713 #, c-format msgid "Could not get details for user %s (%s)." msgstr "Ei saatu yksityiskohtia käyttäjälle %s (%s)." -#: ../libpurple/protocols/novell/novell.c:759 -#: ../libpurple/protocols/novell/novell.c:905 #, c-format msgid "Unable to add user to privacy list (%s)." msgstr "Käyttäjää ei voi lisätä yksityisyys-listaan (%s)." -#: ../libpurple/protocols/novell/novell.c:806 #, c-format msgid "Unable to add %s to deny list (%s)." msgstr "%s ei voi lisätä kieltolistalle (%s)." -#: ../libpurple/protocols/novell/novell.c:859 #, c-format msgid "Unable to add %s to permit list (%s)." msgstr "Ei voi lisätä %s sallitut-listalle (%s)." -#: ../libpurple/protocols/novell/novell.c:927 #, c-format msgid "Unable to remove %s from privacy list (%s)." msgstr "Ei voi poistaa %s yksityisyys-listalta (%s)." -#: ../libpurple/protocols/novell/novell.c:950 -#: ../libpurple/protocols/novell/novell.c:1656 #, c-format msgid "Unable to change server side privacy settings (%s)." msgstr "Palvelinpuolen yksityisyys-asetuksia ei voi muuttaa (%s)." -#: ../libpurple/protocols/novell/novell.c:1020 #, c-format msgid "Unable to create conference (%s)." msgstr "Konferenssia ei voi luoda (%s)." -#: ../libpurple/protocols/novell/novell.c:1131 -#: ../libpurple/protocols/novell/novell.c:1702 msgid "Error communicating with server. Closing connection." msgstr "Virhe kommunikoitaessa palvelimelle. Suljetaan yhteys." -#: ../libpurple/protocols/novell/novell.c:1485 msgid "Telephone Number" msgstr "Puhelinnumero" -#: ../libpurple/protocols/novell/novell.c:1491 msgid "Personal Title" msgstr "Titteli" -#: ../libpurple/protocols/novell/novell.c:1495 msgid "Mailstop" msgstr "Mailstop" -#: ../libpurple/protocols/novell/novell.c:1511 -#: ../libpurple/protocols/sametime/sametime.c:4178 msgid "User ID" msgstr "Käyttäjän ID" @@ -8525,37 +5988,29 @@ #. purple_notify_user_info_add_pair(user_info, tag, value); #. } #. -#: ../libpurple/protocols/novell/novell.c:1524 msgid "Full name" msgstr "Koko nimi" -#: ../libpurple/protocols/novell/novell.c:1646 #, c-format msgid "GroupWise Conference %d" msgstr "GroupWise-konferenssi %d" -#: ../libpurple/protocols/novell/novell.c:1729 msgid "Authenticating..." msgstr "Todennetaan..." -#: ../libpurple/protocols/novell/novell.c:1743 msgid "Unable to connect to server." msgstr "Palvelimeen ei kyetty muodostamaan yhteyttä." -#: ../libpurple/protocols/novell/novell.c:1746 msgid "Waiting for response..." msgstr "Odotetaan vastausta..." -#: ../libpurple/protocols/novell/novell.c:1881 #, c-format msgid "%s has been invited to this conversation." msgstr "%s on kutsuttu tähän keskusteluun." -#: ../libpurple/protocols/novell/novell.c:1909 msgid "Invitation to Conversation" msgstr "Keskustelukutsu" -#: ../libpurple/protocols/novell/novell.c:1910 #, c-format msgid "" "Invitation from: %s\n" @@ -8566,23 +6021,19 @@ "\n" "Lähetetty: %s" -#: ../libpurple/protocols/novell/novell.c:1912 msgid "Would you like to join the conversation?" msgstr "Haluatko liittyä keskusteluun?" -#: ../libpurple/protocols/novell/novell.c:2028 msgid "You have been logged out because you logged in at another workstation." msgstr "" "Sinut on kirjattu ulos koska olet kirjautunut sisään toiselta työasemalta." -#: ../libpurple/protocols/novell/novell.c:2085 #, c-format msgid "" "%s appears to be offline and did not receive the message that you just sent." msgstr "" "%s näyttää olevan poissa linjoilta eikä saanut viestiä jonka juuri lähetit." -#: ../libpurple/protocols/novell/novell.c:2185 msgid "" "Unable to connect to server. Please enter the address of the server you wish " "to connect to." @@ -8590,11 +6041,9 @@ "Palvelimeen ei voi yhdistää. Ole hyvä, syötä palvelimen osoite jolle haluat " "yhdistää." -#: ../libpurple/protocols/novell/novell.c:2214 msgid "Error. SSL support is not installed." msgstr "Virhe. SSL-tuki ei ole asennettu." -#: ../libpurple/protocols/novell/novell.c:2522 #, c-format msgid "This conference has been closed. No more messages can be sent." msgstr "Tämä konferenssi on suljettu. Uusia viestejä ei voi lähettää." @@ -8609,41 +6058,24 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/novell/novell.c:3536 -#: ../libpurple/protocols/novell/novell.c:3538 msgid "Novell GroupWise Messenger Protocol Plugin" msgstr "Novell GroupWise Messenger -yhteyskäytäntöliitännäinen" -#: ../libpurple/protocols/novell/novell.c:3563 msgid "Server address" msgstr "Palvelimen osoite" -#: ../libpurple/protocols/novell/novell.c:3567 msgid "Server port" msgstr "Palvelimen portti" -#: ../libpurple/protocols/oscar/family_chatnav.c:62 msgid "Could not join chat room" msgstr "Keskusteluhuoneeseen ei voi liittyä" -#: ../libpurple/protocols/oscar/family_chatnav.c:63 msgid "Invalid chat room name" msgstr "Epäkelpo keskusteluhuoneen nimi" -#: ../libpurple/protocols/oscar/flap_connection.c:396 -#: ../libpurple/protocols/yahoo/yahoo.c:2505 -#: ../libpurple/protocols/yahoo/yahoo.c:2673 -#: ../libpurple/protocols/yahoo/ycht.c:482 ../libpurple/proxy.c:609 -#: ../libpurple/proxy.c:1161 ../libpurple/proxy.c:1270 -#: ../libpurple/proxy.c:1376 ../libpurple/proxy.c:1529 msgid "Server closed the connection." msgstr "Palvelin on katkaissut yhteyden." -#: ../libpurple/protocols/oscar/flap_connection.c:398 -#: ../libpurple/protocols/yahoo/yahoo.c:2498 -#: ../libpurple/protocols/yahoo/yahoo.c:2666 ../libpurple/proxy.c:621 -#: ../libpurple/proxy.c:1173 ../libpurple/proxy.c:1282 -#: ../libpurple/proxy.c:1388 ../libpurple/proxy.c:1541 #, c-format msgid "" "Lost connection with server:\n" @@ -8652,10 +6084,6 @@ "Yhteys palvelimeen katkesi:\n" "%s" -#: ../libpurple/protocols/oscar/flap_connection.c:401 -#: ../libpurple/proxy.c:1190 ../libpurple/proxy.c:1295 -#: ../libpurple/proxy.c:1400 ../libpurple/proxy.c:1490 -#: ../libpurple/proxy.c:1554 msgid "Received invalid data on connection with server." msgstr "Palvelimeen yhdistettäessä vastaanotettiin virheellisiä tietoja." @@ -8669,8 +6097,6 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/oscar/libaim.c:118 -#: ../libpurple/protocols/oscar/libaim.c:120 msgid "AIM Protocol Plugin" msgstr "AIM-yhteyskäytäntöliitännäinen" @@ -8684,43 +6110,31 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/oscar/libicq.c:118 -#: ../libpurple/protocols/oscar/libicq.c:120 msgid "ICQ Protocol Plugin" msgstr "ICQ-yhteyskäytäntöliitännäinen" -#: ../libpurple/protocols/oscar/libicq.c:147 -#: ../libpurple/protocols/yahoo/yahoo.c:4456 -#: ../libpurple/protocols/zephyr/zephyr.c:2982 msgid "Encoding" msgstr "Merkistö" -#: ../libpurple/protocols/oscar/odc.c:42 msgid "The remote user has closed the connection." msgstr "Käyttäjä on katkaissut yhteyden." -#: ../libpurple/protocols/oscar/odc.c:44 msgid "The remote user has declined your request." msgstr "Käyttäjä on kieltäytynyt pyynnöstäsi." -#: ../libpurple/protocols/oscar/odc.c:46 #, c-format msgid "Lost connection with the remote user:<br>%s" msgstr "Yhteys käyttäjään katkesi:<br>%s" -#: ../libpurple/protocols/oscar/odc.c:49 msgid "Received invalid data on connection with remote user." msgstr "Vastaanotettiin virheellisiä tietoja luotaessa yhteyttä käyttäjään." -#: ../libpurple/protocols/oscar/odc.c:51 msgid "Could not establish a connection with the remote user." msgstr "Yhteyttä käyttäjän kanssa ei voi muodostaa." -#: ../libpurple/protocols/oscar/odc.c:562 msgid "Direct IM established" msgstr "Suora pikaviestiyhteys muodostettu" -#: ../libpurple/protocols/oscar/odc.c:600 #, c-format msgid "" "%s tried to send you a %s file, but we only allow files up to %s over Direct " @@ -8729,109 +6143,83 @@ "%s yritti lähettää sinulle %s-tiedoston, mutta vain tiedostot %s asti ovat " "sallittuja suorassa IM-yhteydessä. Yritä tiedostonsiirtoa sen sijaan.\n" -#: ../libpurple/protocols/oscar/oft.c:656 #, c-format msgid "File %s is %s, which is larger than the maximum size of %s." msgstr "" "Tiedosto %s on kooltaan %s, mikä on enemmän kuin suurin sallittu koko %s." -#: ../libpurple/protocols/oscar/oscar.c:117 msgid "Invalid error" msgstr "Epäkelpo virhe" -#: ../libpurple/protocols/oscar/oscar.c:118 msgid "Invalid SNAC" msgstr "Epäkelpo SNAC" -#: ../libpurple/protocols/oscar/oscar.c:119 msgid "Rate to host" msgstr "Nopeus isäntään" -#: ../libpurple/protocols/oscar/oscar.c:120 msgid "Rate to client" msgstr "Nopeus asiakasohjelmaan" -#: ../libpurple/protocols/oscar/oscar.c:122 msgid "Service unavailable" msgstr "Palvelu ei ole käytettävissä" -#: ../libpurple/protocols/oscar/oscar.c:123 msgid "Service not defined" msgstr "Palvelua ei määritelty" -#: ../libpurple/protocols/oscar/oscar.c:124 msgid "Obsolete SNAC" msgstr "Vanhentunut SNAC" -#: ../libpurple/protocols/oscar/oscar.c:125 msgid "Not supported by host" msgstr "Ei tuettu verkkoisännässä" -#: ../libpurple/protocols/oscar/oscar.c:126 msgid "Not supported by client" msgstr "Ei tuettu asiakasohjelmassa" -#: ../libpurple/protocols/oscar/oscar.c:127 msgid "Refused by client" msgstr "Asiakasohjelma torjui" -#: ../libpurple/protocols/oscar/oscar.c:128 msgid "Reply too big" msgstr "Vastaus liian suuri" -#: ../libpurple/protocols/oscar/oscar.c:129 msgid "Responses lost" msgstr "Vastaukset menetetty" -#: ../libpurple/protocols/oscar/oscar.c:130 msgid "Request denied" msgstr "Pyyntö evätty" -#: ../libpurple/protocols/oscar/oscar.c:131 msgid "Busted SNAC payload" msgstr "Rikkoutunut SNAC-data" -#: ../libpurple/protocols/oscar/oscar.c:132 msgid "Insufficient rights" msgstr "Liian vähän oikeuksia" -#: ../libpurple/protocols/oscar/oscar.c:133 msgid "In local permit/deny" msgstr "Paikallisessa sallittujen/estettyjen listassa" -#: ../libpurple/protocols/oscar/oscar.c:134 -msgid "Too evil (sender)" -msgstr "Lähettäjä liian paha(evil)" - -#: ../libpurple/protocols/oscar/oscar.c:135 -msgid "Too evil (receiver)" -msgstr "Vastaanottaja liian paha(evil)" - -#: ../libpurple/protocols/oscar/oscar.c:136 +msgid "Warning level too high (sender)" +msgstr "Varoitustaso liian korkea (lähettäjä)" + +msgid "Warning level too high (receiver)" +msgstr "Varoitustaso liian korkea (vastaanottaja)" + msgid "User temporarily unavailable" msgstr "Käyttäjä ei tilapäisesti saatavilla." -#: ../libpurple/protocols/oscar/oscar.c:137 msgid "No match" msgstr "Ei tuloksia" -#: ../libpurple/protocols/oscar/oscar.c:138 msgid "List overflow" msgstr "Lista-ylivuoto" -#: ../libpurple/protocols/oscar/oscar.c:139 msgid "Request ambiguous" msgstr "Pyyntö ei ole yksiselitteinen" -#: ../libpurple/protocols/oscar/oscar.c:140 msgid "Queue full" msgstr "Jono täynnä" -#: ../libpurple/protocols/oscar/oscar.c:141 msgid "Not while on AOL" msgstr "Ei kun AOL on käytössä" -#: ../libpurple/protocols/oscar/oscar.c:349 msgid "" "(There was an error receiving this message. The buddy you are speaking with " "is probably using a different encoding than expected. If you know what " @@ -8843,7 +6231,6 @@ "merkistöä hän käyttää, voit määritellä sen AIM/ICQ-käyttäjätilisi " "lisäasetuksissa.)" -#: ../libpurple/protocols/oscar/oscar.c:458 #, c-format msgid "" "(There was an error receiving this message. Either you and %s have " @@ -8854,140 +6241,101 @@ "asiakasohjelma.)" #. Label -#: ../libpurple/protocols/oscar/oscar.c:640 ../pidgin/gtkutils.c:2444 -#: ../pidgin/gtkutils.c:2474 -#: ../pidgin/plugins/gevolution/new_person_dialog.c:336 msgid "Buddy Icon" msgstr "Tuttavakuvake" -#: ../libpurple/protocols/oscar/oscar.c:643 msgid "Voice" msgstr "Ääni" -#: ../libpurple/protocols/oscar/oscar.c:646 msgid "AIM Direct IM" msgstr "AIM:n suora pikaviesti" -#: ../libpurple/protocols/oscar/oscar.c:652 -#: ../libpurple/protocols/oscar/oscar.c:6123 msgid "Get File" msgstr "Vastaanota tiedosto" -#: ../libpurple/protocols/oscar/oscar.c:659 msgid "Games" msgstr "Pelit" -#: ../libpurple/protocols/oscar/oscar.c:662 msgid "Add-Ins" msgstr "Lisäykset" -#: ../libpurple/protocols/oscar/oscar.c:665 msgid "Send Buddy List" msgstr "Lähetä tuttavat" -#: ../libpurple/protocols/oscar/oscar.c:668 msgid "ICQ Direct Connect" msgstr "ICQ-suorayhteys" -#: ../libpurple/protocols/oscar/oscar.c:671 msgid "AP User" msgstr "AP-käyttäjä" -#: ../libpurple/protocols/oscar/oscar.c:674 msgid "ICQ RTF" msgstr "ICQ RTF" -#: ../libpurple/protocols/oscar/oscar.c:677 msgid "Nihilist" msgstr "Nihilistinen" -#: ../libpurple/protocols/oscar/oscar.c:680 msgid "ICQ Server Relay" msgstr "ICQ-palvelimen välitys" -#: ../libpurple/protocols/oscar/oscar.c:683 msgid "Old ICQ UTF8" msgstr "Vanha ICQ UTF8" -#: ../libpurple/protocols/oscar/oscar.c:686 msgid "Trillian Encryption" msgstr "Trillian-salaus" -#: ../libpurple/protocols/oscar/oscar.c:689 msgid "ICQ UTF8" msgstr "ICQ UTF8" -#: ../libpurple/protocols/oscar/oscar.c:692 msgid "Hiptop" msgstr "Hiptop" -#: ../libpurple/protocols/oscar/oscar.c:695 msgid "Security Enabled" msgstr "Turvatoimet käytössä" -#: ../libpurple/protocols/oscar/oscar.c:698 msgid "Video Chat" msgstr "Videokeskustelu" -#: ../libpurple/protocols/oscar/oscar.c:702 msgid "iChat AV" msgstr "iChat AV" -#: ../libpurple/protocols/oscar/oscar.c:705 msgid "Live Video" msgstr "Live-video" -#: ../libpurple/protocols/oscar/oscar.c:708 msgid "Camera" msgstr "Kamera" -#: ../libpurple/protocols/oscar/oscar.c:726 -#: ../libpurple/protocols/oscar/oscar.c:5893 +msgid "Screen Sharing" +msgstr "Näytön jakaminen" + #, c-format msgid "Free For Chat" msgstr "Vapaana keskusteluun" -#: ../libpurple/protocols/oscar/oscar.c:730 -#: ../libpurple/protocols/oscar/oscar.c:5928 #, c-format msgid "Not Available" msgstr "Ei tavoitettavissa" -#: ../libpurple/protocols/oscar/oscar.c:732 -#: ../libpurple/protocols/oscar/oscar.c:5914 #, c-format msgid "Occupied" msgstr "Varattu" -#: ../libpurple/protocols/oscar/oscar.c:736 #, c-format msgid "Web Aware" msgstr "Net-tietoinen" -#: ../libpurple/protocols/oscar/oscar.c:738 ../libpurple/protocols/qq/qq.c:184 -#: ../libpurple/protocols/qq/qq.c:289 -#: ../libpurple/protocols/yahoo/yahoo.c:3152 ../libpurple/status.c:158 -#: ../pidgin/gtkdocklet.c:557 ../pidgin/gtkstatusbox.c:1089 #, c-format msgid "Invisible" msgstr "Näkymätön" -#: ../libpurple/protocols/oscar/oscar.c:839 -#: ../libpurple/protocols/oscar/oscar.c:3744 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:721 ../pidgin/gtkprefs.c:1210 msgid "IP Address" msgstr "IP-osoite" -#: ../libpurple/protocols/oscar/oscar.c:846 -#: ../libpurple/protocols/oscar/oscar.c:2945 msgid "Warning Level" msgstr "Varoitustaso" -#: ../libpurple/protocols/oscar/oscar.c:856 msgid "Buddy Comment" msgstr "Tuttavakommentti" -#: ../libpurple/protocols/oscar/oscar.c:996 #, c-format msgid "" "Could not connect to authentication server:\n" @@ -8996,7 +6344,6 @@ "Ei saatu yhteyttä todentamispalvelimeen:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:1004 #, c-format msgid "" "Could not connect to BOS server:\n" @@ -9005,20 +6352,16 @@ "Ei saatu yhteyttä BOS-palvelimeen:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:1044 msgid "Username sent" msgstr "Käyttäjänimi lähetetty" -#: ../libpurple/protocols/oscar/oscar.c:1049 msgid "Connection established, cookie sent" msgstr "Yhteys muodostettu, eväste lähetetty" #. TODO: Don't call this with ssi -#: ../libpurple/protocols/oscar/oscar.c:1078 msgid "Finalizing connection" msgstr "Viimeistellään yhteyttä" -#: ../libpurple/protocols/oscar/oscar.c:1306 #, c-format msgid "" "Unable to login: Could not sign on as %s because the username is invalid. " @@ -9031,32 +6374,22 @@ "sisältää vain numeroita." #. Unregistered screen name -#: ../libpurple/protocols/oscar/oscar.c:1392 -#: ../libpurple/protocols/yahoo/yahoo.c:2127 msgid "Invalid username." msgstr "Epäkelpo käyttäjänimi." -#: ../libpurple/protocols/oscar/oscar.c:1398 -#: ../libpurple/protocols/qq/login_logout.c:485 -#: ../libpurple/protocols/simple/simple.c:1112 -#: ../libpurple/protocols/yahoo/yahoo.c:2149 msgid "Incorrect password." msgstr "Virheellinen salasana." #. Suspended account -#: ../libpurple/protocols/oscar/oscar.c:1402 msgid "Your account is currently suspended." msgstr "Käyttäjätilisi palvelu on parhaillaan keskeytetty." #. service temporarily unavailable -#: ../libpurple/protocols/oscar/oscar.c:1406 msgid "The AOL Instant Messenger service is temporarily unavailable." msgstr "AOL-pikaviestipalvelu ei tilapäisesti ole käytössä." #. screen name connecting too frequently #. IP address connecting too frequently -#: ../libpurple/protocols/oscar/oscar.c:1410 -#: ../libpurple/protocols/oscar/oscar.c:1419 msgid "" "You have been connecting and disconnecting too frequently. Wait ten minutes " "and try again. If you continue to try, you will need to wait even longer." @@ -9065,44 +6398,31 @@ "ja yritä uudelleen. Jos jatkat yrittämistä, joudut odottamaan vielä " "pidempään." -#. client too old -#: ../libpurple/protocols/oscar/oscar.c:1414 #, c-format msgid "The client version you are using is too old. Please upgrade at %s" msgstr "Asiakasohjelmasi versio on liian vanha. Päivitä osoitteessa %s" -#: ../libpurple/protocols/oscar/oscar.c:1452 msgid "Could Not Connect" msgstr "Yhteyttä ei voi muodostaa" -#: ../libpurple/protocols/oscar/oscar.c:1456 msgid "Received authorization" msgstr "Saatiin lupa" -#: ../libpurple/protocols/oscar/oscar.c:1479 msgid "The SecurID key entered is invalid." msgstr "Syötetty SecurID-avain on virheellinen." -#: ../libpurple/protocols/oscar/oscar.c:1492 msgid "Enter SecurID" msgstr "Syötä SecurID" -#: ../libpurple/protocols/oscar/oscar.c:1493 msgid "Enter the 6 digit number from the digital display." msgstr "Syötä 6 numeroinen luku digitaaliselta näytöltä." #. * #. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons. #. -#: ../libpurple/protocols/oscar/oscar.c:1495 -#: ../libpurple/protocols/oscar/oscar.c:2287 -#: ../libpurple/protocols/oscar/oscar.c:2335 -#: ../libpurple/protocols/oscar/oscar.c:5998 -#: ../libpurple/protocols/oscar/oscar.c:6280 ../libpurple/request.h:1401 msgid "_OK" msgstr "_OK" -#: ../libpurple/protocols/oscar/oscar.c:1534 #, c-format msgid "" "You may be disconnected shortly. You may want to use TOC until this is " @@ -9111,54 +6431,38 @@ "Yhteytesi saatetaan katkaista kohta. Saatat haluta käyttää TOC-" "yhteyskäytäntöä kunnes tämä on korjattu. Tarkista päivitykset: %s" -#: ../libpurple/protocols/oscar/oscar.c:1537 -#: ../libpurple/protocols/oscar/oscar.c:1581 msgid "Unable to get a valid AIM login hash." msgstr "Kelvollista AIM-sisäänkirjautumistiivistettä ei saatu." -#: ../libpurple/protocols/oscar/oscar.c:1578 -#: ../libpurple/protocols/oscar/oscar.c:1677 #, c-format msgid "You may be disconnected shortly. Check %s for updates." msgstr "Yhteytesi saatetaan katkaista kohta. Tarkista päivitykset: %s." -#: ../libpurple/protocols/oscar/oscar.c:1680 msgid "Unable to get a valid login hash." msgstr "Kelvollista sisäänkirjautumistiivistettä ei saatu." -#: ../libpurple/protocols/oscar/oscar.c:1710 +#. allow multple logins? msgid "Password sent" msgstr "Salasana lähetetty" -#: ../libpurple/protocols/oscar/oscar.c:1766 msgid "Unable to initialize connection" msgstr "Yhteyden luominen epäonnistui" -#: ../libpurple/protocols/oscar/oscar.c:2256 msgid "Please authorize me so I can add you to my buddy list." msgstr "Valtuuttaisitko minut, jotta voin lisätä sinut tuttaviini?" -#: ../libpurple/protocols/oscar/oscar.c:2285 msgid "Authorization Request Message:" msgstr "Valtuutuksen pyyntöviesti:" -#: ../libpurple/protocols/oscar/oscar.c:2286 msgid "Please authorize me!" msgstr "Voisitko valtuuttaa minut?" -#: ../libpurple/protocols/oscar/oscar.c:2326 -#: ../libpurple/protocols/oscar/oscar.c:2334 -#: ../libpurple/protocols/oscar/oscar.c:2461 -#: ../libpurple/protocols/oscar/oscar.c:5370 -#: ../libpurple/protocols/yahoo/yahoo.c:991 msgid "No reason given." msgstr "Syytä ei annettu." -#: ../libpurple/protocols/oscar/oscar.c:2333 msgid "Authorization Denied Message:" msgstr "Valtuutuspyyntö evätty:" -#: ../libpurple/protocols/oscar/oscar.c:2461 #, c-format msgid "" "The user %u has denied your request to add them to your buddy list for the " @@ -9168,17 +6472,14 @@ "Käyttäjä %u on evännyt pyyntösi lisätä hänet tuttaviisi seuraavasta syystä:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:2462 msgid "ICQ authorization denied." msgstr "ICQ-valtuutus evätty." #. Someone has granted you authorization -#: ../libpurple/protocols/oscar/oscar.c:2469 #, c-format msgid "The user %u has granted your request to add them to your buddy list." msgstr "Käyttäjä %u on hyväksynyt pyyntösi lisätä hänet tuttaviisi." -#: ../libpurple/protocols/oscar/oscar.c:2477 #, c-format msgid "" "You have received a special message\n" @@ -9191,7 +6492,6 @@ "Lähettäjä: %s [%s]\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:2485 #, c-format msgid "" "You have received an ICQ page\n" @@ -9204,7 +6504,6 @@ "Lähettäjä: %s [%s]\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:2493 #, c-format msgid "" "You have received an ICQ email from %s [%s]\n" @@ -9217,38 +6516,31 @@ "Viesti on:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:2514 #, c-format msgid "ICQ user %u has sent you a buddy: %s (%s)" msgstr "ICQ-käyttäjä %u on lähettänyt sinulle tuttavan: %s (%s)" -#: ../libpurple/protocols/oscar/oscar.c:2520 msgid "Do you want to add this buddy to your buddy list?" msgstr "Haluatko lisätä hänet tuttaviisi?" -#: ../libpurple/protocols/oscar/oscar.c:2525 ../pidgin/gtkroomlist.c:320 msgid "_Add" msgstr "_Lisää" -#: ../libpurple/protocols/oscar/oscar.c:2526 msgid "_Decline" msgstr "_Kieltäydy" -#: ../libpurple/protocols/oscar/oscar.c:2650 #, 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] "Et saanut %hu viestiä %s:lta koska se oli epäkelpo." msgstr[1] "Et saanut %hu viestiä %s:lta koska ne olivat epäkelpoja." -#: ../libpurple/protocols/oscar/oscar.c:2659 #, 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] "Et saanut %hu viestiä %s:lta koska se oli liian suuri." msgstr[1] "Et saanut %hu viestiä %s:lta koska ne olivat liian suuria." -#: ../libpurple/protocols/oscar/oscar.c:2668 #, c-format msgid "" "You missed %hu message from %s because the rate limit has been exceeded." @@ -9257,21 +6549,23 @@ msgstr[0] "Et saanut %hu viestiä %s:lta koska taajuusraja ylittyi." msgstr[1] "Et saanut %hu viestiä %s:lta koska taajuusraja ylittyi." -#: ../libpurple/protocols/oscar/oscar.c:2677 -#, c-format -msgid "You missed %hu message from %s because he/she was too evil." -msgid_plural "You missed %hu messages from %s because he/she was too evil." -msgstr[0] "Et saanut %hu viestiä %s:lta koska hän on liian hirveä." -msgstr[1] "Et saanut %hu viestiä %s:lta koska hän on liian hirveä." - -#: ../libpurple/protocols/oscar/oscar.c:2686 -#, c-format -msgid "You missed %hu message from %s because you are too evil." -msgid_plural "You missed %hu messages from %s because you are too evil." -msgstr[0] "Et saanut %hu viestiä %s:lta koska olet liian hirveä." -msgstr[1] "Et saanut %hu viestiä %s:lta koska olet liian hirveä." - -#: ../libpurple/protocols/oscar/oscar.c:2695 +#, 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] "" +"Et saanut %hu viestiä %s:lta koska hänen varoitustasonsa on liian korkea." +msgstr[1] "" +"Et saanut %hu viestiä %s:lta koska hänen varoitustasonsa on liian korkea." + +#, 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] "Et saanut %hu viestiä %s:lta koska varoitustasosi on liian korkea." +msgstr[1] "Et saanut %hu viestiä %s:lta koska varoitustasosi on liian korkea." + #, 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." @@ -9279,47 +6573,31 @@ msgstr[1] "Et saanut %hu viestiä %s:lta tuntemattomasta syystä." #. Data is assumed to be the destination sn -#: ../libpurple/protocols/oscar/oscar.c:2850 #, c-format msgid "Unable to send message: %s" msgstr "Viestiä ei voi lähettää: %s" -#: ../libpurple/protocols/oscar/oscar.c:2850 -#: ../libpurple/protocols/oscar/oscar.c:2855 -#: ../libpurple/protocols/oscar/oscar.c:2919 msgid "Unknown reason." msgstr "Tuntematon syy." -#: ../libpurple/protocols/oscar/oscar.c:2853 -#: ../libpurple/protocols/sametime/sametime.c:2461 #, c-format msgid "Unable to send message to %s:" msgstr "Viestiä ei voi lähettää käyttäjälle %s." -#: ../libpurple/protocols/oscar/oscar.c:2919 #, c-format msgid "User information not available: %s" msgstr "Käyttäjätiedot eivät ole saatavilla: %s" -#: ../libpurple/protocols/oscar/oscar.c:2950 msgid "Online Since" msgstr "Kirjautunut" -#: ../libpurple/protocols/oscar/oscar.c:2955 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1192 msgid "Member Since" msgstr "Rekisteröitynyt" -#: ../libpurple/protocols/oscar/oscar.c:2990 -msgid "Available Message" -msgstr "Paikallaoloviesti" - -#: ../libpurple/protocols/oscar/oscar.c:3094 msgid "Your AIM connection may be lost." msgstr "AIM-yhteytesi saattaa olla katkennut." #. The conversion failed! -#: ../libpurple/protocols/oscar/oscar.c:3282 msgid "" "[Unable to display a message from this user because it contained invalid " "characters.]" @@ -9327,7 +6605,6 @@ "[Viestiä tältä käyttäjältä ei voi näyttää koska se sisälsi epäkelpoja " "merkkejä.]" -#: ../libpurple/protocols/oscar/oscar.c:3446 msgid "" "The last action you attempted could not be performed because you are over " "the rate limit. Please wait 10 seconds and try again." @@ -9335,74 +6612,56 @@ "Viimeistä viestiä ei lähetetty koska olet ylittänyt taajuusrajan. Odota 10 " "sekuntia ja yritä uudelleen." -#: ../libpurple/protocols/oscar/oscar.c:3531 -#: ../libpurple/protocols/toc/toc.c:977 #, c-format msgid "You have been disconnected from chat room %s." msgstr "Yhteytesi keskusteluhuoneeseen %s on katkennut." -#: ../libpurple/protocols/oscar/oscar.c:3766 -#: ../libpurple/protocols/silc/util.c:591 -#: ../libpurple/protocols/silc10/util.c:586 msgid "Mobile Phone" msgstr "Matkapuhelin" -#: ../libpurple/protocols/oscar/oscar.c:3796 msgid "Personal Web Page" msgstr "Henkilökohtainen kotisivu" -#: ../libpurple/protocols/oscar/oscar.c:3820 -#: ../libpurple/protocols/qq/buddy_info.c:40 +#. aim_userinfo_t +#. strip_html_tags msgid "Additional Information" msgstr "Lisätiedot" -#: ../libpurple/protocols/oscar/oscar.c:3828 -#: ../libpurple/protocols/oscar/oscar.c:3841 msgid "Zip Code" msgstr "Postinumero" -#: ../libpurple/protocols/oscar/oscar.c:3852 +msgid "Work Information" +msgstr "Työtiedot" + msgid "Division" msgstr "Osasto" -#: ../libpurple/protocols/oscar/oscar.c:3853 msgid "Position" msgstr "Asema" -#: ../libpurple/protocols/oscar/oscar.c:3855 msgid "Web Page" msgstr "Kotisivu" -#: ../libpurple/protocols/oscar/oscar.c:3858 -msgid "Work Information" -msgstr "Työtiedot" - -#: ../libpurple/protocols/oscar/oscar.c:3914 msgid "Pop-Up Message" msgstr "Ponnahdusviesti" -#: ../libpurple/protocols/oscar/oscar.c:3954 #, c-format msgid "The following username is associated with %s" msgid_plural "The following usernames are associated with %s" msgstr[0] "Seuraava käyttäjänimi on assosioitu %s kanssa" msgstr[1] "Seuraavat käyttäjänimet on assosioitu %s kanssa" -#: ../libpurple/protocols/oscar/oscar.c:3985 #, c-format msgid "No results found for email address %s" msgstr "Ei hakutuloksia sähköpostiosoitteelle %s" -#: ../libpurple/protocols/oscar/oscar.c:4006 #, c-format msgid "You should receive an email asking to confirm %s." msgstr "Sinun tulisi saada sähköpostiviesti %s:n varmistusta varten." -#: ../libpurple/protocols/oscar/oscar.c:4008 msgid "Account Confirmation Requested" msgstr "Tilin varmistusta pyydetty" -#: ../libpurple/protocols/oscar/oscar.c:4041 #, c-format msgid "" "Error 0x%04x: Unable to format username because the requested name differs " @@ -9411,14 +6670,12 @@ "Virhe 0x%04x: Näyttönimeä ei voi muotoilla koska pyydetty käyttäjänimi eroaa " "alkuperäisestä." -#: ../libpurple/protocols/oscar/oscar.c:4043 #, c-format msgid "Error 0x%04x: Unable to format username because it is invalid." msgstr "" "Virhe 0x%04x: Käyttäjänimeä ei voi muotoilla koska pyydetty nimi on " "virheellinen." -#: ../libpurple/protocols/oscar/oscar.c:4045 #, c-format msgid "" "Error 0x%04x: Unable to format username because the requested name is too " @@ -9427,7 +6684,6 @@ "Virhe 0x%04x: Käyttäjänimeä ei voi muotoilla koska pyydetty nimi on liian " "pitkä." -#: ../libpurple/protocols/oscar/oscar.c:4047 #, c-format msgid "" "Error 0x%04x: Unable to change email address because there is already a " @@ -9436,7 +6692,6 @@ "Virhe 0x%04x: Sähköpostiosoitetta ei voi muuttaa koska tälle käyttäjänimelle " "on jo käsittelemätön muutospyyntö." -#: ../libpurple/protocols/oscar/oscar.c:4049 #, c-format msgid "" "Error 0x%04x: Unable to change email address because the given address has " @@ -9445,7 +6700,6 @@ "Virhe 0x%04x: Sähköpostiosoitetta ei voi muuttaa koska annettu osoite on " "assosioitu liian moneen käyttäjänimeen." -#: ../libpurple/protocols/oscar/oscar.c:4051 #, c-format msgid "" "Error 0x%04x: Unable to change email address because the given address is " @@ -9454,36 +6708,29 @@ "Virhe 0x%04x: Sähköpostiosoitetta ei voi muuttaa koska annettu osoite on " "virheellinen." -#: ../libpurple/protocols/oscar/oscar.c:4053 #, c-format msgid "Error 0x%04x: Unknown error." msgstr "Virhe 0x%04x: Tuntematon virhe." -#: ../libpurple/protocols/oscar/oscar.c:4055 msgid "Error Changing Account Info" msgstr "Virhe muutettaessa käyttäjätilin tietoja" -#: ../libpurple/protocols/oscar/oscar.c:4061 #, c-format msgid "The email address for %s is %s" msgstr "%s:n sähköpostiosoite on %s" -#: ../libpurple/protocols/oscar/oscar.c:4063 msgid "Account Info" msgstr "Tilin tiedot" -#: ../libpurple/protocols/oscar/oscar.c:4249 msgid "" "Your IM Image was not sent. You must be Direct Connected to send IM Images." msgstr "" "Pikaviesti kuvaasi ei lähetetty. Sinun tulee käyttää suorayhteyttä " "lähettääksesi pikaviestikuvia." -#: ../libpurple/protocols/oscar/oscar.c:4520 msgid "Unable to set AIM profile." msgstr "AIM-profiilia ei saatu asetettua." -#: ../libpurple/protocols/oscar/oscar.c:4521 msgid "" "You have probably requested to set your profile before the login procedure " "completed. Your profile remains unset; try setting it again when you are " @@ -9493,7 +6740,6 @@ "suoritettua loppuun. Profiilia ei asetettu. Yritä asettaa se kun " "kirjautuminen on suoritettu." -#: ../libpurple/protocols/oscar/oscar.c:4535 #, c-format msgid "" "The maximum profile length of %d byte has been exceeded. It has been " @@ -9506,11 +6752,9 @@ msgstr[1] "" "Maksimi profiilin koko %d tavua ylitetty. Se on nyt lyhennetty puolestasi." -#: ../libpurple/protocols/oscar/oscar.c:4540 msgid "Profile too long." msgstr "Profiili on liian pitkä." -#: ../libpurple/protocols/oscar/oscar.c:4584 #, c-format msgid "" "The maximum away message length of %d byte has been exceeded. It has been " @@ -9525,11 +6769,9 @@ "Maksimi poissaoloviestin koko %d tavua ylitetty. Viesti lyhennettiin " "puolestasi." -#: ../libpurple/protocols/oscar/oscar.c:4589 msgid "Away message too long." msgstr "Poissaoloviesti on liian pitkä." -#: ../libpurple/protocols/oscar/oscar.c:4662 #, c-format msgid "" "Could not add the buddy %s because the username is invalid. Usernames must " @@ -9540,17 +6782,12 @@ "tulee olla oikea sähköpostiosoite, tai alkaa kirjaimella ja sisältää vain " "kirjaimia, numeroita ja välilyöntejä, tai sisältää vain numeroita." -#: ../libpurple/protocols/oscar/oscar.c:4664 -#: ../libpurple/protocols/oscar/oscar.c:5139 -#: ../libpurple/protocols/oscar/oscar.c:5154 msgid "Unable To Add" msgstr "Lisääminen epäonnistui" -#: ../libpurple/protocols/oscar/oscar.c:4783 msgid "Unable To Retrieve Buddy List" msgstr "Tuttavien nouto ei onnistunut" -#: ../libpurple/protocols/oscar/oscar.c:4784 msgid "" "The AIM servers were temporarily unable to send your buddy list. Your buddy " "list is not lost, and will probably become available in a few minutes." @@ -9559,15 +6796,9 @@ "Tuttavasi eivät ole kadonneet, ne tulevat luultavasti näkyville muutamassa " "minuutissa." -#: ../libpurple/protocols/oscar/oscar.c:4980 -#: ../libpurple/protocols/oscar/oscar.c:4982 -#: ../libpurple/protocols/oscar/oscar.c:5221 -#: ../libpurple/protocols/oscar/oscar.c:5222 -#: ../libpurple/protocols/oscar/oscar.c:5227 msgid "Orphans" msgstr "Orvot" -#: ../libpurple/protocols/oscar/oscar.c:5137 #, c-format msgid "" "Could not add the buddy %s because you have too many buddies in your buddy " @@ -9576,17 +6807,13 @@ "Tuttavaa %s ei voi lisätä koska tuttaviasi on liian monta. Ole hyvä ja " "poista joku ja yritä uudelleen." -#: ../libpurple/protocols/oscar/oscar.c:5137 -#: ../libpurple/protocols/oscar/oscar.c:5152 msgid "(no name)" msgstr "(nimetön)" -#: ../libpurple/protocols/oscar/oscar.c:5151 #, c-format msgid "Could not add the buddy %s for an unknown reason." msgstr "Tuttavaa %s ei voi lisätä tuntemattomasta syystä." -#: ../libpurple/protocols/oscar/oscar.c:5285 #, c-format msgid "" "The user %s has given you permission to add him or her to your buddy list. " @@ -9595,22 +6822,18 @@ "Käyttäjä %s on antanut sinulle luvan lisätä hänet tuttaviisi. Haluatko " "lisätä tämän käyttäjän?" -#: ../libpurple/protocols/oscar/oscar.c:5293 msgid "Authorization Given" msgstr "Valtuutus annettu" #. Granted -#: ../libpurple/protocols/oscar/oscar.c:5366 #, c-format msgid "The user %s has granted your request to add them to your buddy list." msgstr "Käyttäjä %s on hyväksynyt pyyntösi lisätä hänet tuttaviisi." -#: ../libpurple/protocols/oscar/oscar.c:5367 msgid "Authorization Granted" msgstr "Valtuutus hyväksytty" #. Denied -#: ../libpurple/protocols/oscar/oscar.c:5370 #, c-format msgid "" "The user %s has denied your request to add them to your buddy list for the " @@ -9620,49 +6843,31 @@ "Käyttäjä %s on evännyt pyyntösi lisätä hänet tuttaviisi seuraavasta syystä:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:5371 msgid "Authorization Denied" msgstr "Valtuutus evätty" -#: ../libpurple/protocols/oscar/oscar.c:5407 -#: ../libpurple/protocols/toc/toc.c:1371 msgid "_Exchange:" msgstr "_Vaihto:" -#: ../libpurple/protocols/oscar/oscar.c:5520 msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats." msgstr "" "Pikaviestikuvaasi ei lähetetty. Et voi lähettää pikaviestikuvia AIM- " "ryhmäkeskustelussa." -#: ../libpurple/protocols/oscar/oscar.c:5682 -#: ../libpurple/protocols/oscar/oscar.c:5687 -msgid "Away Message" -msgstr "Poissaoloviesti" - -#: ../libpurple/protocols/oscar/oscar.c:5687 -msgid "<i>(retrieving)</i>" -msgstr "<i>(vastaanotetaan)</i>" - -#: ../libpurple/protocols/oscar/oscar.c:5887 msgid "iTunes Music Store Link" msgstr "iTunes-musiikkikauppalinkki" -#: ../libpurple/protocols/oscar/oscar.c:5995 #, c-format msgid "Buddy Comment for %s" msgstr "Tuttavakommentti käyttäjälle %s" -#: ../libpurple/protocols/oscar/oscar.c:5996 msgid "Buddy Comment:" msgstr "Kommentti" -#: ../libpurple/protocols/oscar/oscar.c:6043 #, c-format msgid "You have selected to open a Direct IM connection with %s." msgstr "Olet päättänyt avata suoran pikaviestiyhteyden %s:n kanssa." -#: ../libpurple/protocols/oscar/oscar.c:6047 msgid "" "Because this reveals your IP address, it may be considered a security risk. " "Do you wish to continue?" @@ -9670,66 +6875,50 @@ "Koska tämä paljastaa IP-osoitteesi, sitä voidaan pitää turvallisuusriskinä. " "Haluatko jatkaa?" -#: ../libpurple/protocols/oscar/oscar.c:6053 -#: ../libpurple/protocols/oscar/peer.c:1047 msgid "C_onnect" msgstr "Y_hdistä" -#: ../libpurple/protocols/oscar/oscar.c:6088 msgid "Get AIM Info" msgstr "Hae AIM-tiedot" -#: ../libpurple/protocols/oscar/oscar.c:6094 msgid "Edit Buddy Comment" msgstr "Muokkaa kommenttia" -#: ../libpurple/protocols/oscar/oscar.c:6102 msgid "Get Status Msg" msgstr "Hae tilaviesti" -#: ../libpurple/protocols/oscar/oscar.c:6115 msgid "Direct IM" msgstr "Suora pikaviesti" -#: ../libpurple/protocols/oscar/oscar.c:6137 msgid "Re-request Authorization" msgstr "Pyydä valtuutus uudelleen" -#: ../libpurple/protocols/oscar/oscar.c:6196 msgid "Require authorization" msgstr "Pyydä valtuutusta" -#: ../libpurple/protocols/oscar/oscar.c:6199 msgid "Web aware (enabling this will cause you to receive SPAM!)" msgstr "Web-tietoinen (tämän käyttö altistaa sinut roskaposteille)" -#: ../libpurple/protocols/oscar/oscar.c:6204 msgid "ICQ Privacy Options" msgstr "ICQ-yksityisyysvalinnat" -#: ../libpurple/protocols/oscar/oscar.c:6224 msgid "The new formatting is invalid." msgstr "Uusi muotoilu on virheellinen." -#: ../libpurple/protocols/oscar/oscar.c:6225 msgid "Username formatting can change only capitalization and whitespace." msgstr "" "Käyttäjänimen muotoilu voi vaikuttaa ainoastaan alkukirjaimeen sekä " "välilyönteihin." -#: ../libpurple/protocols/oscar/oscar.c:6278 msgid "Change Address To:" msgstr "Vaihda osoite:" -#: ../libpurple/protocols/oscar/oscar.c:6324 msgid "<i>you are not waiting for authorization</i>" msgstr "<i>Et odota valtuutusta</i>" -#: ../libpurple/protocols/oscar/oscar.c:6327 msgid "You are awaiting authorization from the following buddies" msgstr "Odotat valtuutusta seuraavilta tuttavilta" -#: ../libpurple/protocols/oscar/oscar.c:6328 msgid "" "You can re-request authorization from these buddies by right-clicking on " "them and selecting \"Re-request Authorization.\"" @@ -9737,65 +6926,50 @@ "Voit pyytää valtuutuksen uudelleen näiltä tuttavilta napsauttamalla oikeaa " "nappia heihin ja valitsemalla \"Pyydä valtuutus uudelleen\"." -#: ../libpurple/protocols/oscar/oscar.c:6345 msgid "Find Buddy by Email" msgstr "Etsi tuttava sähköpostiosoitteen perusteella" -#: ../libpurple/protocols/oscar/oscar.c:6346 msgid "Search for a buddy by email address" msgstr "Etsi tuttava sähköpostiosoitteen perusteella" -#: ../libpurple/protocols/oscar/oscar.c:6347 msgid "Type the email address of the buddy you are searching for." msgstr "Syötä etsimäsi tuttavan sähköpostiosoite." -#: ../libpurple/protocols/oscar/oscar.c:6350 msgid "_Search" msgstr "_Etsi" -#: ../libpurple/protocols/oscar/oscar.c:6508 msgid "Set User Info (web)..." msgstr "Aseta käyttäjätiedot (WWW)..." -#: ../libpurple/protocols/oscar/oscar.c:6519 msgid "Change Password (web)" msgstr "Vaihda salasana (WWW)" -#: ../libpurple/protocols/oscar/oscar.c:6523 msgid "Configure IM Forwarding (web)" msgstr "Aseta pikaviestien edelleenlähetys (WWW)" #. ICQ actions -#: ../libpurple/protocols/oscar/oscar.c:6533 msgid "Set Privacy Options..." msgstr "Aseta yksityisyysvalinnat..." #. AIM actions -#: ../libpurple/protocols/oscar/oscar.c:6540 msgid "Confirm Account" msgstr "Vahvista tili" -#: ../libpurple/protocols/oscar/oscar.c:6544 msgid "Display Currently Registered Email Address" msgstr "Näytä tällä hetkellä rekisteröity sähköpostiosoite" -#: ../libpurple/protocols/oscar/oscar.c:6548 msgid "Change Currently Registered Email Address..." msgstr "Muuta tällä hetkellä rekisteröityä sähköpostiosoitetta..." -#: ../libpurple/protocols/oscar/oscar.c:6555 msgid "Show Buddies Awaiting Authorization" msgstr "Näytä tuttavat jotka odottavat valtuutusta" -#: ../libpurple/protocols/oscar/oscar.c:6561 msgid "Search for Buddy by Email Address..." msgstr "Etsi tuttavaa sähköpostiosoitteen perusteella..." -#: ../libpurple/protocols/oscar/oscar.c:6566 msgid "Search for Buddy by Information" msgstr "Etsi tuttavaa tietojen perusteella" -#: ../libpurple/protocols/oscar/oscar.c:6754 msgid "" "Always use AIM/ICQ proxy server for\n" "file transfers and direct IM (slower,\n" @@ -9806,28 +6980,26 @@ "viesteihin (hitaampi, mutta ei\n" "paljasta IP-osoitettasi)" -#: ../libpurple/protocols/oscar/peer.c:699 +msgid "Allow multiple simultaneous logins" +msgstr "Salli useat samanaikaiset kirjautumiset" + #, c-format msgid "Asking %s to connect to us at %s:%hu for Direct IM." msgstr "" "Pyydetään %s yhdistämään meihin at %s:%hu suoraa pikaviestiyhteyttä varten." -#: ../libpurple/protocols/oscar/peer.c:784 #, c-format msgid "Attempting to connect to %s:%hu." msgstr "Yritetään yhdistää kohteeseen %s:%hu." -#: ../libpurple/protocols/oscar/peer.c:858 #, c-format msgid "Attempting to connect via proxy server." msgstr "Yritetään yhdistämistä välipalvelimen kautta." -#: ../libpurple/protocols/oscar/peer.c:1035 #, c-format msgid "%s has just asked to directly connect to %s" msgstr "%s on juuri pyytänyt suoraa yhteyttä %s:n" -#: ../libpurple/protocols/oscar/peer.c:1039 msgid "" "This requires a direct connection between the two computers and is necessary " "for IM Images. Because your IP address will be revealed, this may be " @@ -9837,168 +7009,126 @@ "lähetettäessä kuvia. Koska IP-osoitteesi paljastuu, tätä voi pitää " "yksityisyysriskinä." -#: ../libpurple/protocols/qq/buddy_info.c:39 msgid "Primary Information" msgstr "Ensisijaiset tiedot" -#: ../libpurple/protocols/qq/buddy_info.c:41 msgid "Personal Introduction" msgstr "Henkilökohtainen esittely" -#: ../libpurple/protocols/qq/buddy_info.c:42 msgid "QQ Number" msgstr "QQ-numero" -#: ../libpurple/protocols/qq/buddy_info.c:47 msgid "Country/Region" msgstr "Maa/alue" -#: ../libpurple/protocols/qq/buddy_info.c:48 msgid "Province/State" msgstr "Lääni/osavaltio" -#: ../libpurple/protocols/qq/buddy_info.c:50 msgid "Horoscope Symbol" msgstr "Horoskooppimerkki" -#: ../libpurple/protocols/qq/buddy_info.c:52 msgid "Zodiac Sign" msgstr "Eläinradan merkki" -#: ../libpurple/protocols/qq/buddy_info.c:53 msgid "Blood Type" msgstr "Veriryhmä" -#: ../libpurple/protocols/qq/buddy_info.c:54 msgid "College" msgstr "Yliopisto" -#: ../libpurple/protocols/qq/buddy_info.c:57 msgid "Zipcode" msgstr "Postinumero" -#: ../libpurple/protocols/qq/buddy_info.c:58 msgid "Cellphone Number" msgstr "Matkapuhelinnumero" -#: ../libpurple/protocols/qq/buddy_info.c:59 msgid "Phone Number" msgstr "Puhelinnumero" -#: ../libpurple/protocols/qq/buddy_info.c:64 msgid "Aquarius" msgstr "vesimies" -#: ../libpurple/protocols/qq/buddy_info.c:64 msgid "Pisces" msgstr "kalat" -#: ../libpurple/protocols/qq/buddy_info.c:64 msgid "Aries" msgstr "oinas" -#: ../libpurple/protocols/qq/buddy_info.c:64 msgid "Taurus" msgstr "härkä" -#: ../libpurple/protocols/qq/buddy_info.c:65 msgid "Gemini" msgstr "kaksoset" -#: ../libpurple/protocols/qq/buddy_info.c:65 msgid "Cancer" msgstr "rapu" -#: ../libpurple/protocols/qq/buddy_info.c:65 msgid "Leo" msgstr "leijona" -#: ../libpurple/protocols/qq/buddy_info.c:65 msgid "Virgo" msgstr "neitsyt" -#: ../libpurple/protocols/qq/buddy_info.c:65 msgid "Libra" msgstr "vaaka" -#: ../libpurple/protocols/qq/buddy_info.c:66 msgid "Scorpio" msgstr "skorpioni" -#: ../libpurple/protocols/qq/buddy_info.c:66 msgid "Sagittarius" msgstr "jousimies" -#: ../libpurple/protocols/qq/buddy_info.c:66 msgid "Capricorn" msgstr "kauris" -#: ../libpurple/protocols/qq/buddy_info.c:71 msgid "Rat" msgstr "rotta" -#: ../libpurple/protocols/qq/buddy_info.c:71 msgid "Ox" msgstr "härkä" -#: ../libpurple/protocols/qq/buddy_info.c:71 msgid "Tiger" msgstr "tiikeri" -#: ../libpurple/protocols/qq/buddy_info.c:71 msgid "Rabbit" msgstr "jänis" -#: ../libpurple/protocols/qq/buddy_info.c:72 msgid "Dragon" msgstr "lohikäärme" -#: ../libpurple/protocols/qq/buddy_info.c:72 msgid "Snake" msgstr "käärme" -#: ../libpurple/protocols/qq/buddy_info.c:72 msgid "Horse" msgstr "hevonen" -#: ../libpurple/protocols/qq/buddy_info.c:72 msgid "Goat" msgstr "vuohi" -#: ../libpurple/protocols/qq/buddy_info.c:72 msgid "Monkey" msgstr "apina" -#: ../libpurple/protocols/qq/buddy_info.c:73 msgid "Rooster" msgstr "kukko" -#: ../libpurple/protocols/qq/buddy_info.c:73 msgid "Dog" msgstr "koira" -#: ../libpurple/protocols/qq/buddy_info.c:73 msgid "Pig" msgstr "sika" -#: ../libpurple/protocols/qq/buddy_info.c:78 msgid "Other" msgstr "Muu" -#: ../libpurple/protocols/qq/buddy_info.c:522 -#: ../libpurple/protocols/qq/buddy_info.c:523 msgid "Modify my information" msgstr "Muokkaa tietojani" -#: ../libpurple/protocols/qq/buddy_info.c:524 msgid "Update my information" msgstr "Päivitä tietoni" -#: ../libpurple/protocols/qq/buddy_info.c:548 msgid "Your information has been updated" msgstr "Tietosi on päivitetty" -#: ../libpurple/protocols/qq/buddy_info.c:601 #, c-format msgid "" "Setting custom faces is not currently supported. Please choose an image from " @@ -10006,218 +7136,153 @@ msgstr "" "Omien kuvien asettaminen ei ole tällä hetkellä tuettua. Valitse kuva: %s." -#: ../libpurple/protocols/qq/buddy_info.c:618 -#: ../libpurple/protocols/qq/buddy_info.c:631 msgid "Invalid QQ Face" msgstr "Epäkelpo QQ-kuva (face)" -#: ../libpurple/protocols/qq/buddy_opt.c:208 -#: ../libpurple/protocols/qq/group_opt.c:112 #, c-format msgid "You rejected %d's request" msgstr "Kieltäydyit %d:n pyynnöstä" -#: ../libpurple/protocols/qq/buddy_opt.c:209 msgid "Input your reason:" msgstr "Anna syy:" -#: ../libpurple/protocols/qq/buddy_opt.c:212 msgid "Reject request" msgstr "Kieltäydy pyynnöstä" #. title -#: ../libpurple/protocols/qq/buddy_opt.c:213 -#: ../libpurple/protocols/qq/group_opt.c:117 msgid "Sorry, you are not my type..." msgstr "Pahoittelut, en ole kiinnostunut..." -#: ../libpurple/protocols/qq/buddy_opt.c:277 msgid "Add buddy with auth request failed" msgstr "Lisää tuttava jolla on epäonnistunut valtuutuspyyntö" #. TODO: We don't really need to notify the user about this, do we? -#: ../libpurple/protocols/qq/buddy_opt.c:309 msgid "You have successfully removed a buddy" msgstr "Tuttava poistettu onnistuneesti" #. TODO: Does the user really need to be notified about this? -#: ../libpurple/protocols/qq/buddy_opt.c:338 msgid "You have successfully removed yourself from your friend's buddy list" msgstr "Sinut on onnistuneesti poistettu kaverisi tuttavista" -#: ../libpurple/protocols/qq/buddy_opt.c:404 #, c-format msgid "User %d needs authentication" msgstr "Käyttäjä %d tarvitsee valtuutuksen" -#: ../libpurple/protocols/qq/buddy_opt.c:406 -#: ../libpurple/protocols/qq/group_join.c:136 msgid "Input request here" msgstr "Anna syy tähän" #. TODO: Awkward string to fix post string freeze - standardize auth dialogues? -evands -#: ../libpurple/protocols/qq/buddy_opt.c:407 -#: ../libpurple/protocols/qq/group_join.c:137 msgid "Would you be my friend?" msgstr "Haluaisitko olla kaverini?" #. multiline #. masked #. hint -#: ../libpurple/protocols/qq/buddy_opt.c:408 -#: ../libpurple/protocols/qq/group_join.c:138 -#: ../libpurple/protocols/qq/group_opt.c:119 msgid "Send" msgstr "Lähetä" -#: ../libpurple/protocols/qq/buddy_opt.c:418 #, c-format msgid "You have added %d to buddy list" msgstr "Käyttäjä %d lisätty tuttaviisi" -#: ../libpurple/protocols/qq/buddy_opt.c:515 msgid "QQid Error" msgstr "QQid-virhe" -#: ../libpurple/protocols/qq/buddy_opt.c:516 msgid "Invalid QQid" msgstr "Epäkelpo QQid" -#: ../libpurple/protocols/qq/group.c:65 msgid "ID: " msgstr "Tunniste (ID): " -#: ../libpurple/protocols/qq/group.c:98 msgid "Group ID" msgstr "Ryhmätunniste (ID):" -#: ../libpurple/protocols/qq/group.c:100 msgid "Creator" msgstr "Luoja" -#: ../libpurple/protocols/qq/group.c:103 msgid "Group Description" msgstr "Ryhmän kuvaus" -#: ../libpurple/protocols/qq/group.c:109 msgid "Auth" msgstr "Valtuutus" -#: ../libpurple/protocols/qq/group.c:119 msgid "QQ Qun" msgstr "QQ Qun" -#: ../libpurple/protocols/qq/group.c:120 msgid "Please enter external group ID" msgstr "Syötä ulkopuolisen ryhmän tunniste (ID)" -#: ../libpurple/protocols/qq/group.c:121 msgid "You can only search for permanent QQ groups\n" msgstr "Voit etsiä vain pysyviä QQ-ryhmiä\n" -#: ../libpurple/protocols/qq/group_im.c:126 #, c-format msgid "User %d requested to join group %d" msgstr "Käyttäjä %d haki ryhmän %d jäsenyyttä" -#: ../libpurple/protocols/qq/group_im.c:127 -#: ../libpurple/protocols/qq/group_im.c:181 -#: ../libpurple/protocols/qq/sys_msg.c:196 #, c-format msgid "Reason: %s" msgstr "Syy: %s" -#: ../libpurple/protocols/qq/group_im.c:136 -#: ../libpurple/protocols/qq/group_im.c:183 -#: ../libpurple/protocols/qq/group_im.c:223 -#: ../libpurple/protocols/qq/group_im.c:258 -#: ../libpurple/protocols/qq/group_im.c:292 -#: ../libpurple/protocols/qq/group_join.c:233 -#: ../libpurple/protocols/qq/group_join.c:359 -#: ../libpurple/protocols/qq/group_opt.c:211 -#: ../libpurple/protocols/qq/group_opt.c:281 -#: ../libpurple/protocols/qq/group_opt.c:367 msgid "QQ Qun Operation" msgstr "QQ Qun -toiminta" -#: ../libpurple/protocols/qq/group_im.c:141 -#: ../libpurple/protocols/qq/group_opt.c:104 -#: ../libpurple/protocols/qq/sys_msg.c:92 -#: ../libpurple/protocols/qq/sys_msg.c:251 msgid "Approve" msgstr "Hyväksy" -#: ../libpurple/protocols/qq/group_im.c:180 #, c-format msgid "Your request to join group %d has been rejected by admin %d" msgstr "Pyyntösi liittyä ryhmään %d evättiin ylläpitäjän %d toimesta" -#: ../libpurple/protocols/qq/group_im.c:221 #, c-format msgid "Your request to join group %d has been approved by admin %d" msgstr "Pyyntösi liittyä ryhmään %d hyväksyttiin ylläpitäjän %d toimesta" -#: ../libpurple/protocols/qq/group_im.c:257 #, c-format msgid "You [%d] have left group \"%d\"" msgstr "Sinä [%d] olet poistunut ryhmästä \"%d\"" -#: ../libpurple/protocols/qq/group_im.c:291 #, c-format msgid "You [%d] have been added to group \"%d\"" msgstr "Sinä [%d] olet lisätty ryhmään \"%d\"" -#: ../libpurple/protocols/qq/group_im.c:292 msgid "This group has been added to your buddy list" msgstr "Tämä ryhmä on lisätty tuttaviisi" -#: ../libpurple/protocols/qq/group_internal.c:41 msgid "I am not a member" msgstr "En ole jäsen" -#: ../libpurple/protocols/qq/group_internal.c:44 msgid "I am a member" msgstr "Olen jäsen" -#: ../libpurple/protocols/qq/group_internal.c:47 msgid "I am applying to join" msgstr "Pyydän liittymistä" -#: ../libpurple/protocols/qq/group_internal.c:50 msgid "I am the admin" msgstr "Olen ylläpitäjä" -#: ../libpurple/protocols/qq/group_internal.c:53 msgid "Unknown status" msgstr "Tuntematon tila" -#: ../libpurple/protocols/qq/group_join.c:82 msgid "This group does not allow others to join" msgstr "Tämä ryhmä ei salli muiden liittyä" -#: ../libpurple/protocols/qq/group_join.c:233 msgid "You have successfully left the group" msgstr "Ryhmästä poistuminen onnistui" -#: ../libpurple/protocols/qq/group_join.c:257 msgid "QQ Group Auth" msgstr "QQ-ryhmän valtuutus" -#: ../libpurple/protocols/qq/group_join.c:258 msgid "Your authorization request has been accepted by the QQ server" msgstr "QQ-palvelin on hyväksynyt valtuutuspyyntösi" -#: ../libpurple/protocols/qq/group_join.c:329 msgid "You entered a group ID outside the acceptable range" msgstr "" "Olet syöttänyt ryhmätunnisteen (ID) joka ei ole hyväksyttävällä " "vaihteluvälillä" -#: ../libpurple/protocols/qq/group_join.c:360 msgid "Are you sure you want to leave this Qun?" msgstr "Haluatko varmasti poistua tästä Qunista?" -#: ../libpurple/protocols/qq/group_join.c:362 msgid "" "Note, if you are the creator, \n" "this operation will eventually remove this Qun." @@ -10225,161 +7290,130 @@ "Huomaa, että olet samalla Qunin luoja, \n" "Tämä toiminto poistaa lopulta tämän Qunin." -#: ../libpurple/protocols/qq/group_network.c:92 #, c-format msgid "Code [0x%02X]: %s" msgstr "Koodi [0x%02X]: %s" -#: ../libpurple/protocols/qq/group_network.c:93 msgid "Group Operation Error" msgstr "Ryhmätoimintovirhe" #. we want to see window -#: ../libpurple/protocols/qq/group_opt.c:99 -#: ../libpurple/protocols/qq/sys_msg.c:87 msgid "Do you want to approve the request?" msgstr "Haluatko hyväksyä pyynnön?" -#: ../libpurple/protocols/qq/group_opt.c:113 msgid "Enter your reason:" msgstr "Anna syy:" -#: ../libpurple/protocols/qq/group_opt.c:211 msgid "You have successfully modified Qun member" msgstr "Qun-jäsentä muokattu onnistuneesti" -#: ../libpurple/protocols/qq/group_opt.c:281 msgid "You have successfully modified Qun information" msgstr "Qun-tietojen muokkaus onnistui" -#: ../libpurple/protocols/qq/group_opt.c:368 msgid "You have successfully created a Qun" msgstr "Qun:n luonti onnistui" -#: ../libpurple/protocols/qq/group_opt.c:370 msgid "Would you like to set up the Qun details now?" msgstr "Haluatko asettaa Qun:n yksityiskohdat nyt?" -#: ../libpurple/protocols/qq/group_opt.c:374 msgid "Setup" msgstr "Asetukset" -#: ../libpurple/protocols/qq/im.c:432 msgid "System Message" msgstr "Järjestelmäviesti" # c-format -#: ../libpurple/protocols/qq/im.c:576 msgid "Failed to send IM." msgstr "Viestin lähettäminen epäonnistui." -#: ../libpurple/protocols/qq/keep_alive.c:88 -msgid "Keep alive error" -msgstr "Jatkuvan yhteydenpidon virhe" - -#: ../libpurple/protocols/qq/login_logout.c:408 -msgid "Error requesting login token" -msgstr "Virhe pyydettäessä kirjautumispolettia" - -#: ../libpurple/protocols/qq/login_logout.c:490 -msgid "Unable to login. Check debug log." -msgstr "Ei voi kirjautua. Tarkista virheenjäljitysloki." - -#: ../libpurple/protocols/qq/login_logout.c:493 -msgid "Unable to login" -msgstr "Ei voi kirjautua" - -#. we didn't successfully connect. tdt->toc_fd is valid here -#: ../libpurple/protocols/qq/qq.c:140 ../libpurple/protocols/toc/toc.c:173 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:158 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:238 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1195 -#: ../libpurple/protocols/yahoo/ycht.c:550 -msgid "Unable to connect." -msgstr "Yhteyden muodostaminen epäonnistui." - -#: ../libpurple/protocols/qq/qq.c:187 #, c-format msgid "Unknown-%d" msgstr "Tuntematon-%d" -#: ../libpurple/protocols/qq/qq.c:212 -msgid "TCP Address" -msgstr "TCP-osoite" - -#: ../libpurple/protocols/qq/qq.c:214 -msgid "UDP Address" -msgstr "UDP-osoite" - -#: ../libpurple/protocols/qq/qq.c:243 msgid "Level" msgstr "Taso" -#: ../libpurple/protocols/qq/qq.c:374 +msgid "Member" +msgstr "Jäsen" + +msgid " VIP" +msgstr " VIP" + +msgid " TCP" +msgstr " TCP" + +msgid " FromMobile" +msgstr " FromMobile" + +msgid " BindMobile" +msgstr " BindMobile" + +msgid " Video" +msgstr " Video" + +msgid " Space" +msgstr " Space" + +msgid "Flag" +msgstr "Lippu" + +msgid "Ver" +msgstr "Ver" + msgid "Invalid name" msgstr "Epäkelpo nimi" -#: ../libpurple/protocols/qq/qq.c:440 #, c-format msgid "<b>Current Online</b>: %d<br>\n" msgstr "<b>Parhaillaan kirjautuneena</b>: %d<br>\n" -#: ../libpurple/protocols/qq/qq.c:441 #, c-format msgid "<b>Last Refresh</b>: %s<br>\n" msgstr "<b>Viimeisin päivitys:</b> %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:445 +#, c-format +msgid "<b>Server</b>: %s: %d<br>\n" +msgstr "<b>Palvelin:</b>: %s: %d<br>\n" + #, c-format msgid "<b>Connection Mode</b>: %s<br>\n" msgstr "<b>Yhteystila</b>: %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:446 -#, c-format -msgid "<b>Server IP</b>: %s: %d<br>\n" -msgstr "<b>Palvelimen IP:</b>: %s: %d<br>\n" - -#: ../libpurple/protocols/qq/qq.c:447 +#, c-format +msgid "<b>Real hostname</b>: %s: %d<br>\n" +msgstr "<b>Todellinen palvelinnimi:</b>: %s: %d<br>\n" + #, c-format msgid "<b>My Public IP</b>: %s<br>\n" msgstr "<b>Oma julkinen IP</b>: %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:452 #, c-format msgid "<b>Login Time</b>: %s<br>\n" msgstr "<b>Kirjautumisaika</b>: %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:453 #, c-format msgid "<b>Last Login IP</b>: %s<br>\n" msgstr "<b>Viimeisimmän kirjautumisen IP</b>: %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:454 #, c-format msgid "<b>Last Login Time</b>: %s\n" msgstr "<b>Viimeisin kirjautumisaika:</b>: %s\n" -#: ../libpurple/protocols/qq/qq.c:458 msgid "Login Information" msgstr "Kirjautumistietoja" -#: ../libpurple/protocols/qq/qq.c:534 msgid "Set My Information" msgstr "Aseta omat tiedot" -#: ../libpurple/protocols/qq/qq.c:537 ../libpurple/protocols/toc/toc.c:1680 msgid "Change Password" msgstr "Vaihda salasana" -#: ../libpurple/protocols/qq/qq.c:540 msgid "Show Login Information" msgstr "Näytä kirjautumistiedot" -#: ../libpurple/protocols/qq/qq.c:561 msgid "Leave this QQ Qun" msgstr "Poistu tästä QQ-Qunista" -#: ../libpurple/protocols/qq/qq.c:585 msgid "Block this buddy" msgstr "Estä tämä tuttava" @@ -10393,223 +7427,231 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/qq/qq.c:726 ../libpurple/protocols/qq/qq.c:728 msgid "QQ Protocol\tPlugin" msgstr "QQ-yhteyskäytäntöliitännäinen" -#: ../libpurple/protocols/qq/qq.c:753 msgid "Connect using TCP" msgstr "Yhdistetään käyttäen TCP:tä" -#: ../libpurple/protocols/qq/recv_core.c:310 +msgid "resend interval(s)" +msgstr "uudelleenlähetyksen aikaväli (s)" + +msgid "Keep alive interval(s)" +msgstr "Jatkuvan yhteydenpidon aikaväli (s)" + +msgid "Update interval(s)" +msgstr "Päivitysten aikaväli (s)" + +#, c-format +msgid "Invalid token len, %d" +msgstr "Epäkelpo poletin pituus, %d" + +msgid "Keep alive error" +msgstr "Jatkuvan yhteydenpidon virhe" + +msgid "Failed to connect server" +msgstr "Palvelimeen ei saatu yhteyttä" + msgid "Socket error" msgstr "Pistokevirhe" -#: ../libpurple/protocols/qq/recv_core.c:321 +#, c-format +msgid "" +"Lost connection with server:\n" +"%d, %s" +msgstr "" +"Yhteys palvelimeen katkesi:\n" +"%d, %s" + msgid "Unable to read from socket" msgstr "Ei kyetty lukemaan pistoketta" -#: ../libpurple/protocols/qq/send_file.c:707 +msgid "Write Error" +msgstr "Virhe kirjoituksessa" + +msgid "Connection lost" +msgstr "Yhteys katkesi" + +msgid "Couldn't resolve host" +msgstr "Yhteyttä isäntään ei voi löytää" + +msgid "hostname is NULL or port is 0" +msgstr "isäntänimi on NULL tai portti on 0" + +#, c-format +msgid "Connecting server %s, retries %d" +msgstr "Yhdistetään palvelimelle %s, uudelleenyrityskerrat %d" + +#. we didn't successfully connect. tdt->toc_fd is valid here +msgid "Unable to connect." +msgstr "Yhteyden muodostaminen epäonnistui." + +msgid "Could not resolve hostname" +msgstr "Isäntänimeä ei voi selvittää" + +msgid "Unable to login. Check debug log." +msgstr "Ei voi kirjautua. Tarkista virheenjäljitysloki." + +msgid "Unable to login" +msgstr "Ei voi kirjautua" + +#, c-format +msgid "Invalid token reply code, 0x%02X" +msgstr "Epäkelpo poletin vastauskoodi, 0x%02X" + #, c-format msgid "%d has declined the file %s" msgstr "%d on kieltäytynyt tiedostosta %s" -#: ../libpurple/protocols/qq/send_file.c:710 -#: ../libpurple/protocols/qq/send_file.c:739 msgid "File Send" msgstr "Tiedoston lähetys" -#: ../libpurple/protocols/qq/send_file.c:736 #, c-format msgid "%d canceled the transfer of %s" msgstr "%d peruutti tiedoston %s siirron" -#: ../libpurple/protocols/qq/sendqueue.c:124 -msgid "Connection lost" -msgstr "Yhteys katkesi" - -#: ../libpurple/protocols/qq/sendqueue.c:133 -msgid "Login failed, no reply" -msgstr "Kirjautuminen epäonnistui, ei vastausta" - -#: ../libpurple/protocols/qq/sys_msg.c:111 msgid "Do you want to add this buddy?" msgstr "Haluatko lisätä tämän tuttavan?" #. only need to get value -#: ../libpurple/protocols/qq/sys_msg.c:168 #, c-format msgid "You have been added by %s" msgstr "Sinut on lisännyt %s" -#: ../libpurple/protocols/qq/sys_msg.c:171 -#: ../libpurple/protocols/qq/sys_msg.c:266 msgid "Would you like to add him?" msgstr "Haluatko lisätä hänet?" -#: ../libpurple/protocols/qq/sys_msg.c:179 #, c-format msgid "%s has added you [%s] to his or her buddy list" msgstr "Käyttäjä %s on lisännyt sinut [%s] tuttaviisi" -#: ../libpurple/protocols/qq/sys_msg.c:195 #, c-format msgid "User %s rejected your request" msgstr "Käyttäjä %s on kieltäytynyt pyynnöstäsi" -#: ../libpurple/protocols/qq/sys_msg.c:215 #, c-format msgid "User %s approved your request" msgstr "Käyttäjä %s on hyväksynyt pyyntösi" #. TODO: this should go through purple_account_request_authorization() -#: ../libpurple/protocols/qq/sys_msg.c:241 #, c-format msgid "%s wants to add you [%s] as a friend" msgstr "Käyttäjä %s tahtoo lisätä sinut [%s] kaverikseen" -#: ../libpurple/protocols/qq/sys_msg.c:242 #, c-format msgid "Message: %s" msgstr "Viesti: %s" -#: ../libpurple/protocols/qq/sys_msg.c:264 #, c-format msgid "%s is not in your buddy list" msgstr "%s ei ole tuttavissasi" -#: ../libpurple/protocols/sametime/sametime.c:420 +#, c-format +msgid "Notice from: %s" +msgstr "Ilmoitus käyttäjältä: %s" + +#, c-format +msgid "%s" +msgstr "%s" + msgid "Connection closed (writing)" msgstr "Yhteys suljettu (kirjoitus)" -#: ../libpurple/protocols/sametime/sametime.c:1294 #, c-format msgid "<b>Group Title:</b> %s<br>" msgstr "<b>Ryhmän nimi:</b> %s<br>" -#: ../libpurple/protocols/sametime/sametime.c:1295 #, c-format msgid "<b>Notes Group ID:</b> %s<br>" msgstr "<b>Notesin ryhmä-ID:</b> %s<br>" -#: ../libpurple/protocols/sametime/sametime.c:1297 #, c-format msgid "Info for Group %s" msgstr "Tietoja ryhmästä %s" -#: ../libpurple/protocols/sametime/sametime.c:1299 msgid "Notes Address Book Information" msgstr "Notesin osoitekirjatiedot" -#: ../libpurple/protocols/sametime/sametime.c:1331 msgid "Invite Group to Conference..." msgstr "Kutsu ryhmä neuvotteluun..." -#: ../libpurple/protocols/sametime/sametime.c:1341 msgid "Get Notes Address Book Info" msgstr "Hae Notesin osoitekirjatiedot" -#: ../libpurple/protocols/sametime/sametime.c:1508 msgid "Sending Handshake" msgstr "Lähetetään kättelyä" -#: ../libpurple/protocols/sametime/sametime.c:1513 msgid "Waiting for Handshake Acknowledgement" msgstr "Odotetaan kättelyn vahvistusta" -#: ../libpurple/protocols/sametime/sametime.c:1518 msgid "Handshake Acknowledged, Sending Login" msgstr "Kättely vahvistettu, kirjaudutaan" -#: ../libpurple/protocols/sametime/sametime.c:1523 msgid "Waiting for Login Acknowledgement" msgstr "Odotetaan kirjautumisen vahvistusta" -#: ../libpurple/protocols/sametime/sametime.c:1528 msgid "Login Redirected" msgstr "Sisäänkirjautuminen uudelleenohjattu" -#: ../libpurple/protocols/sametime/sametime.c:1534 msgid "Forcing Login" msgstr "Pakotetaan sisäänkirjautuminen" -#: ../libpurple/protocols/sametime/sametime.c:1538 msgid "Login Acknowledged" msgstr "Kirjautuminen vahvistettu" -#: ../libpurple/protocols/sametime/sametime.c:1543 msgid "Starting Services" msgstr "Käynnistetään palveluja" -#: ../libpurple/protocols/sametime/sametime.c:1680 #, c-format msgid "" "A Sametime administrator has issued the following announcement on server %s" msgstr "Sametime-ylläpitäjä on julkaissut seuraavan tiedotteen palvelimella %s" -#: ../libpurple/protocols/sametime/sametime.c:1685 msgid "Sametime Administrator Announcement" msgstr "Sametime-ylläpitäjän tiedote" -#: ../libpurple/protocols/sametime/sametime.c:1738 msgid "Connection reset" msgstr "Yhteys suljettu" -#: ../libpurple/protocols/sametime/sametime.c:1750 #, c-format msgid "Error reading from socket: %s" msgstr "Virhe luettaessa socketista: %s" #. this is a regular connect, error out -#: ../libpurple/protocols/sametime/sametime.c:1775 -#: ../libpurple/protocols/sametime/sametime.c:3782 msgid "Unable to connect to host" msgstr "Palvelimeen ei kyetty muodostamaan yhteyttä" -#: ../libpurple/protocols/sametime/sametime.c:1816 #, c-format msgid "Announcement from %s" msgstr "Ilmoitus käyttäjältä %s" -#: ../libpurple/protocols/sametime/sametime.c:1990 msgid "Conference Closed" msgstr "Neuvottelu suljettu" -#: ../libpurple/protocols/sametime/sametime.c:2455 msgid "Unable to send message: " msgstr "Viestiä ei voi lähettää: " -#: ../libpurple/protocols/sametime/sametime.c:3011 msgid "Place Closed" msgstr "Paikka suljettu" -#: ../libpurple/protocols/sametime/sametime.c:3281 msgid "Microphone" msgstr "Mikrofoni" -#: ../libpurple/protocols/sametime/sametime.c:3282 msgid "Speakers" msgstr "Kaiuttimet" -#: ../libpurple/protocols/sametime/sametime.c:3283 msgid "Video Camera" msgstr "Videokamera" -#: ../libpurple/protocols/sametime/sametime.c:3321 -#: ../libpurple/protocols/sametime/sametime.c:4201 msgid "Supports" msgstr "Tukee" -#: ../libpurple/protocols/sametime/sametime.c:3326 -#: ../libpurple/protocols/sametime/sametime.c:4175 msgid "External User" msgstr "Ulkoinen käyttäjä" -#: ../libpurple/protocols/sametime/sametime.c:3432 msgid "Create conference with user" msgstr "Aloita neuvottelu käyttäjän kanssa" -#: ../libpurple/protocols/sametime/sametime.c:3433 #, c-format msgid "" "Please enter a topic for the new conference, and an invitation message to be " @@ -10618,27 +7660,21 @@ "Kirjoita uuden neuvottelun puheenaihe sekä kutsuviesti joka lähetetään " "käyttäjälle %s" -#: ../libpurple/protocols/sametime/sametime.c:3437 msgid "New Conference" msgstr "Aloita neuvottelu" -#: ../libpurple/protocols/sametime/sametime.c:3439 msgid "Create" msgstr "Aloita" -#: ../libpurple/protocols/sametime/sametime.c:3504 msgid "Available Conferences" msgstr "Käynnissä olevat neuvottelut" -#: ../libpurple/protocols/sametime/sametime.c:3510 msgid "Create New Conference..." msgstr "Aloita uusi neuvottelu..." -#: ../libpurple/protocols/sametime/sametime.c:3517 msgid "Invite user to a conference" msgstr "Kutsu käyttäjä neuvotteluun" -#: ../libpurple/protocols/sametime/sametime.c:3518 #, c-format msgid "" "Select a conference from the list below to send an invite to user %s. Select " @@ -10649,27 +7685,21 @@ "Valitse \"Aloita uusi neuvottelu\" jos haluat aloittaa uuden neuvottelun ja " "kutsua tämän käyttäjän sinne." -#: ../libpurple/protocols/sametime/sametime.c:3523 msgid "Invite to Conference" msgstr "Kutsu neuvotteluun" -#: ../libpurple/protocols/sametime/sametime.c:3614 msgid "Invite to Conference..." msgstr "Kutsu neuvotteluun..." -#: ../libpurple/protocols/sametime/sametime.c:3619 msgid "Send TEST Announcement" msgstr "Lähetä TEST-ilmoitus" -#: ../libpurple/protocols/sametime/sametime.c:3638 ../pidgin/gtkconv.c:4534 msgid "Topic:" msgstr "Aihe:" -#: ../libpurple/protocols/sametime/sametime.c:3666 msgid "No Sametime Community Server specified" msgstr "Sametime-yhteisöpalvelinta ei ole määritelty" -#: ../libpurple/protocols/sametime/sametime.c:3691 #, c-format msgid "" "No host or IP address has been configured for the Meanwhile account %s. " @@ -10678,42 +7708,31 @@ "Isäntää tai IP-osoitetta ei ole asetettu Meanwhile-käyttäjätilille %s. Lisää " "sellainen alle ennen kirjautumista sisään." -#: ../libpurple/protocols/sametime/sametime.c:3696 msgid "Meanwhile Connection Setup" msgstr "Meanwhilen yhteysasetukset" -#: ../libpurple/protocols/sametime/sametime.c:3697 msgid "No Sametime Community Server Specified" msgstr "Sametime-yhteisöpalvelinta ei ole määritelty" -#: ../libpurple/protocols/sametime/sametime.c:3699 msgid "Connect" msgstr "Yhdistä" -#: ../libpurple/protocols/sametime/sametime.c:4191 #, c-format msgid "Unknown (0x%04x)<br>" msgstr "Tuntematon (0x%04x)<br>" -#: ../libpurple/protocols/sametime/sametime.c:4193 msgid "Last Known Client" msgstr "Viimeksi nähty asiakasohjelma" -#: ../libpurple/protocols/sametime/sametime.c:4357 -#: ../libpurple/protocols/sametime/sametime.c:5562 msgid "User Name" msgstr "Käyttäjänimi" -#: ../libpurple/protocols/sametime/sametime.c:4360 -#: ../libpurple/protocols/sametime/sametime.c:5565 msgid "Sametime ID" msgstr "Sametime-tunnus" -#: ../libpurple/protocols/sametime/sametime.c:4384 msgid "An ambiguous user ID was entered" msgstr "Epäselvä käyttäjätunnus syötetty" -#: ../libpurple/protocols/sametime/sametime.c:4385 #, c-format msgid "" "The identifier '%s' may possibly refer to any of the following users. Please " @@ -10722,15 +7741,12 @@ "Tunniste '%s' voi viitata keneen tahansa seuraavista käyttäjistä. Valitse " "oikea käyttäjä alla olevasta luettelosta lisätäksesi hänet tuttaviisi." -#: ../libpurple/protocols/sametime/sametime.c:4390 msgid "Select User" msgstr "Valitse käyttäjä" -#: ../libpurple/protocols/sametime/sametime.c:4474 msgid "Unable to add user: user not found" msgstr "Käyttäjää ei voi lisätä: käyttäjää ei löydy" -#: ../libpurple/protocols/sametime/sametime.c:4476 #, c-format msgid "" "The identifier '%s' did not match any users in your Sametime community. This " @@ -10739,7 +7755,6 @@ "Tunnisteella '%s' ei löytynyt osumia Sametime-yhteisöstäsi. Tämä hakusana on " "poistettu tuttavistasi." -#: ../libpurple/protocols/sametime/sametime.c:5067 #, c-format msgid "" "Error reading file %s: \n" @@ -10748,64 +7763,49 @@ "Virhe luettaessa tiedostoa %s: \n" "%s.\n" -#: ../libpurple/protocols/sametime/sametime.c:5202 msgid "Remotely Stored Buddy List" msgstr "Etätallennetut tuttavat" # NOTE source: gftt glossary -#: ../libpurple/protocols/sametime/sametime.c:5207 msgid "Buddy List Storage Mode" msgstr "Tuttavien tallennustapa" -#: ../libpurple/protocols/sametime/sametime.c:5210 msgid "Local Buddy List Only" msgstr "Vain paikalliset tuttavat" -#: ../libpurple/protocols/sametime/sametime.c:5212 msgid "Merge List from Server" msgstr "Yhdistä tuttavat palvelimelta" -#: ../libpurple/protocols/sametime/sametime.c:5214 msgid "Merge and Save List to Server" msgstr "Yhdistä ja tallenna tuttavat palvelimelle" -#: ../libpurple/protocols/sametime/sametime.c:5216 msgid "Synchronize List with Server" msgstr "Täsmää tuttavat palvelimen kanssa" -#: ../libpurple/protocols/sametime/sametime.c:5271 #, c-format msgid "Import Sametime List for Account %s" msgstr "Tuo Sametime-tuttavat käyttäjätililtä %s" -#: ../libpurple/protocols/sametime/sametime.c:5311 #, c-format msgid "Export Sametime List for Account %s" msgstr "Vie Sametime-tuttavat käyttäjätilille %s" -#: ../libpurple/protocols/sametime/sametime.c:5365 msgid "Unable to add group: group exists" msgstr "Ryhmää ei voi lisätä: ryhmä on jo olemassa" -#: ../libpurple/protocols/sametime/sametime.c:5366 #, c-format msgid "A group named '%s' already exists in your buddy list." msgstr "Ryhmä '%s' on jo tuttavissasi." -#: ../libpurple/protocols/sametime/sametime.c:5369 -#: ../libpurple/protocols/sametime/sametime.c:5499 msgid "Unable to add group" msgstr "Ryhmää ei voi lisätä" -#: ../libpurple/protocols/sametime/sametime.c:5428 msgid "Possible Matches" msgstr "Mahdollisia osumia" -#: ../libpurple/protocols/sametime/sametime.c:5444 msgid "Notes Address Book group results" msgstr "Notesin osoitekirjan ryhmätulokset" -#: ../libpurple/protocols/sametime/sametime.c:5445 #, c-format msgid "" "The identifier '%s' may possibly refer to any of the following Notes Address " @@ -10816,15 +7816,12 @@ "ryhmistä. Valitse oikea ryhmä alla olevasta luettelosta lisätäksesi sen " "tuttaviisi." -#: ../libpurple/protocols/sametime/sametime.c:5450 msgid "Select Notes Address Book" msgstr "Valitse Notesin osoitekirja" -#: ../libpurple/protocols/sametime/sametime.c:5493 msgid "Unable to add group: group not found" msgstr "Ryhmää ei voi lisätä: ryhmää ei löytynyt" -#: ../libpurple/protocols/sametime/sametime.c:5495 #, c-format msgid "" "The identifier '%s' did not match any Notes Address Book groups in your " @@ -10833,11 +7830,9 @@ "Tunnisteella '%s' ei löytynyt osumia Sametime-yhteisösi Notesin osoitekirjan " "ryhmistä." -#: ../libpurple/protocols/sametime/sametime.c:5536 msgid "Notes Address Book Group" msgstr "Notesin osoitekirjan ryhmä" -#: ../libpurple/protocols/sametime/sametime.c:5537 msgid "" "Enter the name of a Notes Address Book group in the field below to add the " "group and its members to your buddy list." @@ -10845,12 +7840,10 @@ "Kirjoita Notesin osoitekirjan ryhmän nimi alla olevaan kenttään lisätäksesi " "ryhmän ja sen jäsenet tuttaviisi." -#: ../libpurple/protocols/sametime/sametime.c:5586 #, c-format msgid "Search results for '%s'" msgstr "Hakutulokset haulle '%s'" -#: ../libpurple/protocols/sametime/sametime.c:5587 #, c-format msgid "" "The identifier '%s' may possibly refer to any of the following users. You " @@ -10861,28 +7854,22 @@ "lisätä nämä käyttäjät tuttaviisi tai lähettää heille viestejä alla olevilla " "painikkeilla." -#: ../libpurple/protocols/sametime/sametime.c:5594 ../pidgin/gtknotify.c:782 msgid "Search Results" msgstr "Hakutulokset" -#: ../libpurple/protocols/sametime/sametime.c:5619 msgid "No matches" msgstr "Ei tuloksia" -#: ../libpurple/protocols/sametime/sametime.c:5620 #, c-format msgid "The identifier '%s' did not match any users in your Sametime community." msgstr "Tunnisteella '%s' ei löytynyt osumia Sametime-yhteisöstäsi." -#: ../libpurple/protocols/sametime/sametime.c:5624 msgid "No Matches" msgstr "Ei tuloksia" -#: ../libpurple/protocols/sametime/sametime.c:5661 msgid "Search for a user" msgstr "Etsi käyttäjiä" -#: ../libpurple/protocols/sametime/sametime.c:5662 msgid "" "Enter a name or partial ID in the field below to search for matching users " "in your Sametime community." @@ -10890,115 +7877,59 @@ "Kirjoita nimi tai osittainen käyttäjätunnus alla olevaan kenttään etsiäksesi " "käyttäjiä Sametime-yhteisöstäsi." -#: ../libpurple/protocols/sametime/sametime.c:5665 msgid "User Search" msgstr "Käyttäjähaku" -#: ../libpurple/protocols/sametime/sametime.c:5678 msgid "Import Sametime List..." msgstr "Tuo Sametime-tuttavat..." -#: ../libpurple/protocols/sametime/sametime.c:5682 msgid "Export Sametime List..." msgstr "Vie Sametime-tuttavat..." -#: ../libpurple/protocols/sametime/sametime.c:5686 msgid "Add Notes Address Book Group..." msgstr "Lisää Notesin osoitekirjan ryhmä..." -#: ../libpurple/protocols/sametime/sametime.c:5690 msgid "User Search..." msgstr "Käyttäjähaku..." -#: ../libpurple/protocols/sametime/sametime.c:5796 msgid "Force login (ignore server redirects)" msgstr "Pakota sisäänkirjautuminen (älä välitä palvelinuudelleenohjauksista)" #. pretend to be Sametime Connect -#: ../libpurple/protocols/sametime/sametime.c:5806 msgid "Hide client identity" msgstr "Piilota asiakasohjelman tunniste" -#: ../libpurple/protocols/silc/buddy.c:52 -#: ../libpurple/protocols/silc/buddy.c:410 -#: ../libpurple/protocols/silc/buddy.c:538 -#: ../libpurple/protocols/silc/buddy.c:700 -#: ../libpurple/protocols/silc/ft.c:423 -#: ../libpurple/protocols/silc10/buddy.c:52 -#: ../libpurple/protocols/silc10/buddy.c:421 -#: ../libpurple/protocols/silc10/buddy.c:546 -#: ../libpurple/protocols/silc10/buddy.c:712 -#: ../libpurple/protocols/silc10/ft.c:338 #, c-format msgid "User %s is not present in the network" msgstr "Käyttäjä %s ei ole läsnä verkossa" -#: ../libpurple/protocols/silc/buddy.c:53 -#: ../libpurple/protocols/silc/buddy.c:110 -#: ../libpurple/protocols/silc/buddy.c:115 -#: ../libpurple/protocols/silc/buddy.c:119 -#: ../libpurple/protocols/silc/buddy.c:124 -#: ../libpurple/protocols/silc/buddy.c:129 -#: ../libpurple/protocols/silc/buddy.c:134 -#: ../libpurple/protocols/silc/buddy.c:254 -#: ../libpurple/protocols/silc10/buddy.c:53 -#: ../libpurple/protocols/silc10/buddy.c:115 -#: ../libpurple/protocols/silc10/buddy.c:120 -#: ../libpurple/protocols/silc10/buddy.c:124 -#: ../libpurple/protocols/silc10/buddy.c:129 -#: ../libpurple/protocols/silc10/buddy.c:134 -#: ../libpurple/protocols/silc10/buddy.c:139 -#: ../libpurple/protocols/silc10/buddy.c:257 msgid "Key Agreement" msgstr "Avainsopimus" -#: ../libpurple/protocols/silc/buddy.c:54 -#: ../libpurple/protocols/silc10/buddy.c:54 msgid "Cannot perform the key agreement" msgstr "Avainsopimusta ei voi suorittaa" -#: ../libpurple/protocols/silc/buddy.c:111 -#: ../libpurple/protocols/silc10/buddy.c:116 msgid "Error occurred during key agreement" msgstr "Virhe tapahtui avainsopimuksen aikana" -#: ../libpurple/protocols/silc/buddy.c:115 -#: ../libpurple/protocols/silc10/buddy.c:120 msgid "Key Agreement failed" msgstr "Avainsopimus epäonnistui" -#: ../libpurple/protocols/silc/buddy.c:120 -#: ../libpurple/protocols/silc10/buddy.c:125 msgid "Timeout during key agreement" msgstr "Aikakatkaisu avainsopimuksen aikana" -#: ../libpurple/protocols/silc/buddy.c:125 -#: ../libpurple/protocols/silc10/buddy.c:130 msgid "Key agreement was aborted" msgstr "Avainsopimus peruutettiin" -#: ../libpurple/protocols/silc/buddy.c:130 -#: ../libpurple/protocols/silc10/buddy.c:135 msgid "Key agreement is already started" msgstr "Avainsopimus on jo aloitettu" -#: ../libpurple/protocols/silc/buddy.c:135 -#: ../libpurple/protocols/silc10/buddy.c:140 msgid "Key agreement cannot be started with yourself" msgstr "Avainsopimusta et voi tehdä itsesi kanssa" -#: ../libpurple/protocols/silc/buddy.c:255 -#: ../libpurple/protocols/silc/buddy.c:383 -#: ../libpurple/protocols/silc/buddy.c:497 -#: ../libpurple/protocols/silc/buddy.c:508 -#: ../libpurple/protocols/silc10/buddy.c:258 -#: ../libpurple/protocols/silc10/buddy.c:389 -#: ../libpurple/protocols/silc10/buddy.c:514 msgid "The remote user is not present in the network any more" msgstr "Etäkäyttäjä ei enää ole paikalla verkossa" -#: ../libpurple/protocols/silc/buddy.c:298 -#: ../libpurple/protocols/silc10/buddy.c:295 #, c-format msgid "" "Key agreement request received from %s. Would you like to perform the key " @@ -11007,8 +7938,6 @@ "Avainsopimuspyyntö vastaanotettu käyttäjältä %s. Haluatko suorittaa " "avainsopimuksen?" -#: ../libpurple/protocols/silc/buddy.c:302 -#: ../libpurple/protocols/silc10/buddy.c:299 #, c-format msgid "" "The remote user is waiting key agreement on:\n" @@ -11019,99 +7948,40 @@ "Etäkone: %s\n" "Portti: %d" -#: ../libpurple/protocols/silc/buddy.c:315 -#: ../libpurple/protocols/silc10/buddy.c:312 msgid "Key Agreement Request" msgstr "Avainsopimuspyyntö" -#: ../libpurple/protocols/silc/buddy.c:382 -#: ../libpurple/protocols/silc/buddy.c:412 -#: ../libpurple/protocols/silc/buddy.c:452 -#: ../libpurple/protocols/silc10/buddy.c:388 -#: ../libpurple/protocols/silc10/buddy.c:423 -#: ../libpurple/protocols/silc10/buddy.c:465 msgid "IM With Password" msgstr "Pikaviesti salasanalla" -#: ../libpurple/protocols/silc/buddy.c:413 -#: ../libpurple/protocols/silc10/buddy.c:424 msgid "Cannot set IM key" msgstr "Pikaviestiavainta ei voi asettaa" -#: ../libpurple/protocols/silc/buddy.c:453 -#: ../libpurple/protocols/silc10/buddy.c:466 msgid "Set IM Password" msgstr "Aseta pikaviestin salasana" -#: ../libpurple/protocols/silc/buddy.c:496 -#: ../libpurple/protocols/silc/buddy.c:507 -#: ../libpurple/protocols/silc/buddy.c:540 -#: ../libpurple/protocols/silc/ops.c:1516 -#: ../libpurple/protocols/silc/ops.c:1527 -#: ../libpurple/protocols/silc10/buddy.c:513 -#: ../libpurple/protocols/silc10/buddy.c:548 -#: ../libpurple/protocols/silc10/ops.c:1494 -#: ../libpurple/protocols/silc10/ops.c:1505 msgid "Get Public Key" msgstr "Hae julkinen avain" -#: ../libpurple/protocols/silc/buddy.c:541 -#: ../libpurple/protocols/silc/ops.c:1517 -#: ../libpurple/protocols/silc/ops.c:1528 -#: ../libpurple/protocols/silc10/buddy.c:549 -#: ../libpurple/protocols/silc10/ops.c:1495 -#: ../libpurple/protocols/silc10/ops.c:1506 msgid "Cannot fetch the public key" msgstr "Julkista avainta ei voi hakea" -#: ../libpurple/protocols/silc/buddy.c:622 -#: ../libpurple/protocols/silc/buddy.c:1658 -#: ../libpurple/protocols/silc10/buddy.c:635 -#: ../libpurple/protocols/silc10/buddy.c:1657 msgid "Show Public Key" msgstr "Näytä julkinen avain" -#: ../libpurple/protocols/silc/buddy.c:623 -#: ../libpurple/protocols/silc/buddy.c:1030 -#: ../libpurple/protocols/silc/chat.c:238 -#: ../libpurple/protocols/silc10/buddy.c:636 -#: ../libpurple/protocols/silc10/buddy.c:1036 -#: ../libpurple/protocols/silc10/chat.c:237 msgid "Could not load public key" msgstr "Julkista avainta ei voi ladata" -#: ../libpurple/protocols/silc/buddy.c:701 -#: ../libpurple/protocols/silc/ops.c:1066 -#: ../libpurple/protocols/silc/ops.c:1181 -#: ../libpurple/protocols/silc/ops.c:1303 -#: ../libpurple/protocols/silc/ops.c:1304 -#: ../libpurple/protocols/silc/ops.c:1322 -#: ../libpurple/protocols/silc10/buddy.c:713 -#: ../libpurple/protocols/silc10/ops.c:1087 -#: ../libpurple/protocols/silc10/ops.c:1159 -#: ../libpurple/protocols/silc10/ops.c:1294 -#: ../libpurple/protocols/silc10/ops.c:1295 -#: ../libpurple/protocols/silc10/ops.c:1313 msgid "User Information" msgstr "Käyttäjätiedot" -#: ../libpurple/protocols/silc/buddy.c:702 -#: ../libpurple/protocols/silc/ops.c:1182 -#: ../libpurple/protocols/silc/ops.c:1323 -#: ../libpurple/protocols/silc10/buddy.c:714 -#: ../libpurple/protocols/silc10/ops.c:1160 -#: ../libpurple/protocols/silc10/ops.c:1314 msgid "Cannot get user information" msgstr "Käyttäjätietoja ei voi hakea" -#: ../libpurple/protocols/silc/buddy.c:723 -#: ../libpurple/protocols/silc10/buddy.c:735 #, c-format msgid "The %s buddy is not trusted" msgstr "Käyttäjä %s ei ole luotettu" -#: ../libpurple/protocols/silc/buddy.c:726 -#: ../libpurple/protocols/silc10/buddy.c:738 msgid "" "You cannot receive buddy notifications until you import his/her public key. " "You can use the Get Public Key command to get the public key." @@ -11120,19 +7990,13 @@ "Voit käyttää Hae julkinen avain -komentoa saadaksesi julkisen avaimen." #. Open file selector to select the public key. -#: ../libpurple/protocols/silc/buddy.c:1062 -#: ../libpurple/protocols/silc10/buddy.c:1070 msgid "Open..." msgstr "Avaa..." -#: ../libpurple/protocols/silc/buddy.c:1073 -#: ../libpurple/protocols/silc10/buddy.c:1081 #, c-format msgid "The %s buddy is not present in the network" msgstr "Tuttava %s ei ole kirjautuneena verkossa" -#: ../libpurple/protocols/silc/buddy.c:1076 -#: ../libpurple/protocols/silc10/buddy.c:1084 msgid "" "To add the buddy you must import his/her public key. Press Import to import " "a public key." @@ -11140,18 +8004,12 @@ "Lisätäksesi tuttavan tarvitsen hänen julkisen avaimensa. Paina Tuo " "tuodaksesi julkisen avaimen." -#: ../libpurple/protocols/silc/buddy.c:1080 -#: ../libpurple/protocols/silc10/buddy.c:1088 msgid "_Import..." msgstr "_Tuo..." -#: ../libpurple/protocols/silc/buddy.c:1186 -#: ../libpurple/protocols/silc10/buddy.c:1184 msgid "Select correct user" msgstr "Valitse oikea käyttäjä" -#: ../libpurple/protocols/silc/buddy.c:1188 -#: ../libpurple/protocols/silc10/buddy.c:1186 msgid "" "More than one user was found with the same public key. Select the correct " "user from the list to add to the buddy list." @@ -11159,8 +8017,6 @@ "Useammalla kuin yhdellä käyttäjällä on sama julkinen avain. Valitse oikea " "käyttäjä luettelosta." -#: ../libpurple/protocols/silc/buddy.c:1190 -#: ../libpurple/protocols/silc10/buddy.c:1188 msgid "" "More than one user was found with the same name. Select the correct user " "from the list to add to the buddy list." @@ -11168,313 +8024,153 @@ "Useammalla kuin yhdellä käyttäjällä on sama nimi. Valitse oikea käyttäjä " "luettelosta." -#: ../libpurple/protocols/silc/buddy.c:1477 -#: ../libpurple/protocols/silc10/buddy.c:1477 msgid "Detached" msgstr "Irrotettu" -#: ../libpurple/protocols/silc/buddy.c:1481 -#: ../libpurple/protocols/silc/silc.c:58 -#: ../libpurple/protocols/silc10/buddy.c:1481 -#: ../libpurple/protocols/silc10/silc.c:49 msgid "Indisposed" msgstr "Vastahakoinen" -#: ../libpurple/protocols/silc/buddy.c:1485 -#: ../libpurple/protocols/silc/silc.c:60 -#: ../libpurple/protocols/silc10/buddy.c:1485 -#: ../libpurple/protocols/silc10/silc.c:51 msgid "Wake Me Up" msgstr "Herätä minut" -#: ../libpurple/protocols/silc/buddy.c:1487 -#: ../libpurple/protocols/silc/silc.c:52 -#: ../libpurple/protocols/silc10/buddy.c:1487 -#: ../libpurple/protocols/silc10/silc.c:43 msgid "Hyper Active" msgstr "Hyperaktiivinen" -#: ../libpurple/protocols/silc/buddy.c:1489 -#: ../libpurple/protocols/silc10/buddy.c:1489 msgid "Robot" msgstr "Robotti" -#: ../libpurple/protocols/silc/buddy.c:1496 -#: ../libpurple/protocols/silc/silc.c:959 -#: ../libpurple/protocols/silc/util.c:522 -#: ../libpurple/protocols/silc10/buddy.c:1496 -#: ../libpurple/protocols/silc10/silc.c:660 -#: ../libpurple/protocols/silc10/util.c:515 msgid "Happy" msgstr "Onnellinen" -#: ../libpurple/protocols/silc/buddy.c:1498 -#: ../libpurple/protocols/silc/silc.c:961 -#: ../libpurple/protocols/silc/util.c:524 -#: ../libpurple/protocols/silc10/buddy.c:1498 -#: ../libpurple/protocols/silc10/silc.c:662 -#: ../libpurple/protocols/silc10/util.c:517 msgid "Sad" msgstr "Surullinen" -#: ../libpurple/protocols/silc/buddy.c:1500 -#: ../libpurple/protocols/silc/silc.c:963 -#: ../libpurple/protocols/silc/util.c:526 -#: ../libpurple/protocols/silc10/buddy.c:1500 -#: ../libpurple/protocols/silc10/silc.c:664 -#: ../libpurple/protocols/silc10/util.c:519 msgid "Angry" msgstr "Vihainen" -#: ../libpurple/protocols/silc/buddy.c:1502 -#: ../libpurple/protocols/silc/silc.c:965 -#: ../libpurple/protocols/silc/util.c:528 -#: ../libpurple/protocols/silc10/buddy.c:1502 -#: ../libpurple/protocols/silc10/silc.c:666 -#: ../libpurple/protocols/silc10/util.c:521 msgid "Jealous" msgstr "Mustasukkainen" -#: ../libpurple/protocols/silc/buddy.c:1504 -#: ../libpurple/protocols/silc/silc.c:967 -#: ../libpurple/protocols/silc/util.c:530 -#: ../libpurple/protocols/silc10/buddy.c:1504 -#: ../libpurple/protocols/silc10/silc.c:668 -#: ../libpurple/protocols/silc10/util.c:523 msgid "Ashamed" msgstr "Häpeää" -#: ../libpurple/protocols/silc/buddy.c:1506 -#: ../libpurple/protocols/silc/silc.c:969 -#: ../libpurple/protocols/silc/util.c:532 -#: ../libpurple/protocols/silc10/buddy.c:1506 -#: ../libpurple/protocols/silc10/silc.c:670 -#: ../libpurple/protocols/silc10/util.c:525 msgid "Invincible" msgstr "Haavoittumaton" -#: ../libpurple/protocols/silc/buddy.c:1508 -#: ../libpurple/protocols/silc/util.c:534 -#: ../libpurple/protocols/silc10/buddy.c:1508 -#: ../libpurple/protocols/silc10/util.c:527 msgid "In Love" msgstr "Rakastunut" -#: ../libpurple/protocols/silc/buddy.c:1510 -#: ../libpurple/protocols/silc/silc.c:973 -#: ../libpurple/protocols/silc/util.c:536 -#: ../libpurple/protocols/silc10/buddy.c:1510 -#: ../libpurple/protocols/silc10/silc.c:674 -#: ../libpurple/protocols/silc10/util.c:529 msgid "Sleepy" msgstr "Unelias" -#: ../libpurple/protocols/silc/buddy.c:1512 -#: ../libpurple/protocols/silc/silc.c:975 -#: ../libpurple/protocols/silc/util.c:538 -#: ../libpurple/protocols/silc10/buddy.c:1512 -#: ../libpurple/protocols/silc10/silc.c:676 -#: ../libpurple/protocols/silc10/util.c:531 msgid "Bored" msgstr "Tylsistynyt" -#: ../libpurple/protocols/silc/buddy.c:1514 -#: ../libpurple/protocols/silc/silc.c:977 -#: ../libpurple/protocols/silc/util.c:540 -#: ../libpurple/protocols/silc10/buddy.c:1514 -#: ../libpurple/protocols/silc10/silc.c:678 -#: ../libpurple/protocols/silc10/util.c:533 msgid "Excited" msgstr "Innostunut" -#: ../libpurple/protocols/silc/buddy.c:1516 -#: ../libpurple/protocols/silc/silc.c:979 -#: ../libpurple/protocols/silc/util.c:542 -#: ../libpurple/protocols/silc10/buddy.c:1516 -#: ../libpurple/protocols/silc10/silc.c:680 -#: ../libpurple/protocols/silc10/util.c:535 msgid "Anxious" msgstr "Levoton" -#: ../libpurple/protocols/silc/buddy.c:1548 -#: ../libpurple/protocols/silc/ops.c:1220 -#: ../libpurple/protocols/silc10/buddy.c:1548 -#: ../libpurple/protocols/silc10/ops.c:1202 msgid "User Modes" msgstr "Käyttäjätilat" -#: ../libpurple/protocols/silc/buddy.c:1565 -#: ../libpurple/protocols/silc/ops.c:1237 -#: ../libpurple/protocols/silc10/buddy.c:1565 -#: ../libpurple/protocols/silc10/ops.c:1219 msgid "Preferred Contact" msgstr "Suosikkituttava" -#: ../libpurple/protocols/silc/buddy.c:1570 -#: ../libpurple/protocols/silc/ops.c:1242 -#: ../libpurple/protocols/silc10/buddy.c:1570 -#: ../libpurple/protocols/silc10/ops.c:1224 msgid "Preferred Language" msgstr "Ensisijainen kieli" -#: ../libpurple/protocols/silc/buddy.c:1575 -#: ../libpurple/protocols/silc/ops.c:1247 -#: ../libpurple/protocols/silc10/buddy.c:1575 -#: ../libpurple/protocols/silc10/ops.c:1229 msgid "Device" msgstr "Laite" -#: ../libpurple/protocols/silc/buddy.c:1580 -#: ../libpurple/protocols/silc/ops.c:1252 -#: ../libpurple/protocols/silc10/buddy.c:1580 -#: ../libpurple/protocols/silc10/ops.c:1234 -#: ../libpurple/protocols/silc10/silc.c:728 -#: ../libpurple/protocols/silc10/silc.c:730 msgid "Timezone" msgstr "Aikavyöhyke" -#: ../libpurple/protocols/silc/buddy.c:1585 -#: ../libpurple/protocols/silc/ops.c:1257 -#: ../libpurple/protocols/silc10/buddy.c:1585 -#: ../libpurple/protocols/silc10/ops.c:1239 msgid "Geolocation" msgstr "Maantieteellinen paikka" -#: ../libpurple/protocols/silc/buddy.c:1641 -#: ../libpurple/protocols/silc10/buddy.c:1639 msgid "Reset IM Key" msgstr "Tyhjennä pikaviestiavain" -#: ../libpurple/protocols/silc/buddy.c:1646 -#: ../libpurple/protocols/silc10/buddy.c:1645 msgid "IM with Key Exchange" msgstr "Pikaviesti avaimienvaihdolla" -#: ../libpurple/protocols/silc/buddy.c:1651 -#: ../libpurple/protocols/silc10/buddy.c:1650 msgid "IM with Password" msgstr "Pikaviesti salasanalla" -#: ../libpurple/protocols/silc/buddy.c:1664 -#: ../libpurple/protocols/silc10/buddy.c:1663 msgid "Get Public Key..." msgstr "Hae julkinen avain..." -#: ../libpurple/protocols/silc/buddy.c:1671 -#: ../libpurple/protocols/silc/ops.c:1625 -#: ../libpurple/protocols/silc10/buddy.c:1670 -#: ../libpurple/protocols/silc10/ops.c:1624 msgid "Kill User" msgstr "Poista käyttäjä" -#: ../libpurple/protocols/silc/buddy.c:1681 -#: ../libpurple/protocols/silc/chat.c:1000 -#: ../libpurple/protocols/silc10/buddy.c:1680 -#: ../libpurple/protocols/silc10/chat.c:977 msgid "Draw On Whiteboard" msgstr "Piirrä kirjoitustaululle" -#: ../libpurple/protocols/silc/chat.c:39 -#: ../libpurple/protocols/silc10/chat.c:39 msgid "_Passphrase:" msgstr "_Salasana:" -#: ../libpurple/protocols/silc/chat.c:80 -#: ../libpurple/protocols/silc10/chat.c:80 #, c-format msgid "Channel %s does not exist in the network" msgstr "Kanavaa %s ei ole verkossa" -#: ../libpurple/protocols/silc/chat.c:81 -#: ../libpurple/protocols/silc/chat.c:176 -#: ../libpurple/protocols/silc10/chat.c:81 -#: ../libpurple/protocols/silc10/chat.c:174 msgid "Channel Information" msgstr "Kanavatiedot" -#: ../libpurple/protocols/silc/chat.c:82 -#: ../libpurple/protocols/silc10/chat.c:82 msgid "Cannot get channel information" msgstr "Ei saada kanavatietoja" -#: ../libpurple/protocols/silc/chat.c:119 -#: ../libpurple/protocols/silc10/chat.c:119 #, c-format msgid "<b>Channel Name:</b> %s" msgstr "<b>Kanavan nimi:</b> %s" -#: ../libpurple/protocols/silc/chat.c:122 -#: ../libpurple/protocols/silc10/chat.c:122 #, c-format msgid "<br><b>User Count:</b> %d" msgstr "<br><b>Käyttäjämäärä:</b> %d" -#: ../libpurple/protocols/silc/chat.c:129 -#: ../libpurple/protocols/silc10/chat.c:129 #, c-format msgid "<br><b>Channel Founder:</b> %s" msgstr "<br><b>Kanavan perustaja:</b> %s" -#: ../libpurple/protocols/silc/chat.c:138 -#: ../libpurple/protocols/silc10/chat.c:138 #, c-format msgid "<br><b>Channel Cipher:</b> %s" msgstr "<br><b>Kanavan salausalgoritmi:<b> %s" #. Definition of HMAC: http://en.wikipedia.org/wiki/HMAC -#: ../libpurple/protocols/silc/chat.c:143 -#: ../libpurple/protocols/silc10/chat.c:142 #, c-format msgid "<br><b>Channel HMAC:</b> %s" msgstr "<br><b>Kanavan HMAC:</b> %s" -#: ../libpurple/protocols/silc/chat.c:148 -#: ../libpurple/protocols/silc10/chat.c:147 #, c-format msgid "<br><b>Channel Topic:</b><br>%s" msgstr "<br><b>Kanavan aihe:</b><br>%s" -#: ../libpurple/protocols/silc/chat.c:153 -#: ../libpurple/protocols/silc10/chat.c:152 #, c-format msgid "<br><b>Channel Modes:</b> " msgstr "<br><b>Kanavan tilat:</b> " -#: ../libpurple/protocols/silc/chat.c:167 -#: ../libpurple/protocols/silc10/chat.c:165 #, c-format msgid "<br><b>Founder Key Fingerprint:</b><br>%s" msgstr "<br><b>Perustajan avain Fingerprint</b><br>%s" -#: ../libpurple/protocols/silc/chat.c:168 -#: ../libpurple/protocols/silc10/chat.c:166 #, c-format msgid "<br><b>Founder Key Babbleprint:</b><br>%s" msgstr "<br><b>Perustajan avain Babbleprint:</b><br>%s" -#: ../libpurple/protocols/silc/chat.c:237 -#: ../libpurple/protocols/silc10/chat.c:236 msgid "Add Channel Public Key" msgstr "Lisää kanavan julkinen avain" #. Add new public key -#: ../libpurple/protocols/silc/chat.c:305 -#: ../libpurple/protocols/silc10/chat.c:291 msgid "Open Public Key..." msgstr "Avaa julkinen avain..." -#: ../libpurple/protocols/silc/chat.c:424 -#: ../libpurple/protocols/silc10/chat.c:401 msgid "Channel Passphrase" msgstr "Kanavan salasana" -#: ../libpurple/protocols/silc/chat.c:431 -#: ../libpurple/protocols/silc10/chat.c:408 msgid "Channel Public Keys List" msgstr "Kanavan julkisten avainten luettelo" -#: ../libpurple/protocols/silc/chat.c:436 -#: ../libpurple/protocols/silc10/chat.c:413 #, c-format msgid "" "Channel authentication is used to secure the channel from unauthorized " @@ -11489,446 +8185,246 @@ "pääsemiseksi. Jos käytetään kanavan julkisia avaimia niin silloin pääsevät " "vain käyttäjät joiden julkinen avain on luettelossa." -#: ../libpurple/protocols/silc/chat.c:445 -#: ../libpurple/protocols/silc/chat.c:446 -#: ../libpurple/protocols/silc/chat.c:482 -#: ../libpurple/protocols/silc/chat.c:483 -#: ../libpurple/protocols/silc/chat.c:934 -#: ../libpurple/protocols/silc10/chat.c:422 -#: ../libpurple/protocols/silc10/chat.c:423 -#: ../libpurple/protocols/silc10/chat.c:461 -#: ../libpurple/protocols/silc10/chat.c:462 -#: ../libpurple/protocols/silc10/chat.c:911 msgid "Channel Authentication" msgstr "Kanavalle tunnistautuminen" -#: ../libpurple/protocols/silc/chat.c:447 -#: ../libpurple/protocols/silc/chat.c:484 -#: ../libpurple/protocols/silc10/chat.c:424 -#: ../libpurple/protocols/silc10/chat.c:463 msgid "Add / Remove" msgstr "Lisää / poista" -#: ../libpurple/protocols/silc/chat.c:600 -#: ../libpurple/protocols/silc10/chat.c:581 msgid "Group Name" msgstr "Ryhmän nimi" -#: ../libpurple/protocols/silc/chat.c:604 -#: ../libpurple/protocols/silc/ops.c:1830 -#: ../libpurple/protocols/silc/silc.c:1236 -#: ../libpurple/protocols/silc10/chat.c:585 -#: ../libpurple/protocols/silc10/ops.c:1907 -#: ../libpurple/protocols/silc10/silc.c:937 msgid "Passphrase" msgstr "Salasana" -#: ../libpurple/protocols/silc/chat.c:615 -#: ../libpurple/protocols/silc10/chat.c:596 #, c-format msgid "Please enter the %s channel private group name and passphrase." msgstr "Syötä kanavan %s yksityinen ryhmänimi ja salasana." -#: ../libpurple/protocols/silc/chat.c:617 -#: ../libpurple/protocols/silc10/chat.c:598 msgid "Add Channel Private Group" msgstr "Lisää kanavaan yksityinen ryhmä" -#: ../libpurple/protocols/silc/chat.c:749 -#: ../libpurple/protocols/silc10/chat.c:726 msgid "User Limit" msgstr "Käyttäjäraja" -#: ../libpurple/protocols/silc/chat.c:750 -#: ../libpurple/protocols/silc10/chat.c:727 msgid "Set user limit on channel. Set to zero to reset user limit." msgstr "" "Aseta käyttäjärajoitus kanavalle. Aseta nollaksi poistaaksesi rajoituksen." -#: ../libpurple/protocols/silc/chat.c:914 -#: ../libpurple/protocols/silc10/chat.c:891 msgid "Invite List" msgstr "Kutsulista" -#: ../libpurple/protocols/silc/chat.c:919 -#: ../libpurple/protocols/silc10/chat.c:896 msgid "Ban List" msgstr "Kieltolista" -#: ../libpurple/protocols/silc/chat.c:927 -#: ../libpurple/protocols/silc10/chat.c:904 msgid "Add Private Group" msgstr "Lisää yksityinen ryhmä" -#: ../libpurple/protocols/silc/chat.c:940 -#: ../libpurple/protocols/silc10/chat.c:917 msgid "Reset Permanent" msgstr "Nollaa pysyvä" -#: ../libpurple/protocols/silc/chat.c:945 -#: ../libpurple/protocols/silc10/chat.c:922 msgid "Set Permanent" msgstr "Aseta pysyvä" -#: ../libpurple/protocols/silc/chat.c:953 -#: ../libpurple/protocols/silc10/chat.c:930 msgid "Set User Limit" msgstr "Aseta käyttäjärajoitus" -#: ../libpurple/protocols/silc/chat.c:959 -#: ../libpurple/protocols/silc10/chat.c:936 msgid "Reset Topic Restriction" msgstr "Poista aiherajoitus" -#: ../libpurple/protocols/silc/chat.c:964 -#: ../libpurple/protocols/silc10/chat.c:941 msgid "Set Topic Restriction" msgstr "Aseta aiherajoitus" -#: ../libpurple/protocols/silc/chat.c:971 -#: ../libpurple/protocols/silc10/chat.c:948 msgid "Reset Private Channel" msgstr "Poista yksityinen kanava" -#: ../libpurple/protocols/silc/chat.c:976 -#: ../libpurple/protocols/silc10/chat.c:953 msgid "Set Private Channel" msgstr "Aseta yksityinen kanava" -#: ../libpurple/protocols/silc/chat.c:983 -#: ../libpurple/protocols/silc10/chat.c:960 msgid "Reset Secret Channel" msgstr "Poista salainen kanava" -#: ../libpurple/protocols/silc/chat.c:988 -#: ../libpurple/protocols/silc10/chat.c:965 msgid "Set Secret Channel" msgstr "Aseta salainen kanava" -#: ../libpurple/protocols/silc/chat.c:1049 -#: ../libpurple/protocols/silc10/chat.c:1102 #, c-format msgid "" "You have to join the %s channel before you are able to join the private group" msgstr "" "Sinun tulee liittyä kanavalle %s ennen kuin voit liittyä yksityiseen ryhmään" -#: ../libpurple/protocols/silc/chat.c:1051 -#: ../libpurple/protocols/silc10/chat.c:1104 msgid "Join Private Group" msgstr "Liity yksityiseen ryhmään" -#: ../libpurple/protocols/silc/chat.c:1052 -#: ../libpurple/protocols/silc10/chat.c:1105 msgid "Cannot join private group" msgstr "Yksityiseen ryhmään ei voi liittyä" -#: ../libpurple/protocols/silc/chat.c:1248 -#: ../libpurple/protocols/silc/silc.c:1433 -#: ../libpurple/protocols/silc10/chat.c:1299 -#: ../libpurple/protocols/silc10/silc.c:1143 msgid "Call Command" msgstr "Kutsu komentoa" -#: ../libpurple/protocols/silc/chat.c:1248 -#: ../libpurple/protocols/silc/silc.c:1434 -#: ../libpurple/protocols/silc10/chat.c:1299 -#: ../libpurple/protocols/silc10/silc.c:1143 msgid "Cannot call command" msgstr "Komentoa ei voi kutsua" -#: ../libpurple/protocols/silc/chat.c:1249 -#: ../libpurple/protocols/silc/silc.c:1435 -#: ../libpurple/protocols/silc10/chat.c:1300 -#: ../libpurple/protocols/silc10/silc.c:1144 msgid "Unknown command" msgstr "Tuntematon komento" -#: ../libpurple/protocols/silc/ft.c:85 ../libpurple/protocols/silc/ft.c:101 -#: ../libpurple/protocols/silc/ft.c:104 ../libpurple/protocols/silc/ft.c:108 -#: ../libpurple/protocols/silc/ft.c:112 ../libpurple/protocols/silc/ft.c:116 -#: ../libpurple/protocols/silc/ft.c:120 ../libpurple/protocols/silc/ft.c:272 -#: ../libpurple/protocols/silc/ft.c:277 ../libpurple/protocols/silc/ft.c:282 -#: ../libpurple/protocols/silc/ft.c:288 ../libpurple/protocols/silc/ft.c:425 -#: ../libpurple/protocols/silc10/ft.c:89 ../libpurple/protocols/silc10/ft.c:92 -#: ../libpurple/protocols/silc10/ft.c:96 -#: ../libpurple/protocols/silc10/ft.c:100 -#: ../libpurple/protocols/silc10/ft.c:104 -#: ../libpurple/protocols/silc10/ft.c:205 -#: ../libpurple/protocols/silc10/ft.c:210 -#: ../libpurple/protocols/silc10/ft.c:215 -#: ../libpurple/protocols/silc10/ft.c:221 -#: ../libpurple/protocols/silc10/ft.c:340 msgid "Secure File Transfer" msgstr "Turvallinen tiedostonsiirto" -#: ../libpurple/protocols/silc/ft.c:86 ../libpurple/protocols/silc/ft.c:102 -#: ../libpurple/protocols/silc/ft.c:105 ../libpurple/protocols/silc/ft.c:109 -#: ../libpurple/protocols/silc/ft.c:113 ../libpurple/protocols/silc/ft.c:117 -#: ../libpurple/protocols/silc/ft.c:121 ../libpurple/protocols/silc10/ft.c:90 -#: ../libpurple/protocols/silc10/ft.c:93 ../libpurple/protocols/silc10/ft.c:97 -#: ../libpurple/protocols/silc10/ft.c:101 -#: ../libpurple/protocols/silc10/ft.c:105 msgid "Error during file transfer" msgstr "Virhe tiedostonsiirrossa" -#: ../libpurple/protocols/silc/ft.c:87 msgid "Remote disconnected" msgstr "Etäpää katkaisi yhteyden" -#: ../libpurple/protocols/silc/ft.c:106 ../libpurple/protocols/silc10/ft.c:94 msgid "Permission denied" msgstr "Pääsy evätty" -#: ../libpurple/protocols/silc/ft.c:110 ../libpurple/protocols/silc10/ft.c:98 msgid "Key agreement failed" msgstr "Avain sopimus epäonnistui" -#: ../libpurple/protocols/silc/ft.c:114 msgid "Connection timed out" msgstr "Ei yhteyttä määräajassa" -#: ../libpurple/protocols/silc/ft.c:118 msgid "Creating connection failed" msgstr "Yhteyden muodostus epäonnistui" -#: ../libpurple/protocols/silc/ft.c:122 ../libpurple/protocols/silc10/ft.c:102 msgid "File transfer session does not exist" msgstr "Tiedostonsiirtoistuntoa ei ole" -#: ../libpurple/protocols/silc/ft.c:273 ../libpurple/protocols/silc10/ft.c:206 msgid "No file transfer session active" msgstr "Ei aktiivista tiedostonsiirtoistuntoa" -#: ../libpurple/protocols/silc/ft.c:278 ../libpurple/protocols/silc10/ft.c:211 msgid "File transfer already started" msgstr "Tiedostonsiirto on jo aloitettu" -#: ../libpurple/protocols/silc/ft.c:283 ../libpurple/protocols/silc10/ft.c:216 msgid "Could not perform key agreement for file transfer" msgstr "Avainsopimusta ei onnistuttu suorittamaan tiedostonsiirtoa varten" -#: ../libpurple/protocols/silc/ft.c:289 ../libpurple/protocols/silc10/ft.c:222 msgid "Could not start the file transfer" msgstr "Tiedostonsiirtoa ei voi aloittaa" -#: ../libpurple/protocols/silc/ft.c:426 ../libpurple/protocols/silc10/ft.c:341 msgid "Cannot send file" msgstr "Tiedoston lähetys ei onnistu" -#: ../libpurple/protocols/silc/ops.c:76 msgid "Error occurred" msgstr "Tapahtui virhe" -#: ../libpurple/protocols/silc/ops.c:548 ../libpurple/protocols/silc/ops.c:557 -#: ../libpurple/protocols/silc/ops.c:566 -#: ../libpurple/protocols/silc10/ops.c:554 -#: ../libpurple/protocols/silc10/ops.c:563 -#: ../libpurple/protocols/silc10/ops.c:572 #, c-format msgid "%s has changed the topic of <I>%s</I> to: %s" msgstr "%s on vaihtanut <I>%s</I> aiheeksi: %s" -#: ../libpurple/protocols/silc/ops.c:632 -#: ../libpurple/protocols/silc10/ops.c:638 #, c-format msgid "<I>%s</I> set channel <I>%s</I> modes to: %s" msgstr "<I>%s</I> muutti kanavan <I>%s</I> tilaa: %s" -#: ../libpurple/protocols/silc/ops.c:636 -#: ../libpurple/protocols/silc10/ops.c:642 #, c-format msgid "<I>%s</I> removed all channel <I>%s</I> modes" msgstr "<I>%s</I> muutti kaikki kanavan <I>%s</I> tilat" -#: ../libpurple/protocols/silc/ops.c:669 -#: ../libpurple/protocols/silc10/ops.c:675 #, c-format msgid "<I>%s</I> set <I>%s's</I> modes to: %s" msgstr "<I>%s</I> asetti <I>%s</I> tilan: %s" -#: ../libpurple/protocols/silc/ops.c:677 -#: ../libpurple/protocols/silc10/ops.c:683 #, c-format msgid "<I>%s</I> removed all <I>%s's</I> modes" msgstr "<I>%s</I> poisti kaikki <I>%s</I> tilat" -#: ../libpurple/protocols/silc/ops.c:706 -#: ../libpurple/protocols/silc10/ops.c:712 #, c-format msgid "You have been kicked off <I>%s</I> by <I>%s</I> (%s)" msgstr "Sinut on poistettu <I>%s</I> käyttäjä <I>%s</I> (%s)" -#: ../libpurple/protocols/silc/ops.c:733 ../libpurple/protocols/silc/ops.c:738 -#: ../libpurple/protocols/silc/ops.c:743 -#: ../libpurple/protocols/silc10/ops.c:742 -#: ../libpurple/protocols/silc10/ops.c:747 -#: ../libpurple/protocols/silc10/ops.c:752 #, c-format msgid "You have been killed by %s (%s)" msgstr "Sinut on poistanut %s (%s)" -#: ../libpurple/protocols/silc/ops.c:764 ../libpurple/protocols/silc/ops.c:769 -#: ../libpurple/protocols/silc/ops.c:774 -#: ../libpurple/protocols/silc10/ops.c:773 -#: ../libpurple/protocols/silc10/ops.c:778 -#: ../libpurple/protocols/silc10/ops.c:783 #, c-format msgid "Killed by %s (%s)" msgstr "Poistettu käyttäjän %s toimesta (%s)" -#: ../libpurple/protocols/silc/ops.c:811 -#: ../libpurple/protocols/silc10/ops.c:829 msgid "Server signoff" msgstr "Kirjaudu ulos palvelimelta" -#: ../libpurple/protocols/silc/ops.c:997 -#: ../libpurple/protocols/silc10/ops.c:1017 msgid "Personal Information" msgstr "Henkilökohtaiset tiedot" -#: ../libpurple/protocols/silc/ops.c:1020 -#: ../libpurple/protocols/silc10/ops.c:1040 msgid "Birth Day" msgstr "Syntymäpäivä" -#: ../libpurple/protocols/silc/ops.c:1028 -#: ../libpurple/protocols/silc10/ops.c:1048 msgid "Job Role" msgstr "Asema työssä" -#: ../libpurple/protocols/silc/ops.c:1032 -#: ../libpurple/protocols/silc/silc.c:1229 -#: ../libpurple/protocols/silc10/ops.c:1052 -#: ../libpurple/protocols/silc10/silc.c:930 msgid "Organization" msgstr "Organisaatio" -#: ../libpurple/protocols/silc/ops.c:1036 -#: ../libpurple/protocols/silc10/ops.c:1056 msgid "Unit" msgstr "Yksikkö" -#: ../libpurple/protocols/silc/ops.c:1060 -#: ../libpurple/protocols/silc10/ops.c:1080 msgid "Note" msgstr "Huomautus" -#: ../libpurple/protocols/silc/ops.c:1106 -#: ../libpurple/protocols/silc10/ops.c:1128 msgid "Join Chat" msgstr "Liity ryhmäkeskusteluun" -#: ../libpurple/protocols/silc/ops.c:1140 -#: ../libpurple/protocols/silc10/chat.c:1039 #, c-format msgid "You are channel founder on <I>%s</I>" msgstr "Olet kanavan perustaja kanavalla <I>%s</I>" -#: ../libpurple/protocols/silc/ops.c:1144 -#: ../libpurple/protocols/silc10/chat.c:1043 #, c-format msgid "Channel founder on <I>%s</I> is <I>%s</I>" msgstr "Kanavan perustaja kanavalla <I>%s</I> on <I>%s</I>" -#: ../libpurple/protocols/silc/ops.c:1203 -#: ../libpurple/protocols/silc/ops.c:1341 -#: ../libpurple/protocols/silc10/ops.c:1183 -#: ../libpurple/protocols/silc10/ops.c:1332 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1078 msgid "Real Name" msgstr "Oikea nimi" -#: ../libpurple/protocols/silc/ops.c:1231 -#: ../libpurple/protocols/silc10/ops.c:1213 msgid "Status Text" msgstr "Tilateksti" -#: ../libpurple/protocols/silc/ops.c:1293 -#: ../libpurple/protocols/silc/ops.c:1367 -#: ../libpurple/protocols/silc10/ops.c:1285 -#: ../libpurple/protocols/silc10/ops.c:1357 msgid "Public Key Fingerprint" msgstr "Julkisen avaimen sormenjälki" -#: ../libpurple/protocols/silc/ops.c:1294 -#: ../libpurple/protocols/silc/ops.c:1368 -#: ../libpurple/protocols/silc10/ops.c:1286 -#: ../libpurple/protocols/silc10/ops.c:1358 msgid "Public Key Babbleprint" msgstr "Julkisen avaimen \"babbleprint\"" -#: ../libpurple/protocols/silc/ops.c:1307 -#: ../libpurple/protocols/silc10/ops.c:1298 msgid "_More..." msgstr "_Lisää..." -#: ../libpurple/protocols/silc/ops.c:1386 -#: ../libpurple/protocols/silc/silc.c:1293 -#: ../libpurple/protocols/silc10/ops.c:1371 -#: ../libpurple/protocols/silc10/silc.c:994 msgid "Detach From Server" msgstr "Irrota palvelimelta" -#: ../libpurple/protocols/silc/ops.c:1386 -#: ../libpurple/protocols/silc10/ops.c:1371 msgid "Cannot detach" msgstr "Irrottaminen ei onnistu" -#: ../libpurple/protocols/silc/ops.c:1406 -#: ../libpurple/protocols/silc10/ops.c:1382 msgid "Cannot set topic" msgstr "Aihetta ei voi asettaa" -#: ../libpurple/protocols/silc/ops.c:1435 -#: ../libpurple/protocols/silc10/ops.c:1414 msgid "Failed to change nickname" msgstr "Kutsumanimeä ei onnistuttu muuttamaan" -#: ../libpurple/protocols/silc/ops.c:1484 -#: ../libpurple/protocols/silc10/ops.c:1462 msgid "Roomlist" msgstr "Huoneluettelo" -#: ../libpurple/protocols/silc/ops.c:1484 -#: ../libpurple/protocols/silc10/ops.c:1462 msgid "Cannot get room list" msgstr "Huoneluetteloa ei saatu" -#: ../libpurple/protocols/silc/ops.c:1485 msgid "Network is empty" msgstr "Verkko on tyhjä" -#: ../libpurple/protocols/silc/ops.c:1529 -#: ../libpurple/protocols/silc10/ops.c:1507 msgid "No public key was received" msgstr "Ei saatu julkista avainta" -#: ../libpurple/protocols/silc/ops.c:1541 -#: ../libpurple/protocols/silc/ops.c:1554 -#: ../libpurple/protocols/silc10/ops.c:1519 -#: ../libpurple/protocols/silc10/ops.c:1532 msgid "Server Information" msgstr "Palvelimen tiedot" -#: ../libpurple/protocols/silc/ops.c:1542 -#: ../libpurple/protocols/silc10/ops.c:1520 msgid "Cannot get server information" msgstr "Ei saada palvelimen tietoja" -#: ../libpurple/protocols/silc/ops.c:1565 -#: ../libpurple/protocols/silc10/ops.c:1549 -#: ../libpurple/protocols/silc10/ops.c:1558 msgid "Server Statistics" msgstr "Palvelimen tilastoja" -#: ../libpurple/protocols/silc/ops.c:1566 -#: ../libpurple/protocols/silc10/ops.c:1550 msgid "Cannot get server statistics" msgstr "Ei saatu palvelimen tilastoja" -#: ../libpurple/protocols/silc/ops.c:1573 -#: ../libpurple/protocols/silc10/ops.c:1581 #, c-format msgid "" "Local server start time: %s\n" @@ -11963,59 +8459,36 @@ "Palvelinoperaattorit yhteensä: %d\n" "Reititinoperaattorit yhteensä: %d\n" -#: ../libpurple/protocols/silc/ops.c:1605 -#: ../libpurple/protocols/silc10/ops.c:1604 msgid "Network Statistics" msgstr "Verkkotilastoja" -#: ../libpurple/protocols/silc/ops.c:1613 -#: ../libpurple/protocols/silc10/ops.c:1612 msgid "Ping failed" msgstr "Ping epäonnistui" -#: ../libpurple/protocols/silc/ops.c:1618 -#: ../libpurple/protocols/silc10/ops.c:1617 msgid "Ping reply received from server" msgstr "Ping-vastaus saatu palvelimelta" -#: ../libpurple/protocols/silc/ops.c:1626 -#: ../libpurple/protocols/silc10/ops.c:1625 msgid "Could not kill user" msgstr "Käyttäjää ei voi poistaa" -#: ../libpurple/protocols/silc/ops.c:1665 msgid "WATCH" msgstr "TARKKAILE" -#: ../libpurple/protocols/silc/ops.c:1665 msgid "Cannot watch user" msgstr "Et voi tarkkailla käyttäjää" -#: ../libpurple/protocols/silc/ops.c:1741 -#: ../libpurple/protocols/silc/ops.c:1792 -#: ../libpurple/protocols/silc/silc.c:394 -#: ../libpurple/protocols/silc10/ops.c:1817 -#: ../libpurple/protocols/silc10/ops.c:1864 -#: ../libpurple/protocols/silc10/silc.c:193 msgid "Resuming session" msgstr "Palautetaan istunto" -#: ../libpurple/protocols/silc/ops.c:1743 -#: ../libpurple/protocols/silc10/ops.c:1819 msgid "Authenticating connection" msgstr "Todennetaan yhteys" -#: ../libpurple/protocols/silc/ops.c:1794 -#: ../libpurple/protocols/silc10/ops.c:1866 msgid "Verifying server public key" msgstr "Tarkistetaan palvelimen julkinen avain" -#: ../libpurple/protocols/silc/ops.c:1831 -#: ../libpurple/protocols/silc10/ops.c:1908 msgid "Passphrase required" msgstr "Vaatii salasanan" -#: ../libpurple/protocols/silc/pk.c:98 ../libpurple/protocols/silc10/pk.c:104 #, c-format msgid "" "Received %s's public key. Your local copy does not match this key. Would you " @@ -12024,12 +8497,10 @@ "Vastaanotettiin käyttäjän %s julkinen avain. Paikallinen kopiosi ei täsmää. " "Haluatko silti hyväksyä tämän julkisen avaimen?" -#: ../libpurple/protocols/silc/pk.c:103 ../libpurple/protocols/silc10/pk.c:109 #, c-format msgid "Received %s's public key. Would you like to accept this public key?" msgstr "Vastaanotettiin julkinen avain käyttäjältä %s. Hyväksytäänkö se?" -#: ../libpurple/protocols/silc/pk.c:107 ../libpurple/protocols/silc10/pk.c:113 #, c-format msgid "" "Fingerprint and babbleprint for the %s key are:\n" @@ -12042,105 +8513,69 @@ "%s\n" "%s\n" -#: ../libpurple/protocols/silc/pk.c:110 ../libpurple/protocols/silc/pk.c:139 -#: ../libpurple/protocols/silc10/pk.c:116 -#: ../libpurple/protocols/silc10/pk.c:142 msgid "Verify Public Key" msgstr "Tarkista julkinen avain" -#: ../libpurple/protocols/silc/pk.c:115 ../libpurple/protocols/silc10/pk.c:121 msgid "_View..." msgstr "_Näytä..." -#: ../libpurple/protocols/silc/pk.c:140 ../libpurple/protocols/silc10/pk.c:143 msgid "Unsupported public key type" msgstr "Julkisen avaimen tyyppiä ei tuettu" -#: ../libpurple/protocols/silc/silc.c:319 -#: ../libpurple/protocols/silc10/ops.c:1755 msgid "Disconnected by server" msgstr "Palvelin katkaisi yhteyden" -#: ../libpurple/protocols/silc/silc.c:327 -#: ../libpurple/protocols/silc10/ops.c:1701 msgid "Error during connecting to SILC Server" msgstr "Virhe luotaessa yhteyttä SILC-palvelimelle" -#: ../libpurple/protocols/silc/silc.c:333 -#: ../libpurple/protocols/silc10/ops.c:1707 msgid "Key Exchange failed" msgstr "Avaintenvaihto epäonnistui" -#: ../libpurple/protocols/silc/silc.c:343 -#: ../libpurple/protocols/silc10/ops.c:1718 msgid "" "Resuming detached session failed. Press Reconnect to create new connection." msgstr "" "Irrotetun yhteyden palauttaminen epäonnistui. Paina Uudelleenyhdistä " "luodaksesi uuden yhteyden." -#: ../libpurple/protocols/silc/silc.c:373 -#: ../libpurple/protocols/silc/silc.c:420 -#: ../libpurple/protocols/silc10/silc.c:163 msgid "Connection failed" msgstr "Yhteys epäonnistui" -#: ../libpurple/protocols/silc/silc.c:397 -#: ../libpurple/protocols/silc10/silc.c:196 msgid "Performing key exchange" msgstr "Suoritetaan avaintenvaihto" -#: ../libpurple/protocols/silc/silc.c:449 -#: ../libpurple/protocols/silc10/silc.c:361 msgid "Unable to create connection" msgstr "Yhteyden luominen epäonnistui" -#: ../libpurple/protocols/silc/silc.c:492 -#: ../libpurple/protocols/silc/silc.c:508 -#: ../libpurple/protocols/silc/silc.c:537 -#: ../libpurple/protocols/silc10/silc.c:340 msgid "Could not load SILC key pair" msgstr "SILC-avainparia ei voi ladata" #. Progress -#: ../libpurple/protocols/silc/silc.c:522 -#: ../libpurple/protocols/silc10/silc.c:329 msgid "Connecting to SILC Server" msgstr "Yhdistetään SILC-palvelimelle" -#: ../libpurple/protocols/silc/silc.c:568 -#: ../libpurple/protocols/silc10/silc.c:271 msgid "Out of memory" msgstr "Muisti loppu" -#: ../libpurple/protocols/silc/silc.c:619 -#: ../libpurple/protocols/silc10/silc.c:317 msgid "Cannot initialize SILC protocol" msgstr "SILC-yhteyskäytäntöä ei voi alustaa" -#: ../libpurple/protocols/silc/silc.c:632 -#: ../libpurple/protocols/silc10/silc.c:324 msgid "Error loading SILC key pair" msgstr "Virhe ladattaessa SILC-avainparia" -#: ../libpurple/protocols/silc/silc.c:955 -#: ../libpurple/protocols/silc10/silc.c:656 +#, c-format +msgid "Download %s: %s" +msgstr "Lataa %s: %s" + msgid "Your Current Mood" msgstr "Tämänhetkinen mielialasi" -#: ../libpurple/protocols/silc/silc.c:957 -#: ../libpurple/protocols/silc10/silc.c:658 ../pidgin/gtkprefs.c:1795 #, c-format msgid "Normal" msgstr "Normaali" -#: ../libpurple/protocols/silc/silc.c:971 -#: ../libpurple/protocols/silc10/silc.c:672 msgid "In love" msgstr "Rakastunut" -#: ../libpurple/protocols/silc/silc.c:982 -#: ../libpurple/protocols/silc10/silc.c:683 msgid "" "\n" "Your Preferred Contact Methods" @@ -12148,63 +8583,36 @@ "\n" "Suosimasi yhteystavat" -#: ../libpurple/protocols/silc/silc.c:990 -#: ../libpurple/protocols/silc/util.c:567 -#: ../libpurple/protocols/silc10/silc.c:691 -#: ../libpurple/protocols/silc10/util.c:561 msgid "SMS" msgstr "SMS" -#: ../libpurple/protocols/silc/silc.c:992 -#: ../libpurple/protocols/silc/util.c:569 -#: ../libpurple/protocols/silc10/silc.c:693 -#: ../libpurple/protocols/silc10/util.c:563 msgid "MMS" msgstr "MMS" -#: ../libpurple/protocols/silc/silc.c:994 -#: ../libpurple/protocols/silc10/silc.c:695 msgid "Video conferencing" msgstr "Videoneuvottelu" -#: ../libpurple/protocols/silc/silc.c:999 -#: ../libpurple/protocols/silc10/silc.c:700 msgid "Your Current Status" msgstr "Tämänhetkinen tilasi" -#: ../libpurple/protocols/silc/silc.c:1006 -#: ../libpurple/protocols/silc10/silc.c:707 msgid "Online Services" msgstr "Online-palvelut" -#: ../libpurple/protocols/silc/silc.c:1009 -#: ../libpurple/protocols/silc10/silc.c:710 msgid "Let others see what services you are using" msgstr "Anna muiden nähdä mitä palveluja käytät" -#: ../libpurple/protocols/silc/silc.c:1015 -#: ../libpurple/protocols/silc10/silc.c:716 msgid "Let others see what computer you are using" msgstr "Anna muiden nähdä mitä tietokonetta käytät" -#: ../libpurple/protocols/silc/silc.c:1022 -#: ../libpurple/protocols/silc10/silc.c:723 msgid "Your VCard File" msgstr "VCard-tiedostosi" -#: ../libpurple/protocols/silc/silc.c:1028 msgid "Timezone (UTC)" msgstr "Aikavyöhyke (UTC)" -#: ../libpurple/protocols/silc/silc.c:1032 -#: ../libpurple/protocols/silc/silc.c:1033 -#: ../libpurple/protocols/silc10/silc.c:735 -#: ../libpurple/protocols/silc10/silc.c:736 msgid "User Online Status Attributes" msgstr "Käyttäjän paikallaolo-ominaisuudet" -#: ../libpurple/protocols/silc/silc.c:1034 -#: ../libpurple/protocols/silc10/silc.c:737 msgid "" "You can let other users see your online status information and your personal " "information. Please fill the information you would like other users to see " @@ -12214,212 +8622,123 @@ "henkilökohtaiset tietosi. Syötä tiedot jotka haluat toisten näkevän " "itsestäsi." -#: ../libpurple/protocols/silc/silc.c:1075 -#: ../libpurple/protocols/silc/silc.c:1081 -#: ../libpurple/protocols/silc/silc.c:1702 -#: ../libpurple/protocols/silc10/silc.c:778 -#: ../libpurple/protocols/silc10/silc.c:784 -#: ../libpurple/protocols/silc10/silc.c:1421 msgid "Message of the Day" msgstr "Päivän viesti" -#: ../libpurple/protocols/silc/silc.c:1075 -#: ../libpurple/protocols/silc10/silc.c:778 msgid "No Message of the Day available" msgstr "Päivän viestiä ei ole" -#: ../libpurple/protocols/silc/silc.c:1076 -#: ../libpurple/protocols/silc/silc.c:1697 -#: ../libpurple/protocols/silc10/silc.c:779 -#: ../libpurple/protocols/silc10/silc.c:1416 msgid "There is no Message of the Day associated with this connection" msgstr "Ei ole Päivän viestiä joka olisi assosioitu tälle yhteydelle." -#: ../libpurple/protocols/silc/silc.c:1127 -#: ../libpurple/protocols/silc/silc.c:1173 -#: ../libpurple/protocols/silc/silc.c:1244 -#: ../libpurple/protocols/silc/silc.c:1245 -#: ../libpurple/protocols/silc10/silc.c:830 -#: ../libpurple/protocols/silc10/silc.c:874 -#: ../libpurple/protocols/silc10/silc.c:945 -#: ../libpurple/protocols/silc10/silc.c:946 msgid "Create New SILC Key Pair" msgstr "Luo uusi SILC-avainpari" -#: ../libpurple/protocols/silc/silc.c:1127 -#: ../libpurple/protocols/silc10/silc.c:830 msgid "Passphrases do not match" msgstr "Salasanat eivät täsmää" -#: ../libpurple/protocols/silc/silc.c:1173 -#: ../libpurple/protocols/silc10/silc.c:874 msgid "Key Pair Generation failed" msgstr "Avainparin luonti epäonnistui" -#: ../libpurple/protocols/silc/silc.c:1212 -#: ../libpurple/protocols/silc10/silc.c:913 msgid "Key length" msgstr "Avaimen pituus" -#: ../libpurple/protocols/silc/silc.c:1214 -#: ../libpurple/protocols/silc10/silc.c:915 msgid "Public key file" msgstr "Julkinen avaintiedosto" -#: ../libpurple/protocols/silc/silc.c:1216 -#: ../libpurple/protocols/silc10/silc.c:917 msgid "Private key file" msgstr "Yksityinen avaintiedosto" -#: ../libpurple/protocols/silc/silc.c:1239 -#: ../libpurple/protocols/silc10/silc.c:940 msgid "Passphrase (retype)" msgstr "Salasana (uudelleen)" -#: ../libpurple/protocols/silc/silc.c:1246 -#: ../libpurple/protocols/silc10/silc.c:947 msgid "Generate Key Pair" msgstr "Luo avainpari" -#: ../libpurple/protocols/silc/silc.c:1289 -#: ../libpurple/protocols/silc10/silc.c:990 msgid "Online Status" msgstr "Tila" -#: ../libpurple/protocols/silc/silc.c:1297 -#: ../libpurple/protocols/silc10/silc.c:998 msgid "View Message of the Day" msgstr "Näytä päivän viesti" -#: ../libpurple/protocols/silc/silc.c:1301 -#: ../libpurple/protocols/silc10/silc.c:1002 msgid "Create SILC Key Pair..." msgstr "Luo SILC-avainpari..." -#: ../libpurple/protocols/silc/silc.c:1393 -#: ../libpurple/protocols/silc10/silc.c:1101 #, c-format msgid "User <I>%s</I> is not present in the network" msgstr "Käyttäjä <I>%s</I> ei ole verkossa" -#: ../libpurple/protocols/silc/silc.c:1573 -#: ../libpurple/protocols/silc10/silc.c:1292 msgid "Topic too long" msgstr "Aihe liian pitkä" -#: ../libpurple/protocols/silc/silc.c:1654 -#: ../libpurple/protocols/silc10/silc.c:1373 msgid "You must specify a nick" msgstr "Sinun täytyy syöttää lempinimi" -#: ../libpurple/protocols/silc/silc.c:1756 -#: ../libpurple/protocols/silc10/silc.c:1475 #, c-format msgid "channel %s not found" msgstr "Kanavaa %s ei löydy" -#: ../libpurple/protocols/silc/silc.c:1761 -#: ../libpurple/protocols/silc10/silc.c:1480 #, c-format msgid "channel modes for %s: %s" msgstr "kanavan tilat kanavalle %s: %s" -#: ../libpurple/protocols/silc/silc.c:1763 -#: ../libpurple/protocols/silc10/silc.c:1482 #, c-format msgid "no channel modes are set on %s" msgstr "ei kanavan tiloja asetettu kanavalle %s" -#: ../libpurple/protocols/silc/silc.c:1776 -#: ../libpurple/protocols/silc10/silc.c:1495 #, c-format msgid "Failed to set cmodes for %s" msgstr "cmodes asetus epäonnistui, %s" -#: ../libpurple/protocols/silc/silc.c:1806 -#: ../libpurple/protocols/silc10/silc.c:1525 #, c-format msgid "Unknown command: %s, (may be a client bug)" msgstr "Tuntematon komento: %s, (mahdollisesti asiakasohjelman virhe)" -#: ../libpurple/protocols/silc/silc.c:1869 -#: ../libpurple/protocols/silc10/silc.c:1588 msgid "part [channel]: Leave the chat" msgstr "part [kanava]: Poistu keskustelusta" -#: ../libpurple/protocols/silc/silc.c:1873 -#: ../libpurple/protocols/silc10/silc.c:1592 msgid "leave [channel]: Leave the chat" msgstr "leave [kanava]: Poistu keskustelusta" -#: ../libpurple/protocols/silc/silc.c:1877 -#: ../libpurple/protocols/silc10/silc.c:1596 msgid "topic [<new topic>]: View or change the topic" msgstr "topic [<uusi aihe>]: Näytä tai aseta aihe" -#: ../libpurple/protocols/silc/silc.c:1882 -#: ../libpurple/protocols/silc10/silc.c:1601 msgid "join <channel> [<password>]: Join a chat on this network" msgstr "join <kanava> [<salasana>]: Liity kanavalle tässä verkossa" -#: ../libpurple/protocols/silc/silc.c:1886 -#: ../libpurple/protocols/silc10/silc.c:1605 msgid "list: List channels on this network" msgstr "list: Listaa kanavat tässä verkossa" -#: ../libpurple/protocols/silc/silc.c:1890 -#: ../libpurple/protocols/silc10/silc.c:1609 msgid "whois <nick>: View nick's information" msgstr "whois <nimi>: Näytä nimen tiedot" -#: ../libpurple/protocols/silc/silc.c:1894 -#: ../libpurple/protocols/silc10/silc.c:1613 -#: ../libpurple/protocols/zephyr/zephyr.c:2700 msgid "msg <nick> <message>: Send a private message to a user" msgstr "msg <nimi> <viesti>: Lähetä yksityisviesti käyttäjälle" -#: ../libpurple/protocols/silc/silc.c:1898 -#: ../libpurple/protocols/silc10/silc.c:1617 msgid "query <nick> [<message>]: Send a private message to a user" msgstr "query <nimi> [<viesti>]: Lähetä yksityisviesti käyttäjälle" -#: ../libpurple/protocols/silc/silc.c:1902 -#: ../libpurple/protocols/silc10/silc.c:1621 msgid "motd: View the server's Message Of The Day" msgstr "motd: Näytä palvelimen päivän viesti" -#: ../libpurple/protocols/silc/silc.c:1906 -#: ../libpurple/protocols/silc10/silc.c:1625 msgid "detach: Detach this session" msgstr "detach: Irrota tämä istunto" -#: ../libpurple/protocols/silc/silc.c:1910 -#: ../libpurple/protocols/silc10/silc.c:1629 msgid "quit [message]: Disconnect from the server, with an optional message" msgstr "quit [viesti]: Katkaise yhteys palvelimelle, valinnainen viesti" -#: ../libpurple/protocols/silc/silc.c:1914 -#: ../libpurple/protocols/silc10/silc.c:1633 msgid "call <command>: Call any silc client command" msgstr "call <komento>: Kutsu mitä vain silc:n asiakaskomentoa." -#: ../libpurple/protocols/silc/silc.c:1920 -#: ../libpurple/protocols/silc10/silc.c:1639 msgid "kill <nick> [-pubkey|<reason>]: Kill nick" msgstr "kill <nimi> [-pubkey|<syy>]: Tuhoa nimi" -#: ../libpurple/protocols/silc/silc.c:1924 -#: ../libpurple/protocols/silc10/silc.c:1643 msgid "nick <newnick>: Change your nickname" msgstr "nick <uusi nimi>: Muuta (lempi)nimesi." -#: ../libpurple/protocols/silc/silc.c:1928 -#: ../libpurple/protocols/silc10/silc.c:1647 msgid "whowas <nick>: View nick's information" msgstr "whowas <nimi>: Näytä nimen tiedot" -#: ../libpurple/protocols/silc/silc.c:1932 -#: ../libpurple/protocols/silc10/silc.c:1651 msgid "" "cmode <channel> [+|-<modes>] [arguments]: Change or display " "channel modes" @@ -12427,8 +8746,6 @@ "cmode <kanava> [+|-<tila>] [argumentit]: Aseta tai näytä kanavan " "tilat." -#: ../libpurple/protocols/silc/silc.c:1936 -#: ../libpurple/protocols/silc10/silc.c:1655 msgid "" "cumode <channel> +|-<modes> <nick>: Change nick's modes " "on channel" @@ -12436,18 +8753,12 @@ "cumode <kanava> +|-<tila> <nimi>: Muuta nimen tilaa " "kanavalla." -#: ../libpurple/protocols/silc/silc.c:1940 -#: ../libpurple/protocols/silc10/silc.c:1659 msgid "umode <usermodes>: Set your modes in the network" msgstr "umode <käyttäjätilat>: Aseta omat tilasi verkossa" -#: ../libpurple/protocols/silc/silc.c:1944 -#: ../libpurple/protocols/silc10/silc.c:1663 msgid "oper <nick> [-pubkey]: Get server operator privileges" msgstr "oper <nimi> [-pubkey]: Palvelinoperaattorin oikeudet" -#: ../libpurple/protocols/silc/silc.c:1948 -#: ../libpurple/protocols/silc10/silc.c:1667 msgid "" "invite <channel> [-|+]<nick>: invite nick or add/remove from " "channel invite list" @@ -12455,45 +8766,29 @@ "invite <kanava> [-|+]<nimi>: Kutsu käyttäjä tai lisää/poista " "kanavan kutsulistalta" -#: ../libpurple/protocols/silc/silc.c:1952 -#: ../libpurple/protocols/silc10/silc.c:1671 msgid "kick <channel> <nick> [comment]: Kick client from channel" msgstr "" "kick <kanava> <nimi> [kommentti]: Poista käyttäjä kanavalta" -#: ../libpurple/protocols/silc/silc.c:1956 -#: ../libpurple/protocols/silc10/silc.c:1675 msgid "info [server]: View server administrative details" msgstr "info [palvelin]: Näytä palvelimen ylläpidolliset yksityiskohdat" -#: ../libpurple/protocols/silc/silc.c:1960 -#: ../libpurple/protocols/silc10/silc.c:1679 msgid "ban [<channel> +|-<nick>]: Ban client from channel" msgstr "ban [%lt;kanava%gt; +|-<nimi>]: Kiellä käyttäjä kanavalta" -#: ../libpurple/protocols/silc/silc.c:1964 -#: ../libpurple/protocols/silc10/silc.c:1683 msgid "getkey <nick|server>: Retrieve client's or server's public key" msgstr "" "getkey <nimi|palvelin>: Hae käyttäjän tai palvelimen julkinen avain" -#: ../libpurple/protocols/silc/silc.c:1968 -#: ../libpurple/protocols/silc10/silc.c:1687 msgid "stats: View server and network statistics" msgstr "stats: Näytä palvelimen ja verkon tilastot" -#: ../libpurple/protocols/silc/silc.c:1972 -#: ../libpurple/protocols/silc10/silc.c:1691 msgid "ping: Send PING to the connected server" msgstr "ping: Lähetä PING palvelimelle, johon ollaan yhteydessä" -#: ../libpurple/protocols/silc/silc.c:1977 -#: ../libpurple/protocols/silc10/silc.c:1696 msgid "users <channel>: List users in channel" msgstr "users <kanava>: Näytä käyttäjät kanavalla" -#: ../libpurple/protocols/silc/silc.c:1981 -#: ../libpurple/protocols/silc10/silc.c:1700 msgid "" "names [-count|-ops|-halfops|-voices|-normal] <channel(s)>: List " "specific users in channel(s)" @@ -12510,141 +8805,91 @@ #. *< name #. *< version #. * summary -#: ../libpurple/protocols/silc/silc.c:2092 -#: ../libpurple/protocols/silc10/silc.c:1825 msgid "SILC Protocol Plugin" msgstr "SILC-yhteyskäytäntöliitännäinen" #. * description -#: ../libpurple/protocols/silc/silc.c:2094 -#: ../libpurple/protocols/silc10/silc.c:1827 msgid "Secure Internet Live Conferencing (SILC) Protocol" msgstr "Secure Internet Live Conferencing (SILC) -yhteyskäytäntö" -#: ../libpurple/protocols/silc/silc.c:2135 -#: ../libpurple/protocols/silc10/silc.c:1859 ../pidgin/gtkprefs.c:2150 msgid "Network" msgstr "Verkko" -#: ../libpurple/protocols/silc/silc.c:2146 -#: ../libpurple/protocols/silc10/silc.c:1870 msgid "Public Key file" msgstr "Julkinen avaintiedosto" -#: ../libpurple/protocols/silc/silc.c:2150 -#: ../libpurple/protocols/silc10/silc.c:1874 msgid "Private Key file" msgstr "Yksityinen avaintiedosto" -#: ../libpurple/protocols/silc/silc.c:2160 -#: ../libpurple/protocols/silc10/silc.c:1884 msgid "Cipher" msgstr "Salaus" -#: ../libpurple/protocols/silc/silc.c:2170 -#: ../libpurple/protocols/silc10/silc.c:1894 msgid "HMAC" msgstr "HMAC" -#: ../libpurple/protocols/silc/silc.c:2173 msgid "Use Perfect Forward Secrecy" msgstr "Käytä täydellistä jatkosalaisuutta (PFS)" -#: ../libpurple/protocols/silc/silc.c:2177 -#: ../libpurple/protocols/silc10/silc.c:1897 msgid "Public key authentication" msgstr "Julkisella avaimella todentaminen" -#: ../libpurple/protocols/silc/silc.c:2180 -#: ../libpurple/protocols/silc10/silc.c:1900 msgid "Block IMs without Key Exchange" msgstr "Estä pikaviestit ilman avaintenvaihtoa" -#: ../libpurple/protocols/silc/silc.c:2183 -#: ../libpurple/protocols/silc10/silc.c:1903 msgid "Block messages to whiteboard" msgstr "Estä viestit kirjoitustaululle" -#: ../libpurple/protocols/silc/silc.c:2186 -#: ../libpurple/protocols/silc10/silc.c:1906 msgid "Automatically open whiteboard" msgstr "Avaa kirjoitustaulu automaattisesti" -#: ../libpurple/protocols/silc/silc.c:2189 -#: ../libpurple/protocols/silc10/silc.c:1909 msgid "Digitally sign and verify all messages" msgstr "Allekirjoita ja tarkista kaikki viestit digitaalisesti" -#: ../libpurple/protocols/silc/util.c:207 -#: ../libpurple/protocols/silc/util.c:250 -#: ../libpurple/protocols/silc10/util.c:207 -#: ../libpurple/protocols/silc10/util.c:247 msgid "Creating SILC key pair..." msgstr "Luodaan SILC-avainpari..." -#: ../libpurple/protocols/silc/util.c:216 -#: ../libpurple/protocols/silc/util.c:259 msgid "Cannot create SILC key pair\n" msgstr "SILC-avainparia ei voi luoda\n" #. Hint for translators: Please check the tabulator width here and in #. the next strings (short strings: 2 tabs, longer strings 1 tab, #. sum: 3 tabs or 24 characters) -#: ../libpurple/protocols/silc/util.c:363 -#: ../libpurple/protocols/silc10/util.c:355 #, c-format msgid "Real Name: \t%s\n" msgstr "Oikea nimi: \t%s\n" -#: ../libpurple/protocols/silc/util.c:365 -#: ../libpurple/protocols/silc10/util.c:357 #, c-format msgid "User Name: \t%s\n" msgstr "Käyttäjänimi: \t%s\n" -#: ../libpurple/protocols/silc/util.c:367 -#: ../libpurple/protocols/silc10/util.c:359 #, c-format msgid "Email: \t\t%s\n" msgstr "Sähköposti: \t\t%s\n" -#: ../libpurple/protocols/silc/util.c:369 -#: ../libpurple/protocols/silc10/util.c:361 #, c-format msgid "Host Name: \t%s\n" msgstr "Palvelin: \t%s\n" -#: ../libpurple/protocols/silc/util.c:371 -#: ../libpurple/protocols/silc10/util.c:363 #, c-format msgid "Organization: \t%s\n" msgstr "Organisaatio: \t%s\n" -#: ../libpurple/protocols/silc/util.c:373 -#: ../libpurple/protocols/silc10/util.c:365 #, c-format msgid "Country: \t%s\n" msgstr "Maa: \t%s\n" -#: ../libpurple/protocols/silc/util.c:374 -#: ../libpurple/protocols/silc10/util.c:366 #, c-format msgid "Algorithm: \t%s\n" msgstr "Algoritmi: \t%s\n" -#: ../libpurple/protocols/silc/util.c:375 -#: ../libpurple/protocols/silc10/util.c:367 #, c-format msgid "Key Length: \t%d bits\n" msgstr "Avaimen pituus: \t%d bittiä\n" -#: ../libpurple/protocols/silc/util.c:377 #, c-format msgid "Version: \t%s\n" msgstr "Versio: \t%s\n" -#: ../libpurple/protocols/silc/util.c:379 -#: ../libpurple/protocols/silc10/util.c:369 #, c-format msgid "" "Public Key Fingerprint:\n" @@ -12655,8 +8900,6 @@ "%s\n" "\n" -#: ../libpurple/protocols/silc/util.c:380 -#: ../libpurple/protocols/silc10/util.c:370 #, c-format msgid "" "Public Key Babbleprint:\n" @@ -12665,45 +8908,29 @@ "Julkisen avaimen babbleprint\n" "%s" -#: ../libpurple/protocols/silc/util.c:382 -#: ../libpurple/protocols/silc/util.c:383 -#: ../libpurple/protocols/silc10/util.c:374 -#: ../libpurple/protocols/silc10/util.c:375 msgid "Public Key Information" msgstr "Julkisen avaimen tiedot" -#: ../libpurple/protocols/silc/util.c:565 -#: ../libpurple/protocols/silc10/util.c:559 msgid "Paging" msgstr "Kaukohaku" -#: ../libpurple/protocols/silc/util.c:571 -#: ../libpurple/protocols/silc10/util.c:565 msgid "Video Conferencing" msgstr "Videoneuvottelu" -#: ../libpurple/protocols/silc/util.c:589 -#: ../libpurple/protocols/silc10/util.c:584 msgid "Computer" msgstr "Tietokone" -#: ../libpurple/protocols/silc/util.c:593 -#: ../libpurple/protocols/silc10/util.c:588 msgid "PDA" msgstr "PDA" -#: ../libpurple/protocols/silc/util.c:595 -#: ../libpurple/protocols/silc10/util.c:590 msgid "Terminal" msgstr "Pääte" -#: ../libpurple/protocols/silc/wb.c:288 ../libpurple/protocols/silc10/wb.c:287 #, c-format msgid "%s sent message to whiteboard. Would you like to open the whiteboard?" msgstr "" "%s lähetti viestin kirjoitustaululle. Haluatko aukaista kirjoitustaulun?" -#: ../libpurple/protocols/silc/wb.c:292 ../libpurple/protocols/silc10/wb.c:291 #, c-format msgid "" "%s sent message to whiteboard on %s channel. Would you like to open the " @@ -12712,106 +8939,74 @@ "%s lähetti viestin kirjoitustaululle kanavalla %s. Haluatko aukaista " "kirjoitustaulun?" -#: ../libpurple/protocols/silc/wb.c:306 ../libpurple/protocols/silc10/wb.c:305 msgid "Whiteboard" msgstr "Kirjoitustaulu" -#: ../libpurple/protocols/silc10/ops.c:1559 msgid "No server statistics available" msgstr "Palvelimen tilastoja ei saatavilla." -#: ../libpurple/protocols/silc10/ops.c:1937 #, c-format msgid "Failure: Version mismatch, upgrade your client" msgstr "Virhe: Versioepäyhteensopivuus, päivitä ohjelmasi" -#: ../libpurple/protocols/silc10/ops.c:1940 #, c-format msgid "Failure: Remote does not trust/support your public key" msgstr "Virhe: Etäkone ei luota/tue julkista avaintasi" -#: ../libpurple/protocols/silc10/ops.c:1943 #, c-format msgid "Failure: Remote does not support proposed KE group" msgstr "Virhe: Etäkone ei tue ehdotettua KE-ryhmää" -#: ../libpurple/protocols/silc10/ops.c:1946 #, c-format msgid "Failure: Remote does not support proposed cipher" msgstr "Virhe: Etäkone ei tue ehdotettua salausta" -#: ../libpurple/protocols/silc10/ops.c:1949 #, c-format msgid "Failure: Remote does not support proposed PKCS" msgstr "Virhe: Etäkone ei tuo ehdotettua PKCS:aa" -#: ../libpurple/protocols/silc10/ops.c:1952 #, c-format msgid "Failure: Remote does not support proposed hash function" msgstr "Virhe: Etäkone ei tue ehdotettua tiivistysfunktiota" -#: ../libpurple/protocols/silc10/ops.c:1955 #, c-format msgid "Failure: Remote does not support proposed HMAC" msgstr "Virhe: Etäkone ei tue ehdotettua HMAC:ia" -#: ../libpurple/protocols/silc10/ops.c:1957 #, c-format msgid "Failure: Incorrect signature" msgstr "Virhe: Virheellinen allekirjoitus" -#: ../libpurple/protocols/silc10/ops.c:1959 #, c-format msgid "Failure: Invalid cookie" msgstr "Virhe: Virheellinen eväste" -#: ../libpurple/protocols/silc10/ops.c:1970 #, c-format msgid "Failure: Authentication failed" msgstr "Virhe: Todennus epäonnistui" -#: ../libpurple/protocols/silc10/silc.c:185 msgid "Cannot initialize SILC Client connection" msgstr "SILC-asiakasyhteyttä ei voi alustaa" -#: ../libpurple/protocols/silc10/silc.c:294 msgid "John Noname" msgstr "Pertti Perusnimi" -#: ../libpurple/protocols/silc10/silc.c:338 #, c-format msgid "Could not load SILC key pair: %s" msgstr "SILC-avainparia ei voi ladata: %s" -#: ../libpurple/protocols/simple/simple.c:419 msgid "Could not write" msgstr "Kirjoittaminen ei onnistu" -#: ../libpurple/protocols/simple/simple.c:443 -#: ../libpurple/protocols/simple/simple.c:1713 msgid "Could not connect" msgstr "Yhdistäminen ei onnistu" -#: ../libpurple/protocols/simple/simple.c:1127 msgid "Unknown server response." msgstr "Tuntematon palvelinvastaus." -#: ../libpurple/protocols/simple/simple.c:1749 -#: ../libpurple/protocols/simple/simple.c:1795 -#: ../libpurple/protocols/simple/simple.c:1810 -#: ../libpurple/protocols/simple/simple.c:1865 msgid "Could not create listen socket" msgstr "Kuuntelupistokkeen luominen epäonnistui" -#: ../libpurple/protocols/simple/simple.c:1774 -msgid "Couldn't resolve host" -msgstr "Yhteyttä isäntään ei voi löytää" - -#: ../libpurple/protocols/simple/simple.c:1875 -msgid "Could not resolve hostname" -msgstr "Isäntänimeä ei voi selvittää" - -#: ../libpurple/protocols/simple/simple.c:1893 msgid "SIP usernames may not contain whitespaces or @ symbols" msgstr "SIP-käyttäjänimissä ei tule olla välilyöntejä tai @-merkkejä" @@ -12823,170 +9018,135 @@ #. *< id #. *< name #. *< version -#: ../libpurple/protocols/simple/simple.c:2073 msgid "SIP/SIMPLE Protocol Plugin" msgstr "SIP/SIMPLE-yhteyskäytäntöliitännäinen" #. * summary -#: ../libpurple/protocols/simple/simple.c:2074 msgid "The SIP/SIMPLE Protocol Plugin" msgstr "SIP/SIMPLE-yhteyskäytäntöliitännäinen" -#: ../libpurple/protocols/simple/simple.c:2102 msgid "Publish status (note: everyone may watch you)" msgstr "Julkaise tilasi (huom: kuka tahansa voi seurata tilaasi)" -#: ../libpurple/protocols/simple/simple.c:2108 msgid "Use UDP" msgstr "Käytä UDP:tä" -#: ../libpurple/protocols/simple/simple.c:2110 msgid "Use proxy" msgstr "Käytä välipalvelinta" -#: ../libpurple/protocols/simple/simple.c:2112 msgid "Proxy" msgstr "Välipalvelin" -#: ../libpurple/protocols/simple/simple.c:2114 msgid "Auth User" msgstr "Todennus/käyttäjä" -#: ../libpurple/protocols/simple/simple.c:2116 msgid "Auth Domain" msgstr "Todennus/verkkoalue" -#: ../libpurple/protocols/toc/toc.c:139 #, c-format msgid "Looking up %s" msgstr "Etsitään %s" -#: ../libpurple/protocols/toc/toc.c:148 #, c-format msgid "Connect to %s failed" msgstr "%s: yhteyden muodostaminen epäonnistui" -#: ../libpurple/protocols/toc/toc.c:201 #, c-format msgid "Signon: %s" msgstr "Kirjautuminen: %s" -#: ../libpurple/protocols/toc/toc.c:488 #, c-format msgid "Unable to write file %s." msgstr "Ei kyetty kirjoittamaan tiedostoa %s." -#: ../libpurple/protocols/toc/toc.c:491 #, c-format msgid "Unable to read file %s." msgstr "Ei kyetty lukemaan tiedostoa %s." -#: ../libpurple/protocols/toc/toc.c:494 #, c-format msgid "Message too long, last %s bytes truncated." msgstr "Viesti on liian pitkä, viimeiset %s tavua katkaistu." -#: ../libpurple/protocols/toc/toc.c:497 #, c-format msgid "%s not currently logged in." msgstr "%s ei ole parhaillaan kirjautuneena sisään." -#: ../libpurple/protocols/toc/toc.c:500 #, c-format msgid "Warning of %s not allowed." msgstr "%s:n varoittaminen ei ole sallittua." -#: ../libpurple/protocols/toc/toc.c:503 #, c-format msgid "A message has been dropped, you are exceeding the server speed limit." msgstr "Viesti on hylätty, ylität palvelimen nopeusrajan." -#: ../libpurple/protocols/toc/toc.c:506 #, c-format msgid "Chat in %s is not available." msgstr "Ryhmäkeskustelu %s ei ole käytettävissä." -#: ../libpurple/protocols/toc/toc.c:509 #, c-format msgid "You are sending messages too fast to %s." msgstr "Lähetät viestejä %s:lle liian nopeasti." -#: ../libpurple/protocols/toc/toc.c:512 #, c-format msgid "You missed an IM from %s because it was too big." msgstr "Et saanut %s:n pikaviestiä koska se oli liian suuri." -#: ../libpurple/protocols/toc/toc.c:515 #, c-format msgid "You missed an IM from %s because it was sent too fast." msgstr "Et saanut %s:n pikaviestiä koska se lähetettiin liian nopeasti." -#: ../libpurple/protocols/toc/toc.c:518 #, c-format msgid "Failure." msgstr "Epäonnistuminen." -#: ../libpurple/protocols/toc/toc.c:521 #, c-format msgid "Too many matches." msgstr "Liian monta tulosta." -#: ../libpurple/protocols/toc/toc.c:524 #, c-format msgid "Need more qualifiers." msgstr "Tarvitaan lisää määritteitä." -#: ../libpurple/protocols/toc/toc.c:527 #, c-format msgid "Dir service temporarily unavailable." msgstr "Hakemistopalvelu ei tilapäisesti ole käytettävissä." -#: ../libpurple/protocols/toc/toc.c:530 #, c-format msgid "Email lookup restricted." msgstr "Sähköpostin katsominen rajoitettu." -#: ../libpurple/protocols/toc/toc.c:533 #, c-format msgid "Keyword ignored." msgstr "Avainsanasta ei välitetty." -#: ../libpurple/protocols/toc/toc.c:536 #, c-format msgid "No keywords." msgstr "Ei avainsanoja." -#: ../libpurple/protocols/toc/toc.c:539 #, c-format msgid "User has no directory information." msgstr "Käyttäjällä ei ole hakemistotietoja." -#: ../libpurple/protocols/toc/toc.c:543 #, c-format msgid "Country not supported." msgstr "Maa ei tuettu." -#: ../libpurple/protocols/toc/toc.c:546 #, c-format msgid "Failure unknown: %s." msgstr "Tunnistamaton epäonnistuminen: %s." -#: ../libpurple/protocols/toc/toc.c:549 #, c-format msgid "Incorrect username or password." msgstr "Virheellinen käyttäjänimi tai salasana." -#: ../libpurple/protocols/toc/toc.c:552 #, c-format msgid "The service is temporarily unavailable." msgstr "Palvelu ei tilapäisesti ole käytössä." -#: ../libpurple/protocols/toc/toc.c:555 #, c-format msgid "Your warning level is currently too high to log in." msgstr "Varoitustasosi on parhaillaan liian korkea kirjautuaksesi sisään." -#: ../libpurple/protocols/toc/toc.c:558 #, c-format msgid "" "You have been connecting and disconnecting too frequently. Wait ten minutes " @@ -12996,79 +9156,61 @@ "ja yritä uudestaan. Jos jatkat yrittämistä, joudut odottamaan vielä " "pidempään." -#: ../libpurple/protocols/toc/toc.c:560 #, c-format msgid "An unknown signon error has occurred: %s." msgstr "Tuntematon sisäänkirjautumisvirhe esiintyi: %s." -#: ../libpurple/protocols/toc/toc.c:563 #, c-format msgid "An unknown error, %d, has occurred. Info: %s" msgstr "Tuntematon virhe, %d, esiintyi. Tiedot: %s" -#: ../libpurple/protocols/toc/toc.c:590 msgid "Invalid Groupname" msgstr "Epäkelpo ryhmän nimi" -#: ../libpurple/protocols/toc/toc.c:674 msgid "Connection Closed" msgstr "Yhteys suljettu" -#: ../libpurple/protocols/toc/toc.c:714 msgid "Waiting for reply..." msgstr "Odotetaan vastausta..." -#: ../libpurple/protocols/toc/toc.c:792 msgid "TOC has come back from its pause. You may now send messages again." msgstr "TOC on palannut tauoltaan. Voit lähettää viestejä jälleen." -#: ../libpurple/protocols/toc/toc.c:995 msgid "Password Change Successful" msgstr "Salasanan vaihto onnistui" -#: ../libpurple/protocols/toc/toc.c:1366 ../pidgin/gtkblist.c:6847 msgid "_Group:" msgstr "_Ryhmä:" -#: ../libpurple/protocols/toc/toc.c:1535 msgid "Get Dir Info" msgstr "Hae hakemistotiedot" -#: ../libpurple/protocols/toc/toc.c:1675 msgid "Set Dir Info" msgstr "Aseta hakemistotiedot" -#: ../libpurple/protocols/toc/toc.c:1797 #, c-format msgid "Could not open %s for writing!" msgstr "%s:n avaaminen kirjoitusta varten epäonnistui!" -#: ../libpurple/protocols/toc/toc.c:1833 msgid "File transfer failed; other side probably canceled." msgstr "" "Tiedostonsiirto epäonnistui. Toinen osapuoli luultavasti katkaisi siirron." -#: ../libpurple/protocols/toc/toc.c:1878 ../libpurple/protocols/toc/toc.c:1918 -#: ../libpurple/protocols/toc/toc.c:2042 ../libpurple/protocols/toc/toc.c:2130 msgid "Could not connect for transfer." msgstr "Yhteyttä siirtoa varten ei voi muodostaa." -#: ../libpurple/protocols/toc/toc.c:2075 msgid "Could not write file header. The file will not be transferred." msgstr "Tiedosto-otsikkoa ei voi kirjoittaa. Tiedostoa ei siirretä." -#: ../libpurple/protocols/toc/toc.c:2175 msgid "Save As..." msgstr "Tallenna nimellä..." -#: ../libpurple/protocols/toc/toc.c:2209 #, c-format msgid "%s requests %s to accept %d file: %s (%.2f %s)%s%s" msgid_plural "%s requests %s to accept %d files: %s (%.2f %s)%s%s" msgstr[0] "%s pyytää %s hyväksymään %d tiedoston: %s (%.2f %s)%s%s" msgstr[1] "%s pyytää %s hyväksymään %d tiedostot: %s (%.2f %s)%s%s" -#: ../libpurple/protocols/toc/toc.c:2216 #, c-format msgid "%s requests you to send them a file" msgstr "%s pyytää sinua lähettämään hänelle tiedoston" @@ -13083,29 +9225,23 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/toc/toc.c:2306 ../libpurple/protocols/toc/toc.c:2308 msgid "TOC Protocol Plugin" msgstr "TOC-yhteyskäytäntöliitännäinen" -#: ../libpurple/protocols/yahoo/yahoo.c:745 #, c-format msgid "%s has sent you a webcam invite, which is not yet supported." msgstr "%s on lähettänyt webkamera-kutsun, mikä ei ole vielä tuettuna." -#: ../libpurple/protocols/yahoo/yahoo.c:803 msgid "Your Yahoo! message did not get sent." msgstr "Yahoo!-viestiäsi ei lähetetty." -#: ../libpurple/protocols/yahoo/yahoo.c:916 #, c-format msgid "Yahoo! system message for %s:" msgstr "Yahoo!-järjestelmäviesti käyttäjälle %s:" -#: ../libpurple/protocols/yahoo/yahoo.c:990 msgid "Authorization denied message:" msgstr "Valtuutuksen eväysviesti:" -#: ../libpurple/protocols/yahoo/yahoo.c:1008 #, c-format msgid "" "%s has (retroactively) denied your request to add them to your list for the " @@ -13114,17 +9250,14 @@ "Käyttäjä %s on (taannehtivasti) evännyt pyyntösi lisätä hänet tuttaviisi " "seuraavasta syystä: %s." -#: ../libpurple/protocols/yahoo/yahoo.c:1011 #, c-format msgid "%s has (retroactively) denied your request to add them to your list." msgstr "" "Käyttäjä %s on (taannehtivasti) evännyt pyyntösi lisätä hänet tuttaviisi." -#: ../libpurple/protocols/yahoo/yahoo.c:1013 msgid "Add buddy rejected" msgstr "Tuttavan lisääminen estetty" -#: ../libpurple/protocols/yahoo/yahoo.c:1997 #, c-format msgid "" "The Yahoo server has requested the use of an unrecognized authentication " @@ -13135,11 +9268,9 @@ "luultavasti mahdollista kirjautua Yahoo-palveluun tällä asiakasohjelmalla. " "Tarkista päivitykset osoitteesta: %s." -#: ../libpurple/protocols/yahoo/yahoo.c:2000 msgid "Failed Yahoo! Authentication" msgstr "Yahoo!:n todennus epäonnistui" -#: ../libpurple/protocols/yahoo/yahoo.c:2078 #, c-format msgid "" "You have tried to ignore %s, but the user is on your buddy list. Clicking " @@ -13149,51 +9280,36 @@ "Painaessasi \"Kyllä\" poistat hänet tuttavistasi eikä häneltä saapuneista " "viesteistä enää välitetä." -#: ../libpurple/protocols/yahoo/yahoo.c:2081 msgid "Ignore buddy?" msgstr "Jätä tuttava huomiotta?" -#: ../libpurple/protocols/yahoo/yahoo.c:2152 msgid "Your account is locked, please log in to the Yahoo! website." msgstr "Käyttäjätilisi on lukittu, kirjaudu sisään yahoo-websivustolta." -#: ../libpurple/protocols/yahoo/yahoo.c:2155 #, c-format msgid "Unknown error number %d. Logging into the Yahoo! website may fix this." msgstr "" "Tuntematon viesti numero %d. Kirjautumalla Yahoo! verkkosivuille saattaa " "korjata tämän." -#: ../libpurple/protocols/yahoo/yahoo.c:2208 #, c-format msgid "Could not add buddy %s to group %s to the server list on account %s." msgstr "" "Tuttavaa %s ei voi lisätä ryhmään %s palvelimen tuttavissa, tilillä %s." -#: ../libpurple/protocols/yahoo/yahoo.c:2211 msgid "Could not add buddy to server list" msgstr "Tuttavaa ei voi lisätä palvelimen tuttaviin" -#: ../libpurple/protocols/yahoo/yahoo.c:2333 #, c-format msgid "[ Audible %s/%s/%s.swf ] %s" msgstr "[ Ääniäinen %s/%s/%s.swf ] %s" -#: ../libpurple/protocols/yahoo/yahoo.c:2689 msgid "Received unexpected HTTP response from server." msgstr "Odottamaton HTTP-vastaus palvelimelta." -#: ../libpurple/protocols/yahoo/yahoo.c:2718 -#: ../libpurple/protocols/yahoo/yahoo.c:2906 -#: ../libpurple/protocols/yahoo/yahoo.c:3011 -#: ../libpurple/protocols/yahoo/yahoo.c:3022 -#: ../libpurple/protocols/yahoo/yahoochat.c:1525 -#: ../libpurple/protocols/yahoo/yahoochat.c:1595 -#: ../libpurple/protocols/yahoo/ycht.c:586 msgid "Connection problem" msgstr "Yhteysvirhe" -#: ../libpurple/protocols/yahoo/yahoo.c:2744 #, c-format msgid "" "Lost connection with %s:\n" @@ -13202,7 +9318,6 @@ "Yhteys palvelimeen %s katkesi:\n" "%s" -#: ../libpurple/protocols/yahoo/yahoo.c:2769 #, c-format msgid "" "Could not establish a connection with %s:\n" @@ -13211,103 +9326,72 @@ "Yhteyttä ei voi muodostaa palvelimeen %s:\n" "%s" -#: ../libpurple/protocols/yahoo/yahoo.c:3138 -#: ../libpurple/protocols/yahoo/yahoo.c:3833 msgid "Not at Home" msgstr "Poissa kotoa" -#: ../libpurple/protocols/yahoo/yahoo.c:3140 -#: ../libpurple/protocols/yahoo/yahoo.c:3836 msgid "Not at Desk" msgstr "Poissa työpöydältä" -#: ../libpurple/protocols/yahoo/yahoo.c:3142 -#: ../libpurple/protocols/yahoo/yahoo.c:3839 msgid "Not in Office" msgstr "Poissa toimistolta" -#: ../libpurple/protocols/yahoo/yahoo.c:3146 -#: ../libpurple/protocols/yahoo/yahoo.c:3845 msgid "On Vacation" msgstr "Lomalla" -#: ../libpurple/protocols/yahoo/yahoo.c:3150 -#: ../libpurple/protocols/yahoo/yahoo.c:3851 msgid "Stepped Out" msgstr "Piipahdan ulkona" -#: ../libpurple/protocols/yahoo/yahoo.c:3243 -#: ../libpurple/protocols/yahoo/yahoo.c:3273 msgid "Not on server list" msgstr "Ei palvelimen tuttavissa" -#: ../libpurple/protocols/yahoo/yahoo.c:3290 -#: ../libpurple/protocols/yahoo/yahoo.c:3348 msgid "Appear Online" msgstr "Näytä linjoilla olevalta" -#: ../libpurple/protocols/yahoo/yahoo.c:3293 -#: ../libpurple/protocols/yahoo/yahoo.c:3369 msgid "Appear Permanently Offline" msgstr "Näytä pysyvästi poissa linjoilta olevalta" -#: ../libpurple/protocols/yahoo/yahoo.c:3311 msgid "Presence" msgstr "Läsnäolo" -#: ../libpurple/protocols/yahoo/yahoo.c:3354 msgid "Appear Offline" msgstr "Näytä poissa linjoilta olevalta" -#: ../libpurple/protocols/yahoo/yahoo.c:3363 msgid "Don't Appear Permanently Offline" msgstr "Älä näytä pysyvästi poissa linjoilta olevalta" -#: ../libpurple/protocols/yahoo/yahoo.c:3411 msgid "Join in Chat" msgstr "Liity ryhmäkeskusteluun" -#: ../libpurple/protocols/yahoo/yahoo.c:3417 msgid "Initiate Conference" msgstr "Aloita neuvottelu" -#: ../libpurple/protocols/yahoo/yahoo.c:3445 msgid "Presence Settings" msgstr "Läsnäoloasetukset" -#: ../libpurple/protocols/yahoo/yahoo.c:3451 msgid "Start Doodling" msgstr "Aloita piirtely" -#: ../libpurple/protocols/yahoo/yahoo.c:3561 msgid "Activate which ID?" msgstr "Mikä tunnus (ID) aktivoidaan?" -#: ../libpurple/protocols/yahoo/yahoo.c:3572 msgid "Join whom in chat?" msgstr "Kenen seuraan liitytään ryhmäkeskustelussa?" -#: ../libpurple/protocols/yahoo/yahoo.c:3584 msgid "Activate ID..." msgstr "Aktivoi tunnus (ID)..." -#: ../libpurple/protocols/yahoo/yahoo.c:3588 msgid "Join User in Chat..." msgstr "Liity käyttäjän seuraan ryhmäkeskustelussa..." -#: ../libpurple/protocols/yahoo/yahoo.c:3593 msgid "Open Inbox" msgstr "Avaa saapuneet-kansio" -#: ../libpurple/protocols/yahoo/yahoo.c:4182 msgid "join <room>: Join a chat room on the Yahoo network" msgstr "join: <huone>: Liity keskusteluhuoneeseen Yahoo-verkossa" -#: ../libpurple/protocols/yahoo/yahoo.c:4187 msgid "list: List rooms on the Yahoo network" msgstr "list: Listaa kanavat Yahoo-verkossa" -#: ../libpurple/protocols/yahoo/yahoo.c:4195 msgid "doodle: Request user to start a Doodle session" msgstr "doodle: Pyydä käyttäjää aloittamaan piirtelyistunto" @@ -13321,92 +9405,64 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/yahoo/yahoo.c:4404 -#: ../libpurple/protocols/yahoo/yahoo.c:4406 msgid "Yahoo Protocol Plugin" msgstr "Yahoo-yhteyskäytäntöliitännäinen" -#: ../libpurple/protocols/yahoo/yahoo.c:4429 msgid "Yahoo Japan" msgstr "Yahoo Japani" -#: ../libpurple/protocols/yahoo/yahoo.c:4432 msgid "Pager server" msgstr "Hakulaitepalvelin" -#: ../libpurple/protocols/yahoo/yahoo.c:4435 msgid "Japan Pager server" msgstr "Hakulaitepalvelin (Japani)" -#: ../libpurple/protocols/yahoo/yahoo.c:4438 msgid "Pager port" msgstr "Hakulaiteportti" -#: ../libpurple/protocols/yahoo/yahoo.c:4441 msgid "File transfer server" msgstr "Tiedostonsiirtopalvelin" -#: ../libpurple/protocols/yahoo/yahoo.c:4444 msgid "Japan file transfer server" msgstr "Tiedostonsiirtopalvelin (Japani)" -#: ../libpurple/protocols/yahoo/yahoo.c:4447 msgid "File transfer port" msgstr "Tiedostonsiirtoportti" -#: ../libpurple/protocols/yahoo/yahoo.c:4450 msgid "Chat room locale" msgstr "Keskusteluhuoneen paikallisasetus" -#: ../libpurple/protocols/yahoo/yahoo.c:4453 msgid "Ignore conference and chatroom invitations" msgstr "Jätä konferenssi- ja keskusteluhuonekutsut huomiotta" -#: ../libpurple/protocols/yahoo/yahoo.c:4461 msgid "Chat room list URL" msgstr "Keskusteluhuoneluettelon URL" -#: ../libpurple/protocols/yahoo/yahoo.c:4464 msgid "Yahoo Chat server" msgstr "Yahoo-ryhmäkeskustelupalvelin" -#: ../libpurple/protocols/yahoo/yahoo.c:4467 msgid "Yahoo Chat port" msgstr "Yahoo-ryhmäkeskustelupalvelimen portti" #. Write a local message to this conversation showing that a request for a #. * Doodle session has been made #. -#: ../libpurple/protocols/yahoo/yahoo_doodle.c:98 msgid "Sent Doodle request." msgstr "Lähetä piirtelypyyntö (doodle)." -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:319 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:328 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:337 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1111 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1515 msgid "Unable to establish file descriptor." msgstr "Ei kyetty muodostamaan tiedostokahvaa." -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1410 #, c-format msgid "%s is trying to send you a group of %d files.\n" msgstr "%s tarjoaa %d tiedoston tiedostoryhmää.\n" -#: ../libpurple/protocols/yahoo/yahoo_packet.c:307 -msgid "Write Error" -msgstr "Virhe kirjoituksessa" - -#: ../libpurple/protocols/yahoo/yahoo_profile.c:797 msgid "Yahoo! Japan Profile" msgstr "Yahoo! Japan -profiili" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:798 msgid "Yahoo! Profile" msgstr "Yahoo!-profiili" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:838 msgid "" "Sorry, profiles marked as containing adult content are not supported at this " "time." @@ -13414,7 +9470,6 @@ "Tällä hetkellä profiileja jotka on merkitty sisältämään aikuisviihdettä, ei " "tueta." -#: ../libpurple/protocols/yahoo/yahoo_profile.c:840 msgid "" "If you wish to view this profile, you will need to visit this link in your " "web browser:" @@ -13422,47 +9477,34 @@ "Jos haluat katsoa tätä profiilia, sinun tulee seurata tätä linkkiä " "selaimessasi:" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1040 msgid "Yahoo! ID" msgstr "Yahoo! ID" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1116 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1120 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1124 msgid "Hobbies" msgstr "Harrastukset" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1134 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1138 msgid "Latest News" msgstr "Uutiset" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1159 msgid "Home Page" msgstr "Kotisivu" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1174 msgid "Cool Link 1" msgstr "Linkki 1" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1179 msgid "Cool Link 2" msgstr "Linkki 2" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1183 msgid "Cool Link 3" msgstr "Linkki 3" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1197 msgid "Last Update" msgstr "Edellinen päivitys" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1206 #, c-format msgid "User information for %s unavailable" msgstr "%s:n käyttäjätiedot eivät ole saatavilla" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1212 msgid "" "Sorry, this profile seems to be in a language or format that is not " "supported at this time." @@ -13470,7 +9512,6 @@ "Tämä profiili näyttää käyttävän kieltä tai muotoa jota ei tueta tällä " "hetkellä." -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1228 msgid "" "Could not retrieve the user's profile. This most likely is a temporary " "server-side problem. Please try again later." @@ -13478,7 +9519,6 @@ "Käyttäjän profiilia ei voi hakea. Tämä on todennäköisesti väliaikainen " "palvelimen ongelma. Ole hyvä ja yritä myöhemmin uudestaan." -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1231 msgid "" "Could not retrieve the user's profile. This most likely means that the user " "does not exist; however, Yahoo! sometimes does fail to find a user's " @@ -13489,39 +9529,31 @@ "profiilin. Jos olet varma että käyttäjä on olemassa, yritä myöhemmin " "uudelleen." -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1238 msgid "The user's profile is empty." msgstr "Käyttäjän profiili on tyhjä." -#: ../libpurple/protocols/yahoo/yahoochat.c:222 #, c-format msgid "%s declined your conference invitation to room \"%s\" because \"%s\"." msgstr "%s kieltäytyi kutsustasi huoneeseen \"%s\" koska \"%s\"." -#: ../libpurple/protocols/yahoo/yahoochat.c:224 msgid "Invitation Rejected" msgstr "Kutsusta kieltäydytty" -#: ../libpurple/protocols/yahoo/yahoochat.c:443 msgid "Failed to join chat" msgstr "Ryhmäkeskusteluun liittyminen epäonnistui" #. -6 -#: ../libpurple/protocols/yahoo/yahoochat.c:446 msgid "Unknown room" msgstr "Tuntematon huone" #. -15 -#: ../libpurple/protocols/yahoo/yahoochat.c:449 msgid "Maybe the room is full" msgstr "Ehkä huone on täynnä" #. -35 -#: ../libpurple/protocols/yahoo/yahoochat.c:452 msgid "Not available" msgstr "Ei olemassa" -#: ../libpurple/protocols/yahoo/yahoochat.c:456 msgid "" "Unknown error. You may need to logout and wait five minutes before being " "able to rejoin a chatroom" @@ -13529,46 +9561,34 @@ "Tuntematon virhe. Voi olla että sinun pitää kirjautua ulos ja odottaa viisi " "minuuttia ennen uudelleenliittymistä keskusteluhuoneeseen" -#: ../libpurple/protocols/yahoo/yahoochat.c:539 #, c-format msgid "You are now chatting in %s." msgstr "Olet nyt keskustelemassa huoneessa %s" -#: ../libpurple/protocols/yahoo/yahoochat.c:728 msgid "Failed to join buddy in chat" msgstr "Liittyminen tuttavan seuraan keskusteluhuoneeseen epäonnistui" -#: ../libpurple/protocols/yahoo/yahoochat.c:729 msgid "Maybe they're not in a chat?" msgstr "Ehkä he eivät ole ryhmäkeskustelussa?" -#: ../libpurple/protocols/yahoo/yahoochat.c:1425 -#: ../libpurple/protocols/yahoo/yahoochat.c:1451 msgid "Fetching the room list failed." msgstr "Huoneluettelon haku epäonnistui." -#: ../libpurple/protocols/yahoo/yahoochat.c:1511 msgid "Voices" msgstr "Äänet" -#: ../libpurple/protocols/yahoo/yahoochat.c:1514 msgid "Webcams" msgstr "Web-kamerat" -#: ../libpurple/protocols/yahoo/yahoochat.c:1525 -#: ../libpurple/protocols/yahoo/yahoochat.c:1595 msgid "Unable to fetch room list." msgstr "Huoneluetteloa ei voi hakea." -#: ../libpurple/protocols/yahoo/yahoochat.c:1588 msgid "User Rooms" msgstr "Käyttäjän huoneet" -#: ../libpurple/protocols/yahoo/ycht.c:457 msgid "Connection problem with the YCHT server." msgstr "Yhteysvirhe YCHT-palvelimen kanssa" -#: ../libpurple/protocols/yahoo/ycht.c:476 #, c-format msgid "" "Lost connection with server\n" @@ -13577,7 +9597,6 @@ "Yhteys palvelimeen katkesi\n" "%s" -#: ../libpurple/protocols/zephyr/zephyr.c:358 msgid "" "(There was an error converting this message.\t Check the 'Encoding' option " "in the Account Editor)" @@ -13585,77 +9604,58 @@ "(Tämän viestin muunnoksessa oli virhe.\t Tarkista \"Merkistö\"-valinta tilin " "muokkausikkunasta)" -#: ../libpurple/protocols/zephyr/zephyr.c:756 #, c-format msgid "Unable to send to chat %s,%s,%s" msgstr "Ryhmäkeskusteluun ei voi lähettää %s,%s,%s" -#: ../libpurple/protocols/zephyr/zephyr.c:795 -#: ../libpurple/protocols/zephyr/zephyr.c:1170 msgid "Hidden or not logged-in" msgstr "Näkymättömänä tai poissa linjoilta" -#: ../libpurple/protocols/zephyr/zephyr.c:801 -#: ../libpurple/protocols/zephyr/zephyr.c:1172 #, c-format msgid "<br>At %s since %s" msgstr "<br>Paikassa: %s saapunut: %s" -#: ../libpurple/protocols/zephyr/zephyr.c:1510 -#: ../libpurple/protocols/zephyr/zephyr.c:1511 msgid "Anyone" msgstr "Kuka tahansa" -#: ../libpurple/protocols/zephyr/zephyr.c:2369 msgid "_Class:" msgstr "_Luokka:" -#: ../libpurple/protocols/zephyr/zephyr.c:2375 msgid "_Instance:" msgstr "_Ilmentymä:" -#: ../libpurple/protocols/zephyr/zephyr.c:2381 msgid "_Recipient:" msgstr "_Vastaanottaja:" -#: ../libpurple/protocols/zephyr/zephyr.c:2392 #, c-format msgid "Attempt to subscribe to %s,%s,%s failed" msgstr "Yritys tilata %s,%s,%s epäonnistui" -#: ../libpurple/protocols/zephyr/zephyr.c:2705 msgid "zlocate <nick>: Locate user" msgstr "zlocate <nimi>: Paikanna käyttäjä" -#: ../libpurple/protocols/zephyr/zephyr.c:2710 msgid "zl <nick>: Locate user" msgstr "zl <nimi>: Paikanna käyttäjä" -#: ../libpurple/protocols/zephyr/zephyr.c:2715 msgid "instance <instance>: Set the instance to be used on this class" msgstr "" "instance <ilmentymä>: Aseta ilmentymä jota käytetään tässä luokassa" -#: ../libpurple/protocols/zephyr/zephyr.c:2720 msgid "inst <instance>: Set the instance to be used on this class" msgstr "inst <ilmentymä>: Aseta ilmentymä jota käytetään tässä luokassa" -#: ../libpurple/protocols/zephyr/zephyr.c:2725 msgid "topic <instance>: Set the instance to be used on this class" msgstr "topic <ilmentymä>: Aseta ilmentymä jota käytetään tässä luokassa" -#: ../libpurple/protocols/zephyr/zephyr.c:2731 msgid "sub <class> <instance> <recipient>: Join a new chat" msgstr "" "sub <luokka> <ilmentymä> <vastaanottaja>: Liity uuteen " "ryhmäkeskusteluun" -#: ../libpurple/protocols/zephyr/zephyr.c:2736 msgid "" "zi <instance>: Send a message to <message,<i>instance</i>,*>" msgstr "zi <ilmentymä>: Lähetä viesti <viesti,<i>ilmentymä</i>,*>" -#: ../libpurple/protocols/zephyr/zephyr.c:2742 msgid "" "zci <class> <instance>: Send a message to <<i>class</i>," "<i>instance</i>,*>" @@ -13663,7 +9663,6 @@ "zci <luokka> <ilmentymä>: Lähetä viesti <<i>luokka</i>," "<i>ilmentymä</i>,*>" -#: ../libpurple/protocols/zephyr/zephyr.c:2748 msgid "" "zcir <class> <instance> <recipient>: Send a message to <" "<i>class</i>,<i>instance</i>,<i>recipient</i>>" @@ -13671,7 +9670,6 @@ "zcir <luokka> <ilmentymä> <vastaanottaja>: Lähetä viesti " "<<i>luokka</i>,<i>ilmentymä</i>,<i>vastaanottaja</i>>" -#: ../libpurple/protocols/zephyr/zephyr.c:2754 msgid "" "zir <instance> <recipient>: Send a message to <MESSAGE," "<i>instance</i>,<i>recipient</i>>" @@ -13679,15 +9677,12 @@ "zir <ilmentymä> <vastaanottaja>: Lähetä viesti <VIESTI," "<i>ilmentymä</i>,<i>vastaanottaja</i>>" -#: ../libpurple/protocols/zephyr/zephyr.c:2759 msgid "zc <class>: Send a message to <<i>class</i>,PERSONAL,*>" msgstr "zc <luokka>: Lähetä viesti <<i>luokka</i>,YKSITYINEN,*>" -#: ../libpurple/protocols/zephyr/zephyr.c:2835 msgid "Resubscribe" msgstr "Tilaa uudelleen" -#: ../libpurple/protocols/zephyr/zephyr.c:2838 msgid "Retrieve subscriptions from server" msgstr "Hae tilaukset palvelimelta" @@ -13701,45 +9696,33 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/zephyr/zephyr.c:2931 -#: ../libpurple/protocols/zephyr/zephyr.c:2933 msgid "Zephyr Protocol Plugin" msgstr "Zephyr-yhteyskäytäntöliitännäinen" -#: ../libpurple/protocols/zephyr/zephyr.c:2958 msgid "Use tzc" msgstr "Käytä tzc" -#: ../libpurple/protocols/zephyr/zephyr.c:2961 msgid "tzc command" msgstr "tzc-komento" -#: ../libpurple/protocols/zephyr/zephyr.c:2964 msgid "Export to .anyone" msgstr "Vie tiedostoon .anyone" -#: ../libpurple/protocols/zephyr/zephyr.c:2967 msgid "Export to .zephyr.subs" msgstr "Vie tiedostoon .zephyr.subs" -#: ../libpurple/protocols/zephyr/zephyr.c:2970 msgid "Import from .anyone" msgstr "Tuo tiedostosta .anyone" -#: ../libpurple/protocols/zephyr/zephyr.c:2973 msgid "Import from .zephyr.subs" msgstr "Tuo tiedostosta .zephyr.subs" -#: ../libpurple/protocols/zephyr/zephyr.c:2976 msgid "Realm" msgstr "Alue (realm)" -#: ../libpurple/protocols/zephyr/zephyr.c:2979 msgid "Exposure" msgstr "Altistus" -#: ../libpurple/proxy.c:486 ../libpurple/proxy.c:933 ../libpurple/proxy.c:1092 -#: ../libpurple/proxy.c:1695 #, c-format msgid "" "Unable to create socket:\n" @@ -13748,76 +9731,61 @@ "Pistokkeen luonti epäonnistui:\n" "%s" -#: ../libpurple/proxy.c:687 #, c-format msgid "Unable to parse response from HTTP proxy: %s\n" msgstr "Vastausta HTTP-välipalvelimelta ei voi jäsentää: %s\n" -#: ../libpurple/proxy.c:727 ../libpurple/proxy.c:776 ../libpurple/proxy.c:814 -#: ../libpurple/proxy.c:826 #, c-format msgid "HTTP proxy connection error %d" msgstr "HTTP-välipalvelimen yhteysvirhe %d" -#: ../libpurple/proxy.c:822 #, c-format msgid "Access denied: HTTP proxy server forbids port %d tunneling." msgstr "Pääsy evätty: HTTP-välipalvelin estää portin %d tunneloinnin." -#: ../libpurple/proxy.c:1053 #, c-format msgid "Error resolving %s" msgstr "Virhe selvitettäessä %s" -#: ../libpurple/proxy.c:1793 msgid "Could not resolve host name" msgstr "Isäntänimeä ei voi selvittää" +#, c-format +msgid "Requesting %s's attention..." +msgstr "Pyydetään käyttäjän %s huomiota..." + +#, c-format +msgid "%s has requested your attention!" +msgstr "%s pyysi huomiotasi" + #. * #. * A wrapper for purple_request_action() that uses @c Yes and @c No buttons. #. -#: ../libpurple/request.h:1391 ../pidgin/gtkblist.c:552 msgid "_Yes" msgstr "_Kyllä" -#: ../libpurple/request.h:1391 ../pidgin/gtkblist.c:552 msgid "_No" msgstr "_Ei" #. * #. * A wrapper for purple_request_action() that uses Accept and Cancel buttons. #. -#: ../libpurple/request.h:1411 msgid "_Accept" msgstr "_Hyväksy" #. * #. * The default message to use when the user becomes auto-away. #. -#: ../libpurple/savedstatuses.c:48 msgid "I'm not here right now" msgstr "En ole täällä juuri nyt" -#: ../libpurple/savedstatuses.c:537 msgid "saved statuses" msgstr "tallennetut tilat" -#: ../libpurple/server.c:265 #, c-format msgid "%s is now known as %s.\n" msgstr "%s on nyt nimeltään %s.\n" -#: ../libpurple/server.c:356 -#, c-format -msgid "Requesting %s's attention..." -msgstr "Pyydetään käyttäjän %s huomiota..." - -#: ../libpurple/server.c:401 -#, c-format -msgid "%s has requested your attention!" -msgstr "%s pyysi huomiotasi" - -#: ../libpurple/server.c:898 #, c-format msgid "" "%s has invited %s to the chat room %s:\n" @@ -13826,98 +9794,90 @@ "Käyttäjä %s on kutsunut käyttäjän %s keskusteluhuoneeseen %s:\n" "%s" -#: ../libpurple/server.c:903 #, c-format msgid "%s has invited %s to the chat room %s\n" msgstr "Käyttäjä %s on kutsunut käyttäjän %s keskusteluhuoneeseen %s\n" -#: ../libpurple/server.c:907 msgid "Accept chat invitation?" msgstr "Hyväksy ryhmäkeskustelukutsu?" -#: ../libpurple/sslconn.c:164 +#. Shortcut +msgid "Shortcut" +msgstr "Oikotie" + +msgid "The text-shortcut for the smiley" +msgstr "Teksti-oikotie hymiölle" + +#. Stored Image +msgid "Stored Image" +msgstr "Tallennettu kuva" + +msgid "Stored Image. (that'll have to do for now)" +msgstr "Tallennettu kuva. (niillä tulee pärjätä toistaiseksi)" + msgid "SSL Connection Failed" msgstr "SSL-yhteys epäonnistui" -#: ../libpurple/sslconn.c:166 msgid "SSL Handshake Failed" msgstr "SSL-kättely epäonnistui" -#: ../libpurple/sslconn.c:168 msgid "SSL peer presented an invalid certificate" msgstr "SSL-vertainen esitti epäkelvon varmenteen" -#: ../libpurple/sslconn.c:171 msgid "Unknown SSL error" msgstr "Tuntematon SSL-virhe" -#: ../libpurple/status.c:154 msgid "Unset" msgstr "Poista asetus" -#: ../libpurple/status.c:157 ../pidgin/gtkdocklet.c:553 -#: ../pidgin/gtkstatusbox.c:1088 msgid "Do not disturb" msgstr "Älä häiritse" -#: ../libpurple/status.c:160 msgid "Extended away" msgstr "Pidennetty poissaolo" -#: ../libpurple/status.c:161 msgid "Mobile" msgstr "Liikkeellä" -#: ../libpurple/status.c:162 msgid "Listening to music" msgstr "Kuuntelee musiikkia" -#: ../libpurple/status.c:611 #, c-format msgid "%s (%s) changed status from %s to %s" msgstr "%s (%s) on vaihtanut tilasta %s tilaan %s" -#: ../libpurple/status.c:622 #, c-format msgid "%s (%s) is now %s" msgstr "%s (%s) on nyt %s" -#: ../libpurple/status.c:628 #, c-format msgid "%s (%s) is no longer %s" msgstr "%s (%s) ei ole enää %s" -#: ../libpurple/status.c:1243 #, c-format msgid "%s became idle" msgstr "%s on jouten" -#: ../libpurple/status.c:1263 #, c-format msgid "%s became unidle" msgstr "%s on aktiivinen" -#: ../libpurple/status.c:1329 #, c-format msgid "+++ %s became idle" msgstr "+++ %s on jouten" -#: ../libpurple/status.c:1331 #, c-format msgid "+++ %s became unidle" msgstr "+++ %s on aktiivinen" -#: ../libpurple/util.c:721 #, c-format msgid "%x %X" msgstr "%x %X" -#: ../libpurple/util.c:2804 #, c-format msgid "Error Reading %s" msgstr "Virhe luettaessa %s" -#: ../libpurple/util.c:2805 #, c-format msgid "" "An error was encountered reading your %s. They have not been loaded, and " @@ -13926,67 +9886,56 @@ "%s:n lukemisessa tapahtui virhe. Niitä ei ladattu ja vanha tiedosto on " "nimetty uudelleen nimellä %s~." -#: ../libpurple/util.c:3304 msgid "Calculating..." msgstr "Lasketaan..." -#: ../libpurple/util.c:3307 msgid "Unknown." msgstr "Tuntematon." -#: ../libpurple/util.c:3333 #, c-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d sekunti" msgstr[1] "%d sekuntia" -#: ../libpurple/util.c:3345 #, c-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d päivä" msgstr[1] "%d päivää" -#: ../libpurple/util.c:3353 #, c-format msgid "%s, %d hour" msgid_plural "%s, %d hours" msgstr[0] "%s, %d tunti" msgstr[1] "%s, %d tuntia" -#: ../libpurple/util.c:3359 #, c-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d tunti" msgstr[1] "%d tuntia" -#: ../libpurple/util.c:3367 #, c-format msgid "%s, %d minute" msgid_plural "%s, %d minutes" msgstr[0] "%s, %d minuutti" msgstr[1] "%s, %d minuuttia" -#: ../libpurple/util.c:3373 #, c-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minuutti" msgstr[1] "%d minuuttia" -#: ../libpurple/util.c:3633 #, c-format msgid "Could not open %s: Redirected too many times" msgstr "%s:n avaaminen epäonnistui: uudelleenohjattu liian monta kertaa" -#: ../libpurple/util.c:3670 ../libpurple/util.c:3966 #, c-format msgid "Unable to connect to %s" msgstr "Kohteeseen %s ei kyetty muodostamaan yhteyttä" -#: ../libpurple/util.c:3793 #, c-format msgid "" "Unable to allocate enough memory to hold the contents from %s. The web " @@ -13995,141 +9944,116 @@ "Riittävästi muistia ei voi varata säilyttämään kohteen %s sisältö. " "Verkkopalvelin voi olla yrittämässä tehdä jotain pahantahtoista." -#: ../libpurple/util.c:3828 #, c-format msgid "Error reading from %s: %s" msgstr "Virhe luettaessa kohteesta %s: %s" -#: ../libpurple/util.c:3859 #, c-format msgid "Error writing to %s: %s" msgstr "Virhe kirjoitettaessa kohteeseen %s: %s" -#: ../libpurple/util.c:3884 #, c-format msgid "Unable to connect to %s: %s" msgstr "Kohteeseen %s ei voi yhdistää: %s" -#: ../libpurple/util.c:4697 #, c-format msgid " - %s" msgstr " - %s" -#: ../libpurple/util.c:4703 #, c-format msgid " (%s)" msgstr " (%s)" #. 10053 -#: ../libpurple/win32/libc_interface.c:322 #, c-format msgid "Connection interrupted by other software on your computer." msgstr "Yhteys keskeytyi tietokoneella olevan toisen ohjelman takia." #. 10054 -#: ../libpurple/win32/libc_interface.c:325 #, c-format msgid "Remote host closed connection." msgstr "Etäkone on katkaissut yhteyden." #. 10060 -#: ../libpurple/win32/libc_interface.c:328 #, c-format msgid "Connection timed out." msgstr "Ei yhteyttä määräajassa." #. 10061 -#: ../libpurple/win32/libc_interface.c:331 #, c-format msgid "Connection refused." msgstr "Yhteys torjuttu." -#: ../pidgin.desktop.in.h:1 +#. 10048 +#, c-format +msgid "Address already in use." +msgstr "Osoite on jo käytössä." + msgid "Internet Messenger" msgstr "Pikaviestin" -#: ../pidgin.desktop.in.h:2 msgid "Pidgin Internet Messenger" msgstr "Pidgin-pikaviestin" -#: ../pidgin.desktop.in.h:3 msgid "Send instant messages over multiple protocols" msgstr "Lähetä pikaviestejä monilla eri yhteyskäytännöillä" -#: ../pidgin/eggtrayicon.c:128 msgid "Orientation" msgstr "Asento" -#: ../pidgin/eggtrayicon.c:129 msgid "The orientation of the tray." msgstr "Ilmoitusalueen asento." #. Build the login options frame. -#: ../pidgin/gtkaccount.c:379 msgid "Login Options" msgstr "Sisäänkirjautumisvalinnat" -#: ../pidgin/gtkaccount.c:400 msgid "Pro_tocol:" msgstr "Yhteyskäy_täntö:" -#: ../pidgin/gtkaccount.c:411 ../pidgin/gtkaccount.c:1039 msgid "_Username:" msgstr "_Käyttäjänimi:" -#: ../pidgin/gtkaccount.c:501 msgid "Remember pass_word" msgstr "Muista _salasana" #. Build the user options frame. -#: ../pidgin/gtkaccount.c:555 msgid "User Options" msgstr "Käyttäjän valinnat" -#: ../pidgin/gtkaccount.c:568 msgid "_Local alias:" msgstr "Paika_llinen lempinimi:" -#: ../pidgin/gtkaccount.c:572 msgid "New _mail notifications" msgstr "Il_moita uudesta sähköpostista" #. Buddy icon -#: ../pidgin/gtkaccount.c:577 msgid "Use this buddy _icon for this account:" msgstr "Käytä tätä tuttavakuvaketta tälle käyttäjät_ilille:" #. Build the protocol options frame. -#: ../pidgin/gtkaccount.c:705 #, c-format msgid "%s Options" msgstr "%s-valinnat" -#: ../pidgin/gtkaccount.c:910 msgid "Use GNOME Proxy Settings" msgstr "Käytä Gnomen välipalvelinasetuksia" -#: ../pidgin/gtkaccount.c:911 msgid "Use Global Proxy Settings" msgstr "Käytä yleisiä välipalvelinasetuksia" -#: ../pidgin/gtkaccount.c:917 msgid "No Proxy" msgstr "Ei välipalvelinta" -#: ../pidgin/gtkaccount.c:923 msgid "HTTP" msgstr "HTTP" -#: ../pidgin/gtkaccount.c:929 msgid "SOCKS 4" msgstr "SOCKS 4" -#: ../pidgin/gtkaccount.c:935 msgid "SOCKS 5" msgstr "SOCKS 5" -#: ../pidgin/gtkaccount.c:941 ../pidgin/gtkprefs.c:1340 msgid "Use Environmental Settings" msgstr "Käytä ympäristöasetuksia" @@ -14138,69 +10062,52 @@ #. A) your network is really slow and you have nothing better to do than #. look at butterflies. #. B)You are looking really closely at something that shouldn't matter. -#: ../pidgin/gtkaccount.c:980 msgid "If you look real closely" msgstr "Jos katsot todella tarkkaan" #. This is an easter egg. See the comment on the previous line in the source. -#: ../pidgin/gtkaccount.c:983 msgid "you can see the butterflies mating" msgstr "voit nähdä perhosten parittelevan" -#: ../pidgin/gtkaccount.c:1004 msgid "Proxy Options" msgstr "Välipalvelinvalinnat" -#: ../pidgin/gtkaccount.c:1018 ../pidgin/gtkprefs.c:1334 msgid "Proxy _type:" msgstr "Välipalvelimen _tyyppi:" -#: ../pidgin/gtkaccount.c:1027 ../pidgin/gtkprefs.c:1355 msgid "_Host:" msgstr "P_alvelin:" -#: ../pidgin/gtkaccount.c:1031 ../pidgin/gtkprefs.c:1373 msgid "_Port:" msgstr "_Portti:" -#: ../pidgin/gtkaccount.c:1046 ../pidgin/gtkprefs.c:1410 msgid "Pa_ssword:" msgstr "_Salasana:" -#: ../pidgin/gtkaccount.c:1171 msgid "Unable to save new account" msgstr "Uuden käyttäjätilin tallentaminen ei onnistu." -#: ../pidgin/gtkaccount.c:1172 msgid "An account already exists with the specified criteria." msgstr "Määritelty käyttäjätili on jo olemassa." -#: ../pidgin/gtkaccount.c:1449 msgid "Add Account" msgstr "Lisää tili" -#: ../pidgin/gtkaccount.c:1466 msgid "_Basic" msgstr "_Perus" -#: ../pidgin/gtkaccount.c:1473 -msgid "Create this new account on the server" -msgstr "Luo tämä uusi käyttäjätili palvelimelle" - -#: ../pidgin/gtkaccount.c:1487 +msgid "Create _this new account on the server" +msgstr "Luo _tämä uusi käyttäjätili palvelimelle" + msgid "_Advanced" msgstr "_Lisäasetukset" -#: ../pidgin/gtkaccount.c:1908 ../pidgin/gtkplugin.c:753 -#: ../pidgin/plugins/convcolors.c:327 msgid "Enabled" msgstr "Käytössä" -#: ../pidgin/gtkaccount.c:1936 msgid "Protocol" msgstr "Yhteyskäytäntö" -#: ../pidgin/gtkaccount.c:2139 #, c-format msgid "" "<span size='larger' weight='bold'>Welcome to %s!</span>\n" @@ -14223,7 +10130,6 @@ "Voit palata tähän ikkunaan lisäämään, muokkaamaan tai poistamaan tilejä " "valitsemalla <b>Käyttäjätilit->Lisää/muokkaa</b> Tuttavat-ikkunassa." -#: ../pidgin/gtkblist.c:549 #, c-format msgid "You have %d contact named %s. Would you like to merge them?" msgid_plural "" @@ -14231,7 +10137,6 @@ msgstr[0] "Sinulla on %d kontakti jonka nimi on %s. Haluatko yhdistää ne?" msgstr[1] "Sinulla on %d kontaktia joiden nimi on %s. Haluatko yhdistää ne?" -#: ../pidgin/gtkblist.c:550 msgid "" "Merging these contacts will cause them to share a single entry on the buddy " "list and use a single conversation window. You can separate them again by " @@ -14241,126 +10146,96 @@ "ja kontakteille käytetään jatkossa vain yhtä keskusteluikkunaa. Ne voidaan " "erottaa valitsemalla \"Laajenna\" kontaktin oikean napin valikosta" -#: ../pidgin/gtkblist.c:683 msgid "Please update the necessary fields." msgstr "Päivitä tarvittavat kentät." -#: ../pidgin/gtkblist.c:1038 ../pidgin/gtkblist.c:6794 msgid "Room _List" msgstr "Huone_luettelo" -#: ../pidgin/gtkblist.c:1058 msgid "" "Please enter the appropriate information about the chat you would like to " "join.\n" msgstr "Syötä tiedot ryhmäkeskustelusta, johon haluaisit liittyä.\n" -#: ../pidgin/gtkblist.c:1070 ../pidgin/gtkblist.c:6829 -#: ../pidgin/gtkpounce.c:546 ../pidgin/gtkroomlist.c:547 msgid "_Account:" msgstr "_Käyttäjätili:" -#: ../pidgin/gtkblist.c:1349 ../pidgin/gtkprivacy.c:549 -#: ../pidgin/gtkprivacy.c:563 msgid "_Block" msgstr "_Estä" -#: ../pidgin/gtkblist.c:1349 msgid "Un_block" msgstr "_Poista esto" -#: ../pidgin/gtkblist.c:1392 msgid "Move to" msgstr "Siirrä" -#: ../pidgin/gtkblist.c:1432 msgid "Get _Info" msgstr "Hae _tiedot" -#: ../pidgin/gtkblist.c:1435 ../pidgin/pidginstock.c:90 msgid "I_M" msgstr "_Pikaviesti" -#: ../pidgin/gtkblist.c:1441 msgid "_Send File..." msgstr "_Lähetä tiedosto..." -#: ../pidgin/gtkblist.c:1448 msgid "Add Buddy _Pounce..." msgstr "Lisää tuttava_ilmoitin..." -#: ../pidgin/gtkblist.c:1453 ../pidgin/gtkblist.c:1457 -#: ../pidgin/gtkblist.c:1577 ../pidgin/gtkblist.c:1602 msgid "View _Log" msgstr "Näytä _loki" -#: ../pidgin/gtkblist.c:1463 ../pidgin/gtkblist.c:1550 msgid "Hide when offline" msgstr "Piilota kun poissa linjoilta" -#: ../pidgin/gtkblist.c:1463 ../pidgin/gtkblist.c:1550 msgid "Show when offline" msgstr "Näytä kun poissa linjoilta" -#: ../pidgin/gtkblist.c:1477 ../pidgin/gtkblist.c:1486 -#: ../pidgin/gtkblist.c:1587 ../pidgin/gtkblist.c:1608 msgid "_Alias..." msgstr "_Lempinimi..." -#: ../pidgin/gtkblist.c:1480 ../pidgin/gtkblist.c:1488 -#: ../pidgin/gtkblist.c:1589 ../pidgin/gtkblist.c:1610 msgid "_Remove" msgstr "_Poista" -#: ../pidgin/gtkblist.c:1538 +msgid "Set Custom Icon" +msgstr "Aseta oma kuvake" + +msgid "Remove Custom Icon" +msgstr "Poista oma kuvake" + msgid "Add _Buddy..." msgstr "Lisää _tuttava..." -#: ../pidgin/gtkblist.c:1541 msgid "Add C_hat..." msgstr "Lisää ry_hmäkeskustelu..." -#: ../pidgin/gtkblist.c:1544 msgid "_Delete Group" msgstr "_Poista ryhmä" -#: ../pidgin/gtkblist.c:1546 msgid "_Rename" msgstr "Nimeä _uudelleen" #. join button -#: ../pidgin/gtkblist.c:1571 ../pidgin/gtkroomlist.c:318 -#: ../pidgin/gtkroomlist.c:594 ../pidgin/pidginstock.c:88 msgid "_Join" msgstr "_Liity" -#: ../pidgin/gtkblist.c:1573 msgid "Auto-Join" msgstr "Liity automaattisesti" -#: ../pidgin/gtkblist.c:1575 msgid "Persistent" msgstr "Pysyvä" -#: ../pidgin/gtkblist.c:1585 msgid "_Edit Settings..." msgstr "_Muokkaa asetuksia..." -#: ../pidgin/gtkblist.c:1615 ../pidgin/gtkblist.c:1638 msgid "_Collapse" msgstr "_Pienennä" -#: ../pidgin/gtkblist.c:1643 msgid "_Expand" msgstr "_Laajenna" -#: ../pidgin/gtkblist.c:1894 ../pidgin/gtkblist.c:1906 -#: ../pidgin/gtkblist.c:5493 ../pidgin/gtkblist.c:5506 msgid "/Tools/Mute Sounds" msgstr "/Työkalut/Vaimenna äänet" -#: ../pidgin/gtkblist.c:2366 ../pidgin/gtkconv.c:4936 -#: ../pidgin/gtkpounce.c:437 msgid "" "You are not currently signed on with an account that can add that buddy." msgstr "" @@ -14370,148 +10245,116 @@ #. I don't believe this can happen currently, I think #. * everything that calls this function checks for one of the #. * above node types first. -#: ../pidgin/gtkblist.c:2717 msgid "Unknown node type" msgstr "Tuntematon solmutyyppi" #. Buddies menu -#: ../pidgin/gtkblist.c:3153 msgid "/_Buddies" msgstr "/_Tuttavat" -#: ../pidgin/gtkblist.c:3154 msgid "/Buddies/New Instant _Message..." msgstr "/Tuttavat/Uusi _pikaviesti..." -#: ../pidgin/gtkblist.c:3155 msgid "/Buddies/Join a _Chat..." msgstr "/Tuttavat/Liity _ryhmäkeskusteluun..." -#: ../pidgin/gtkblist.c:3156 msgid "/Buddies/Get User _Info..." msgstr "/Tuttavat/Hae _käyttäjätiedot..." -#: ../pidgin/gtkblist.c:3157 msgid "/Buddies/View User _Log..." msgstr "/Tuttavat/Näytä käyttäjä_loki..." -#: ../pidgin/gtkblist.c:3159 msgid "/Buddies/Sh_ow" msgstr "/Tuttavat/Nä_ytä" -#: ../pidgin/gtkblist.c:3160 msgid "/Buddies/Show/_Offline Buddies" msgstr "/Tuttavat/Näytä/_Poissaolevat tuttavat" -#: ../pidgin/gtkblist.c:3161 msgid "/Buddies/Show/_Empty Groups" msgstr "/Tuttavat/Näytä/_Tyhjät ryhmät" -#: ../pidgin/gtkblist.c:3162 msgid "/Buddies/Show/Buddy _Details" msgstr "/Tuttavat/Näytä/Tuttavien tie_dot" -#: ../pidgin/gtkblist.c:3163 msgid "/Buddies/Show/Idle _Times" msgstr "/Tuttavat/Näytä/_Joutenoloajat" -#: ../pidgin/gtkblist.c:3164 msgid "/Buddies/Show/_Protocol Icons" msgstr "/Tuttavat/Näytä/_Yhteyskäytäntökuvakkeet" -#: ../pidgin/gtkblist.c:3165 msgid "/Buddies/_Sort Buddies" msgstr "/Tuttavat/L_ajittele tuttavat" -#: ../pidgin/gtkblist.c:3167 msgid "/Buddies/_Add Buddy..." msgstr "/Tuttavat/_Lisää tuttava..." -#: ../pidgin/gtkblist.c:3168 msgid "/Buddies/Add C_hat..." msgstr "/Tuttavat/Lisää ryhmäkeskustelu..." -#: ../pidgin/gtkblist.c:3169 msgid "/Buddies/Add _Group..." msgstr "/Tuttavat/Lisää _ryhmä..." -#: ../pidgin/gtkblist.c:3171 msgid "/Buddies/_Quit" msgstr "/Tuttavat/_Lopeta" #. Accounts menu -#: ../pidgin/gtkblist.c:3174 msgid "/_Accounts" msgstr "/_Käyttäjätilit" -#: ../pidgin/gtkblist.c:3175 ../pidgin/gtkblist.c:7514 -msgid "/Accounts/Manage" -msgstr "/Käyttäjätilit/Hallinta" +msgid "/Accounts/Manage Accounts" +msgstr "/Käyttäjätilit/Tilien hallinta" #. Tools -#: ../pidgin/gtkblist.c:3178 msgid "/_Tools" msgstr "/T_yökalut" -#: ../pidgin/gtkblist.c:3179 msgid "/Tools/Buddy _Pounces" msgstr "/Työkalut/Tuttava_ilmoittimet" -#: ../pidgin/gtkblist.c:3180 msgid "/Tools/_Certificates" msgstr "/Työkalut/_Varmenteet" -#: ../pidgin/gtkblist.c:3181 msgid "/Tools/Plu_gins" msgstr "/Työkalut/_Liitännäiset" -#: ../pidgin/gtkblist.c:3182 msgid "/Tools/Pr_eferences" msgstr "/Työkalut/A_setukset" -#: ../pidgin/gtkblist.c:3183 msgid "/Tools/Pr_ivacy" msgstr "/Työkalut/Yks_ityisyys" -#: ../pidgin/gtkblist.c:3185 +msgid "/Tools/Smile_y" +msgstr "/Työkalut/H_ymiö" + msgid "/Tools/_File Transfers" msgstr "/Työkalut/_Tiedostonsiirrot..." -#: ../pidgin/gtkblist.c:3186 msgid "/Tools/R_oom List" msgstr "/Työkalut/Huone_luettelo" -#: ../pidgin/gtkblist.c:3187 msgid "/Tools/System _Log" msgstr "/Työkalut/Järjestelmä_loki" -#: ../pidgin/gtkblist.c:3189 msgid "/Tools/Mute _Sounds" msgstr "/Työkalut/Vaimenna _äänet" #. Help -#: ../pidgin/gtkblist.c:3191 msgid "/_Help" msgstr "/O_hje" -#: ../pidgin/gtkblist.c:3192 msgid "/Help/Online _Help" msgstr "/Ohje/O_hjeita verkossa" -#: ../pidgin/gtkblist.c:3193 msgid "/Help/_Debug Window" msgstr "/Ohje/_Virheenjäljitysikkuna" -#: ../pidgin/gtkblist.c:3195 ../pidgin/gtkblist.c:3197 msgid "/Help/_About" msgstr "/Ohje/Tietoj_a" -#: ../pidgin/gtkblist.c:3228 #, c-format msgid "<b>Account:</b> %s" msgstr "<b>Käyttäjätili:</b> %s" -#: ../pidgin/gtkblist.c:3247 #, c-format msgid "" "\n" @@ -14520,7 +10363,6 @@ "\n" "<b>Osallistujat:</b> %d" -#: ../pidgin/gtkblist.c:3252 #, c-format msgid "" "\n" @@ -14529,128 +10371,98 @@ "\n" "<b>Aihe:</b> %s" -#: ../pidgin/gtkblist.c:3252 msgid "(no topic set)" msgstr "(aihetta ei ole asetettu)" -#: ../pidgin/gtkblist.c:3331 msgid "Buddy Alias" msgstr "Tuttavan lempinimi" -#: ../pidgin/gtkblist.c:3360 msgid "Logged In" msgstr "Kirjautumisesta aikaa" -#: ../pidgin/gtkblist.c:3406 msgid "Last Seen" msgstr "Näkemisestä aikaa" -#: ../pidgin/gtkblist.c:3427 msgid "Spooky" msgstr "Aavemainen" -#: ../pidgin/gtkblist.c:3429 msgid "Awesome" msgstr "Mahtava" -#: ../pidgin/gtkblist.c:3431 msgid "Rockin'" msgstr "Rokkaava" -#: ../pidgin/gtkblist.c:3462 msgid "Total Buddies" msgstr "Tuttavia yhteensä" -#: ../pidgin/gtkblist.c:3824 #, c-format msgid "Idle %dd %dh %02dm" msgstr "Jouten %dd %dh %02dm" -#: ../pidgin/gtkblist.c:3826 #, c-format msgid "Idle %dh %02dm" msgstr "Jouten %dh %02dm" -#: ../pidgin/gtkblist.c:3828 #, c-format msgid "Idle %dm" msgstr "Jouten %dm" -#: ../pidgin/gtkblist.c:3982 msgid "/Buddies/New Instant Message..." msgstr "/Tuttavat/Uusi pikaviesti..." -#: ../pidgin/gtkblist.c:3983 ../pidgin/gtkblist.c:4016 msgid "/Buddies/Join a Chat..." msgstr "/Tuttavat/Liity ryhmäkeskusteluun..." -#: ../pidgin/gtkblist.c:3984 msgid "/Buddies/Get User Info..." msgstr "/Tuttavat/Hae käyttäjätiedot..." -#: ../pidgin/gtkblist.c:3985 msgid "/Buddies/Add Buddy..." msgstr "/Tuttavat/Lisää tuttava..." -#: ../pidgin/gtkblist.c:3986 ../pidgin/gtkblist.c:4019 msgid "/Buddies/Add Chat..." msgstr "/Tuttavat/Lisää ryhmäkeskustelu..." -#: ../pidgin/gtkblist.c:3987 msgid "/Buddies/Add Group..." msgstr "/Tuttavat/Lisää ryhmä..." -#: ../pidgin/gtkblist.c:4022 msgid "/Tools/Privacy" msgstr "/Työkalut/Yksityisyys" -#: ../pidgin/gtkblist.c:4025 msgid "/Tools/Room List" msgstr "/Työkalut/Huoneluettelo" -#: ../pidgin/gtkblist.c:4157 ../pidgin/gtkdocklet.c:155 -#: ../pidgin/gtkdocklet.c:160 #, c-format msgid "%d unread message from %s\n" msgid_plural "%d unread messages from %s\n" msgstr[0] "%d lukematon viesti käyttäjältä %s\n" msgstr[1] "%d lukematonta viestiä käyttäjältä %s\n" -#: ../pidgin/gtkblist.c:4320 msgid "Manually" msgstr "Käsin" -#: ../pidgin/gtkblist.c:4323 msgid "By status" msgstr "Tilan mukaan" -#: ../pidgin/gtkblist.c:4324 msgid "By log size" msgstr "Lokin koon mukaan" -#: ../pidgin/gtkblist.c:4662 #, c-format msgid "%s disconnected" msgstr "Yhteys katkennut kohteeseen %s" -#: ../pidgin/gtkblist.c:4664 #, c-format msgid "%s disabled" msgstr "%s pois käytöstä" -#: ../pidgin/gtkblist.c:4668 msgid "Reconnect" msgstr "Yhdistä uudelleen" -#: ../pidgin/gtkblist.c:4668 ../pidgin/gtkblist.c:4787 msgid "Re-enable" msgstr "Ota uudelleen käyttöön" -#: ../pidgin/gtkblist.c:4785 msgid "Welcome back!" msgstr "Tervetuloa takaisin." -#: ../pidgin/gtkblist.c:4821 #, c-format msgid "%d account was disabled because you signed on from another location:" msgid_plural "" @@ -14660,83 +10472,67 @@ msgstr[1] "" "%d tiliä poistettiin käytöstä koska toisesta paikasta kirjauduttiin sisään:" -#: ../pidgin/gtkblist.c:5100 msgid "<b>Username:</b>" msgstr "<b>Käyttäjänimi:</b>" -#: ../pidgin/gtkblist.c:5107 msgid "<b>Password:</b>" msgstr "<b>Salasana:</b>" -#: ../pidgin/gtkblist.c:5118 msgid "_Login" msgstr "_Sisäänkirjautuminen" -#: ../pidgin/gtkblist.c:5202 msgid "/Accounts" msgstr "/Käyttäjätilit" #. Translators: Please maintain the use of -> and <- to refer to menu heirarchy -#: ../pidgin/gtkblist.c:5216 #, c-format msgid "" "<span weight='bold' size='larger'>Welcome to %s!</span>\n" "\n" "You have no accounts enabled. Enable your IM accounts from the <b>Accounts</" -"b> window at <b>Accounts->Manage</b>. Once you enable accounts, you'll be " -"able to sign on, set your status, and talk to your friends." +"b> window at <b>Accounts->Manage Accounts</b>. Once you enable accounts, " +"you'll be able to sign on, set your status, and talk to your friends." msgstr "" "<span weight='bold' size='larger'>Tervetuloa %siin!</span>\n" "\n" "Yksikään käyttäjätili ei ole käytössä. Ota pikaviestintilit käyttöön " -"<b>Käyttäjätilit</b>-ikkunassa (<b>Käyttäjätilit->Hallinta</b>). Kun " +"<b>Käyttäjätilit</b>-ikkunassa (<b>Käyttäjätilit->Tilien hallinta</b>). Kun " "käyttäjätilit on otettu käyttöön, voit kirjautua sisään, asettaa esim. " "paikallaolotilasi ja jutella tuttavillesi." #. set the Show Offline Buddies option. must be done #. * after the treeview or faceprint gets mad. -Robot101 #. -#: ../pidgin/gtkblist.c:5487 msgid "/Buddies/Show/Offline Buddies" msgstr "/Tuttavat/Näytä/Poissaolevat tuttavat" -#: ../pidgin/gtkblist.c:5490 msgid "/Buddies/Show/Empty Groups" msgstr "/Tuttavat/Näytä/Tyhjät ryhmät" -#: ../pidgin/gtkblist.c:5496 msgid "/Buddies/Show/Buddy Details" msgstr "/Tuttavat/Näytä/Tuttavien tiedot" -#: ../pidgin/gtkblist.c:5499 msgid "/Buddies/Show/Idle Times" msgstr "/Tuttavat/Näytä/Joutenoloajat" -#: ../pidgin/gtkblist.c:5502 msgid "/Buddies/Show/Protocol Icons" msgstr "/Tuttavat/Näytä/Yhteyskäytäntökuvakkeet" -#: ../pidgin/gtkblist.c:6455 msgid "Add a buddy.\n" msgstr "Lisää tuttava.\n" -#: ../pidgin/gtkblist.c:6470 msgid "Buddy's _username:" msgstr "T_uttavan käyttäjänimi:" -#: ../pidgin/gtkblist.c:6492 msgid "(Optional) A_lias:" msgstr "(Valinnainen) _Lempinimi:" -#: ../pidgin/gtkblist.c:6510 msgid "Add buddy to _group:" msgstr "Lisää tuttava _ryhmään:" -#: ../pidgin/gtkblist.c:6759 msgid "This protocol does not support chat rooms." msgstr "Tämä yhteyskäytäntö ei tue keskusteluhuoneita." -#: ../pidgin/gtkblist.c:6775 msgid "" "You are not currently signed on with any protocols that have the ability to " "chat." @@ -14744,7 +10540,6 @@ "Et ole kirjautuneena millään yhteyskäytännöllä jolla voisi käyttää " "ryhmäkeskustelua." -#: ../pidgin/gtkblist.c:6819 msgid "" "Please enter an alias, and the appropriate information about the chat you " "would like to add to your buddy list.\n" @@ -14752,266 +10547,199 @@ "Anna lempinimi, ja tiedot ryhmäkeskustelusta jonka haluat lisätä " "tuttaviisi.\n" -#: ../pidgin/gtkblist.c:6842 msgid "A_lias:" msgstr "_Lempinimi:" -#: ../pidgin/gtkblist.c:6849 msgid "Auto_join when account becomes online." msgstr "Liity automaattisesti kun käyttä_jätili pääsee linjoille." -#: ../pidgin/gtkblist.c:6850 msgid "_Hide chat when the window is closed." msgstr "Piilota ry_hmäkeskustelu kun ikkuna on suljettu." -#: ../pidgin/gtkblist.c:6876 msgid "Please enter the name of the group to be added." msgstr "Anna lisättävän ryhmän nimi." -#: ../pidgin/gtkblist.c:7534 +msgid "Enable Account" +msgstr "Ota tili käyttöön" + +msgid "<PurpleMain>/Accounts/Enable Account" +msgstr "<PurpleMain>/Käyttäjätilit/Ota tili käyttöön" + msgid "<PurpleMain>/Accounts/" msgstr "<PurpleMain>/Käyttäjätilit/" -#: ../pidgin/gtkblist.c:7558 msgid "_Edit Account" msgstr "_Muokkaa käyttäjätiliä" -#: ../pidgin/gtkblist.c:7571 ../pidgin/gtkconv.c:3194 msgid "No actions available" msgstr "Ei toimintoja saatavilla." -#: ../pidgin/gtkblist.c:7579 msgid "_Disable" msgstr "_Poista käytöstä" -#: ../pidgin/gtkblist.c:7591 -msgid "Enable Account" -msgstr "Ota tili käyttöön" - -#: ../pidgin/gtkblist.c:7597 -msgid "<PurpleMain>/Accounts/Enable Account" -msgstr "<PurpleMain>/Käyttäjätilit/Ota tili käyttöön" - -#: ../pidgin/gtkblist.c:7646 msgid "/Tools" msgstr "/Työkalut" -#: ../pidgin/gtkblist.c:7716 msgid "/Buddies/Sort Buddies" msgstr "/Tuttavat/Lajittele tuttavat" #. Widget creation function -#: ../pidgin/gtkcertmgr.c:541 msgid "SSL Servers" msgstr "SSL-palvelimet" -#: ../pidgin/gtkconv.c:488 msgid "Unknown command." msgstr "Tuntematon komento." -#: ../pidgin/gtkconv.c:752 ../pidgin/gtkconv.c:778 msgid "That buddy is not on the same protocol as this chat." msgstr "Tuttava ei käytä samaa yhteyskäytäntöä kuin tämä ryhmäkeskustelu." -#: ../pidgin/gtkconv.c:772 msgid "" "You are not currently signed on with an account that can invite that buddy." msgstr "" "Et ole kirjautuneena millään käyttäjätilillä jolla voisi kutsua tämän " "tuttavan." -#: ../pidgin/gtkconv.c:825 msgid "Invite Buddy Into Chat Room" msgstr "Kutsu tuttava keskusteluhuoneeseen" #. Put our happy label in it. -#: ../pidgin/gtkconv.c:855 msgid "" "Please enter the name of the user you wish to invite, along with an optional " "invite message." msgstr "Anna kutsuttavan käyttäjän nimi sekä vapaaehtoinen viesti." -#: ../pidgin/gtkconv.c:876 msgid "_Buddy:" msgstr "_Tuttava:" -#: ../pidgin/gtkconv.c:887 ../pidgin/gtksavedstatuses.c:1166 -#: ../pidgin/gtksavedstatuses.c:1484 msgid "_Message:" msgstr "_Viesti:" -#: ../pidgin/gtkconv.c:951 #, c-format msgid "<h1>Conversation with %s</h1>\n" msgstr "<h1>Keskustelu käyttäjän %s kanssa</h1>\n" -#: ../pidgin/gtkconv.c:989 msgid "Save Conversation" msgstr "Tallenna keskustelu" -#: ../pidgin/gtkconv.c:1135 ../pidgin/gtkdebug.c:167 ../pidgin/gtkdebug.c:740 msgid "Find" msgstr "Etsi" -#: ../pidgin/gtkconv.c:1161 ../pidgin/gtkdebug.c:195 msgid "_Search for:" msgstr "_Haettava termi:" -#: ../pidgin/gtkconv.c:1662 msgid "Un-Ignore" msgstr "Huomioi" -#: ../pidgin/gtkconv.c:1665 msgid "Ignore" msgstr "Jätä huomiotta" -#: ../pidgin/gtkconv.c:1685 msgid "Get Away Message" msgstr "Hae poissaoloviesti" -#: ../pidgin/gtkconv.c:1708 msgid "Last said" msgstr "Viimeksi sanottu" -#: ../pidgin/gtkconv.c:2689 msgid "Unable to save icon file to disk." msgstr "Kuvaketiedostoa ei voi tallentaa levylle." -#: ../pidgin/gtkconv.c:2767 msgid "Save Icon" msgstr "Tallenna kuvake" -#: ../pidgin/gtkconv.c:2825 msgid "Animate" msgstr "Animoi" -#: ../pidgin/gtkconv.c:2830 msgid "Hide Icon" msgstr "Piilota kuvake" -#: ../pidgin/gtkconv.c:2833 msgid "Save Icon As..." msgstr "Tallenna kuvake nimellä..." -#: ../pidgin/gtkconv.c:2837 msgid "Set Custom Icon..." msgstr "Aseta oma kuvake..." -#: ../pidgin/gtkconv.c:2841 msgid "Change Size" msgstr "Muuta kokoa" -#: ../pidgin/gtkconv.c:2854 -msgid "Remove Custom Icon" -msgstr "Poista oma kuvake" - -#: ../pidgin/gtkconv.c:2979 msgid "Show All" msgstr "Näytä kaikki" #. Conversation menu -#: ../pidgin/gtkconv.c:2998 msgid "/_Conversation" msgstr "/_Keskustelu" -#: ../pidgin/gtkconv.c:3000 msgid "/Conversation/New Instant _Message..." msgstr "/Keskustelu/Uusi _pikaviesti..." -#: ../pidgin/gtkconv.c:3005 msgid "/Conversation/_Find..." msgstr "/Keskustelu/_Etsi..." -#: ../pidgin/gtkconv.c:3007 msgid "/Conversation/View _Log" msgstr "/Keskustelu/Näytä l_oki..." -#: ../pidgin/gtkconv.c:3008 msgid "/Conversation/_Save As..." msgstr "/Keskustelu/_Tallenna nimellä..." -#: ../pidgin/gtkconv.c:3010 msgid "/Conversation/Clea_r Scrollback" msgstr "/Keskustelu/T_yhjennä takaisinvieritys" -#: ../pidgin/gtkconv.c:3014 msgid "/Conversation/Se_nd File..." msgstr "/Keskustelu/_Lähetä tiedosto..." -#: ../pidgin/gtkconv.c:3015 msgid "/Conversation/Add Buddy _Pounce..." msgstr "/Keskustelu/Lisää tuttava_ilmoitin..." -#: ../pidgin/gtkconv.c:3017 msgid "/Conversation/_Get Info" msgstr "/Keskustelu/_Hae tiedot..." -#: ../pidgin/gtkconv.c:3019 msgid "/Conversation/In_vite..." msgstr "/Keskustelu/Kut_su..." -#: ../pidgin/gtkconv.c:3021 msgid "/Conversation/M_ore" msgstr "/Keskustelu/Lis_ää" -#: ../pidgin/gtkconv.c:3025 msgid "/Conversation/Al_ias..." msgstr "/Keskustelu/Lemp_inimi..." -#: ../pidgin/gtkconv.c:3027 msgid "/Conversation/_Block..." msgstr "/Keskustelu/E_stä..." -#: ../pidgin/gtkconv.c:3029 msgid "/Conversation/_Unblock..." msgstr "/Keskustelu/Poista est_o..." -#: ../pidgin/gtkconv.c:3031 msgid "/Conversation/_Add..." msgstr "/Keskustelu/_Lisää..." -#: ../pidgin/gtkconv.c:3033 msgid "/Conversation/_Remove..." msgstr "/Keskustelu/_Poista..." -#: ../pidgin/gtkconv.c:3038 msgid "/Conversation/Insert Lin_k..." msgstr "/Keskustelu/Lisää lin_kki..." -#: ../pidgin/gtkconv.c:3040 msgid "/Conversation/Insert Imag_e..." msgstr "/Keskustelu/Liitä _kuva..." -#: ../pidgin/gtkconv.c:3046 msgid "/Conversation/_Close" msgstr "/Keskustelu/_Sulje" #. Options -#: ../pidgin/gtkconv.c:3050 msgid "/_Options" msgstr "/_Valinnat" -#: ../pidgin/gtkconv.c:3051 msgid "/Options/Enable _Logging" msgstr "/Valinnat/_Lokiinkirjaus" -#: ../pidgin/gtkconv.c:3052 msgid "/Options/Enable _Sounds" msgstr "/Valinnat/S_oita merkkiäänet" -#: ../pidgin/gtkconv.c:3054 msgid "/Options/Show Formatting _Toolbars" msgstr "/Valinnat/Näytä muokkaus-_työkalurivit" -#: ../pidgin/gtkconv.c:3055 msgid "/Options/Show Ti_mestamps" msgstr "/Valinnat/Näytä aika_leima" -#: ../pidgin/gtkconv.c:3182 msgid "/Conversation/More" msgstr "/Keskustelu/Lisää" -#: ../pidgin/gtkconv.c:3238 msgid "/Options" msgstr "/Valinnat" @@ -15020,79 +10748,60 @@ #. Make sure the 'Conversation -> More' menuitems are regenerated whenever #. * the 'Conversation' menu pops up because the entries can change after the #. * conversation is created. -#: ../pidgin/gtkconv.c:3273 ../pidgin/gtkconv.c:3305 msgid "/Conversation" msgstr "/Keskustelu" -#: ../pidgin/gtkconv.c:3313 msgid "/Conversation/View Log" msgstr "/Keskustelu/Näytä loki..." -#: ../pidgin/gtkconv.c:3319 msgid "/Conversation/Send File..." msgstr "/Keskustelu/Lähetä tiedosto..." -#: ../pidgin/gtkconv.c:3323 msgid "/Conversation/Add Buddy Pounce..." msgstr "/Keskustelu/Lisää tuttavailmoitin..." -#: ../pidgin/gtkconv.c:3329 msgid "/Conversation/Get Info" msgstr "/Keskustelu/Hae tiedot..." -#: ../pidgin/gtkconv.c:3333 msgid "/Conversation/Invite..." msgstr "/Keskustelu/Kutsu..." -#: ../pidgin/gtkconv.c:3339 msgid "/Conversation/Alias..." msgstr "/Keskustelu/Lempinimi..." -#: ../pidgin/gtkconv.c:3343 msgid "/Conversation/Block..." msgstr "/Keskustelu/Estä..." -#: ../pidgin/gtkconv.c:3347 msgid "/Conversation/Unblock..." msgstr "/Keskustelu/Poista esto..." -#: ../pidgin/gtkconv.c:3351 msgid "/Conversation/Add..." msgstr "/Keskustelu/Lisää..." -#: ../pidgin/gtkconv.c:3355 msgid "/Conversation/Remove..." msgstr "/Keskustelu/Poista..." -#: ../pidgin/gtkconv.c:3361 msgid "/Conversation/Insert Link..." msgstr "/Keskustelu/Lisää linkki..." -#: ../pidgin/gtkconv.c:3365 msgid "/Conversation/Insert Image..." msgstr "/Keskustelu/Lisää kuva..." -#: ../pidgin/gtkconv.c:3371 msgid "/Options/Enable Logging" msgstr "/Valinnat/Lokiinkirjaus" -#: ../pidgin/gtkconv.c:3374 msgid "/Options/Enable Sounds" msgstr "/Valinnat/Soita merkkiäänet" -#: ../pidgin/gtkconv.c:3387 msgid "/Options/Show Formatting Toolbars" msgstr "/Valinnat/Näytä muokkaustyökalurivit" -#: ../pidgin/gtkconv.c:3390 msgid "/Options/Show Timestamps" msgstr "/Valinnat/Näytä aikaleima" -#: ../pidgin/gtkconv.c:3468 msgid "User is typing..." msgstr "Käyttäjä kirjoittaa..." -#: ../pidgin/gtkconv.c:3542 #, c-format msgid "" "\n" @@ -15102,526 +10811,377 @@ "%s on lopettanut kirjoittamisen" #. Build the Send To menu -#: ../pidgin/gtkconv.c:3722 ../pidgin/gtkconv.c:8482 msgid "S_end To" msgstr "Läh_etä henkilölle" -#: ../pidgin/gtkconv.c:4441 ../pidgin/plugins/sendbutton.c:44 msgid "_Send" msgstr "_Lähetä" #. Setup the label telling how many people are in the room. -#: ../pidgin/gtkconv.c:4600 msgid "0 people in room" msgstr "0 ihmistä huoneessa" -#: ../pidgin/gtkconv.c:5942 ../pidgin/gtkconv.c:6063 #, c-format msgid "%d person in room" msgid_plural "%d people in room" msgstr[0] "%d ihminen huoneessa" msgstr[1] "%d ihmistä huoneessa" -#: ../pidgin/gtkconv.c:6697 ../pidgin/gtkstatusbox.c:684 msgid "Typing" msgstr "Kirjoittaa" -#: ../pidgin/gtkconv.c:6701 msgid "Stopped Typing" msgstr "Lopetti kirjoittamisen" -#: ../pidgin/gtkconv.c:6704 msgid "Nick Said" msgstr "Sanoi" -#: ../pidgin/gtkconv.c:6707 ../pidgin/gtkdocklet.c:686 msgid "Unread Messages" msgstr "Lukemattomat viestit" -#: ../pidgin/gtkconv.c:6713 msgid "New Event" msgstr "Uusi tapahtuma" -#: ../pidgin/gtkconv.c:7954 msgid "clear: Clears all conversation scrollbacks." msgstr "clear: Tyhjentää kaikki keskustelut" -#: ../pidgin/gtkconv.c:8158 msgid "Confirm close" msgstr "Vahvista sulkeminen" -#: ../pidgin/gtkconv.c:8190 msgid "You have unread messages. Are you sure you want to close the window?" msgstr "" "Sinulla on lukemattomia viestejä. Haluatko varmasti sulkea tämän ikkunan?" -#: ../pidgin/gtkconv.c:8823 msgid "Close other tabs" msgstr "Sulje muut välilehdet" -#: ../pidgin/gtkconv.c:8829 msgid "Close all tabs" msgstr "Sulje kaikki välilehdet" -#: ../pidgin/gtkconv.c:8837 msgid "Detach this tab" msgstr "Irrota tämä välilehti" -#: ../pidgin/gtkconv.c:8843 msgid "Close this tab" msgstr "Sulje tämä välilehti" -#: ../pidgin/gtkconv.c:9365 msgid "Close conversation" msgstr "Sulje keskustelu" -#: ../pidgin/gtkconv.c:9969 msgid "Last created window" msgstr "Viimeksi luotu ikkuna" -#: ../pidgin/gtkconv.c:9971 msgid "Separate IM and Chat windows" msgstr "Näytä pikaviestit ja ryhmäkeskustelut eri ikkunoissa" -#: ../pidgin/gtkconv.c:9973 ../pidgin/gtkprefs.c:1576 msgid "New window" msgstr "Uusi ikkuna" -#: ../pidgin/gtkconv.c:9975 msgid "By group" msgstr "Ryhmän mukaan" -#: ../pidgin/gtkconv.c:9977 msgid "By account" msgstr "Tilin mukaan" -#: ../pidgin/gtkdebug.c:234 msgid "Save Debug Log" msgstr "Tallenna virheenjäljitysloki" -#: ../pidgin/gtkdebug.c:582 msgid "Invert" msgstr "Käännä" -#: ../pidgin/gtkdebug.c:585 msgid "Highlight matches" msgstr "Korosta osumat" -#: ../pidgin/gtkdebug.c:652 msgid "_Icon Only" msgstr "Vain _kuvake" -#: ../pidgin/gtkdebug.c:653 msgid "_Text Only" msgstr "Vain _teksti" -#: ../pidgin/gtkdebug.c:654 msgid "_Both Icon & Text" msgstr "_Sekä kuvake että teksti" -#: ../pidgin/gtkdebug.c:772 msgid "Filter" msgstr "Suodin" -#: ../pidgin/gtkdebug.c:791 msgid "Right click for more options." msgstr "Näytä lisää valintoja oikealla hiiren painikkeella." -#: ../pidgin/gtkdebug.c:821 msgid "Level " msgstr "Taso " -#: ../pidgin/gtkdebug.c:822 ../pidgin/gtkdebug.c:828 msgid "Select the debug filter level." msgstr "Valitse virheenjäljityssuodattimen taso." -#: ../pidgin/gtkdebug.c:830 msgid "All" msgstr "Kaikki" -#: ../pidgin/gtkdebug.c:831 msgid "Misc" msgstr "Muut" -#: ../pidgin/gtkdebug.c:833 msgid "Warning" msgstr "Varoitukset" -#: ../pidgin/gtkdebug.c:834 msgid "Error " msgstr "Virheet " -#: ../pidgin/gtkdebug.c:835 msgid "Fatal Error" msgstr "Vakavat virheet" -#: ../pidgin/gtkdialogs.c:72 ../pidgin/gtkdialogs.c:119 -msgid "lead developer" -msgstr "pääkehittäjä" - -#: ../pidgin/gtkdialogs.c:73 ../pidgin/gtkdialogs.c:74 -#: ../pidgin/gtkdialogs.c:75 ../pidgin/gtkdialogs.c:76 -#: ../pidgin/gtkdialogs.c:77 ../pidgin/gtkdialogs.c:78 -#: ../pidgin/gtkdialogs.c:79 ../pidgin/gtkdialogs.c:80 -#: ../pidgin/gtkdialogs.c:81 ../pidgin/gtkdialogs.c:82 -#: ../pidgin/gtkdialogs.c:83 ../pidgin/gtkdialogs.c:84 -#: ../pidgin/gtkdialogs.c:85 ../pidgin/gtkdialogs.c:86 -#: ../pidgin/gtkdialogs.c:87 ../pidgin/gtkdialogs.c:90 -#: ../pidgin/gtkdialogs.c:92 ../pidgin/gtkdialogs.c:93 -#: ../pidgin/gtkdialogs.c:94 msgid "developer" msgstr "kehittäjä" -#: ../pidgin/gtkdialogs.c:88 +#. feel free to not translate this +msgid "Ka-Hing Cheung" +msgstr "Ka-Hing Cheung" + msgid "support" msgstr "tuki" -#: ../pidgin/gtkdialogs.c:89 msgid "support/QA" msgstr "tuki/laadunvarmistus" -#: ../pidgin/gtkdialogs.c:91 ../pidgin/gtkdialogs.c:114 msgid "developer & webmaster" msgstr "kehittäjä & verkkosivujen ylläpitäjä" -#: ../pidgin/gtkdialogs.c:101 msgid "Senior Contributor/QA" msgstr "Vanhempi osallistuja/laadunvarmistus" -#: ../pidgin/gtkdialogs.c:110 msgid "win32 port" msgstr "win32-käännös" -#: ../pidgin/gtkdialogs.c:111 ../pidgin/gtkdialogs.c:112 msgid "maintainer" msgstr "ylläpitäjä" -#: ../pidgin/gtkdialogs.c:113 msgid "libfaim maintainer" msgstr "libfaim-ylläpitäjä" #. If "lazy bum" translates literally into a serious insult, use something else or omit it. -#: ../pidgin/gtkdialogs.c:116 msgid "hacker and designated driver [lazy bum]" msgstr "hakkeri ja kuski [laiska pummi]" -#: ../pidgin/gtkdialogs.c:117 msgid "XMPP developer" msgstr "XMPP-kehittäjä" -#: ../pidgin/gtkdialogs.c:118 msgid "original author" msgstr "alkuperäinen tekijä" -#: ../pidgin/gtkdialogs.c:134 +msgid "lead developer" +msgstr "pääkehittäjä" + msgid "Afrikaans" msgstr "afrikaans" -#: ../pidgin/gtkdialogs.c:135 ../pidgin/gtkdialogs.c:230 msgid "Arabic" msgstr "arabia" -#: ../pidgin/gtkdialogs.c:136 msgid "Belarusian Latin" msgstr "valkovenäjä latinalainen" -#: ../pidgin/gtkdialogs.c:137 ../pidgin/gtkdialogs.c:138 -#: ../pidgin/gtkdialogs.c:231 msgid "Bulgarian" msgstr "bulgaria" -#: ../pidgin/gtkdialogs.c:139 ../pidgin/gtkdialogs.c:140 -#: ../pidgin/gtkdialogs.c:141 ../pidgin/gtkdialogs.c:142 msgid "Bengali" msgstr "bengali" -#: ../pidgin/gtkdialogs.c:143 msgid "Bosnian" msgstr "bosnia" -#: ../pidgin/gtkdialogs.c:144 ../pidgin/gtkdialogs.c:232 -#: ../pidgin/gtkdialogs.c:233 msgid "Catalan" msgstr "katalaani" -#: ../pidgin/gtkdialogs.c:145 ../pidgin/gtkdialogs.c:146 msgid "Valencian-Catalan" msgstr "valencian katalaani" -#: ../pidgin/gtkdialogs.c:147 ../pidgin/gtkdialogs.c:234 -#: ../pidgin/gtkdialogs.c:235 msgid "Czech" msgstr "tšekki" -#: ../pidgin/gtkdialogs.c:148 ../pidgin/gtkdialogs.c:149 msgid "Danish" msgstr "tanska" -#: ../pidgin/gtkdialogs.c:150 ../pidgin/gtkdialogs.c:151 -#: ../pidgin/gtkdialogs.c:236 msgid "German" msgstr "saksa" -#: ../pidgin/gtkdialogs.c:152 ../pidgin/gtkdialogs.c:153 -#: ../pidgin/gtkdialogs.c:154 msgid "Dzongkha" msgstr "dzongkha" -#: ../pidgin/gtkdialogs.c:155 ../pidgin/gtkdialogs.c:156 msgid "Greek" msgstr "kreikka" -#: ../pidgin/gtkdialogs.c:157 msgid "Australian English" msgstr "australian englanti" -#: ../pidgin/gtkdialogs.c:158 msgid "Canadian English" msgstr "kanadan englanti" -#: ../pidgin/gtkdialogs.c:159 msgid "British English" msgstr "brittienglanti" -#: ../pidgin/gtkdialogs.c:160 msgid "Esperanto" msgstr "esperanto" -#: ../pidgin/gtkdialogs.c:161 ../pidgin/gtkdialogs.c:237 -#: ../pidgin/gtkdialogs.c:238 ../pidgin/gtkdialogs.c:239 -#: ../pidgin/gtkdialogs.c:240 msgid "Spanish" msgstr "espanja" -#: ../pidgin/gtkdialogs.c:162 msgid "Estonian" msgstr "viro" -#: ../pidgin/gtkdialogs.c:163 ../pidgin/gtkdialogs.c:164 msgid "Euskera(Basque)" msgstr "euskara (baski)" -#: ../pidgin/gtkdialogs.c:165 ../pidgin/gtkdialogs.c:166 -#: ../pidgin/gtkdialogs.c:167 msgid "Persian" msgstr "persia" -#: ../pidgin/gtkdialogs.c:168 ../pidgin/gtkdialogs.c:241 -#: ../pidgin/gtkdialogs.c:242 msgid "Finnish" msgstr "suomi" -#: ../pidgin/gtkdialogs.c:169 ../pidgin/gtkdialogs.c:243 -#: ../pidgin/gtkdialogs.c:244 ../pidgin/gtkdialogs.c:245 -#: ../pidgin/gtkdialogs.c:246 msgid "French" msgstr "ranska" -#: ../pidgin/gtkdialogs.c:170 ../pidgin/gtkdialogs.c:171 -#: ../pidgin/gtkdialogs.c:247 msgid "Galician" msgstr "galego" -#: ../pidgin/gtkdialogs.c:172 ../pidgin/gtkdialogs.c:173 msgid "Gujarati" msgstr "gudžarati" -#: ../pidgin/gtkdialogs.c:173 msgid "Gujarati Language Team" msgstr "Gujaratin kääntäjäryhmä" -#: ../pidgin/gtkdialogs.c:174 ../pidgin/gtkdialogs.c:248 msgid "Hebrew" msgstr "heprea" -#: ../pidgin/gtkdialogs.c:175 msgid "Hindi" msgstr "hindi" -#: ../pidgin/gtkdialogs.c:176 ../pidgin/gtkdialogs.c:249 msgid "Hungarian" msgstr "unkari" -#: ../pidgin/gtkdialogs.c:177 msgid "Indonesian" msgstr "indonesia" -#: ../pidgin/gtkdialogs.c:178 ../pidgin/gtkdialogs.c:250 msgid "Italian" msgstr "italia" -#: ../pidgin/gtkdialogs.c:179 ../pidgin/gtkdialogs.c:251 -#: ../pidgin/gtkdialogs.c:252 ../pidgin/gtkdialogs.c:253 msgid "Japanese" msgstr "japani" -#: ../pidgin/gtkdialogs.c:180 ../pidgin/gtkdialogs.c:254 msgid "Georgian" msgstr "georgia" -#: ../pidgin/gtkdialogs.c:180 msgid "Ubuntu Georgian Translators" msgstr "Ubuntun georgian kääntäjät" -#: ../pidgin/gtkdialogs.c:181 msgid "Kannada" msgstr "kannada" -#: ../pidgin/gtkdialogs.c:181 msgid "Kannada Translation team" msgstr "Kannadan kääntäjäryhmä" -#: ../pidgin/gtkdialogs.c:182 ../pidgin/gtkdialogs.c:255 -#: ../pidgin/gtkdialogs.c:256 msgid "Korean" msgstr "korea" -#: ../pidgin/gtkdialogs.c:183 ../pidgin/gtkdialogs.c:184 -#: ../pidgin/gtkdialogs.c:185 msgid "Kurdish" msgstr "kurdi" -#: ../pidgin/gtkdialogs.c:186 msgid "Lao" msgstr "lao" -#: ../pidgin/gtkdialogs.c:187 ../pidgin/gtkdialogs.c:257 -#: ../pidgin/gtkdialogs.c:258 msgid "Lithuanian" msgstr "liettua" -#: ../pidgin/gtkdialogs.c:188 ../pidgin/gtkdialogs.c:189 -#: ../pidgin/gtkdialogs.c:190 ../pidgin/gtkdialogs.c:259 msgid "Macedonian" msgstr "makedonia" -#: ../pidgin/gtkdialogs.c:191 ../pidgin/gtkdialogs.c:260 -#: ../pidgin/gtkdialogs.c:261 msgid "Bokmål Norwegian" msgstr "kirjanorja" -#: ../pidgin/gtkdialogs.c:192 msgid "Nepali" msgstr "nepal" -#: ../pidgin/gtkdialogs.c:193 msgid "Dutch, Flemish" msgstr "hollanti, flaami" -#: ../pidgin/gtkdialogs.c:194 msgid "Norwegian Nynorsk" msgstr "norja (uusnorja)" -#: ../pidgin/gtkdialogs.c:195 +msgid "Occitan" +msgstr "oksitaani" + msgid "Punjabi" msgstr "punjabi" -#: ../pidgin/gtkdialogs.c:196 ../pidgin/gtkdialogs.c:197 -#: ../pidgin/gtkdialogs.c:198 ../pidgin/gtkdialogs.c:262 msgid "Polish" msgstr "puola" -#: ../pidgin/gtkdialogs.c:199 msgid "Portuguese" msgstr "portugali" -#: ../pidgin/gtkdialogs.c:200 msgid "Portuguese-Brazil" msgstr "portugali (brasilialainen)" -#: ../pidgin/gtkdialogs.c:201 msgid "Pashto" msgstr "paštu" -#: ../pidgin/gtkdialogs.c:202 msgid "Romanian" msgstr "romania" -#: ../pidgin/gtkdialogs.c:203 ../pidgin/gtkdialogs.c:263 -#: ../pidgin/gtkdialogs.c:264 msgid "Russian" msgstr "venäjä" -#: ../pidgin/gtkdialogs.c:204 ../pidgin/gtkdialogs.c:205 -#: ../pidgin/gtkdialogs.c:265 ../pidgin/gtkdialogs.c:266 -#: ../pidgin/gtkdialogs.c:267 msgid "Slovak" msgstr "slovakki" -#: ../pidgin/gtkdialogs.c:206 ../pidgin/gtkdialogs.c:268 msgid "Slovenian" msgstr "sloveeni" -#: ../pidgin/gtkdialogs.c:207 msgid "Albanian" msgstr "albania" -#: ../pidgin/gtkdialogs.c:208 ../pidgin/gtkdialogs.c:209 -#: ../pidgin/gtkdialogs.c:269 ../pidgin/gtkdialogs.c:270 msgid "Serbian" msgstr "serbia" -#: ../pidgin/gtkdialogs.c:210 msgid "Sinhala" msgstr "sinhali" -#: ../pidgin/gtkdialogs.c:211 ../pidgin/gtkdialogs.c:271 -#: ../pidgin/gtkdialogs.c:272 msgid "Swedish" msgstr "ruotsi" -#: ../pidgin/gtkdialogs.c:212 msgid "Tamil" msgstr "tamil" -#: ../pidgin/gtkdialogs.c:213 msgid "Telugu" msgstr "telugu" -#: ../pidgin/gtkdialogs.c:214 msgid "Thai" msgstr "thai" -#: ../pidgin/gtkdialogs.c:215 ../pidgin/gtkdialogs.c:273 msgid "Turkish" msgstr "turkki" -#: ../pidgin/gtkdialogs.c:216 msgid "Urdu" msgstr "urdu" -#: ../pidgin/gtkdialogs.c:217 msgid "Vietnamese" msgstr "vietnam" -#: ../pidgin/gtkdialogs.c:217 msgid "T.M.Thanh and the Gnome-Vi Team" msgstr "T.M Thanh ja Gnomen Vi-työryhmä" -#: ../pidgin/gtkdialogs.c:218 ../pidgin/gtkdialogs.c:274 msgid "Simplified Chinese" msgstr "kiina (yksinkertaistettu)" -#: ../pidgin/gtkdialogs.c:219 ../pidgin/gtkdialogs.c:220 -#: ../pidgin/gtkdialogs.c:221 msgid "Hong Kong Chinese" msgstr "Hong Kongin kiina" -#: ../pidgin/gtkdialogs.c:222 ../pidgin/gtkdialogs.c:223 -#: ../pidgin/gtkdialogs.c:275 msgid "Traditional Chinese" msgstr "kiina (perinteinen)" -#: ../pidgin/gtkdialogs.c:229 msgid "Amharic" msgstr "amhara" -#: ../pidgin/gtkdialogs.c:360 #, c-format msgid "About %s" msgstr "Tietoja %sistä" -#: ../pidgin/gtkdialogs.c:396 #, c-format msgid "" "%s is a graphical modular messaging client based on libpurple which is " @@ -15645,95 +11205,72 @@ "luettelo osallistuneista löytyy \"COPYRIGHT\"-tiedostosta. Tekijät eivät " "anna ohjelmalle minkäänlaista takuuta.<BR><BR>" -#: ../pidgin/gtkdialogs.c:414 #, c-format msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" msgstr "" "<FONT SIZE=\"4\">IRC:</FONT> #pidgin palvelimella irc.freenode.net<BR><BR>" -#: ../pidgin/gtkdialogs.c:419 msgid "Current Developers" msgstr "Nykyiset kehittäjät" -#: ../pidgin/gtkdialogs.c:434 msgid "Crazy Patch Writers" msgstr "Villit korjauspäivitysten kirjoittajat" -#: ../pidgin/gtkdialogs.c:449 msgid "Retired Developers" msgstr "Lopettaneet kehittäjät" -#: ../pidgin/gtkdialogs.c:464 msgid "Retired Crazy Patch Writers" msgstr "Lopettaneet korjauspäivitysten kirjoittajat" -#: ../pidgin/gtkdialogs.c:479 msgid "Artists" msgstr "Graafikot" -#: ../pidgin/gtkdialogs.c:494 msgid "Current Translators" msgstr "Nykyiset kielenkääntäjät" -#: ../pidgin/gtkdialogs.c:514 msgid "Past Translators" msgstr "Aikaisemmat kielenkääntäjät" -#: ../pidgin/gtkdialogs.c:532 msgid "Debugging Information" msgstr "Virheenjäljitystietoja" -#: ../pidgin/gtkdialogs.c:748 ../pidgin/gtkdialogs.c:887 -#: ../pidgin/gtkdialogs.c:968 msgid "_Name" msgstr "_Nimi" -#: ../pidgin/gtkdialogs.c:753 ../pidgin/gtkdialogs.c:892 -#: ../pidgin/gtkdialogs.c:973 msgid "_Account" msgstr "_Käyttäjätili" -#: ../pidgin/gtkdialogs.c:900 msgid "Get User Info" msgstr "Hae käyttäjätiedot" -#: ../pidgin/gtkdialogs.c:902 msgid "" "Please enter the username or alias of the person whose info you would like " "to view." msgstr "" "Syötä sen henkilön käyttäjänimi tai lempinimi, jonka tiedot haluat nähdä." -#: ../pidgin/gtkdialogs.c:992 msgid "View User Log" msgstr "Näytä käyttäjäloki" -#: ../pidgin/gtkdialogs.c:1014 msgid "Alias Contact" msgstr "Anna kontaktiryhmälle lempinimi" -#: ../pidgin/gtkdialogs.c:1015 msgid "Enter an alias for this contact." msgstr "Anna lempinimi tälle kontaktiryhmälle." -#: ../pidgin/gtkdialogs.c:1037 #, c-format msgid "Enter an alias for %s." msgstr "Anna %s:n lempinimi." -#: ../pidgin/gtkdialogs.c:1039 msgid "Alias Buddy" msgstr "Anna tuttavalle lempinimi" -#: ../pidgin/gtkdialogs.c:1060 msgid "Alias Chat" msgstr "Anna ryhmäkeskustelulle lempinimi" -#: ../pidgin/gtkdialogs.c:1061 msgid "Enter an alias for this chat." msgstr "Syötä lempinimi tälle ryhmäkeskustelulle." -#: ../pidgin/gtkdialogs.c:1100 #, c-format msgid "" "You are about to remove the contact containing %s and %d other buddy from " @@ -15748,59 +11285,47 @@ "Olet poistamassa kontaktin, jossa on %s sekä %d muuta tuttavaa tuttavistasi. " "Haluatko jatkaa?" -#: ../pidgin/gtkdialogs.c:1108 msgid "Remove Contact" msgstr "Poista kontakti" -#: ../pidgin/gtkdialogs.c:1111 msgid "_Remove Contact" msgstr "_Poista kontakti" -#: ../pidgin/gtkdialogs.c:1142 #, c-format msgid "" "You are about to merge the group called %s into the group called %s. Do you " "want to continue?" msgstr "Olet yhdistämässä ryhmää \"%s\" ryhmään \"%s\". Haluatko jatkaa?" -#: ../pidgin/gtkdialogs.c:1149 msgid "Merge Groups" msgstr "Yhdistä ryhmät" -#: ../pidgin/gtkdialogs.c:1152 msgid "_Merge Groups" msgstr "_Yhdistä ryhmät" -#: ../pidgin/gtkdialogs.c:1202 #, c-format msgid "" "You are about to remove the group %s and all its members from your buddy " "list. Do you want to continue?" msgstr "Olet poistamassa ryhmää nimeltä \"%s\" tuttavistasi. Haluatko jatkaa?" -#: ../pidgin/gtkdialogs.c:1205 msgid "Remove Group" msgstr "Poista ryhmä" -#: ../pidgin/gtkdialogs.c:1208 msgid "_Remove Group" msgstr "_Poista ryhmä" -#: ../pidgin/gtkdialogs.c:1241 #, c-format msgid "" "You are about to remove %s from your buddy list. Do you want to continue?" msgstr "Olet poistamassa \"%s\":n tuttavistasi. Haluatko jatkaa?" -#: ../pidgin/gtkdialogs.c:1244 msgid "Remove Buddy" msgstr "Poista tuttava" -#: ../pidgin/gtkdialogs.c:1247 msgid "_Remove Buddy" msgstr "_Poista tuttava" -#: ../pidgin/gtkdialogs.c:1268 #, c-format msgid "" "You are about to remove the chat %s from your buddy list. Do you want to " @@ -15809,221 +11334,186 @@ "Olet poistamassa ryhmäkeskustelun nimeltä \"%s\" tuttavistasi. Haluatko " "jatkaa?" -#: ../pidgin/gtkdialogs.c:1271 msgid "Remove Chat" msgstr "Poista ryhmäkeskustelu" -#: ../pidgin/gtkdialogs.c:1274 msgid "_Remove Chat" msgstr "_Poista ryhmäkeskustelu" -#: ../pidgin/gtkdocklet.c:152 msgid "Right-click for more unread messages...\n" msgstr "Näytä lisää viestejä hiiren oikealla painikkeella...\n" -#: ../pidgin/gtkdocklet.c:533 -msgid "Change Status" -msgstr "Vaihda tila" - -#: ../pidgin/gtkdocklet.c:681 -msgid "Show Buddy List" -msgstr "Näytä tuttavat" - -#: ../pidgin/gtkdocklet.c:707 -msgid "New Message..." -msgstr "Uusi viesti..." - -#: ../pidgin/gtkdocklet.c:722 -msgid "Mute Sounds" -msgstr "Vaimenna äänet" - -#: ../pidgin/gtkdocklet.c:729 -msgid "Blink on New Message" -msgstr "Vilkuta uuden viestin saapuessa" - -#: ../pidgin/gtkdocklet.c:739 -msgid "Quit" -msgstr "Lopeta" - -#: ../pidgin/gtkft.c:154 +msgid "_Change Status" +msgstr "_Vaihda tila" + +msgid "Show Buddy _List" +msgstr "Näytä _tuttavat" + +msgid "_Unread Messages" +msgstr "L_ukemattomat viestit" + +msgid "New _Message..." +msgstr "Uusi _viesti..." + +msgid "_Accounts" +msgstr "_Käyttäjätilit" + +msgid "Plu_gins" +msgstr "Liitä_nnäiset" + +msgid "Pr_eferences" +msgstr "As_etukset" + +msgid "Mute _Sounds" +msgstr "Vaimenn_a äänet" + +msgid "_Blink on New Message" +msgstr "Vilkuta uuden viestin _saapuessa" + +msgid "_Quit" +msgstr "_Lopeta" + msgid "Not started" msgstr "Ei aloitettu" -#: ../pidgin/gtkft.c:274 msgid "<b>Receiving As:</b>" msgstr "<b>Otetaan vastaan käyttäjänä:</b>" -#: ../pidgin/gtkft.c:276 msgid "<b>Receiving From:</b>" msgstr "<b>Otetaan vastaan käyttäjältä:</b>" -#: ../pidgin/gtkft.c:280 msgid "<b>Sending To:</b>" msgstr "<b>Lähetetään:</b>" -#: ../pidgin/gtkft.c:282 msgid "<b>Sending As:</b>" msgstr "<b>Lähetetään käyttäjänä:</b>" -#: ../pidgin/gtkft.c:498 msgid "There is no application configured to open this type of file." msgstr "Ohjelmaa tämän tiedostotyypin avaamiseen ei ole asetettu." -#: ../pidgin/gtkft.c:503 msgid "An error occurred while opening the file." msgstr "Virhe tapahtui avattaessa tiedostoa." -#: ../pidgin/gtkft.c:540 #, c-format msgid "Error launching %s: %s" msgstr "Virhe käynnistettäessä %s: %s" -#: ../pidgin/gtkft.c:549 #, c-format msgid "Error running %s" msgstr "Virhe ajettaessa %s" -#: ../pidgin/gtkft.c:550 #, c-format msgid "Process returned error code %d" msgstr "Käsittele palautettu virhekoodi %d" -#: ../pidgin/gtkft.c:697 msgid "Filename:" msgstr "Tiedostonimi:" -#: ../pidgin/gtkft.c:698 msgid "Local File:" msgstr "Paikallinen tiedosto:" -#: ../pidgin/gtkft.c:700 msgid "Speed:" msgstr "Nopeus:" -#: ../pidgin/gtkft.c:701 msgid "Time Elapsed:" msgstr "Aikaa kulunut:" -#: ../pidgin/gtkft.c:702 msgid "Time Remaining:" msgstr "Aikaa jäljellä:" -#: ../pidgin/gtkft.c:781 msgid "Close this window when all transfers _finish" msgstr "Sulje tämä ikkuna kun kaikki siirrot ovat _valmiita" -#: ../pidgin/gtkft.c:791 msgid "C_lear finished transfers" msgstr "_Poista valmiit siirrot" #. "Download Details" arrow -#: ../pidgin/gtkft.c:800 msgid "File transfer _details" msgstr "Tiedostonsiirron yksityiskohdat" #. Pause button -#: ../pidgin/gtkft.c:818 ../pidgin/pidginstock.c:95 msgid "_Pause" msgstr "_Tauko" #. Resume button -#: ../pidgin/gtkft.c:823 msgid "_Resume" msgstr "_Jatka" -#: ../pidgin/gtkimhtml.c:842 msgid "Paste as Plain _Text" msgstr "Liimaa pelkkänä _tekstinä" -#: ../pidgin/gtkimhtml.c:859 ../pidgin/gtkimhtmltoolbar.c:1196 msgid "_Reset formatting" msgstr "_Poista muotoilu" -#: ../pidgin/gtkimhtml.c:867 msgid "Disable _smileys in selected text" msgstr "Ota hymiöt poi_s käytöstä valitussa tekstissä" -#: ../pidgin/gtkimhtml.c:1430 msgid "Hyperlink color" msgstr "Hyperlinkin väri" -#: ../pidgin/gtkimhtml.c:1431 msgid "Color to draw hyperlinks." msgstr "Väri jolla piirretään hyperlinkit" -#: ../pidgin/gtkimhtml.c:1434 msgid "Hyperlink prelight color" msgstr "Hyperlinkin ensiväri" -#: ../pidgin/gtkimhtml.c:1435 msgid "Color to draw hyperlinks when mouse is over them." msgstr "Väri jolla piirretään hyperlinkit kun hiiren kursori on niiden päällä." -#: ../pidgin/gtkimhtml.c:1438 ../pidgin/plugins/pidginrc.c:52 msgid "Sent Message Name Color" msgstr "Lähetetyn viestin nimen väri" -#: ../pidgin/gtkimhtml.c:1439 msgid "Color to draw the name of a message you sent." msgstr "Väri jolla näytetään lähetetyn viestin nimi." -#: ../pidgin/gtkimhtml.c:1442 ../pidgin/plugins/pidginrc.c:53 msgid "Received Message Name Color" msgstr "Vastaanotetun viestin nimen väri" -#: ../pidgin/gtkimhtml.c:1443 msgid "Color to draw the name of a message you received." msgstr "Väri jolla näytetään vastaanotetun viestin nimi." -#: ../pidgin/gtkimhtml.c:1446 msgid "\"Attention\" Name Color" msgstr "\"Huomio\"-ilmoituksen nimen väri" -#: ../pidgin/gtkimhtml.c:1447 msgid "Color to draw the name of a message you received containing your name." msgstr "Väri jolla näytetään nimesi sisältävän vastaanotetun viestin nimi." -#: ../pidgin/gtkimhtml.c:1450 ../pidgin/plugins/pidginrc.c:55 msgid "Action Message Name Color" msgstr "Toimintoviestin nimen väri" -#: ../pidgin/gtkimhtml.c:1451 msgid "Color to draw the name of an action message." msgstr "Väri jolla näytetään toimintoviestin nimi." -#: ../pidgin/gtkimhtml.c:1460 +msgid "Action Message Name Color for Whispered Message" +msgstr "Toimintoviestin nimen väri kuiskatulle viestille" + +msgid "Whisper Message Name Color" +msgstr "Kuiskatun viestin nimen väri" + msgid "Typing notification color" msgstr "Kirjoittamishuomautuksen väri" -#: ../pidgin/gtkimhtml.c:1461 msgid "The color to use for the typing notification font" msgstr "Väri jota käytetään kirjoittamishuomautuksen kirjasimessa" -#: ../pidgin/gtkimhtml.c:1464 msgid "Typing notification font" msgstr "Kirjoittamishuomautuksen kirjasin" -#: ../pidgin/gtkimhtml.c:1465 msgid "The font to use for the typing notification" msgstr "Kirjoittamishuomautukseen käytettävä kirjasin" -#: ../pidgin/gtkimhtml.c:1468 ../pidgin/gtkimhtml.c:1469 msgid "Enable typing notification" msgstr "Ota kirjoittamishuomautus käyttöön" -#: ../pidgin/gtkimhtml.c:1688 msgid "_Copy Email Address" msgstr "_Kopioi sähköpostiosoite" -#: ../pidgin/gtkimhtml.c:1700 msgid "_Open Link in Browser" msgstr "_Avaa linkki selaimessa" -#: ../pidgin/gtkimhtml.c:1710 msgid "_Copy Link Location" msgstr "_Kopioi linkin osoite" -#: ../pidgin/gtkimhtml.c:3482 msgid "" "<span size='larger' weight='bold'>Unrecognized file type</span>\n" "\n" @@ -16033,7 +11523,6 @@ "\n" "Oletetaan PNG-kuvaksi." -#: ../pidgin/gtkimhtml.c:3485 msgid "" "Unrecognized file type\n" "\n" @@ -16043,7 +11532,6 @@ "\n" "Oletetaan PNG-kuvaksi." -#: ../pidgin/gtkimhtml.c:3514 #, c-format msgid "" "<span size='larger' weight='bold'>Error saving image</span>\n" @@ -16054,7 +11542,6 @@ "\n" "%s" -#: ../pidgin/gtkimhtml.c:3517 #, c-format msgid "" "Error saving image\n" @@ -16065,36 +11552,32 @@ "\n" "%s" -#: ../pidgin/gtkimhtml.c:3598 ../pidgin/gtkimhtml.c:3610 msgid "Save Image" msgstr "Tallenna kuva" -#: ../pidgin/gtkimhtml.c:3638 #, c-format msgid "_Save Image..." msgstr "_Tallenna kuva nimellä..." -#: ../pidgin/gtkimhtmltoolbar.c:164 +#, c-format +msgid "_Add Custom Smiley..." +msgstr "_Lisää oma hymiö..." + msgid "Select Font" msgstr "Valitse kirjasin" -#: ../pidgin/gtkimhtmltoolbar.c:244 msgid "Select Text Color" msgstr "Valitse tekstin väri" -#: ../pidgin/gtkimhtmltoolbar.c:324 msgid "Select Background Color" msgstr "Valitse taustaväri" -#: ../pidgin/gtkimhtmltoolbar.c:413 msgid "_URL" msgstr "_URL" -#: ../pidgin/gtkimhtmltoolbar.c:421 msgid "_Description" msgstr "_Kuvaus" -#: ../pidgin/gtkimhtmltoolbar.c:424 msgid "" "Please enter the URL and description of the link that you want to insert. " "The description is optional." @@ -16102,163 +11585,135 @@ "Syötä URL, jonka haluat liittää, sekä sen kuvaus. \n" "Kuvaus on valinnainen." -#: ../pidgin/gtkimhtmltoolbar.c:428 msgid "Please enter the URL of the link that you want to insert." msgstr "Syötä URL jonka haluat liittää." -#: ../pidgin/gtkimhtmltoolbar.c:433 ../pidgin/gtkimhtmltoolbar.c:1103 msgid "Insert Link" msgstr "Lisää linkki" -#: ../pidgin/gtkimhtmltoolbar.c:437 ../pidgin/gtkimhtmltoolbar.c:1264 msgid "_Insert" msgstr "_Lisää" -#: ../pidgin/gtkimhtmltoolbar.c:518 #, c-format msgid "Failed to store image: %s\n" msgstr "Kuvan tallennus epäonnistui: %s\n" -#: ../pidgin/gtkimhtmltoolbar.c:544 ../pidgin/gtkimhtmltoolbar.c:554 msgid "Insert Image" msgstr "Liitä kuva" -#: ../pidgin/gtkimhtmltoolbar.c:712 +#, c-format +msgid "" +"This smiley is disabled because a custom smiley exists for this shortcut:\n" +" %s" +msgstr "" +"Tämä hymiö on pois käytöstä, koska tälle oikotielle on olemassa oma hymiö:\n" +" %s" + msgid "Smile!" msgstr "Hymyile!" -#: ../pidgin/gtkimhtmltoolbar.c:763 +msgid "_Manage custom smileys" +msgstr "_Hallitse omia hymiöitä" + msgid "This theme has no available smileys." msgstr "Tälle teemalle ei ole saatavissa hymiöitä." -#: ../pidgin/gtkimhtmltoolbar.c:847 ../pidgin/gtkimhtmltoolbar.c:1221 msgid "_Font" msgstr "Ki_rjasin" -#: ../pidgin/gtkimhtmltoolbar.c:1055 msgid "Group Items" msgstr "Ryhmittele kohteet" -#: ../pidgin/gtkimhtmltoolbar.c:1055 msgid "Ungroup Items" msgstr "Pura kohteiden ryhmitys" -#: ../pidgin/gtkimhtmltoolbar.c:1089 ../pidgin/plugins/convcolors.c:342 msgid "Bold" msgstr "Lihavoi" -#: ../pidgin/gtkimhtmltoolbar.c:1090 ../pidgin/plugins/convcolors.c:351 msgid "Italic" msgstr "Kursivoi" -#: ../pidgin/gtkimhtmltoolbar.c:1091 ../pidgin/plugins/convcolors.c:360 msgid "Underline" msgstr "Alleviivaa" -#: ../pidgin/gtkimhtmltoolbar.c:1092 msgid "Strikethrough" msgstr "Yliviivaa" -#: ../pidgin/gtkimhtmltoolbar.c:1094 msgid "Increase Font Size" msgstr "Suurenna kirjasimen kokoa" -#: ../pidgin/gtkimhtmltoolbar.c:1095 msgid "Decrease Font Size" msgstr "Pienennä kirjasimen kokoa" -#: ../pidgin/gtkimhtmltoolbar.c:1097 msgid "Font Face" msgstr "Kirjasintyyppi" -#: ../pidgin/gtkimhtmltoolbar.c:1098 msgid "Background Color" msgstr "Taustaväri" -#: ../pidgin/gtkimhtmltoolbar.c:1099 msgid "Foreground Color" msgstr "Etualaväri" -#: ../pidgin/gtkimhtmltoolbar.c:1101 msgid "Reset Formatting" msgstr "Poista muotoilu" -#: ../pidgin/gtkimhtmltoolbar.c:1104 msgid "Insert IM Image" msgstr "Lisää IM-kuva" -#: ../pidgin/gtkimhtmltoolbar.c:1105 msgid "Insert Smiley" msgstr "Lisää hymiö" -#: ../pidgin/gtkimhtmltoolbar.c:1181 msgid "<b>_Bold</b>" msgstr "<b>_Lihavoi</b>" -#: ../pidgin/gtkimhtmltoolbar.c:1182 msgid "<i>_Italic</i>" msgstr "<i>_Kursivoi</i>" -#: ../pidgin/gtkimhtmltoolbar.c:1183 msgid "<u>_Underline</u>" msgstr "<u>_Alleviivaa</u>" -#: ../pidgin/gtkimhtmltoolbar.c:1184 msgid "<span strikethrough='true'>Strikethrough</span>" msgstr "<span strikethrough='true'>Yliviivaa</span>" -#: ../pidgin/gtkimhtmltoolbar.c:1185 msgid "<span size='larger'>_Larger</span>" msgstr "<span size='larger'>_Suurempi</span>" -#: ../pidgin/gtkimhtmltoolbar.c:1187 msgid "_Normal" msgstr "_Normaali" -#: ../pidgin/gtkimhtmltoolbar.c:1189 msgid "<span size='smaller'>_Smaller</span>" msgstr "<span size='smaller'>_Pienempi</span>" #. If we want to show the formatting for the following items, we would #. * need to update them when formatting changes. The above items don't need #. * no updating nor nothin' -#: ../pidgin/gtkimhtmltoolbar.c:1193 msgid "_Font face" msgstr "Ki_rjasintyyppi" -#: ../pidgin/gtkimhtmltoolbar.c:1194 msgid "Foreground _color" msgstr "Etuala_väri" -#: ../pidgin/gtkimhtmltoolbar.c:1195 msgid "Bac_kground color" msgstr "_Taustaväri" -#: ../pidgin/gtkimhtmltoolbar.c:1272 msgid "_Image" msgstr "Ku_va" -#: ../pidgin/gtkimhtmltoolbar.c:1278 msgid "_Link" msgstr "_Linkki" -#: ../pidgin/gtkimhtmltoolbar.c:1284 msgid "_Horizontal rule" msgstr "_Vaakaviiva" -#: ../pidgin/gtkimhtmltoolbar.c:1306 msgid "_Smile!" msgstr "_Hymyile!" -#: ../pidgin/gtklog.c:245 msgid "Log Deletion Failed" msgstr "Lokin poistaminen epäonnistui" -#: ../pidgin/gtklog.c:246 msgid "Check permissions and try again." msgstr "Tarkista oikeudet ja yritä uudelleen." -#: ../pidgin/gtklog.c:292 #, c-format msgid "" "Are you sure you want to permanently delete the log of the conversation with " @@ -16267,7 +11722,6 @@ "Haluatko varmasti poistaa käyttäjän %s kanssa käydyn viestilokin joka alkoi %" "s?" -#: ../pidgin/gtklog.c:303 #, c-format msgid "" "Are you sure you want to permanently delete the log of the conversation in %" @@ -16275,43 +11729,35 @@ msgstr "" "Haluatko varmasti poistaa kohteessa %s käydyn viestilokin joka alkoi %s?" -#: ../pidgin/gtklog.c:308 #, c-format msgid "" "Are you sure you want to permanently delete the system log which started at %" "s?" msgstr "Haluatko varmasti poistaa järjestelmälokin joka alkoi %s?" -#: ../pidgin/gtklog.c:323 msgid "Delete Log?" msgstr "Poista loki?" -#: ../pidgin/gtklog.c:334 msgid "Delete Log..." msgstr "Poista loki..." -#: ../pidgin/gtklog.c:453 #, c-format msgid "<span size='larger' weight='bold'>Conversation in %s on %s</span>" msgstr "<span size='larger' weight='bold'>Keskustelu huoneessa %s: %s</span>" -#: ../pidgin/gtklog.c:456 #, c-format msgid "<span size='larger' weight='bold'>Conversation with %s on %s</span>" msgstr "" "<span size='larger' weight='bold'>Keskustelu käyttäjän %s kanssa %s</span>" #. Steal the "HELP" response and use it to trigger browsing to the logs folder -#: ../pidgin/gtklog.c:581 msgid "_Browse logs folder" msgstr "_Selaa lokikansiota" -#: ../pidgin/gtkmain.c:386 #, c-format msgid "%s %s. Try `%s -h' for more information.\n" msgstr "%s %s. Kirjoita \"%s -h\" saadaksesi lisää tietoja.\n" -#: ../pidgin/gtkmain.c:389 #, c-format msgid "" "%s %s\n" @@ -16342,7 +11788,6 @@ " --display=NÄYTTÖ käytettävä X-näyttö\n" " -v, --version näytä nykyinen versionumero ja poistu\n" -#: ../pidgin/gtkmain.c:402 #, c-format msgid "" "%s %s\n" @@ -16371,7 +11816,6 @@ " Ilman tätä vain ensimmäinen tili otetaan käyttöön).\n" " -v, --version näytä nykyinen versionumero ja poistu\n" -#: ../pidgin/gtkmain.c:532 #, c-format msgid "" "%s %s has segfaulted and attempted to dump a core file.\n" @@ -16412,69 +11856,54 @@ #. Translators may want to transliterate the name. #. It is not to be translated. -#: ../pidgin/gtkmain.c:726 ../pidgin/pidgin.h:51 msgid "Pidgin" msgstr "Pidgin" -#: ../pidgin/gtknotify.c:360 msgid "Open All Messages" msgstr "Avaa kaikki viestit" -#: ../pidgin/gtknotify.c:414 msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>" msgstr "<span weight=\"bold\" size=\"larger\">Sinulle on postia!</span>" -#: ../pidgin/gtknotify.c:563 #, c-format msgid "%s has %d new message." msgid_plural "%s has %d new messages." msgstr[0] "%s:lla on %d uusi viesti." msgstr[1] "%s:lla on %d uutta viestiä." -#: ../pidgin/gtknotify.c:587 #, c-format msgid "<b>%d new email.</b>" msgid_plural "<b>%d new emails.</b>" msgstr[0] "<b>%d uusi sähköposti.</b>" msgstr[1] "<b>%d uutta sähköpostia.</b>" -#: ../pidgin/gtknotify.c:1021 #, c-format msgid "The browser command \"%s\" is invalid." msgstr "Selainkomento \"%s\" on virheellinen." -#: ../pidgin/gtknotify.c:1023 ../pidgin/gtknotify.c:1035 -#: ../pidgin/gtknotify.c:1048 ../pidgin/gtknotify.c:1185 msgid "Unable to open URL" msgstr "URL:n avaaminen epäonnistui" -#: ../pidgin/gtknotify.c:1033 ../pidgin/gtknotify.c:1046 #, c-format msgid "Error launching \"%s\": %s" msgstr "Virhe käynnistettäessä \"%s\": %s" -#: ../pidgin/gtknotify.c:1186 msgid "" "The 'Manual' browser command has been chosen, but no command has been set." msgstr "Oma selainkomento -asetus valittu, mutta komentoa ei ole asetettu." -#: ../pidgin/gtkplugin.c:278 msgid "The following plugins will be unloaded." msgstr "Seuraavat liitännäiset otetaan pois käytöstä." -#: ../pidgin/gtkplugin.c:297 msgid "Multiple plugins will be unloaded." msgstr "Useita liitännäisiä otetaan pois käytöstä." -#: ../pidgin/gtkplugin.c:301 msgid "Unload Plugins" msgstr "Poista liitännäiset käytöstä" -#: ../pidgin/gtkplugin.c:318 msgid "Could not unload plugin" msgstr "Liitännäistä ei voi poistaa käytöstä" -#: ../pidgin/gtkplugin.c:319 msgid "" "The plugin could not be unloaded now, but will be disabled at the next " "startup." @@ -16482,7 +11911,6 @@ "Liitännäistä ei voi poistaa käytöstä nyt, mutta se poistetaan käytöstä " "seuraavalla käynnistymiskerralla." -#: ../pidgin/gtkplugin.c:454 #, c-format msgid "" "<span foreground=\"red\" weight=\"bold\">Error: %s\n" @@ -16491,136 +11919,103 @@ "<span foreground=\"red\" weight=\"bold\">Virhe: %s\n" "Tarkista onko liitännäisen WWW-sivustolla päivitystä.</span>" -#: ../pidgin/gtkplugin.c:583 msgid "Author" msgstr "Tekijä" -#: ../pidgin/gtkplugin.c:661 msgid "<b>Written by:</b>" msgstr "<b>Tekijät:</b>" -#: ../pidgin/gtkplugin.c:685 msgid "<b>Web site:</b>" msgstr "<b>WWW-sivut:</b> " -#: ../pidgin/gtkplugin.c:694 msgid "<b>Filename:</b>" msgstr "<b>Tiedostonimi:</b>" -#: ../pidgin/gtkplugin.c:720 msgid "Configure Pl_ugin" msgstr "Liitännäisen _asetukset" -#: ../pidgin/gtkplugin.c:788 msgid "<b>Plugin Details</b>" msgstr "<b>Liitännäisen yksityiskohdat</b>" -#: ../pidgin/gtkpounce.c:157 msgid "Select a file" msgstr "Valitse tiedosto" #. Create the "Pounce on Whom" frame. -#: ../pidgin/gtkpounce.c:539 msgid "Pounce on Whom" msgstr "Kenestä ilmoitetaan" -#: ../pidgin/gtkpounce.c:566 msgid "_Buddy name:" msgstr "_Tuttavan nimi:" -#: ../pidgin/gtkpounce.c:600 msgid "Si_gns on" msgstr "_kirjautuu sisään" -#: ../pidgin/gtkpounce.c:602 msgid "Signs o_ff" msgstr "kirjautuu _ulos" -#: ../pidgin/gtkpounce.c:604 msgid "Goes a_way" msgstr "poi_stuu" -#: ../pidgin/gtkpounce.c:606 msgid "Ret_urns from away" msgstr "_palaa" -#: ../pidgin/gtkpounce.c:608 msgid "Becomes _idle" msgstr "on _jouten" -#: ../pidgin/gtkpounce.c:610 msgid "Is no longer i_dle" msgstr "ei enää ole j_outen" -#: ../pidgin/gtkpounce.c:612 msgid "Starts _typing" msgstr "_alkaa kirjoittaa" -#: ../pidgin/gtkpounce.c:614 msgid "P_auses while typing" msgstr "_keskeyttää kirjoittamisen" -#: ../pidgin/gtkpounce.c:616 msgid "Stops t_yping" msgstr "lope_ttaa kirjoittamisen" -#: ../pidgin/gtkpounce.c:618 msgid "Sends a _message" msgstr "lähettää _viestin" -#: ../pidgin/gtkpounce.c:661 msgid "Ope_n an IM window" msgstr "Avaa pikav_iesti-ikkuna" -#: ../pidgin/gtkpounce.c:663 msgid "_Pop up a notification" msgstr "_Ponnahdusilmoitus" -#: ../pidgin/gtkpounce.c:665 msgid "Send a _message" msgstr "Lähetä _viesti" -#: ../pidgin/gtkpounce.c:667 msgid "E_xecute a command" msgstr "Suorita _komento" -#: ../pidgin/gtkpounce.c:669 msgid "P_lay a sound" msgstr "S_oita ääni" -#: ../pidgin/gtkpounce.c:675 msgid "Brows_e..." msgstr "_Selaa" -#: ../pidgin/gtkpounce.c:677 msgid "Br_owse..." msgstr "S_elaa" -#: ../pidgin/gtkpounce.c:678 msgid "Pre_view" msgstr "_Esikatselu" -#: ../pidgin/gtkpounce.c:810 msgid "P_ounce only when my status is not Available" msgstr "I_lmoita vain kun tilani ei ole Tavoitettavissa" -#: ../pidgin/gtkpounce.c:815 msgid "_Recurring" msgstr "_Toistuva" -#: ../pidgin/gtkpounce.c:1259 msgid "Pounce Target" msgstr "Ilmoituksen kohde" -#: ../pidgin/gtkprefs.c:458 msgid "Smiley theme failed to unpack." msgstr "Hymiöteeman purkaminen epäonnistui." -#: ../pidgin/gtkprefs.c:593 msgid "Install Theme" msgstr "Asenna teema" -#: ../pidgin/gtkprefs.c:646 msgid "" "Select a smiley theme that you would like to use from the list below. New " "themes can be installed by dragging and dropping them onto the theme list." @@ -16628,148 +12023,112 @@ "Valitse haluamasi hymiöteema alla olevasta listasta. Uudet teemat voi " "asentaa vedä&pudota-menetelmällä pudottamalla ne teemalistaan." -#: ../pidgin/gtkprefs.c:681 msgid "Icon" msgstr "Kuvake" -#: ../pidgin/gtkprefs.c:894 msgid "Keyboard Shortcuts" msgstr "Pikanäppäimet" -#: ../pidgin/gtkprefs.c:914 msgid "Cl_ose conversations with the Escape key" msgstr "S_ulje keskustelut Escape-näppäimellä" -#: ../pidgin/gtkprefs.c:943 msgid "System Tray Icon" msgstr "Ilmoitusalueen kuvake" -#: ../pidgin/gtkprefs.c:944 msgid "_Show system tray icon:" msgstr "_Näytä ilmoitusalueen kuvake:" -#: ../pidgin/gtkprefs.c:947 msgid "On unread messages" msgstr "Kun lukemattomia viestejä" -#: ../pidgin/gtkprefs.c:953 msgid "Conversation Window Hiding" msgstr "Keskusteluikkunan piilottaminen" -#: ../pidgin/gtkprefs.c:954 msgid "_Hide new IM conversations:" msgstr "_Piilota uudet pikaviestikeskustelut:" -#: ../pidgin/gtkprefs.c:957 ../pidgin/gtkprefs.c:2075 msgid "When away" msgstr "Poissaollessa" #. All the tab options! -#: ../pidgin/gtkprefs.c:965 msgid "Tabs" msgstr "Välilehdet" -#: ../pidgin/gtkprefs.c:967 msgid "Show IMs and chats in _tabbed windows" msgstr "Näytä pikaviestit ja ryhmäkeskustelut _jaetuissa ikkunoissa" -#: ../pidgin/gtkprefs.c:981 msgid "Show close b_utton on tabs" msgstr "Näytä _sulkemispainikkeet välilehdissä" -#: ../pidgin/gtkprefs.c:984 msgid "_Placement:" msgstr "_Asettelu:" -#: ../pidgin/gtkprefs.c:986 msgid "Top" msgstr "Ylhäällä" -#: ../pidgin/gtkprefs.c:987 msgid "Bottom" msgstr "Alhaalla" -#: ../pidgin/gtkprefs.c:988 msgid "Left" msgstr "Vasemmalla" -#: ../pidgin/gtkprefs.c:989 msgid "Right" msgstr "Oikealla" -#: ../pidgin/gtkprefs.c:991 msgid "Left Vertical" msgstr "Vasemmalla pystysuuntaisesti" -#: ../pidgin/gtkprefs.c:992 msgid "Right Vertical" msgstr "Oikealla pystysuuntaisesti" -#: ../pidgin/gtkprefs.c:999 msgid "N_ew conversations:" msgstr "_Uudet keskustelut:" -#: ../pidgin/gtkprefs.c:1048 msgid "Show _formatting on incoming messages" msgstr "Näytä _muotoilu tulevissa viesteissä" -#: ../pidgin/gtkprefs.c:1050 msgid "Close IMs immediately when the tab is closed" msgstr "Sulje pikaviestit heti kun välilehti on suljettu" -#: ../pidgin/gtkprefs.c:1053 msgid "Show _detailed information" msgstr "Näytä _yksityiskohtaiset tiedot" -#: ../pidgin/gtkprefs.c:1055 msgid "Enable buddy ic_on animation" msgstr "Näytä tuttavakuvakkeen a_nimaatio" -#: ../pidgin/gtkprefs.c:1062 msgid "_Notify buddies that you are typing to them" msgstr "Ilmoita tuttaville kun _kirjoitat heille" -#: ../pidgin/gtkprefs.c:1065 msgid "Highlight _misspelled words" msgstr "Korosta _väärinkirjoitetut sanat" -#: ../pidgin/gtkprefs.c:1069 msgid "Use smooth-scrolling" msgstr "Käytä portaatonta tekstinvieritystä" -#: ../pidgin/gtkprefs.c:1072 msgid "F_lash window when IMs are received" msgstr "_Vilkuta ikkunaa pikaviestien saapuessa" -#: ../pidgin/gtkprefs.c:1074 msgid "Minimi_ze new conversation windows" msgstr "Piene_nnä uudet keskusteluikkunat" -#: ../pidgin/gtkprefs.c:1078 msgid "Minimum input area height in lines:" msgstr "Kirjoitusalueen pienin korkeus riveissä:" -#: ../pidgin/gtkprefs.c:1084 msgid "Font" msgstr "Kirjasin" -#: ../pidgin/gtkprefs.c:1086 msgid "Use document font from _theme" msgstr "Käytä asiakirjojen kirjasinta _teemasta" -#: ../pidgin/gtkprefs.c:1088 msgid "Use font from _theme" msgstr "Käytä kirjasinta _teemasta" -#: ../pidgin/gtkprefs.c:1094 msgid "Conversation _font:" msgstr "Keskustelujen _kirjasin:" -#: ../pidgin/gtkprefs.c:1101 msgid "Default Formatting" msgstr "Oletusmuotoilu" -#: ../pidgin/gtkprefs.c:1120 msgid "" "This is how your outgoing message text will appear when you use protocols " "that support formatting." @@ -16777,63 +12136,48 @@ "Tältä ulosmenevä viesti näyttää kun käytät yhteyskäytäntöä joka tukee " "muotoiluja." -#: ../pidgin/gtkprefs.c:1180 msgid "Cannot start proxy configuration program." msgstr "Välipalvelimen asetusohjelmaa ei voi käynnistää." -#: ../pidgin/gtkprefs.c:1192 msgid "Cannot start browser configuration program." msgstr "Selaimen asetusohjelmaa ei voi käynnistää." -#: ../pidgin/gtkprefs.c:1212 msgid "ST_UN server:" msgstr "ST_UN-palvelin:" -#: ../pidgin/gtkprefs.c:1224 msgid "<span style=\"italic\">Example: stunserver.org</span>" msgstr "<span style=\"italic\">Esimerkki: stunserver.org</span>" -#: ../pidgin/gtkprefs.c:1228 msgid "_Autodetect IP address" msgstr "_Hae IP-osoite automaattisesti" -#: ../pidgin/gtkprefs.c:1237 msgid "Public _IP:" msgstr "Julkinen _IP:" -#: ../pidgin/gtkprefs.c:1268 msgid "Ports" msgstr "Portit" -#: ../pidgin/gtkprefs.c:1271 msgid "_Enable automatic router port forwarding" msgstr "_Ota käyttöön automaattinen reitittimen porttien uudelleenohjaus" -#: ../pidgin/gtkprefs.c:1274 msgid "_Manually specify range of ports to listen on" msgstr "_Aseta kuunneltava porttialue" -#: ../pidgin/gtkprefs.c:1277 msgid "_Start port:" msgstr "_Ensimmäinen portti:" -#: ../pidgin/gtkprefs.c:1284 msgid "_End port:" msgstr "Viimeinen _portti:" -#: ../pidgin/gtkprefs.c:1292 msgid "Proxy Server & Browser" msgstr "Välipalvelin & selain" -#: ../pidgin/gtkprefs.c:1300 msgid "<b>Proxy configuration program was not found.</b>" msgstr "<b>Välipalvelimen asetusohjelmaa ei löydy.</b>" -#: ../pidgin/gtkprefs.c:1308 msgid "<b>Browser configuration program was not found.</b>" msgstr "<b>Selaimen asetusohjelmaa ei löydy.</b>" -#: ../pidgin/gtkprefs.c:1313 msgid "" "Proxy & Browser preferences are configured\n" "in GNOME Preferences" @@ -16841,99 +12185,75 @@ "Välipalvelimen & selaimen asetukset määritetään \n" "Gnomen asetuksissa" -#: ../pidgin/gtkprefs.c:1320 msgid "Configure _Proxy" msgstr "Aseta _välipalvelin" -#: ../pidgin/gtkprefs.c:1325 msgid "Configure _Browser" msgstr "Aseta _selain" -#: ../pidgin/gtkprefs.c:1331 msgid "Proxy Server" msgstr "Välipalvelin" -#: ../pidgin/gtkprefs.c:1336 msgid "No proxy" msgstr "Ei välipalvelinta" -#: ../pidgin/gtkprefs.c:1392 msgid "_User:" msgstr "_Käyttäjä:" -#: ../pidgin/gtkprefs.c:1480 msgid "Seamonkey" msgstr "Seamonkey" -#: ../pidgin/gtkprefs.c:1481 msgid "Opera" msgstr "Opera" -#: ../pidgin/gtkprefs.c:1482 msgid "Netscape" msgstr "Netscape" -#: ../pidgin/gtkprefs.c:1483 msgid "Mozilla" msgstr "Mozilla" -#: ../pidgin/gtkprefs.c:1484 msgid "Konqueror" msgstr "Konqueror" -#: ../pidgin/gtkprefs.c:1485 msgid "Desktop Default" msgstr "Työpöydän oletus" -#: ../pidgin/gtkprefs.c:1486 msgid "GNOME Default" msgstr "Gnomen oletus" -#: ../pidgin/gtkprefs.c:1487 msgid "Galeon" msgstr "Galeon" -#: ../pidgin/gtkprefs.c:1488 msgid "Firefox" msgstr "Firefox" -#: ../pidgin/gtkprefs.c:1489 msgid "Firebird" msgstr "Firebird" -#: ../pidgin/gtkprefs.c:1490 msgid "Epiphany" msgstr "Epiphany" -#: ../pidgin/gtkprefs.c:1499 msgid "Manual" msgstr "Oma komento" -#: ../pidgin/gtkprefs.c:1560 msgid "Browser Selection" msgstr "Selaimen valinta" -#: ../pidgin/gtkprefs.c:1564 msgid "_Browser:" msgstr "_Selain:" -#: ../pidgin/gtkprefs.c:1572 msgid "_Open link in:" msgstr "_Avaa linkki:" -#: ../pidgin/gtkprefs.c:1574 msgid "Browser default" msgstr "Selaimen oletus" -#: ../pidgin/gtkprefs.c:1575 msgid "Existing window" msgstr "Olemassaolevaan ikkunaan" -#: ../pidgin/gtkprefs.c:1577 msgid "New tab" msgstr "Uuteen välilehteen" -#: ../pidgin/gtkprefs.c:1594 #, c-format msgid "" "_Manual:\n" @@ -16942,69 +12262,54 @@ "_Komento:\n" "(URL:ksi %s)" -#: ../pidgin/gtkprefs.c:1620 msgid "Log _format:" msgstr "Lokin _muoto:" -#: ../pidgin/gtkprefs.c:1625 msgid "Log all _instant messages" msgstr "Kirjaa kaikki pikaviestit _lokiin" -#: ../pidgin/gtkprefs.c:1627 msgid "Log all c_hats" msgstr "Kirjaa kaikki ryhmä_keskustelut lokiin" -#: ../pidgin/gtkprefs.c:1629 msgid "Log all _status changes to system log" msgstr "Kirjaa kaikki _tilamuutokset järjestelmälokiin" -#: ../pidgin/gtkprefs.c:1779 msgid "Sound Selection" msgstr "Äänivalinta" -#: ../pidgin/gtkprefs.c:1789 #, c-format msgid "Quietest" msgstr "Hiljaisin" -#: ../pidgin/gtkprefs.c:1791 #, c-format msgid "Quieter" msgstr "Hiljaisempi" -#: ../pidgin/gtkprefs.c:1793 #, c-format msgid "Quiet" msgstr "Hiljainen" -#: ../pidgin/gtkprefs.c:1797 #, c-format msgid "Loud" msgstr "Äänekäs" -#: ../pidgin/gtkprefs.c:1799 #, c-format msgid "Louder" msgstr "Äänekkäämpi" -#: ../pidgin/gtkprefs.c:1801 #, c-format msgid "Loudest" msgstr "Äänekkäin" -#: ../pidgin/gtkprefs.c:1864 msgid "_Method:" msgstr "_Menetelmä:" -#: ../pidgin/gtkprefs.c:1866 msgid "Console beep" msgstr "Konsoliäänimerkki" -#: ../pidgin/gtkprefs.c:1873 msgid "No sounds" msgstr "Ei ääniä" -#: ../pidgin/gtkprefs.c:1886 #, c-format msgid "" "Sound c_ommand:\n" @@ -17013,278 +12318,258 @@ "Äänik_omento:\n" "(%s tiedostonimeksi)" -#: ../pidgin/gtkprefs.c:1895 msgid "Sounds when conversation has _focus" msgstr "Äänet kun keskusteluikkuna on _aktiivinen" -#: ../pidgin/gtkprefs.c:1897 msgid "Enable sounds:" msgstr "Ota äänet käyttöön:" -#: ../pidgin/gtkprefs.c:1914 msgid "Volume:" msgstr "Äänenvoimakkuus:" -#: ../pidgin/gtkprefs.c:1981 msgid "Play" msgstr "Soita" -#: ../pidgin/gtkprefs.c:2058 +msgid "_Browse..." +msgstr "_Selaa..." + +msgid "_Reset" +msgstr "_Nollaa" + msgid "_Report idle time:" msgstr "_Ilmoita joutenoloaika:" -#: ../pidgin/gtkprefs.c:2063 msgid "Based on keyboard or mouse use" msgstr "Perustuen näppäimistön tai hiiren käyttöön" -#: ../pidgin/gtkprefs.c:2072 msgid "_Auto-reply:" msgstr "_Automaattivastaus:" -#: ../pidgin/gtkprefs.c:2076 msgid "When both away and idle" msgstr "Poissa ja jouten ollessa" #. Auto-away stuff -#: ../pidgin/gtkprefs.c:2082 msgid "Auto-away" msgstr "Automaattinen poissaoloasetus" -#: ../pidgin/gtkprefs.c:2084 msgid "Change status when _idle" msgstr "Vaihda tila, kun ollaan _jouten" -#: ../pidgin/gtkprefs.c:2088 msgid "_Minutes before becoming idle:" msgstr "_Minuutteja ennen jouten olevaksi asettamista:" -#: ../pidgin/gtkprefs.c:2095 msgid "Change _status to:" msgstr "Vaihda tila seuraavaksi:" #. Signon status stuff -#: ../pidgin/gtkprefs.c:2108 msgid "Status at Startup" msgstr "Tila käynnistettäessä" -#: ../pidgin/gtkprefs.c:2110 msgid "Use status from last _exit at startup" msgstr "Käytä viimeksi poistuttaessa ollutta tilaa" -#: ../pidgin/gtkprefs.c:2117 msgid "Status to a_pply at startup:" msgstr "Tila jota _käytetään käynnistettäessä:" -#: ../pidgin/gtkprefs.c:2146 msgid "Interface" msgstr "Käyttöliittymä" -#: ../pidgin/gtkprefs.c:2148 msgid "Smiley Themes" msgstr "Hymiöteemat" -#: ../pidgin/gtkprefs.c:2155 msgid "Browser" msgstr "Selain" -#: ../pidgin/gtkprefs.c:2159 msgid "Status / Idle" msgstr "Tila / jouten" -#: ../pidgin/gtkprivacy.c:81 msgid "Allow all users to contact me" msgstr "Salli kaikkien käyttäjien ottaa minuun yhteyttä" -#: ../pidgin/gtkprivacy.c:82 msgid "Allow only the users on my buddy list" msgstr "Salli vain käyttäjät tuttavissa" -#: ../pidgin/gtkprivacy.c:83 msgid "Allow only the users below" msgstr "Salli vain alla olevat käyttäjät" -#: ../pidgin/gtkprivacy.c:84 msgid "Block all users" msgstr "Estä kaikki käyttäjät" -#: ../pidgin/gtkprivacy.c:85 msgid "Block only the users below" msgstr "Estä vain alla olevat käyttäjät" -#: ../pidgin/gtkprivacy.c:352 msgid "Privacy" msgstr "Yksityisyys" -#: ../pidgin/gtkprivacy.c:362 msgid "Changes to privacy settings take effect immediately." msgstr "Muutokset yksityisyysasetuksiin tulevat voimaan heti." -#: ../pidgin/gtkprivacy.c:371 msgid "Set privacy for:" msgstr "Yksityisyysasetukset tilille:" #. Remove All button -#: ../pidgin/gtkprivacy.c:417 msgid "Remove Al_l" msgstr "Poista kaik_ki" -#: ../pidgin/gtkprivacy.c:503 ../pidgin/gtkprivacy.c:520 msgid "Permit User" msgstr "Salli käyttäjä" -#: ../pidgin/gtkprivacy.c:504 msgid "Type a user you permit to contact you." msgstr "Kirjoita tuttavan nimi jonka valtuutat ottamaan yhteyttä sinuun." -#: ../pidgin/gtkprivacy.c:505 msgid "Please enter the name of the user you wish to be able to contact you." msgstr "Syötä käyttäjän nimi, jonka tahdot voivan ottaa sinuun yhteyttä." -#: ../pidgin/gtkprivacy.c:508 ../pidgin/gtkprivacy.c:524 msgid "_Permit" msgstr "_Salli" -#: ../pidgin/gtkprivacy.c:514 #, c-format msgid "Allow %s to contact you?" msgstr "Sallitaanko %s:n yhteydenotot?" -#: ../pidgin/gtkprivacy.c:516 #, c-format msgid "Are you sure you wish to allow %s to contact you?" msgstr "Sallitaanko varmasti %s:n yhteydenotot?" -#: ../pidgin/gtkprivacy.c:545 ../pidgin/gtkprivacy.c:559 msgid "Block User" msgstr "Estä käyttäjää" -#: ../pidgin/gtkprivacy.c:546 msgid "Type a user to block." msgstr "Kirjoita estettävä käyttäjä." -#: ../pidgin/gtkprivacy.c:547 msgid "Please enter the name of the user you wish to block." msgstr "Kirjoita käyttäjän nimi jonka tahdot estää ottamasta yhteyttä." -#: ../pidgin/gtkprivacy.c:555 #, c-format msgid "Block %s?" msgstr "Estetäänkö %s?" -#: ../pidgin/gtkprivacy.c:557 #, c-format msgid "Are you sure you want to block %s?" msgstr "Haluatko varmasti estää %s?" -#: ../pidgin/gtkrequest.c:274 msgid "Apply" msgstr "Toteuta" -#: ../pidgin/gtkrequest.c:1504 msgid "That file already exists" msgstr "Tiedosto on jo olemassa" -#: ../pidgin/gtkrequest.c:1505 msgid "Would you like to overwrite it?" msgstr "Haluatko korvata sen?" -#: ../pidgin/gtkrequest.c:1508 msgid "Overwrite" msgstr "Korvaa" -#: ../pidgin/gtkrequest.c:1509 msgid "Choose New Name" msgstr "Valitse uusi nimi" -#: ../pidgin/gtkrequest.c:1650 ../pidgin/gtkrequest.c:1664 msgid "Select Folder..." msgstr "Valitse kansio..." #. list button -#: ../pidgin/gtkroomlist.c:577 msgid "_Get List" msgstr "_Hae luettelo" #. add button -#: ../pidgin/gtkroomlist.c:585 msgid "_Add Chat" msgstr "_Lisää ryhmäkeskustelu" -#: ../pidgin/gtksavedstatuses.c:337 msgid "Are you sure you want to delete the selected saved statuses?" msgstr "Haluatko varmasti poistaa valitut tallennetut tilat?" #. Use button -#: ../pidgin/gtksavedstatuses.c:616 ../pidgin/gtksavedstatuses.c:1229 msgid "_Use" msgstr "_Käytä" -#: ../pidgin/gtksavedstatuses.c:765 msgid "Title already in use. You must choose a unique title." msgstr "Otsikko on käytössä. Sinun täytyy valita yksilöllinen otsikko." -#: ../pidgin/gtksavedstatuses.c:961 msgid "Different" msgstr "Eriävyys" -#: ../pidgin/gtksavedstatuses.c:1153 msgid "_Title:" msgstr "_Otsikko" -#: ../pidgin/gtksavedstatuses.c:1161 ../pidgin/gtksavedstatuses.c:1453 msgid "_Status:" msgstr "_Tila:" #. Different status message expander -#: ../pidgin/gtksavedstatuses.c:1177 msgid "Use a _different status for some accounts" msgstr "Käytä eri tilaa joillekin käyttäjätileille" #. Save & Use button -#: ../pidgin/gtksavedstatuses.c:1236 msgid "Sa_ve & Use" msgstr "Tallenna ja _käytä" -#: ../pidgin/gtksavedstatuses.c:1437 #, c-format msgid "Status for %s" msgstr "%s:n tila" -#: ../pidgin/gtkstatusbox.c:688 +msgid "Custom Smiley" +msgstr "Oma hymiö" + +msgid "Duplicate Shortcut" +msgstr "Monista oikotie" + +msgid "" +"A custom smiley for the selected shortcut already exists. Please specify a " +"different shortcut." +msgstr "Valitulle oikotielle on jo oma hymiö. Valitse toisenlainen oikotie." + +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 "Edit Smiley" +msgstr "Muokkaa hymiötä" + +msgid "Add Smiley" +msgstr "Lisää hymiö" + +msgid "Smiley _Image" +msgstr "Hymiön kuva" + +#. Smiley shortcut +msgid "Smiley S_hortcut" +msgstr "Hymiön _oikotie" + +msgid "Smiley" +msgstr "Hymiö" + +msgid "Custom Smiley Manager" +msgstr "Omien hymiöiden hallinta" + msgid "Waiting for network connection" msgstr "Odotetaan verkkoyhteyttä" -#: ../pidgin/gtkstatusbox.c:1101 msgid "New status..." msgstr "Uusi tila..." -#: ../pidgin/gtkstatusbox.c:1102 msgid "Saved statuses..." msgstr "Tallennetut tilat..." -#: ../pidgin/gtkstatusbox.c:1737 msgid "Status Selector" msgstr "Tilan valinta" -#: ../pidgin/gtkutils.c:683 msgid "Google Talk" msgstr "Google Talk" -#: ../pidgin/gtkutils.c:1450 ../pidgin/gtkutils.c:1473 #, c-format msgid "The following error has occurred loading %s: %s" msgstr "Seuraava virhe esiintyi ladattaessa komponenttia %s: %s" -#: ../pidgin/gtkutils.c:1453 ../pidgin/gtkutils.c:1475 msgid "Failed to load image" msgstr "Kuvan avaus epäonnistui" -#: ../pidgin/gtkutils.c:1549 #, c-format msgid "Cannot send folder %s." msgstr "Kansiota %s ei voi lähettää." -#: ../pidgin/gtkutils.c:1550 #, c-format msgid "" "%s cannot transfer a folder. You will need to send the files within " @@ -17293,12 +12578,9 @@ "%s ei voi siirtää kansiota. Kansion sisältämät tiedostot täytyy lähettää " "erikseen." -#: ../pidgin/gtkutils.c:1584 ../pidgin/gtkutils.c:1596 -#: ../pidgin/gtkutils.c:1603 msgid "You have dragged an image" msgstr "Olet raahannut kuvan" -#: ../pidgin/gtkutils.c:1585 msgid "" "You can send this image as a file transfer, embed it into this message, or " "use it as the buddy icon for this user." @@ -17306,23 +12588,18 @@ "Voit lähettää tämän kuvan tiedostonsiirtona, sisällyttää sen tähän viestiin " "tai käyttää sitä tuttavakuvakkeena tälle käyttäjälle." -#: ../pidgin/gtkutils.c:1591 ../pidgin/gtkutils.c:1611 msgid "Set as buddy icon" msgstr "Aseta tuttavakuvakkeeksi" -#: ../pidgin/gtkutils.c:1592 ../pidgin/gtkutils.c:1612 msgid "Send image file" msgstr "Lähetä kuvatiedosto" -#: ../pidgin/gtkutils.c:1593 ../pidgin/gtkutils.c:1612 msgid "Insert in message" msgstr "Liitä viestiin" -#: ../pidgin/gtkutils.c:1597 msgid "Would you like to set it as the buddy icon for this user?" msgstr "Haluatko asettaa sen tuttavakuvakkeeksi tälle käyttäjälle?" -#: ../pidgin/gtkutils.c:1604 msgid "" "You can send this image as a file transfer, or use it as the buddy icon for " "this user." @@ -17330,7 +12607,6 @@ "Voit lähettää tämän kuvan tiedostonsiirtona tai käyttää sitä " "tuttavakuvakkeena tälle käyttäjälle." -#: ../pidgin/gtkutils.c:1605 msgid "" "You can insert this image into this message, or use it as the buddy icon for " "this user" @@ -17343,11 +12619,9 @@ #. * send. The only logical one is "Application," but do we really want to send a binary and nothing else? #. * Probably not. I'll just give an error and return. #. The original patch sent the icon used by the launcher. That's probably wrong -#: ../pidgin/gtkutils.c:1664 msgid "Cannot send launcher" msgstr "Käynnistintä ei voi lähettää" -#: ../pidgin/gtkutils.c:1664 msgid "" "You dragged a desktop launcher. Most likely you wanted to send whatever this " "launcher points to instead of this launcher itself." @@ -17355,7 +12629,6 @@ "Raahasit työpöytäkäynnistimen. Luultavasti halusit lähettää tiedoston johon " "käynnistin osoittaa, käynnistimen itsensä sijaan." -#: ../pidgin/gtkutils.c:2402 #, c-format msgid "" "<b>File:</b> %s\n" @@ -17366,25 +12639,20 @@ "<b>Tiedoston koko:</b> %s\n" "<b>Kuvan koko:</b> %d × %d" -#: ../pidgin/gtkutils.c:2704 #, c-format msgid "The file '%s' is too large for %s. Please try a smaller image.\n" msgstr "Tiedosto \"%s\" on liian suuri \"%s\":lle. Kokeile pienempää kuvaa.\n" -#: ../pidgin/gtkutils.c:2706 msgid "Icon Error" msgstr "Kuvakevirhe" -#: ../pidgin/gtkutils.c:2707 msgid "Could not set icon" msgstr "Kuvaketta ei voi asettaa" -#: ../pidgin/gtkutils.c:2807 #, c-format msgid "Failed to open file '%s': %s" msgstr "Tiedostoa \"%s\" ei voi avata: %s" -#: ../pidgin/gtkutils.c:2856 #, c-format msgid "" "Failed to load image '%s': reason not known, probably a corrupt image file" @@ -17392,83 +12660,63 @@ "Kuvaa \"%s\" ei voi ladata: syy ei ole tiedossa, mahdollisesti vioittunut " "kuvatiedosto" -#: ../pidgin/gtkwhiteboard.c:754 ../pidgin/gtkwhiteboard.c:773 msgid "Save File" msgstr "Tallenna tiedosto" -#: ../pidgin/gtkwhiteboard.c:861 msgid "Select color" msgstr "Valitse väri" -#: ../pidgin/pidginstock.c:87 msgid "_Alias" msgstr "_Lempinimi" -#: ../pidgin/pidginstock.c:89 msgid "Close _tabs" msgstr "Sulje _välilehdet" -#: ../pidgin/pidginstock.c:91 msgid "_Get Info" msgstr "_Hae tiedot" -#: ../pidgin/pidginstock.c:92 msgid "_Invite" msgstr "_Kutsu" -#: ../pidgin/pidginstock.c:93 msgid "_Modify" msgstr "_Muokkaa" -#: ../pidgin/pidginstock.c:94 msgid "_Open Mail" msgstr "_Avaa sähköposti" -#: ../pidgin/pidgintooltip.c:100 msgid "Pidgin Tooltip" msgstr "Pidgin-työkaluvihje" -#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:2 msgid "Pidgin smileys" msgstr "Pidgin-hymiöt" -#: ../pidgin/pixmaps/emotes/none/none.theme.in.h:1 msgid "Penguin Pimps" msgstr "Penguin Pimps" -#: ../pidgin/pixmaps/emotes/none/none.theme.in.h:2 msgid "Selecting this disables graphical emoticons." msgstr "Tämän valitseminen ottaa graafiset hymiöt pois käytöstä" -#: ../pidgin/pixmaps/emotes/none/none.theme.in.h:3 msgid "none" msgstr "ei mitään" -#: ../pidgin/plugins/cap/cap.c:441 ../pidgin/plugins/cap/cap.c:444 msgid "Response Probability:" msgstr "Vastaustodennäköisyys:" -#: ../pidgin/plugins/cap/cap.c:769 msgid "Statistics Configuration" msgstr "Tilastoinnin asetukset" #. msg_difference spinner -#: ../pidgin/plugins/cap/cap.c:772 msgid "Maximum response timeout:" msgstr "Suurin vastauksen aikakatkaisu:" -#: ../pidgin/plugins/cap/cap.c:775 ../pidgin/plugins/cap/cap.c:782 -#: ../pidgin/plugins/cap/cap.c:789 ../pidgin/plugins/timestamp.c:148 msgid "minutes" msgstr "minuuttia" #. last_seen spinner -#: ../pidgin/plugins/cap/cap.c:779 msgid "Maximum last-seen difference:" msgstr "Suurin viimeksi-nähty -arvon ero:" #. threshold spinner -#: ../pidgin/plugins/cap/cap.c:786 msgid "Threshold:" msgstr "Kynnys:" @@ -17478,58 +12726,46 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/cap/cap.c:894 msgid "Contact Availability Prediction" msgstr "Tuttavan paikallaolon ennustus" #. *< name #. *< version -#: ../pidgin/plugins/cap/cap.c:896 msgid "Contact Availability Prediction plugin." msgstr "Tuttavan paikallaolon ennustava liitännäinen." #. * summary -#: ../pidgin/plugins/cap/cap.c:897 msgid "Displays statistical information about your buddies' availability" msgstr "Näyttää tilastotietoja tuttavien läsnäolosta" -#: ../pidgin/plugins/contact_priority.c:61 msgid "Buddy is idle" msgstr "Tuttava on jouten" -#: ../pidgin/plugins/contact_priority.c:62 msgid "Buddy is away" msgstr "Tuttava on poissa" -#: ../pidgin/plugins/contact_priority.c:63 msgid "Buddy is \"extended\" away" msgstr "Tuttava on \"pidennetysti\" poissa" #. Not used yet. -#: ../pidgin/plugins/contact_priority.c:66 msgid "Buddy is mobile" msgstr "Tuttava on liikkeellä" -#: ../pidgin/plugins/contact_priority.c:68 msgid "Buddy is offline" msgstr "Tuttava on poissa linjoilta" -#: ../pidgin/plugins/contact_priority.c:90 msgid "Point values to use when..." msgstr "Pistearvoja käytetään kun..." -#: ../pidgin/plugins/contact_priority.c:118 msgid "" "The buddy with the <i>largest score</i> is the buddy who will have priority " "in the contact.\n" msgstr "" "Tuttava, jolla on <i>suurin pistemäärä</i>, on tärkein kontaktiryhmässä.\n" -#: ../pidgin/plugins/contact_priority.c:125 msgid "Use last buddy when scores are equal" msgstr "Käytä viimeisintä tuttavaa, kun pisteet ovat samat" -#: ../pidgin/plugins/contact_priority.c:130 msgid "Point values to use for account..." msgstr "Käytettävät pistearvot käyttäjätilille..." @@ -17539,20 +12775,17 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/contact_priority.c:188 msgid "Contact Priority" msgstr "Kontaktin tärkeys" #. *< name #. *< version #. *< summary -#: ../pidgin/plugins/contact_priority.c:191 msgid "" "Allows for controlling the values associated with different buddy states." msgstr "Mahdollistaa tuttavan tila-arvojen hallinnan" #. *< description -#: ../pidgin/plugins/contact_priority.c:193 msgid "" "Allows for changing the point values of idle/away/offline states for buddies " "in contact priority computations." @@ -17560,61 +12793,47 @@ "Mahdollistaa pistearvojen muuttamisen jouten/poissa/poissa linjoilta -" "tiloille kontaktiryhmän prioriteettilaskelmia varten." -#: ../pidgin/plugins/convcolors.c:23 msgid "Conversation Colors" msgstr "Keskustelun värit" -#: ../pidgin/plugins/convcolors.c:25 ../pidgin/plugins/convcolors.c:26 msgid "Customize colors in the conversation window" msgstr "Aseta keskusteluikkunan värit" -#: ../pidgin/plugins/convcolors.c:87 msgid "Error Messages" msgstr "Virheilmoitukset" -#: ../pidgin/plugins/convcolors.c:88 msgid "Highlighted Messages" msgstr "Korostetut" -#: ../pidgin/plugins/convcolors.c:89 msgid "System Messages" msgstr "Järjestelmäviestit" -#: ../pidgin/plugins/convcolors.c:90 msgid "Sent Messages" msgstr "Lähetetyt viestit" -#: ../pidgin/plugins/convcolors.c:91 msgid "Received Messages" msgstr "Vastaanotetut viestit" -#: ../pidgin/plugins/convcolors.c:223 ../pidgin/plugins/pidginrc.c:257 #, c-format msgid "Select Color for %s" msgstr "Valitse %s:n väri" -#: ../pidgin/plugins/convcolors.c:372 msgid "Ignore incoming format" msgstr "Älä välitä sisääntulevien viestien muotoiluista" -#: ../pidgin/plugins/convcolors.c:373 msgid "Apply in Chats" msgstr "Käytä asetuksia ryhmäkeskusteluissa" -#: ../pidgin/plugins/convcolors.c:374 msgid "Apply in IMs" msgstr "Käytä asetuksia pikaviesteissä" -#: ../pidgin/plugins/extplacement.c:80 msgid "By conversation count" msgstr "Keskustelujen määrän mukaan" -#: ../pidgin/plugins/extplacement.c:101 msgid "Conversation Placement" msgstr "Keskustelun asettelu" #. Translators: "New conversations" should match the text in the preferences dialog and "By conversation count" should be the same text used above -#: ../pidgin/plugins/extplacement.c:105 msgid "" "Note: The preference for \"New conversations\" must be set to \"By " "conversation count\"." @@ -17622,11 +12841,9 @@ "Huom: \"Uudet keskustelut\" -asetuksen tulisi olla asetettu seuraavaksi: " "\"Keskustelujen määrän mukaan\"." -#: ../pidgin/plugins/extplacement.c:111 msgid "Number of conversations per window" msgstr "Keskustelujen määrä per ikkuna" -#: ../pidgin/plugins/extplacement.c:117 msgid "Separate IM and Chat windows when placing by number" msgstr "Erota pikaviesti- ja ryhmäkeskusteluikkunat aseteltaessa määrän mukaan" @@ -17636,19 +12853,16 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/extplacement.c:146 msgid "ExtPlacement" msgstr "Lisäasettelu" #. *< name #. *< version -#: ../pidgin/plugins/extplacement.c:148 msgid "Extra conversation placement options." msgstr "Keskustelun lisäasetteluvalinnat." #. *< summary #. * description -#: ../pidgin/plugins/extplacement.c:150 msgid "" "Restrict the number of conversations per windows, optionally separating IMs " "and Chats" @@ -17657,20 +12871,16 @@ "pikaviesti- ja ryhmäkeskustelut" #. Configuration frame -#: ../pidgin/plugins/gestures/gestures.c:235 msgid "Mouse Gestures Configuration" msgstr "Hiirieleasetukset" -#: ../pidgin/plugins/gestures/gestures.c:242 msgid "Middle mouse button" msgstr "Keskimmäinen hiiren painike" -#: ../pidgin/plugins/gestures/gestures.c:247 msgid "Right mouse button" msgstr "Oikea hiiren painike" #. "Visual gesture display" checkbox -#: ../pidgin/plugins/gestures/gestures.c:259 msgid "_Visual gesture display" msgstr "_Visuaalinen ele -näyttö" @@ -17680,19 +12890,16 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/gestures/gestures.c:295 msgid "Mouse Gestures" msgstr "Hiirieleet" #. *< name #. *< version #. * summary -#: ../pidgin/plugins/gestures/gestures.c:298 msgid "Provides support for mouse gestures" msgstr "Lisää tuen hiirieleille" #. * description -#: ../pidgin/plugins/gestures/gestures.c:300 msgid "" "Allows support for mouse gestures in conversation windows. Drag the middle " "mouse button to perform certain actions:\n" @@ -17707,34 +12914,25 @@ "Liikuta ylös ja sitten vasemmalle vaihtaaksesi edelliseen keskusteluun.\n" "Liikuta ylös ja sitten oikealle vaihtaaksesi seuraavaan keskusteluun." -#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:143 msgid "Instant Messaging" msgstr "Pikaviestintä" #. Add the label. -#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:461 msgid "Select a person from your address book below, or add a new person." msgstr "Valitse henkilö alla olevasta osoitekirjasta, tai lisää uusi henkilö." -#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:555 -#: ../pidgin/plugins/gevolution/new_person_dialog.c:305 msgid "Group:" msgstr "Ryhmä:" #. "New Person" button -#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:580 -#: ../pidgin/plugins/gevolution/assoc-buddy.c:467 -#: ../pidgin/plugins/gevolution/new_person_dialog.c:252 msgid "New Person" msgstr "Uusi henkilö" #. "Select Buddy" button -#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:597 msgid "Select Buddy" msgstr "Valitse tuttava" #. Add the label. -#: ../pidgin/plugins/gevolution/assoc-buddy.c:343 msgid "" "Select a person from your address book to add this buddy to, or create a new " "person." @@ -17743,43 +12941,33 @@ "henkilö." #. Add the expander -#: ../pidgin/plugins/gevolution/assoc-buddy.c:431 msgid "User _details" msgstr "Käyttäjän tiedot" #. "Associate Buddy" button -#: ../pidgin/plugins/gevolution/assoc-buddy.c:484 msgid "_Associate Buddy" msgstr "_Yhdistä tuttava" -#: ../pidgin/plugins/gevolution/gevolution.c:242 -#: ../pidgin/plugins/gevolution/gevolution.c:248 msgid "Unable to send email" msgstr "Sähköpostia ei voi lähettää." -#: ../pidgin/plugins/gevolution/gevolution.c:243 msgid "The evolution executable was not found in the PATH." msgstr "Suoritettava evolution-tiedosto ei löytynyt PATH-muuttujasta." -#: ../pidgin/plugins/gevolution/gevolution.c:249 msgid "An email address was not found for this buddy." msgstr "Tälle tuttavalle ei löytynyt sähköpostiosoitetta." -#: ../pidgin/plugins/gevolution/gevolution.c:275 msgid "Add to Address Book" msgstr "Lisää osoitekirjaan" -#: ../pidgin/plugins/gevolution/gevolution.c:287 msgid "Send Email" msgstr "Lähetä sähköposti" #. Configuration frame -#: ../pidgin/plugins/gevolution/gevolution.c:414 msgid "Evolution Integration Configuration" msgstr "Evolution-integraatioasetukset" #. Label -#: ../pidgin/plugins/gevolution/gevolution.c:417 msgid "Select all accounts that buddies should be auto-added to." msgstr "Valitse kaikki tilit, joihin tuttavat lisätään automaattisesti." @@ -17789,7 +12977,6 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/gevolution/gevolution.c:529 msgid "Evolution Integration" msgstr "Evolution-integrointi" @@ -17797,37 +12984,28 @@ #. *< version #. * summary #. * description -#: ../pidgin/plugins/gevolution/gevolution.c:532 -#: ../pidgin/plugins/gevolution/gevolution.c:534 msgid "Provides integration with Evolution." msgstr "Mahdollistaa integroinnin Evolutionin kanssa." -#: ../pidgin/plugins/gevolution/new_person_dialog.c:266 msgid "Please enter the person's information below." msgstr "Syötä henkilön tiedot alle." -#: ../pidgin/plugins/gevolution/new_person_dialog.c:270 msgid "Please enter the buddy's username and account type below." msgstr "Syötä tuttavan käyttäjänimi ja käyttäjätilin tyyppi alla." -#: ../pidgin/plugins/gevolution/new_person_dialog.c:290 msgid "Account type:" msgstr "Käyttäjätilin tyyppi:" #. Optional Information section -#: ../pidgin/plugins/gevolution/new_person_dialog.c:313 msgid "Optional information:" msgstr "Valinnaisia tietoja:" -#: ../pidgin/plugins/gevolution/new_person_dialog.c:348 msgid "First name:" msgstr "Etunimi:" -#: ../pidgin/plugins/gevolution/new_person_dialog.c:360 msgid "Last name:" msgstr "Sukunimi:" -#: ../pidgin/plugins/gevolution/new_person_dialog.c:380 msgid "Email:" msgstr "Sähköposti:" @@ -17837,7 +13015,6 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/gtk-signals-test.c:160 msgid "GTK Signals Test" msgstr "GTK-signaalitesti" @@ -17845,13 +13022,10 @@ #. *< version #. * summary #. * description -#: ../pidgin/plugins/gtk-signals-test.c:163 -#: ../pidgin/plugins/gtk-signals-test.c:165 msgid "Test to see that all ui signals are working properly." msgstr "" "Kokeile nähdäksesi, että kaikki käyttöliittymäsignaalit toimivat oikein." -#: ../pidgin/plugins/gtkbuddynote.c:36 #, c-format msgid "" "\n" @@ -17860,7 +13034,6 @@ "\n" "<b>Tuttavakommentti:</b> %s" -#: ../pidgin/plugins/history.c:195 msgid "History" msgstr "Historia" @@ -17870,7 +13043,6 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/iconaway.c:82 msgid "Iconify on Away" msgstr "Pienennä poissa ollessa" @@ -17878,47 +13050,36 @@ #. *< version #. * summary #. * description -#: ../pidgin/plugins/iconaway.c:85 ../pidgin/plugins/iconaway.c:87 msgid "Iconifies the buddy list and your conversations when you go away." msgstr "Pienentää tuttavat- ja keskusteluikkunan poissaolon ajaksi." -#: ../pidgin/plugins/mailchk.c:160 msgid "Mail Checker" msgstr "Sähköpostitarkistin" -#: ../pidgin/plugins/mailchk.c:162 msgid "Checks for new local mail." msgstr "Tarkistaa paikallisen koneen sähköpostin." -#: ../pidgin/plugins/mailchk.c:163 msgid "Adds a small box to the buddy list that shows if you have new mail." msgstr "Lisää pienen neliön tuttaviin, joka ilmoittaa uudesta sähköpostista." -#: ../pidgin/plugins/markerline.c:23 msgid "Markerline" msgstr "Merkintäviiva" -#: ../pidgin/plugins/markerline.c:25 ../pidgin/plugins/markerline.c:26 msgid "Draw a line to indicate new messages in a conversation." msgstr "Piirrä viiva merkitsemään uusia viestejä keskustelussa." -#: ../pidgin/plugins/markerline.c:240 msgid "Jump to markerline" msgstr "Siirry merkintäviivaan" -#: ../pidgin/plugins/markerline.c:274 msgid "Draw Markerline in " msgstr "Piirrä merkintäviiva " -#: ../pidgin/plugins/markerline.c:278 ../pidgin/plugins/notify.c:693 msgid "_IM windows" msgstr "_Pikaviesti-ikkunoille" -#: ../pidgin/plugins/markerline.c:282 ../pidgin/plugins/notify.c:700 msgid "C_hat windows" msgstr "_Ryhmäkeskusteluikkunoille" -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:44 msgid "" "A music messaging session has been requested. Please click the MM icon to " "accept." @@ -17926,36 +13087,28 @@ "Musiikkiviestintäistunto pyydetty aloitettavaksi. Napsauta MM-kuvaketta " "hyväksyäksesi pyynnön." -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:45 msgid "Music messaging session confirmed." msgstr "Musiikkiviestintäistunto varmistettu." -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:430 msgid "Music Messaging" msgstr "Musiikkiviestintä" -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:431 msgid "There was a conflict in running the command:" msgstr "Tapahtui virhe suoritettaessa komentoa:" -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:539 msgid "Error Running Editor" msgstr "Virhe ajettaessa muokkainta" -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:540 msgid "The following error has occurred:" msgstr "Seuraava virhe tapahtui:" #. Configuration frame -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:639 msgid "Music Messaging Configuration" msgstr "Musiikkiviestinnän asetukset" -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:643 msgid "Score Editor Path" msgstr "Sävellysmuokkaimen polku" -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:644 msgid "_Apply" msgstr "_Toteuta" @@ -17967,12 +13120,10 @@ #. *< id #. *< name #. *< version -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:685 msgid "Music Messaging Plugin for collaborative composition." msgstr "Musiikkiviestintäliitännäinen yhdessä säveltämistä varten." #. * summary -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:687 msgid "" "The Music Messaging Plugin allows a number of users to simultaneously work " "on a piece of music by editting a common score in real-time." @@ -17982,79 +13133,63 @@ "reaaliaikaisesti." #. ---------- "Notify For" ---------- -#: ../pidgin/plugins/notify.c:689 msgid "Notify For" msgstr "Huomautus" -#: ../pidgin/plugins/notify.c:708 msgid "\t_Only when someone says your username" msgstr "\t_Vain kun joku sanoo käyttäjänimesi" -#: ../pidgin/plugins/notify.c:718 msgid "_Focused windows" msgstr "_Kohdistetuille ikkunoille" #. ---------- "Notification Methods" ---------- -#: ../pidgin/plugins/notify.c:726 msgid "Notification Methods" msgstr "Ilmoitustavat" -#: ../pidgin/plugins/notify.c:733 msgid "Prepend _string into window title:" msgstr "Lisää _merkkijono ikkunaotsikon eteen:" #. Count method button -#: ../pidgin/plugins/notify.c:752 msgid "Insert c_ount of new messages into window title" msgstr "Lisää uusien _viestien määrä ikkunaotsikkoon" #. Count xprop method button -#: ../pidgin/plugins/notify.c:761 msgid "Insert count of new message into _X property" msgstr "Lisää uusien viestien määrä _X-ominaisuuteen (xprop)" #. Urgent method button -#: ../pidgin/plugins/notify.c:769 msgid "Set window manager \"_URGENT\" hint" msgstr "Aseta ikkunointiohjelman \"_URGENT\"(kiireellinen)-lippu" #. Raise window method button -#: ../pidgin/plugins/notify.c:778 msgid "R_aise conversation window" msgstr "N_osta keskusteluikkuna" #. Present conversation method button -#: ../pidgin/plugins/notify.c:786 msgid "_Present conversation window" msgstr "E_sitä keskusteluikkuna" #. ---------- "Notification Removals" ---------- -#: ../pidgin/plugins/notify.c:794 msgid "Notification Removal" msgstr "Huomautuksen poisto" #. Remove on focus button -#: ../pidgin/plugins/notify.c:799 msgid "Remove when conversation window _gains focus" msgstr "Poista kun keskusteluikkuna on _aktiivinen" #. Remove on click button -#: ../pidgin/plugins/notify.c:806 msgid "Remove when conversation window _receives click" msgstr "Poista kun keskusteluikkunaa _napsautetaan" #. Remove on type button -#: ../pidgin/plugins/notify.c:814 msgid "Remove when _typing in conversation window" msgstr "Poista kun keskusteluikkunaan _kirjoitetaan" #. Remove on message send button -#: ../pidgin/plugins/notify.c:822 msgid "Remove when a _message gets sent" msgstr "Poista kun viesti _lähetetään" #. Remove on conversation switch button -#: ../pidgin/plugins/notify.c:831 msgid "Remove on switch to conversation ta_b" msgstr "Poista kun _välilehti vaihtuu" @@ -18064,7 +13199,6 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/notify.c:924 msgid "Message Notification" msgstr "Viestihuomautus" @@ -18072,7 +13206,6 @@ #. *< version #. * summary #. * description -#: ../pidgin/plugins/notify.c:927 ../pidgin/plugins/notify.c:929 msgid "Provides a variety of ways of notifying you of unread messages." msgstr "Ilmoittaa lukemattomista viesteistä monilla tavoilla." @@ -18082,19 +13215,16 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/pidgininc.c:91 msgid "Pidgin Demonstration Plugin" msgstr "Pidgin-esittelyliitännäinen" #. *< name #. *< version #. * summary -#: ../pidgin/plugins/pidgininc.c:94 msgid "An example plugin that does stuff - see the description." msgstr "Esimerkkiliitännäinen joka tekee jotain - katso kuvaus." #. * description -#: ../pidgin/plugins/pidgininc.c:96 msgid "" "This is a really cool plugin that does a lot of stuff:\n" "- It tells you who wrote the program when you log in\n" @@ -18107,57 +13237,44 @@ "- Lähettää viestin listalla oleville tuttavillesi aina kun he kirjautuvat " "sisään" -#: ../pidgin/plugins/pidginrc.c:49 msgid "Cursor Color" msgstr "Kohdistimen väri" -#: ../pidgin/plugins/pidginrc.c:50 msgid "Secondary Cursor Color" msgstr "Toissijainen kohdistimen väri" -#: ../pidgin/plugins/pidginrc.c:51 msgid "Hyperlink Color" msgstr "Hyperlinkin väri" -#: ../pidgin/plugins/pidginrc.c:54 msgid "Highlighted Message Name Color" msgstr "Korostetun viestin nimen väri" -#: ../pidgin/plugins/pidginrc.c:66 msgid "GtkTreeView Horizontal Separation" msgstr "GtkTreeView - leveyssuuntainen erotus" -#: ../pidgin/plugins/pidginrc.c:81 msgid "Conversation Entry" msgstr "Keskustelumerkintä" -#: ../pidgin/plugins/pidginrc.c:82 msgid "Request Dialog" msgstr "Pyyntövalintaikkuna" -#: ../pidgin/plugins/pidginrc.c:83 msgid "Notify Dialog" msgstr "Huomautusvalintaikunna" -#: ../pidgin/plugins/pidginrc.c:259 msgid "Select Color" msgstr "Valitse väri" -#: ../pidgin/plugins/pidginrc.c:306 #, c-format msgid "Select Interface Font" msgstr "Valitse käyttöliittymän kirjasin" -#: ../pidgin/plugins/pidginrc.c:309 #, c-format msgid "Select Font for %s" msgstr "Valitse %s:n kirjasin" -#: ../pidgin/plugins/pidginrc.c:377 msgid "GTK+ Interface Font" msgstr "GTK+-käyttöliittymän kirjasin" -#: ../pidgin/plugins/pidginrc.c:397 msgid "GTK+ Text Shortcut Theme" msgstr "GTK+-tekstioikopolkuteema" @@ -18181,50 +13298,39 @@ #. widget_bool_widgets[i]); #. } #. -#: ../pidgin/plugins/pidginrc.c:434 msgid "Interface colors" msgstr "Käyttöliittymän värit" -#: ../pidgin/plugins/pidginrc.c:458 msgid "Widget Sizes" msgstr "Säädinkoot" -#: ../pidgin/plugins/pidginrc.c:479 msgid "Fonts" msgstr "Kirjasimet" -#: ../pidgin/plugins/pidginrc.c:503 msgid "Gtkrc File Tools" msgstr "Gtkrc-tiedostotyökalut" -#: ../pidgin/plugins/pidginrc.c:508 #, c-format msgid "Write settings to %s%sgtkrc-2.0" msgstr "Kirjoita asetukset tiedostoon %s%sgtkrc-2.0" -#: ../pidgin/plugins/pidginrc.c:517 msgid "Re-read gtkrc files" msgstr "Lue uudelleen gtkrc-tiedostot" -#: ../pidgin/plugins/pidginrc.c:555 msgid "Pidgin GTK+ Theme Control" msgstr "Pidgin GTK+-teemanhallinta" -#: ../pidgin/plugins/pidginrc.c:557 ../pidgin/plugins/pidginrc.c:558 msgid "Provides access to commonly used gtkrc settings." msgstr "Antaa pääsyn usein käytettyihin gtkrc-asetuksiin." -#: ../pidgin/plugins/raw.c:175 msgid "Raw" msgstr "Raakasyöttö" -#: ../pidgin/plugins/raw.c:177 msgid "Lets you send raw input to text-based protocols." msgstr "" "Mahdollistaa raakamuotoisen syötteen antamisen tekstipohjaisille " "yhteyskäytännöille." -#: ../pidgin/plugins/raw.c:178 msgid "" "Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit " "'Enter' in the entry box to send. Watch the debug window." @@ -18233,7 +13339,6 @@ "yhteyskäytännöillä (XMPP, MSN, IRC, TOC). Paina \"Enter\" " "viestinsyöttölaatikossa lähettääksesi. Tarkkaile virheenjäljitysikkunaa." -#: ../pidgin/plugins/relnot.c:71 #, c-format msgid "" "You are using %s version %s. The current version is %s. You can get it " @@ -18242,12 +13347,10 @@ "Käyttämäsi %s-versio on %s. Nykyinen versio on %s. Se löytyy osoitteesta <a " "href=\"%s\">%s</a><hr>" -#: ../pidgin/plugins/relnot.c:79 #, c-format msgid "<b>ChangeLog:</b><br>%s" msgstr "<b>Muutosloki:</b><br>%s" -#: ../pidgin/plugins/relnot.c:84 ../pidgin/plugins/relnot.c:85 msgid "New Version Available" msgstr "Uusi versio saatavilla" @@ -18257,19 +13360,16 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/relnot.c:143 msgid "Release Notification" msgstr "Julkaisuilmoitus" #. *< name #. *< version #. * summary -#: ../pidgin/plugins/relnot.c:146 msgid "Checks periodically for new releases." msgstr "Tarkistaa määräajoin onko uusi Pidgin-versio julkaistu." #. * description -#: ../pidgin/plugins/relnot.c:148 msgid "" "Checks periodically for new releases and notifies the user with the " "ChangeLog." @@ -18285,18 +13385,15 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/sendbutton.c:138 msgid "Send Button" msgstr "Lähetä-painike" #. *< name #. *< version -#: ../pidgin/plugins/sendbutton.c:140 msgid "Conversation Window Send Button." msgstr "Keskusteluikkunan Läheta-painike." #. *< summary -#: ../pidgin/plugins/sendbutton.c:141 msgid "" "Adds a Send button to the entry area of the conversation window. Intended " "for when no physical keyboard is present." @@ -18304,70 +13401,54 @@ "Lisää keskusteluikkunan kirjoitusalueelle Lähetä-painikkeen. Tarkoitettu " "käytettäväksi, kun fyysistä näppäimistöä ei ole käytettävissä." -#: ../pidgin/plugins/spellchk.c:1970 msgid "Duplicate Correction" msgstr "Korjauksen toisinto" -#: ../pidgin/plugins/spellchk.c:1971 msgid "The specified word already exists in the correction list." msgstr "Määritetty sana on jo korjauslistassa." -#: ../pidgin/plugins/spellchk.c:2184 msgid "Text Replacements" msgstr "Tekstin korvaus" -#: ../pidgin/plugins/spellchk.c:2207 msgid "You type" msgstr "Kirjoitettu" -#: ../pidgin/plugins/spellchk.c:2221 msgid "You send" msgstr "Lähetetty" -#: ../pidgin/plugins/spellchk.c:2235 msgid "Whole words only" msgstr "Vain kokonaiset sanat" -#: ../pidgin/plugins/spellchk.c:2247 msgid "Case sensitive" msgstr "Sama kirjainkoko" -#: ../pidgin/plugins/spellchk.c:2273 msgid "Add a new text replacement" msgstr "Lisää uusi korvausehto" -#: ../pidgin/plugins/spellchk.c:2289 msgid "You _type:" msgstr "_Kirjoitettu:" -#: ../pidgin/plugins/spellchk.c:2293 msgid "You _send:" msgstr "_Lähetetty:" #. Created here so it can be passed to whole_words_button_toggled. -#: ../pidgin/plugins/spellchk.c:2296 msgid "_Exact case match (uncheck for automatic case handling)" msgstr "" "_Ehdoton kirjainkoon täsmäys (poista valinta jos haluat automaattisen " "kirjainkoon hallinnan)" -#: ../pidgin/plugins/spellchk.c:2298 msgid "Only replace _whole words" msgstr "Korvaa vain _kokonaiset sanat" -#: ../pidgin/plugins/spellchk.c:2323 msgid "General Text Replacement Options" msgstr "Tekstin korvauksen yleiset valinnat" -#: ../pidgin/plugins/spellchk.c:2324 msgid "Enable replacement of last word on send" msgstr "Salli viimeisen sanan korvaus lähetettäessä" -#: ../pidgin/plugins/spellchk.c:2357 msgid "Text replacement" msgstr "Tekstin korvaus" -#: ../pidgin/plugins/spellchk.c:2359 ../pidgin/plugins/spellchk.c:2360 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." @@ -18377,7 +13458,6 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/ticker/ticker.c:74 ../pidgin/plugins/ticker/ticker.c:356 msgid "Buddy Ticker" msgstr "Rullaava tuttavataulu" @@ -18385,11 +13465,9 @@ #. *< version #. * summary #. * description -#: ../pidgin/plugins/ticker/ticker.c:359 ../pidgin/plugins/ticker/ticker.c:361 msgid "A horizontal scrolling version of the buddy list." msgstr "Vaakatasossa rullaava versio tuttavista." -#: ../pidgin/plugins/timestamp.c:135 msgid "Display Timestamps Every" msgstr "Näytä aikaleimat joka" @@ -18399,50 +13477,38 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/timestamp.c:200 msgid "Timestamp" msgstr "Aikaleima" #. *< name #. *< version #. * summary -#: ../pidgin/plugins/timestamp.c:203 msgid "Display iChat-style timestamps" msgstr "Näytä iChat-tyyliset aikaleimat" #. * description -#: ../pidgin/plugins/timestamp.c:205 msgid "Display iChat-style timestamps every N minutes." msgstr "Näytä iChat-tyyliset aikaleimat N minuutin välein." -#: ../pidgin/plugins/timestamp_format.c:23 msgid "Timestamp Format Options" msgstr "Aikaleiman muotoiluasetukset" -#: ../pidgin/plugins/timestamp_format.c:26 #, c-format msgid "_Force 24-hour time format" msgstr "_Pakota 24 tunnin aikamuoto" -#: ../pidgin/plugins/timestamp_format.c:33 msgid "Show dates in..." msgstr "Näytä päivämäärät..." -#: ../pidgin/plugins/timestamp_format.c:38 msgid "Co_nversations:" msgstr "Ke_skustelut:" -#: ../pidgin/plugins/timestamp_format.c:40 -#: ../pidgin/plugins/timestamp_format.c:49 msgid "For delayed messages" msgstr "Viivästetyille viesteille" -#: ../pidgin/plugins/timestamp_format.c:41 -#: ../pidgin/plugins/timestamp_format.c:50 msgid "For delayed messages and in chats" msgstr "Viivästetyille viesteille, ja ryhmäkeskusteluissa" -#: ../pidgin/plugins/timestamp_format.c:47 msgid "_Message Logs:" msgstr "_Viestilokit:" @@ -18452,19 +13518,16 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/timestamp_format.c:151 msgid "Message Timestamp Formats" msgstr "Viestin aikaleimamuodot" #. *< name #. *< version #. * summary -#: ../pidgin/plugins/timestamp_format.c:154 msgid "Customizes the message timestamp formats." msgstr "Muokkaa viestin aikaleimamuotoja." #. * description -#: ../pidgin/plugins/timestamp_format.c:156 msgid "" "This plugin allows the user to customize conversation and logging message " "timestamp formats." @@ -18472,48 +13535,36 @@ "Tämä liitännäinen mahdollistaa keskustelu- ja lokiviestien aikaleimamuotojen " "muokkaamisen." -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:175 -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:598 -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:645 msgid "Opacity:" msgstr "Peitto:" #. IM Convo trans options -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:562 msgid "IM Conversation Windows" msgstr "Pikaviesti-ikkunat" # NOTE source: gimp + google -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:563 msgid "_IM window transparency" msgstr "_Pikaviesti-ikkunan läpinäkyvyys" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:577 msgid "_Show slider bar in IM window" msgstr "_Näytä vierityspalkki pikaviesti-ikkunassa" # NOTE source: gimp + google -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:584 msgid "Remove IM window transparency on focus" msgstr "Poista pikaviesti-ikkunan läpinäkyvyys sen ollessa kohdistettuna" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:587 -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:635 msgid "Always on top" msgstr "Aina päällimmäisenä" #. Buddy List trans options -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:619 msgid "Buddy List Window" msgstr "Tuttavat-ikkuna" # NOTE source: gimp + google -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:620 msgid "_Buddy List window transparency" msgstr "_Tuttavat-ikkunan läpinäkyvyys" # NOTE source: gimp + google -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:633 msgid "Remove Buddy List window transparency on focus" msgstr "Poista tuttavat-ikkunan läpinäkyvyys sen ollessa kohdistettuna" @@ -18524,19 +13575,16 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:693 msgid "Transparency" msgstr "Läpinäkyvyys" #. *< name #. *< version #. * summary -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:696 msgid "Variable Transparency for the buddy list and conversations." msgstr "Vaihteleva läpinäkyvyys tuttavat-ikkunalle ja keskusteluille." #. * description -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:698 msgid "" "This plugin enables variable alpha transparency on conversation windows and " "the buddy list.\n" @@ -18548,54 +13596,43 @@ "\n" "Huomaa: Tämä liitännäinen vaatii Win2000 tai uudemman." -#: ../pidgin/plugins/win32/winprefs/winprefs.c:303 msgid "GTK+ Runtime Version" msgstr "GTK+ Runtime -versio" #. Autostart -#: ../pidgin/plugins/win32/winprefs/winprefs.c:311 msgid "Startup" msgstr "Käynnistys" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:312 #, c-format msgid "_Start %s on Windows startup" msgstr "_Käynnistä %s Windowsin käynnistyessä" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:327 msgid "_Dockable Buddy List" msgstr "_Telakoi tuttavat-ikkuna ruudun reunaan" #. Blist On Top -#: ../pidgin/plugins/win32/winprefs/winprefs.c:331 msgid "_Keep Buddy List window on top:" msgstr "_Pidä tuttavat-ikkuna päällimmäisenä:" #. XXX: Did this ever work? -#: ../pidgin/plugins/win32/winprefs/winprefs.c:336 msgid "Only when docked" msgstr "Vain telakoituna" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:341 msgid "_Flash window when chat messages are received" msgstr "_Vilkuta ikkunaa ryhmäkeskusteluviestien saapuessa" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:371 msgid "Windows Pidgin Options" msgstr "Windows Pidgin -valinnat" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:373 msgid "Options specific to Pidgin for Windows." msgstr "Asetukset jotka liittyvät erityisesti Pidginin Windows-versioon " -#: ../pidgin/plugins/win32/winprefs/winprefs.c:374 msgid "" "Provides options specific to Pidgin for Windows , such as buddy list docking." msgstr "" "Tarjoaa Windows Pidgin -sidonnaisia valintoja, kuten tuttavat-ikkunan " "telakoinnin." -#: ../pidgin/plugins/xmppconsole.c:670 msgid "<font color='#777777'>Logged out.</font>" msgstr "<font color='#777777'>Kirjauduttu ulos.</font>" @@ -18605,51 +13642,79 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/xmppconsole.c:749 ../pidgin/plugins/xmppconsole.c:844 -#: ../pidgin/plugins/xmppconsole.c:863 msgid "XMPP Console" msgstr "XMPP-pääte" -#: ../pidgin/plugins/xmppconsole.c:756 msgid "Account: " msgstr "Käyttäjätili: " -#: ../pidgin/plugins/xmppconsole.c:783 msgid "<font color='#777777'>Not connected to XMPP</font>" msgstr "<font color='#777777'>Ei yhdistetty XMPP:hen</font>" -#: ../pidgin/plugins/xmppconsole.c:793 msgid "Insert an <iq/> stanza." msgstr "Lisää <iq/>-lohko." -#: ../pidgin/plugins/xmppconsole.c:802 msgid "Insert a <presence/> stanza." msgstr "Lisää <presence/>-lohko." -#: ../pidgin/plugins/xmppconsole.c:811 msgid "Insert a <message/> stanza." msgstr "Lisää <message/>-lohko." #. *< name #. *< version #. * summary -#: ../pidgin/plugins/xmppconsole.c:866 msgid "Send and receive raw XMPP stanzas." msgstr "Lähetä ja vastaanota XMPP-raakalohkoja." #. * description -#: ../pidgin/plugins/xmppconsole.c:868 msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "" "Tätä liitännäistä voidaan käyttää XMPP-palvelimien tai -asiakasohjelmien " "virheenjäljitykseen." +#~ msgid "Error setting socket options" +#~ msgstr "Virhe asetettaessa pistokevalintoja" + +#~ msgid "" +#~ "Windows Live ID authentication: cannot find authenticate token in server " +#~ "response" +#~ msgstr "" +#~ "Windows Live ID -tunnistautuminen: palvelinvastauksesta ei löydy " +#~ "todentamispolettia" + +#~ msgid "Windows Live ID authentication Failed" +#~ msgstr "Windows Live ID -tunnistautuminen epäonnistui" + +#~ msgid "Too evil (sender)" +#~ msgstr "Lähettäjä liian paha(evil)" + +#~ msgid "Too evil (receiver)" +#~ msgstr "Vastaanottaja liian paha(evil)" + +#~ msgid "Available Message" +#~ msgstr "Paikallaoloviesti" + +#~ msgid "Away Message" +#~ msgstr "Poissaoloviesti" + +#~ msgid "<i>(retrieving)</i>" +#~ msgstr "<i>(vastaanotetaan)</i>" + +#~ msgid "Error requesting login token" +#~ msgstr "Virhe pyydettäessä kirjautumispolettia" + +#~ msgid "TCP Address" +#~ msgstr "TCP-osoite" + +#~ msgid "UDP Address" +#~ msgstr "UDP-osoite" + +#~ msgid "Login failed, no reply" +#~ msgstr "Kirjautuminen epäonnistui, ei vastausta" + #~ msgid "Screen name:" #~ msgstr "Näyttönimi:" -#~ msgid "Screen Name" -#~ msgstr "Näyttönimi" - #~ msgid "Someone says your screen name in chat" #~ msgstr "Joku sanoo kutsumanimesi ryhmäkeskustelussa" @@ -18828,9 +13893,6 @@ #~ msgid "_Send To" #~ msgstr "_Lähetä käyttäjälle" -#~ msgid "_Smiley" -#~ msgstr "_Hymiö" - #~ msgid "Conversation History" #~ msgstr "Keskusteluhistoria" @@ -19149,13 +14211,6 @@ #~ msgid "<span weight='bold' size='larger'>Welcome to " #~ msgstr "<span weight='bold' size='larger'>Tervetuloa " -#~ msgid "" -#~ "%s\n" -#~ "\n" -#~ msgstr "" -#~ "%s\n" -#~ "\n" - #~ msgid "You are using " #~ msgstr "Käytät ohjelmaa: " @@ -20205,9 +15260,6 @@ #~ msgid "IRC" #~ msgstr "IRC" -#~ msgid "Quit message" -#~ msgstr "Poistumisviesti" - #~ msgid "Basic Profile" #~ msgstr "Perusprofiili"
--- a/po/fr.po Thu Jul 31 06:23:55 2008 +0000 +++ b/po/fr.po Thu Aug 07 16:00:16 2008 +0000 @@ -21,8 +21,8 @@ msgstr "" "Project-Id-Version: Pidgin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-05-11 13:15+0200\n" -"PO-Revision-Date: 2008-05-11 13:10+0200\n" +"POT-Creation-Date: 2008-08-07 14:57+0200\n" +"PO-Revision-Date: 2008-08-07 14:56+0200\n" "Last-Translator: Éric Boumaour <zongo_fr@users.sourceforge.net>\n" "Language-Team: fr <fr@li.org>\n" "MIME-Version: 1.0\n" @@ -109,6 +109,10 @@ msgid "Alias:" msgstr "Alias :" +#. Register checkbox +msgid "Create this account on the server" +msgstr "Créer ce compte sur le serveur" + #. Cancel button #. Cancel msgid "Cancel" @@ -416,6 +420,9 @@ msgid "View Log..." msgstr "Voir les archives..." +msgid "View All Logs" +msgstr "Voir toutes les archives" + msgid "Show" msgstr "Afficher" @@ -615,6 +622,19 @@ msgid "Send To" msgstr "Envoyer vers" +msgid "Invite message" +msgstr "Message d'invitation" + +msgid "Invite" +msgstr "Inviter" + +msgid "" +"Please enter the name of the user you wish to invite,\n" +"along with an optional invite message." +msgstr "" +"Saisissez le nom de l'utilisateur que vous voulez inviter,\n" +"ainsi qu'un message d'invitation facultatif." + msgid "Conversation" msgstr "Conversation" @@ -627,6 +647,9 @@ msgid "Add Buddy Pounce..." msgstr "Ajouter une alerte..." +msgid "Invite..." +msgstr "Inviter..." + msgid "Enable Logging" msgstr "Activer l'archivage" @@ -636,9 +659,11 @@ msgid "<AUTO-REPLY> " msgstr "<Réponse automatique> " -#. Print the list of users in the room -msgid "List of users:\n" -msgstr "Liste des utilisateurs :\n" +#, c-format +msgid "List of %d user:\n" +msgid_plural "List of %d users:\n" +msgstr[0] "Liste de %d utilisateur :\n" +msgstr[1] "Liste de %d utilisateurs :\n" msgid "Supported debug options are: version" msgstr "Les options de débuggage supportées sont : version" @@ -654,6 +679,20 @@ "spécifique.\n" "Les commandes disponibles dans le contexte actuel sont :\n" +#, c-format +msgid "" +"%s is not a valid message class. See '/help msgcolor' for valid message " +"classes." +msgstr "" +"%s n'est pas une catégorie de messages. Consultez /help msgcolor pour " +"connaître les catégories de messages utilisables." + +#, c-format +msgid "%s is not a valid color. See '/help msgcolor' for valid colors." +msgstr "" +"%s n'est pas une couleur valide. Consultez /help msgcolor pour connaître les " +"couleurs utilisables." + msgid "" "say <message>: Send a message normally as if you weren't using a " "command." @@ -701,6 +740,19 @@ msgid "statuses: Show the savedstatuses window." msgstr "statuses : Afficher la fenêtre des états enregistrés." +msgid "" +"msgcolor <class> <foreground> <background>: Set the color " +"for different classes of messages in the conversation window.<br> <" +"class>: receive, send, highlight, action, timestamp<br> <foreground/" +"background>: black, red, green, blue, white, gray, darkgray, magenta, " +"cyan, default<br><br>EXAMPLE:<br> msgcolor send cyan default" +msgstr "" +"msgcolor <catégorie> <texte> <fond> : Change la couleur " +"pour les différentes catégories de messages dans la fenêtre de conversation. " +"<br> <catégorie> : receive, send, highlight, action, timestamp." +"<br> <texte/fond> : black, red, green, blue, white, gray, darkgray, " +"magenta, cyan, default.<br><br>Exemple :<br> msgcolor send cyan default" + msgid "Unable to open file." msgstr "Impossible d'ouvrir le fichier." @@ -721,8 +773,10 @@ msgstr "Pause" #, c-format -msgid "File Transfers - %d%% of %d files" -msgstr "Transfert - %d%% de %d fichiers." +msgid "File Transfers - %d%% of %d file" +msgid_plural "File Transfers - %d%% of %d files" +msgstr[0] "Transferts - %d%% de %d fichier." +msgstr[1] "Transferts - %d%% de %d fichiers." #. Create the window. msgid "File Transfers" @@ -837,6 +891,9 @@ msgid "Conversations with %s" msgstr "Conversations avec %s" +msgid "All Conversations" +msgstr "Toutes les conversations" + msgid "System Log" msgstr "Archives des messages système" @@ -874,9 +931,6 @@ msgid "IM" msgstr "Message" -msgid "Invite" -msgstr "Inviter" - msgid "(none)" msgstr "(aucun)" @@ -2107,8 +2161,11 @@ msgid "ABI version mismatch %d.%d.x (need %d.%d.x)" msgstr "La version de l'ABI diffère : %d.%d.x (%d.%d.x attendue)." -msgid "Plugin does not implement all required functions" -msgstr "Le plugin ne possède pas toutes les fonctions attendues." +msgid "" +"Plugin does not implement all required functions (list_icon, login and close)" +msgstr "" +"Le plugin ne possède pas toutes les fonctions attendues (list_icon, login et " +"close)." #, c-format msgid "" @@ -2192,6 +2249,9 @@ "terminé\n" "(seulement quand aucune conversation n'est ouverte avec l'expéditeur)" +msgid "Create a new directory for each user" +msgstr "Créer un nouveau dossier pour chaque contact" + msgid "Notes" msgstr "Notes" @@ -2777,13 +2837,12 @@ "activestate.com\n" msgid "" -"The Apple Bonjour For Windows toolkit wasn't found, see the FAQ at: http://" -"developer.pidgin.im/wiki/Using%20Pidgin#CanIusePidginforBonjourLink-" -"LocalMessaging for more information." +"The Apple Bonjour For Windows toolkit wasn't found, see the FAQ at: http://d." +"pidgin.im/BonjourWindows for more information." msgstr "" "Le kit Apple Bonjour pour Windows n'a pas été trouvé. Veuillez consulter la " -"FAQ disponible sur : http://developer.pidgin.im/wiki/Using%" -"20Pidgin#CanIusePidginforBonjourLink-LocalMessaging pour plus d'informations." +"FAQ disponible sur : http://d.pidgin.im/wiki/BonjourWindows pour plus " +"d'informations." msgid "Unable to listen for incoming IM connections\n" msgstr "Impossible d'attendre des connexions rentrantes de messages.\n" @@ -2840,9 +2899,6 @@ msgid "Cannot open socket" msgstr "Impossible d'ouvrir la connexion." -msgid "Error setting socket options" -msgstr "Erreur à la mise en place des paramètres de la connexion." - msgid "Could not bind socket to port" msgstr "Impossible d'affecter un port à la connexion." @@ -2891,6 +2947,9 @@ msgid "Save buddylist..." msgstr "Sauver la liste de contacts..." +msgid "Load buddylist from file..." +msgstr "Charger la liste de contacts depuis un fichier..." + msgid "Fill in the registration fields." msgstr "Renseignez les rubriques d'inscription." @@ -3068,9 +3127,6 @@ msgid "Save buddylist to file..." msgstr "Sauver la liste de contacts dans un fichier..." -msgid "Load buddylist from file..." -msgstr "Charger la liste de contacts depuis un fichier..." - #. magic #. major_version #. minor_version @@ -3186,6 +3242,9 @@ msgid "Encodings" msgstr "Codages" +msgid "Auto-detect incoming UTF-8" +msgstr "Détecter automatiquement UTF-8" + msgid "Real name" msgstr "Nom réel" @@ -3200,8 +3259,8 @@ msgstr "Mauvais mode" #, c-format -msgid "Ban on %s by %s, set %ld seconds ago" -msgstr "Banni sur %s par %s, il y a %ld secondes" +msgid "Ban on %s by %s, set %s ago" +msgstr "Banni sur %s par %s, il y a %s" #, c-format msgid "Ban on %s" @@ -3371,6 +3430,10 @@ "away [message] : Mettre un message d'absence. Sans message, cela enlève " "l'état d'absence." +msgid "ctcp <nick> <msg>: sends ctcp msg to nick." +msgstr "" +"ctcp <pseudo> <msg> : Envoyer le message msg en CTCP à pseudo." + msgid "chanserv: Send a command to chanserv" msgstr "chanserv : Envoyer une commande au service des salons." @@ -3636,6 +3699,8 @@ msgid "Country" msgstr "Pays" +#. lots of clients (including purple) do this, but it's +#. * out of spec msgid "Telephone" msgstr "Téléphone" @@ -3823,12 +3888,12 @@ msgid "Capabilities" msgstr "Possibilités" +msgid "Priority" +msgstr "Priorité" + msgid "Resource" msgstr "Ressource" -msgid "Priority" -msgstr "Priorité" - msgid "Middle Name" msgstr "Deuxième prénom" @@ -4525,8 +4590,8 @@ msgstr "Erreur message XMPP" #, c-format -msgid " (Code %s)" -msgstr " (Code %s)" +msgid "(Code %s)" +msgstr "(Code %s)" msgid "XML Parse error" msgstr "Erreur de lecture du XML" @@ -4551,14 +4616,14 @@ msgstr "_Accepter les paramètres par défaut" #, c-format +msgid "Error joining chat %s" +msgstr "Erreur lors de l'arrivée dans la discussion %s" + +#, c-format msgid "Error in chat %s" msgstr "Erreur dans la discussion %s" #, c-format -msgid "Error joining chat %s" -msgstr "Erreur lors de l'arrivée dans la discussion %s" - -#, c-format msgid "Unable to send file to %s, user does not support file transfers" msgstr "" "Impossible d'envoyer le fichier à %s, cet utilisateur ne supporte pas le " @@ -4878,6 +4943,9 @@ msgid "Nudging %s..." msgstr "Nudge %s..." +msgid "Email Address..." +msgstr "Adresse électronique..." + msgid "Your new MSN friendly name is too long." msgstr "Le nouvel alias MSN est trop long" @@ -4912,8 +4980,22 @@ msgid "Disallow" msgstr "Interdire" -msgid "This Hotmail account may not be active." -msgstr "Ce compte Hotmail ne semble pas être actif." +#, c-format +msgid "Blocked Text for %s" +msgstr "Contenu bloqué pour %s" + +msgid "No text is blocked for this account." +msgstr "Aucun contenu n'est bloqué pour ce compte." + +#, c-format +msgid "" +"MSN servers are currently blocking the following regular expressions:<br/>%s" +msgstr "" +"Les serveurs MSN censurent en ce moment les expressions " +"rationnellessuivantes :<br/>%s" + +msgid "This account does not have email enabled." +msgstr "Ce compte ne possède pas de courrier électronique actif." msgid "Send a mobile message." msgstr "Envoyer un message vers un téléphone portable." @@ -4972,6 +5054,9 @@ msgid "Allow/Disallow Mobile Pages..." msgstr "Autoriser les messages sur téléphones portables..." +msgid "View Blocked Text..." +msgstr "Voir le contenu bloqué..." + msgid "Open Hotmail Inbox" msgstr "Ouvrir la boîte à lettres Hotmail" @@ -5172,18 +5257,10 @@ msgstr "nudge : donner un « Nudge » à un contact pour attirer son attention." msgid "Windows Live ID authentication:Unable to connect" -msgstr "Authentification Windows Live ID : impossible de se connecter" - -#. we must have failed! -msgid "" -"Windows Live ID authentication: cannot find authenticate token in server " -"response" -msgstr "" -"Authentification Windows Live ID : impossible de trouver le jeton " -"d'authentification dans la réponse du serveur." - -msgid "Windows Live ID authentication Failed" -msgstr "Échec de l'authentification Windows Live ID" +msgstr "Authentification Windows Live ID : impossible de se connecter." + +msgid "Windows Live ID authentication:Invalid response" +msgstr "Authentification Windows Live ID : réponse non valide." #, c-format msgid "%s is not a valid group." @@ -5230,6 +5307,9 @@ msgid "Service Temporarily Unavailable." msgstr "Service temporairement indisponible." +msgid "Mobile message was not sent because it was too long." +msgstr "Le message mobile n'a pas été envoyé parce qu'il est trop long." + msgid "Unable to rename group" msgstr "Impossible de renommer le groupe" @@ -5264,6 +5344,24 @@ "\n" "Une fois la maintenance effectuée, vous pourrez vous reconnecter." +msgid "" +"Message was not sent because the system is unavailable. This normally " +"happens when the user is blocked or does not exist." +msgstr "" +"Le message n'a pas été envoyé parce que le système n'est pas disponible. La " +"cause probable est que l'utilisateur est bloqué ou n'existe pas." + +msgid "Message was not sent because messages are being sent too quickly." +msgstr "" +"Le message n'a pas été envoyé parce que les précédents messages ont été " +"envoyés trop vite." + +msgid "Message was not sent because an unknown encoding error occurred." +msgstr "Le message n'a pas été envoyé à cause d'une erreur de codage inconnu." + +msgid "Message was not sent because an unknown error occurred." +msgstr "Le message n'a pas été envoyé à cause d'une erreur inconnue." + msgid "Unable to connect" msgstr "Impossible de se connecter" @@ -5386,6 +5484,9 @@ msgid "The username specified is invalid." msgstr "Le nom d'utilisateur fourni est non valide." +msgid "This Hotmail account may not be active." +msgstr "Ce compte Hotmail ne semble pas être actif." + msgid "Has you" msgstr "Vous êtes dans sa liste" @@ -5425,8 +5526,11 @@ msgstr "Connexion" #, c-format -msgid "Connection to server lost (no data received within %d seconds)" -msgstr "Connexion avec le serveur perdue (aucune donnée depuis %d secondes)." +msgid "Connection to server lost (no data received within %d second)" +msgid_plural "Connection to server lost (no data received within %d seconds)" +msgstr[0] "Connexion avec le serveur perdue (aucune donnée depuis %d seconde)." +msgstr[1] "" +"Connexion avec le serveur perdue (aucune donnée depuis %d secondes)." #. Can't write _()'d strings in array initializers. Workaround. msgid "New mail messages" @@ -5526,10 +5630,16 @@ #, c-format msgid "" +"%d buddy was added or updated from the server (including buddies already on " +"the server-side list)" +msgid_plural "" "%d buddies were added or updated from the server (including buddies already " "on the server-side list)" -msgstr "" -"%d contacts ont été ajouté ou mis à jour depuis le serveur (y compris les " +msgstr[0] "" +"%d contact a été ajouté ou mis à jour depuis le serveur (y compris les " +"contacts déjà sur la liste du serveur)." +msgstr[1] "" +"%d contacts ont été ajoutés ou mis à jour depuis le serveur (y compris les " "contacts déjà sur la liste du serveur)." msgid "Add contacts from server" @@ -6158,11 +6268,11 @@ msgid "In local permit/deny" msgstr "Dans l'autorisation/interdiction locale" -msgid "Too evil (sender)" -msgstr "Trop méchant (envoyeur)" - -msgid "Too evil (receiver)" -msgstr "Trop méchant (destinataire)" +msgid "Warning level too high (sender)" +msgstr "Niveau d'avertissement trop élevé (émission)" + +msgid "Warning level too high (receiver)" +msgstr "Niveau d'avertissement trop élevé (réception)" msgid "User temporarily unavailable" msgstr "L'utilisateur est temporairement indisponible." @@ -6265,6 +6375,9 @@ msgid "Camera" msgstr "Caméra" +msgid "Screen Sharing" +msgstr "Partage d'écran" + #, c-format msgid "Free For Chat" msgstr "Libre pour discuter" @@ -6356,7 +6469,6 @@ "réessayez. Si vous persistez maintenant, il vous faudra attendre encore plus " "longtemps." -#. client too old #, c-format msgid "The client version you are using is too old. Please upgrade at %s" msgstr "" @@ -6403,6 +6515,7 @@ msgid "Unable to get a valid login hash." msgstr "Impossible de récupérer un code de connexion valide." +#. allow multple logins? msgid "Password sent" msgstr "Mot de passe envoyé" @@ -6517,16 +6630,27 @@ "Vous avez raté %hu messages de %s car le quota limite a été dépassé." #, c-format -msgid "You missed %hu message from %s because he/she was too evil." -msgid_plural "You missed %hu messages from %s because he/she was too evil." -msgstr[0] "Vous avez raté %hu message de %s car l'envoyeur est trop méchant." -msgstr[1] "Vous avez raté %hu messages de %s car l'envoyeur est trop méchant." - -#, c-format -msgid "You missed %hu message from %s because you are too evil." -msgid_plural "You missed %hu messages from %s because you are too evil." -msgstr[0] "Vous avez raté %hu message de %s car vous êtes trop méchant." -msgstr[1] "Vous avez raté %hu messages de %s car vous êtes trop méchant." +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] "" +"Vous avez raté %hu message de %s car son niveau d'avertissement est trop " +"élevé." +msgstr[1] "" +"Vous avez raté %hu messages de %s car son niveau d'avertissement est trop " +"élevé." + +#, 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] "" +"Vous avez raté %hu message de %s car votre niveau d'avertissement est trop " +"élevé." +msgstr[1] "" +"Vous avez raté %hu messages de %s car votre niveau d'avertissement est trop " +"élevé." #, c-format msgid "You missed %hu message from %s for an unknown reason." @@ -6556,9 +6680,6 @@ msgid "Member Since" msgstr "Inscrit depuis" -msgid "Available Message" -msgstr "Message de disponibilité" - msgid "Your AIM connection may be lost." msgstr "Votre connexion AIM risque d'être coupée" @@ -6587,12 +6708,17 @@ msgid "Personal Web Page" msgstr "Page web perso" +#. aim_userinfo_t +#. strip_html_tags msgid "Additional Information" msgstr "Informations supplémentaires" msgid "Zip Code" msgstr "Code postal" +msgid "Work Information" +msgstr "Informations professionnelles" + msgid "Division" msgstr "Division" @@ -6602,9 +6728,6 @@ msgid "Web Page" msgstr "Page web" -msgid "Work Information" -msgstr "Informations professionnelles" - msgid "Pop-Up Message" msgstr "Message en fenêtre" @@ -6823,12 +6946,6 @@ "Votre image instantanée n'a pas été envoyée. Vous ne pouvez pas envoyer " "d'images dans les discussions AIM." -msgid "Away Message" -msgstr "Message d'absence" - -msgid "<i>(retrieving)</i>" -msgstr " <i>(en cours de récupération)</i>" - msgid "iTunes Music Store Link" msgstr "Lien de l'iTunes Music Store" @@ -6954,6 +7071,9 @@ "pour le transfert de fichiers\n" "(plus lent, mais ne révèle pas votre adresse IP)" +msgid "Allow multiple simultaneous logins" +msgstr "Autoriser plusieurs connexions simultanées" + #, c-format msgid "Asking %s to connect to us at %s:%hu for Direct IM." msgstr "Demande à %s de se connecter directement à %s:%hu pour le message" @@ -7298,36 +7418,40 @@ msgid "Failed to send IM." msgstr "Impossible d'envoyer le message." -msgid "Keep alive error" -msgstr "Erreur de Keep alive" - -msgid "Error requesting login token" -msgstr "Erreur à la demande d'un token de connexion" - -msgid "Unable to login. Check debug log." -msgstr "" -"Impossible de se connecter, veuillez vérifier les messages de débuggage." - -msgid "Unable to login" -msgstr "Impossible de se connecter." - -#. we didn't successfully connect. tdt->toc_fd is valid here -msgid "Unable to connect." -msgstr "Impossible de se connecter" - #, c-format msgid "Unknown-%d" msgstr "Inconnu-%d" -msgid "TCP Address" -msgstr "Adresse TCP" - -msgid "UDP Address" -msgstr "Adresse UDP" - msgid "Level" msgstr "Niveau" +msgid "Member" +msgstr "Membre" + +msgid " VIP" +msgstr " VIP" + +msgid " TCP" +msgstr " TCP" + +msgid " FromMobile" +msgstr " FromMobile" + +msgid " BindMobile" +msgstr " BindMobile" + +msgid " Video" +msgstr " Vidéo" + +msgid " Space" +msgstr "Espace" + +msgid "Flag" +msgstr "Drapeau" + +msgid "Ver" +msgstr "Ver" + msgid "Invalid name" msgstr "Nom d'utilisateur non valide" @@ -7340,12 +7464,16 @@ msgstr "<b>Dernière mise à jour :</b> %s<br>\n" #, c-format +msgid "<b>Server</b>: %s: %d<br>\n" +msgstr "<b>Serveur :</b> %s: %d<br>\n" + +#, c-format msgid "<b>Connection Mode</b>: %s<br>\n" msgstr "<b>Type de connexion :</b> %s<br>\n" #, c-format -msgid "<b>Server IP</b>: %s: %d<br>\n" -msgstr "<b>Adresse IP du serveur :</b> %s: %d<br>\n" +msgid "<b>Real hostname</b>: %s: %d<br>\n" +msgstr "<b>Hôte réel :</b> %s: %d<br>\n" #, c-format msgid "<b>My Public IP</b>: %s<br>\n" @@ -7397,12 +7525,73 @@ msgid "Connect using TCP" msgstr "Connexion par TCP" +msgid "resend interval(s)" +msgstr "Délai(s) de réenvoi" + +msgid "Keep alive interval(s)" +msgstr "Délai(s) de Keep alive" + +msgid "Update interval(s)" +msgstr "Délai(s) de mise à jour" + +#, c-format +msgid "Invalid token len, %d" +msgstr "Taille de token non valide : %d" + +msgid "Keep alive error" +msgstr "Erreur de Keep alive" + +msgid "Failed to connect server" +msgstr "Impossible de se connecter au serveur." + msgid "Socket error" msgstr "Erreur de socket." +#, c-format +msgid "" +"Lost connection with server:\n" +"%d, %s" +msgstr "" +"Connexion perdue avec le serveur :\n" +"%d, %s" + msgid "Unable to read from socket" msgstr "Impossible de lire le socket." +msgid "Write Error" +msgstr "Erreur d'écriture" + +msgid "Connection lost" +msgstr "Connexion perdue." + +msgid "Couldn't resolve host" +msgstr "Impossible de trouver l'adresse de l'hôte." + +msgid "hostname is NULL or port is 0" +msgstr "" + +#, c-format +msgid "Connecting server %s, retries %d" +msgstr "Connexion au serveur %s, tentatives %d" + +#. we didn't successfully connect. tdt->toc_fd is valid here +msgid "Unable to connect." +msgstr "Impossible de se connecter" + +msgid "Could not resolve hostname" +msgstr "Impossible de résoudre le nom de l'hôte." + +msgid "Unable to login. Check debug log." +msgstr "" +"Impossible de se connecter, veuillez vérifier les messages de débuggage." + +msgid "Unable to login" +msgstr "Impossible de se connecter." + +#, c-format +msgid "Invalid token reply code, 0x%02X" +msgstr "Code du token de réponse non valide : 0x%02X" + #, c-format msgid "%d has declined the file %s" msgstr "%d a refusé le fichier %s" @@ -7414,12 +7603,6 @@ msgid "%d canceled the transfer of %s" msgstr "%d a annulé le transfert de %s" -msgid "Connection lost" -msgstr "Connexion perdue." - -msgid "Login failed, no reply" -msgstr "Échec à la connexion, aucune réponse." - msgid "Do you want to add this buddy?" msgstr "Voulez-vous ajouter ce contact à votre liste ?" @@ -7456,6 +7639,14 @@ msgid "%s is not in your buddy list" msgstr "L'utilisateur %s n'est pas dans votre liste de contacts." +#, c-format +msgid "Notice from: %s" +msgstr "Annonce de : %s" + +#, c-format +msgid "%s" +msgstr "%s" + msgid "Connection closed (writing)" msgstr "Connexion terminée (en écriture)" @@ -8465,6 +8656,10 @@ msgid "Error loading SILC key pair" msgstr "Erreur de chargement de la paire de clés SILC" +#, c-format +msgid "Download %s: %s" +msgstr "Téléchargement de %s : %s" + msgid "Your Current Mood" msgstr "Votre humeur actuelle" @@ -8917,12 +9112,6 @@ msgid "Could not create listen socket" msgstr "Impossible de créer le socket d'écoute." -msgid "Couldn't resolve host" -msgstr "Impossible de trouver l'adresse de l'hôte." - -msgid "Could not resolve hostname" -msgstr "Impossible de résoudre le nom de l'hôte." - msgid "SIP usernames may not contain whitespaces or @ symbols" msgstr "" "Les noms d'utilisateur SIP ne peuvent pas avoir d'espace ou de symbole @." @@ -9382,9 +9571,6 @@ msgid "%s is trying to send you a group of %d files.\n" msgstr "%s essaie de vous envoyer un groupe de %d fichiers.\n" -msgid "Write Error" -msgstr "Erreur d'écriture" - msgid "Yahoo! Japan Profile" msgstr "Profil Yahoo! Japon" @@ -9686,6 +9872,14 @@ msgid "Could not resolve host name" msgstr "Impossible de résoudre le nom de l'hôte." +#, c-format +msgid "Requesting %s's attention..." +msgstr "Attire l'attention de %s..." + +#, c-format +msgid "%s has requested your attention!" +msgstr "%s essaie d'attirer votre attention !" + #. * #. * A wrapper for purple_request_action() that uses @c Yes and @c No buttons. #. @@ -9715,14 +9909,6 @@ msgstr "%s est désormais connu sous le nom de %s\n" #, c-format -msgid "Requesting %s's attention..." -msgstr "Attire l'attention de %s..." - -#, c-format -msgid "%s has requested your attention!" -msgstr "%s essaie d'attirer votre attention !" - -#, c-format msgid "" "%s has invited %s to the chat room %s:\n" "%s" @@ -9737,6 +9923,20 @@ msgid "Accept chat invitation?" msgstr "Accepter l'invitation à la discussion ?" +#. Shortcut +msgid "Shortcut" +msgstr "Raccourci" + +msgid "The text-shortcut for the smiley" +msgstr "Le texte-accourci pour la frimousse" + +#. Stored Image +msgid "Stored Image" +msgstr "Image stockée" + +msgid "Stored Image. (that'll have to do for now)" +msgstr "Image stockée. (ça sera bien suffisant pour l'instant)" + msgid "SSL Connection Failed" msgstr "Échec de la connexion SSL" @@ -9906,6 +10106,11 @@ msgid "Connection refused." msgstr "Connexion refusée." +#. 10048 +#, c-format +msgid "Address already in use." +msgstr "Cette adresse est déjà utilisée." + msgid "Internet Messenger" msgstr "Messagerie internet" @@ -10013,8 +10218,8 @@ msgid "_Basic" msgstr "_Essentiel" -msgid "Create this new account on the server" -msgstr "Créer ce nouveau compte sur le serveur" +msgid "Create _this new account on the server" +msgstr "Créer ce _nouveau compte sur le serveur" msgid "_Advanced" msgstr "_Avancé" @@ -10117,6 +10322,12 @@ msgid "_Remove" msgstr "_Supprimer" +msgid "Set Custom Icon" +msgstr "Changer l'icône" + +msgid "Remove Custom Icon" +msgstr "Supprimer l'icône" + msgid "Add _Buddy..." msgstr "Ajouter un _contact..." @@ -10214,8 +10425,8 @@ msgid "/_Accounts" msgstr "/C_omptes" -msgid "/Accounts/Manage" -msgstr "/Comptes/Gérer" +msgid "/Accounts/Manage Accounts" +msgstr "/Comptes/Gérer les comptes" #. Tools msgid "/_Tools" @@ -10236,6 +10447,9 @@ msgid "/Tools/Pr_ivacy" msgstr "/Outils/_Filtres" +msgid "/Tools/Smile_y" +msgstr "/Outils/Frim_ousses" + msgid "/Tools/_File Transfers" msgstr "/Outils/_Transferts de fichier" @@ -10402,15 +10616,15 @@ "<span weight='bold' size='larger'>Welcome to %s!</span>\n" "\n" "You have no accounts enabled. Enable your IM accounts from the <b>Accounts</" -"b> window at <b>Accounts->Manage</b>. Once you enable accounts, you'll be " -"able to sign on, set your status, and talk to your friends." +"b> window at <b>Accounts->Manage Accounts</b>. Once you enable accounts, " +"you'll be able to sign on, set your status, and talk to your friends." msgstr "" "<span weight='bold' size='larger'>Bienvenue dans %s !</span>\n" "\n" "Vous n'avez aucun compte actif. Activez vos comptes de messagerie depuis la " -"fenêtre <b>Comptes</b> dans le menu <b>Comptes->Gérer</b>. Une fois les " -"comptes activés, vous pourrez vous connecter, changer votre état et discuter " -"avec vos contacts." +"fenêtre <b>Comptes</b> dans le menu <b>Comptes->Gérer les comptes</b>. Une " +"fois les comptes activés, vous pourrez vous connecter, changer votre état et " +"discuter avec vos contacts." #. set the Show Offline Buddies option. must be done #. * after the treeview or faceprint gets mad. -Robot101 @@ -10471,6 +10685,12 @@ msgid "Please enter the name of the group to be added." msgstr "Saisissez le nom du groupe à ajouter" +msgid "Enable Account" +msgstr "Activer un compte" + +msgid "<PurpleMain>/Accounts/Enable Account" +msgstr "<PurpleMain>/Comptes/Activer un compte" + msgid "<PurpleMain>/Accounts/" msgstr "<PurpleMain>/Comptes/" @@ -10483,12 +10703,6 @@ msgid "_Disable" msgstr "_Désactiver" -msgid "Enable Account" -msgstr "Activer un compte" - -msgid "<PurpleMain>/Accounts/Enable Account" -msgstr "<PurpleMain>/Comptes/Activer un compte" - msgid "/Tools" msgstr "/Outils" @@ -10573,9 +10787,6 @@ msgid "Change Size" msgstr "Changer la taille" -msgid "Remove Custom Icon" -msgstr "Supprimer l'icône" - msgid "Show All" msgstr "Tout afficher" @@ -10844,12 +11055,13 @@ msgid "Fatal Error" msgstr "Erreur critique" -msgid "lead developer" -msgstr "codeur principal" - msgid "developer" msgstr "codeur" +#. feel free to not translate this +msgid "Ka-Hing Cheung" +msgstr "" + msgid "support" msgstr "support" @@ -10881,6 +11093,9 @@ msgid "original author" msgstr "auteur original" +msgid "lead developer" +msgstr "codeur principal" + msgid "Afrikaans" msgstr "Afrikaans" @@ -11016,6 +11231,9 @@ msgid "Norwegian Nynorsk" msgstr "Norvégien (nynorsk)" +msgid "Occitan" +msgstr "Occitan" + msgid "Punjabi" msgstr "Panjâbî" @@ -11256,23 +11474,35 @@ msgid "Right-click for more unread messages...\n" msgstr "Clic droit pour plus de messages non lus...\n" -msgid "Change Status" -msgstr "Changer d'état" - -msgid "Show Buddy List" -msgstr "Afficher la liste de contacts" - -msgid "New Message..." -msgstr "Nouveau message..." - -msgid "Mute Sounds" -msgstr "Silencieux" - -msgid "Blink on New Message" -msgstr "Clignoter sur un nouveau message" - -msgid "Quit" -msgstr "Quitter" +msgid "_Change Status" +msgstr "_Changer d'état" + +msgid "Show Buddy _List" +msgstr "Afficher la _liste de contacts" + +msgid "_Unread Messages" +msgstr "Messages _non lus" + +msgid "New _Message..." +msgstr "Nouveau _message..." + +msgid "_Accounts" +msgstr "C_omptes" + +msgid "Plu_gins" +msgstr "Plug_ins" + +msgid "Pr_eferences" +msgstr "_Préférences" + +msgid "Mute _Sounds" +msgstr "_Silencieux" + +msgid "_Blink on New Message" +msgstr "Cli_gnoter sur un nouveau message" + +msgid "_Quit" +msgstr "_Quitter" msgid "Not started" msgstr "Pas commencé" @@ -11363,29 +11593,35 @@ "Couleur pour afficher les liens hypertextes quand la souris les survole." msgid "Sent Message Name Color" -msgstr "Couleur du nom pour les messages envoyés" +msgstr "Nom de la couleur pour les messages envoyés" msgid "Color to draw the name of a message you sent." msgstr "Couleur pour afficher le nom dans les messages que vous envoyez." msgid "Received Message Name Color" -msgstr "Couleur du nom pour les messages reçus" +msgstr "Nom de la couleur pour les messages reçus" msgid "Color to draw the name of a message you received." msgstr "Couleur pour afficher le nom de votre interlocuteur." msgid "\"Attention\" Name Color" -msgstr "Couleur du nom en surbrillance" +msgstr "Nom de la couleur des messages en surbrillance" msgid "Color to draw the name of a message you received containing your name." msgstr "Couleur pour afficher les messages reçus qui contiennent votre nom." msgid "Action Message Name Color" -msgstr "Couleur du nom des message d'action" +msgstr "Nom de la couleur des messages d'action" msgid "Color to draw the name of an action message." msgstr "Couleur pour afficher le nom pour les messages d'action." +msgid "Action Message Name Color for Whispered Message" +msgstr "Nom de la couleur des messages chuchotés." + +msgid "Whisper Message Name Color" +msgstr "Nom de la couleur pour les messages envoyés" + msgid "Typing notification color" msgstr "Couleur de la notification de saisie" @@ -11458,6 +11694,10 @@ msgid "_Save Image..." msgstr "Enregi_strer l'image..." +#, c-format +msgid "_Add Custom Smiley..." +msgstr "_Ajouter une frimousse personnalisée..." + msgid "Select Font" msgstr "Changer la police" @@ -11496,9 +11736,21 @@ msgid "Insert Image" msgstr "Insérer une image" +#, c-format +msgid "" +"This smiley is disabled because a custom smiley exists for this shortcut:\n" +" %s" +msgstr "" +"Cette frimousse est désactivée parce qu'une frimousse personnalisée existe " +"pour ce raccourci :\n" +" %s" + msgid "Smile!" msgstr "Souriez !" +msgid "_Manage custom smileys" +msgstr "_Gérer les frimousses personnalisées" + msgid "This theme has no available smileys." msgstr "Ce thème n'a pas de frimousses." @@ -12227,6 +12479,12 @@ msgid "Play" msgstr "Jouer" +msgid "_Browse..." +msgstr "_Naviguer..." + +msgid "_Reset" +msgstr "Remise à _zéro" + msgid "_Report idle time:" msgstr "_Rapporter le temps d'inactivité :" @@ -12396,6 +12654,47 @@ msgid "Status for %s" msgstr "État pour %s" +msgid "Custom Smiley" +msgstr "Frimousse personnalisée" + +msgid "Duplicate Shortcut" +msgstr "Raccourci en double" + +msgid "" +"A custom smiley for the selected shortcut already exists. Please specify a " +"different shortcut." +msgstr "" +"Une frimousse spécialisée pour ce raccourci existe déjà. Veuillez choisir un " +"autre raccourci." + +msgid "More Data needed" +msgstr "Données insuffisantes" + +msgid "Please provide a shortcut to associate with the smiley." +msgstr "Veuillez fournir un raccourci correspondant à cette frimousse." + +msgid "Please select an image for the smiley." +msgstr "Veuillez choisir une image pour cette frimousse." + +msgid "Edit Smiley" +msgstr "Modifier la frimousse" + +msgid "Add Smiley" +msgstr "Ajouter la frimousse" + +msgid "Smiley _Image" +msgstr "_Image de la frimousse" + +#. Smiley shortcut +msgid "Smiley S_hortcut" +msgstr "_Raccourci de la frimousse" + +msgid "Smiley" +msgstr "Frimousse" + +msgid "Custom Smiley Manager" +msgstr "Gestionnaire de frimousses personnalisée" + msgid "Waiting for network connection" msgstr "En attente de connexion réseau." @@ -13118,7 +13417,7 @@ msgstr "Couleur des liens hypertextes" msgid "Highlighted Message Name Color" -msgstr "Couleur du nom des messages en surbrillance" +msgstr "Nom de la couleur des messages en surbrillance" msgid "GtkTreeView Horizontal Separation" msgstr "Séparation horizontale GtkTreeView" @@ -13534,12 +13833,49 @@ msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "Ce plugin est utile pour débugger les clients ou serveurs XMPP." +#~ msgid "Error setting socket options" +#~ msgstr "Erreur à la mise en place des paramètres de la connexion." + +#~ msgid "" +#~ "Windows Live ID authentication: cannot find authenticate token in server " +#~ "response" +#~ msgstr "" +#~ "Authentification Windows Live ID : impossible de trouver le jeton " +#~ "d'authentification dans la réponse du serveur." + +#~ msgid "Windows Live ID authentication Failed" +#~ msgstr "Échec de l'authentification Windows Live ID" + +#~ msgid "Too evil (sender)" +#~ msgstr "Trop méchant (envoyeur)" + +#~ msgid "Too evil (receiver)" +#~ msgstr "Trop méchant (destinataire)" + +#~ msgid "Available Message" +#~ msgstr "Message de disponibilité" + +#~ msgid "Away Message" +#~ msgstr "Message d'absence" + +#~ msgid "<i>(retrieving)</i>" +#~ msgstr " <i>(en cours de récupération)</i>" + +#~ msgid "Error requesting login token" +#~ msgstr "Erreur à la demande d'un token de connexion" + +#~ msgid "TCP Address" +#~ msgstr "Adresse TCP" + +#~ msgid "UDP Address" +#~ msgstr "Adresse UDP" + +#~ msgid "Login failed, no reply" +#~ msgstr "Échec à la connexion, aucune réponse." + #~ msgid "Screen name:" #~ msgstr "Nom d'utilisateur :" -#~ msgid "Screen Name" -#~ msgstr "Nom d'utilisateur" - #~ msgid "Someone says your screen name in chat" #~ msgstr "Quelqu'un dit votre nom d'utilisateur dans la discussion"