diff options
author | Marcus Lundblad <malu@pidgin.im> | 2009-03-02 21:25:31 +0000 |
---|---|---|
committer | Marcus Lundblad <malu@pidgin.im> | 2009-03-02 21:25:31 +0000 |
commit | b57c248e07a182c05c594a555eb6c3df9db76e4c (patch) | |
tree | 44b4786fd8195d9055dfbcf48457619ed9d1faa2 | |
parent | a02b0794453a192d756d3e65900097cb1e04d7ff (diff) | |
parent | 8f4cd05bc2cbeb9d8975548858e65558600115bd (diff) | |
download | pidgin-b57c248e07a182c05c594a555eb6c3df9db76e4c.tar.gz |
propagate from branch 'im.pidgin.pidgin' (head 133e5eca834c5d4adad0937da2cb93df4e9c8b30)
to branch 'im.pidgin.cpw.malu.xmpp.idle' (head 9c4c5087aa07fbcb7ea01f00ddf08cf8cf1ea67d)
293 files changed, 30020 insertions, 14976 deletions
diff --git a/.mtn-ignore b/.mtn-ignore index 3f6c88ab7b..de8aae230a 100644 --- a/.mtn-ignore +++ b/.mtn-ignore @@ -10,6 +10,7 @@ .*\.def$ .*\.dll$ .*\.exe$ +.*\.loT$ intltool-.* Doxyfile(\.mingw)?$ aclocal.m4 diff --git a/.todo b/.todo deleted file mode 100644 index 20487b9c5a..0000000000 --- a/.todo +++ /dev/null @@ -1,7 +0,0 @@ -<todo version="0.1.19"> - <title> - Gaim TODO List - </title> - <link filename="./libpurple/protocols/oscar/.todo" priority="medium" time="0"/> - <link filename="./libpurple/protocols/jabber/.todo" priority="medium" time="1176995038"/> -</todo> @@ -35,7 +35,7 @@ Nathan 'faceprint' Walp - Developer Crazy Patch Writers: ------------------- -Paul Aurich +Paul 'darkrain42' Aurich Marcus 'malu' Lundblad Dennis 'EvilDennisR' Ristuccia Peter 'Fmoo' Ruibal @@ -87,6 +87,7 @@ Jono Cole Lorenzo Colitti Collabora Ltd. Jeff Connelly +Chris Connett Nathan Conrad Felipe Contreras Alex Converse @@ -219,6 +220,7 @@ Yann Kerherve Gordian Klein Akuke Kok Kir Kolyshkin +F.W. Kong Konstantin Korikov Cole Kowalski Matt Kramer @@ -1,6 +1,25 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul -version 2.5.5 (??/??/????): +version 2.6.0 (??/??/2009): + General: + * Theme support in libpurple thanks to Justin Rodriguez's summer of code + project. With some minor additions and clean ups from Paul Aurich. + + XMPP: + * Add support for in-band bytestreams (XEP-0047). + * Add support for attention (XEP-0224). + + Pidgin: + * Added -f command line option to tell Pidgin to ignore NetworkManager + and assume it has a valid network connection. + * Allow plugins to specify custom link types to the GtkIMHtml widget. + * The status message input box at the bottom of the buddy list expands + correctly when starting a new line of text. + * Pressing the Enter key in the message entry box of the New Status + dialog and various other dialogs now causes the cursor to move to + the next line. + +version 2.5.5 (03/01/2009): libpurple: * Fix a crash when removing an account with an unknown protocol id. * Beta support for SSL connections for AIM and ICQ accounts. To @@ -669,13 +688,13 @@ version 2.2.1 (09/29/2007): version 2.2.0 (09/13/2007): http://developer.pidgin.im/query?status=closed&milestone=2.2.0 - Libpurple: + libpurple: * New protocol plugin: MySpaceIM (Jeff Connelly, Google Summer of Code) * XMPP enhancements. See - http://www.adiumx.com/blog/2007/07/soc-xmpp-update.php (Andreas + http://www.adiumx.com/blog/2007/07/soc-xmpp-update.php (Andreas Monitzer, Google Summer of Code for Adium) - * Certificate management. Libpurple will validate certificates on + * Certificate management. libpurple will validate certificates on SSL-encrypted protocols (William Ehlhardt, Google Summer of Code) * Some adjustments were made to fix sending messages when using the MSN HTTP method. (Laszlo Pandy) diff --git a/ChangeLog.API b/ChangeLog.API index 883c8fb011..ba94d7b728 100644 --- a/ChangeLog.API +++ b/ChangeLog.API @@ -1,6 +1,74 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul -version 2.5.5 (??/??/2009): +version 2.6.0 (??/??/2009): + libpurple: + Added: + * PURPLE_BLIST_NODE + * PURPLE_GROUP + * PURPLE_CONTACT + * PURPLE_BUDDY + * PURPLE_CHAT + * purple_buddy_get_protocol_data + * purple_buddy_set_protocol_data + * purple_buddy_get_local_buddy_alias + * purple_blist_get_buddies + * purple_blist_get_ui_data + * purple_blist_set_ui_data + * purple_blist_node_get_ui_data + * purple_blist_node_set_ui_data + * purple_connection_get_protocol_data + * purple_connection_set_protocol_data + * purple_global_proxy_set_info + * purple_log_get_activity_score + * purple_network_force_online + * purple_request_field_get_group + * purple_request_field_get_ui_data + * purple_request_field_set_ui_data + * purple_strequal + * xmlnode_from_file + + Deprecated: + * purple_buddy_get_local_alias + * purple_notify_user_info_remove_entry + * purple_status_type_set_primary_attr + * purple_status_type_add_attr + * purple_status_type_add_attrs + * purple_status_type_add_attrs_vargs + * purple_status_type_get_primary_attr + * purple_status_set_attr_boolean + * purple_status_set_attr_int + * purple_status_set_attr_string + * purple_presence_add_status + * purple_presence_add_list + + pidgin: + Added: + * gtk_imhtml_class_register_protocol + * gtk_imhtml_link_get_url, gtk_imhtml_link_get_text_tag, + gtk_imhtml_link_activate functions to process GtkIMHtmlLink + objects from GtkIMHtml protocol callbacks. + * gtk_imhtml_set_return_inserts_newline + * pidgin_blist_set_theme + * pidgin_blist_get_theme + * pidgin_sound_is_customized + * pidgin_utils_init, pidgin_utils_uninit + + perl: + Changed: + * Made a bunch of functions act more perl-like. Call the new() + functions as Class->new(...) instead of Class::new(...): + * Purple::Request::Fields::new + * Purple::Request::Field::new + * Purple::Request::Field::account_new + * Purple::Request::Field::bool_new + * Purple::Request::Field::choice_new + * Purple::Request::Field::int_new + * Purple::Request::Field::label_new + * Purple::Request::Field::list_new + * Purple::Request::Field::string_new + * Purple::Request::Field::group_new + +version 2.5.5 (03/01/2009): libpurple: Changed: * purple_status_type_new now defaults "saveable" to TRUE. diff --git a/ChangeLog.win32 b/ChangeLog.win32 index 3e3e10cb17..74b752acdb 100644 --- a/ChangeLog.win32 +++ b/ChangeLog.win32 @@ -1,7 +1,10 @@ -version 2.5.5 (??/??/2009): +version 2.6.0 (??/??/2009): + +version 2.5.5 (03/01/2009): * Remove the "Flash window when chat messages are received" pref from the Windows Pidgin Options plugin - the Message Notification plugin does this (and much more). + * Updated GTK+ to 2.14.7 version 2.5.4 (01/12/2009): * Fix the "Hang on Exit" issue that a number of users encountered. diff --git a/Makefile.am b/Makefile.am index d875d8117b..28c2e40fa1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -10,6 +10,7 @@ EXTRA_DIST = \ README.mingw \ config.h.mingw \ doxy2devhelp.xsl \ + fix-casts.sh \ gaim.pc.in \ gaim-uninstalled.pc.in \ intltool-extract.in \ diff --git a/Makefile.mingw b/Makefile.mingw index b5acdbad66..a1d7c8d4db 100644 --- a/Makefile.mingw +++ b/Makefile.mingw @@ -2,7 +2,7 @@ # # Author: hermanator12002@yahoo.com # Date 9/11/02 -# Description: Top Makefile for win32 (mingw) port of Pidgin and LibPurple +# Description: Top Makefile for win32 (mingw) port of Pidgin and libpurple # PIDGIN_TREE_TOP := . @@ -2,6 +2,17 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul Our development blog is available at: http://planet.pidgin.im +2.5.5 (03/01/2009): + John: Well, yet another release with bug fixing and patches. Hopefully + one of the fixed bugs is one that irritated you. Also, thank Dimmuxx + for spending far too much time working on ICQ this release. + + Elliott: Lots and lots of MSN bugfixes again (I hope they're fixed, at + least). I think we finally have OCS/Yahoo!/federated buddies working + now. And there should be some workarounds for some server things that + may or may not have been our fault (like buddies on Allow+Block) which + should make general usage a bit smoother. + 2.5.4 (01/12/2009): John: Well, we fixed a few bugs for you this time around, I applied a few patches, and we've dealt with what feels like a TON of tickets diff --git a/configure.ac b/configure.ac index a3378478b6..88de36f823 100644 --- a/configure.ac +++ b/configure.ac @@ -43,19 +43,19 @@ AC_PREREQ([2.50]) # # Make sure to update finch/libgnt/configure.ac with libgnt version changes. # -m4_define([purple_lt_current], [5]) +m4_define([purple_lt_current], [6]) m4_define([purple_major_version], [2]) -m4_define([purple_minor_version], [5]) -m4_define([purple_micro_version], [5]) +m4_define([purple_minor_version], [6]) +m4_define([purple_micro_version], [0]) m4_define([purple_version_suffix], [devel]) m4_define([purple_version], [purple_major_version.purple_minor_version.purple_micro_version]) m4_define([purple_display_version], purple_version[]m4_ifdef([purple_version_suffix],[purple_version_suffix])) -m4_define([gnt_lt_current], [5]) +m4_define([gnt_lt_current], [6]) m4_define([gnt_major_version], [2]) -m4_define([gnt_minor_version], [5]) -m4_define([gnt_micro_version], [5]) +m4_define([gnt_minor_version], [6]) +m4_define([gnt_micro_version], [0]) m4_define([gnt_version_suffix], [devel]) m4_define([gnt_version], [gnt_major_version.gnt_minor_version.gnt_micro_version]) @@ -144,7 +144,7 @@ darwin*) ;; esac -ALL_LINGUAS="af am ar az be@latin bg bn bs ca ca@valencia cs da de dz el en_AU en_CA en_GB eo es et eu fa fi fr ga gl gu he hi hu id it ja ka kn ko ku lo lt mk mn my_MM nb ne nl nn oc pa pl pt_BR pt ps ro ru si sk sl sq sr sr@latin sv ta te th tr uk ur vi xh zh_CN zh_HK zh_TW" +ALL_LINGUAS="af am ar az be@latin bg bn bs ca ca@valencia cs da de dz el en_AU en_CA en_GB eo es et eu fa fi fr ga gl gu he hi hu id it ja ka km kn ko ku lo lt mk mn my_MM nb ne nl nn oc pa pl pt_BR pt ps ro ru si sk sl sq sr sr@latin sv ta te th tr uk ur vi xh zh_CN zh_HK zh_TW" AM_GLIB_GNU_GETTEXT dnl If we don't have msgfmt, then po/ is going to fail -- ensure that @@ -1103,6 +1103,7 @@ for i in $DYNAMIC_PRPLS ; do msnp9) dynamic_msn=yes ;; myspace) dynamic_myspace=yes ;; novell) dynamic_novell=yes ;; + null) dynamic_null=yes ;; oscar) dynamic_oscar=yes ;; aim) dynamic_oscar=yes ;; icq) dynamic_oscar=yes ;; @@ -1117,21 +1118,6 @@ for i in $DYNAMIC_PRPLS ; do *) echo "Invalid dynamic protocol $i!!" ; exit ;; esac done -AM_CONDITIONAL(DYNAMIC_BONJOUR, test "x$dynamic_bonjour" = "xyes" -a [ "x$avahiincludes" = "xyes" -a "x$avahilibs " = "xyes" ] ) -AM_CONDITIONAL(DYNAMIC_GG, test "x$dynamic_gg" = "xyes") -AM_CONDITIONAL(DYNAMIC_IRC, test "x$dynamic_irc" = "xyes") -AM_CONDITIONAL(DYNAMIC_JABBER, test "x$dynamic_jabber" = "xyes") -AM_CONDITIONAL(DYNAMIC_MSN, test "x$dynamic_msn" = "xyes") -AM_CONDITIONAL(DYNAMIC_MYSPACE, test "x$dynamic_myspace" = "xyes") -AM_CONDITIONAL(DYNAMIC_NOVELL, test "x$dynamic_novell" = "xyes") -AM_CONDITIONAL(DYNAMIC_OSCAR, test "x$dynamic_oscar" = "xyes") -AM_CONDITIONAL(DYNAMIC_QQ, test "x$dynamic_qq" = "xyes") -AM_CONDITIONAL(DYNAMIC_SAMETIME, test "x$dynamic_sametime" = "xyes" -a "x$have_meanwhile" = "xyes") -AM_CONDITIONAL(DYNAMIC_SILC, test "x$dynamic_silc" = "xyes" -a "x$have_silc" = "xyes") -AM_CONDITIONAL(DYNAMIC_SIMPLE, test "x$dynamic_simple" = "xyes") -AM_CONDITIONAL(DYNAMIC_TOC, test "x$dynamic_toc" = "xyes") -AM_CONDITIONAL(DYNAMIC_YAHOO, test "x$dynamic_yahoo" = "xyes") -AM_CONDITIONAL(DYNAMIC_ZEPHYR, test "x$dynamic_zephyr" = "xyes") AC_ARG_ENABLE(plugins, [AC_HELP_STRING([--disable-plugins], [compile without plugin support])], , enable_plugins=yes) AC_ARG_WITH(krb4, [AC_HELP_STRING([--with-krb4=PREFIX], [compile Zephyr plugin with Kerberos 4 support])], kerberos="$withval", kerberos="no") @@ -1702,6 +1688,22 @@ fi AC_SUBST(GNUTLS_CFLAGS) AC_SUBST(GNUTLS_LIBS) +if test "x$enable_gnutls" = "xyes"; then + AC_MSG_CHECKING(for gnutls_priority_set_direct) + LIBS_save="$LIBS" + LIBS="$LIBS $GNUTLS_LIBS" + CPPFLAGS_save="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $GNUTLS_CFLAGS" + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <gnutls/gnutls.h>], + [gnutls_session s; gnutls_priority_set_direct(s, NULL, NULL);])], + [AC_DEFINE([HAVE_GNUTLS_PRIORITY_FUNCS], 1, + [Define if your gnutls has gnutls_priority_set_direct and friends]) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) + CPPFLAGS="$CPPFLAGS_save" + LIBS="$LIBS_save" +fi + AM_CONDITIONAL(USE_GNUTLS, test "x$enable_gnutls" = "xyes") diff --git a/doc/TCL-HOWTO.dox b/doc/TCL-HOWTO.dox index 931e5bf87c..f8a483035c 100644 --- a/doc/TCL-HOWTO.dox +++ b/doc/TCL-HOWTO.dox @@ -332,7 +332,7 @@ be made in their own namespace, and arguments to those signal callbacks will live in the namespace @c event underneath that namespace. To briefly illustrate, the signal @c receiving-im-msg is provided with three arguments; the account on which the IM was -received, the screen name of the user sending the IM, and the text of +received, the name of the buddy sending the IM, and the text of the IM. These arguments live in the variables @c event::account, @c event::sender, and @c event::buffer, respectively. Therefore a callback which notifies the user of an incoming IM containing the word 'shizzle' diff --git a/doc/notify-signals.dox b/doc/notify-signals.dox index a21c6efecc..9c85c47d04 100644 --- a/doc/notify-signals.dox +++ b/doc/notify-signals.dox @@ -18,7 +18,7 @@ void (*displaying_userinfo)(PurpleAccount *account, const char *who, PurpleNotif @note If adding a PurpleNotifyUserInfoEntry, be sure not to free it -- PurpleNotifyUserInfo assumes responsibility for its objects. @param account The account on which the info was obtained. - @param who The screen name of the user whose info is to be displayed. + @param who The name of the buddy whose info is to be displayed. @param user_info The information to be displayed, as PurpleNotifyUserInfoEntry objects @endsignaldef diff --git a/doc/pidgin.1.in b/doc/pidgin.1.in index 8675870dd5..0a91454949 100644 --- a/doc/pidgin.1.in +++ b/doc/pidgin.1.in @@ -128,11 +128,11 @@ buddy or chat. .TP .B Alias Create an alias for this buddy. This will show an editable text field where -the buddy's screen name was displayed. In this field one can give this +the buddy's name was displayed. In this field one can give this buddy an alternate, more friendly name to appear on the buddy list and in conversations. -For example, if a buddy's name screen name was jsmith1281xx and his real +For example, if a buddy's name was jsmith1281xx and his real name was 'John Q. Smith,' one could create an alias as to identify the buddy by his common name. .LP @@ -150,7 +150,7 @@ them. It can be accessed by selecting \fBManage\fR from the Accounts menu. Clicking \fIDelete\fR will delete the currently selected account. Clicking \fIAdd\fR or \fIModify\fR will invoke a \fBModify Account\fR window. Here, the user can add or alter account information. When creating -a new account, the user will submit a screen name and password. The user will +a new account, the user will submit a username and password. The user will also choose the protocol for the account. If \fIRemember Password\fR is chosen, the password will be saved in @@ -545,7 +545,7 @@ about this interaction exists. .br \fI~/.purple/status.xml\fR: stores the user's away messages. .br - \fI~/.purple/logs/PROTOCOL/ACCOUNT/SCREENNAME/DATE.{html,txt}\fR: conversation logs. + \fI~/.purple/logs/PROTOCOL/ACCOUNT/BUDDYNAME/DATE.{html,txt}\fR: conversation logs. .SH DIRECTORIES \fI@prefix@/lib/pidgin/\fR: Pidgin's plugins directory. diff --git a/finch/gntaccount.c b/finch/gntaccount.c index 575f3b04eb..b7fe53964c 100644 --- a/finch/gntaccount.c +++ b/finch/gntaccount.c @@ -65,7 +65,7 @@ typedef struct GntWidget *window; GntWidget *protocol; - GntWidget *screenname; + GntWidget *username; GntWidget *password; GntWidget *alias; @@ -118,8 +118,8 @@ save_account_cb(AccountEditDialog *dialog) plugin = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(dialog->protocol)); prplinfo = PURPLE_PLUGIN_PROTOCOL_INFO(plugin); - /* Screenname && user-splits */ - value = gnt_entry_get_text(GNT_ENTRY(dialog->screenname)); + /* Username && user-splits */ + value = gnt_entry_get_text(GNT_ENTRY(dialog->username)); if (value == NULL || *value == '\0') { @@ -326,7 +326,7 @@ update_user_splits(AccountEditDialog *dialog) } if (username != NULL) - gnt_entry_set_text(GNT_ENTRY(dialog->screenname), username); + gnt_entry_set_text(GNT_ENTRY(dialog->username), username); g_free(username); } @@ -546,7 +546,7 @@ edit_account(PurpleAccount *account) gnt_box_set_pad(GNT_BOX(hbox), 0); gnt_box_add_widget(GNT_BOX(window), hbox); - dialog->screenname = entry = gnt_entry_new(NULL); + dialog->username = entry = gnt_entry_new(NULL); gnt_box_add_widget(GNT_BOX(hbox), gnt_label_new(_("Username:"))); gnt_box_add_widget(GNT_BOX(hbox), entry); diff --git a/finch/gntblist.c b/finch/gntblist.c index 39f852fb77..949d5b76b0 100644 --- a/finch/gntblist.c +++ b/finch/gntblist.c @@ -357,7 +357,7 @@ get_display_color(PurpleBlistNode *node) int color = 0; if (PURPLE_BLIST_NODE_IS_CONTACT(node)) - node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)node); + node = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(node))); if (!PURPLE_BLIST_NODE_IS_BUDDY(node)) return 0; @@ -388,7 +388,7 @@ get_blist_node_flag(PurpleBlistNode *node) if (fnode && fnode->signed_timer) flag |= GNT_TEXT_FLAG_BLINK; else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { - node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact *)node); + node = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(node))); fnode = FINCH_GET_DATA(node); if (fnode && fnode->signed_timer) flag |= GNT_TEXT_FLAG_BLINK; @@ -886,7 +886,7 @@ get_display_name(PurpleBlistNode *node) const char *name = NULL; if (PURPLE_BLIST_NODE_IS_CONTACT(node)) - node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)node); /* XXX: this can return NULL?! */ + node = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(node))); /* XXX: this can return NULL?! */ if (node == NULL) return NULL; @@ -1027,7 +1027,7 @@ selection_activate(GntWidget *widget, FinchBlist *ggblist) return; if (PURPLE_BLIST_NODE_IS_CONTACT(node)) - node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)node); + node = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(node))); if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { @@ -1438,16 +1438,16 @@ static void showlog_cb(PurpleBlistNode *sel, PurpleBlistNode *node) if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { PurpleBuddy *b = (PurpleBuddy*) node; type = PURPLE_LOG_IM; - name = g_strdup(b->name); - account = b->account; + name = g_strdup(purple_buddy_get_name(b)); + account = purple_buddy_get_account(b); } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { PurpleChat *c = (PurpleChat*) node; PurplePluginProtocolInfo *prpl_info = NULL; type = PURPLE_LOG_CHAT; - account = c->account; + account = purple_chat_get_account(c); prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_find_prpl(purple_account_get_protocol_id(account))); if (prpl_info && prpl_info->get_chat_name) { - name = prpl_info->get_chat_name(c->components); + name = prpl_info->get_chat_name(purple_chat_get_components(c)); } } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { finch_log_show_contact((PurpleContact *)node); @@ -1571,8 +1571,8 @@ finch_blist_toggle_tag_buddy(PurpleBlistNode *node) ggblist->tagged = g_list_prepend(ggblist->tagged, node); } if (PURPLE_BLIST_NODE_IS_CONTACT(node)) - node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)node); - if (PURPLE_BLIST_NODE_IS_BUDDY(node)) + update_buddy_display(purple_contact_get_priority_buddy(PURPLE_CONTACT(node)), ggblist); + else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) update_buddy_display((PurpleBuddy*)node, ggblist); else update_node_display(node, ggblist); @@ -1612,7 +1612,7 @@ finch_blist_place_tagged(PurpleBlistNode *target) purple_blist_add_group((PurpleGroup*)node, (PurpleBlistNode*)tg); } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { update_buddy_display(purple_contact_get_priority_buddy((PurpleContact*)node), ggblist); - if ((PurpleBlistNode*)tg == target) { + if (PURPLE_BLIST_NODE(tg) == target) { /* The target is a group, just add the contact to the group. */ purple_blist_add_contact((PurpleContact*)node, tg, NULL); } else if (tc) { @@ -1624,7 +1624,7 @@ finch_blist_place_tagged(PurpleBlistNode *target) } } else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { update_buddy_display((PurpleBuddy*)node, ggblist); - if ((PurpleBlistNode*)tg == target) { + if (PURPLE_BLIST_NODE(tg) == target) { /* The target is a group. Add this buddy in a new contact under this group. */ purple_blist_add_buddy((PurpleBuddy*)node, NULL, tg, NULL); } else if (PURPLE_BLIST_NODE_IS_CONTACT(target)) { @@ -1639,7 +1639,7 @@ finch_blist_place_tagged(PurpleBlistNode *target) } } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { update_node_display(node, ggblist); - if ((PurpleBlistNode*)tg == target) + if (PURPLE_BLIST_NODE(tg) == target) purple_blist_add_chat((PurpleChat*)node, tg, NULL); else purple_blist_add_chat((PurpleChat*)node, NULL, target); @@ -1685,7 +1685,7 @@ draw_context_menu(FinchBlist *ggblist) create_group_menu(GNT_MENU(context), NULL); title = g_strdup(_("Buddy List")); } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { - ggblist->cnode = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)node); + ggblist->cnode = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(node))); create_buddy_menu(GNT_MENU(context), (PurpleBuddy*)ggblist->cnode); title = g_strdup(purple_contact_get_alias((PurpleContact*)node)); } else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { @@ -2415,8 +2415,8 @@ blist_node_compare_status(PurpleBlistNode *n1, PurpleBlistNode *n2) switch (purple_blist_node_get_type(n1)) { case PURPLE_BLIST_CONTACT_NODE: - n1 = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)n1); - n2 = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)n2); + n1 = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(n1))); + n2 = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(n2))); /* now compare the presence of the priority buddies */ case PURPLE_BLIST_BUDDY_NODE: ret = purple_presence_compare(purple_buddy_get_presence((PurpleBuddy*)n1), diff --git a/finch/gntconv.c b/finch/gntconv.c index 103048bbb8..c836262873 100644 --- a/finch/gntconv.c +++ b/finch/gntconv.c @@ -496,8 +496,9 @@ view_log_cb(GntMenuItem *n, gpointer ggc) buddies = purple_find_buddies(account, name); for (cur = buddies; cur != NULL; cur = cur->next) { PurpleBlistNode *node = cur->data; - if ((node != NULL) && ((node->prev != NULL) || (node->next != NULL))) { - finch_log_show_contact((PurpleContact *)node->parent); + if ((node != NULL) && + (purple_blist_node_get_sibling_prev(node) || purple_blist_node_get_sibling_next(node))) { + finch_log_show_contact((PurpleContact *)purple_blist_node_get_parent(node)); g_slist_free(buddies); return; } @@ -529,7 +530,7 @@ generate_send_to_menu(FinchConv *ggc) gnt_menuitem_set_submenu(item, GNT_MENU(sub)); for (; buds; buds = g_slist_delete_link(buds, buds)) { - PurpleBlistNode *node = (PurpleBlistNode *)purple_buddy_get_contact((PurpleBuddy *)buds->data); + PurpleBlistNode *node = PURPLE_BLIST_NODE(purple_buddy_get_contact(PURPLE_BUDDY(buds->data))); for (node = purple_blist_node_get_first_child(node); node != NULL; node = purple_blist_node_get_sibling_next(node)) { PurpleBuddy *buddy = (PurpleBuddy *)node; diff --git a/finch/gntlog.c b/finch/gntlog.c index 1dc973fbe4..5593f73c87 100644 --- a/finch/gntlog.c +++ b/finch/gntlog.c @@ -49,7 +49,7 @@ static FinchLogViewer *syslog_viewer = NULL; struct log_viewer_hash_t { PurpleLogType type; - char *screenname; + char *username; PurpleAccount *account; PurpleContact *contact; }; @@ -62,7 +62,7 @@ static guint log_viewer_hash(gconstpointer data) return g_direct_hash(viewer->contact); if (viewer->account) { - return g_str_hash(viewer->screenname) + + return g_str_hash(viewer->username) + g_str_hash(purple_account_get_username(viewer->account)); } @@ -88,10 +88,10 @@ static gboolean log_viewer_equal(gconstpointer y, gconstpointer z) return FALSE; } - if (a->screenname && b->screenname) { - normal = g_strdup(purple_normalize(a->account, a->screenname)); + if (a->username && b->username) { + normal = g_strdup(purple_normalize(a->account, a->username)); ret = (a->account == b->account) && - !strcmp(normal, purple_normalize(b->account, b->screenname)); + !strcmp(normal, purple_normalize(b->account, b->username)); g_free(normal); } else { ret = (a == b); @@ -155,7 +155,7 @@ static void destroy_cb(GntWidget *w, struct log_viewer_hash_t *ht) lv = g_hash_table_lookup(log_viewers, ht); g_hash_table_remove(log_viewers, ht); - g_free(ht->screenname); + g_free(ht->username); g_free(ht); } else syslog_viewer = NULL; @@ -284,7 +284,7 @@ static FinchLogViewer *display_log_viewer(struct log_viewer_hash_t *ht, GList *l if (!purple_prefs_get_bool("/purple/logging/log_chats")) log_preferences = _("Chats will only be logged if the \"Log all chats\" preference is enabled."); } - g_free(ht->screenname); + g_free(ht->username); g_free(ht); } @@ -365,31 +365,31 @@ our_logging_blows(PurpleLogSet *set, PurpleLogSet *setagain, GList **list) *list = g_list_concat(purple_log_get_logs(PURPLE_LOG_IM, set->name, set->account), *list); } -void finch_log_show(PurpleLogType type, const char *screenname, PurpleAccount *account) +void finch_log_show(PurpleLogType type, const char *username, PurpleAccount *account) { struct log_viewer_hash_t *ht; FinchLogViewer *lv = NULL; - const char *name = screenname; + const char *name = username; char *title; GList *logs = NULL; int size = 0; if (type != PURPLE_LOG_IM) { g_return_if_fail(account != NULL); - g_return_if_fail(screenname != NULL); + g_return_if_fail(username != NULL); } ht = g_new0(struct log_viewer_hash_t, 1); ht->type = type; - ht->screenname = g_strdup(screenname); + ht->username = g_strdup(username); ht->account = account; if (log_viewers == NULL) { log_viewers = g_hash_table_new(log_viewer_hash, log_viewer_equal); } else if ((lv = g_hash_table_lookup(log_viewers, ht))) { gnt_window_present(lv->window); - g_free(ht->screenname); + g_free(ht->username); g_free(ht); return; } @@ -397,7 +397,7 @@ void finch_log_show(PurpleLogType type, const char *screenname, PurpleAccount *a if (type == PURPLE_LOG_CHAT) { PurpleChat *chat; - chat = purple_blist_find_chat(account, screenname); + chat = purple_blist_find_chat(account, username); if (chat != NULL) name = purple_chat_get_name(chat); @@ -405,8 +405,8 @@ void finch_log_show(PurpleLogType type, const char *screenname, PurpleAccount *a } else { PurpleBuddy *buddy; - if (screenname) { - buddy = purple_find_buddy(account, screenname); + if (username) { + buddy = purple_find_buddy(account, username); if (buddy != NULL) name = purple_buddy_get_contact_alias(buddy); title = g_strdup_printf(_("Conversations with %s"), name); @@ -415,9 +415,9 @@ void finch_log_show(PurpleLogType type, const char *screenname, PurpleAccount *a } } - if (screenname) { - logs = purple_log_get_logs(type, screenname, account); - size = purple_log_get_total_size(type, screenname, account); + if (username) { + logs = purple_log_get_logs(type, username, account); + size = purple_log_get_total_size(type, username, account); } else { /* This will happen only for IMs */ GHashTable *table = purple_log_get_log_sets(); @@ -458,12 +458,16 @@ void finch_log_show_contact(PurpleContact *contact) for (child = purple_blist_node_get_first_child((PurpleBlistNode*)contact); child; child = purple_blist_node_get_sibling_next(child)) { + const char *name; + PurpleAccount *account; if (!PURPLE_BLIST_NODE_IS_BUDDY(child)) continue; - logs = g_list_concat(purple_log_get_logs(PURPLE_LOG_IM, ((PurpleBuddy *)child)->name, - ((PurpleBuddy *)child)->account), logs); - total_log_size += purple_log_get_total_size(PURPLE_LOG_IM, ((PurpleBuddy *)child)->name, ((PurpleBuddy *)child)->account); + name = purple_buddy_get_name((PurpleBuddy *)child); + account = purple_buddy_get_account((PurpleBuddy *)child); + logs = g_list_concat(purple_log_get_logs(PURPLE_LOG_IM, name, + account), logs); + total_log_size += purple_log_get_total_size(PURPLE_LOG_IM, name, account); } logs = g_list_sort(logs, purple_log_compare); diff --git a/finch/gntlog.h b/finch/gntlog.h index c792e5dc14..e6bc43cebe 100644 --- a/finch/gntlog.h +++ b/finch/gntlog.h @@ -50,7 +50,7 @@ struct _FinchLogViewer { -void finch_log_show(PurpleLogType type, const char *screenname, PurpleAccount *account); +void finch_log_show(PurpleLogType type, const char *username, PurpleAccount *account); void finch_log_show_contact(PurpleContact *contact); void finch_syslog_show(void); diff --git a/finch/gntrequest.c b/finch/gntrequest.c index b613d8f811..9b37349cd6 100644 --- a/finch/gntrequest.c +++ b/finch/gntrequest.c @@ -39,6 +39,12 @@ #include "debug.h" #include "util.h" +/* XXX: Until gobjectification ... */ +#undef FINCH_GET_DATA +#undef FINCH_SET_DATA +#define FINCH_GET_DATA(obj) purple_request_field_get_ui_data(obj) +#define FINCH_SET_DATA(obj, data) purple_request_field_set_ui_data(obj, data) + typedef struct { void *user_data; @@ -393,11 +399,11 @@ request_fields_cb(GntWidget *button, PurpleRequestFields *fields) } static void -update_selected_account(GntEntry *screenname, const char *start, const char *end, +update_selected_account(GntEntry *username, const char *start, const char *end, GntComboBox *accountlist) { GList *accounts = gnt_tree_get_rows(GNT_TREE(accountlist->dropdown)); - const char *name = gnt_entry_get_text(screenname); + const char *name = gnt_entry_get_text(username); while (accounts) { if (purple_find_buddy(accounts->data, name)) { gnt_combo_box_set_selected(accountlist, accounts->data); @@ -419,7 +425,7 @@ create_boolean_field(PurpleRequestField *field) } static GntWidget* -create_string_field(PurpleRequestField *field, GntWidget **screenname) +create_string_field(PurpleRequestField *field, GntWidget **username) { const char *hint = purple_request_field_get_type_hint(field); GntWidget *entry = gnt_entry_new( @@ -435,8 +441,8 @@ create_string_field(PurpleRequestField *field, GntWidget **screenname) gnt_entry_add_suggest(GNT_ENTRY(entry), purple_buddy_get_name((PurpleBuddy*)node)); } gnt_entry_set_always_suggest(GNT_ENTRY(entry), TRUE); - if (screenname) - *screenname = entry; + if (username) + *username = entry; } else if (hint && !strcmp(hint, "group")) { PurpleBlistNode *node; for (node = purple_blist_get_root(); node; @@ -569,7 +575,7 @@ finch_request_fields(const char *title, const char *primary, { GntWidget *window, *box; GList *grlist; - GntWidget *screenname = NULL, *accountlist = NULL; + GntWidget *username = NULL, *accountlist = NULL; window = setup_request_window(title, primary, secondary, PURPLE_REQUEST_FIELDS); @@ -617,7 +623,7 @@ finch_request_fields(const char *title, const char *primary, } else if (type == PURPLE_REQUEST_FIELD_STRING) { - FINCH_SET_DATA(field, create_string_field(field, &screenname)); + FINCH_SET_DATA(field, create_string_field(field, &username)); } else if (type == PURPLE_REQUEST_FIELD_INTEGER) { @@ -633,7 +639,8 @@ finch_request_fields(const char *title, const char *primary, } else if (type == PURPLE_REQUEST_FIELD_ACCOUNT) { - accountlist = FINCH_SET_DATA(field, create_account_field(field)); + accountlist = create_account_field(field); + FINCH_SET_DATA(field, accountlist); } else { @@ -655,8 +662,8 @@ finch_request_fields(const char *title, const char *primary, setup_default_callback(window, cancel_cb, userdata); gnt_widget_show(window); - if (screenname && accountlist) { - g_signal_connect(screenname, "completion", G_CALLBACK(update_selected_account), accountlist); + if (username && accountlist) { + g_signal_connect(username, "completion", G_CALLBACK(update_selected_account), accountlist); } g_object_set_data(G_OBJECT(window), "fields", allfields); diff --git a/finch/plugins/grouping.c b/finch/plugins/grouping.c index 1c959635b8..cc40841207 100644 --- a/finch/plugins/grouping.c +++ b/finch/plugins/grouping.c @@ -87,7 +87,7 @@ static gpointer on_offline_find_parent(PurpleBlistNode *node) switch (purple_blist_node_get_type(node)) { case PURPLE_BLIST_CONTACT_NODE: - node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)node); + node = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(node))); ret = PURPLE_BUDDY_IS_ONLINE((PurpleBuddy*)node) ? &online : &offline; break; case PURPLE_BLIST_BUDDY_NODE: diff --git a/fix-casts.sh b/fix-casts.sh new file mode 100755 index 0000000000..6556f6935e --- /dev/null +++ b/fix-casts.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +if [ $# -eq 0 ]; then + echo "Usage: `basename "$0"` PurpleFoo..." + echo + echo "This script searches the *current working directory* and replaces casts" + echo "with GObject-style type checking and casting macros." + echo 'For example, "(PurpleBuddy *)b" becomes "PURPLE_BUDDY(b)".' + exit 0 +fi + +for struct in $* ; do + cast=`echo $struct | sed "s|[A-Z]|_\0|g" | tr "a-z" "A-Z" | sed "s|^_||"` + for file in `grep -rl "([[:space:]]*$struct[[:space:]]*\*[[:space:]]*)" . --include=*.c --exclude=purple-client-bindings.c` ; do + sed -i "s|([[:space:]]*$struct[[:space:]]*\*[[:space:]]*)[[:space:]]*(|$cast(|g" $file + sed -i "s|([[:space:]]*$struct[[:space:]]*\*[[:space:]]*)[[:space:]]*\([^(][^,);]*\)|$cast(\1)|g" $file + done +done diff --git a/libpurple/Makefile.am b/libpurple/Makefile.am index 8a11b0098d..ced412c40e 100644 --- a/libpurple/Makefile.am +++ b/libpurple/Makefile.am @@ -75,7 +75,12 @@ purple_coresources = \ stringref.c \ stun.c \ sound.c \ + sound-theme.c \ + sound-theme-loader.c \ sslconn.c \ + theme.c \ + theme-loader.c \ + theme-manager.c \ upnp.c \ util.c \ value.c \ @@ -128,7 +133,12 @@ purple_coreheaders = \ stringref.h \ stun.h \ sound.h \ + sound-theme.h \ + sound-theme-loader.h \ sslconn.h \ + theme.h \ + theme-loader.h \ + theme-manager.h \ upnp.h \ util.h \ value.h \ diff --git a/libpurple/Makefile.mingw b/libpurple/Makefile.mingw index 25fe830daf..952048c699 100644 --- a/libpurple/Makefile.mingw +++ b/libpurple/Makefile.mingw @@ -1,7 +1,7 @@ # # Makefile.mingw # -# Description: Makefile for win32 (mingw) version of LibPurple +# Description: Makefile for win32 (mingw) version of libpurple # PIDGIN_TREE_TOP := .. @@ -67,10 +67,15 @@ C_SRC = \ signals.c \ smiley.c \ sound.c \ + sound-theme.c \ + sound-theme-loader.c \ sslconn.c \ status.c \ stringref.c \ stun.c \ + theme.c \ + theme-loader.c \ + theme-manager.c \ upnp.c \ util.c \ value.c \ diff --git a/libpurple/account.c b/libpurple/account.c index eaf70344b4..0777fb4474 100644 --- a/libpurple/account.c +++ b/libpurple/account.c @@ -178,9 +178,7 @@ status_attr_to_xmlnode(const PurpleStatus *status, const PurpleStatusType *type, { const char *string_value = purple_value_get_string(attr_value); const char *default_string_value = purple_value_get_string(default_value); - if (((string_value == NULL) && (default_string_value == NULL)) || - ((string_value != NULL) && (default_string_value != NULL) && - !strcmp(string_value, default_string_value))) + if (purple_strequal(string_value, default_string_value)) return NULL; value = g_strdup(purple_value_get_string(attr_value)); } @@ -511,11 +509,11 @@ parse_settings(xmlnode *node, PurpleAccount *account) /* Ignore this setting */ continue; - if (!strcmp(str_type, "string")) + if (purple_strequal(str_type, "string")) type = PURPLE_PREF_STRING; - else if (!strcmp(str_type, "int")) + else if (purple_strequal(str_type, "int")) type = PURPLE_PREF_INT; - else if (!strcmp(str_type, "bool")) + else if (purple_strequal(str_type, "bool")) type = PURPLE_PREF_BOOLEAN; else /* Ignore this setting */ @@ -660,17 +658,17 @@ parse_proxy_info(xmlnode *node, PurpleAccount *account) child = xmlnode_get_child(node, "type"); if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) { - if (!strcmp(data, "global")) + if (purple_strequal(data, "global")) purple_proxy_info_set_type(proxy_info, PURPLE_PROXY_USE_GLOBAL); - else if (!strcmp(data, "none")) + else if (purple_strequal(data, "none")) purple_proxy_info_set_type(proxy_info, PURPLE_PROXY_NONE); - else if (!strcmp(data, "http")) + else if (purple_strequal(data, "http")) purple_proxy_info_set_type(proxy_info, PURPLE_PROXY_HTTP); - else if (!strcmp(data, "socks4")) + else if (purple_strequal(data, "socks4")) purple_proxy_info_set_type(proxy_info, PURPLE_PROXY_SOCKS4); - else if (!strcmp(data, "socks5")) + else if (purple_strequal(data, "socks5")) purple_proxy_info_set_type(proxy_info, PURPLE_PROXY_SOCKS5); - else if (!strcmp(data, "envvar")) + else if (purple_strequal(data, "envvar")) purple_proxy_info_set_type(proxy_info, PURPLE_PROXY_USE_ENVVAR); else { @@ -2027,7 +2025,7 @@ purple_account_get_status_type(const PurpleAccount *account, const char *id) { PurpleStatusType *status_type = (PurpleStatusType *)l->data; - if (!strcmp(purple_status_type_get_id(status_type), id)) + if (purple_strequal(purple_status_type_get_id(status_type), id)) return status_type; } @@ -2238,9 +2236,9 @@ purple_account_add_buddy(PurpleAccount *account, PurpleBuddy *buddy) PurplePluginProtocolInfo *prpl_info = NULL; PurpleConnection *gc = purple_account_get_connection(account); PurplePlugin *prpl = NULL; - + if (gc != NULL) - prpl = purple_connection_get_prpl(gc); + prpl = purple_connection_get_prpl(gc); if (prpl != NULL) prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); @@ -2255,20 +2253,20 @@ purple_account_add_buddies(PurpleAccount *account, GList *buddies) PurplePluginProtocolInfo *prpl_info = NULL; PurpleConnection *gc = purple_account_get_connection(account); PurplePlugin *prpl = NULL; - + if (gc != NULL) - prpl = purple_connection_get_prpl(gc); + prpl = purple_connection_get_prpl(gc); if (prpl != NULL) prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); - + if (prpl_info) { GList *cur, *groups = NULL; /* Make a list of what group each buddy is in */ for (cur = buddies; cur != NULL; cur = cur->next) { - PurpleBlistNode *node = cur->data; - groups = g_list_append(groups, node->parent->parent); + PurpleBuddy *buddy = cur->data; + groups = g_list_append(groups, purple_buddy_get_group(buddy)); } if (prpl_info->add_buddies != NULL) @@ -2294,13 +2292,13 @@ purple_account_remove_buddy(PurpleAccount *account, PurpleBuddy *buddy, PurplePluginProtocolInfo *prpl_info = NULL; PurpleConnection *gc = purple_account_get_connection(account); PurplePlugin *prpl = NULL; - + if (gc != NULL) - prpl = purple_connection_get_prpl(gc); + prpl = purple_connection_get_prpl(gc); if (prpl != NULL) prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); - + if (prpl_info && prpl_info->remove_buddy) prpl_info->remove_buddy(gc, buddy, group); } @@ -2311,13 +2309,13 @@ purple_account_remove_buddies(PurpleAccount *account, GList *buddies, GList *gro PurplePluginProtocolInfo *prpl_info = NULL; PurpleConnection *gc = purple_account_get_connection(account); PurplePlugin *prpl = NULL; - + if (gc != NULL) - prpl = purple_connection_get_prpl(gc); + prpl = purple_connection_get_prpl(gc); if (prpl != NULL) prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); - + if (prpl_info) { if (prpl_info->remove_buddies) prpl_info->remove_buddies(gc, buddies, groups); @@ -2339,9 +2337,9 @@ purple_account_remove_group(PurpleAccount *account, PurpleGroup *group) PurplePluginProtocolInfo *prpl_info = NULL; PurpleConnection *gc = purple_account_get_connection(account); PurplePlugin *prpl = NULL; - + if (gc != NULL) - prpl = purple_connection_get_prpl(gc); + prpl = purple_connection_get_prpl(gc); if (prpl != NULL) prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); @@ -2357,11 +2355,11 @@ purple_account_change_password(PurpleAccount *account, const char *orig_pw, PurplePluginProtocolInfo *prpl_info = NULL; PurpleConnection *gc = purple_account_get_connection(account); PurplePlugin *prpl = NULL; - + purple_account_set_password(account, new_pw); - + if (gc != NULL) - prpl = purple_connection_get_prpl(gc); + prpl = purple_connection_get_prpl(gc); if (prpl != NULL) prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); @@ -2375,15 +2373,15 @@ gboolean purple_account_supports_offline_message(PurpleAccount *account, PurpleB PurpleConnection *gc; PurplePluginProtocolInfo *prpl_info = NULL; PurplePlugin *prpl = NULL; - + g_return_val_if_fail(account, FALSE); g_return_val_if_fail(buddy, FALSE); gc = purple_account_get_connection(account); if (gc == NULL) return FALSE; - - prpl = purple_connection_get_prpl(gc); + + prpl = purple_connection_get_prpl(gc); if (prpl != NULL) prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); @@ -2518,23 +2516,26 @@ purple_accounts_delete(PurpleAccount *account) purple_accounts_remove(account); /* Remove this account's buddies */ - for (gnode = purple_blist_get_root(); gnode != NULL; gnode = gnode->next) { + for (gnode = purple_blist_get_root(); + gnode != NULL; + gnode = purple_blist_node_get_sibling_next(gnode)) + { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - cnode = gnode->child; + cnode = purple_blist_node_get_first_child(gnode); while (cnode) { - PurpleBlistNode *cnode_next = cnode->next; + PurpleBlistNode *cnode_next = purple_blist_node_get_sibling_next(cnode); if(PURPLE_BLIST_NODE_IS_CONTACT(cnode)) { - bnode = cnode->child; + bnode = purple_blist_node_get_first_child(cnode); while (bnode) { - PurpleBlistNode *bnode_next = bnode->next; + PurpleBlistNode *bnode_next = purple_blist_node_get_sibling_next(bnode); if (PURPLE_BLIST_NODE_IS_BUDDY(bnode)) { PurpleBuddy *b = (PurpleBuddy *)bnode; - if (b->account == account) + if (purple_buddy_get_account(b) == account) purple_blist_remove_buddy(b); } bnode = bnode_next; @@ -2542,7 +2543,7 @@ purple_accounts_delete(PurpleAccount *account) } else if (PURPLE_BLIST_NODE_IS_CHAT(cnode)) { PurpleChat *c = (PurpleChat *)cnode; - if (c->account == account) + if (purple_chat_get_account(c) == account) purple_blist_remove_chat(c); } cnode = cnode_next; @@ -2633,11 +2634,11 @@ purple_accounts_find(const char *name, const char *protocol_id) for (l = purple_accounts_get_all(); l != NULL; l = l->next) { account = (PurpleAccount *)l->data; - if (protocol_id && strcmp(account->protocol_id, protocol_id)) + if (protocol_id && !purple_strequal(account->protocol_id, protocol_id)) continue; who = g_strdup(purple_normalize(account, name)); - if (!strcmp(purple_normalize(account, purple_account_get_username(account)), who)) { + if (purple_strequal(purple_normalize(account, purple_account_get_username(account)), who)) { g_free(who); return account; } diff --git a/libpurple/account.h b/libpurple/account.h index 89f55bed69..7c6bfe9282 100644 --- a/libpurple/account.h +++ b/libpurple/account.h @@ -260,7 +260,7 @@ void purple_account_request_add(PurpleAccount *account, const char *remote_user, * Notifies the user that a remote user has wants to add the local user * to his or her buddy list and requires authorization to do so. * - * This will present a dialog informing the user of this and ask if the + * This will present a dialog informing the user of this and ask if the * user authorizes or denies the remote user from adding him. * * @param account The account that was added diff --git a/libpurple/blist.c b/libpurple/blist.c index b5bf889b7a..171c1bb19d 100644 --- a/libpurple/blist.c +++ b/libpurple/blist.c @@ -82,7 +82,7 @@ static guint _purple_blist_hbuddy_hash(struct _purple_hbuddy *hb) static guint _purple_blist_hbuddy_equal(struct _purple_hbuddy *hb1, struct _purple_hbuddy *hb2) { - return ((!strcmp(hb1->name, hb2->name)) && hb1->account == hb2->account && hb1->group == hb2->group); + return (purple_strequal(hb1->name, hb2->name) && hb1->account == hb2->account && hb1->group == hb2->group); } static void _purple_blist_hbuddy_free_key(struct _purple_hbuddy *hb) @@ -382,11 +382,11 @@ parse_setting(PurpleBlistNode *node, xmlnode *setting) if (!value) return; - if (!type || !strcmp(type, "string")) + if (!type || purple_strequal(type, "string")) purple_blist_node_set_string(node, name, value); - else if (!strcmp(type, "bool")) + else if (purple_strequal(type, "bool")) purple_blist_node_set_bool(node, name, atoi(value)); - else if (!strcmp(type, "int")) + else if (purple_strequal(type, "int")) purple_blist_node_set_int(node, name, atoi(value)); g_free(value); @@ -453,9 +453,9 @@ parse_contact(PurpleGroup *group, xmlnode *cnode) for (x = cnode->child; x; x = x->next) { if (x->type != XMLNODE_TYPE_TAG) continue; - if (!strcmp(x->name, "buddy")) + if (purple_strequal(x->name, "buddy")) parse_buddy(group, contact, x); - else if (!strcmp(x->name, "setting")) + else if (purple_strequal(x->name, "setting")) parse_setting((PurpleBlistNode*)contact, x); } @@ -528,12 +528,12 @@ parse_group(xmlnode *groupnode) for (cnode = groupnode->child; cnode; cnode = cnode->next) { if (cnode->type != XMLNODE_TYPE_TAG) continue; - if (!strcmp(cnode->name, "setting")) + if (purple_strequal(cnode->name, "setting")) parse_setting((PurpleBlistNode*)group, cnode); - else if (!strcmp(cnode->name, "contact") || - !strcmp(cnode->name, "person")) + else if (purple_strequal(cnode->name, "contact") || + purple_strequal(cnode->name, "person")) parse_contact(group, cnode); - else if (!strcmp(cnode->name, "chat")) + else if (purple_strequal(cnode->name, "chat")) parse_chat(group, cnode); } } @@ -590,11 +590,11 @@ purple_blist_load() if (x->type != XMLNODE_TYPE_TAG) continue; - if (!strcmp(x->name, "permit")) { + if (purple_strequal(x->name, "permit")) { name = xmlnode_get_data(x); purple_privacy_permit_add(account, name, TRUE); g_free(name); - } else if (!strcmp(x->name, "block")) { + } else if (purple_strequal(x->name, "block")) { name = xmlnode_get_data(x); purple_privacy_deny_add(account, name, TRUE); g_free(name); @@ -699,6 +699,24 @@ purple_blist_get_root() return purplebuddylist ? purplebuddylist->root : NULL; } +GHashTable * +purple_blist_get_buddies() +{ + return purplebuddylist ? purplebuddylist->buddies : NULL; +} + +void * +purple_blist_get_ui_data() +{ + return purplebuddylist->ui_data; +} + +void +purple_blist_set_ui_data(void *ui_data) +{ + purplebuddylist->ui_data = ui_data; +} + void purple_blist_show() { PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); @@ -774,12 +792,28 @@ PurpleBlistNode *purple_blist_node_get_sibling_prev(PurpleBlistNode *node) return node? node->prev : NULL; } +void * +purple_blist_node_get_ui_data(const PurpleBlistNode *node) +{ + g_return_val_if_fail(node, NULL); + + return node->ui_data; +} + +void +purple_blist_node_set_ui_data(PurpleBlistNode *node, void *ui_data) { + g_return_if_fail(node); + + node->ui_data = ui_data; +} + void purple_blist_update_buddy_status(PurpleBuddy *buddy, PurpleStatus *old_status) { PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); PurplePresence *presence; PurpleStatus *status; + PurpleBlistNode *cnode; g_return_if_fail(buddy != NULL); @@ -794,16 +828,18 @@ purple_blist_update_buddy_status(PurpleBuddy *buddy, PurpleStatus *old_status) purple_signal_emit(purple_blist_get_handle(), "buddy-signed-on", buddy); - ((PurpleContact*)((PurpleBlistNode*)buddy)->parent)->online++; - if (((PurpleContact*)((PurpleBlistNode*)buddy)->parent)->online == 1) - ((PurpleGroup *)((PurpleBlistNode *)buddy)->parent->parent)->online++; + cnode = buddy->node.parent; + if (++(PURPLE_CONTACT(cnode)->online) == 1) + PURPLE_GROUP(cnode->parent)->online++; } else if (!purple_status_is_online(status) && purple_status_is_online(old_status)) { + purple_blist_node_set_int(&buddy->node, "last_seen", time(NULL)); purple_signal_emit(purple_blist_get_handle(), "buddy-signed-off", buddy); - ((PurpleContact*)((PurpleBlistNode*)buddy)->parent)->online--; - if (((PurpleContact*)((PurpleBlistNode*)buddy)->parent)->online == 0) - ((PurpleGroup *)((PurpleBlistNode *)buddy)->parent->parent)->online--; + + cnode = buddy->node.parent; + if (--(PURPLE_CONTACT(cnode)->online) == 0) + PURPLE_GROUP(cnode->parent)->online--; } else { purple_signal_emit(purple_blist_get_handle(), "buddy-status-changed", buddy, old_status, @@ -1025,7 +1061,7 @@ void purple_blist_rename_group(PurpleGroup *source, const char *new_name) g_return_if_fail(source != NULL); g_return_if_fail(new_name != NULL); - if (*new_name == '\0' || !strcmp(new_name, source->name)) + if (*new_name == '\0' || purple_strequal(new_name, source->name)) return; dest = purple_find_group(new_name); @@ -1092,7 +1128,7 @@ void purple_blist_rename_group(PurpleGroup *source, const char *new_name) /* Notify all PRPLs */ /* TODO: Is this condition needed? Seems like it would always be TRUE */ - if(old_name && source && strcmp(source->name, old_name)) { + if(old_name && purple_strequal(source->name, old_name)) { for (accts = purple_group_get_accounts(source); accts; accts = g_slist_remove(accts, accts->data)) { PurpleAccount *account = accts->data; PurpleConnection *gc = NULL; @@ -1101,7 +1137,7 @@ void purple_blist_rename_group(PurpleGroup *source, const char *new_name) GList *l = NULL, *buddies = NULL; gc = purple_account_get_connection(account); - + if(gc) prpl = purple_connection_get_prpl(gc); @@ -1166,17 +1202,17 @@ PurpleChat *purple_chat_new(PurpleAccount *account, const char *alias, GHashTabl return chat; } -PurpleBuddy *purple_buddy_new(PurpleAccount *account, const char *screenname, const char *alias) +PurpleBuddy *purple_buddy_new(PurpleAccount *account, const char *name, const char *alias) { PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); PurpleBuddy *buddy; g_return_val_if_fail(account != NULL, FALSE); - g_return_val_if_fail(screenname != NULL, FALSE); + g_return_val_if_fail(name != NULL, FALSE); buddy = g_new0(PurpleBuddy, 1); buddy->account = account; - buddy->name = g_strdup(screenname); + buddy->name = g_strdup(name); buddy->alias = g_strdup(alias); buddy->presence = purple_presence_new_for_buddy(buddy); ((PurpleBlistNode *)buddy)->type = PURPLE_BLIST_BUDDY_NODE; @@ -1232,6 +1268,23 @@ purple_buddy_get_icon(const PurpleBuddy *buddy) return buddy->icon; } +gpointer +purple_buddy_get_protocol_data(const PurpleBuddy *buddy) +{ + g_return_val_if_fail(buddy != NULL, NULL); + + return buddy->proto_data; +} + +void +purple_buddy_set_protocol_data(PurpleBuddy *buddy, gpointer data) +{ + g_return_if_fail(buddy != NULL); + + buddy->proto_data = data; +} + + void purple_blist_add_chat(PurpleChat *chat, PurpleGroup *group, PurpleBlistNode *node) { PurpleBlistNode *cnode = (PurpleBlistNode*)chat; @@ -1339,7 +1392,7 @@ void purple_blist_add_buddy(PurpleBuddy *buddy, PurpleContact *contact, PurpleGr g = (PurpleGroup*)node->parent->parent; } else if (contact) { c = contact; - g = (PurpleGroup *)((PurpleBlistNode *)c)->parent; + g = PURPLE_GROUP(PURPLE_BLIST_NODE(c)->parent); } else { g = group; if (g == NULL) @@ -1421,16 +1474,14 @@ void purple_blist_add_buddy(PurpleBuddy *buddy, PurpleContact *contact, PurpleGr } if (PURPLE_BUDDY_IS_ONLINE(buddy)) { - ((PurpleContact*)bnode->parent)->online++; - if (((PurpleContact*)bnode->parent)->online == 1) - ((PurpleGroup*)bnode->parent->parent)->online++; + if (++(PURPLE_CONTACT(bnode->parent)->online) == 1) + PURPLE_GROUP(bnode->parent->parent)->online++; } if (purple_account_is_connected(buddy->account)) { - ((PurpleContact*)bnode->parent)->currentsize++; - if (((PurpleContact*)bnode->parent)->currentsize == 1) - ((PurpleGroup*)bnode->parent->parent)->currentsize++; + if (++(PURPLE_CONTACT(bnode->parent)->currentsize) == 1) + PURPLE_GROUP(bnode->parent->parent)->currentsize++; } - ((PurpleContact*)bnode->parent)->totalsize++; + PURPLE_CONTACT(bnode->parent)->totalsize++; hb = g_new(struct _purple_hbuddy, 1); hb->name = g_strdup(purple_normalize(buddy->account, buddy->name)); @@ -1546,7 +1597,7 @@ void purple_blist_add_contact(PurpleContact *contact, PurpleGroup *group, Purple g_return_if_fail(contact != NULL); g_return_if_fail(PURPLE_BLIST_NODE_IS_CONTACT((PurpleBlistNode*)contact)); - if ((PurpleBlistNode*)contact == node) + if (PURPLE_BLIST_NODE(contact) == node) return; if (node && (PURPLE_BLIST_NODE_IS_CONTACT(node) || @@ -2056,6 +2107,12 @@ const char *purple_buddy_get_alias(PurpleBuddy *buddy) return buddy->name; } +const char *purple_buddy_get_local_buddy_alias(PurpleBuddy *buddy) +{ + g_return_val_if_fail(buddy, NULL); + return buddy->alias; +} + const char *purple_buddy_get_server_alias(PurpleBuddy *buddy) { g_return_val_if_fail(buddy != NULL, NULL); @@ -2300,7 +2357,7 @@ PurpleContact *purple_buddy_get_contact(PurpleBuddy *buddy) { g_return_val_if_fail(buddy != NULL, NULL); - return (PurpleContact*)((PurpleBlistNode*)buddy)->parent; + return PURPLE_CONTACT(PURPLE_BLIST_NODE(buddy)->parent); } PurplePresence *purple_buddy_get_presence(const PurpleBuddy *buddy) diff --git a/libpurple/blist.h b/libpurple/blist.h index 829212f787..460291a886 100644 --- a/libpurple/blist.h +++ b/libpurple/blist.h @@ -75,12 +75,37 @@ typedef enum } PurpleBlistNodeFlags; +/** + * @since 2.6.0 + */ +#define PURPLE_BLIST_NODE(obj) ((PurpleBlistNode *)(obj)) + #define PURPLE_BLIST_NODE_HAS_FLAG(b, f) (purple_blist_node_get_flags((PurpleBlistNode*)(b)) & (f)) #define PURPLE_BLIST_NODE_SHOULD_SAVE(b) (! PURPLE_BLIST_NODE_HAS_FLAG(b, PURPLE_BLIST_NODE_FLAG_NO_SAVE)) #define PURPLE_BLIST_NODE_NAME(n) (purple_blist_node_get_type(n) == PURPLE_BLIST_CHAT_NODE ? purple_chat_get_name((PurpleChat*)n) : \ purple_blist_node_get_type(n) == PURPLE_BLIST_BUDDY_NODE ? purple_buddy_get_name((PurpleBuddy*)n) : NULL) +/** + * @since 2.6.0 + */ +#define PURPLE_GROUP(obj) ((PurpleGroup *)(obj)) + +/** + * @since 2.6.0 + */ +#define PURPLE_CONTACT(obj) ((PurpleContact *)(obj)) + +/** + * @since 2.6.0 + */ +#define PURPLE_BUDDY(obj) ((PurpleBuddy *)(obj)) + +/** + * @since 2.6.0 + */ +#define PURPLE_CHAT(obj) ((PurpleChat *)(obj)) + #include "account.h" #include "buddyicon.h" #include "status.h" @@ -111,7 +136,7 @@ struct _PurpleBlistNode { */ struct _PurpleBuddy { PurpleBlistNode node; /**< The node that this buddy inherits from */ - char *name; /**< The screenname of the buddy. */ + char *name; /**< The name of the buddy. */ char *alias; /**< The user-set alias of the buddy */ char *server_alias; /**< The server-specified alias of the buddy. (i.e. MSN "Friendly Names") */ void *proto_data; /**< This allows the prpl to associate whatever data it wants with a buddy */ @@ -156,9 +181,6 @@ struct _PurpleChat { PurpleAccount *account; /**< The account this chat is attached to */ }; -#endif /* PURPLE_HIDE_STRUCTS && PURPLE_BLIST_STRUCTS */ - - /** * The Buddy List */ @@ -168,6 +190,8 @@ struct _PurpleBuddyList { void *ui_data; /**< UI-specific data. */ }; +#endif /* PURPLE_HIDE_STRUCTS && PURPLE_BLIST_STRUCTS */ + /** * Buddy list UI operations. * @@ -236,6 +260,33 @@ PurpleBuddyList *purple_get_blist(void); PurpleBlistNode *purple_blist_get_root(void); /** + * Returns the hash table of every buddy in the list. + * + * @return The hash table of every buddy in the list. + * + * @since 2.6.0 + */ +GHashTable *purple_blist_get_buddies(void); + +/** + * Returns the UI data for the list. + * + * @return The UI data for the list. + * + * @since 2.6.0 + */ +void *purple_blist_get_ui_data(void); + +/** + * Sets the UI data for the list. + * + * @param ui_data The UI data for the list. + * + * @since 2.6.0 + */ +void purple_blist_set_ui_data(void *ui_data); + +/** * Returns the next node of a given node. This function is to be used to iterate * over the tree returned by purple_get_blist. * @@ -302,6 +353,25 @@ PurpleBlistNode *purple_blist_node_get_sibling_next(PurpleBlistNode *node); PurpleBlistNode *purple_blist_node_get_sibling_prev(PurpleBlistNode *node); /** + * Returns the UI data of a given node. + * + * @param node The node. + * @return The UI data. + * @since 2.6.0 + */ +void *purple_blist_node_get_ui_data(const PurpleBlistNode *node); + +/** + * Sets the UI data of a given node. + * + * @param node The node. + * @param ui_data The UI data. + * + * @since 2.6.0 + */ +void purple_blist_node_set_ui_data(PurpleBlistNode *node, void *ui_data); + +/** * Shows the buddy list, creating a new one if necessary. */ void purple_blist_show(void); @@ -331,6 +401,7 @@ void purple_blist_update_buddy_status(PurpleBuddy *buddy, PurpleStatus *old_stat * Updates a node's custom icon. * * @param node The PurpleBlistNode whose custom icon has changed. + * * @since 2.5.0 */ void purple_blist_update_node_icon(PurpleBlistNode *node); @@ -423,11 +494,11 @@ void purple_blist_add_chat(PurpleChat *chat, PurpleGroup *group, PurpleBlistNode * Creates a new buddy * * @param account The account this buddy will get added to - * @param screenname The screenname of the new buddy + * @param name The name of the new buddy * @param alias The alias of the new buddy (or NULL if unaliased) * @return A newly allocated buddy */ -PurpleBuddy *purple_buddy_new(PurpleAccount *account, const char *screenname, const char *alias); +PurpleBuddy *purple_buddy_new(PurpleAccount *account, const char *name, const char *alias); /** * Sets a buddy's icon. @@ -470,6 +541,32 @@ const char *purple_buddy_get_name(const PurpleBuddy *buddy); PurpleBuddyIcon *purple_buddy_get_icon(const PurpleBuddy *buddy); /** + * Returns a buddy's protocol-specific data. + * + * This should only be called from the associated prpl. + * + * @param buddy The buddy. + * @return The protocol data. + * + * @see purple_buddy_set_protocol_data() + * @since 2.6.0 + */ +gpointer purple_buddy_get_protocol_data(const PurpleBuddy *buddy); + +/** + * Sets a buddy's protocol-specific data. + * + * This should only be called from the associated prpl. + * + * @param buddy The buddy. + * @param data The data. + * + * @see purple_buddy_get_protocol_data() + * @since 2.6.0 + */ +void purple_buddy_set_protocol_data(PurpleBuddy *buddy, gpointer data); + +/** * Returns a buddy's contact. * * @param buddy The buddy. @@ -659,15 +756,18 @@ const char *purple_buddy_get_server_alias(PurpleBuddy *buddy); */ const char *purple_buddy_get_contact_alias(PurpleBuddy *buddy); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_BLIST_C_) /** * Returns the correct alias for this user, ignoring server aliases. Used * when a user-recognizable name is required. In order: buddy's alias; buddy's * contact alias; buddy's user name. - * + * * @param buddy The buddy whose alias will be returned. * @return The appropriate name or alias. + * @deprecated Try purple_buddy_get_alias(), if server aliases are okay. */ const char *purple_buddy_get_local_alias(PurpleBuddy *buddy); +#endif /** * Returns the correct name to display for a buddy. In order of precedence: @@ -680,6 +780,16 @@ const char *purple_buddy_get_local_alias(PurpleBuddy *buddy); const char *purple_buddy_get_alias(PurpleBuddy *buddy); /** + * Returns the local alias for the buddy, or @c NULL if none exists. + * + * @param buddy The buddy + * @return The local alias for the buddy + * + * @since 2.6.0 + */ +const char *purple_buddy_get_local_buddy_alias(PurpleBuddy *buddy); + +/** * Returns the correct name to display for a blist chat. * * @param chat The chat whose name will be returned. @@ -688,19 +798,19 @@ const char *purple_buddy_get_alias(PurpleBuddy *buddy); const char *purple_chat_get_name(PurpleChat *chat); /** - * Finds the buddy struct given a screenname and an account + * Finds the buddy struct given a name and an account * * @param account The account this buddy belongs to - * @param name The buddy's screenname + * @param name The buddy's name * @return The buddy or NULL if the buddy does not exist */ PurpleBuddy *purple_find_buddy(PurpleAccount *account, const char *name); /** - * Finds the buddy struct given a screenname, an account, and a group + * Finds the buddy struct given a name, an account, and a group * * @param account The account this buddy belongs to - * @param name The buddy's screenname + * @param name The buddy's name * @param group The group to look in * @return The buddy or NULL if the buddy does not exist in the group */ @@ -708,10 +818,10 @@ PurpleBuddy *purple_find_buddy_in_group(PurpleAccount *account, const char *name PurpleGroup *group); /** - * Finds all PurpleBuddy structs given a screenname and an account + * Finds all PurpleBuddy structs given a name and an account * * @param account The account this buddy belongs to - * @param name The buddy's screenname (or NULL to return all buddies in the account) + * @param name The buddy's name (or NULL to return all buddies in the account) * * @return A GSList of buddies (which must be freed), or NULL if the buddy doesn't exist */ @@ -751,6 +861,7 @@ PurpleGroup *purple_chat_get_group(PurpleChat *chat); * @param chat The chat. * * @return The account the chat belongs to. + * * @since 2.4.0 */ PurpleAccount *purple_chat_get_account(PurpleChat *chat); @@ -761,6 +872,7 @@ PurpleAccount *purple_chat_get_account(PurpleChat *chat); * @param chat The chat. * * @constreturn The hashtable. + * * @since 2.4.0 */ GHashTable *purple_chat_get_components(PurpleChat *chat); @@ -979,6 +1091,7 @@ PurpleBlistNodeFlags purple_blist_node_get_flags(PurpleBlistNode *node); * @param node The node. * * @return The type of the node. + * * @since 2.1.0 */ PurpleBlistNodeType purple_blist_node_get_type(PurpleBlistNode *node); diff --git a/libpurple/buddyicon.c b/libpurple/buddyicon.c index f2567744a6..b54476b99b 100644 --- a/libpurple/buddyicon.c +++ b/libpurple/buddyicon.c @@ -153,7 +153,7 @@ purple_buddy_icon_data_cache(PurpleStoredImage *img) { const char *dirname; char *path; - + g_return_if_fail(img != NULL); if (!purple_buddy_icons_is_caching()) @@ -175,7 +175,7 @@ purple_buddy_icon_data_cache(PurpleStoredImage *img) } purple_util_write_data_to_file_absolute(path, purple_imgstore_get_data(img), - purple_imgstore_get_size(img)); + purple_imgstore_get_size(img)); g_free(path); } @@ -453,7 +453,7 @@ purple_buddy_icon_update(PurpleBuddyIcon *icon) if (conv != NULL) purple_conv_im_set_icon(PURPLE_CONV_IM(conv), icon_to_set); - + /* icon's refcount was incremented above */ if (icon) purple_buddy_icon_unref(icon); } @@ -757,7 +757,7 @@ purple_buddy_icons_set_account_icon(PurpleAccount *account, g_hash_table_insert(pointer_icon_cache, account, img); else g_hash_table_remove(pointer_icon_cache, account); - + if (purple_account_is_connected(account)) { PurpleConnection *gc; @@ -889,7 +889,9 @@ purple_buddy_icons_node_set_custom_icon(PurpleBlistNode *node, if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { PurpleBlistNode *child; - for (child = node->child ; child ; child = child->next) + for (child = purple_blist_node_get_first_child(node); + child; + child = purple_blist_node_get_sibling_next(child)) { PurpleBuddy *buddy; PurpleConversation *conv; @@ -986,7 +988,7 @@ delete_buddy_icon_settings(PurpleBlistNode *node, const char *setting_name) { purple_blist_node_remove_setting(node, setting_name); - if (!strcmp(setting_name, "buddy_icon")) + if (purple_strequal(setting_name, "buddy_icon")) { purple_blist_node_remove_setting(node, "avatar_hash"); purple_blist_node_remove_setting(node, "icon_checksum"); @@ -1083,7 +1085,7 @@ migrate_buddy_icon(PurpleBlistNode *node, const char *setting_name, g_free(new_filename); - if (!strcmp(setting_name, "buddy_icon")) + if (purple_strequal(setting_name, "buddy_icon")) { const char *hash; @@ -1098,7 +1100,7 @@ migrate_buddy_icon(PurpleBlistNode *node, const char *setting_name, PurpleAccount *account = purple_buddy_get_account((PurpleBuddy *)node); const char *prpl_id = purple_account_get_protocol_id(account); - if (!strcmp(prpl_id, "prpl-yahoo")) + if (purple_strequal(prpl_id, "prpl-yahoo")) { int checksum = purple_blist_node_get_int(node, "icon_checksum"); if (checksum != 0) diff --git a/libpurple/certificate.c b/libpurple/certificate.c index b548e0468c..c0049e9f2d 100644 --- a/libpurple/certificate.c +++ b/libpurple/certificate.c @@ -51,7 +51,7 @@ purple_certificate_verify (PurpleCertificateVerifier *verifier, { PurpleCertificateVerificationRequest *vrq; PurpleCertificateScheme *scheme; - + g_return_if_fail(subject_name != NULL); /* If you don't have a cert to check, why are you requesting that it be verified? */ @@ -97,10 +97,10 @@ purple_certificate_verify_complete(PurpleCertificateVerificationRequest *vrq, "Failed to verify certificate for %s\n", vrq->subject_name); } - - - - + + + + /* Pass the results on to the request's callback */ (vrq->cb)(st, vrq->cb_data); @@ -154,7 +154,7 @@ void purple_certificate_destroy (PurpleCertificate *crt) { PurpleCertificateScheme *scheme; - + if (NULL == crt) return; scheme = crt->scheme; @@ -206,7 +206,7 @@ purple_certificate_check_signature_chain(GList *chain) "Checking signature chain for uid=%s\n", uid); g_free(uid); - + /* If this is a single-certificate chain, say that it is valid */ if (chain->next == NULL) { purple_debug_info("certificate", @@ -218,9 +218,9 @@ purple_certificate_check_signature_chain(GList *chain) crt = (PurpleCertificate *)(chain->data); /* And start with the second certificate in the chain */ for ( cur = chain->next; cur; cur = cur->next ) { - + issuer = (PurpleCertificate *)(cur->data); - + /* Check the signature for this link */ if (! purple_certificate_signed_by(crt, issuer) ) { uid = purple_certificate_get_unique_id(issuer); @@ -228,7 +228,7 @@ purple_certificate_check_signature_chain(GList *chain) "...Bad or missing signature by %s\nChain is INVALID\n", uid); g_free(uid); - + return FALSE; } @@ -237,7 +237,7 @@ purple_certificate_check_signature_chain(GList *chain) "...Good signature by %s\n", uid); g_free(uid); - + /* The issuer is now the next crt whose signature is to be checked */ crt = issuer; @@ -283,7 +283,7 @@ purple_certificate_get_fingerprint_sha1(PurpleCertificate *crt) g_return_val_if_fail(crt->scheme, NULL); scheme = crt->scheme; - + g_return_val_if_fail(scheme->get_fingerprint_sha1, NULL); fpr = (scheme->get_fingerprint_sha1)(crt); @@ -354,7 +354,7 @@ purple_certificate_get_times(PurpleCertificate *crt, time_t *activation, time_t g_return_val_if_fail(crt, FALSE); scheme = crt->scheme; - + g_return_val_if_fail(scheme, FALSE); /* If both provided references are NULL, what are you doing calling @@ -371,7 +371,7 @@ purple_certificate_pool_mkpath(PurpleCertificatePool *pool, const gchar *id) { gchar *path; gchar *esc_scheme_name, *esc_name, *esc_id; - + g_return_val_if_fail(pool, NULL); g_return_val_if_fail(pool->scheme_name, NULL); g_return_val_if_fail(pool->name, NULL); @@ -380,7 +380,7 @@ purple_certificate_pool_mkpath(PurpleCertificatePool *pool, const gchar *id) esc_scheme_name = pool ? g_strdup(purple_escape_filename(pool->scheme_name)) : NULL; esc_name = pool ? g_strdup(purple_escape_filename(pool->name)) : NULL; esc_id = id ? g_strdup(purple_escape_filename(id)) : NULL; - + path = g_build_filename(purple_user_dir(), "certificates", /* TODO: constantize this? */ esc_scheme_name, @@ -404,7 +404,7 @@ purple_certificate_pool_usable(PurpleCertificatePool *pool) if (purple_certificate_find_scheme(pool->scheme_name) == NULL) { return FALSE; } - + return TRUE; } @@ -441,7 +441,7 @@ gboolean purple_certificate_pool_store(PurpleCertificatePool *pool, const gchar *id, PurpleCertificate *crt) { gboolean ret = FALSE; - + g_return_val_if_fail(pool, FALSE); g_return_val_if_fail(id, FALSE); g_return_val_if_fail(pool->put_cert, FALSE); @@ -461,13 +461,13 @@ purple_certificate_pool_store(PurpleCertificatePool *pool, const gchar *id, Purp } return ret; -} +} gboolean purple_certificate_pool_delete(PurpleCertificatePool *pool, const gchar *id) { gboolean ret = FALSE; - + g_return_val_if_fail(pool, FALSE); g_return_val_if_fail(id, FALSE); g_return_val_if_fail(pool->delete_cert, FALSE); @@ -496,7 +496,7 @@ void purple_certificate_pool_destroy_idlist(GList *idlist) { GList *l; - + /* Iterate through and free them strings */ for ( l = idlist; l; l = l->next ) { g_free(l->data); @@ -520,7 +520,7 @@ x509_singleuse_verify_cb (PurpleCertificateVerificationRequest *vrq, gint id) vrq->subject_name, id); /* Signal what happened back to the caller */ - if (1 == id) { + if (1 == id) { /* Accepted! */ purple_certificate_verify_complete(vrq, PURPLE_CERTIFICATE_VALID); @@ -557,11 +557,11 @@ x509_singleuse_start_verify (PurpleCertificateVerificationRequest *vrq) } else { cn_match = _("(DOES NOT MATCH)"); } - + /* Make messages */ primary = g_strdup_printf(_("%s has presented the following certificate for just-this-once use:"), vrq->subject_name); secondary = g_strdup_printf(_("Common name: %s %s\nFingerprint (SHA1): %s"), cn, cn_match, sha_asc); - + /* Make a semi-pretty display */ purple_request_accept_cancel( vrq->cb_data, /* TODO: Find what the handle ought to be */ @@ -575,7 +575,7 @@ x509_singleuse_start_verify (PurpleCertificateVerificationRequest *vrq) vrq, x509_singleuse_verify_cb, x509_singleuse_verify_cb ); - + /* Cleanup */ g_free(primary); g_free(secondary); @@ -644,13 +644,13 @@ x509_ca_quiet_put_cert(PurpleCertificate *crt) /* lazy_init calls this function, so calling lazy_init here is a Bad Thing */ - + g_return_val_if_fail(crt, FALSE); g_return_val_if_fail(crt->scheme, FALSE); /* Make sure that this is some kind of X.509 certificate */ /* TODO: Perhaps just check crt->scheme->name instead? */ g_return_val_if_fail(crt->scheme == purple_certificate_find_scheme(x509_ca.scheme_name), FALSE); - + el = g_new0(x509_ca_element, 1); el->dn = purple_certificate_get_unique_id(crt); el->crt = purple_certificate_copy(crt); @@ -675,7 +675,7 @@ x509_ca_lazy_init(void) const gchar *entry; GPatternSpec *pempat; GList *iter = NULL; - + if (x509_ca_initialized) return TRUE; /* Check that X.509 is registered */ @@ -791,7 +791,7 @@ x509_ca_locate_cert(GList *lst, const gchar *dn) for (cur = lst; cur; cur = cur->next) { x509_ca_element *el = cur->data; - if (el->dn && !strcmp(dn, el->dn)) { + if (purple_strequal(dn, el->dn)) { return el; } } @@ -832,7 +832,7 @@ x509_ca_get_cert(const gchar *id) } else { crt = NULL; } - + return crt; } @@ -840,7 +840,7 @@ static gboolean x509_ca_put_cert(const gchar *id, PurpleCertificate *crt) { gboolean ret = FALSE; - + g_return_val_if_fail(x509_ca_lazy_init(), FALSE); /* TODO: This is a quick way of doing this. At some point the change @@ -854,7 +854,7 @@ static gboolean x509_ca_delete_cert(const gchar *id) { x509_ca_element *el; - + g_return_val_if_fail(x509_ca_lazy_init(), FALSE); g_return_val_if_fail(id, FALSE); @@ -870,7 +870,7 @@ x509_ca_delete_cert(const gchar *id) /* Unlink it from the memory cache and destroy it */ x509_ca_certs = g_list_remove(x509_ca_certs, el); x509_ca_element_free(el); - + return TRUE; } @@ -878,7 +878,7 @@ static GList * x509_ca_get_idlist(void) { GList *l, *idlist; - + g_return_val_if_fail(x509_ca_lazy_init(), NULL); idlist = NULL; @@ -886,7 +886,7 @@ x509_ca_get_idlist(void) x509_ca_element *el = l->data; idlist = g_list_prepend(idlist, g_strdup(el->dn)); } - + return idlist; } @@ -921,7 +921,7 @@ x509_tls_peers_init(void) { gchar *poolpath; int ret; - + /* Set up key cache here if it isn't already done */ poolpath = purple_certificate_pool_mkpath(&x509_tls_peers, NULL); ret = purple_build_dir(poolpath, 0700); /* Make it this user only */ @@ -937,13 +937,13 @@ x509_tls_peers_cert_in_pool(const gchar *id) { gchar *keypath; gboolean ret = FALSE; - + g_return_val_if_fail(id, FALSE); keypath = purple_certificate_pool_mkpath(&x509_tls_peers, id); ret = g_file_test(keypath, G_FILE_TEST_IS_REGULAR); - + g_free(keypath); return ret; } @@ -954,14 +954,14 @@ x509_tls_peers_get_cert(const gchar *id) PurpleCertificateScheme *x509; PurpleCertificate *crt; gchar *keypath; - + g_return_val_if_fail(id, NULL); /* Is it in the pool? */ if ( !x509_tls_peers_cert_in_pool(id) ) { return NULL; } - + /* Look up the X.509 scheme */ x509 = purple_certificate_find_scheme("x509"); g_return_val_if_fail(x509, NULL); @@ -990,7 +990,7 @@ x509_tls_peers_put_cert(const gchar *id, PurpleCertificate *crt) /* Work out the filename and export */ keypath = purple_certificate_pool_mkpath(&x509_tls_peers, id); ret = purple_certificate_export(keypath, crt); - + g_free(keypath); return ret; } @@ -1012,7 +1012,7 @@ x509_tls_peers_delete_cert(const gchar *id) } /* OK, so work out the keypath and delete the thing */ - keypath = purple_certificate_pool_mkpath(&x509_tls_peers, id); + keypath = purple_certificate_pool_mkpath(&x509_tls_peers, id); if ( unlink(keypath) != 0 ) { purple_debug_error("certificate/tls_peers", "Unlink of %s failed!\n", @@ -1047,7 +1047,7 @@ x509_tls_peers_get_idlist(void) while ( (entry = g_dir_read_name(dir)) != NULL ) { /* Unescape the filename */ const char *unescaped = purple_unescape_filename(entry); - + /* Copy the entry name into our list (GLib owns the original string) */ idlist = g_list_prepend(idlist, g_strdup(unescaped)); @@ -1055,7 +1055,7 @@ x509_tls_peers_get_idlist(void) /* Release the directory */ g_dir_close(dir); - + return idlist; } @@ -1143,7 +1143,7 @@ x509_tls_cached_user_auth_cb (x509_tls_cached_ua_ctx *c, gint id) g_return_if_fail(c); g_return_if_fail(c->vrq); - + vrq = c->vrq; x509_tls_cached_ua_ctx_free(c); @@ -1155,7 +1155,7 @@ x509_tls_cached_user_auth_cb (x509_tls_cached_ua_ctx *c, gint id) purple_debug_info("certificate/x509/tls_cached", "User ACCEPTED cert\nCaching first in chain for future use as %s...\n", cache_id); - + purple_certificate_pool_store(tls_peers, cache_id, vrq->cert_chain->data); @@ -1195,7 +1195,7 @@ x509_tls_cached_user_auth(PurpleCertificateVerificationRequest *vrq, /* Make messages */ primary = g_strdup_printf(_("Accept certificate for %s?"), vrq->subject_name); - + /* Make a semi-pretty display */ purple_request_action( vrq->cb_data, /* TODO: Find what the handle ought to be */ @@ -1211,7 +1211,7 @@ x509_tls_cached_user_auth(PurpleCertificateVerificationRequest *vrq, _("Accept"), x509_tls_cached_user_auth_accept_cb, _("Reject"), x509_tls_cached_user_auth_reject_cb, _("_View Certificate..."), x509_tls_cached_show_cert); - + /* Cleanup */ g_free(primary); } @@ -1225,7 +1225,7 @@ x509_tls_cached_peer_cert_changed(PurpleCertificateVerificationRequest *vrq) "Certificate for %s does not match cached. " "Auto-rejecting!\n", vrq->subject_name); - + purple_certificate_verify_complete(vrq, PURPLE_CERTIFICATE_INVALID); return; } @@ -1245,7 +1245,7 @@ x509_tls_cached_cert_in_cache(PurpleCertificateVerificationRequest *vrq) /* The peer's certificate should be the first in the list */ PurpleCertificate *peer_crt = (PurpleCertificate *) vrq->cert_chain->data; - + PurpleCertificate *cached_crt; GByteArray *peer_fpr, *cached_fpr; @@ -1278,7 +1278,7 @@ x509_tls_cached_cert_in_cache(PurpleCertificateVerificationRequest *vrq) /* vrq now becomes the problem of the user */ x509_tls_cached_unknown_peer(vrq); } - + purple_certificate_destroy(cached_crt); g_byte_array_free(peer_fpr, TRUE); g_byte_array_free(cached_fpr, TRUE); @@ -1305,7 +1305,7 @@ x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq) "not self-signed" */ if ( purple_certificate_signed_by(peer_crt, peer_crt) ) { gchar *msg; - + purple_debug_info("certificate/x509/tls_cached", "Certificate for %s is self-signed.\n", vrq->subject_name); @@ -1316,13 +1316,13 @@ x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq) "is self-signed. It cannot be " "automatically checked."), vrq->subject_name); - + x509_tls_cached_user_auth(vrq,msg); g_free(msg); return; } /* if (self signed) */ - + /* Next, check that the certificate chain is valid */ if ( ! purple_certificate_check_signature_chain(chain) ) { /* TODO: Tell the user where the chain broke? */ @@ -1390,7 +1390,7 @@ x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq) } g_free(ca_id); - + /* Check the signature */ if ( !purple_certificate_signed_by(end_crt, ca_crt) ) { /* TODO: If signed_by ever returns a reason, maybe mention @@ -1406,7 +1406,7 @@ x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq) "Authority from which it claims to " "have a signature."), vrq->subject_name); - + purple_notify_error(NULL, /* TODO: Probably wrong */ _("SSL Certificate Error"), _("Invalid certificate authority" @@ -1425,7 +1425,7 @@ x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq) vrq->subject_name) ) { gchar *sn = purple_certificate_get_subject_name(peer_crt); gchar *msg; - + purple_debug_info("certificate/x509/tls_cached", "Name mismatch: Certificate given for %s " "has a name of %s\n", @@ -1441,7 +1441,7 @@ x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq) "connecting to the service you " "believe you are."), vrq->subject_name, sn); - + x509_tls_cached_user_auth(vrq,msg); g_free(sn); @@ -1465,7 +1465,7 @@ x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq) "Unable to locate tls_peers certificate " "cache.\n"); } - + /* Whew! Done! */ purple_certificate_verify_complete(vrq, PURPLE_CERTIFICATE_VALID); } @@ -1481,7 +1481,7 @@ x509_tls_cached_start_verify(PurpleCertificateVerificationRequest *vrq) purple_debug_info("certificate/x509/tls_cached", "Starting verify for %s\n", vrq->subject_name); - + tls_peers = purple_certificate_find_pool(x509_tls_cached.scheme_name,tls_peers_name); if (!tls_peers) { @@ -1494,7 +1494,7 @@ x509_tls_cached_start_verify(PurpleCertificateVerificationRequest *vrq) x509_tls_cached_unknown_peer(vrq); return; } - + /* Check if the peer has a certificate cached already */ purple_debug_info("certificate/x509/tls_cached", "Checking for cached cert...\n"); @@ -1583,7 +1583,7 @@ purple_certificate_find_scheme(const gchar *name) name); /* TODO: Signalling and such? */ - + return NULL; } @@ -1611,7 +1611,7 @@ purple_certificate_register_scheme(PurpleCertificateScheme *scheme) purple_debug_info("certificate", "CertificateScheme %s registered\n", scheme->name); - + return TRUE; } @@ -1664,7 +1664,7 @@ purple_certificate_find_verifier(const gchar *scheme_name, const gchar *ver_name scheme_name, ver_name); /* TODO: Signalling and such? */ - + return NULL; } @@ -1742,7 +1742,7 @@ purple_certificate_find_pool(const gchar *scheme_name, const gchar *pool_name) scheme_name, pool_name); /* TODO: Signalling and such? */ - + return NULL; } @@ -1830,11 +1830,11 @@ purple_certificate_unregister_pool(PurpleCertificatePool *pool) } cert_pools = g_list_remove(cert_pools, pool); - + /* TODO: Signalling? */ purple_signal_unregister(pool, "certificate-stored"); purple_signal_unregister(pool, "certificate-deleted"); - + purple_debug_info("certificate", "CertificatePool %s unregistered\n", pool->name); diff --git a/libpurple/certificate.h b/libpurple/certificate.h index 232b1a68e8..672bf93bf1 100644 --- a/libpurple/certificate.h +++ b/libpurple/certificate.h @@ -60,7 +60,7 @@ typedef struct _PurpleCertificateVerificationRequest PurpleCertificateVerificati typedef void (*PurpleCertificateVerifiedCallback) (PurpleCertificateVerificationStatus st, gpointer userdata); - + /** A certificate instance * * An opaque data structure representing a single certificate under some @@ -96,7 +96,7 @@ struct _PurpleCertificatePool /** Internal pool data */ gpointer data; - + /** * Set up the Pool's internal state * @@ -249,7 +249,7 @@ struct _PurpleCertificateScheme /** Retrieve the certificate activation/expiration times */ gboolean (* get_times)(PurpleCertificate *crt, time_t *activation, time_t *expiration); - + void (*_purple_reserved1)(void); void (*_purple_reserved2)(void); void (*_purple_reserved3)(void); @@ -276,7 +276,7 @@ struct _PurpleCertificateVerifier /** Name of the Verifier - case insensitive */ gchar *name; - + /** * Start the verification process * @@ -326,14 +326,14 @@ struct _PurpleCertificateVerificationRequest * For X.509 certificates, this is the Common Name */ gchar *subject_name; - + /** List of certificates in the chain to be verified (such as that returned by purple_ssl_get_peer_certificates ) * * This is most relevant for X.509 certificates used in SSL sessions. * The list order should be: certificate, issuer, issuer's issuer, etc. */ GList *cert_chain; - + /** Internal data used by the Verifier code */ gpointer data; @@ -437,7 +437,7 @@ purple_certificate_destroy_list (GList * crt_list); * * @return TRUE if 'crt' has a valid signature made by 'issuer', * otherwise FALSE - * @todo Find a way to give the reason (bad signature, not the issuer, etc.) + * @todo Find a way to give the reason (bad signature, not the issuer, etc.) */ gboolean purple_certificate_signed_by(PurpleCertificate *crt, PurpleCertificate *issuer); @@ -523,7 +523,7 @@ purple_certificate_get_subject_name(PurpleCertificate *crt); /** * Check the subject name against that on the certificate * @param crt Certificate instance - * @param name Name to check. + * @param name Name to check. * @return TRUE if it is a match, else FALSE */ gboolean diff --git a/libpurple/cipher.c b/libpurple/cipher.c index 215b66a446..92047f356a 100644 --- a/libpurple/cipher.c +++ b/libpurple/cipher.c @@ -512,7 +512,7 @@ md4_reset(PurpleCipherContext *context, gpointer extra) { } static void -md4_append(PurpleCipherContext *context, const guchar *data, size_t len) +md4_append(PurpleCipherContext *context, const guchar *data, size_t len) { struct MD4_Context *mctx = purple_cipher_context_get_data(context); const guint32 avail = sizeof(mctx->block) - (mctx->byte_count & 0x3f); @@ -551,7 +551,7 @@ md4_digest(PurpleCipherContext *context, size_t in_len, guchar *out, char *p = (char *)mctx->block + offset; int padding = 56 - (offset + 1); - + if(in_len<16) return FALSE; if(out_len) *out_len = 16; *p++ = 0x80; @@ -659,7 +659,7 @@ hmac_set_opt(PurpleCipherContext *context, const gchar *name, void *value) hctx = purple_cipher_context_get_data(context); - if (!strcmp(name, "hash")) { + if (purple_strequal(name, "hash")) { g_free(hctx->name); if (hctx->hash) purple_cipher_context_destroy(hctx->hash); @@ -676,7 +676,7 @@ hmac_get_opt(PurpleCipherContext *context, const gchar *name) hctx = purple_cipher_context_get_data(context); - if (!strcmp(name, "hash")) { + if (purple_strequal(name, "hash")) { return hctx->name; } @@ -684,7 +684,7 @@ hmac_get_opt(PurpleCipherContext *context, const gchar *name) } static void -hmac_append(PurpleCipherContext *context, const guchar *data, size_t len) +hmac_append(PurpleCipherContext *context, const guchar *data, size_t len) { struct HMAC_Context *hctx = purple_cipher_context_get_data(context); @@ -778,7 +778,7 @@ hmac_set_key(PurpleCipherContext *context, const guchar * key) hmac_set_key_with_len(context, key, strlen((char *)key)); } -static size_t +static size_t hmac_get_block_size(PurpleCipherContext *context) { struct HMAC_Context *hctx = purple_cipher_context_get_data(context); @@ -1022,11 +1022,11 @@ data[6] = (right >> 8) &0xff; data[7] = right &0xff; * 16 encryption rounds. * To calculate subkeys for decryption the caller * have to reorder the generated subkeys. - * + * * rawkey: 8 Bytes of key data * subkey: Array of at least 32 guint32s. Will be filled * with calculated subkeys. - * + * **/ static void des_key_schedule (const guint8 * rawkey, guint32 * subkey) @@ -1186,7 +1186,7 @@ des_encrypt(PurpleCipherContext *context, const guchar data[], buf, output+offset, 0); - } + } return 0; } @@ -1216,7 +1216,7 @@ des_decrypt(PurpleCipherContext *context, const guchar data[], buf, output+offset, 1); - } + } return 0; } @@ -1692,11 +1692,11 @@ sha1_set_opt(PurpleCipherContext *context, const gchar *name, void *value) { ctx = purple_cipher_context_get_data(context); - if(!strcmp(name, "sizeHi")) { + if(purple_strequal(name, "sizeHi")) { ctx->sizeHi = GPOINTER_TO_INT(value); - } else if(!strcmp(name, "sizeLo")) { + } else if(purple_strequal(name, "sizeLo")) { ctx->sizeLo = GPOINTER_TO_INT(value); - } else if(!strcmp(name, "lenW")) { + } else if(purple_strequal(name, "lenW")) { ctx->lenW = GPOINTER_TO_INT(value); } } @@ -1707,11 +1707,11 @@ sha1_get_opt(PurpleCipherContext *context, const gchar *name) { ctx = purple_cipher_context_get_data(context); - if(!strcmp(name, "sizeHi")) { + if(purple_strequal(name, "sizeHi")) { return GINT_TO_POINTER(ctx->sizeHi); - } else if(!strcmp(name, "sizeLo")) { + } else if(purple_strequal(name, "sizeLo")) { return GINT_TO_POINTER(ctx->sizeLo); - } else if(!strcmp(name, "lenW")) { + } else if(purple_strequal(name, "lenW")) { return GINT_TO_POINTER(ctx->lenW); } @@ -1942,12 +1942,12 @@ rc4_set_opt(PurpleCipherContext *context, const gchar *name, void *value) { ctx = purple_cipher_context_get_data(context); - if(!strcmp(name, "key_len")) { + if(purple_strequal(name, "key_len")) { ctx->key_len = GPOINTER_TO_INT(value); } } -static size_t +static size_t rc4_get_key_size (PurpleCipherContext *context) { struct RC4Context *ctx; @@ -1967,7 +1967,7 @@ rc4_get_opt(PurpleCipherContext *context, const gchar *name) { ctx = purple_cipher_context_get_data(context); - if(!strcmp(name, "key_len")) { + if(purple_strequal(name, "key_len")) { return GINT_TO_POINTER(ctx->key_len); } diff --git a/libpurple/cipher.h b/libpurple/cipher.h index 1212e98f40..cc0f0a3c9f 100644 --- a/libpurple/cipher.h +++ b/libpurple/cipher.h @@ -422,7 +422,7 @@ PurpleCipherBatchMode purple_cipher_context_get_batch_mode(PurpleCipherContext * size_t purple_cipher_context_get_block_size(PurpleCipherContext *context); /** - * Sets the key with a given length on a context + * Sets the key with a given length on a context * * @param context The context whose key to set * @param key The key diff --git a/libpurple/circbuffer.c b/libpurple/circbuffer.c index 4563ab0c11..3c6af4301e 100644 --- a/libpurple/circbuffer.c +++ b/libpurple/circbuffer.c @@ -44,7 +44,7 @@ void purple_circ_buffer_destroy(PurpleCircBuffer *buf) { static void grow_circ_buffer(PurpleCircBuffer *buf, gsize len) { int in_offset = 0, out_offset = 0; int start_buflen; - + g_return_if_fail(buf != NULL); start_buflen = buf->buflen; @@ -94,7 +94,7 @@ void purple_circ_buffer_append(PurpleCircBuffer *buf, gconstpointer src, gsize l int len_stored; g_return_if_fail(buf != NULL); - + /* Grow the buffer, if necessary */ if ((buf->buflen - buf->bufused) < len) grow_circ_buffer(buf, len); diff --git a/libpurple/cmds.c b/libpurple/cmds.c index 79553864fe..4e82c91d49 100644 --- a/libpurple/cmds.c +++ b/libpurple/cmds.c @@ -236,7 +236,7 @@ PurpleCmdStatus purple_cmd_do_command(PurpleConversation *conv, const gchar *cmd for (l = cmds; l; l = l->next) { c = l->data; - if (strcmp(c->cmd, cmd) != 0) + if (!purple_strequal(c->cmd, cmd)) continue; found = TRUE; @@ -250,8 +250,8 @@ PurpleCmdStatus purple_cmd_do_command(PurpleConversation *conv, const gchar *cmd right_type = TRUE; - if ((c->flags & PURPLE_CMD_FLAG_PRPL_ONLY) && c->prpl_id && - (strcmp(c->prpl_id, prpl_id) != 0)) + if ((c->flags & PURPLE_CMD_FLAG_PRPL_ONLY) && + !purple_strequal(c->prpl_id, prpl_id)) continue; right_prpl = TRUE; @@ -320,8 +320,8 @@ GList *purple_cmd_list(PurpleConversation *conv) if (!(c->flags & PURPLE_CMD_FLAG_CHAT)) continue; - if (conv && (c->flags & PURPLE_CMD_FLAG_PRPL_ONLY) && c->prpl_id && - (strcmp(c->prpl_id, purple_account_get_protocol_id(purple_conversation_get_account(conv))) != 0)) + if (conv && (c->flags & PURPLE_CMD_FLAG_PRPL_ONLY) && + !purple_strequal(c->prpl_id, purple_account_get_protocol_id(purple_conversation_get_account(conv)))) continue; ret = g_list_append(ret, c->cmd); @@ -342,7 +342,7 @@ GList *purple_cmd_help(PurpleConversation *conv, const gchar *cmd) for (l = cmds; l; l = l->next) { c = l->data; - if (cmd && (strcmp(cmd, c->cmd) != 0)) + if (cmd && !purple_strequal(cmd, c->cmd)) continue; if (conv && (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM)) @@ -352,8 +352,8 @@ GList *purple_cmd_help(PurpleConversation *conv, const gchar *cmd) if (!(c->flags & PURPLE_CMD_FLAG_CHAT)) continue; - if (conv && (c->flags & PURPLE_CMD_FLAG_PRPL_ONLY) && c->prpl_id && - (strcmp(c->prpl_id, purple_account_get_protocol_id(purple_conversation_get_account(conv))) != 0)) + if (conv && (c->flags & PURPLE_CMD_FLAG_PRPL_ONLY) && + !purple_strequal(c->prpl_id, purple_account_get_protocol_id(purple_conversation_get_account(conv)))) continue; ret = g_list_append(ret, c->help); diff --git a/libpurple/connection.c b/libpurple/connection.c index 7e981f098b..6a47f3b795 100644 --- a/libpurple/connection.c +++ b/libpurple/connection.c @@ -191,16 +191,16 @@ _purple_connection_new_unregister(PurpleAccount *account, const char *password, PurpleConnection *gc; PurplePlugin *prpl; PurplePluginProtocolInfo *prpl_info; - + g_return_if_fail(account != NULL); - + prpl = purple_find_prpl(purple_account_get_protocol_id(account)); - + if (prpl != NULL) prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); else { gchar *message; - + message = g_strdup_printf(_("Missing protocol plugin for %s"), purple_account_get_username(account)); purple_notify_error(NULL, _("Unregistration Error"), message, NULL); @@ -212,7 +212,7 @@ _purple_connection_new_unregister(PurpleAccount *account, const char *password, prpl_info->unregister_user(account, cb, user_data); return; } - + if (((password == NULL) || (*password == '\0')) && !(prpl_info->options & OPT_PROTO_NO_PASSWORD) && !(prpl_info->options & OPT_PROTO_PASSWORD_OPTIONAL)) @@ -221,10 +221,10 @@ _purple_connection_new_unregister(PurpleAccount *account, const char *password, "a password.\n", purple_account_get_username(account)); return; } - + gc = g_new0(PurpleConnection, 1); PURPLE_DBUS_REGISTER_POINTER(gc, PurpleConnection); - + gc->prpl = prpl; if ((password != NULL) && (*password != '\0')) gc->password = g_strdup(password); @@ -232,11 +232,11 @@ _purple_connection_new_unregister(PurpleAccount *account, const char *password, purple_connection_set_state(gc, PURPLE_CONNECTING); connections = g_list_append(connections, gc); purple_account_set_connection(account, gc); - + purple_signal_emit(purple_connections_get_handle(), "signing-on", gc); - + purple_debug_info("connection", "Unregistering. gc = %p\n", gc); - + prpl_info->unregister_user(account, cb, user_data); } @@ -285,7 +285,7 @@ _purple_connection_destroy(PurpleConnection *gc) buddies = purple_find_buddies(account, NULL); while (buddies != NULL) { PurpleBuddy *buddy = buddies->data; - buddy->proto_data = NULL; + purple_buddy_set_protocol_data(buddy, NULL); buddies = g_slist_delete_link(buddies, buddies); } @@ -427,6 +427,13 @@ purple_connection_set_display_name(PurpleConnection *gc, const char *name) gc->display_name = g_strdup(name); } +void +purple_connection_set_protocol_data(PurpleConnection *connection, void *proto_data) { + g_return_if_fail(connection != NULL); + + connection->proto_data = proto_data; +} + PurpleConnectionState purple_connection_get_state(const PurpleConnection *gc) { @@ -467,6 +474,13 @@ purple_connection_get_display_name(const PurpleConnection *gc) return gc->display_name; } +void * +purple_connection_get_protocol_data(const PurpleConnection *connection) { + g_return_val_if_fail(connection != NULL, NULL); + + return connection->proto_data; +} + void purple_connection_update_progress(PurpleConnection *gc, const char *text, size_t step, size_t count) diff --git a/libpurple/connection.h b/libpurple/connection.h index 8dc476daa8..6b715e495a 100644 --- a/libpurple/connection.h +++ b/libpurple/connection.h @@ -42,7 +42,7 @@ typedef enum PURPLE_CONNECTION_FORMATTING_WBFO = 0x0008, /**< The text buffer must be formatted as a whole */ PURPLE_CONNECTION_NO_NEWLINES = 0x0010, /**< No new lines are allowed in outgoing messages */ PURPLE_CONNECTION_NO_FONTSIZE = 0x0020, /**< Connection does not send/receive font sizes */ - PURPLE_CONNECTION_NO_URLDESC = 0x0040, /**< Connection does not support descriptions with links */ + PURPLE_CONNECTION_NO_URLDESC = 0x0040, /**< Connection does not support descriptions with links */ PURPLE_CONNECTION_NO_IMAGES = 0x0080, /**< Connection does not support sending of images */ PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY = 0x0100 /**< Connection supports sending and receiving custom smileys */ @@ -56,7 +56,9 @@ typedef enum } PurpleConnectionState; -/** Possible errors that can cause a connection to be closed. +/** + * Possible errors that can cause a connection to be closed. + * * @since 2.3.0 */ typedef enum @@ -92,7 +94,7 @@ typedef enum PURPLE_CONNECTION_ERROR_NAME_IN_USE = 6, /** The username/server/other preference for the account isn't valid. - * For instance, on IRC the screen name cannot contain white space. + * For instance, on IRC the username cannot contain white space. * This reason should not be used for incorrect passwords etc: use * #PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED for that. * @@ -148,71 +150,84 @@ typedef struct #include "status.h" #include "sslconn.h" -/** Connection UI operations. Used to notify the user of changes to - * connections, such as being disconnected, and to respond to the - * underlying network connection appearing and disappearing. UIs should - * call #purple_connections_set_ui_ops() with an instance of this struct. +/** + * Connection UI operations. Used to notify the user of changes to + * connections, such as being disconnected, and to respond to the + * underlying network connection appearing and disappearing. UIs should + * call #purple_connections_set_ui_ops() with an instance of this struct. * - * @see @ref ui-ops + * @see @ref ui-ops */ typedef struct { - /** When an account is connecting, this operation is called to notify - * the UI of what is happening, as well as which @a step out of @a - * step_count has been reached (which might be displayed as a progress - * bar). - * @see #purple_connection_update_progress + /** + * When an account is connecting, this operation is called to notify + * the UI of what is happening, as well as which @a step out of @a + * step_count has been reached (which might be displayed as a progress + * bar). + * @see #purple_connection_update_progress */ void (*connect_progress)(PurpleConnection *gc, const char *text, size_t step, size_t step_count); - /** Called when a connection is established (just before the - * @ref signed-on signal). + /** + * Called when a connection is established (just before the + * @ref signed-on signal). */ void (*connected)(PurpleConnection *gc); - /** Called when a connection is ended (between the @ref signing-off - * and @ref signed-off signals). + + /** + * Called when a connection is ended (between the @ref signing-off + * and @ref signed-off signals). */ void (*disconnected)(PurpleConnection *gc); - /** Used to display connection-specific notices. (Pidgin's Gtk user - * interface implements this as a no-op; #purple_connection_notice(), - * which uses this operation, is not used by any of the protocols - * shipped with libpurple.) + /** + * Used to display connection-specific notices. (Pidgin's Gtk user + * interface implements this as a no-op; #purple_connection_notice(), + * which uses this operation, is not used by any of the protocols + * shipped with libpurple.) */ void (*notice)(PurpleConnection *gc, const char *text); - /** Called when an error causes a connection to be disconnected. - * Called before #disconnected. - * @param text a localized error message. - * @see #purple_connection_error - * @deprecated in favour of - * #PurpleConnectionUiOps.report_disconnect_reason. + /** + * Called when an error causes a connection to be disconnected. + * Called before #disconnected. + * @param text a localized error message. + * @see #purple_connection_error + * @deprecated in favour of + * #PurpleConnectionUiOps.report_disconnect_reason. */ void (*report_disconnect)(PurpleConnection *gc, const char *text); - /** Called when libpurple discovers that the computer's network - * connection is active. On Linux, this uses Network Manager if - * available; on Windows, it uses Win32's network change notification - * infrastructure. + /** + * Called when libpurple discovers that the computer's network + * connection is active. On Linux, this uses Network Manager if + * available; on Windows, it uses Win32's network change notification + * infrastructure. */ void (*network_connected)(void); - /** Called when libpurple discovers that the computer's network - * connection has gone away. + + /** + * Called when libpurple discovers that the computer's network + * connection has gone away. */ void (*network_disconnected)(void); - /** Called when an error causes a connection to be disconnected. + /** + * Called when an error causes a connection to be disconnected. * Called before #disconnected. This op is intended to replace * #report_disconnect. If both are implemented, this will be called * first; however, there's no real reason to implement both. + * * @param reason why the connection ended, if known, or * #PURPLE_CONNECTION_ERROR_OTHER_ERROR, if not. * @param text a localized message describing the disconnection * in more detail to the user. * @see #purple_connection_error_reason + * * @since 2.3.0 */ void (*report_disconnect_reason)(PurpleConnection *gc, @@ -354,6 +369,16 @@ void purple_connection_set_account(PurpleConnection *gc, PurpleAccount *account) void purple_connection_set_display_name(PurpleConnection *gc, const char *name); /** + * Sets the protocol data for a connection. + * + * @param connection The PurpleConnection. + * @param proto_data The protocol data to set for the connection. + * + * @since 2.6.0 + */ +void purple_connection_set_protocol_data(PurpleConnection *connection, void *proto_data); + +/** * Returns the connection state. * * @param gc The connection. @@ -385,6 +410,7 @@ PurpleAccount *purple_connection_get_account(const PurpleConnection *gc); * @param gc The connection. * * @return The protocol plugin. + * * @since 2.4.0 */ PurplePlugin * purple_connection_get_prpl(const PurpleConnection *gc); @@ -408,6 +434,17 @@ const char *purple_connection_get_password(const PurpleConnection *gc); const char *purple_connection_get_display_name(const PurpleConnection *gc); /** + * Gets the protocol data from a connection. + * + * @param connection The PurpleConnection. + * + * @return The protocol data for the connection. + * + * @since 2.6.0 + */ +void *purple_connection_get_protocol_data(const PurpleConnection *connection); + +/** * Updates the connection progress. * * @param gc The connection. @@ -450,6 +487,7 @@ void purple_connection_error(PurpleConnection *gc, const char *reason); * @param gc the connection which is closing. * @param reason why the connection is closing. * @param description a non-@c NULL localized description of the error. + * * @since 2.3.0 */ void @@ -461,6 +499,7 @@ purple_connection_error_reason (PurpleConnection *gc, * Closes a connection due to an SSL error; this is basically a shortcut to * turning the #PurpleSslErrorType into a #PurpleConnectionError and a * human-readable string and then calling purple_connection_error_reason(). + * * @since 2.3.0 */ void @@ -484,6 +523,7 @@ purple_connection_ssl_error (PurpleConnection *gc, * * @return @c TRUE if the account should not be automatically reconnected, and * @c FALSE otherwise. + * * @since 2.3.0 */ gboolean diff --git a/libpurple/conversation.c b/libpurple/conversation.c index 34fbaa9c0a..6387db9811 100644 --- a/libpurple/conversation.c +++ b/libpurple/conversation.c @@ -665,7 +665,7 @@ purple_conversation_autoset_title(PurpleConversation *conv) text = purple_buddy_get_contact_alias(b); } else if(purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { if(account && ((chat = purple_blist_find_chat(account, name)) != NULL)) - text = chat->alias; + text = purple_chat_get_name(chat); } @@ -912,7 +912,7 @@ purple_conversation_write(PurpleConversation *conv, const char *who, if (purple_account_get_alias(account) != NULL) alias = account->alias; - else if (b != NULL && strcmp(b->name, purple_buddy_get_contact_alias(b))) + else if (b != NULL && !purple_strequal(purple_buddy_get_name(b), purple_buddy_get_contact_alias(b))) alias = purple_buddy_get_contact_alias(b); else if (purple_connection_get_display_name(gc) != NULL) alias = purple_connection_get_display_name(gc); @@ -1480,7 +1480,7 @@ purple_conv_chat_write(PurpleConvChat *chat, const char *who, const char *messag str = g_strdup(purple_normalize(account, who)); - if (!strcmp(str, purple_normalize(account, chat->nick))) { + if (purple_strequal(str, purple_normalize(account, chat->nick))) { flags |= PURPLE_MESSAGE_SEND; } else { flags |= PURPLE_MESSAGE_RECV; @@ -1601,7 +1601,7 @@ purple_conv_chat_add_users(PurpleConvChat *chat, GList *users, GList *extra_msgs const char *extra_msg = (extra_msgs ? extra_msgs->data : NULL); if(!(prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME)) { - if (!strcmp(chat->nick, purple_normalize(conv->account, user))) { + if (purple_strequal(chat->nick, purple_normalize(conv->account, user))) { const char *alias2 = purple_account_get_alias(conv->account); if (alias2 != NULL) alias = alias2; @@ -1692,7 +1692,7 @@ purple_conv_chat_rename_user(PurpleConvChat *chat, const char *old_user, prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); g_return_if_fail(prpl_info != NULL); - if (!strcmp(chat->nick, purple_normalize(conv->account, old_user))) { + if (purple_strequal(chat->nick, purple_normalize(conv->account, old_user))) { const char *alias; /* Note this for later. */ diff --git a/libpurple/conversation.h b/libpurple/conversation.h index b01708604f..e280f9f759 100644 --- a/libpurple/conversation.h +++ b/libpurple/conversation.h @@ -1350,7 +1350,7 @@ void purple_conv_chat_cb_destroy(PurpleConvChatBuddy *cb); * Retrieves the extended menu items for the conversation. * * @param conv The conversation. - * + * * @return A list of PurpleMenuAction items, harvested by the * chat-extended-menu signal. The list and the menuaction * items should be freed by the caller. diff --git a/libpurple/core.c b/libpurple/core.c index 7e4abd44fb..c15d4fd77b 100644 --- a/libpurple/core.c +++ b/libpurple/core.c @@ -46,9 +46,11 @@ #include "signals.h" #include "smiley.h" #include "sound.h" +#include "sound-theme-loader.h" #include "sslconn.h" #include "status.h" #include "stun.h" +#include "theme-manager.h" #include "util.h" #ifdef HAVE_DBUS @@ -143,6 +145,8 @@ purple_core_init(const char *ui) purple_plugins_probe(G_MODULE_SUFFIX); + purple_theme_manager_init(); + /* The buddy icon code uses the imgstore, so init it early. */ purple_imgstore_init(); @@ -171,7 +175,7 @@ purple_core_init(const char *ui) purple_xfers_init(); purple_idle_init(); purple_smileys_init(); - + purple_theme_manager_init(); /* * Call this early on to try to auto-detect our IP address and * hopefully save some time later. @@ -181,6 +185,9 @@ purple_core_init(const char *ui) if (ops != NULL && ops->ui_init != NULL) ops->ui_init(); + /* The UI may have registered some theme types, so refresh them */ + purple_theme_manager_refresh(); + return TRUE; } @@ -233,6 +240,7 @@ purple_core_quit(void) purple_savedstatuses_uninit(); purple_status_uninit(); purple_sound_uninit(); + purple_theme_manager_uninit(); purple_xfers_uninit(); purple_proxy_uninit(); purple_dnsquery_uninit(); @@ -350,15 +358,7 @@ purple_core_ensure_single_instance() const char *user_dir = purple_user_dir(); char *dbus_owner_user_dir = purple_dbus_owner_user_dir(); - if (NULL == user_dir && NULL != dbus_owner_user_dir) - is_single_instance = TRUE; - else if (NULL != user_dir && NULL == dbus_owner_user_dir) - is_single_instance = TRUE; - else if (NULL == user_dir && NULL == dbus_owner_user_dir) - is_single_instance = FALSE; - else - is_single_instance = strcmp(dbus_owner_user_dir, user_dir); - + is_single_instance = !purple_strequal(dbus_owner_user_dir, user_dir); g_free(dbus_owner_user_dir); } } @@ -489,7 +489,7 @@ purple_core_migrate(void) if (g_file_test(name, G_FILE_TEST_IS_SYMLINK)) { /* We're only going to duplicate a logs symlink. */ - if (!strcmp(entry, "logs")) + if (purple_strequal(entry, "logs")) { char *link; #if GLIB_CHECK_VERSION(2,4,0) @@ -532,7 +532,8 @@ purple_core_migrate(void) logs_dir = g_build_filename(user_dir, "logs", NULL); - if (!strcmp(link, "../.purple/logs") || !strcmp(link, logs_dir)) + if (purple_strequal(link, "../.purple/logs") || + purple_strequal(link, logs_dir)) { /* If the symlink points to the new directory, we're * likely just trying again after a failed migration, @@ -577,7 +578,7 @@ purple_core_migrate(void) /* Deal with directories... */ if (g_file_test(name, G_FILE_TEST_IS_DIR)) { - if (!strcmp(entry, "icons")) + if (purple_strequal(entry, "icons")) { /* This is a special case for the Album plugin, which * stores data in the icons folder. We're not copying @@ -646,7 +647,7 @@ purple_core_migrate(void) g_dir_close(icons_dir); } - else if (!strcmp(entry, "plugins")) + else if (purple_strequal(entry, "plugins")) { /* Do nothing, because we broke plugin compatibility. * This means that the plugins directory gets left behind. */ diff --git a/libpurple/core.h b/libpurple/core.h index 1e4c427309..958685dd6b 100644 --- a/libpurple/core.h +++ b/libpurple/core.h @@ -90,17 +90,17 @@ void purple_core_quit(void); /** * <p> - * Calls purple_core_quit(). This can be used as the function - * passed to purple_timeout_add() when you want to shutdown Purple - * in a specified amount of time. When shutting down Purple + * Calls purple_core_quit(). This can be used as the function + * passed to purple_timeout_add() when you want to shutdown Purple + * in a specified amount of time. When shutting down Purple * from a plugin, you must use this instead of purple_core_quit(); - * for an immediate exit, use a timeout value of 0: + * for an immediate exit, use a timeout value of 0: * </p> * * <code>purple_timeout_add(0, purple_core_quitcb, NULL);</code> * * <p> - * This is ensures that code from your plugin is not being + * This is ensures that code from your plugin is not being * executed when purple_core_quit() is called. If the plugin * called purple_core_quit() directly, you would get a core dump * after purple_core_quit() executes and control returns to your diff --git a/libpurple/dbus-bindings.h b/libpurple/dbus-bindings.h index db5e426332..5611ae58a7 100644 --- a/libpurple/dbus-bindings.h +++ b/libpurple/dbus-bindings.h @@ -84,7 +84,7 @@ purple_dbus_message_iter_get_args_valist (DBusMessageIter *iter, int first_arg_type, va_list var_args); -dbus_int32_t* purple_dbusify_GList(GList *list, gboolean free_memory, +dbus_int32_t* purple_dbusify_GList(GList *list, gboolean free_memory, dbus_int32_t *len); dbus_int32_t* purple_dbusify_GSList(GSList *list, gboolean free_memory, dbus_int32_t *len); diff --git a/libpurple/dbus-server.h b/libpurple/dbus-server.h index 6b1649d369..e970866e9d 100644 --- a/libpurple/dbus-server.h +++ b/libpurple/dbus-server.h @@ -173,7 +173,7 @@ void *purple_dbus_get_handle(void); /** * Determines whether this instance owns the DBus service name - * + * * @since 2.1.0 */ gboolean purple_dbus_is_owner(void); diff --git a/libpurple/desktopitem.c b/libpurple/desktopitem.c index 1ddb5c2ddc..714a4b14e0 100644 --- a/libpurple/desktopitem.c +++ b/libpurple/desktopitem.c @@ -41,12 +41,12 @@ * modify it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. - * + * * The Gnome Library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with the Gnome Library; see the file COPYING.LIB. If not, * write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, @@ -67,7 +67,7 @@ struct _PurpleDesktopItem { GList *languages; PurpleDesktopItemType type; - + /* `modified' means that the ditem has been * modified since the last save. */ gboolean modified; @@ -108,30 +108,30 @@ type_from_string (const char *type) switch (type [0]) { case 'A': - if (!strcmp (type, "Application")) + if (purple_strequal (type, "Application")) return PURPLE_DESKTOP_ITEM_TYPE_APPLICATION; break; case 'L': - if (!strcmp (type, "Link")) + if (purple_strequal (type, "Link")) return PURPLE_DESKTOP_ITEM_TYPE_LINK; break; case 'F': - if (!strcmp (type, "FSDevice")) + if (purple_strequal (type, "FSDevice")) return PURPLE_DESKTOP_ITEM_TYPE_FSDEVICE; break; case 'M': - if (!strcmp (type, "MimeType")) + if (purple_strequal (type, "MimeType")) return PURPLE_DESKTOP_ITEM_TYPE_MIME_TYPE; break; case 'D': - if (!strcmp (type, "Directory")) + if (purple_strequal (type, "Directory")) return PURPLE_DESKTOP_ITEM_TYPE_DIRECTORY; break; case 'S': - if (!strcmp (type, "Service")) + if (purple_strequal (type, "Service")) return PURPLE_DESKTOP_ITEM_TYPE_SERVICE; - else if (!strcmp (type, "ServiceType")) + else if (purple_strequal (type, "ServiceType")) return PURPLE_DESKTOP_ITEM_TYPE_SERVICE_TYPE; break; default: @@ -149,12 +149,12 @@ find_section (PurpleDesktopItem *item, const char *section) if (section == NULL) return NULL; - if (strcmp (section, "Desktop Entry") == 0) + if (purple_strequal (section, "Desktop Entry")) return NULL; for (li = item->sections; li != NULL; li = li->next) { sec = li->data; - if (strcmp (sec->name, section) == 0) + if (purple_strequal (sec->name, section)) return sec; } @@ -235,7 +235,7 @@ set (PurpleDesktopItem *item, const char *key, const char *value) item->keys = g_list_append (item->keys, g_strdup (key)); - g_hash_table_replace (item->main_hash, + g_hash_table_replace (item->main_hash, g_strdup (key), g_strdup (value)); } else { @@ -264,7 +264,7 @@ _purple_desktop_item_set_string (PurpleDesktopItem *item, set (item, attr, value); - if (strcmp (attr, PURPLE_DESKTOP_ITEM_TYPE) == 0) + if (purple_strequal (attr, PURPLE_DESKTOP_ITEM_TYPE)) item->type = type_from_string (value); } @@ -280,7 +280,7 @@ _purple_desktop_item_new (void) retval->main_hash = g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify) g_free, (GDestroyNotify) g_free); - + /* These are guaranteed to be set */ _purple_desktop_item_set_string (retval, PURPLE_DESKTOP_ITEM_NAME, @@ -354,16 +354,16 @@ get_encoding (FILE *df) p++; if (*p == ' ') p++; - if (strcmp (p, "UTF-8") == 0) { + if (purple_strequal (p, "UTF-8")) { return ENCODING_UTF8; - } else if (strcmp (p, "Legacy-Mixed") == 0) { + } else if (purple_strequal (p, "Legacy-Mixed")) { return ENCODING_LEGACY_MIXED; } else { /* According to the spec we're not supposed * to read a file like this */ return ENCODING_UNKNOWN; } - } else if (strcmp ("[KDE Desktop Entry]", buf) == 0) { + } else if (purple_strequal ("[KDE Desktop Entry]", buf)) { old_kde = TRUE; /* don't break yet, we still want to support * Encoding even here */ @@ -557,7 +557,7 @@ decode_string (const char *value, Encoding encoding, const char *locale) char *utf8_string; if (char_encoding == NULL) return NULL; - if (strcmp (char_encoding, "ASCII") == 0) { + if (purple_strequal (char_encoding, "ASCII")) { return decode_string_and_dup (value); } utf8_string = g_convert (value, -1, "UTF-8", char_encoding, @@ -673,7 +673,7 @@ insert_key (PurpleDesktopItem *item, char *val; /* we always store everything in UTF-8 */ if (cur_section == NULL && - strcmp (key, PURPLE_DESKTOP_ITEM_ENCODING) == 0) { + purple_strequal (key, PURPLE_DESKTOP_ITEM_ENCODING)) { k = g_strdup (key); val = g_strdup ("UTF-8"); } else { @@ -690,14 +690,14 @@ insert_key (PurpleDesktopItem *item, g_free (locale); return; } - + g_strchomp (val); /* For old KDE entries, we can also split by a comma * on sort order, so convert to semicolons */ if (old_kde && cur_section == NULL && - strcmp (key, PURPLE_DESKTOP_ITEM_SORT_ORDER) == 0 && + purple_strequal (key, PURPLE_DESKTOP_ITEM_SORT_ORDER) && strchr (val, ';') == NULL) { int i; for (i = 0; val[i] != '\0'; i++) { @@ -720,7 +720,7 @@ insert_key (PurpleDesktopItem *item, /* Take care of the language part */ if (locale != NULL && - strcmp (locale, "C") == 0) { + purple_strequal (locale, "C")) { char *p; /* Whack C locale */ p = strchr (k, '['); @@ -791,11 +791,10 @@ setup_type (PurpleDesktopItem *item, const char *uri) PURPLE_DESKTOP_ITEM_TYPE); if (type == NULL && uri != NULL) { char *base = g_path_get_basename (uri); - if (base != NULL && - strcmp (base, ".directory") == 0) { + if (purple_strequal(base, ".directory")) { /* This gotta be a directory */ g_hash_table_replace (item->main_hash, - g_strdup (PURPLE_DESKTOP_ITEM_TYPE), + g_strdup (PURPLE_DESKTOP_ITEM_TYPE), g_strdup ("Directory")); item->keys = g_list_prepend (item->keys, g_strdup (PURPLE_DESKTOP_ITEM_TYPE)); @@ -813,7 +812,7 @@ static const char * lookup_locale (const PurpleDesktopItem *item, const char *key, const char *locale) { if (locale == NULL || - strcmp (locale, "C") == 0) { + purple_strequal (locale, "C")) { return lookup (item, key); } else { const char *ret; @@ -857,7 +856,7 @@ sanitize (PurpleDesktopItem *item, const char *uri) type = lookup (item, PURPLE_DESKTOP_ITEM_TYPE); /* understand old gnome style url exec thingies */ - if (type != NULL && strcmp (type, "URL") == 0) { + if (purple_strequal(type, "URL")) { const char *exec = lookup (item, PURPLE_DESKTOP_ITEM_EXEC); set (item, PURPLE_DESKTOP_ITEM_TYPE, "Link"); if (exec != NULL) { @@ -877,7 +876,7 @@ sanitize (PurpleDesktopItem *item, const char *uri) if (name == NULL) name = g_strdup (_("No name")); g_hash_table_replace (item->main_hash, - g_strdup (PURPLE_DESKTOP_ITEM_NAME), + g_strdup (PURPLE_DESKTOP_ITEM_NAME), name); item->keys = g_list_prepend (item->keys, g_strdup (PURPLE_DESKTOP_ITEM_NAME)); @@ -885,7 +884,7 @@ sanitize (PurpleDesktopItem *item, const char *uri) if (lookup (item, PURPLE_DESKTOP_ITEM_ENCODING) == NULL) { /* We store everything in UTF-8 so write that down */ g_hash_table_replace (item->main_hash, - g_strdup (PURPLE_DESKTOP_ITEM_ENCODING), + g_strdup (PURPLE_DESKTOP_ITEM_ENCODING), g_strdup ("UTF-8")); item->keys = g_list_prepend (item->keys, g_strdup (PURPLE_DESKTOP_ITEM_ENCODING)); @@ -893,7 +892,7 @@ sanitize (PurpleDesktopItem *item, const char *uri) if (lookup (item, PURPLE_DESKTOP_ITEM_VERSION) == NULL) { /* this is the version that we follow, so write it down */ g_hash_table_replace (item->main_hash, - g_strdup (PURPLE_DESKTOP_ITEM_VERSION), + g_strdup (PURPLE_DESKTOP_ITEM_VERSION), g_strdup ("1.0")); item->keys = g_list_prepend (item->keys, g_strdup (PURPLE_DESKTOP_ITEM_VERSION)); @@ -954,7 +953,7 @@ ditem_load (FILE *df, while ((c = getc (df)) != EOF) { if (c == '\r') /* Ignore Carriage Return */ continue; - + switch (state) { case OnSecHeader: @@ -968,13 +967,11 @@ ditem_load (FILE *df, cur_section->keys = g_list_reverse (cur_section->keys); } - if (strcmp (CharBuffer, - "KDE Desktop Entry") == 0) { + if (purple_strequal (CharBuffer, "KDE Desktop Entry")) { /* Main section */ cur_section = NULL; old_kde = TRUE; - } else if (strcmp (CharBuffer, - "Desktop Entry") == 0) { + } else if (purple_strequal(CharBuffer, "Desktop Entry")) { /* Main section */ cur_section = NULL; } else { @@ -1025,16 +1022,16 @@ ditem_load (FILE *df, /* On first pass, don't allow dangling keys */ if (state == FirstBrace) break; - + if ((c == ' ' && state != KeyDefOnKey) || c == '\t') break; - + if (c == '\n' || PURPLE_DESKTOP_ITEM_OVERFLOW) { /* Abort Definition */ next = CharBuffer; state = KeyDef; break; } - + if (c == '=' || PURPLE_DESKTOP_ITEM_OVERFLOW){ *next = '\0'; @@ -1067,7 +1064,7 @@ ditem_load (FILE *df, break; } /* switch */ - + } /* while ((c = getc_unlocked (f)) != EOF) */ if (c == EOF && state == KeyValue) { *next = '\0'; @@ -1158,7 +1155,7 @@ purple_desktop_item_new_from_file (const char *filename) printf ("Can't open %s: %s", filename, g_strerror(errno)); return NULL; } - + retval = ditem_load(dfile, FALSE, filename); return retval; @@ -1203,7 +1200,7 @@ purple_desktop_item_copy (const PurpleDesktopItem *item) /* Languages */ retval->languages = g_list_copy (item->languages); for (li = retval->languages; li != NULL; li = li->next) - li->data = g_strdup (li->data); + li->data = g_strdup (li->data); /* Keys */ retval->keys = g_list_copy (item->keys); diff --git a/libpurple/desktopitem.h b/libpurple/desktopitem.h index b47ac1b15e..b9ae357ee1 100644 --- a/libpurple/desktopitem.h +++ b/libpurple/desktopitem.h @@ -41,12 +41,12 @@ * modify it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. - * + * * The Gnome Library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with the Gnome Library; see the file COPYING.LIB. If not, * write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, @@ -155,7 +155,7 @@ const char *purple_desktop_item_get_string (const PurpleDesktopItem *item, * * @param item The item to be copied * - * @return The new copy + * @return The new copy */ PurpleDesktopItem *purple_desktop_item_copy (const PurpleDesktopItem *item); diff --git a/libpurple/eventloop.h b/libpurple/eventloop.h index 1d363cc89a..ca95f6cbe8 100644 --- a/libpurple/eventloop.h +++ b/libpurple/eventloop.h @@ -119,8 +119,8 @@ struct _PurpleEventLoopUiOps * @see purple_input_remove */ gboolean (*input_remove)(guint handle); - - + + /** * If implemented, should get the current error status for an input. * @@ -161,7 +161,7 @@ struct _PurpleEventLoopUiOps /*@{*/ /** * Creates a callback timer. - * + * * The timer will repeat until the function returns @c FALSE. The * first call will be at the end of the first interval. * @@ -185,12 +185,12 @@ guint purple_timeout_add(guint interval, GSourceFunc function, gpointer data); * * This function allows UIs to group timers for better power efficiency. For * this reason, @a interval may be rounded by up to a second. - * + * * @param interval The time between calls of the function, in * seconds. * @param function The function to call. * @param data data to pass to @a function. - * @return A handle to the timer which can be passed to + * @return A handle to the timer which can be passed to * purple_timeout_remove() to remove the timer. * * @since 2.1.0 diff --git a/libpurple/idle.c b/libpurple/idle.c index f71ca9f9b1..55e338749e 100644 --- a/libpurple/idle.c +++ b/libpurple/idle.c @@ -126,14 +126,14 @@ check_idleness(void) idle_reporting = purple_prefs_get_string("/purple/away/idle_reporting"); auto_away = purple_prefs_get_bool("/purple/away/away_when_idle"); - if (!strcmp(idle_reporting, "system") && + if (purple_strequal(idle_reporting, "system") && (idle_ui_ops != NULL) && (idle_ui_ops->get_time_idle != NULL)) { /* Use system idle time (mouse or keyboard movement, etc.) */ time_idle = idle_ui_ops->get_time_idle(); idle_recheck_interval = 1; } - else if (!strcmp(idle_reporting, "purple")) + else if (purple_strequal(idle_reporting, "purple")) { /* Use 'Purple idle' */ time_idle = time(NULL) - last_active_time; @@ -214,7 +214,7 @@ check_idleness(void) /* - * Check idle and set the timer to fire at the next idle-worth event + * Check idle and set the timer to fire at the next idle-worth event */ static gboolean check_idleness_timer(void) diff --git a/libpurple/internal.h b/libpurple/internal.h index 039dc7a0cf..085605f2a6 100644 --- a/libpurple/internal.h +++ b/libpurple/internal.h @@ -102,7 +102,7 @@ #include <gmodule.h> #ifdef PURPLE_PLUGINS -# ifdef HAVE_DLFCN_H +# ifdef HAVE_DLFCN_H # include <dlfcn.h> # endif #endif diff --git a/libpurple/log.c b/libpurple/log.c index 729da5b178..0f8da9d5dd 100644 --- a/libpurple/log.c +++ b/libpurple/log.c @@ -34,6 +34,7 @@ #include "util.h" #include "stringref.h" #include "imgstore.h" +#include "time.h" static GSList *loggers = NULL; @@ -46,6 +47,7 @@ struct _purple_logsize_user { PurpleAccount *account; }; static GHashTable *logsize_users = NULL; +static GHashTable *logsize_users_decayed = NULL; static void log_get_log_sets_common(GHashTable *sets); @@ -161,14 +163,27 @@ void purple_log_write(PurpleLog *log, PurpleMessageFlags type, lu->account = log->account; if(g_hash_table_lookup_extended(logsize_users, lu, NULL, &ptrsize)) { + char *tmp = lu->name; + total = GPOINTER_TO_INT(ptrsize); total += written; g_hash_table_replace(logsize_users, lu, GINT_TO_POINTER(total)); + + /* The hash table takes ownership of lu, so create a new one + * for the logsize_users_decayed check below. */ + lu = g_new(struct _purple_logsize_user, 1); + lu->name = g_strdup(tmp); + lu->account = log->account; + } + + if(g_hash_table_lookup_extended(logsize_users_decayed, lu, NULL, &ptrsize)) { + total = GPOINTER_TO_INT(ptrsize); + total += written; + g_hash_table_replace(logsize_users_decayed, lu, GINT_TO_POINTER(total)); } else { g_free(lu->name); g_free(lu); } - } char *purple_log_read(PurpleLog *log, PurpleLogReadFlags *flags) @@ -200,7 +215,7 @@ static guint _purple_logsize_user_hash(struct _purple_logsize_user *lu) static guint _purple_logsize_user_equal(struct _purple_logsize_user *lu1, struct _purple_logsize_user *lu2) { - return (lu1->account == lu2->account && (!strcmp(lu1->name, lu2->name))); + return (lu1->account == lu2->account && purple_strequal(lu1->name, lu2->name)); } static void _purple_logsize_user_free_key(struct _purple_logsize_user *lu) @@ -250,6 +265,49 @@ int purple_log_get_total_size(PurpleLogType type, const char *name, PurpleAccoun return size; } +gint purple_log_get_activity_score(PurpleLogType type, const char *name, PurpleAccount *account) +{ + gpointer ptrscore; + int score; + GSList *n; + struct _purple_logsize_user *lu; + time_t now; + time(&now); + + lu = g_new(struct _purple_logsize_user, 1); + lu->name = g_strdup(purple_normalize(account, name)); + lu->account = account; + + if(g_hash_table_lookup_extended(logsize_users_decayed, lu, NULL, &ptrscore)) { + score = GPOINTER_TO_INT(ptrscore); + g_free(lu->name); + g_free(lu); + } else { + double score_double = 0.0; + for (n = loggers; n; n = n->next) { + PurpleLogLogger *logger = n->data; + + if(logger->list) { + GList *logs = (logger->list)(type, name, account); + + while (logs) { + PurpleLog *log = (PurpleLog*)(logs->data); + /* Activity score counts bytes in the log, exponentially + decayed with a half-life of 14 days. */ + score_double += purple_log_get_size(log) * + pow(0.5, difftime(now, log->time)/1209600.0); + purple_log_free(log); + logs = g_list_delete_link(logs, logs); + } + } + } + + score = (gint)score_double; + g_hash_table_replace(logsize_users_decayed, lu, GINT_TO_POINTER(score)); + } + return score; +} + gboolean purple_log_is_deletable(PurpleLog *log) { g_return_val_if_fail(log != NULL, FALSE); @@ -324,7 +382,7 @@ static void logger_pref_cb(const char *name, PurplePrefType type, GSList *l = loggers; while (l) { logger = l->data; - if (!strcmp(logger->id, value)) { + if (purple_strequal(logger->id, value)) { purple_log_logger_set(logger); return; } @@ -406,7 +464,7 @@ void purple_log_logger_add (PurpleLogLogger *logger) if (g_slist_find(loggers, logger)) return; loggers = g_slist_append(loggers, logger); - if (strcmp(purple_prefs_get_string("/purple/logging/format"), logger->id) == 0) { + if (purple_strequal(purple_prefs_get_string("/purple/logging/format"), logger->id)) { purple_prefs_trigger_callback("/purple/logging/format"); } } @@ -588,11 +646,11 @@ void purple_log_init(void) void *handle = purple_log_get_handle(); purple_prefs_add_none("/purple/logging"); - purple_prefs_add_bool("/purple/logging/log_ims", FALSE); - purple_prefs_add_bool("/purple/logging/log_chats", FALSE); + purple_prefs_add_bool("/purple/logging/log_ims", TRUE); + purple_prefs_add_bool("/purple/logging/log_chats", TRUE); purple_prefs_add_bool("/purple/logging/log_system", FALSE); - purple_prefs_add_string("/purple/logging/format", "txt"); + purple_prefs_add_string("/purple/logging/format", "html"); html_logger = purple_log_logger_new("html", _("HTML"), 11, NULL, @@ -661,6 +719,9 @@ void purple_log_init(void) logsize_users = g_hash_table_new_full((GHashFunc)_purple_logsize_user_hash, (GEqualFunc)_purple_logsize_user_equal, (GDestroyNotify)_purple_logsize_user_free_key, NULL); + logsize_users_decayed = g_hash_table_new_full((GHashFunc)_purple_logsize_user_hash, + (GEqualFunc)_purple_logsize_user_equal, + (GDestroyNotify)_purple_logsize_user_free_key, NULL); } void @@ -679,6 +740,9 @@ purple_log_uninit(void) purple_log_logger_remove(old_logger); purple_log_logger_free(old_logger); old_logger = NULL; + + g_hash_table_destroy(logsize_users); + g_hash_table_destroy(logsize_users_decayed); } /**************************************************************************** @@ -1019,7 +1083,7 @@ static void log_get_log_sets_common(GHashTable *sets) continue; prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); - if (!strcmp(protocol_unescaped, prpl_info->list_icon((PurpleAccount *)account_iter->data, NULL))) + if (purple_strequal(protocol_unescaped, prpl_info->list_icon((PurpleAccount *)account_iter->data, NULL))) accounts = g_list_prepend(accounts, account_iter->data); } g_free(protocol_unescaped); @@ -1039,7 +1103,7 @@ static void log_get_log_sets_common(GHashTable *sets) /* Find the account for username in the list of accounts for protocol. */ username_unescaped = purple_unescape_filename(username); for (account_iter = g_list_first(accounts) ; account_iter != NULL ; account_iter = account_iter->next) { - if (!strcmp(((PurpleAccount *)account_iter->data)->username, username_unescaped)) { + if (purple_strequal(((PurpleAccount *)account_iter->data)->username, username_unescaped)) { account = account_iter->data; break; } @@ -1068,14 +1132,14 @@ static void log_get_log_sets_common(GHashTable *sets) /* Chat for .chat or .system at the end of the name to determine the type. */ if (len >= 7) { gchar *tmp = &name[len - 7]; - if (!strcmp(tmp, ".system")) { + if (purple_strequal(tmp, ".system")) { set->type = PURPLE_LOG_SYSTEM; *tmp = '\0'; } } if (len > 5) { gchar *tmp = &name[len - 5]; - if (!strcmp(tmp, ".chat")) { + if (purple_strequal(tmp, ".chat")) { set->type = PURPLE_LOG_CHAT; *tmp = '\0'; } @@ -1773,29 +1837,29 @@ static GList *old_logger_list(PurpleLogType type, const char *sn, PurpleAccount sscanf(convostart, "%*s %s %d %d:%d:%d %d", month, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec, &tm.tm_year); /* Ugly hack, in case current locale is not English */ - if (strcmp(month, "Jan") == 0) { + if (purple_strequal(month, "Jan")) { tm.tm_mon= 0; - } else if (strcmp(month, "Feb") == 0) { + } else if (purple_strequal(month, "Feb")) { tm.tm_mon = 1; - } else if (strcmp(month, "Mar") == 0) { + } else if (purple_strequal(month, "Mar")) { tm.tm_mon = 2; - } else if (strcmp(month, "Apr") == 0) { + } else if (purple_strequal(month, "Apr")) { tm.tm_mon = 3; - } else if (strcmp(month, "May") == 0) { + } else if (purple_strequal(month, "May")) { tm.tm_mon = 4; - } else if (strcmp(month, "Jun") == 0) { + } else if (purple_strequal(month, "Jun")) { tm.tm_mon = 5; - } else if (strcmp(month, "Jul") == 0) { + } else if (purple_strequal(month, "Jul")) { tm.tm_mon = 6; - } else if (strcmp(month, "Aug") == 0) { + } else if (purple_strequal(month, "Aug")) { tm.tm_mon = 7; - } else if (strcmp(month, "Sep") == 0) { + } else if (purple_strequal(month, "Sep")) { tm.tm_mon = 8; - } else if (strcmp(month, "Oct") == 0) { + } else if (purple_strequal(month, "Oct")) { tm.tm_mon = 9; - } else if (strcmp(month, "Nov") == 0) { + } else if (purple_strequal(month, "Nov")) { tm.tm_mon = 10; - } else if (strcmp(month, "Dec") == 0) { + } else if (purple_strequal(month, "Dec")) { tm.tm_mon = 11; } tm.tm_year -= 1900; @@ -1930,7 +1994,7 @@ static void old_logger_get_log_sets(PurpleLogSetCallback cb, GHashTable *sets) /* Make sure we're dealing with a log file. */ ext = &name[len - 4]; - if (strcmp(ext, ".log")) { + if (!purple_strequal(ext, ".log")) { g_free(name); continue; } @@ -1943,7 +2007,7 @@ static void old_logger_get_log_sets(PurpleLogSetCallback cb, GHashTable *sets) set->type = PURPLE_LOG_IM; if (len > 9) { char *tmp = &name[len - 9]; - if (!strcmp(tmp, ".chat")) { + if (purple_strequal(tmp, ".chat")) { set->type = PURPLE_LOG_CHAT; *tmp = '\0'; } @@ -1952,22 +2016,28 @@ static void old_logger_get_log_sets(PurpleLogSetCallback cb, GHashTable *sets) set->name = set->normalized_name = name; /* Search the buddy list to find the account and to determine if this is a buddy. */ - for (gnode = purple_get_blist()->root; !found && gnode != NULL; gnode = gnode->next) + for (gnode = purple_blist_get_root(); + !found && gnode != NULL; + gnode = purple_blist_node_get_sibling_next(gnode)) { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for (cnode = gnode->child; !found && cnode != NULL; cnode = cnode->next) + for (cnode = purple_blist_node_get_first_child(gnode); + !found && cnode != NULL; + cnode = purple_blist_node_get_sibling_next(cnode)) { if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for (bnode = cnode->child; !found && bnode != NULL; bnode = bnode->next) + for (bnode = purple_blist_node_get_first_child(cnode); + !found && bnode != NULL; + bnode = purple_blist_node_get_sibling_next(bnode)) { PurpleBuddy *buddy = (PurpleBuddy *)bnode; - if (!strcmp(buddy->name, name)) { - set->account = buddy->account; + if (purple_strequal(purple_buddy_get_name(buddy), name)) { + set->account = purple_buddy_get_account(buddy); set->buddy = TRUE; found = TRUE; } diff --git a/libpurple/log.h b/libpurple/log.h index d8a84f3f84..59249b5162 100644 --- a/libpurple/log.h +++ b/libpurple/log.h @@ -194,7 +194,7 @@ extern "C" { * Creates a new log * * @param type The type of log this is. - * @param name The name of this conversation (screenname, chat name, + * @param name The name of this conversation (buddy name, chat name, * etc.) * @param account The account the conversation is occurring on * @param conv The conversation being logged @@ -294,6 +294,19 @@ int purple_log_get_size(PurpleLog *log); int purple_log_get_total_size(PurpleLogType type, const char *name, PurpleAccount *account); /** + * Returns the activity score of a log, based on total size in bytes, + * which is then decayed based on age + * + * @param type The type of the log + * @param name The name of the log + * @param account The account + * @return The activity score + * + * @since 2.6.0 + */ +int purple_log_get_activity_score(PurpleLogType type, const char *name, PurpleAccount *account); + +/** * Tests whether a log is deletable * * A return value of @c FALSE indicates that purple_log_delete() will fail on this diff --git a/libpurple/nat-pmp.c b/libpurple/nat-pmp.c index a3717fbbec..be5bc66222 100644 --- a/libpurple/nat-pmp.c +++ b/libpurple/nat-pmp.c @@ -126,7 +126,7 @@ get_rtaddrs(int bitmask, struct sockaddr *sa, struct sockaddr *addrs[]) for (i = 0; i < RTAX_MAX; i++) { - if (bitmask & (1 << i)) + if (bitmask & (1 << i)) { addrs[i] = sa; #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN @@ -139,7 +139,7 @@ get_rtaddrs(int bitmask, struct sockaddr *sa, struct sockaddr *addrs[]) sa = (struct sockaddr*)(sizeof(struct sockaddr_in6) + (char *)sa); #endif #endif - } + } else { addrs[i] = NULL; @@ -192,7 +192,7 @@ default_gw() mib[5] = 0; /* Determine the buffer side needed to get the full routing table */ - if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) + if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) { purple_debug_warning("nat-pmp", "sysctl: net.route.0.0.dump estimate\n"); return NULL; @@ -205,7 +205,7 @@ default_gw() } /* Read the routing table into buf */ - if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0) + if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0) { purple_debug_warning("nat-pmp", "sysctl: net.route.0.0.dump\n"); return NULL; @@ -213,12 +213,12 @@ default_gw() lim = buf + needed; - for (next = buf; next < lim; next += rtm->rtm_msglen) + for (next = buf; next < lim; next += rtm->rtm_msglen) { rtm = (struct rt_msghdr *)next; sa = (struct sockaddr *)(rtm + 1); - - if (sa->sa_family == AF_INET) + + if (sa->sa_family == AF_INET) { sin = (struct sockaddr_in*) sa; @@ -240,7 +240,7 @@ default_gw() memcpy(&mask, rti_info[RTAX_NETMASK], sizeof(mask)); if (rtm->rtm_addrs & RTA_GATEWAY && - is_default_route(&addr, &mask)) + is_default_route(&addr, &mask)) { if (rti_info[RTAX_GATEWAY]) { struct sockaddr_in *rti_sin = (struct sockaddr_in *)rti_info[RTAX_GATEWAY]; @@ -263,7 +263,7 @@ default_gw() } /*! - * purple_pmp_get_public_ip() will return the publicly facing IP address of the + * purple_pmp_get_public_ip() will return the publicly facing IP address of the * default NAT gateway. The function will return NULL if: * - The gateway doesn't support NAT-PMP * - The gateway errors in some other spectacular fashion @@ -278,10 +278,10 @@ purple_pmp_get_public_ip() PurplePmpIpRequest req; PurplePmpIpResponse resp; int sendfd; - + if (pmp_info.status == PURPLE_PMP_STATUS_UNABLE_TO_DISCOVER) return NULL; - + if ((pmp_info.status == PURPLE_PMP_STATUS_DISCOVERED) && (pmp_info.publicip != NULL)) { #ifdef PMP_DEBUG @@ -318,7 +318,7 @@ purple_pmp_get_public_ip() /* The NAT-PMP spec says we should attempt to contact the gateway 9 times, doubling the time we wait each time. * Even starting with a timeout of 0.1 seconds, that means that we have a total waiting of 204.6 seconds. * With the recommended timeout of 0.25 seconds, we're talking 511.5 seconds (8.5 minutes). - * + * * This seems really silly... if this were nonblocking, a couple retries might be in order, but it's not at present. */ #ifdef PMP_DEBUG @@ -327,7 +327,7 @@ purple_pmp_get_public_ip() #endif /* TODO: Non-blocking! */ - + if (sendto(sendfd, &req, sizeof(req), 0, (struct sockaddr *)(gateway), sizeof(struct sockaddr)) < 0) { purple_debug_info("nat-pmp", "There was an error sending the NAT-PMP public IP request! (%s)\n", g_strerror(errno)); @@ -370,7 +370,7 @@ purple_pmp_get_public_ip() if (!publicsockaddr) { g_free(gateway); - + pmp_info.status = PURPLE_PMP_STATUS_UNABLE_TO_DISCOVER; return NULL; } @@ -437,7 +437,7 @@ purple_pmp_create_map(PurplePmpType type, unsigned short privateport, unsigned s /* The NAT-PMP spec says we should attempt to contact the gateway 9 times, doubling the time we wait each time. * Even starting with a timeout of 0.1 seconds, that means that we have a total waiting of 204.6 seconds. * With the recommended timeout of 0.25 seconds, we're talking 511.5 seconds (8.5 minutes). - * + * * This seems really silly... if this were nonblocking, a couple retries might be in order, but it's not at present. * XXX Make this nonblocking. * XXX This code looks like the pmp_get_public_ip() code. Can it be consolidated? diff --git a/libpurple/network.c b/libpurple/network.c index 508d3c3e13..c9782b6731 100644 --- a/libpurple/network.c +++ b/libpurple/network.c @@ -96,6 +96,10 @@ struct _PurpleNetworkListenData { static NMState nm_get_network_state(void); #endif +#if defined(HAVE_NETWORKMANAGER) || defined(_WIN32) +static gboolean force_online; +#endif + const unsigned char * purple_network_ip_atoi(const char *ip) { @@ -671,6 +675,9 @@ gboolean purple_network_is_available(void) { #ifdef HAVE_NETWORKMANAGER + if (force_online) + return TRUE; + if (!have_nm_state) { have_nm_state = TRUE; @@ -685,12 +692,20 @@ purple_network_is_available(void) return FALSE; #elif defined _WIN32 - return (current_network_count > 0); + return (current_network_count > 0 || force_online); #else return TRUE; #endif } +void +purple_network_force_online() +{ +#if defined(HAVE_NETWORKMANAGER) || defined(_WIN32) + force_online = TRUE; +#endif +} + #ifdef HAVE_NETWORKMANAGER static void nm_update_state(NMState state) diff --git a/libpurple/network.h b/libpurple/network.h index 0ff97c98a9..21b3a0835d 100644 --- a/libpurple/network.h +++ b/libpurple/network.h @@ -208,6 +208,17 @@ unsigned short purple_network_get_port_from_fd(int fd); gboolean purple_network_is_available(void); /** + * Makes purple_network_is_available() always return @c TRUE. + * + * This is what backs the --force-online command line argument in Pidgin, + * for example. This is useful for offline testing, especially when + * combined with nullprpl. + * + * @since 2.6.0 + */ +void purple_network_force_online(void); + +/** * Get the handle for the network system * * @return the handle to the network system diff --git a/libpurple/notify.c b/libpurple/notify.c index 2b51d9f4f2..349521f764 100644 --- a/libpurple/notify.c +++ b/libpurple/notify.c @@ -444,7 +444,7 @@ PurpleNotifyUserInfoEntry * purple_notify_user_info_entry_new(const char *label, const char *value) { PurpleNotifyUserInfoEntry *user_info_entry; - + user_info_entry = g_new0(PurpleNotifyUserInfoEntry, 1); PURPLE_DBUS_REGISTER_POINTER(user_info_entry, PurpleNotifyUserInfoEntry); user_info_entry->label = g_strdup(label); @@ -458,7 +458,7 @@ static void purple_notify_user_info_entry_destroy(PurpleNotifyUserInfoEntry *user_info_entry) { g_return_if_fail(user_info_entry != NULL); - + g_free(user_info_entry->label); g_free(user_info_entry->value); PURPLE_DBUS_UNREGISTER_POINTER(user_info_entry); @@ -469,11 +469,11 @@ PurpleNotifyUserInfo * purple_notify_user_info_new() { PurpleNotifyUserInfo *user_info; - + user_info = g_new0(PurpleNotifyUserInfo, 1); PURPLE_DBUS_REGISTER_POINTER(user_info, PurpleNotifyUserInfo); user_info->user_info_entries = NULL; - + return user_info; } @@ -484,10 +484,10 @@ purple_notify_user_info_destroy(PurpleNotifyUserInfo *user_info) for (l = user_info->user_info_entries; l != NULL; l = l->next) { PurpleNotifyUserInfoEntry *user_info_entry = l->data; - + purple_notify_user_info_entry_destroy(user_info_entry); } - + g_list_free(user_info->user_info_entries); PURPLE_DBUS_UNREGISTER_POINTER(user_info); g_free(user_info); @@ -506,7 +506,7 @@ purple_notify_user_info_get_text_with_newline(PurpleNotifyUserInfo *user_info, c { GList *l; GString *text; - + text = g_string_new(""); for (l = user_info->user_info_entries; l != NULL; l = l->next) { @@ -532,7 +532,7 @@ purple_notify_user_info_get_text_with_newline(PurpleNotifyUserInfo *user_info, c if ((user_info_entry->type != PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_BREAK) && (l->next && ((((PurpleNotifyUserInfoEntry *)(l->next->data))->type != PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_BREAK)))) g_string_append(text, newline); - + /* Add an extra newline after a section header */ if (user_info_entry->type == PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_HEADER) g_string_append(text, newline); @@ -563,7 +563,7 @@ const gchar * purple_notify_user_info_entry_get_value(PurpleNotifyUserInfoEntry *user_info_entry) { g_return_val_if_fail(user_info_entry != NULL, NULL); - + return user_info_entry->value; } @@ -596,7 +596,7 @@ void purple_notify_user_info_add_pair(PurpleNotifyUserInfo *user_info, const char *label, const char *value) { PurpleNotifyUserInfoEntry *entry; - + entry = purple_notify_user_info_entry_new(label, value); user_info->user_info_entries = g_list_append(user_info->user_info_entries, entry); } @@ -623,7 +623,7 @@ void purple_notify_user_info_add_section_header(PurpleNotifyUserInfo *user_info, const char *label) { PurpleNotifyUserInfoEntry *entry; - + entry = purple_notify_user_info_entry_new(label, NULL); entry->type = PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_HEADER; @@ -634,10 +634,10 @@ void purple_notify_user_info_prepend_section_header(PurpleNotifyUserInfo *user_info, const char *label) { PurpleNotifyUserInfoEntry *entry; - + entry = purple_notify_user_info_entry_new(label, NULL); entry->type = PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_HEADER; - + user_info->user_info_entries = g_list_prepend(user_info->user_info_entries, entry); } @@ -645,7 +645,7 @@ void purple_notify_user_info_add_section_break(PurpleNotifyUserInfo *user_info) { PurpleNotifyUserInfoEntry *entry; - + entry = purple_notify_user_info_entry_new(NULL, NULL); entry->type = PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_BREAK; @@ -656,10 +656,10 @@ void purple_notify_user_info_prepend_section_break(PurpleNotifyUserInfo *user_info) { PurpleNotifyUserInfoEntry *entry; - + entry = purple_notify_user_info_entry_new(NULL, NULL); entry->type = PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_BREAK; - + user_info->user_info_entries = g_list_prepend(user_info->user_info_entries, entry); } diff --git a/libpurple/notify.h b/libpurple/notify.h index 3e65a11ea8..d82fe86215 100644 --- a/libpurple/notify.h +++ b/libpurple/notify.h @@ -291,6 +291,7 @@ void purple_notify_searchresults_column_add(PurpleNotifySearchResults *results, */ void purple_notify_searchresults_row_add(PurpleNotifySearchResults *results, GList *row); + #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_NOTIFY_C_) /** * Returns a number of the rows in the search results object. @@ -558,14 +559,21 @@ void purple_notify_user_info_add_pair(PurpleNotifyUserInfo *user_info, const cha */ void purple_notify_user_info_prepend_pair(PurpleNotifyUserInfo *user_info, const char *label, const char *value); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_NOTIFY_C_) /** * Remove a PurpleNotifyUserInfoEntry from a PurpleNotifyUserInfo object * without freeing the entry. * * @param user_info The PurpleNotifyUserInfo * @param user_info_entry The PurpleNotifyUserInfoEntry + * + * @deprecated Nothing is using this function and it should be removed + * in 3.0.0. Or, if we decide we want to keep it in 3.0.0 + * then we should make purple_notify_user_info_entry_destroy + * public so that entries can be free'd after they're removed. */ void purple_notify_user_info_remove_entry(PurpleNotifyUserInfo *user_info, PurpleNotifyUserInfoEntry *user_info_entry); +#endif /** * Create a new PurpleNotifyUserInfoEntry diff --git a/libpurple/ntlm.h b/libpurple/ntlm.h index e8eb18cbe0..e61a4f5f07 100644 --- a/libpurple/ntlm.h +++ b/libpurple/ntlm.h @@ -46,7 +46,7 @@ gchar *purple_ntlm_gen_type1(const gchar *hostname, const gchar *domain); * * @param type2 String containing the base64 encoded type2 message * @param flags If not @c NULL, this will store the flags for the message - * + * * @return The nonce for use in message type3. This is a statically * allocated 8 byte binary string. */ diff --git a/libpurple/plugin.c b/libpurple/plugin.c index 738d42f6bc..b46b09eec4 100644 --- a/libpurple/plugin.c +++ b/libpurple/plugin.c @@ -218,7 +218,7 @@ purple_plugin_probe(const char *filename) g_free(basename); if (plugin != NULL) { - if (!strcmp(filename, plugin->path)) + if (purple_strequal(filename, plugin->path)) return plugin; else if (!purple_plugin_is_unloadable(plugin)) { @@ -357,7 +357,7 @@ purple_plugin_probe(const char *filename) return NULL; } else if (plugin->info->ui_requirement && - strcmp(plugin->info->ui_requirement, purple_core_get_ui())) + !purple_strequal(plugin->info->ui_requirement, purple_core_get_ui())) { plugin->error = g_strdup_printf(_("You are using %s, but this plugin requires %s."), purple_core_get_ui(), plugin->info->ui_requirement); @@ -1538,7 +1538,7 @@ purple_plugins_find_with_name(const char *name) for (l = plugins; l != NULL; l = l->next) { plugin = l->data; - if (!strcmp(plugin->info->name, name)) + if (purple_strequal(plugin->info->name, name)) return plugin; } @@ -1554,7 +1554,7 @@ purple_plugins_find_with_filename(const char *filename) for (l = plugins; l != NULL; l = l->next) { plugin = l->data; - if (plugin->path != NULL && !strcmp(plugin->path, filename)) + if (purple_strequal(plugin->path, filename)) return plugin; } @@ -1577,7 +1577,7 @@ purple_plugins_find_with_basename(const char *basename) if (plugin->path != NULL) { tmp = purple_plugin_get_basename(plugin->path); - if (!strcmp(tmp, basename)) + if (purple_strequal(tmp, basename)) { g_free(tmp); return plugin; @@ -1603,7 +1603,7 @@ purple_plugins_find_with_id(const char *id) { plugin = l->data; - if (plugin->info->id != NULL && !strcmp(plugin->info->id, id)) + if (purple_strequal(plugin->info->id, id)) return plugin; } diff --git a/libpurple/plugin.h b/libpurple/plugin.h index a731a3ba28..6ce6ada8df 100644 --- a/libpurple/plugin.h +++ b/libpurple/plugin.h @@ -188,7 +188,7 @@ struct _PurplePluginAction { /** NULL for plugin actions menu, set to the PurpleConnection for account actions menu */ gpointer context; - + gpointer user_data; }; @@ -363,7 +363,7 @@ const gchar *purple_plugin_get_id(const PurplePlugin *plugin); * Returns a plugin's name. * * @param plugin The plugin. - * + * * @return THe name of the plugin, or @c NULL. */ const gchar *purple_plugin_get_name(const PurplePlugin *plugin); diff --git a/libpurple/plugins/Makefile.mingw b/libpurple/plugins/Makefile.mingw index 5dc4d678c7..b3c80a078b 100644 --- a/libpurple/plugins/Makefile.mingw +++ b/libpurple/plugins/Makefile.mingw @@ -1,7 +1,7 @@ # # Makefile.mingw # -# Description: Makefile for win32 (mingw) version of LibPurple Plugins +# Description: Makefile for win32 (mingw) version of libpurple Plugins # PIDGIN_TREE_TOP := ../.. diff --git a/libpurple/plugins/autoaccept.c b/libpurple/plugins/autoaccept.c index e9f04db0b1..4112c34237 100644 --- a/libpurple/plugins/autoaccept.c +++ b/libpurple/plugins/autoaccept.c @@ -95,7 +95,7 @@ file_recv_request_cb(PurpleXfer *xfer, gpointer handle) char *dirname; account = xfer->account; - node = (PurpleBlistNode *)purple_find_buddy(account, xfer->who); + node = PURPLE_BLIST_NODE(purple_find_buddy(account, xfer->who)); if (!node) { diff --git a/libpurple/plugins/perl/common/BuddyList.xs b/libpurple/plugins/perl/common/BuddyList.xs index 5acb72af21..0f68d872a7 100644 --- a/libpurple/plugins/perl/common/BuddyList.xs +++ b/libpurple/plugins/perl/common/BuddyList.xs @@ -363,9 +363,9 @@ MODULE = Purple::BuddyList PACKAGE = Purple::BuddyList::Buddy PREFIX = purple_ PROTOTYPES: ENABLE Purple::BuddyList::Buddy -purple_buddy_new(account, screenname, alias) +purple_buddy_new(account, name, alias) Purple::Account account - const char *screenname + const char *name const char *alias const char * diff --git a/libpurple/plugins/perl/common/Request.xs b/libpurple/plugins/perl/common/Request.xs index 03ef5bfae6..3ba745c2fc 100644 --- a/libpurple/plugins/perl/common/Request.xs +++ b/libpurple/plugins/perl/common/Request.xs @@ -211,10 +211,11 @@ MODULE = Purple::Request PACKAGE = Purple::Request::Field PREFIX = purple_requ PROTOTYPES: ENABLE Purple::Request::Field -purple_request_field_account_new(id, text, account = NULL) +purple_request_field_account_new(class, id, text, account = NULL) const char *id const char *text Purple::Account account + C_ARGS: id, text, account Purple::Account purple_request_field_account_get_default_value(field) @@ -255,10 +256,11 @@ MODULE = Purple::Request PACKAGE = Purple::Request::Field PREFIX = purple_requ PROTOTYPES: ENABLE Purple::Request::Field -purple_request_field_bool_new(id, text, default_value = TRUE) +purple_request_field_bool_new(class, id, text, default_value = TRUE) const char *id const char *text gboolean default_value + C_ARGS: id, text, default_value gboolean purple_request_field_bool_get_default_value(field) @@ -282,10 +284,11 @@ MODULE = Purple::Request PACKAGE = Purple::Request::Field PREFIX = purple_requ PROTOTYPES: ENABLE Purple::Request::Field -purple_request_field_choice_new(id, text, default_value = 0) +purple_request_field_choice_new(class, id, text, default_value = 0) const char *id const char *text int default_value + C_ARGS: id, text, default_value void purple_request_field_choice_add(field, label) @@ -324,10 +327,11 @@ MODULE = Purple::Request PACKAGE = Purple::Request::Field PREFIX = purple_requ PROTOTYPES: ENABLE Purple::Request::Field -purple_request_field_int_new(id, text, default_value = 0) +purple_request_field_int_new(clas, id, text, default_value = 0) const char *id const char *text int default_value + C_ARGS: id, text, default_value int purple_request_field_int_get_default_value(field) @@ -355,17 +359,19 @@ MODULE = Purple::Request PACKAGE = Purple::Request::Field PREFIX = purple_requ PROTOTYPES: ENABLE Purple::Request::Field -purple_request_field_label_new(id, text) +purple_request_field_label_new(class, id, text) const char *id const char *text + C_ARGS: id, text MODULE = Purple::Request PACKAGE = Purple::Request::Field PREFIX = purple_request_field_ PROTOTYPES: ENABLE Purple::Request::Field -purple_request_field_list_new(id, text) +purple_request_field_list_new(class, id, text) const char *id const char *text + C_ARGS: id, text void purple_request_field_list_add(field, item, data) @@ -425,10 +431,11 @@ MODULE = Purple::Request PACKAGE = Purple::Request::Field PREFIX = purple_requ PROTOTYPES: ENABLE Purple::Request::Field -purple_request_field_new(id, text, type) +purple_request_field_new(class, id, text, type) const char *id const char *text Purple::RequestFieldType type + C_ARGS: id, text, type void purple_request_field_set_label(field, label) @@ -454,11 +461,12 @@ MODULE = Purple::Request PACKAGE = Purple::Request::Field PREFIX = purple_requ PROTOTYPES: ENABLE Purple::Request::Field -purple_request_field_string_new(id, text, default_value, multiline) +purple_request_field_string_new(class, id, text, default_value, multiline) const char *id const char *text const char *default_value gboolean multiline + C_ARGS: id, text, default_value, multiline const char * purple_request_field_string_get_default_value(field) @@ -527,8 +535,9 @@ purple_request_field_group_get_title(group) Purple::Request::Field::Group group Purple::Request::Field::Group -purple_request_field_group_new(title) +purple_request_field_group_new(class, title) const char *title + C_ARGS: title MODULE = Purple::Request PACKAGE = Purple::Request::Field PREFIX = purple_request_field_ PROTOTYPES: ENABLE @@ -561,7 +570,8 @@ MODULE = Purple::Request PACKAGE = Purple::Request::Fields PREFIX = purple_req PROTOTYPES: ENABLE Purple::Request::Fields -purple_request_fields_new() +purple_request_fields_new(class) + C_ARGS: /* void */ void purple_request_fields_add_group(fields, group) diff --git a/libpurple/plugins/ssl/ssl-gnutls.c b/libpurple/plugins/ssl/ssl-gnutls.c index 1f65607bd0..de4908eec1 100644 --- a/libpurple/plugins/ssl/ssl-gnutls.c +++ b/libpurple/plugins/ssl/ssl-gnutls.c @@ -256,9 +256,13 @@ ssl_gnutls_connect(PurpleSslConnection *gsc) gsc->private_data = gnutls_data; gnutls_init(&gnutls_data->session, GNUTLS_CLIENT); +#ifdef HAVE_GNUTLS_PRIORITY_FUNCS if (gnutls_priority_set_direct(gnutls_data->session, "NORMAL:%SSL3_RECORD_VERSION", NULL)) gnutls_priority_set_direct(gnutls_data->session, "NORMAL", NULL); +#else + gnutls_set_default_priority(gnutls_data->session); +#endif gnutls_certificate_type_set_priority(gnutls_data->session, cert_type_priority); diff --git a/libpurple/plugins/statenotify.c b/libpurple/plugins/statenotify.c index 97c15bb896..bfbe595e50 100644 --- a/libpurple/plugins/statenotify.c +++ b/libpurple/plugins/statenotify.c @@ -33,7 +33,7 @@ write_status(PurpleBuddy *buddy, const char *message) g_return_if_fail(conv->type == PURPLE_CONV_TYPE_IM); /* Prevent duplicate notifications for buddies in multiple groups */ - if (buddy != purple_find_buddy(buddy->account, buddy->name)) + if (buddy != purple_find_buddy(account, buddy_name)) return; who = purple_buddy_get_alias(buddy); diff --git a/libpurple/plugins/tcl/tcl_cmds.c b/libpurple/plugins/tcl/tcl_cmds.c index 222f05e08e..53af8595ef 100644 --- a/libpurple/plugins/tcl/tcl_cmds.c +++ b/libpurple/plugins/tcl/tcl_cmds.c @@ -401,9 +401,9 @@ static PurpleBlistNode *tcl_list_to_buddy(Tcl_Interp *interp, int count, Tcl_Obj return NULL; if (!strcmp(type, "buddy")) { - node = (PurpleBlistNode *)purple_find_buddy(account, name); + node = PURPLE_BLIST_NODE(purple_find_buddy(account, name)); } else if (!strcmp(type, "group")) { - node = (PurpleBlistNode *)purple_blist_find_chat(account, name); + node = PURPLE_BLIST_NODE(purple_blist_find_chat(account, name)); } return node; @@ -1495,9 +1495,12 @@ int tcl_cmd_status(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CON enum { CMD_STATUS_ATTR, CMD_STATUS_TYPE } cmd; PurpleStatus *status; PurpleStatusType *status_type; + int error; +#if !(defined PURPLE_DISABLE_DEPRECATED) PurpleValue *value; const char *attr; - int error, v; + int v; +#endif if (objc < 2) { Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?"); @@ -1509,6 +1512,7 @@ int tcl_cmd_status(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CON switch (cmd) { case CMD_STATUS_ATTR: +#if !(defined PURPLE_DISABLE_DEPRECATED) if (objc != 4 && objc != 5) { Tcl_WrongNumArgs(interp, 2, objv, "status attr_id ?value?"); return TCL_ERROR; @@ -1554,6 +1558,7 @@ int tcl_cmd_status(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CON Tcl_NewStringObj("attribute has unknown type", -1)); return TCL_ERROR; } +#endif break; case CMD_STATUS_TYPE: if (objc != 3) { @@ -1727,6 +1732,7 @@ int tcl_cmd_status_type(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj (purple_status_type_get_primitive(status_type)), -1)); break; case CMD_STATUS_TYPE_PRIMARY_ATTR: +#if !(defined PURPLE_DISABLE_DEPRECATED) if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "statustype"); return TCL_ERROR; @@ -1735,6 +1741,7 @@ int tcl_cmd_status_type(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj return TCL_ERROR; Tcl_SetObjResult(interp, Tcl_NewStringObj(purple_status_type_get_primary_attr(status_type), -1)); +#endif break; case CMD_STATUS_TYPE_SAVEABLE: if (objc != 3) { diff --git a/libpurple/pounce.c b/libpurple/pounce.c index 0f6e547abc..2d668c735e 100644 --- a/libpurple/pounce.c +++ b/libpurple/pounce.c @@ -326,7 +326,7 @@ start_element_handler(GMarkupParseContext *context, data->buffer = NULL; } - if (!strcmp(element_name, "pounce")) { + if (purple_strequal(element_name, "pounce")) { const char *ui = g_hash_table_lookup(atts, "ui"); if (ui == NULL) { @@ -338,7 +338,7 @@ start_element_handler(GMarkupParseContext *context, data->events = 0; } - else if (!strcmp(element_name, "account")) { + else if (purple_strequal(element_name, "account")) { const char *protocol_id = g_hash_table_lookup(atts, "protocol"); if (protocol_id == NULL) { @@ -348,7 +348,7 @@ start_element_handler(GMarkupParseContext *context, else data->protocol_id = g_strdup(protocol_id); } - else if (!strcmp(element_name, "option")) { + else if (purple_strequal(element_name, "option")) { const char *type = g_hash_table_lookup(atts, "type"); if (type == NULL) { @@ -358,7 +358,7 @@ start_element_handler(GMarkupParseContext *context, else data->option_type = g_strdup(type); } - else if (!strcmp(element_name, "event")) { + else if (purple_strequal(element_name, "event")) { const char *type = g_hash_table_lookup(atts, "type"); if (type == NULL) { @@ -368,7 +368,7 @@ start_element_handler(GMarkupParseContext *context, else data->event_type = g_strdup(type); } - else if (!strcmp(element_name, "action")) { + else if (purple_strequal(element_name, "action")) { const char *type = g_hash_table_lookup(atts, "type"); if (type == NULL) { @@ -378,7 +378,7 @@ start_element_handler(GMarkupParseContext *context, else data->action_name = g_strdup(type); } - else if (!strcmp(element_name, "param")) { + else if (purple_strequal(element_name, "param")) { const char *param_name = g_hash_table_lookup(atts, "name"); if (param_name == NULL) { @@ -404,7 +404,7 @@ end_element_handler(GMarkupParseContext *context, const gchar *element_name, data->buffer = NULL; } - if (!strcmp(element_name, "account")) { + if (purple_strequal(element_name, "account")) { char *tmp; g_free(data->account_name); data->account_name = g_strdup(buffer); @@ -412,43 +412,43 @@ end_element_handler(GMarkupParseContext *context, const gchar *element_name, data->protocol_id = g_strdup(_purple_oscar_convert(buffer, tmp)); g_free(tmp); } - else if (!strcmp(element_name, "pouncee")) { + else if (purple_strequal(element_name, "pouncee")) { g_free(data->pouncee); data->pouncee = g_strdup(buffer); } - else if (!strcmp(element_name, "option")) { - if (!strcmp(data->option_type, "on-away")) + else if (purple_strequal(element_name, "option")) { + if (purple_strequal(data->option_type, "on-away")) data->options |= PURPLE_POUNCE_OPTION_AWAY; g_free(data->option_type); data->option_type = NULL; } - else if (!strcmp(element_name, "event")) { - if (!strcmp(data->event_type, "sign-on")) + else if (purple_strequal(element_name, "event")) { + if (purple_strequal(data->event_type, "sign-on")) data->events |= PURPLE_POUNCE_SIGNON; - else if (!strcmp(data->event_type, "sign-off")) + else if (purple_strequal(data->event_type, "sign-off")) data->events |= PURPLE_POUNCE_SIGNOFF; - else if (!strcmp(data->event_type, "away")) + else if (purple_strequal(data->event_type, "away")) data->events |= PURPLE_POUNCE_AWAY; - else if (!strcmp(data->event_type, "return-from-away")) + else if (purple_strequal(data->event_type, "return-from-away")) data->events |= PURPLE_POUNCE_AWAY_RETURN; - else if (!strcmp(data->event_type, "idle")) + else if (purple_strequal(data->event_type, "idle")) data->events |= PURPLE_POUNCE_IDLE; - else if (!strcmp(data->event_type, "return-from-idle")) + else if (purple_strequal(data->event_type, "return-from-idle")) data->events |= PURPLE_POUNCE_IDLE_RETURN; - else if (!strcmp(data->event_type, "start-typing")) + else if (purple_strequal(data->event_type, "start-typing")) data->events |= PURPLE_POUNCE_TYPING; - else if (!strcmp(data->event_type, "typed")) + else if (purple_strequal(data->event_type, "typed")) data->events |= PURPLE_POUNCE_TYPED; - else if (!strcmp(data->event_type, "stop-typing")) + else if (purple_strequal(data->event_type, "stop-typing")) data->events |= PURPLE_POUNCE_TYPING_STOPPED; - else if (!strcmp(data->event_type, "message-received")) + else if (purple_strequal(data->event_type, "message-received")) data->events |= PURPLE_POUNCE_MESSAGE_RECEIVED; g_free(data->event_type); data->event_type = NULL; } - else if (!strcmp(element_name, "action")) { + else if (purple_strequal(element_name, "action")) { if (data->pounce != NULL) { purple_pounce_action_register(data->pounce, data->action_name); purple_pounce_action_set_enabled(data->pounce, data->action_name, TRUE); @@ -457,7 +457,7 @@ end_element_handler(GMarkupParseContext *context, const gchar *element_name, g_free(data->action_name); data->action_name = NULL; } - else if (!strcmp(element_name, "param")) { + else if (purple_strequal(element_name, "param")) { if (data->pounce != NULL) { purple_pounce_action_set_attribute(data->pounce, data->action_name, data->param_name, buffer); @@ -466,7 +466,7 @@ end_element_handler(GMarkupParseContext *context, const gchar *element_name, g_free(data->param_name); data->param_name = NULL; } - else if (!strcmp(element_name, "events")) { + else if (purple_strequal(element_name, "events")) { PurpleAccount *account; account = purple_accounts_find(data->account_name, data->protocol_id); @@ -499,11 +499,11 @@ end_element_handler(GMarkupParseContext *context, const gchar *element_name, g_free(data->pouncee); data->pouncee = NULL; } - else if (!strcmp(element_name, "save")) { + else if (purple_strequal(element_name, "save")) { if (data->pounce != NULL) purple_pounce_set_save(data->pounce, TRUE); } - else if (!strcmp(element_name, "pounce")) { + else if (purple_strequal(element_name, "pounce")) { data->pounce = NULL; data->events = 0; data->options = 0; @@ -1023,7 +1023,7 @@ GList *purple_pounces_get_all_for_ui(const char *ui) for (iter = pounces; iter; iter = iter->next) { PurplePounce *pounce = iter->data; - if (pounce->ui_type && strcmp(pounce->ui_type, ui) == 0) + if (purple_strequal(pounce->ui_type, ui)) list = g_list_prepend(list, pounce); } list = g_list_reverse(list); @@ -1042,35 +1042,39 @@ free_pounce_handler(gpointer user_data) static void buddy_state_cb(PurpleBuddy *buddy, PurplePounceEvent event) { - purple_pounce_execute(buddy->account, buddy->name, event); + PurpleAccount *account = purple_buddy_get_account(buddy); + const gchar *name = purple_buddy_get_name(buddy); + + purple_pounce_execute(account, name, event); } static void buddy_status_changed_cb(PurpleBuddy *buddy, PurpleStatus *old_status, PurpleStatus *status) { + PurpleAccount *account = purple_buddy_get_account(buddy); + const gchar *name = purple_buddy_get_name(buddy); gboolean old_available, available; available = purple_status_is_available(status); old_available = purple_status_is_available(old_status); if (available && !old_available) - purple_pounce_execute(buddy->account, buddy->name, - PURPLE_POUNCE_AWAY_RETURN); + purple_pounce_execute(account, name, PURPLE_POUNCE_AWAY_RETURN); else if (!available && old_available) - purple_pounce_execute(buddy->account, buddy->name, - PURPLE_POUNCE_AWAY); + purple_pounce_execute(account, name, PURPLE_POUNCE_AWAY); } static void buddy_idle_changed_cb(PurpleBuddy *buddy, gboolean old_idle, gboolean idle) { + PurpleAccount *account = purple_buddy_get_account(buddy); + const gchar *name = purple_buddy_get_name(buddy); + if (idle && !old_idle) - purple_pounce_execute(buddy->account, buddy->name, - PURPLE_POUNCE_IDLE); + purple_pounce_execute(account, name, PURPLE_POUNCE_IDLE); else if (!idle && old_idle) - purple_pounce_execute(buddy->account, buddy->name, - PURPLE_POUNCE_IDLE_RETURN); + purple_pounce_execute(account, name, PURPLE_POUNCE_IDLE_RETURN); } static void diff --git a/libpurple/prefs.c b/libpurple/prefs.c index b95d2be610..162045c7be 100644 --- a/libpurple/prefs.c +++ b/libpurple/prefs.c @@ -250,33 +250,34 @@ prefs_start_element_handler (GMarkupParseContext *context, GString *pref_name_full; GList *tmp; - if(strcmp(element_name, "pref") && strcmp(element_name, "item")) + if(!purple_strequal(element_name, "pref") && + !purple_strequal(element_name, "item")) return; for(i = 0; attribute_names[i]; i++) { - if(!strcmp(attribute_names[i], "name")) { + if(purple_strequal(attribute_names[i], "name")) { pref_name = attribute_values[i]; - } else if(!strcmp(attribute_names[i], "type")) { - if(!strcmp(attribute_values[i], "bool")) + } else if(purple_strequal(attribute_names[i], "type")) { + if(purple_strequal(attribute_values[i], "bool")) pref_type = PURPLE_PREF_BOOLEAN; - else if(!strcmp(attribute_values[i], "int")) + else if(purple_strequal(attribute_values[i], "int")) pref_type = PURPLE_PREF_INT; - else if(!strcmp(attribute_values[i], "string")) + else if(purple_strequal(attribute_values[i], "string")) pref_type = PURPLE_PREF_STRING; - else if(!strcmp(attribute_values[i], "stringlist")) + else if(purple_strequal(attribute_values[i], "stringlist")) pref_type = PURPLE_PREF_STRING_LIST; - else if(!strcmp(attribute_values[i], "path")) + else if(purple_strequal(attribute_values[i], "path")) pref_type = PURPLE_PREF_PATH; - else if(!strcmp(attribute_values[i], "pathlist")) + else if(purple_strequal(attribute_values[i], "pathlist")) pref_type = PURPLE_PREF_PATH_LIST; else return; - } else if(!strcmp(attribute_names[i], "value")) { + } else if(purple_strequal(attribute_names[i], "value")) { pref_value = attribute_values[i]; } } - if(!strcmp(element_name, "item")) { + if(purple_strequal(element_name, "item")) { struct purple_pref *pref; pref_name_full = g_string_new(""); @@ -301,7 +302,7 @@ prefs_start_element_handler (GMarkupParseContext *context, } else { char *decoded; - if(!pref_name || !strcmp(pref_name, "/")) + if(!pref_name || purple_strequal(pref_name, "/")) return; pref_name_full = g_string_new(pref_name); @@ -352,7 +353,7 @@ prefs_end_element_handler(GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error) { - if(prefs_stack && !strcmp(element_name, "pref")) { + if(prefs_stack && purple_strequal(element_name, "pref")) { g_free(prefs_stack->data); prefs_stack = g_list_delete_link(prefs_stack, prefs_stack); } @@ -521,7 +522,7 @@ find_pref_parent(const char *name) char *parent_name = get_path_dirname(name); struct purple_pref *ret = &prefs; - if(strcmp(parent_name, "/")) { + if(!purple_strequal(parent_name, "/")) { ret = find_pref(parent_name); } @@ -571,7 +572,7 @@ add_pref(PurplePrefType type, const char *name) my_name = get_path_basename(name); for(sibling = parent->first_child; sibling; sibling = sibling->sibling) { - if(!strcmp(sibling->name, my_name)) { + if(purple_strequal(sibling->name, my_name)) { g_free(my_name); return NULL; } @@ -849,10 +850,7 @@ purple_prefs_set_string(const char *name, const char *value) return; } - if((value && !pref->value.string) || - (!value && pref->value.string) || - (value && pref->value.string && - strcmp(pref->value.string, value))) { + if (!purple_strequal(pref->value.string, value)) { g_free(pref->value.string); pref->value.string = g_strdup(value); do_callbacks(name, pref); @@ -909,10 +907,7 @@ purple_prefs_set_path(const char *name, const char *value) return; } - if((value && !pref->value.string) || - (!value && pref->value.string) || - (value && pref->value.string && - strcmp(pref->value.string, value))) { + if (!purple_strequal(pref->value.string, value)) { g_free(pref->value.string); pref->value.string = g_strdup(value); do_callbacks(name, pref); @@ -1106,7 +1101,7 @@ purple_prefs_rename_node(struct purple_pref *oldpref, struct purple_pref *newpre next = child->sibling; for(newchild = newpref->first_child; newchild != NULL; newchild = newchild->sibling) { - if(!strcmp(child->name, newchild->name)) + if(purple_strequal(child->name, newchild->name)) { purple_prefs_rename_node(child, newchild); break; diff --git a/libpurple/prefs.h b/libpurple/prefs.h index aafa0cd599..3129719c08 100644 --- a/libpurple/prefs.h +++ b/libpurple/prefs.h @@ -67,8 +67,8 @@ extern "C" { #endif /**************************************************************************/ -/** @name Prefs API - Preferences are named according to a directory-like structure. +/** @name Prefs API + Preferences are named according to a directory-like structure. Example: "/plugins/core/potato/is_from_idaho" (probably a boolean) */ /**************************************************************************/ /*@{*/ diff --git a/libpurple/privacy.c b/libpurple/privacy.c index 78accc4553..bbb5e017fe 100644 --- a/libpurple/privacy.c +++ b/libpurple/privacy.c @@ -232,8 +232,10 @@ add_all_buddies_to_permit_list(PurpleAccount *account, gboolean local) while (list != NULL) { PurpleBuddy *buddy = list->data; - if (!g_slist_find_custom(account->permit, buddy->name, (GCompareFunc)g_utf8_collate)) - purple_privacy_permit_add(account, buddy->name, local); + const gchar *name = purple_buddy_get_name(buddy); + + if (!g_slist_find_custom(account->permit, name, (GCompareFunc)g_utf8_collate)) + purple_privacy_permit_add(account, name, local); list = g_slist_delete_link(list, list); } } @@ -267,7 +269,7 @@ purple_privacy_allow(PurpleAccount *account, const char *who, gboolean local, for (list = account->permit; list != NULL;) { char *person = list->data; list = list->next; - if (strcmp(norm, person) != 0) + if (!purple_strequal(norm, person)) purple_privacy_permit_remove(account, person, local); } } @@ -311,7 +313,7 @@ purple_privacy_deny(PurpleAccount *account, const char *who, gboolean local, for (list = account->deny; list != NULL; ) { char *person = list->data; list = list->next; - if (strcmp(norm, person) != 0) + if (!purple_strequal(norm, person)) purple_privacy_deny_remove(account, person, local); } } diff --git a/libpurple/privacy.h b/libpurple/privacy.h index 7caeb45e0f..2911758fc3 100644 --- a/libpurple/privacy.h +++ b/libpurple/privacy.h @@ -125,7 +125,7 @@ gboolean purple_privacy_deny_remove(PurpleAccount *account, const char *name, * changed to PURPLE_PRIVACY_ALLOW_USERS, all the * buddies are added to the allow-list, and the * user is also added to the allow-list. - * + * * @param account The account. * @param who The name of the user. * @param local Whether the change is local-only. diff --git a/libpurple/protocols/Makefile.mingw b/libpurple/protocols/Makefile.mingw index 602758f5f5..5cda7fee31 100644 --- a/libpurple/protocols/Makefile.mingw +++ b/libpurple/protocols/Makefile.mingw @@ -2,7 +2,7 @@ # # Author: hermanator12002@yahoo.com # Date 9/11/02 -# Description: Protocols Makefile for win32 (mingw) port of LibPurple +# Description: Protocols Makefile for win32 (mingw) port of libpurple # PIDGIN_TREE_TOP := ../.. diff --git a/libpurple/protocols/bonjour/bonjour.c b/libpurple/protocols/bonjour/bonjour.c index 8456ffb7e3..f053940186 100644 --- a/libpurple/protocols/bonjour/bonjour.c +++ b/libpurple/protocols/bonjour/bonjour.c @@ -261,9 +261,10 @@ bonjour_fake_add_buddy(PurpleConnection *pc, PurpleBuddy *buddy, PurpleGroup *gr static void bonjour_remove_buddy(PurpleConnection *pc, PurpleBuddy *buddy, PurpleGroup *group) { - if (buddy->proto_data) { - bonjour_buddy_delete(buddy->proto_data); - buddy->proto_data = NULL; + BonjourBuddy *bb = purple_buddy_get_protocol_data(buddy); + if (bb) { + bonjour_buddy_delete(bb); + purple_buddy_set_protocol_data(buddy, NULL); } } @@ -303,7 +304,7 @@ bonjour_convo_closed(PurpleConnection *connection, const char *who) PurpleBuddy *buddy = purple_find_buddy(connection->account, who); BonjourBuddy *bb; - if (buddy == NULL || buddy->proto_data == NULL) + if (buddy == NULL || (bb = purple_buddy_get_protocol_data(buddy)) == NULL) { /* * This buddy is not in our buddy list, and therefore does not really @@ -312,7 +313,6 @@ bonjour_convo_closed(PurpleConnection *connection, const char *who) return; } - bb = buddy->proto_data; bonjour_jabber_close_conversation(bb->conversation); bb->conversation = NULL; } @@ -351,7 +351,7 @@ bonjour_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, gboole { PurplePresence *presence; PurpleStatus *status; - BonjourBuddy *bb = buddy->proto_data; + BonjourBuddy *bb = purple_buddy_get_protocol_data(buddy); const char *status_description; const char *message; @@ -417,8 +417,7 @@ bonjour_can_receive_file(PurpleConnection *connection, const char *who) { PurpleBuddy *buddy = purple_find_buddy(connection->account, who); - return (buddy != NULL && buddy->proto_data != NULL); - + return (buddy != NULL && purple_buddy_get_protocol_data(buddy) != NULL); } static gboolean diff --git a/libpurple/protocols/bonjour/bonjour_ft.c b/libpurple/protocols/bonjour/bonjour_ft.c index effc93163b..93b9f1fe01 100644 --- a/libpurple/protocols/bonjour/bonjour_ft.c +++ b/libpurple/protocols/bonjour/bonjour_ft.c @@ -386,10 +386,9 @@ bonjour_xfer_init(PurpleXfer *xfer) buddy = purple_find_buddy(xfer->account, xfer->who); /* this buddy is offline. */ - if (buddy == NULL || buddy->proto_data == NULL) + if (buddy == NULL || (bb = purple_buddy_get_protocol_data(buddy)) == NULL) return; - bb = (BonjourBuddy *)buddy->proto_data; /* Assume it is the first IP. We could do something like keep track of which one is in use or something. */ if (bb->ips) xf->buddy_ip = g_strdup(bb->ips->data); @@ -410,6 +409,7 @@ xep_si_parse(PurpleConnection *pc, xmlnode *packet, PurpleBuddy *pb) const char *type, *id; BonjourData *bd; PurpleXfer *xfer; + const gchar *name = NULL; g_return_if_fail(pc != NULL); g_return_if_fail(packet != NULL); @@ -421,6 +421,8 @@ xep_si_parse(PurpleConnection *pc, xmlnode *packet, PurpleBuddy *pb) purple_debug_info("bonjour", "xep-si-parse.\n"); + name = purple_buddy_get_name(pb); + type = xmlnode_get_attrib(packet, "type"); id = xmlnode_get_attrib(packet, "id"); if(type) { @@ -448,31 +450,34 @@ xep_si_parse(PurpleConnection *pc, xmlnode *packet, PurpleBuddy *pb) /* TODO: Make sure that it is advertising a bytestreams transfer */ - bonjour_xfer_receive(pc, id, sid, pb->name, filesize, filename, XEP_BYTESTREAMS); + bonjour_xfer_receive(pc, id, sid, name, filesize, filename, XEP_BYTESTREAMS); parsed_receive = TRUE; } if (!parsed_receive) { + BonjourData *bd = purple_connection_get_protocol_data(pc); + purple_debug_info("bonjour", "rejecting unrecognized si SET offer.\n"); - xep_ft_si_reject((BonjourData *)pc->proto_data, id, pb->name, "403", "cancel"); + xep_ft_si_reject(bd, id, name, "403", "cancel"); /*TODO: Send Cancel (501) */ } } else if(!strcmp(type, "result")) { purple_debug_info("bonjour", "si offer Message type - RESULT.\n"); - xfer = bonjour_si_xfer_find(bd, id, pb->name); + xfer = bonjour_si_xfer_find(bd, id, name); if(xfer == NULL) { + BonjourData *bd = purple_connection_get_protocol_data(pc); purple_debug_info("bonjour", "xfer find fail.\n"); - xep_ft_si_reject((BonjourData *)pc->proto_data, id, pb->name, "403", "cancel"); + xep_ft_si_reject(bd, id, name, "403", "cancel"); } else bonjour_bytestreams_init(xfer); } else if(!strcmp(type, "error")) { purple_debug_info("bonjour", "si offer Message type - ERROR.\n"); - xfer = bonjour_si_xfer_find(bd, id, pb->name); + xfer = bonjour_si_xfer_find(bd, id, name); if(xfer == NULL) purple_debug_info("bonjour", "xfer find fail.\n"); @@ -501,7 +506,7 @@ xep_bytestreams_parse(PurpleConnection *pc, xmlnode *packet, PurpleBuddy *pb) purple_debug_info("bonjour", "xep-bytestreams-parse.\n"); type = xmlnode_get_attrib(packet, "type"); - from = pb->name; + from = purple_buddy_get_name(pb); query = xmlnode_get_child(packet,"query"); if(type) { if(!strcmp(type, "set")) { @@ -841,8 +846,10 @@ bonjour_bytestreams_connect_cb(gpointer data, gint source, const gchar *error_me static void bonjour_bytestreams_connect(PurpleXfer *xfer, PurpleBuddy *pb) { + PurpleAccount *account = NULL; XepXfer *xf; char dstaddr[41]; + const gchar *name = NULL; unsigned char hashval[20]; char *p; int i; @@ -856,7 +863,10 @@ bonjour_bytestreams_connect(PurpleXfer *xfer, PurpleBuddy *pb) if(!xf) return; - p = g_strdup_printf("%s%s%s", xf->sid, pb->name, purple_account_get_username(pb->account)); + name = purple_buddy_get_name(pb); + account = purple_buddy_get_account(pb); + + p = g_strdup_printf("%s%s%s", xf->sid, name, purple_account_get_username(account)); purple_cipher_digest_region("sha1", (guchar *)p, strlen(p), sizeof(hashval), hashval, NULL); g_free(p); diff --git a/libpurple/protocols/bonjour/buddy.c b/libpurple/protocols/bonjour/buddy.c index edc40fa2d3..890a7e1b09 100644 --- a/libpurple/protocols/bonjour/buddy.c +++ b/libpurple/protocols/bonjour/buddy.c @@ -157,8 +157,8 @@ bonjour_buddy_add_to_purple(BonjourBuddy *bonjour_buddy, PurpleBuddy *buddy) purple_blist_add_buddy(buddy, NULL, group, NULL); } - buddy->proto_data = bonjour_buddy; name = purple_buddy_get_name(buddy); + purple_buddy_set_protocol_data(buddy, bonjour_buddy); /* Create the alias for the buddy using the first and the last name */ if (bonjour_buddy->nick && *bonjour_buddy->nick) @@ -210,8 +210,8 @@ void bonjour_buddy_signed_off(PurpleBuddy *pb) { if (PURPLE_BLIST_NODE_SHOULD_SAVE(pb)) { purple_prpl_got_user_status(purple_buddy_get_account(pb), purple_buddy_get_name(pb), "offline", NULL); - bonjour_buddy_delete(pb->proto_data); - pb->proto_data = NULL; + bonjour_buddy_delete(purple_buddy_get_protocol_data(pb)); + purple_buddy_set_protocol_data(pb, NULL); } else { purple_account_remove_buddy(purple_buddy_get_account(pb), pb, NULL); purple_blist_remove_buddy(pb); diff --git a/libpurple/protocols/bonjour/jabber.c b/libpurple/protocols/bonjour/jabber.c index 51a809c877..3ee7dd54dc 100644 --- a/libpurple/protocols/bonjour/jabber.c +++ b/libpurple/protocols/bonjour/jabber.c @@ -240,17 +240,21 @@ static void _match_buddies_by_address(gpointer key, gpointer value, gpointer data) { PurpleBuddy *pb = value; + PurpleAccount *account = NULL; + BonjourBuddy *bb = NULL; struct _match_buddies_by_address_t *mbba = data; + account = purple_buddy_get_account(pb); + bb = purple_buddy_get_protocol_data(pb); + /* * If the current PurpleBuddy's data is not null and the PurpleBuddy's account * is the same as the account requesting the check then continue to determine * whether one of the buddies IPs matches the target IP. */ - if (mbba->jdata->account == pb->account && pb->proto_data != NULL) + if (mbba->jdata->account == account && bb != NULL) { const char *ip; - BonjourBuddy *bb = pb->proto_data; GSList *tmp = bb->ips; while(tmp) { @@ -268,7 +272,7 @@ static void _send_data_write_cb(gpointer data, gint source, PurpleInputCondition cond) { PurpleBuddy *pb = data; - BonjourBuddy *bb = pb->proto_data; + BonjourBuddy *bb = purple_buddy_get_protocol_data(pb); BonjourJabberConversation *bconv = bb->conversation; int ret, writelen; @@ -285,13 +289,16 @@ _send_data_write_cb(gpointer data, gint source, PurpleInputCondition cond) if (ret < 0 && errno == EAGAIN) return; else if (ret <= 0) { - PurpleConversation *conv; + PurpleConversation *conv = NULL; + PurpleAccount *account = NULL; const char *error = g_strerror(errno); purple_debug_error("bonjour", "Error sending message to buddy %s error: %s\n", purple_buddy_get_name(pb), error ? error : "(null)"); - conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, pb->account); + account = purple_buddy_get_account(pb); + + conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, account); if (conv != NULL) purple_conversation_write(conv, NULL, _("Unable to send message."), @@ -310,7 +317,7 @@ _send_data(PurpleBuddy *pb, char *message) { gint ret; int len = strlen(message); - BonjourBuddy *bb = pb->proto_data; + BonjourBuddy *bb = purple_buddy_get_protocol_data(pb); BonjourJabberConversation *bconv = bb->conversation; /* If we're not ready to actually send, append it to the buffer */ @@ -329,12 +336,15 @@ _send_data(PurpleBuddy *pb, char *message) ret = 0; else if (ret <= 0) { PurpleConversation *conv; + PurpleAccount *account; const char *error = g_strerror(errno); purple_debug_error("bonjour", "Error sending message to buddy %s error: %s\n", purple_buddy_get_name(pb), error ? error : "(null)"); - conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, pb->account); + account = purple_buddy_get_account(pb); + + conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, account); if (conv != NULL) purple_conversation_write(conv, NULL, _("Unable to send message."), @@ -373,11 +383,12 @@ static void bonjour_jabber_stream_ended(BonjourJabberConversation *bconv) { /* Inform the user that the conversation has been closed */ BonjourBuddy *bb = NULL; + const gchar *name = bconv->pb ? purple_buddy_get_name(bconv->pb) : "(unknown)"; - purple_debug_info("bonjour", "Recieved conversation close notification from %s.\n", bconv->pb ? bconv->pb->name : "(unknown)"); + purple_debug_info("bonjour", "Recieved conversation close notification from %s.\n", name); if(bconv->pb != NULL) - bb = bconv->pb->proto_data; + bb = purple_buddy_get_protocol_data(bconv->pb); #if 0 if(bconv->pb != NULL) { PurpleConversation *conv; @@ -411,9 +422,11 @@ _client_socket_handler(gpointer data, gint socket, PurpleInputCondition conditio purple_debug_warning("bonjour", "receive error: %s\n", err ? err : "(null)"); bonjour_jabber_close_conversation(bconv); - if (bconv->pb != NULL && bconv->pb->proto_data != NULL) { - BonjourBuddy *bb = bconv->pb->proto_data; - bb->conversation = NULL; + if (bconv->pb != NULL) { + BonjourBuddy *bb = purple_buddy_get_protocol_data(bconv->pb); + + if(bb != NULL) + bb->conversation = NULL; } /* I guess we really don't need to notify the user. @@ -421,7 +434,8 @@ _client_socket_handler(gpointer data, gint socket, PurpleInputCondition conditio } return; } else if (len == 0) { /* The other end has closed the socket */ - purple_debug_warning("bonjour", "Connection closed (without stream end) by %s.\n", (bconv->pb && bconv->pb->name) ? bconv->pb->name : "(unknown)"); + const gchar *name = purple_buddy_get_name(bconv->pb); + purple_debug_warning("bonjour", "Connection closed (without stream end) by %s.\n", (name) ? name : "(unknown)"); bonjour_jabber_stream_ended(bconv); return; } else { @@ -465,7 +479,7 @@ _start_stream(gpointer data, gint source, PurpleInputCondition condition) BonjourBuddy *bb = NULL; if(bconv->pb) { - bb = bconv->pb->proto_data; + bb = purple_buddy_get_protocol_data(bconv->pb); bname = purple_buddy_get_name(bconv->pb); } @@ -644,7 +658,7 @@ _server_socket_handler(gpointer data, int server_socket, PurpleInputCondition co mbba = g_new0(struct _match_buddies_by_address_t, 1); mbba->address = address_text; mbba->jdata = jdata; - g_hash_table_foreach(purple_get_blist()->buddies, _match_buddies_by_address, mbba); + g_hash_table_foreach(purple_blist_get_buddies(), _match_buddies_by_address, mbba); if (mbba->matched_buddies == NULL) { purple_debug_info("bonjour", "We don't like invisible buddies, this is not a superheros comic\n"); @@ -729,17 +743,20 @@ static void _connected_to_buddy(gpointer data, gint source, const gchar *error) { PurpleBuddy *pb = data; - BonjourBuddy *bb = pb->proto_data; + BonjourBuddy *bb = purple_buddy_get_protocol_data(pb); bb->conversation->connect_data = NULL; if (source < 0) { - PurpleConversation *conv; + PurpleConversation *conv = NULL; + PurpleAccount *account = NULL; purple_debug_error("bonjour", "Error connecting to buddy %s at %s:%d error: %s\n", purple_buddy_get_name(pb), bb->conversation->ip, bb->port_p2pj, error ? error : "(null)"); - conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, pb->account); + account = purple_buddy_get_account(pb); + + conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, account); if (conv != NULL) purple_conversation_write(conv, NULL, _("Unable to send the message, the conversation couldn't be started."), @@ -752,12 +769,15 @@ _connected_to_buddy(gpointer data, gint source, const gchar *error) if (!bonjour_jabber_send_stream_init(bb->conversation, source)) { const char *err = g_strerror(errno); - PurpleConversation *conv; + PurpleConversation *conv = NULL; + PurpleAccount *account = NULL; purple_debug_error("bonjour", "Error starting stream with buddy %s at %s:%d error: %s\n", purple_buddy_get_name(pb), bb->conversation->ip, bb->port_p2pj, err ? err : "(null)"); - conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, pb->account); + account = purple_buddy_get_account(pb); + + conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, account); if (conv != NULL) purple_conversation_write(conv, NULL, _("Unable to send the message, the conversation couldn't be started."), @@ -777,14 +797,14 @@ _connected_to_buddy(gpointer data, gint source, const gchar *error) void bonjour_jabber_conv_match_by_name(BonjourJabberConversation *bconv) { - PurpleBuddy *pb; + PurpleBuddy *pb = NULL; + BonjourBuddy *bb = NULL; g_return_if_fail(bconv->ip != NULL); g_return_if_fail(bconv->pb == NULL); pb = purple_find_buddy(bconv->account, bconv->buddy_name); - if (pb && pb->proto_data) { - BonjourBuddy *bb = pb->proto_data; + if (pb && (bb = purple_buddy_get_protocol_data(pb))) { const char *ip; GSList *tmp = bb->ips; @@ -834,7 +854,7 @@ bonjour_jabber_conv_match_by_ip(BonjourJabberConversation *bconv) { mbba = g_new0(struct _match_buddies_by_address_t, 1); mbba->address = bconv->ip; mbba->jdata = jdata; - g_hash_table_foreach(purple_get_blist()->buddies, _match_buddies_by_address, mbba); + g_hash_table_foreach(purple_blist_get_buddies(), _match_buddies_by_address, mbba); /* If there is exactly one match, use it */ if(mbba->matched_buddies != NULL) { @@ -842,7 +862,7 @@ bonjour_jabber_conv_match_by_ip(BonjourJabberConversation *bconv) { purple_debug_error("bonjour", "More than one buddy matched for ip %s.\n", bconv->ip); else { PurpleBuddy *pb = mbba->matched_buddies->data; - BonjourBuddy *bb = pb->proto_data; + BonjourBuddy *bb = purple_buddy_get_protocol_data(pb); purple_debug_info("bonjour", "Matched buddy %s to incoming conversation using IP (%s)\n", purple_buddy_get_name(pb), bconv->ip); @@ -882,12 +902,10 @@ _find_or_start_conversation(BonjourJabber *jdata, const gchar *to) g_return_val_if_fail(to != NULL, NULL); pb = purple_find_buddy(jdata->account, to); - if (pb == NULL || pb->proto_data == NULL) + if (pb == NULL || (bb = purple_buddy_get_protocol_data(pb)) == NULL) /* You can not send a message to an offline buddy */ return NULL; - bb = (BonjourBuddy *) pb->proto_data; - /* Check if there is a previously open conversation */ if (bb->conversation == NULL) { @@ -934,7 +952,7 @@ bonjour_jabber_send_message(BonjourJabber *jdata, const gchar *to, const gchar * int ret; pb = _find_or_start_conversation(jdata, to); - if (pb == NULL || pb->proto_data == NULL) { + if (pb == NULL || (bb = purple_buddy_get_protocol_data(pb)) == NULL) { purple_debug_info("bonjour", "Can't send a message to an offline buddy (%s).\n", to); /* You can not send a message to an offline buddy */ return -10000; @@ -942,8 +960,6 @@ bonjour_jabber_send_message(BonjourJabber *jdata, const gchar *to, const gchar * purple_markup_html_to_xhtml(body, &xhtml, &message); - bb = pb->proto_data; - message_node = xmlnode_new("message"); xmlnode_set_attrib(message_node, "to", bb->name); xmlnode_set_attrib(message_node, "from", purple_account_get_username(jdata->account)); @@ -993,7 +1009,7 @@ async_bonjour_jabber_close_conversation(BonjourJabberConversation *bconv) { /* Disconnect this conv. from the buddy here so it can't be disposed of twice.*/ if(bconv->pb != NULL) { - BonjourBuddy *bb = bconv->pb->proto_data; + BonjourBuddy *bb = purple_buddy_get_protocol_data(bconv->pb); if (bb->conversation == bconv) bb->conversation = NULL; } @@ -1022,7 +1038,7 @@ bonjour_jabber_close_conversation(BonjourJabberConversation *bconv) tmp_next = xfers->next; /* We only need to cancel this if it hasn't actually started transferring. */ /* This will change if we ever support IBB transfers. */ - if (strcmp(xfer->who, bconv->pb->name) == 0 + if (strcmp(xfer->who, purple_buddy_get_name(bconv->pb)) == 0 && (purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_NOT_STARTED || purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_UNKNOWN)) { purple_xfer_cancel_remote(xfer); @@ -1081,7 +1097,7 @@ bonjour_jabber_stop(BonjourJabber *jdata) buddies = purple_find_buddies(jdata->account, NULL); for (l = buddies; l; l = l->next) { - BonjourBuddy *bb = ((PurpleBuddy*) l->data)->proto_data; + BonjourBuddy *bb = purple_buddy_get_protocol_data((PurpleBuddy*) l->data); if (bb != NULL) { bonjour_jabber_close_conversation(bb->conversation); bb->conversation = NULL; @@ -1144,15 +1160,20 @@ static gboolean check_if_blocked(PurpleBuddy *pb) { gboolean blocked = FALSE; - GSList *l; + GSList *l = NULL; PurpleAccount *acc = purple_buddy_get_account(pb); if(acc == NULL) return FALSE; + acc = purple_buddy_get_account(pb); + for(l = acc->deny; l != NULL; l = l->next) { - if(!purple_utf8_strcasecmp(pb->name, (char *)l->data)) { - purple_debug_info("bonjour", "%s has been blocked by %s.\n", pb->name, acc->username); + const gchar *name = purple_buddy_get_name(pb); + const gchar *username = purple_account_get_username(acc); + + if(!purple_utf8_strcasecmp(name, (char *)l->data)) { + purple_debug_info("bonjour", "%s has been blocked by %s.\n", name, username); blocked = TRUE; break; } @@ -1164,16 +1185,19 @@ static void xep_iq_parse(xmlnode *packet, PurpleBuddy *pb) { xmlnode *child; + PurpleAccount *account; + PurpleConnection *gc; if(check_if_blocked(pb)) return; + account = purple_buddy_get_account(pb); + gc = purple_account_get_connection(account); + if ((child = xmlnode_get_child(packet, "si")) || (child = xmlnode_get_child(packet, "error"))) - xep_si_parse(purple_account_get_connection(pb->account), - packet, pb); + xep_si_parse(gc, packet, pb); else - xep_bytestreams_parse(purple_account_get_connection(pb->account), - packet, pb); + xep_bytestreams_parse(gc, packet, pb); } int diff --git a/libpurple/protocols/bonjour/mdns_avahi.c b/libpurple/protocols/bonjour/mdns_avahi.c index 724bac5529..69e65b5628 100644 --- a/libpurple/protocols/bonjour/mdns_avahi.c +++ b/libpurple/protocols/bonjour/mdns_avahi.c @@ -124,7 +124,7 @@ _resolver_callback(AvahiServiceResolver *r, AvahiIfIndex interface, AvahiProtoco g_return_if_fail(r != NULL); pb = purple_find_buddy(account, name); - bb = (pb != NULL) ? pb->proto_data : NULL; + bb = (pb != NULL) ? purple_buddy_get_protocol_data(pb) : NULL; switch (event) { case AVAHI_RESOLVER_FAILURE: @@ -252,7 +252,7 @@ _browser_callback(AvahiServiceBrowser *b, AvahiIfIndex interface, purple_debug_info("bonjour", "_browser_callback - Remove service\n"); pb = purple_find_buddy(account, name); if (pb != NULL) { - BonjourBuddy *bb = pb->proto_data; + BonjourBuddy *bb = purple_buddy_get_protocol_data(pb); AvahiBuddyImplData *b_impl; GSList *l; AvahiSvcResolverData *rd_search; diff --git a/libpurple/protocols/gg/buddylist.c b/libpurple/protocols/gg/buddylist.c index 13cf4ba740..6e2752e6a5 100644 --- a/libpurple/protocols/gg/buddylist.c +++ b/libpurple/protocols/gg/buddylist.c @@ -41,37 +41,46 @@ void ggp_buddylist_send(PurpleConnection *gc) GGPInfo *info = gc->proto_data; PurpleAccount *account = purple_connection_get_account(gc); - PurpleBuddyList *blist; PurpleBlistNode *gnode, *cnode, *bnode; PurpleBuddy *buddy; uin_t *userlist = NULL; gchar *types = NULL; int size = 0, ret = 0; - if ((blist = purple_get_blist()) == NULL) - return; - - for (gnode = blist->root; gnode != NULL; gnode = gnode->next) { + for (gnode = purple_blist_get_root(); + gnode != NULL; + gnode = purple_blist_node_get_sibling_next(gnode)) + { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for (cnode = gnode->child; cnode != NULL; cnode = cnode->next) { + for (cnode = purple_blist_node_get_first_child(gnode); + cnode != NULL; + cnode = purple_blist_node_get_sibling_next(cnode)) + { if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for (bnode = cnode->child; bnode != NULL; bnode = bnode->next) { + for (bnode = purple_blist_node_get_first_child(cnode); + bnode != NULL; + bnode = purple_blist_node_get_sibling_next(bnode)) + { + const gchar *name = NULL; + if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; buddy = (PurpleBuddy *)bnode; - if (buddy->account != account) + if (purple_buddy_get_account(buddy) != account) continue; + name = purple_buddy_get_name(buddy); + size++; userlist = (uin_t *) g_renew(uin_t, userlist, size); types = (gchar *) g_renew(gchar, types, size); - userlist[size - 1] = ggp_str_to_uin(buddy->name); + userlist[size - 1] = ggp_str_to_uin(name); types[size - 1] = GG_USER_NORMAL; purple_debug_info("gg", "ggp_buddylist_send: adding %d\n", userlist[size - 1]); @@ -173,36 +182,45 @@ void ggp_buddylist_load(PurpleConnection *gc, char *buddylist) void ggp_buddylist_offline(PurpleConnection *gc) { PurpleAccount *account = purple_connection_get_account(gc); - PurpleBuddyList *blist; PurpleBlistNode *gnode, *cnode, *bnode; PurpleBuddy *buddy; - if ((blist = purple_get_blist()) == NULL) - return; - - for (gnode = blist->root; gnode != NULL; gnode = gnode->next) { + for (gnode = purple_blist_get_root(); + gnode != NULL; + gnode = purple_blist_node_get_sibling_next(gnode)) + { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for (cnode = gnode->child; cnode != NULL; cnode = cnode->next) { + for (cnode = purple_blist_node_get_first_child(gnode); + cnode != NULL; + cnode = purple_blist_node_get_sibling_next(cnode)) + { if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for (bnode = cnode->child; bnode != NULL; bnode = bnode->next) { + for (bnode = purple_blist_node_get_first_child(cnode); + bnode != NULL; + bnode = purple_blist_node_get_sibling_next(bnode)) + { + const gchar *name = NULL; + if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; buddy = (PurpleBuddy *)bnode; + + name = purple_buddy_get_name(buddy); - if (buddy->account != account) + if (purple_buddy_get_account(buddy) != account) continue; purple_prpl_got_user_status( - account, buddy->name, "offline", NULL); + account, name, "offline", NULL); purple_debug_info("gg", "ggp_buddylist_offline: gone: %s\n", - buddy->name); + name); } } } @@ -212,41 +230,46 @@ void ggp_buddylist_offline(PurpleConnection *gc) /* char *ggp_buddylist_dump(PurpleAccount *account) {{{ */ char *ggp_buddylist_dump(PurpleAccount *account) { - PurpleBuddyList *blist; PurpleBlistNode *gnode, *cnode, *bnode; PurpleGroup *group; PurpleBuddy *buddy; - GString *buddylist; + GString *buddylist = g_string_sized_new(1024); char *ptr; - if ((blist = purple_get_blist()) == NULL) - return NULL; - - buddylist = g_string_sized_new(1024); - - for (gnode = blist->root; gnode != NULL; gnode = gnode->next) { + for (gnode = purple_blist_get_root(); + gnode != NULL; + gnode = purple_blist_node_get_sibling_next(gnode)) + { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; group = (PurpleGroup *)gnode; - for (cnode = gnode->child; cnode != NULL; cnode = cnode->next) { + for (cnode = purple_blist_node_get_first_child(gnode); + cnode != NULL; + cnode = purple_blist_node_get_sibling_next(cnode)) + { if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for (bnode = cnode->child; bnode != NULL; bnode = bnode->next) { - gchar *name, *alias, *gname; + for (bnode = purple_blist_node_get_first_child(cnode); + bnode != NULL; + bnode = purple_blist_node_get_sibling_next(bnode)) + { + const gchar *name, *alias, *gname; if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; buddy = (PurpleBuddy *)bnode; - if (buddy->account != account) + if (purple_buddy_get_account(buddy) != account) continue; - name = buddy->name; - alias = buddy->alias ? buddy->alias : buddy->name; - gname = group->name; + name = purple_buddy_get_name(buddy); + alias = purple_buddy_get_alias(buddy); + if(alias == NULL) + alias = name; + gname = purple_group_get_name(group); g_string_append_printf(buddylist, "%s;%s;%s;%s;%s;%s;%s;%s%s\r\n", diff --git a/libpurple/protocols/gg/gg.c b/libpurple/protocols/gg/gg.c index cfe007629b..28ad424a0c 100644 --- a/libpurple/protocols/gg/gg.c +++ b/libpurple/protocols/gg/gg.c @@ -2052,11 +2052,12 @@ static void ggp_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup { PurpleAccount *account; GGPInfo *info = gc->proto_data; + const gchar *name = purple_buddy_get_name(buddy); - gg_add_notify(info->session, ggp_str_to_uin(buddy->name)); + gg_add_notify(info->session, ggp_str_to_uin(name)); account = purple_connection_get_account(gc); - if (strcmp(purple_account_get_username(account), buddy->name) == 0) { + if (strcmp(purple_account_get_username(account), name) == 0) { ggp_status_fake_to_self(account); } } @@ -2066,7 +2067,7 @@ static void ggp_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, { GGPInfo *info = gc->proto_data; - gg_remove_notify(info->session, ggp_str_to_uin(buddy->name)); + gg_remove_notify(info->session, ggp_str_to_uin(purple_buddy_get_name(buddy))); } static void ggp_join_chat(PurpleConnection *gc, GHashTable *data) diff --git a/libpurple/protocols/irc/irc.c b/libpurple/protocols/irc/irc.c index e0013a3d3f..9721536931 100644 --- a/libpurple/protocols/irc/irc.c +++ b/libpurple/protocols/irc/irc.c @@ -564,7 +564,7 @@ static void irc_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup { struct irc_conn *irc = (struct irc_conn *)gc->proto_data; struct irc_buddy *ib = g_new0(struct irc_buddy, 1); - ib->name = g_strdup(buddy->name); + ib->name = g_strdup(purple_buddy_get_name(buddy)); g_hash_table_insert(irc->buddies, ib->name, ib); /* if the timer isn't set, this is during signon, so we don't want to flood @@ -577,7 +577,7 @@ static void irc_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup static void irc_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { struct irc_conn *irc = (struct irc_conn *)gc->proto_data; - g_hash_table_remove(irc->buddies, buddy->name); + g_hash_table_remove(irc->buddies, purple_buddy_get_name(buddy)); } static void read_input(struct irc_conn *irc, int len) diff --git a/libpurple/protocols/irc/msgs.c b/libpurple/protocols/irc/msgs.c index 23fb42362f..81e107d0b1 100644 --- a/libpurple/protocols/irc/msgs.c +++ b/libpurple/protocols/irc/msgs.c @@ -79,6 +79,7 @@ static void irc_connected(struct irc_conn *irc, const char *nick) PurpleConnection *gc; PurpleStatus *status; PurpleBlistNode *gnode, *cnode, *bnode; + PurpleAccount *account; if ((gc = purple_account_get_connection(irc->account)) == NULL || PURPLE_CONNECTION_IS_CONNECTED(gc)) @@ -86,6 +87,7 @@ static void irc_connected(struct irc_conn *irc, const char *nick) purple_connection_set_display_name(gc, nick); purple_connection_set_state(gc, PURPLE_CONNECTED); + account = purple_connection_get_account(gc); /* If we're away then set our away message */ status = purple_account_get_active_status(irc->account); @@ -95,20 +97,29 @@ static void irc_connected(struct irc_conn *irc, const char *nick) } /* this used to be in the core, but it's not now */ - for (gnode = purple_get_blist()->root; gnode; gnode = gnode->next) { + for (gnode = purple_blist_get_root(); + gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) + { if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for(cnode = gnode->child; cnode; cnode = cnode->next) { + for(cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) + { if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for(bnode = cnode->child; bnode; bnode = bnode->next) { + for(bnode = purple_blist_node_get_first_child(cnode); + bnode; + bnode = purple_blist_node_get_sibling_next(bnode)) + { PurpleBuddy *b; if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; b = (PurpleBuddy *)bnode; - if(b->account == gc->account) { + if(purple_buddy_get_account(b) == account) { struct irc_buddy *ib = g_new0(struct irc_buddy, 1); - ib->name = g_strdup(b->name); + ib->name = g_strdup(purple_buddy_get_name(b)); g_hash_table_insert(irc->buddies, ib->name, ib); } } diff --git a/libpurple/protocols/jabber/Makefile.am b/libpurple/protocols/jabber/Makefile.am index 5f46e374a9..e9b776b671 100644 --- a/libpurple/protocols/jabber/Makefile.am +++ b/libpurple/protocols/jabber/Makefile.am @@ -17,6 +17,8 @@ JABBERSOURCES = auth.c \ disco.h \ google.c \ google.h \ + ibb.c \ + ibb.h \ iq.c \ iq.h \ jabber.c \ diff --git a/libpurple/protocols/jabber/Makefile.mingw b/libpurple/protocols/jabber/Makefile.mingw index 4c49619ed4..524f776dd3 100644 --- a/libpurple/protocols/jabber/Makefile.mingw +++ b/libpurple/protocols/jabber/Makefile.mingw @@ -51,6 +51,7 @@ C_SRC = \ data.c \ disco.c \ google.c \ + ibb.c \ iq.c \ jabber.c \ jutil.c \ diff --git a/libpurple/protocols/jabber/adhoccommands.c b/libpurple/protocols/jabber/adhoccommands.c index eccc8ffd66..0781822eeb 100644 --- a/libpurple/protocols/jabber/adhoccommands.c +++ b/libpurple/protocols/jabber/adhoccommands.c @@ -47,26 +47,26 @@ void jabber_adhoc_disco_result_cb(JabberStream *js, xmlnode *packet, gpointer da JabberID *jabberid; JabberBuddy *jb; JabberBuddyResource *jbr = NULL; - + if(strcmp(type, "result")) return; - + query = xmlnode_get_child_with_namespace(packet,"query","http://jabber.org/protocol/disco#items"); if(!query) return; node = xmlnode_get_attrib(query,"node"); if(!node || strcmp(node, "http://jabber.org/protocol/commands")) return; - + if((jabberid = jabber_id_new(from))) { if(jabberid->resource && (jb = jabber_buddy_find(js, from, TRUE))) jbr = jabber_buddy_find_resource(jb, jabberid->resource); jabber_id_free(jabberid); } - + if(!jbr) return; - + if(jbr->commands) { /* since the list we just received is complete, wipe the old one */ while(jbr->commands) { @@ -78,7 +78,7 @@ void jabber_adhoc_disco_result_cb(JabberStream *js, xmlnode *packet, gpointer da jbr->commands = g_list_delete_link(jbr->commands, jbr->commands); } } - + for(item = query->child; item; item = item->next) { JabberAdHocCommands *cmd; if(item->type != XMLNODE_TYPE_TAG) @@ -86,11 +86,11 @@ void jabber_adhoc_disco_result_cb(JabberStream *js, xmlnode *packet, gpointer da if(strcmp(item->name, "item")) continue; cmd = g_new0(JabberAdHocCommands, 1); - + cmd->jid = g_strdup(xmlnode_get_attrib(item,"jid")); cmd->node = g_strdup(xmlnode_get_attrib(item,"node")); cmd->name = g_strdup(xmlnode_get_attrib(item,"name")); - + jbr->commands = g_list_append(jbr->commands,cmd); } } @@ -103,13 +103,13 @@ static void do_adhoc_action_cb(JabberStream *js, xmlnode *result, const char *ac JabberAdHocActionInfo *actionInfo = user_data; JabberIq *iq = jabber_iq_new(js, JABBER_IQ_SET); jabber_iq_set_callback(iq, jabber_adhoc_parse, NULL); - + xmlnode_set_attrib(iq->node, "to", actionInfo->who); command = xmlnode_new_child(iq->node,"command"); xmlnode_set_namespace(command,"http://jabber.org/protocol/commands"); xmlnode_set_attrib(command,"sessionid",actionInfo->sessionid); xmlnode_set_attrib(command,"node",actionInfo->node); - + /* cancel is handled differently on ad-hoc commands than regular forms */ if(!strcmp(xmlnode_get_namespace(result),"jabber:x:data") && !strcmp(xmlnode_get_attrib(result, "type"),"cancel")) { xmlnode_set_attrib(command,"action","cancel"); @@ -118,7 +118,7 @@ static void do_adhoc_action_cb(JabberStream *js, xmlnode *result, const char *ac xmlnode_set_attrib(command,"action",actionhandle); xmlnode_insert_child(command,result); } - + for(action = actionInfo->actionslist; action; action = g_list_next(action)) { char *handle = action->data; g_free(handle); @@ -127,7 +127,7 @@ static void do_adhoc_action_cb(JabberStream *js, xmlnode *result, const char *ac g_free(actionInfo->sessionid); g_free(actionInfo->who); g_free(actionInfo->node); - + jabber_iq_send(iq); } @@ -136,12 +136,12 @@ static void jabber_adhoc_parse(JabberStream *js, xmlnode *packet, gpointer data) const char *status = xmlnode_get_attrib(command,"status"); xmlnode *xdata = xmlnode_get_child_with_namespace(command,"x","jabber:x:data"); const char *type = xmlnode_get_attrib(packet,"type"); - + if(type && !strcmp(type,"error")) { char *msg = jabber_parse_error(js, packet, NULL); if(!msg) msg = g_strdup(_("Unknown Error")); - + purple_notify_error(NULL, _("Ad-Hoc Command Failed"), _("Ad-Hoc Command Failed"), msg); g_free(msg); @@ -149,20 +149,20 @@ static void jabber_adhoc_parse(JabberStream *js, xmlnode *packet, gpointer data) } if(!type || strcmp(type,"result")) return; - + if(!status) return; - + if(!strcmp(status,"completed")) { /* display result */ xmlnode *note = xmlnode_get_child(command,"note"); - + if(note) { char *data = xmlnode_get_data(note); purple_notify_info(NULL, xmlnode_get_attrib(packet, "from"), data, NULL); g_free(data); } - + if(xdata) jabber_x_data_request(js, xdata, (jabber_x_data_cb)do_adhoc_ignoreme, NULL); return; @@ -175,7 +175,7 @@ static void jabber_adhoc_parse(JabberStream *js, xmlnode *packet, gpointer data) JabberAdHocActionInfo *actionInfo; if(!xdata) return; /* shouldn't happen */ - + actions = xmlnode_get_child(command,"actions"); if(!actions) { JabberXDataAction *defaultaction = g_new0(JabberXDataAction, 1); @@ -196,13 +196,13 @@ static void jabber_adhoc_parse(JabberStream *js, xmlnode *packet, gpointer data) } } } - + actionInfo = g_new0(JabberAdHocActionInfo, 1); actionInfo->sessionid = g_strdup(xmlnode_get_attrib(command,"sessionid")); actionInfo->who = g_strdup(xmlnode_get_attrib(packet,"from")); actionInfo->node = g_strdup(xmlnode_get_attrib(command,"node")); actionInfo->actionslist = actionslist; - + jabber_x_data_request_with_actions(js,xdata,actionslist,actionindex,do_adhoc_action_cb,actionInfo); } } @@ -211,8 +211,9 @@ void jabber_adhoc_execute_action(PurpleBlistNode *node, gpointer data) { if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { JabberAdHocCommands *cmd = data; PurpleBuddy *buddy = (PurpleBuddy *) node; - JabberStream *js = purple_account_get_connection(buddy->account)->proto_data; - + PurpleAccount *account = purple_buddy_get_account(buddy); + JabberStream *js = purple_account_get_connection(account)->proto_data; + jabber_adhoc_execute(js, cmd); } } @@ -220,7 +221,7 @@ void jabber_adhoc_execute_action(PurpleBlistNode *node, gpointer data) { static void jabber_adhoc_server_got_list_cb(JabberStream *js, xmlnode *packet, gpointer data) { xmlnode *query = xmlnode_get_child_with_namespace(packet, "query", "http://jabber.org/protocol/disco#items"); xmlnode *item; - + if(!query) return; @@ -233,7 +234,7 @@ static void jabber_adhoc_server_got_list_cb(JabberStream *js, xmlnode *packet, g g_free(cmd); js->commands = g_list_delete_link(js->commands, js->commands); } - + /* re-fill list */ for(item = query->child; item; item = item->next) { JabberAdHocCommands *cmd; @@ -245,7 +246,7 @@ static void jabber_adhoc_server_got_list_cb(JabberStream *js, xmlnode *packet, g cmd->jid = g_strdup(xmlnode_get_attrib(item,"jid")); cmd->node = g_strdup(xmlnode_get_attrib(item,"node")); cmd->name = g_strdup(xmlnode_get_attrib(item,"name")); - + js->commands = g_list_append(js->commands,cmd); } } @@ -253,10 +254,10 @@ static void jabber_adhoc_server_got_list_cb(JabberStream *js, xmlnode *packet, g void jabber_adhoc_server_get_list(JabberStream *js) { JabberIq *iq = jabber_iq_new_query(js,JABBER_IQ_GET,"http://jabber.org/protocol/disco#items"); xmlnode *query = xmlnode_get_child_with_namespace(iq->node,"query","http://jabber.org/protocol/disco#items"); - + xmlnode_set_attrib(iq->node,"to",js->user->domain); xmlnode_set_attrib(query,"node","http://jabber.org/protocol/commands"); - + jabber_iq_set_callback(iq,jabber_adhoc_server_got_list_cb,NULL); jabber_iq_send(iq); } @@ -268,9 +269,9 @@ void jabber_adhoc_execute(JabberStream *js, JabberAdHocCommands *cmd) { xmlnode_set_namespace(command,"http://jabber.org/protocol/commands"); xmlnode_set_attrib(command,"node",cmd->node); xmlnode_set_attrib(command,"action","execute"); - + jabber_iq_set_callback(iq,jabber_adhoc_parse,NULL); - + jabber_iq_send(iq); } @@ -279,7 +280,7 @@ static void jabber_adhoc_server_execute(PurplePluginAction *action) { if(cmd) { PurpleConnection *gc = (PurpleConnection *) action->context; JabberStream *js = gc->proto_data; - + jabber_adhoc_execute(js, cmd); } } @@ -287,7 +288,7 @@ static void jabber_adhoc_server_execute(PurplePluginAction *action) { void jabber_adhoc_init_server_commands(JabberStream *js, GList **m) { GList *cmdlst; JabberBuddy *jb; - + /* also add commands for other clients connected to the same account on another resource */ char *accountname = g_strdup_printf("%s@%s", js->user->node, js->user->domain); if((jb = jabber_buddy_find(js, accountname, TRUE))) { @@ -306,7 +307,7 @@ void jabber_adhoc_init_server_commands(JabberStream *js, GList **m) { } } g_free(accountname); - + /* now add server commands */ for(cmdlst = js->commands; cmdlst; cmdlst = g_list_next(cmdlst)) { JabberAdHocCommands *cmd = cmdlst->data; diff --git a/libpurple/protocols/jabber/auth.c b/libpurple/protocols/jabber/auth.c index e93ea161e6..ae8320f871 100644 --- a/libpurple/protocols/jabber/auth.c +++ b/libpurple/protocols/jabber/auth.c @@ -384,7 +384,7 @@ static void jabber_auth_start_cyrus(JabberStream *js) } /* Remove space which separated this mech from the next */ if (strlen(js->sasl_mechs->str) > 0 && ((js->sasl_mechs->str)[0] == ' ')) { - g_string_erase(js->sasl_mechs, 0, 1); + g_string_erase(js->sasl_mechs, 0, 1); } again = TRUE; } @@ -397,7 +397,7 @@ static void jabber_auth_start_cyrus(JabberStream *js) auth = xmlnode_new("auth"); xmlnode_set_namespace(auth, "urn:ietf:params:xml:ns:xmpp-sasl"); xmlnode_set_attrib(auth, "mechanism", js->current_mech); - + xmlnode_set_attrib(auth, "xmlns:ga", "http://www.google.com/talk/protocol/auth"); xmlnode_set_attrib(auth, "ga:client-uses-full-bind-result", "true"); @@ -1057,13 +1057,13 @@ void jabber_auth_handle_failure(JabberStream *js, xmlnode *packet) } /* Remove space which separated this mech from the next */ if (strlen(js->sasl_mechs->str) > 0 && ((js->sasl_mechs->str)[0] == ' ')) { - g_string_erase(js->sasl_mechs, 0, 1); - } + g_string_erase(js->sasl_mechs, 0, 1); + } } if (strlen(js->sasl_mechs->str)) { /* If we have remaining mechs to try, do so */ sasl_dispose(&js->sasl); - + jabber_auth_start_cyrus(js); return; } diff --git a/libpurple/protocols/jabber/buddy.c b/libpurple/protocols/jabber/buddy.c index f323bb2c43..4810fae3b6 100644 --- a/libpurple/protocols/jabber/buddy.c +++ b/libpurple/protocols/jabber/buddy.c @@ -175,7 +175,7 @@ void jabber_buddy_resource_free(JabberBuddyResource *jbr) g_return_if_fail(jbr != NULL); jbr->jb->resources = g_list_remove(jbr->jb->resources, jbr); - + while(jbr->commands) { JabberAdHocCommands *cmd = jbr->commands->data; g_free(cmd->jid); @@ -184,7 +184,7 @@ void jabber_buddy_resource_free(JabberBuddyResource *jbr) g_free(cmd); jbr->commands = g_list_delete_link(jbr->commands, jbr->commands); } - + jabber_caps_free_clientinfo(jbr->caps); g_free(jbr->name); @@ -427,7 +427,7 @@ void jabber_set_info(PurpleConnection *gc, const char *info) { PurpleStoredImage *img; JabberIq *iq; - JabberStream *js = gc->proto_data; + JabberStream *js = purple_connection_get_protocol_data(gc); xmlnode *vc_node; const struct tag_attr *tag_attr; @@ -500,8 +500,8 @@ void jabber_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img) { PurplePresence *gpresence; PurpleStatus *status; - - if(((JabberStream*)gc->proto_data)->pep) { + + if(((JabberStream*)purple_connection_get_protocol_data(gc))->pep) { /* XEP-0084: User Avatars */ if(img) { /* @@ -544,37 +544,37 @@ void jabber_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img) guint32 height = ntohl(png->ihdr.height); xmlnode *publish, *item, *data, *metadata, *info; char *lengthstring, *widthstring, *heightstring; - + /* compute the sha1 hash */ char *hash = jabber_calculate_data_sha1sum(purple_imgstore_get_data(img), purple_imgstore_get_size(img)); char *base64avatar; - + publish = xmlnode_new("publish"); xmlnode_set_attrib(publish,"node",AVATARNAMESPACEDATA); - + item = xmlnode_new_child(publish, "item"); xmlnode_set_attrib(item, "id", hash); - + data = xmlnode_new_child(item, "data"); xmlnode_set_namespace(data,AVATARNAMESPACEDATA); - + base64avatar = purple_base64_encode(purple_imgstore_get_data(img), purple_imgstore_get_size(img)); xmlnode_insert_data(data,base64avatar,-1); g_free(base64avatar); - + /* publish the avatar itself */ - jabber_pep_publish((JabberStream*)gc->proto_data, publish); - + jabber_pep_publish((JabberStream*)purple_connection_get_protocol_data(gc), publish); + /* next step: publish the metadata */ publish = xmlnode_new("publish"); xmlnode_set_attrib(publish,"node",AVATARNAMESPACEMETA); - + item = xmlnode_new_child(publish, "item"); xmlnode_set_attrib(item, "id", hash); - + metadata = xmlnode_new_child(item, "metadata"); xmlnode_set_namespace(metadata,AVATARNAMESPACEMETA); - + info = xmlnode_new_child(metadata, "info"); xmlnode_set_attrib(info, "id", hash); xmlnode_set_attrib(info, "type", "image/png"); @@ -587,10 +587,10 @@ void jabber_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img) heightstring = g_strdup_printf("%u", height); xmlnode_set_attrib(info, "height", heightstring); g_free(heightstring); - + /* publish the metadata */ - jabber_pep_publish((JabberStream*)gc->proto_data, publish); - + jabber_pep_publish((JabberStream*)purple_connection_get_protocol_data(gc), publish); + g_free(hash); } else { purple_debug_error("jabber", "jabber_set_buddy_icon received non-png data"); @@ -801,18 +801,18 @@ static void jabber_buddy_info_show_if_ready(JabberBuddyInfo *jbi) (jbr->client.version ? jbr->client.version : "")); purple_notify_user_info_add_pair(user_info, _("Client"), tmp); g_free(tmp); - + if(jbr->client.os) { purple_notify_user_info_prepend_pair(user_info, _("Operating System"), jbr->client.os); } - } + } if(jbir) { if(jbir->idle_seconds > 0) { char *idle = purple_str_seconds_to_string(jbir->idle_seconds); purple_notify_user_info_prepend_pair(user_info, _("Idle"), idle); g_free(idle); } - } + } if(jbr) { char *purdy = NULL; const char *status_name = jabber_buddy_state_get_name(jbr->state); @@ -830,7 +830,7 @@ static void jabber_buddy_info_show_if_ready(JabberBuddyInfo *jbi) } else { purple_notify_user_info_prepend_pair(user_info, _("Status"), _("Unknown")); } -#if 0 +#if 0 /* #if 0 this for now; I think this would be far more useful if we limited this to a particular set of features * of particular interest (-vv jumps out as one). As it is now, I don't picture people getting all excited: "Oh sweet crap! * So-and-so supports 'jabber:x:data' AND 'Collaborative Data Objects'!" @@ -841,7 +841,7 @@ static void jabber_buddy_info_show_if_ready(JabberBuddyInfo *jbi) GList *iter; for(iter = jbr->caps->features; iter; iter = g_list_next(iter)) { const char *feature = iter->data; - + if(!strcmp(feature, "jabber:iq:last")) feature = _("Last Activity"); else if(!strcmp(feature, "http://jabber.org/protocol/disco#info")) @@ -950,7 +950,7 @@ static void jabber_buddy_info_show_if_ready(JabberBuddyInfo *jbi) if(strlen(tmp->str) > 0) purple_notify_user_info_prepend_pair(user_info, _("Capabilities"), tmp->str); - + g_string_free(tmp, TRUE); } #endif @@ -970,7 +970,7 @@ static void jabber_buddy_info_show_if_ready(JabberBuddyInfo *jbi) purple_notify_user_info_prepend_pair(user_info, _("Client"), tmp); g_free(tmp); - + if(jbr->client.os) { purple_notify_user_info_prepend_pair(user_info, _("Operating System"), jbr->client.os); } @@ -989,14 +989,14 @@ static void jabber_buddy_info_show_if_ready(JabberBuddyInfo *jbi) purdy = purple_strdup_withhtml(jbr->status); if(status_name && purdy && !strcmp(status_name, purdy)) status_name = NULL; - + tmp = g_strdup_printf("%s%s%s", (status_name ? status_name : ""), ((status_name && purdy) ? ": " : ""), (purdy ? purdy : "")); purple_notify_user_info_prepend_pair(user_info, _("Status"), tmp); g_free(tmp); g_free(purdy); - + if(multiple_resources) { tmp = g_strdup_printf("%d", jbr->priority); purple_notify_user_info_prepend_pair(user_info, _("Priority"), tmp); @@ -1011,7 +1011,7 @@ static void jabber_buddy_info_show_if_ready(JabberBuddyInfo *jbi) GList *iter; for(iter = jbr->caps->features; iter; iter = g_list_next(iter)) { const char *feature = iter->data; - + if(!strcmp(feature, "jabber:iq:last")) feature = _("Last Activity"); else if(!strcmp(feature, "http://jabber.org/protocol/disco#info")) @@ -1114,13 +1114,13 @@ static void jabber_buddy_info_show_if_ready(JabberBuddyInfo *jbi) feature = _("Hop Check"); else if(g_str_has_suffix(feature, "+notify")) feature = NULL; - + if(feature) g_string_append_printf(tmp, "%s\n", feature); } if(strlen(tmp->str) > 0) purple_notify_user_info_prepend_pair(user_info, _("Capabilities"), tmp->str); - + g_string_free(tmp, TRUE); } #endif @@ -1188,7 +1188,7 @@ static void jabber_vcard_save_mine(JabberStream *js, xmlnode *packet, gpointer d void jabber_vcard_fetch_mine(JabberStream *js) { JabberIq *iq = jabber_iq_new(js, JABBER_IQ_GET); - + xmlnode *vcard = xmlnode_new_child(iq->node, "vCard"); xmlnode_set_namespace(vcard, "vcard-temp"); jabber_iq_set_callback(iq, jabber_vcard_save_mine, NULL); @@ -1262,13 +1262,13 @@ static void jabber_vcard_parse(JabberStream *js, xmlnode *packet, gpointer data) } g_free(text2); } - } else if(text && !strcmp(child->name, "NICKNAME")) { + } else if(text && !strcmp(child->name, "NICKNAME")) { /* Prefer the Nickcname to the Full Name as the serverside alias if it's not just part of the jid. * Ignore it if it's part of the jid. */ if (strstr(bare_jid, text) == NULL) { g_free(serverside_alias); serverside_alias = g_strdup(text); - + purple_notify_user_info_add_pair(user_info, _("Nickname"), text); } } else if(text && !strcmp(child->name, "BDAY")) { @@ -1313,7 +1313,7 @@ static void jabber_vcard_parse(JabberStream *js, xmlnode *packet, gpointer data) } g_free(text2); } - + if (address_line_added) purple_notify_user_info_add_section_break(user_info); @@ -1355,8 +1355,8 @@ static void jabber_vcard_parse(JabberStream *js, xmlnode *packet, gpointer data) escaped = g_markup_escape_text(userid, -1); mailto = g_strdup_printf("<a href=\"mailto:%s\">%s</a>", escaped, escaped); purple_notify_user_info_add_pair(user_info, _("Email"), mailto); - - g_free(mailto); + + g_free(mailto); g_free(escaped); g_free(userid); } @@ -1423,7 +1423,7 @@ static void jabber_vcard_parse(JabberStream *js, xmlnode *packet, gpointer data) if (b) { purple_blist_node_set_string((PurpleBlistNode*)b, "servernick", serverside_alias); } - + g_free(serverside_alias); } @@ -1445,7 +1445,7 @@ static void do_buddy_avatar_update_fromurl(PurpleUtilFetchUrlData *url_data, gpo "do_buddy_avatar_update_fromurl got error \"%s\"", error_message); return; } - + purple_buddy_icons_set_for_user(purple_connection_get_account(info->js->gc), info->from, (void*)url_text, len, info->id); g_free(info->from); g_free(info->id); @@ -1460,29 +1460,29 @@ static void do_buddy_avatar_update_data(JabberStream *js, const char *from, xmln size_t size; if(!items) return; - + item = xmlnode_get_child(items, "item"); if(!item) return; - + data = xmlnode_get_child_with_namespace(item,"data",AVATARNAMESPACEDATA); if(!data) return; - + checksum = xmlnode_get_attrib(item,"id"); if(!checksum) return; - + b64data = xmlnode_get_data(data); if(!b64data) return; - + img = purple_base64_decode(b64data, &size); if(!img) { g_free(b64data); return; } - + purple_buddy_icons_set_for_user(purple_connection_get_account(js->gc), from, img, size, checksum); g_free(b64data); } @@ -1493,7 +1493,7 @@ void jabber_buddy_avatar_update_metadata(JabberStream *js, const char *from, xml xmlnode *item, *metadata; if(!buddy) return; - + checksum = purple_buddy_icons_get_checksum_for_user(buddy); item = xmlnode_get_child(items,"item"); metadata = xmlnode_get_child_with_namespace(item, "metadata", AVATARNAMESPACEMETA); @@ -1513,7 +1513,7 @@ void jabber_buddy_avatar_update_metadata(JabberStream *js, const char *from, xml if(info->type == XMLNODE_TYPE_TAG && !strcmp(info->name,"info")) { const char *type = xmlnode_get_attrib(info,"type"); const char *id = xmlnode_get_attrib(info,"id"); - + if(checksum && id && !strcmp(id, checksum)) { /* we already have that avatar, so we don't have to do anything */ goodinfo = NULL; @@ -1529,7 +1529,7 @@ void jabber_buddy_avatar_update_metadata(JabberStream *js, const char *from, xml } else if(goodinfo) { const char *url = xmlnode_get_attrib(goodinfo, "url"); const char *id = xmlnode_get_attrib(goodinfo,"id"); - + /* the avatar might either be stored in a pep node, or on a HTTP/HTTPS URL */ if(!url) jabber_pep_request_item(js, from, AVATARNAMESPACEDATA, id, do_buddy_avatar_update_data); @@ -1822,7 +1822,7 @@ static void jabber_buddy_get_info_for_jid(JabberStream *js, const char *jid) void jabber_buddy_get_info(PurpleConnection *gc, const char *who) { - JabberStream *js = gc->proto_data; + JabberStream *js = purple_connection_get_protocol_data(gc); JabberID *jid = jabber_id_new(who); if (!jid) @@ -1882,10 +1882,10 @@ static void jabber_buddy_make_invisible(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); - js = gc->proto_data; + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); + js = purple_connection_get_protocol_data(gc); - jabber_buddy_set_invisibility(js, buddy->name, TRUE); + jabber_buddy_set_invisibility(js, purple_buddy_get_name(buddy), TRUE); } static void jabber_buddy_make_visible(PurpleBlistNode *node, gpointer data) @@ -1897,10 +1897,10 @@ static void jabber_buddy_make_visible(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); - js = gc->proto_data; + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); + js = purple_connection_get_protocol_data(gc); - jabber_buddy_set_invisibility(js, buddy->name, FALSE); + jabber_buddy_set_invisibility(js, purple_buddy_get_name(buddy), FALSE); } static void jabber_buddy_cancel_presence_notification(PurpleBlistNode *node, @@ -1913,11 +1913,11 @@ static void jabber_buddy_cancel_presence_notification(PurpleBlistNode *node, g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); - js = gc->proto_data; + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); + js = purple_connection_get_protocol_data(gc); /* I wonder if we should prompt the user before doing this */ - jabber_presence_subscription_set(js, buddy->name, "unsubscribed"); + jabber_presence_subscription_set(js, purple_buddy_get_name(buddy), "unsubscribed"); } static void jabber_buddy_rerequest_auth(PurpleBlistNode *node, gpointer data) @@ -1929,10 +1929,10 @@ static void jabber_buddy_rerequest_auth(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); - js = gc->proto_data; + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); + js = purple_connection_get_protocol_data(gc); - jabber_presence_subscription_set(js, buddy->name, "subscribe"); + jabber_presence_subscription_set(js, purple_buddy_get_name(buddy), "subscribe"); } @@ -1945,18 +1945,18 @@ static void jabber_buddy_unsubscribe(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); - js = gc->proto_data; + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); + js = purple_connection_get_protocol_data(gc); - jabber_presence_subscription_set(js, buddy->name, "unsubscribe"); + jabber_presence_subscription_set(js, purple_buddy_get_name(buddy), "unsubscribe"); } static void jabber_buddy_login(PurpleBlistNode *node, gpointer data) { if(PURPLE_BLIST_NODE_IS_BUDDY(node)) { /* simply create a directed presence of the current status */ PurpleBuddy *buddy = (PurpleBuddy *) node; - PurpleConnection *gc = purple_account_get_connection(buddy->account); - JabberStream *js = gc->proto_data; + PurpleConnection *gc = purple_account_get_connection(purple_buddy_get_account(buddy)); + JabberStream *js = purple_connection_get_protocol_data(gc); PurpleAccount *account = purple_connection_get_account(gc); PurplePresence *gpresence = purple_account_get_presence(account); PurpleStatus *status = purple_presence_get_active_status(gpresence); @@ -1964,14 +1964,14 @@ static void jabber_buddy_login(PurpleBlistNode *node, gpointer data) { JabberBuddyState state; char *msg; int priority; - + purple_status_to_jabber(status, &state, &msg, &priority); presence = jabber_presence_create_js(js, state, msg, priority); - + g_free(msg); - - xmlnode_set_attrib(presence, "to", buddy->name); - + + xmlnode_set_attrib(presence, "to", purple_buddy_get_name(buddy)); + jabber_send(js, presence); xmlnode_free(presence); } @@ -1981,13 +1981,14 @@ static void jabber_buddy_logout(PurpleBlistNode *node, gpointer data) { if(PURPLE_BLIST_NODE_IS_BUDDY(node)) { /* simply create a directed unavailable presence */ PurpleBuddy *buddy = (PurpleBuddy *) node; - JabberStream *js = purple_account_get_connection(buddy->account)->proto_data; + PurpleConnection *gc = purple_account_get_connection(purple_buddy_get_account(buddy)); + JabberStream *js = purple_connection_get_protocol_data(gc); xmlnode *presence; - + presence = jabber_presence_create_js(js, JABBER_BUDDY_STATE_UNAVAILABLE, NULL, 0); - - xmlnode_set_attrib(presence, "to", buddy->name); - + + xmlnode_set_attrib(presence, "to", purple_buddy_get_name(buddy)); + jabber_send(js, presence); xmlnode_free(presence); } @@ -1995,9 +1996,10 @@ static void jabber_buddy_logout(PurpleBlistNode *node, gpointer data) { static GList *jabber_buddy_menu(PurpleBuddy *buddy) { - PurpleConnection *gc = purple_account_get_connection(buddy->account); - JabberStream *js = gc->proto_data; - JabberBuddy *jb = jabber_buddy_find(js, buddy->name, TRUE); + PurpleConnection *gc = purple_account_get_connection(purple_buddy_get_account(buddy)); + JabberStream *js = purple_connection_get_protocol_data(gc); + const char *name = purple_buddy_get_name(buddy); + JabberBuddy *jb = jabber_buddy_find(js, name, TRUE); GList *jbrs; GList *m = NULL; @@ -2043,7 +2045,7 @@ static GList *jabber_buddy_menu(PurpleBuddy *buddy) NULL, NULL); m = g_list_append(m, act); } - + /* * This if-condition implements parts of XEP-0100: Gateway Interaction * @@ -2052,7 +2054,7 @@ static GList *jabber_buddy_menu(PurpleBuddy *buddy) * that gateways on the roster can be identified by having no '@' in their jid. This is a faily safe assumption, since * people don't tend to have a server or other service there. */ - if (g_utf8_strchr(buddy->name, -1, '@') == NULL) { + if (g_utf8_strchr(name, -1, '@') == NULL) { act = purple_menu_action_new(_("Log In"), PURPLE_CALLBACK(jabber_buddy_login), NULL, NULL); @@ -2062,7 +2064,7 @@ static GList *jabber_buddy_menu(PurpleBuddy *buddy) NULL, NULL); m = g_list_append(m, act); } - + /* add all ad hoc commands to the action menu */ for(jbrs = jb->resources; jbrs; jbrs = g_list_next(jbrs)) { JabberBuddyResource *jbr = jbrs->data; @@ -2520,7 +2522,7 @@ void jabber_user_search(JabberStream *js, const char *directory) void jabber_user_search_begin(PurplePluginAction *action) { PurpleConnection *gc = (PurpleConnection *) action->context; - JabberStream *js = gc->proto_data; + JabberStream *js = purple_connection_get_protocol_data(gc); purple_request_input(gc, _("Enter a User Directory"), _("Enter a User Directory"), _("Select a user directory to search"), diff --git a/libpurple/protocols/jabber/caps.c b/libpurple/protocols/jabber/caps.c index ad33a47884..99213b3ea6 100644 --- a/libpurple/protocols/jabber/caps.c +++ b/libpurple/protocols/jabber/caps.c @@ -51,7 +51,7 @@ static guint jabber_caps_hash(gconstpointer key) { const JabberCapsKey *name = key; guint nodehash = g_str_hash(name->node); guint verhash = g_str_hash(name->ver); - + return nodehash ^ verhash; } @@ -77,7 +77,7 @@ static void jabber_caps_destroy_value(gpointer value) { g_free(id->type); g_free(id->name); g_free(id); - + valuestruct->identities = g_list_delete_link(valuestruct->identities,valuestruct->identities); } while(valuestruct->features) { @@ -96,7 +96,7 @@ static void jabber_caps_ext_destroy_value(gpointer value) { g_free(id->type); g_free(id->name); g_free(id); - + valuestruct->identities = g_list_delete_link(valuestruct->identities,valuestruct->identities); } while(valuestruct->features) { @@ -124,7 +124,7 @@ static void jabber_caps_load(void) { xmlnode_free(capsdata); return; } - + for(client = capsdata->child; client; client = client->next) { if(client->type != XMLNODE_TYPE_TAG) continue; @@ -147,20 +147,20 @@ static void jabber_caps_load(void) { const char *category = xmlnode_get_attrib(child, "category"); const char *type = xmlnode_get_attrib(child, "type"); const char *name = xmlnode_get_attrib(child, "name"); - + JabberCapsIdentity *id = g_new0(JabberCapsIdentity, 1); id->category = g_strdup(category); id->type = g_strdup(type); id->name = g_strdup(name); - + value->identities = g_list_append(value->identities,id); } else if(!strcmp(child->name,"ext")) { const char *identifier = xmlnode_get_attrib(child, "identifier"); if(identifier) { xmlnode *extchild; - + JabberCapsValueExt *extvalue = g_new0(JabberCapsValueExt, 1); - + for(extchild = child->child; extchild; extchild = extchild->next) { if(extchild->type != XMLNODE_TYPE_TAG) continue; @@ -173,12 +173,12 @@ static void jabber_caps_load(void) { const char *category = xmlnode_get_attrib(extchild, "category"); const char *type = xmlnode_get_attrib(extchild, "type"); const char *name = xmlnode_get_attrib(extchild, "name"); - + JabberCapsIdentity *id = g_new0(JabberCapsIdentity, 1); id->category = g_strdup(category); id->type = g_strdup(type); id->name = g_strdup(name); - + extvalue->identities = g_list_append(extvalue->identities,id); } } @@ -226,7 +226,7 @@ static void jabber_caps_store_client(gpointer key, gpointer value, gpointer user xmlnode_set_attrib(client,"node",clientinfo->node); xmlnode_set_attrib(client,"ver",clientinfo->ver); - + for(iter = props->identities; iter; iter = g_list_next(iter)) { JabberCapsIdentity *id = iter->data; xmlnode *identity = xmlnode_new_child(client, "identity"); @@ -241,7 +241,7 @@ static void jabber_caps_store_client(gpointer key, gpointer value, gpointer user xmlnode *feature = xmlnode_new_child(client, "feature"); xmlnode_set_attrib(feature, "var", feat); } - + g_hash_table_foreach(props->ext,jabber_caps_store_ext,client); } @@ -281,20 +281,20 @@ static JabberCapsClientInfo *jabber_caps_collect_info(const char *node, const ch newid->category = g_strdup(id->category); newid->type = g_strdup(id->type); newid->name = g_strdup(id->name); - + result->identities = g_list_append(result->identities,newid); } for(iter = caps->features; iter; iter = g_list_next(iter)) { const char *feat = iter->data; char *newfeat = g_strdup(feat); - + result->features = g_list_append(result->features,newfeat); } - + for(iter = ext; iter; iter = g_list_next(iter)) { const char *extname = iter->data; JabberCapsValueExt *extinfo = g_hash_table_lookup(caps->ext,extname); - + if(extinfo) { GList *iter2; for(iter2 = extinfo->identities; iter2; iter2 = g_list_next(iter2)) { @@ -303,13 +303,13 @@ static JabberCapsClientInfo *jabber_caps_collect_info(const char *node, const ch newid->category = g_strdup(id->category); newid->type = g_strdup(id->type); newid->name = g_strdup(id->name); - + result->identities = g_list_append(result->identities,newid); } for(iter2 = extinfo->features; iter2; iter2 = g_list_next(iter2)) { const char *feat = iter2->data; char *newfeat = g_strdup(feat); - + result->features = g_list_append(result->features,newfeat); } } @@ -326,23 +326,23 @@ void jabber_caps_free_clientinfo(JabberCapsClientInfo *clientinfo) { g_free(id->type); g_free(id->name); g_free(id); - + clientinfo->identities = g_list_delete_link(clientinfo->identities,clientinfo->identities); } while(clientinfo->features) { char *feat = clientinfo->features->data; g_free(feat); - + clientinfo->features = g_list_delete_link(clientinfo->features,clientinfo->features); } - + g_free(clientinfo); } typedef struct _jabber_caps_cbplususerdata { jabber_caps_get_info_cb cb; gpointer user_data; - + char *who; char *node; char *ver; diff --git a/libpurple/protocols/jabber/chat.c b/libpurple/protocols/jabber/chat.c index 46c9f96ed3..4c2a644b02 100644 --- a/libpurple/protocols/jabber/chat.c +++ b/libpurple/protocols/jabber/chat.c @@ -353,7 +353,7 @@ char *jabber_chat_buddy_real_name(PurpleConnection *gc, int id, const char *who) jcm = g_hash_table_lookup(chat->members, who); if (jcm != NULL && jcm->jid) return g_strdup(jcm->jid); - + return g_strdup_printf("%s@%s/%s", chat->room, chat->server, who); } @@ -685,7 +685,7 @@ void jabber_chat_part(JabberChat *chat, const char *msg) xmlnode_insert_data(status, msg, -1); } jabber_send(chat->js, presence); - + xmlnode_free(presence); g_free(room_jid); } @@ -811,7 +811,7 @@ PurpleRoomlist *jabber_roomlist_get_list(PurpleConnection *gc) FALSE, FALSE, NULL, _("Find Rooms"), PURPLE_CALLBACK(roomlist_ok_cb), _("Cancel"), PURPLE_CALLBACK(roomlist_cancel_cb), - purple_connection_get_account(gc), NULL, NULL, + purple_connection_get_account(gc), NULL, NULL, js); return js->roomlist; @@ -1033,7 +1033,7 @@ void jabber_chat_disco_traffic(JabberChat *chat) iq = jabber_iq_new_query(chat->js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#info"); - xmlnode_set_attrib(iq->node, "to", room_jid); + xmlnode_set_attrib(iq->node, "to", room_jid); query = xmlnode_get_child(iq->node, "query"); diff --git a/libpurple/protocols/jabber/data.c b/libpurple/protocols/jabber/data.c index 2064f0a1b8..ba1d91ba33 100644 --- a/libpurple/protocols/jabber/data.c +++ b/libpurple/protocols/jabber/data.c @@ -3,17 +3,17 @@ * 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 Library 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 02110-1301, USA */ - + #include <stdlib.h> #include <glib.h> #include <string.h> @@ -71,7 +71,7 @@ jabber_data_create_from_xml(xmlnode *tag) data->cid = g_strdup(xmlnode_get_attrib(tag, "cid")); data->type = g_strdup(xmlnode_get_attrib(tag, "type")); - + raw_data = xmlnode_get_data(tag); data->data = purple_base64_decode(raw_data, &size); data->size = size; @@ -176,7 +176,7 @@ const JabberData * jabber_data_find_remote_by_cid(const gchar *cid) { purple_debug_info("jabber", "lookup remote smiley with cid = %s\n", cid); - + return g_hash_table_lookup(remote_data_by_cid, cid); } @@ -186,7 +186,7 @@ jabber_data_associate_local(JabberData *data, const gchar *alt) purple_debug_info("jabber", "associating local smiley\n alt = %s, cid = %s\n", alt, jabber_data_get_cid(data)); g_hash_table_insert(local_data_by_alt, g_strdup(alt), data); - g_hash_table_insert(local_data_by_cid, g_strdup(jabber_data_get_cid(data)), + g_hash_table_insert(local_data_by_cid, g_strdup(jabber_data_get_cid(data)), data); } @@ -195,7 +195,7 @@ jabber_data_associate_remote(JabberData *data) { purple_debug_info("jabber", "associating remote smiley, cid = %s\n", jabber_data_get_cid(data)); - g_hash_table_insert(remote_data_by_cid, g_strdup(jabber_data_get_cid(data)), + g_hash_table_insert(remote_data_by_cid, g_strdup(jabber_data_get_cid(data)), data); } diff --git a/libpurple/protocols/jabber/data.h b/libpurple/protocols/jabber/data.h index 40698de730..5134de2777 100644 --- a/libpurple/protocols/jabber/data.h +++ b/libpurple/protocols/jabber/data.h @@ -3,17 +3,17 @@ * 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 Library 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 02110-1301, USA */ - + #ifndef JABBER_DATA_H #define JABBER_DATA_H diff --git a/libpurple/protocols/jabber/disco.c b/libpurple/protocols/jabber/disco.c index 71f87cffa6..85e8524d67 100644 --- a/libpurple/protocols/jabber/disco.c +++ b/libpurple/protocols/jabber/disco.c @@ -132,9 +132,7 @@ void jabber_disco_info_parse(JabberStream *js, xmlnode *packet) { SUPPORT_FEATURE("http://jabber.org/protocol/bytestreams") SUPPORT_FEATURE("http://jabber.org/protocol/disco#info") SUPPORT_FEATURE("http://jabber.org/protocol/disco#items") -#if 0 - SUPPORT_FEATURE("http://jabber.org/protocol/ibb") -#endif + SUPPORT_FEATURE("http://jabber.org/protocol/ibb"); SUPPORT_FEATURE("http://jabber.org/protocol/muc") SUPPORT_FEATURE("http://jabber.org/protocol/muc#user") SUPPORT_FEATURE("http://jabber.org/protocol/si") @@ -142,7 +140,7 @@ void jabber_disco_info_parse(JabberStream *js, xmlnode *packet) { SUPPORT_FEATURE("http://jabber.org/protocol/xhtml-im") SUPPORT_FEATURE("urn:xmpp:ping") SUPPORT_FEATURE("http://www.xmpp.org/extensions/xep-0199.html#ns") - + if(!node) { /* non-caps disco#info, add all enabled extensions */ GList *features; for(features = jabber_features; features; features = features->next) { @@ -168,7 +166,7 @@ void jabber_disco_info_parse(JabberStream *js, xmlnode *packet) { } else if(node[pos] != CAPS0115_NODE[pos]) break; } - + if(ext != NULL) { /* look for that ext */ GList *features; @@ -183,14 +181,14 @@ void jabber_disco_info_parse(JabberStream *js, xmlnode *packet) { ext = NULL; } } - + if(ext == NULL) { xmlnode *error, *inf; - + /* XXX: gross hack, implement jabber_iq_set_type or something */ xmlnode_set_attrib(iq->node, "type", "error"); iq->type = JABBER_IQ_ERROR; - + error = xmlnode_new_child(query, "error"); xmlnode_set_attrib(error, "code", "404"); xmlnode_set_attrib(error, "type", "cancel"); @@ -273,6 +271,10 @@ void jabber_disco_info_parse(JabberStream *js, xmlnode *packet) { else if(!strcmp(var, "http://jabber.org/protocol/commands")) { capabilities |= JABBER_CAP_ADHOC; } + else if(!strcmp(var, "http://jabber.org/protocol/ibb")) { + purple_debug_info("jabber", "remote supports IBB\n"); + capabilities |= JABBER_CAP_IBB; + } } } @@ -316,7 +318,7 @@ void jabber_disco_items_parse(JabberStream *js, xmlnode *packet) { if(type && !strcmp(type, "get")) { JabberIq *iq = jabber_iq_new_query(js, JABBER_IQ_RESULT, "http://jabber.org/protocol/disco#items"); - + /* preserve node */ xmlnode *iq_query = xmlnode_get_child_with_namespace(iq->node,"query","http://jabber.org/protocol/disco#items"); if(iq_query) { diff --git a/libpurple/protocols/jabber/google.c b/libpurple/protocols/jabber/google.c index b509096e5f..70c184fa8b 100644 --- a/libpurple/protocols/jabber/google.c +++ b/libpurple/protocols/jabber/google.c @@ -283,6 +283,7 @@ void jabber_google_roster_add_deny(PurpleConnection *gc, const char *who) xmlnode *group; PurpleBuddy *b; JabberBuddy *jb; + const char *balias; js = (JabberStream*)(gc->proto_data); @@ -309,13 +310,14 @@ void jabber_google_roster_add_deny(PurpleConnection *gc, const char *who) g = purple_buddy_get_group(b); group = xmlnode_new_child(item, "group"); - xmlnode_insert_data(group, g->name, -1); + xmlnode_insert_data(group, purple_group_get_name(g), -1); buddies = buddies->next; } + balias = purple_buddy_get_local_buddy_alias(b); xmlnode_set_attrib(item, "jid", who); - xmlnode_set_attrib(item, "name", b->alias ? b->alias : ""); + xmlnode_set_attrib(item, "name", balias ? balias : ""); xmlnode_set_attrib(item, "gr:t", "B"); xmlnode_set_attrib(query, "xmlns:gr", "google:roster"); xmlnode_set_attrib(query, "gr:ext", "2"); @@ -348,6 +350,7 @@ void jabber_google_roster_rem_deny(PurpleConnection *gc, const char *who) xmlnode *item; xmlnode *group; PurpleBuddy *b; + const char *balias; g_return_if_fail(gc != NULL); g_return_if_fail(who != NULL); @@ -357,7 +360,7 @@ void jabber_google_roster_rem_deny(PurpleConnection *gc, const char *who) if (!js || !js->server_caps & JABBER_CAP_GOOGLE_ROSTER) return; - buddies = purple_find_buddies(js->gc->account, who); + buddies = purple_find_buddies(purple_connection_get_account(js->gc), who); if(!buddies) return; @@ -375,13 +378,14 @@ void jabber_google_roster_rem_deny(PurpleConnection *gc, const char *who) g = purple_buddy_get_group(b); group = xmlnode_new_child(item, "group"); - xmlnode_insert_data(group, g->name, -1); + xmlnode_insert_data(group, purple_group_get_name(g), -1); buddies = buddies->next; } + balias = purple_buddy_get_local_buddy_alias(b); xmlnode_set_attrib(item, "jid", who); - xmlnode_set_attrib(item, "name", b->alias ? b->alias : ""); + xmlnode_set_attrib(item, "name", balias ? balias : ""); xmlnode_set_attrib(query, "xmlns:gr", "google:roster"); xmlnode_set_attrib(query, "gr:ext", "2"); diff --git a/libpurple/protocols/jabber/ibb.c b/libpurple/protocols/jabber/ibb.c new file mode 100644 index 0000000000..2efebeda8c --- /dev/null +++ b/libpurple/protocols/jabber/ibb.c @@ -0,0 +1,521 @@ +/* + * 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 Library 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 02110-1301, USA + */ + +#include "internal.h" +#include "ibb.h" +#include "debug.h" +#include "xmlnode.h" + +#define JABBER_IBB_SESSION_DEFAULT_BLOCK_SIZE 4096 + +static GHashTable *jabber_ibb_sessions = NULL; +static GList *open_handlers = NULL; + +JabberIBBSession * +jabber_ibb_session_create(JabberStream *js, const gchar *sid, const gchar *who, + gpointer user_data) +{ + JabberIBBSession *sess = g_new0(JabberIBBSession, 1); + sess->js = js; + if (sid) { + sess->sid = g_strdup(sid); + } else { + sess->sid = jabber_get_next_id(js); + } + sess->who = g_strdup(who); + sess->block_size = JABBER_IBB_SESSION_DEFAULT_BLOCK_SIZE; + sess->state = JABBER_IBB_SESSION_NOT_OPENED; + sess->user_data = user_data; + + g_hash_table_insert(jabber_ibb_sessions, sess->sid, sess); + + return sess; +} + +JabberIBBSession * +jabber_ibb_session_create_from_xmlnode(JabberStream *js, xmlnode *packet, + gpointer user_data) +{ + JabberIBBSession *sess = NULL; + xmlnode *open = xmlnode_get_child_with_namespace(packet, "open", + XEP_0047_NAMESPACE); + const gchar *sid = xmlnode_get_attrib(open, "sid"); + const gchar *block_size = xmlnode_get_attrib(open, "block-size"); + + if (!open) { + return NULL; + } + + if (!sid || !block_size) { + purple_debug_error("jabber", + "IBB session open tag requires sid and block-size attributes\n"); + g_free(sess); + return NULL; + } + + sess = jabber_ibb_session_create(js, sid, + xmlnode_get_attrib(packet, "from"), user_data); + sess->id = g_strdup(xmlnode_get_attrib(packet, "id")); + sess->block_size = atoi(block_size); + /* if we create a session from an incoming <open/> request, it means the + session is immediatly open... */ + sess->state = JABBER_IBB_SESSION_OPENED; + + return sess; +} + +void +jabber_ibb_session_destroy(JabberIBBSession *sess) +{ + purple_debug_info("jabber", "IBB: destroying session %p %s\n", sess, + sess->sid); + + if (jabber_ibb_session_get_state(sess) == JABBER_IBB_SESSION_OPENED) { + jabber_ibb_session_close(sess); + } + + if (sess->last_iq_id) { + purple_debug_info("jabber", "IBB: removing callback for <iq/> %s\n", + sess->last_iq_id); + jabber_iq_remove_callback_by_id(jabber_ibb_session_get_js(sess), + sess->last_iq_id); + g_free(sess->last_iq_id); + sess->last_iq_id = NULL; + } + + g_hash_table_remove(jabber_ibb_sessions, sess->sid); + g_free(sess->id); + g_free(sess->sid); + g_free(sess->who); + g_free(sess); +} + +const gchar * +jabber_ibb_session_get_sid(const JabberIBBSession *sess) +{ + return sess->sid; +} + +JabberStream * +jabber_ibb_session_get_js(JabberIBBSession *sess) +{ + return sess->js; +} + +const gchar * +jabber_ibb_session_get_who(const JabberIBBSession *sess) +{ + return sess->who; +} + +guint16 +jabber_ibb_session_get_send_seq(const JabberIBBSession *sess) +{ + return sess->send_seq; +} + +guint16 +jabber_ibb_session_get_recv_seq(const JabberIBBSession *sess) +{ + return sess->recv_seq; +} + +JabberIBBSessionState +jabber_ibb_session_get_state(const JabberIBBSession *sess) +{ + return sess->state; +} + +gsize +jabber_ibb_session_get_block_size(const JabberIBBSession *sess) +{ + return sess->block_size; +} + +void +jabber_ibb_session_set_block_size(JabberIBBSession *sess, gsize size) +{ + if (jabber_ibb_session_get_state(sess) == JABBER_IBB_SESSION_NOT_OPENED) { + sess->block_size = size; + } else { + purple_debug_error("jabber", + "Can't set block size on an open IBB session\n"); + } +} + +gpointer +jabber_ibb_session_get_user_data(JabberIBBSession *sess) +{ + return sess->user_data; +} + +void +jabber_ibb_session_set_opened_callback(JabberIBBSession *sess, + JabberIBBOpenedCallback *cb) +{ + sess->opened_cb = cb; +} + +void +jabber_ibb_session_set_data_sent_callback(JabberIBBSession *sess, + JabberIBBSentCallback *cb) +{ + sess->data_sent_cb = cb; +} + +void +jabber_ibb_session_set_closed_callback(JabberIBBSession *sess, + JabberIBBClosedCallback *cb) +{ + sess->closed_cb = cb; +} + +void +jabber_ibb_session_set_data_received_callback(JabberIBBSession *sess, + JabberIBBDataCallback *cb) +{ + sess->data_received_cb = cb; +} + +void +jabber_ibb_session_set_error_callback(JabberIBBSession *sess, + JabberIBBErrorCallback *cb) +{ + sess->error_cb = cb; +} + +static void +jabber_ibb_session_opened_cb(JabberStream *js, xmlnode *packet, gpointer data) +{ + JabberIBBSession *sess = (JabberIBBSession *) data; + + if (strcmp(xmlnode_get_attrib(packet, "type"), "error") == 0) { + sess->state = JABBER_IBB_SESSION_ERROR; + } else { + sess->state = JABBER_IBB_SESSION_OPENED; + } + + if (sess->opened_cb) { + sess->opened_cb(sess); + } +} + +void +jabber_ibb_session_open(JabberIBBSession *sess) +{ + if (jabber_ibb_session_get_state(sess) != JABBER_IBB_SESSION_NOT_OPENED) { + purple_debug_error("jabber", + "jabber_ibb_session called on an already open stream\n"); + } else { + JabberIq *set = jabber_iq_new(sess->js, JABBER_IQ_SET); + xmlnode *open = xmlnode_new("open"); + gchar block_size[10]; + + xmlnode_set_attrib(set->node, "to", jabber_ibb_session_get_who(sess)); + xmlnode_set_namespace(open, XEP_0047_NAMESPACE); + xmlnode_set_attrib(open, "sid", jabber_ibb_session_get_sid(sess)); + g_snprintf(block_size, sizeof(block_size), "%" G_GSIZE_FORMAT, + jabber_ibb_session_get_block_size(sess)); + xmlnode_set_attrib(open, "block-size", block_size); + xmlnode_insert_child(set->node, open); + + jabber_iq_set_callback(set, jabber_ibb_session_opened_cb, sess); + + jabber_iq_send(set); + } +} + +void +jabber_ibb_session_close(JabberIBBSession *sess) +{ + JabberIBBSessionState state = jabber_ibb_session_get_state(sess); + + if (state != JABBER_IBB_SESSION_OPENED && state != JABBER_IBB_SESSION_ERROR) { + purple_debug_error("jabber", + "jabber_ibb_session_close called on a session that has not been" + "opened\n"); + } else { + JabberIq *set = jabber_iq_new(jabber_ibb_session_get_js(sess), + JABBER_IQ_SET); + xmlnode *close = xmlnode_new("close"); + + xmlnode_set_attrib(set->node, "to", jabber_ibb_session_get_who(sess)); + xmlnode_set_namespace(close, XEP_0047_NAMESPACE); + xmlnode_set_attrib(close, "sid", jabber_ibb_session_get_sid(sess)); + xmlnode_insert_child(set->node, close); + jabber_iq_send(set); + sess->state = JABBER_IBB_SESSION_CLOSED; + } +} + +void +jabber_ibb_session_accept(JabberIBBSession *sess) +{ + JabberIq *result = jabber_iq_new(jabber_ibb_session_get_js(sess), + JABBER_IQ_RESULT); + + xmlnode_set_attrib(result->node, "to", jabber_ibb_session_get_who(sess)); + jabber_iq_set_id(result, sess->id); + jabber_iq_send(result); + sess->state = JABBER_IBB_SESSION_OPENED; +} + +static void +jabber_ibb_session_send_acknowledge_cb(JabberStream *js, xmlnode *packet, gpointer data) +{ + JabberIBBSession *sess = (JabberIBBSession *) data; + xmlnode *error = xmlnode_get_child(packet, "error"); + + if (sess) { + /* reset callback */ + if (sess->last_iq_id) { + g_free(sess->last_iq_id); + sess->last_iq_id = NULL; + } + + if (error) { + jabber_ibb_session_close(sess); + sess->state = JABBER_IBB_SESSION_ERROR; + + if (sess->error_cb) { + sess->error_cb(sess); + } + } else { + if (sess->data_sent_cb) { + sess->data_sent_cb(sess); + } + } + } else { + /* the session has gone away, it was probably cancelled */ + purple_debug_info("jabber", + "got response from send data, but IBB session is no longer active\n"); + } +} + +void +jabber_ibb_session_send_data(JabberIBBSession *sess, gconstpointer data, + gsize size) +{ + JabberIBBSessionState state = jabber_ibb_session_get_state(sess); + + purple_debug_info("jabber", "sending data block of %" G_GSIZE_FORMAT " bytes on IBB stream\n", + size); + + if (state != JABBER_IBB_SESSION_OPENED) { + purple_debug_error("jabber", + "trying to send data on a non-open IBB session\n"); + } else if (size > jabber_ibb_session_get_block_size(sess)) { + purple_debug_error("jabber", + "trying to send a too large packet in the IBB session\n"); + } else { + JabberIq *set = jabber_iq_new(jabber_ibb_session_get_js(sess), + JABBER_IQ_SET); + xmlnode *data_element = xmlnode_new("data"); + char *base64 = purple_base64_encode(data, size); + char seq[10]; + g_snprintf(seq, sizeof(seq), "%u", jabber_ibb_session_get_send_seq(sess)); + + xmlnode_set_attrib(set->node, "to", jabber_ibb_session_get_who(sess)); + xmlnode_set_namespace(data_element, XEP_0047_NAMESPACE); + xmlnode_set_attrib(data_element, "sid", jabber_ibb_session_get_sid(sess)); + xmlnode_set_attrib(data_element, "seq", seq); + xmlnode_insert_data(data_element, base64, -1); + + xmlnode_insert_child(set->node, data_element); + + purple_debug_info("jabber", + "IBB: setting send <iq/> callback for session %p %s\n", sess, + sess->sid); + jabber_iq_set_callback(set, jabber_ibb_session_send_acknowledge_cb, sess); + sess->last_iq_id = g_strdup(xmlnode_get_attrib(set->node, "id")); + purple_debug_info("jabber", "IBB: set sess->last_iq_id: %s\n", + sess->last_iq_id); + jabber_iq_send(set); + + g_free(base64); + (sess->send_seq)++; + } +} + +static void +jabber_ibb_send_error_response(JabberStream *js, xmlnode *packet) +{ + JabberIq *result = jabber_iq_new(js, JABBER_IQ_ERROR); + xmlnode *error = xmlnode_new("error"); + xmlnode *item_not_found = xmlnode_new("item-not-found"); + + xmlnode_set_namespace(item_not_found, + "urn:ietf:params:xml:ns:xmpp-stanzas"); + xmlnode_set_attrib(error, "code", "440"); + xmlnode_set_attrib(error, "type", "cancel"); + jabber_iq_set_id(result, xmlnode_get_attrib(packet, "id")); + xmlnode_set_attrib(result->node, "to", + xmlnode_get_attrib(packet, "from")); + xmlnode_insert_child(error, item_not_found); + xmlnode_insert_child(result->node, error); + + jabber_iq_send(result); +} + +void +jabber_ibb_parse(JabberStream *js, xmlnode *packet) +{ + xmlnode *data = xmlnode_get_child_with_namespace(packet, "data", + XEP_0047_NAMESPACE); + xmlnode *close = xmlnode_get_child_with_namespace(packet, "close", + XEP_0047_NAMESPACE); + xmlnode *open = xmlnode_get_child_with_namespace(packet, "open", + XEP_0047_NAMESPACE); + const gchar *sid = + data ? xmlnode_get_attrib(data, "sid") : + close ? xmlnode_get_attrib(close, "sid") : NULL; + JabberIBBSession *sess = + sid ? g_hash_table_lookup(jabber_ibb_sessions, sid) : NULL; + const gchar *who = xmlnode_get_attrib(packet, "from"); + + if (sess) { + + if (strcmp(who, jabber_ibb_session_get_who(sess)) != 0) { + /* the iq comes from a different JID than the remote JID of the + session, ignore it */ + purple_debug_error("jabber", + "Got IBB iq from wrong JID, ignoring\n"); + } else if (data) { + const gchar *seq_attr = xmlnode_get_attrib(data, "seq"); + guint16 seq = (seq_attr ? atoi(seq_attr) : 0); + + /* reject the data, and set the session in error if we get an + out-of-order packet */ + if (seq_attr && seq == jabber_ibb_session_get_recv_seq(sess)) { + /* sequence # is the expected... */ + JabberIq *result = jabber_iq_new(js, JABBER_IQ_RESULT); + + jabber_iq_set_id(result, xmlnode_get_attrib(packet, "id")); + xmlnode_set_attrib(result->node, "to", + xmlnode_get_attrib(packet, "from")); + + if (sess->data_received_cb) { + gchar *base64 = xmlnode_get_data(data); + gsize size; + gpointer rawdata = purple_base64_decode(base64, &size); + + g_free(base64); + + if (rawdata) { + purple_debug_info("jabber", + "got %" G_GSIZE_FORMAT " bytes of data on IBB stream\n", + size); + if (size > jabber_ibb_session_get_block_size(sess)) { + purple_debug_error("jabber", + "IBB: received a too large packet\n"); + if (sess->error_cb) + sess->error_cb(sess); + g_free(rawdata); + return; + } else { + purple_debug_info("jabber", + "calling IBB callback for received data\n"); + sess->data_received_cb(sess, rawdata, size); + } + g_free(rawdata); + } else { + purple_debug_error("jabber", + "IBB: invalid BASE64 data received\n"); + if (sess->error_cb) + sess->error_cb(sess); + return; + + } + } + + (sess->recv_seq)++; + jabber_iq_send(result); + + } else { + purple_debug_error("jabber", + "Received an out-of-order/invalid IBB packet\n"); + sess->state = JABBER_IBB_SESSION_ERROR; + + if (sess->error_cb) { + sess->error_cb(sess); + } + } + } else if (close) { + sess->state = JABBER_IBB_SESSION_CLOSED; + purple_debug_info("jabber", "IBB: received close\n"); + + if (sess->closed_cb) { + purple_debug_info("jabber", "IBB: calling closed handler\n"); + sess->closed_cb(sess); + } + + } else { + /* this should never happen */ + purple_debug_error("jabber", "Received bogus iq for IBB session\n"); + } + } else if (open) { + JabberIq *result; + const GList *iterator; + + /* run all open handlers registered until one returns true */ + for (iterator = open_handlers ; iterator ; + iterator = g_list_next(iterator)) { + JabberIBBOpenHandler *handler = iterator->data; + + if (handler(js, packet)) { + result = jabber_iq_new(js, JABBER_IQ_RESULT); + xmlnode_set_attrib(result->node, "to", + xmlnode_get_attrib(packet, "from")); + jabber_iq_set_id(result, xmlnode_get_attrib(packet, "id")); + jabber_iq_send(result); + return; + } + } + /* no open callback returned success, reject */ + jabber_ibb_send_error_response(js, packet); + } else { + /* send error reply */ + jabber_ibb_send_error_response(js, packet); + } +} + +void +jabber_ibb_register_open_handler(JabberIBBOpenHandler *cb) +{ + open_handlers = g_list_append(open_handlers, cb); +} + +void +jabber_ibb_unregister_open_handler(JabberIBBOpenHandler *cb) +{ + open_handlers = g_list_remove(open_handlers, cb); +} + +void +jabber_ibb_init(void) +{ + jabber_ibb_sessions = g_hash_table_new(g_str_hash, g_str_equal); +} + +void +jabber_ibb_uninit(void) +{ + g_hash_table_destroy(jabber_ibb_sessions); + g_list_free(open_handlers); + jabber_ibb_sessions = NULL; + open_handlers = NULL; +} + diff --git a/libpurple/protocols/jabber/ibb.h b/libpurple/protocols/jabber/ibb.h new file mode 100644 index 0000000000..b06be47736 --- /dev/null +++ b/libpurple/protocols/jabber/ibb.h @@ -0,0 +1,119 @@ +/* + * 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 Library 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 02110-1301, USA + */ + +#ifndef _PURPLE_JABBER_IBB_H_ +#define _PURPLE_JABBER_IBB_H_ + +#include "jabber.h" +#include "iq.h" + +#define XEP_0047_NAMESPACE "http://jabber.org/protocol/ibb" + +typedef struct _JabberIBBSession JabberIBBSession; + +typedef void +(JabberIBBDataCallback)(JabberIBBSession *, const gpointer data, gsize size); + +typedef void (JabberIBBOpenedCallback)(JabberIBBSession *); +typedef void (JabberIBBClosedCallback)(JabberIBBSession *); +typedef void (JabberIBBErrorCallback)(JabberIBBSession *); +typedef void (JabberIBBSentCallback)(JabberIBBSession *); + +typedef gboolean (JabberIBBOpenHandler)(JabberStream *js, xmlnode *packet); + +typedef enum { + JABBER_IBB_SESSION_NOT_OPENED, + JABBER_IBB_SESSION_OPENED, + JABBER_IBB_SESSION_CLOSED, + JABBER_IBB_SESSION_ERROR +} JabberIBBSessionState; + +struct _JabberIBBSession { + JabberStream *js; + gchar *who; + gchar *sid; + gchar *id; + guint16 send_seq; + guint16 recv_seq; + gsize block_size; + + /* session state */ + JabberIBBSessionState state; + + /* user data (f.ex. a handle to a PurpleXfer) */ + gpointer user_data; + + /* callbacks */ + JabberIBBOpenedCallback *opened_cb; + JabberIBBSentCallback *data_sent_cb; + JabberIBBClosedCallback *closed_cb; + /* callback for receiving data */ + JabberIBBDataCallback *data_received_cb; + JabberIBBErrorCallback *error_cb; + + /* store the last sent IQ (to permit cancel of callback) */ + gchar *last_iq_id; +}; + +JabberIBBSession *jabber_ibb_session_create(JabberStream *js, const gchar *sid, + const gchar *who, gpointer user_data); +JabberIBBSession *jabber_ibb_session_create_from_xmlnode(JabberStream *js, + xmlnode *packet, gpointer user_data); + +void jabber_ibb_session_destroy(JabberIBBSession *sess); + +void jabber_ibb_session_set_opened_callback(JabberIBBSession *sess, + JabberIBBOpenedCallback *cb); +void jabber_ibb_session_set_data_sent_callback(JabberIBBSession *sess, + JabberIBBSentCallback *cb); +void jabber_ibb_session_set_closed_callback(JabberIBBSession *sess, + JabberIBBClosedCallback *cb); +void jabber_ibb_session_set_data_received_callback(JabberIBBSession *sess, + JabberIBBDataCallback *cb); +void jabber_ibb_session_set_error_callback(JabberIBBSession *sess, + JabberIBBErrorCallback *cb); + +void jabber_ibb_session_open(JabberIBBSession *sess); +void jabber_ibb_session_close(JabberIBBSession *sess); +void jabber_ibb_session_accept(JabberIBBSession *sess); +void jabber_ibb_session_send_data(JabberIBBSession *sess, gconstpointer data, + gsize size); + +const gchar *jabber_ibb_session_get_sid(const JabberIBBSession *sess); +JabberStream *jabber_ibb_session_get_js(JabberIBBSession *sess); +const gchar *jabber_ibb_session_get_who(const JabberIBBSession *sess); + +guint16 jabber_ibb_session_get_send_seq(const JabberIBBSession *sess); +guint16 jabber_ibb_session_get_recv_seq(const JabberIBBSession *sess); + +JabberIBBSessionState jabber_ibb_session_get_state(const JabberIBBSession *sess); + +gsize jabber_ibb_session_get_block_size(const JabberIBBSession *sess); +void jabber_ibb_session_set_block_size(JabberIBBSession *sess, gsize size); + +gpointer jabber_ibb_session_get_user_data(JabberIBBSession *sess); + +/* handle incoming packet */ +void jabber_ibb_parse(JabberStream *js, xmlnode *packet); + +/* add a handler for open session */ +void jabber_ibb_register_open_handler(JabberIBBOpenHandler *cb); +void jabber_ibb_unregister_open_handler(JabberIBBOpenHandler *cb); + +void jabber_ibb_init(void); +void jabber_ibb_uninit(void); + +#endif /* _PURPLE_JABBER_IBB_H_ */ diff --git a/libpurple/protocols/jabber/iq.c b/libpurple/protocols/jabber/iq.c index 11442ed5a5..33126a41ed 100644 --- a/libpurple/protocols/jabber/iq.c +++ b/libpurple/protocols/jabber/iq.c @@ -34,6 +34,7 @@ #include "ping.h" #include "adhoccommands.h" #include "data.h" +#include "ibb.h" #ifdef _WIN32 #include "utsname.h" @@ -393,6 +394,13 @@ void jabber_iq_parse(JabberStream *js, xmlnode *packet) return; } + if (xmlnode_get_child_with_namespace(packet, "data", XEP_0047_NAMESPACE) + || xmlnode_get_child_with_namespace(packet, "close", XEP_0047_NAMESPACE) + || xmlnode_get_child_with_namespace(packet, "open", XEP_0047_NAMESPACE)) { + jabber_ibb_parse(js, packet); + return; + } + /* If we get here, send the default error reply mandated by XMPP-CORE */ if(!strcmp(type, "set") || !strcmp(type, "get")) { JabberIq *iq = jabber_iq_new(js, JABBER_IQ_ERROR); diff --git a/libpurple/protocols/jabber/jabber.c b/libpurple/protocols/jabber/jabber.c index 6baabdbf19..8c1abf3e97 100644 --- a/libpurple/protocols/jabber/jabber.c +++ b/libpurple/protocols/jabber/jabber.c @@ -185,7 +185,7 @@ static void jabber_stream_features_parse(JabberStream *js, xmlnode *packet) { if(xmlnode_get_child(packet, "starttls")) { if(jabber_process_starttls(js, packet)) - + return; } else if(purple_account_get_bool(js->gc->account, "require_tls", FALSE) && !js->gsc) { purple_connection_error_reason (js->gc, @@ -468,10 +468,10 @@ void jabber_keepalive(PurpleConnection *gc) if (js->keepalive_timeout == -1) { JabberIq *iq = jabber_iq_new(js, JABBER_IQ_GET); - + xmlnode *ping = xmlnode_new_child(iq->node, "ping"); xmlnode_set_namespace(ping, "urn:xmpp:ping"); - + js->keepalive_timeout = purple_timeout_add_seconds(120, (GSourceFunc)(jabber_pong_timeout), gc); jabber_iq_set_callback(iq, jabber_pong_cb, NULL); jabber_iq_send(iq); @@ -579,7 +579,7 @@ jabber_login_callback_ssl(gpointer data, PurpleSslConnection *gsc, jabber_send_raw(js, "<?xml version='1.0' ?>", -1); jabber_stream_set_state(js, JABBER_STREAM_INITIALIZING); purple_ssl_input_add(gsc, jabber_recv_cb_ssl, gc); - + /* Tell the app that we're doing encryption */ jabber_stream_set_state(js, JABBER_STREAM_INITIALIZING_ENCRYPTION); } @@ -745,14 +745,14 @@ jabber_login(PurpleAccount *account) _("Invalid XMPP ID")); return; } - + if (!js->user->domain || *(js->user->domain) == '\0') { purple_connection_error_reason (gc, PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, _("Invalid XMPP ID. Domain must be set.")); return; } - + if((my_jb = jabber_buddy_find(js, purple_account_get_username(account), TRUE))) my_jb->subscription |= JABBER_SUB_BOTH; @@ -862,10 +862,10 @@ jabber_unregistration_result_cb(JabberStream *js, xmlnode *packet, gpointer data g_free(buf); } else { char *msg = jabber_parse_error(js, packet, NULL); - + if(!msg) msg = g_strdup(_("Unknown Error")); - + purple_notify_error(NULL, _("Unregistration Failed"), _("Unregistration Failed"), msg); g_free(msg); @@ -908,9 +908,9 @@ jabber_register_cb(JabberRegisterCBData *cbdata, PurpleRequestFields *fields) if (cbdata->who) xmlnode_set_attrib(iq->node,"to",cbdata->who); xmlnode_new_child(query, "remove"); - + jabber_iq_set_callback(iq, jabber_unregistration_result_cb, cbdata->who); - + jabber_iq_send(iq); g_free(cbdata); return; @@ -1040,7 +1040,7 @@ void jabber_register_parse(JabberStream *js, xmlnode *packet) return; } } - + if((x = xmlnode_get_child_with_namespace(query, "x", "jabber:x:data"))) { jabber_x_data_request(js, x, jabber_register_x_data_cb, g_strdup(from)); return; @@ -1191,7 +1191,7 @@ void jabber_register_start(JabberStream *js) void jabber_register_gateway(JabberStream *js, const char *gateway) { JabberIq *iq; - + iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:register"); xmlnode_set_attrib(iq->node, "to", gateway); jabber_iq_send(iq); @@ -1266,7 +1266,7 @@ static void jabber_unregister_account_iq_cb(JabberStream *js, xmlnode *packet, g const char *type = xmlnode_get_attrib(packet,"type"); if(!strcmp(type,"error")) { char *msg = jabber_parse_error(js, packet, NULL); - + purple_notify_error(js->gc, _("Error unregistering account"), _("Error unregistering account"), msg); g_free(msg); @@ -1300,7 +1300,7 @@ static void jabber_unregister_account_cb(JabberStream *js) { void jabber_unregister_account(PurpleAccount *account, PurpleAccountUnregistrationCb cb, void *user_data) { PurpleConnection *gc = purple_account_get_connection(account); JabberStream *js; - + if(gc->state != PURPLE_CONNECTED) { if(gc->state != PURPLE_CONNECTING) jabber_login(account); @@ -1310,7 +1310,7 @@ void jabber_unregister_account(PurpleAccount *account, PurpleAccountUnregistrati js->unregistration_user_data = user_data; return; } - + js = gc->proto_data; if (js->unregistration) { @@ -1617,10 +1617,10 @@ void jabber_add_feature(const char *shortname, const char *namespace, JabberFeat feat->shortname = g_strdup(shortname); feat->namespace = g_strdup(namespace); feat->is_enabled = cb; - + /* try to remove just in case it already exists in the list */ jabber_remove_feature(shortname); - + jabber_features = g_list_append(jabber_features, feat); } @@ -1631,7 +1631,7 @@ void jabber_remove_feature(const char *shortname) { if(!strcmp(feat->shortname, shortname)) { g_free(feat->shortname); g_free(feat->namespace); - + g_free(feature->data); jabber_features = g_list_delete_link(jabber_features, feature); break; @@ -1648,13 +1648,14 @@ const char* jabber_list_emblem(PurpleBuddy *b) { JabberStream *js; JabberBuddy *jb = NULL; + PurpleConnection *gc = purple_account_get_connection(purple_buddy_get_account(b)); - if(!b->account->gc) + if(!gc) return NULL; - js = b->account->gc->proto_data; + js = gc->proto_data; if(js) - jb = jabber_buddy_find(js, b->name, FALSE); + jb = jabber_buddy_find(js, purple_buddy_get_name(b), FALSE); if(!PURPLE_BUDDY_IS_ONLINE(b)) { if(jb && (jb->subscription & JABBER_SUB_PENDING || @@ -1668,9 +1669,11 @@ char *jabber_status_text(PurpleBuddy *b) { char *ret = NULL; JabberBuddy *jb = NULL; - - if (b->account->gc && b->account->gc->proto_data) - jb = jabber_buddy_find(b->account->gc->proto_data, b->name, FALSE); + PurpleAccount *account = purple_buddy_get_account(b); + PurpleConnection *gc = purple_account_get_connection(account); + + if (gc && gc->proto_data) + jb = jabber_buddy_find(gc->proto_data, purple_buddy_get_name(b), FALSE); if(jb && !PURPLE_BUDDY_IS_ONLINE(b) && (jb->subscription & JABBER_SUB_PENDING || !(jb->subscription & JABBER_SUB_TO))) { ret = g_strdup(_("Not Authorized")); @@ -1749,14 +1752,19 @@ jabber_tooltip_add_resource_text(JabberBuddyResource *jbr, void jabber_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full) { JabberBuddy *jb; + PurpleAccount *account; + PurpleConnection *gc; g_return_if_fail(b != NULL); - g_return_if_fail(b->account != NULL); - g_return_if_fail(b->account->gc != NULL); - g_return_if_fail(b->account->gc->proto_data != NULL); - jb = jabber_buddy_find(b->account->gc->proto_data, b->name, - FALSE); + account = purple_buddy_get_account(b); + g_return_if_fail(account != NULL); + + gc = purple_account_get_connection(account); + g_return_if_fail(gc != NULL); + g_return_if_fail(gc->proto_data != NULL); + + jb = jabber_buddy_find(gc->proto_data, purple_buddy_get_name(b), FALSE); if(jb) { JabberBuddyResource *jbr = NULL; @@ -1842,9 +1850,12 @@ GList *jabber_status_types(PurpleAccount *account) PurpleStatusType *type; GList *types = NULL; PurpleValue *priority_value; + PurpleValue *buzz_enabled; priority_value = purple_value_new(PURPLE_TYPE_INT); purple_value_set_int(priority_value, 1); + buzz_enabled = purple_value_new(PURPLE_TYPE_BOOLEAN); + purple_value_set_boolean(buzz_enabled, TRUE); type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE, jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_ONLINE), NULL, TRUE, TRUE, FALSE, @@ -1853,12 +1864,14 @@ GList *jabber_status_types(PurpleAccount *account) "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), - "buzz", _("Allow Buzz"), purple_value_new(PURPLE_TYPE_BOOLEAN), + "buzz", _("Allow Buzz"), buzz_enabled, NULL); types = g_list_append(types, type); priority_value = purple_value_new(PURPLE_TYPE_INT); purple_value_set_int(priority_value, 1); + buzz_enabled = purple_value_new(PURPLE_TYPE_BOOLEAN); + purple_value_set_boolean(buzz_enabled, TRUE); type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE, jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_CHAT), _("Chatty"), TRUE, TRUE, FALSE, @@ -1867,12 +1880,14 @@ GList *jabber_status_types(PurpleAccount *account) "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), - "buzz", _("Allow Buzz"), purple_value_new(PURPLE_TYPE_BOOLEAN), + "buzz", _("Allow Buzz"), buzz_enabled, NULL); types = g_list_append(types, type); priority_value = purple_value_new(PURPLE_TYPE_INT); purple_value_set_int(priority_value, 0); + buzz_enabled = purple_value_new(PURPLE_TYPE_BOOLEAN); + purple_value_set_boolean(buzz_enabled, TRUE); type = purple_status_type_new_with_attrs(PURPLE_STATUS_AWAY, jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_AWAY), NULL, TRUE, TRUE, FALSE, @@ -1881,12 +1896,14 @@ GList *jabber_status_types(PurpleAccount *account) "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), - "buzz", _("Allow Buzz"), purple_value_new(PURPLE_TYPE_BOOLEAN), + "buzz", _("Allow Buzz"), buzz_enabled, NULL); types = g_list_append(types, type); priority_value = purple_value_new(PURPLE_TYPE_INT); purple_value_set_int(priority_value, 0); + buzz_enabled = purple_value_new(PURPLE_TYPE_BOOLEAN); + purple_value_set_boolean(buzz_enabled, TRUE); type = purple_status_type_new_with_attrs(PURPLE_STATUS_EXTENDED_AWAY, jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_XA), NULL, TRUE, TRUE, FALSE, @@ -1895,7 +1912,7 @@ GList *jabber_status_types(PurpleAccount *account) "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), - "buzz", _("Allow Buzz"), purple_value_new(PURPLE_TYPE_BOOLEAN), + "buzz", _("Allow Buzz"), buzz_enabled, NULL); types = g_list_append(types, type); @@ -1909,7 +1926,6 @@ GList *jabber_status_types(PurpleAccount *account) "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), - "buzz", _("Allow Buzz"), purple_value_new(PURPLE_TYPE_BOOLEAN), NULL); types = g_list_append(types, type); @@ -2055,7 +2071,7 @@ GList *jabber_actions(PurplePlugin *plugin, gpointer context) if(js->pep) jabber_pep_init_actions(&m); - + if(js->commands) jabber_adhoc_init_server_commands(js, &m); @@ -2070,19 +2086,24 @@ PurpleChat *jabber_find_blist_chat(PurpleAccount *account, const char *name) if(!(jid = jabber_id_new(name))) return NULL; - for(gnode = purple_get_blist()->root; gnode; gnode = gnode->next) { - for(cnode = gnode->child; cnode; cnode = cnode->next) { + for(gnode = purple_blist_get_root(); gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) { + for(cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) { PurpleChat *chat = (PurpleChat*)cnode; const char *room, *server; + GHashTable *components; if(!PURPLE_BLIST_NODE_IS_CHAT(cnode)) continue; - if(chat->account != account) + if (purple_chat_get_account(chat) != account) continue; - if(!(room = g_hash_table_lookup(chat->components, "room"))) + components = purple_chat_get_components(chat); + if(!(room = g_hash_table_lookup(components, "room"))) continue; - if(!(server = g_hash_table_lookup(chat->components, "server"))) + if(!(server = g_hash_table_lookup(components, "server"))) continue; if(jid->node && jid->domain && @@ -2102,7 +2123,7 @@ void jabber_convo_closed(PurpleConnection *gc, const char *who) JabberID *jid; JabberBuddy *jb; JabberBuddyResource *jbr; - + if(!(jid = jabber_id_new(who))) return; @@ -2363,7 +2384,7 @@ static PurpleCmdRet jabber_cmd_chat_affiliate(PurpleConversation *conv, if (!chat || !args || !args[0] || !args[1]) return PURPLE_CMD_RET_FAILED; - if (strcmp(args[1], "owner") != 0 && + if (strcmp(args[1], "owner") != 0 && strcmp(args[1], "admin") != 0 && strcmp(args[1], "member") != 0 && strcmp(args[1], "outcast") != 0 && @@ -2492,63 +2513,92 @@ static gboolean _jabber_send_buzz(JabberStream *js, const char *username, char * JabberBuddy *jb; JabberBuddyResource *jbr; - GList *iter; + PurpleConnection *gc = js->gc; + PurpleBuddy *buddy = + purple_find_buddy(purple_connection_get_account(gc), username); + const gchar *alias = + buddy ? purple_buddy_get_contact_alias(buddy) : username; if(!username) return FALSE; jb = jabber_buddy_find(js, username, FALSE); if(!jb) { - *error = g_strdup_printf(_("Unable to buzz, because there is nothing known about user %s."), username); + *error = g_strdup_printf(_("Unable to buzz, because there is nothing " + "known about %s."), alias); return FALSE; } jbr = jabber_buddy_find_resource(jb, NULL); - if(!jbr) { - *error = g_strdup_printf(_("Unable to buzz, because user %s might be offline."), username); - return FALSE; - } - - if(!jbr->caps) { - *error = g_strdup_printf(_("Unable to buzz, because there is nothing known about user %s."), username); + if (!jbr) { + *error = g_strdup_printf(_("Unable to buzz, because %s might be offline."), + alias); return FALSE; } - for(iter = jbr->caps->features; iter; iter = g_list_next(iter)) { - if(!strcmp(iter->data, "http://www.xmpp.org/extensions/xep-0224.html#ns")) { - xmlnode *buzz, *msg = xmlnode_new("message"); - gchar *to; + if (jabber_resource_has_capability(jbr, XEP_0224_NAMESPACE)) { + xmlnode *buzz, *msg = xmlnode_new("message"); + gchar *to; - to = g_strdup_printf("%s/%s", username, jbr->name); - xmlnode_set_attrib(msg, "to", to); - g_free(to); + to = g_strdup_printf("%s/%s", username, jbr->name); + xmlnode_set_attrib(msg, "to", to); + g_free(to); - /* avoid offline storage */ - xmlnode_set_attrib(msg, "type", "headline"); + /* avoid offline storage */ + xmlnode_set_attrib(msg, "type", "headline"); - buzz = xmlnode_new_child(msg, "attention"); - xmlnode_set_namespace(buzz, "http://www.xmpp.org/extensions/xep-0224.html#ns"); + buzz = xmlnode_new_child(msg, "attention"); + xmlnode_set_namespace(buzz, XEP_0224_NAMESPACE); - jabber_send(js, msg); - xmlnode_free(msg); + jabber_send(js, msg); + xmlnode_free(msg); - return TRUE; - } + return TRUE; + } else { + *error = g_strdup_printf(_("Unable to buzz, because %s does " + "not support it or do not wish to receive buzzes now."), alias); + return FALSE; } - - *error = g_strdup_printf(_("Unable to buzz, because the user %s does not support it."), username); - return FALSE; } static PurpleCmdRet jabber_cmd_buzz(PurpleConversation *conv, const char *cmd, char **args, char **error, void *data) { JabberStream *js = conv->account->gc->proto_data; + const gchar *who; - if(!args || !args[0]) - return PURPLE_CMD_RET_FAILED; + if (!args || !args[0]) { + /* use the buddy from conversation, if it's a one-to-one conversation */ + if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { + who = purple_conversation_get_name(conv); + } else { + return PURPLE_CMD_RET_FAILED; + } + } else { + who = args[0]; + } + + if (_jabber_send_buzz(js, who, error)) { + const gchar *alias; + gchar *str; + PurpleBuddy *buddy = + purple_find_buddy(purple_connection_get_account(conv->account->gc), + who); + + if (buddy != NULL) + alias = purple_buddy_get_contact_alias(buddy); + else + alias = who; - return _jabber_send_buzz(js, args[0], error) ? PURPLE_CMD_RET_OK : PURPLE_CMD_RET_FAILED; + str = g_strdup_printf(_("Buzzing %s..."), alias); + purple_conversation_write(conv, NULL, str, + PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NOTIFY, time(NULL)); + g_free(str); + + return PURPLE_CMD_RET_OK; + } else { + return PURPLE_CMD_RET_FAILED; + } } GList *jabber_attention_types(PurpleAccount *account) @@ -2661,8 +2711,9 @@ void jabber_register_commands(void) "prpl-jabber", jabber_cmd_ping, _("ping <jid>: Ping a user/component/server."), NULL); - purple_cmd_register("buzz", "s", PURPLE_CMD_P_PRPL, - PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_PRPL_ONLY, + purple_cmd_register("buzz", "w", PURPLE_CMD_P_PRPL, + PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_PRPL_ONLY | + PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", jabber_cmd_buzz, _("buzz: Buzz a user to get their attention"), NULL); } diff --git a/libpurple/protocols/jabber/jabber.h b/libpurple/protocols/jabber/jabber.h index cde48fb592..ea381a30a6 100644 --- a/libpurple/protocols/jabber/jabber.h +++ b/libpurple/protocols/jabber/jabber.h @@ -204,7 +204,7 @@ struct _JabberStream gboolean unregistration; PurpleAccountUnregistrationCb unregistration_cb; void *unregistration_user_data; - + gboolean vcard_fetched; /* does the local server support PEP? */ @@ -212,16 +212,16 @@ struct _JabberStream /* Is Buzz enabled? */ gboolean allowBuzz; - + /* A list of JabberAdHocCommands supported by the server */ GList *commands; - + /* last presence update to check for differences */ JabberBuddyState old_state; char *old_msg; int old_priority; char *old_avatarhash; - + /* same for user tune */ char *old_artist; char *old_title; @@ -229,9 +229,9 @@ struct _JabberStream char *old_uri; int old_length; char *old_track; - + char *certificate_CN; - + /* A purple timeout tag for the keepalive */ int keepalive_timeout; diff --git a/libpurple/protocols/jabber/libxmpp.c b/libpurple/protocols/jabber/libxmpp.c index cc8c408320..46b56c260c 100644 --- a/libpurple/protocols/jabber/libxmpp.c +++ b/libpurple/protocols/jabber/libxmpp.c @@ -44,6 +44,7 @@ #include "usertune.h" #include "caps.h" #include "data.h" +#include "ibb.h" static PurplePluginProtocolInfo prpl_info = { @@ -137,7 +138,7 @@ static gboolean load_plugin(PurplePlugin *plugin) purple_marshal_VOID__POINTER_POINTER, NULL, 2, purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION), purple_value_new_outgoing(PURPLE_TYPE_STRING)); - + return TRUE; } @@ -146,11 +147,13 @@ static gboolean unload_plugin(PurplePlugin *plugin) purple_signal_unregister(plugin, "jabber-receiving-xmlnode"); purple_signal_unregister(plugin, "jabber-sending-xmlnode"); - + purple_signal_unregister(plugin, "jabber-sending-text"); - + jabber_data_uninit(); - + jabber_si_uninit(); + jabber_ibb_uninit(); + return TRUE; } @@ -203,30 +206,30 @@ init_plugin(PurplePlugin *plugin) #endif PurpleAccountUserSplit *split; PurpleAccountOption *option; - + /* Translators: 'domain' is used here in the context of Internet domains, e.g. pidgin.im */ split = purple_account_user_split_new(_("Domain"), NULL, '@'); purple_account_user_split_set_reverse(split, FALSE); prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); - + split = purple_account_user_split_new(_("Resource"), NULL, '/'); purple_account_user_split_set_reverse(split, FALSE); prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); - + option = purple_account_option_bool_new(_("Require SSL/TLS"), "require_tls", FALSE); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); - + option = purple_account_option_bool_new(_("Force old (port 5223) SSL"), "old_ssl", FALSE); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); - + option = purple_account_option_bool_new( _("Allow plaintext auth over unencrypted streams"), "auth_plain_in_clear", FALSE); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); - + option = purple_account_option_int_new(_("Connect port"), "port", 5222); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); @@ -272,21 +275,26 @@ init_plugin(PurplePlugin *plugin) #endif #endif jabber_register_commands(); - + jabber_iq_init(); jabber_pep_init(); - + jabber_tune_init(); jabber_caps_init(); - + jabber_data_init(); - + + + jabber_ibb_init(); + jabber_si_init(); + jabber_add_feature("avatarmeta", AVATARNAMESPACEMETA, jabber_pep_namespace_only_when_pep_enabled_cb); jabber_add_feature("avatardata", AVATARNAMESPACEDATA, jabber_pep_namespace_only_when_pep_enabled_cb); - jabber_add_feature("buzz", "http://www.xmpp.org/extensions/xep-0224.html#ns", + jabber_add_feature("buzz", XEP_0224_NAMESPACE, jabber_buzz_isenabled); jabber_add_feature("bob", XEP_0231_NAMESPACE, jabber_custom_smileys_isenabled); + jabber_add_feature("ibb", XEP_0047_NAMESPACE, NULL); jabber_pep_register_handler("avatar", AVATARNAMESPACEMETA, jabber_buddy_avatar_update_metadata); } diff --git a/libpurple/protocols/jabber/message.c b/libpurple/protocols/jabber/message.c index b0abd03275..ed7fdc9eec 100644 --- a/libpurple/protocols/jabber/message.c +++ b/libpurple/protocols/jabber/message.c @@ -118,7 +118,7 @@ static void handle_chat(JabberMessage *jm) } } serv_got_typing_stopped(jm->js->gc, from); - + } else { serv_got_typing_stopped(jm->js->gc, from); } @@ -138,7 +138,7 @@ static void handle_chat(JabberMessage *jm) g_free(jbr->thread_id); jbr->thread_id = g_strdup(jbr->thread_id); } - + if (jm->js->googletalk && jm->xhtml == NULL) { char *tmp = jm->body; jm->body = jabber_google_format_to_html(jm->body); @@ -289,8 +289,6 @@ static void handle_error(JabberMessage *jm) static void handle_buzz(JabberMessage *jm) { PurpleBuddy *buddy; PurpleAccount *account; - PurpleConversation *c; - char *username; /* Delayed buzz MUST NOT be accepted */ if(jm->delayed) @@ -305,15 +303,8 @@ static void handle_buzz(JabberMessage *jm) { if ((buddy = purple_find_buddy(account, jm->from)) == NULL) return; /* Do not accept buzzes from unknown people */ - c = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, jm->from, account); - if (c == NULL) - c = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, jm->from); - - username = g_markup_escape_text(purple_buddy_get_alias(buddy), -1); /* xmpp only has 1 attention type, so index is 0 */ - purple_prpl_got_attention(jm->js->gc, username, 0); - - g_free(username); + purple_prpl_got_attention(jm->js->gc, jm->from, 0); } /* used internally by the functions below */ @@ -328,14 +319,14 @@ jabber_message_get_refs_from_xmlnode_internal(const xmlnode *message, GHashTable *table) { xmlnode *child; - + for (child = xmlnode_get_child(message, "img") ; child ; child = xmlnode_get_next_twin(child)) { const gchar *src = xmlnode_get_attrib(child, "src"); - + if (g_str_has_prefix(src, "cid:")) { const gchar *cid = src + 4; - + /* if we haven't "fetched" this yet... */ if (!g_hash_table_lookup(table, cid)) { /* take a copy of the cid and let the SmileyRef own it... */ @@ -343,14 +334,14 @@ jabber_message_get_refs_from_xmlnode_internal(const xmlnode *message, JabberSmileyRef *ref = g_new0(JabberSmileyRef, 1); const gchar *alt = xmlnode_get_attrib(child, "alt"); ref->cid = temp_cid; - /* if there is no "alt" string, use the cid... + /* if there is no "alt" string, use the cid... include the entire src, eg. "cid:.." to avoid linkification */ if (alt && alt[0] != '\0') { /* workaround for when "alt" is set to the value of the CID (which Jabbim seems to do), to avoid it showing up as an mailto: link */ if (purple_email_is_valid(alt)) { - ref->alt = g_strdup_printf("smiley:%s", alt); + ref->alt = g_strdup_printf("smiley:%s", alt); } else { ref->alt = g_strdup(alt); } @@ -361,7 +352,7 @@ jabber_message_get_refs_from_xmlnode_internal(const xmlnode *message, } } } - + for (child = message->child ; child ; child = child->next) { jabber_message_get_refs_from_xmlnode_internal(child, table); } @@ -372,9 +363,9 @@ jabber_message_get_refs_steal(gpointer key, gpointer value, gpointer user_data) { GList **refs = (GList **) user_data; JabberSmileyRef *ref = (JabberSmileyRef *) value; - + *refs = g_list_append(*refs, ref); - + return TRUE; } @@ -383,9 +374,9 @@ jabber_message_get_refs_from_xmlnode(const xmlnode *message) { GList *refs = NULL; GHashTable *unique_refs = g_hash_table_new(g_str_hash, g_str_equal); - + jabber_message_get_refs_from_xmlnode_internal(message, unique_refs); - (void) g_hash_table_foreach_steal(unique_refs, + (void) g_hash_table_foreach_steal(unique_refs, jabber_message_get_refs_steal, (gpointer) &refs); g_hash_table_destroy(unique_refs); return refs; @@ -518,7 +509,7 @@ jabber_message_get_data_cb(JabberStream *js, xmlnode *packet, gpointer data) static void jabber_message_send_data_request(JabberStream *js, PurpleConversation *conv, - const gchar *cid, const gchar *who, + const gchar *cid, const gchar *who, const gchar *alt) { JabberIq *request = jabber_iq_new(js, JABBER_IQ_GET); @@ -580,7 +571,7 @@ void jabber_message_parse(JabberStream *js, xmlnode *packet) char *text = xmlnode_get_data(child); if (!text) { xmlnode *enclosed_text_node; - + if ((enclosed_text_node = xmlnode_get_child(child, "text"))) text = xmlnode_get_data(enclosed_text_node); } @@ -632,7 +623,7 @@ void jabber_message_parse(JabberStream *js, xmlnode *packet) smiley_refs = jabber_message_get_refs_from_xmlnode(child); purple_debug_info("jabber", "found %d smileys\n", g_list_length(smiley_refs)); - + if (jm->type == JABBER_MESSAGE_GROUPCHAT) { JabberID *jid = jabber_id_new(jm->from); JabberChat *chat = NULL; @@ -676,7 +667,7 @@ void jabber_message_parse(JabberStream *js, xmlnode *packet) const gchar *cid = ref->cid; const gchar *alt = ref->alt; - purple_debug_info("jabber", + purple_debug_info("jabber", "about to add custom smiley %s to the conv\n", alt); if (purple_conv_custom_smiley_add(conv, alt, "cid", cid, TRUE)) { @@ -684,8 +675,8 @@ void jabber_message_parse(JabberStream *js, xmlnode *packet) jabber_data_find_remote_by_cid(cid); /* if data is already known, we add write it immediatly */ if (data) { - purple_debug_info("jabber", - "data is already known\n"); + purple_debug_info("jabber", + "data is already known\n"); purple_conv_custom_smiley_write(conv, alt, jabber_data_get_data(data), jabber_data_get_size(data)); @@ -731,7 +722,7 @@ void jabber_message_parse(JabberStream *js, xmlnode *packet) jm->type = JABBER_MESSAGE_EVENT; for(items = xmlnode_get_child(child,"items"); items; items = items->next) jm->eventitems = g_list_append(jm->eventitems, items); - } else if(!strcmp(child->name, "attention") && !strcmp(xmlns,"http://www.xmpp.org/extensions/xep-0224.html#ns")) { + } else if(!strcmp(child->name, "attention") && !strcmp(xmlns, XEP_0224_NAMESPACE)) { jm->hasBuzz = TRUE; } else if(!strcmp(child->name, "delay") && !strcmp(xmlns,"urn:xmpp:delay")) { const char *timestamp = xmlnode_get_attrib(child, "stamp"); @@ -910,9 +901,9 @@ jabber_conv_support_custom_smileys(const PurpleConnection *gc, { JabberStream *js = (JabberStream *) gc->proto_data; JabberBuddy *jb; - + if (!js) { - purple_debug_error("jabber", + purple_debug_error("jabber", "jabber_conv_support_custom_smileys: could not find stream\n"); return FALSE; } @@ -965,7 +956,7 @@ void jabber_message_send(JabberMessage *jm) if(type) xmlnode_set_attrib(message, "type", type); - + if (jm->id) xmlnode_set_attrib(message, "id", jm->id); @@ -1022,7 +1013,7 @@ void jabber_message_send(JabberMessage *jm) PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, jm->to, account); - + if (jabber_conv_support_custom_smileys(jm->js->gc, conv, jm->to)) { GList *found_smileys = jabber_message_xhtml_find_smileys(jm->xhtml); @@ -1037,19 +1028,19 @@ void jabber_message_send(JabberMessage *jm) const gchar *shortcut = purple_smiley_get_shortcut(smiley); const JabberData *data = jabber_data_find_local_by_alt(shortcut); - + /* the object has not been sent before */ if (!data) { PurpleStoredImage *image = purple_smiley_get_stored_image(smiley); const gchar *ext = purple_imgstore_get_extension(image); JabberStream *js = jm->js; - + JabberData *new_data = jabber_data_create_from_data(purple_imgstore_get_data(image), purple_imgstore_get_size(image), jabber_message_get_mimetype_from_ext(ext), js); - purple_debug_info("jabber", + purple_debug_info("jabber", "cache local smiley alt = %s, cid = %s\n", shortcut, jabber_data_get_cid(new_data)); jabber_data_associate_local(new_data, shortcut); @@ -1124,7 +1115,7 @@ int jabber_message_send_im(PurpleConnection *gc, const char *who, const char *ms } buf = g_strdup_printf("<html xmlns='http://jabber.org/protocol/xhtml-im'><body xmlns='http://www.w3.org/1999/xhtml'>%s</body></html>", msg); - + purple_markup_html_to_xhtml(buf, &xhtml, &jm->body); g_free(buf); diff --git a/libpurple/protocols/jabber/message.h b/libpurple/protocols/jabber/message.h index 550dd1fe5a..b14aa992ef 100644 --- a/libpurple/protocols/jabber/message.h +++ b/libpurple/protocols/jabber/message.h @@ -26,6 +26,8 @@ #include "jabber.h" #include "xmlnode.h" +#define XEP_0224_NAMESPACE "urn:xmpp:attention:0" + typedef struct _JabberMessage { JabberStream *js; enum { diff --git a/libpurple/protocols/jabber/pep.c b/libpurple/protocols/jabber/pep.c index fae2223b63..843e69b427 100644 --- a/libpurple/protocols/jabber/pep.c +++ b/libpurple/protocols/jabber/pep.c @@ -32,7 +32,7 @@ static GHashTable *pep_handlers = NULL; void jabber_pep_init(void) { if(!pep_handlers) { pep_handlers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); - + /* register PEP handlers */ jabber_mood_init(); jabber_nick_init(); @@ -57,31 +57,31 @@ static void do_pep_iq_request_item_callback(JabberStream *js, xmlnode *packet, g xmlnode *pubsub = xmlnode_get_child_with_namespace(packet,"pubsub","http://jabber.org/protocol/pubsub"); xmlnode *items = NULL; JabberPEPHandler *cb = data; - + if(pubsub) items = xmlnode_get_child(pubsub, "items"); - + cb(js, from, items); } void jabber_pep_request_item(JabberStream *js, const char *to, const char *node, const char *id, JabberPEPHandler cb) { JabberIq *iq = jabber_iq_new(js, JABBER_IQ_GET); xmlnode *pubsub, *items, *item; - + xmlnode_set_attrib(iq->node,"to",to); pubsub = xmlnode_new_child(iq->node,"pubsub"); - + xmlnode_set_namespace(pubsub,"http://jabber.org/protocol/pubsub"); - + items = xmlnode_new_child(pubsub, "items"); xmlnode_set_attrib(items,"node",node); - + item = xmlnode_new_child(items, "item"); if(id) xmlnode_set_attrib(item, "id", id); - + jabber_iq_set_callback(iq,do_pep_iq_request_item_callback,(gpointer)cb); - + jabber_iq_send(iq); } @@ -94,15 +94,15 @@ void jabber_handle_event(JabberMessage *jm) { JabberPEPHandler *jph; GList *itemslist; char *jid = jabber_get_bare_jid(jm->from); - + for(itemslist = jm->eventitems; itemslist; itemslist = itemslist->next) { xmlnode *items = (xmlnode*)itemslist->data; const char *nodename = xmlnode_get_attrib(items,"node"); - + if(nodename && (jph = g_hash_table_lookup(pep_handlers, nodename))) jph(jm->js, jid, items); } - + /* discard items we don't have a handler for */ g_free(jid); } diff --git a/libpurple/protocols/jabber/presence.c b/libpurple/protocols/jabber/presence.c index 09ddd0901d..03497d5718 100644 --- a/libpurple/protocols/jabber/presence.c +++ b/libpurple/protocols/jabber/presence.c @@ -137,7 +137,7 @@ void jabber_presence_send(PurpleAccount *account, PurpleStatus *status) } purple_status_to_jabber(status, &state, &stripped, &priority); - + /* check for buzz support */ allowBuzz = purple_status_get_attr_boolean(status,"buzz"); /* changing the buzz state has to trigger a re-broadcasting of the presence for caps */ @@ -146,7 +146,7 @@ void jabber_presence_send(PurpleAccount *account, PurpleStatus *status) tune = purple_presence_get_status(p, "tune"); stripped = jabber_google_presence_outgoing(tune); } - + #define CHANGED(a,b) ((!a && b) || (a && a[0] == '\0' && b && b[0] != '\0') || \ (a && !b) || (a && a[0] != '\0' && b && b[0] == '\0') || (a && b && strcmp(a,b))) /* check if there are any differences to the <presence> and send them in that case */ @@ -168,9 +168,9 @@ void jabber_presence_send(PurpleAccount *account, PurpleStatus *status) g_hash_table_foreach(js->chats, chats_send_presence_foreach, presence); xmlnode_free(presence); - + /* update old values */ - + if(js->old_msg) g_free(js->old_msg); if(js->old_avatarhash) @@ -194,7 +194,7 @@ void jabber_presence_send(PurpleAccount *account, PurpleStatus *status) length = (!purple_status_get_attr_value(tune, PURPLE_TUNE_TIME)) ? -1 : purple_status_get_attr_int(tune, PURPLE_TUNE_TIME); } - + if(CHANGED(artist, js->old_artist) || CHANGED(title, js->old_title) || CHANGED(source, js->old_source) || CHANGED(uri, js->old_uri) || CHANGED(track, js->old_track) || (length != js->old_length)) { PurpleJabberTuneInfo tuneinfo = { @@ -206,7 +206,7 @@ void jabber_presence_send(PurpleAccount *account, PurpleStatus *status) (char*)uri }; jabber_tune_set(js->gc, &tuneinfo); - + /* update old values */ g_free(js->old_artist); g_free(js->old_title); @@ -277,27 +277,27 @@ xmlnode *jabber_presence_create_js(JabberStream *js, JabberBuddyState state, con xmlnode_set_namespace(c, "http://jabber.org/protocol/caps"); xmlnode_set_attrib(c, "node", CAPS0115_NODE); xmlnode_set_attrib(c, "ver", VERSION); - + if(js != NULL) { /* add the extensions */ char extlist[1024]; unsigned remaining = 1023; /* one less for the \0 */ GList *feature; - + extlist[0] = '\0'; for(feature = jabber_features; feature && remaining > 0; feature = feature->next) { JabberFeature *feat = (JabberFeature*)feature->data; unsigned featlen; - + if(feat->is_enabled != NULL && feat->is_enabled(js, feat->shortname, feat->namespace) == FALSE) continue; /* skip this feature */ - + featlen = strlen(feat->shortname); - + /* cut off when we don't have any more space left in our buffer (too bad) */ if(featlen > remaining) break; - + strncat(extlist,feat->shortname,remaining); remaining -= featlen; if(feature->next) { /* no space at the end */ @@ -309,7 +309,7 @@ xmlnode *jabber_presence_create_js(JabberStream *js, JabberBuddyState state, con if(remaining < 1023) xmlnode_set_attrib(c, "ext", extlist); } - + return presence; } @@ -790,7 +790,7 @@ void jabber_presence_parse(JabberStream *js, xmlnode *packet) const char *node = xmlnode_get_attrib(caps,"node"); const char *ver = xmlnode_get_attrib(caps,"ver"); const char *ext = xmlnode_get_attrib(caps,"ext"); - + if(node && ver) { JabberPresenceCapabilities *userdata = g_new0(JabberPresenceCapabilities, 1); userdata->js = js; diff --git a/libpurple/protocols/jabber/roster.c b/libpurple/protocols/jabber/roster.c index cab8df2942..9febc1e729 100644 --- a/libpurple/protocols/jabber/roster.c +++ b/libpurple/protocols/jabber/roster.c @@ -80,15 +80,16 @@ static void add_purple_buddies_to_groups(JabberStream *js, const char *jid, buddies = g_slist_remove(buddies, b); - if((l = g_slist_find_custom(g2, g->name, (GCompareFunc)strcmp))) { - const char *servernick; + if((l = g_slist_find_custom(g2, purple_group_get_name(g), (GCompareFunc)strcmp))) { + const char *servernick, *balias; /* Previously stored serverside / buddy-supplied alias */ if((servernick = purple_blist_node_get_string((PurpleBlistNode*)b, "servernick"))) serv_got_alias(js->gc, jid, servernick); /* Alias from our roster retrieval */ - if(alias && (!b->alias || strcmp(b->alias, alias))) + balias = purple_buddy_get_local_buddy_alias(b); + if(alias && (!balias || strcmp(balias, alias))) purple_serv_got_private_alias(js->gc, jid, alias); g_free(l->data); g2 = g_slist_delete_link(g2, l); @@ -104,7 +105,7 @@ static void add_purple_buddies_to_groups(JabberStream *js, const char *jid, if (pool) { b = pool->data; pool = g_list_delete_link(pool, pool); - } else { + } else { b = purple_buddy_new(js->gc->account, jid, alias); } @@ -119,11 +120,13 @@ static void add_purple_buddies_to_groups(JabberStream *js, const char *jid, /* If we just learned about ourself, then fake our status, * because we won't be receiving a normal presence message * about ourself. */ - if(!strcmp(b->name, my_bare_jid)) { + if(!strcmp(purple_buddy_get_name(b), my_bare_jid)) { PurplePresence *gpresence; PurpleStatus *status; + PurpleAccount *account; - gpresence = purple_account_get_presence(js->gc->account); + account = purple_connection_get_account(js->gc); + gpresence = purple_account_get_presence(account); status = purple_presence_get_active_status(gpresence); jabber_presence_fake_to_self(js, status); } @@ -273,6 +276,7 @@ static void jabber_roster_update(JabberStream *js, const char *name, GSList *groups = NULL, *l; JabberIq *iq; xmlnode *query, *item, *group; + const char *balias; if (js->currently_parsing_roster_push) return; @@ -289,7 +293,7 @@ static void jabber_roster_update(JabberStream *js, const char *name, while(buddies) { b = buddies->data; g = purple_buddy_get_group(b); - groups = g_slist_append(groups, g->name); + groups = g_slist_append(groups, (char *)purple_group_get_name(g)); buddies = g_slist_remove(buddies, b); } } @@ -301,7 +305,8 @@ static void jabber_roster_update(JabberStream *js, const char *name, xmlnode_set_attrib(item, "jid", name); - xmlnode_set_attrib(item, "name", b->alias ? b->alias : ""); + balias = purple_buddy_get_local_buddy_alias(b); + xmlnode_set_attrib(item, "name", balias ? balias : ""); for(l = groups; l; l = l->next) { group = xmlnode_new_child(item, "group"); @@ -310,7 +315,7 @@ static void jabber_roster_update(JabberStream *js, const char *name, if(!grps) g_slist_free(groups); - + if (js->server_caps & JABBER_CAP_GOOGLE_ROSTER) { jabber_google_roster_outgoing(js, query, item); xmlnode_set_attrib(query, "xmlns:gr", "google:roster"); @@ -327,14 +332,16 @@ void jabber_roster_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, JabberBuddy *jb; JabberBuddyResource *jbr; char *my_bare_jid; + const char *name; if(!js->roster_parsed) return; - if(!(who = jabber_get_bare_jid(buddy->name))) + name = purple_buddy_get_name(buddy); + if(!(who = jabber_get_bare_jid(name))) return; - jb = jabber_buddy_find(js, buddy->name, FALSE); + jb = jabber_buddy_find(js, name, FALSE); jabber_roster_update(js, who, NULL); @@ -375,6 +382,7 @@ void jabber_roster_group_change(PurpleConnection *gc, const char *name, GSList *buddies, *groups = NULL; PurpleBuddy *b; PurpleGroup *g; + const char *gname; if(!old_group || !new_group || !strcmp(old_group, new_group)) return; @@ -383,10 +391,11 @@ void jabber_roster_group_change(PurpleConnection *gc, const char *name, while(buddies) { b = buddies->data; g = purple_buddy_get_group(b); - if(!strcmp(g->name, old_group)) + gname = purple_group_get_name(g); + if(!strcmp(gname, old_group)) groups = g_slist_append(groups, (char*)new_group); /* ick */ else - groups = g_slist_append(groups, g->name); + groups = g_slist_append(groups, (char*)gname); buddies = g_slist_remove(buddies, b); } jabber_roster_update(gc->proto_data, name, groups); @@ -397,15 +406,17 @@ void jabber_roster_group_rename(PurpleConnection *gc, const char *old_name, PurpleGroup *group, GList *moved_buddies) { GList *l; + const char *gname = purple_group_get_name(group); for(l = moved_buddies; l; l = l->next) { PurpleBuddy *buddy = l->data; - jabber_roster_group_change(gc, buddy->name, old_name, group->name); + jabber_roster_group_change(gc, purple_buddy_get_name(buddy), old_name, gname); } } void jabber_roster_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { - GSList *buddies = purple_find_buddies(gc->account, buddy->name); + const char *name = purple_buddy_get_name(buddy); + GSList *buddies = purple_find_buddies(purple_connection_get_account(gc), name); buddies = g_slist_remove(buddies, buddy); if(buddies != NULL) { @@ -416,11 +427,11 @@ void jabber_roster_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, while(buddies) { tmpbuddy = buddies->data; tmpgroup = purple_buddy_get_group(tmpbuddy); - groups = g_slist_append(groups, tmpgroup->name); + groups = g_slist_append(groups, (char *)purple_group_get_name(tmpgroup)); buddies = g_slist_remove(buddies, tmpbuddy); } - jabber_roster_update(gc->proto_data, buddy->name, groups); + jabber_roster_update(gc->proto_data, name, groups); g_slist_free(groups); } else { JabberIq *iq = jabber_iq_new_query(gc->proto_data, JABBER_IQ_SET, @@ -428,7 +439,7 @@ void jabber_roster_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, xmlnode *query = xmlnode_get_child(iq->node, "query"); xmlnode *item = xmlnode_new_child(query, "item"); - xmlnode_set_attrib(item, "jid", buddy->name); + xmlnode_set_attrib(item, "jid", name); xmlnode_set_attrib(item, "subscription", "remove"); jabber_iq_send(iq); diff --git a/libpurple/protocols/jabber/si.c b/libpurple/protocols/jabber/si.c index 02a79229c4..d4560a09ec 100644 --- a/libpurple/protocols/jabber/si.c +++ b/libpurple/protocols/jabber/si.c @@ -32,6 +32,7 @@ #include "buddy.h" #include "disco.h" #include "jabber.h" +#include "ibb.h" #include "iq.h" #include "si.h" @@ -63,8 +64,15 @@ typedef struct _JabberSIXfer { size_t rxlen; gsize rxmaxlen; int local_streamhost_fd; + + JabberIBBSession *ibb_session; + guint ibb_timeout_handle; + FILE *fp; } JabberSIXfer; +/* some forward declarations */ +static void jabber_si_xfer_ibb_send_init(JabberStream *js, PurpleXfer *xfer); + static PurpleXfer* jabber_si_xfer_find(JabberStream *js, const char *sid, const char *from) { @@ -178,6 +186,32 @@ connect_timeout_cb(gpointer data) return FALSE; } +static void +jabber_si_bytestreams_ibb_timeout_remove(JabberSIXfer *jsx) +{ + if (jsx->ibb_timeout_handle) { + purple_timeout_remove(jsx->ibb_timeout_handle); + jsx->ibb_timeout_handle = 0; + } +} + +static gboolean +jabber_si_bytestreams_ibb_timeout_cb(gpointer data) +{ + PurpleXfer *xfer = (PurpleXfer *) data; + JabberSIXfer *jsx = xfer->data; + + if (jsx && !jsx->ibb_session) { + purple_debug_info("jabber", + "jabber_si_bytestreams_ibb_timeout called and IBB session not set " + " up yet, cancel transfer"); + jabber_si_bytestreams_ibb_timeout_remove(jsx); + purple_xfer_cancel_local(xfer); + } + + return FALSE; +} + static void jabber_si_bytestreams_attempt_connect(PurpleXfer *xfer) { JabberSIXfer *jsx = xfer->data; @@ -200,7 +234,28 @@ static void jabber_si_bytestreams_attempt_connect(PurpleXfer *xfer) jabber_iq_send(iq); - purple_xfer_cancel_local(xfer); + /* if IBB is available, revert to that before giving up... */ + if (jsx->stream_method & STREAM_METHOD_IBB) { + /* if we are the initializer, init IBB */ + purple_debug_info("jabber", + "jabber_si_bytestreams_attempt_connect: " + "no streamhosts found, trying IBB\n"); + /* if we are the sender, open an IBB session, but not if we already + did it, since we could have received the error <iq/> from the + receiver already... */ + if (purple_xfer_get_type(xfer) == PURPLE_XFER_SEND + && !jsx->ibb_session) { + jabber_si_xfer_ibb_send_init(jsx->js, xfer); + } else { + /* setup a timeout to cancel waiting for IBB open */ + jsx->ibb_timeout_handle = purple_timeout_add_seconds(30, + jabber_si_bytestreams_ibb_timeout_cb, xfer); + } + /* if we are the receiver, just wait for IBB open, callback is + already set up... */ + } else { + purple_xfer_cancel_local(xfer); + } return; } @@ -654,8 +709,32 @@ jabber_si_connect_proxy_cb(JabberStream *js, xmlnode *packet, jsx = xfer->data; if(!(type = xmlnode_get_attrib(packet, "type")) || strcmp(type, "result")) { - if (type && !strcmp(type, "error")) - purple_xfer_cancel_remote(xfer); + purple_debug_info("jabber", + "jabber_si_xfer_connect_proxy_cb: type = %s\n", + type); + if (type && !strcmp(type, "error")) { + /* if IBB is available, open IBB session */ + purple_debug_info("jabber", + "jabber_si_xfer_connect_proxy_cb: got error, method: %d\n", + jsx->stream_method); + if (jsx->stream_method & STREAM_METHOD_IBB) { + purple_debug_info("jabber", "IBB is possible, try it\n"); + /* if we are the sender and haven't already opened an IBB + session, do so now (we might already have failed to open + the bytestream proxy ourselves when receiving this <iq/> */ + if (purple_xfer_get_type(xfer) == PURPLE_XFER_SEND + && !jsx->ibb_session) { + jabber_si_xfer_ibb_send_init(js, xfer); + } else { + jsx->ibb_timeout_handle = purple_timeout_add_seconds(30, + jabber_si_bytestreams_ibb_timeout_cb, xfer); + } + /* if we are receiver, just wait for IBB open stanza, callback + is already set up */ + } else { + purple_xfer_cancel_remote(xfer); + } + } return; } @@ -682,8 +761,22 @@ jabber_si_connect_proxy_cb(JabberStream *js, xmlnode *packet, purple_debug_info("jabber", "Got local SOCKS5 streamhost-used.\n"); purple_xfer_start(xfer, xfer->fd, NULL, -1); } else { - purple_debug_info("jabber", "streamhost-used does not match any proxy that was offered to target\n"); - purple_xfer_cancel_local(xfer); + /* if available, try to revert to IBB... */ + if (jsx->stream_method & STREAM_METHOD_IBB) { + purple_debug_info("jabber", + "jabber_si_connect_proxy_cb: trying to revert to IBB\n"); + if (purple_xfer_get_type(xfer) == PURPLE_XFER_SEND) { + jabber_si_xfer_ibb_send_init(jsx->js, xfer); + } else { + jsx->ibb_timeout_handle = purple_timeout_add_seconds(30, + jabber_si_bytestreams_ibb_timeout_cb, xfer); + } + /* if we are the receiver, we are already set up...*/ + } else { + purple_debug_info("jabber", + "streamhost-used does not match any proxy that was offered to target\n"); + purple_xfer_cancel_local(xfer); + } } g_free(my_jid); return; @@ -810,8 +903,26 @@ jabber_si_xfer_bytestreams_listen_cb(int sock, gpointer data) /* We have no way of transferring, cancel the transfer */ if (streamhost_count == 0) { jabber_iq_free(iq); - /* We should probably notify the target, but this really shouldn't ever happen */ - purple_xfer_cancel_local(xfer); + + /* if available, revert to IBB */ + if (jsx->stream_method & STREAM_METHOD_IBB) { + purple_debug_info("jabber", + "jabber_si_xfer_bytestreams_listen_cb: trying to revert to IBB\n"); + if (purple_xfer_get_type(xfer) == PURPLE_XFER_SEND) { + /* if we are the sender, init the IBB session... */ + jabber_si_xfer_ibb_send_init(jsx->js, xfer); + } else { + jsx->ibb_timeout_handle = purple_timeout_add_seconds(30, + jabber_si_bytestreams_ibb_timeout_cb, xfer); + } + /* if we are the receiver, we should just wait... the IBB open + handler has already been set up... */ + } else { + /* We should probably notify the target, + but this really shouldn't ever happen */ + purple_xfer_cancel_local(xfer); + } + return; } @@ -841,11 +952,242 @@ jabber_si_xfer_bytestreams_send_init(PurpleXfer *xfer) } +static void +jabber_si_xfer_ibb_error_cb(JabberIBBSession *sess) +{ + PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(sess); + JabberStream *js = jabber_ibb_session_get_js(sess); + PurpleConnection *gc = js->gc; + PurpleAccount *account = purple_connection_get_account(gc); + + purple_debug_error("jabber", "an error occured during IBB file transfer\n"); + purple_xfer_error(purple_xfer_get_type(xfer), account, + jabber_ibb_session_get_who(sess), + _("An error occured on the in-band bytestream transfer\n")); + purple_xfer_cancel_remote(xfer); +} + +static void +jabber_si_xfer_ibb_closed_cb(JabberIBBSession *sess) +{ + PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(sess); + JabberStream *js = jabber_ibb_session_get_js(sess); + PurpleConnection *gc = js->gc; + PurpleAccount *account = purple_connection_get_account(gc); + + purple_debug_info("jabber", "the remote user closed the transfer\n"); + if (purple_xfer_get_bytes_remaining(xfer) > 0) { + purple_xfer_error(purple_xfer_get_type(xfer), account, + jabber_ibb_session_get_who(sess), _("Transfer was closed.")); + purple_xfer_cancel_remote(xfer); + } else { + purple_xfer_set_completed(xfer, TRUE); + purple_xfer_end(xfer); + } +} + +static void +jabber_si_xfer_ibb_recv_data_cb(JabberIBBSession *sess, gpointer data, + gsize size) +{ + PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(sess); + JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; + + if (size <= purple_xfer_get_bytes_remaining(xfer)) { + purple_debug_info("jabber", "about to write %" G_GSIZE_FORMAT " bytes from IBB stream\n", + size); + if(!fwrite(data, size, 1, jsx->fp)) { + purple_debug_error("jabber", "error writing to file\n"); + purple_xfer_cancel_remote(xfer); + return; + } + purple_xfer_set_bytes_sent(xfer, purple_xfer_get_bytes_sent(xfer) + size); + purple_xfer_update_progress(xfer); + + if (purple_xfer_get_bytes_remaining(xfer) == 0) { + purple_xfer_set_completed(xfer, TRUE); + purple_xfer_end(xfer); + } + } else { + /* trying to write past size of file transfers negotiated size, + reject transfer to protect against malicious behaviour */ + purple_debug_error("jabber", + "IBB file transfer send more data than expected\n"); + purple_xfer_cancel_remote(xfer); + } + +} + +static gboolean +jabber_si_xfer_ibb_open_cb(JabberStream *js, xmlnode *packet) +{ + const gchar *who = xmlnode_get_attrib(packet, "from"); + xmlnode *open = xmlnode_get_child(packet, "open"); + const gchar *sid = xmlnode_get_attrib(open, "sid"); + PurpleXfer *xfer = jabber_si_xfer_find(js, sid, who); + if (xfer) { + JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; + JabberIBBSession *sess = + jabber_ibb_session_create_from_xmlnode(js, packet, xfer); + const char *filename; + + jabber_si_bytestreams_ibb_timeout_remove(jsx); + + if (sess) { + /* open the file to write to */ + filename = purple_xfer_get_local_filename(xfer); + jsx->fp = g_fopen(filename, "wb"); + if (jsx->fp == NULL) { + purple_debug_error("jabber", "failed to open file %s for writing: %s\n", + filename, g_strerror(errno)); + purple_xfer_cancel_remote(xfer); + return FALSE; + } + + /* setup callbacks here...*/ + jabber_ibb_session_set_data_received_callback(sess, + jabber_si_xfer_ibb_recv_data_cb); + jabber_ibb_session_set_closed_callback(sess, + jabber_si_xfer_ibb_closed_cb); + jabber_ibb_session_set_error_callback(sess, + jabber_si_xfer_ibb_error_cb); + + jsx->ibb_session = sess; + + /* start the transfer */ + purple_xfer_start(xfer, 0, NULL, 0); + return TRUE; + } else { + /* failed to create IBB session */ + purple_debug_error("jabber", "failed to create IBB session\n"); + purple_xfer_cancel_remote(xfer); + return FALSE; + } + } else { + /* we got an IBB <open/> for an unknown file transfer, pass along... */ + purple_debug_info("jabber", + "IBB open did not match any SI file transfer\n"); + return FALSE; + } +} + +static void +jabber_si_xfer_ibb_send_data(JabberIBBSession *sess) +{ + PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(sess); + JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; + gsize remaining = purple_xfer_get_bytes_remaining(xfer); + gsize packet_size = remaining < jabber_ibb_session_get_block_size(sess) ? + remaining : jabber_ibb_session_get_block_size(sess); + gpointer data = g_malloc(packet_size); + int res; + + purple_debug_info("jabber", "IBB: about to read %" G_GSIZE_FORMAT " bytes from file %p\n", + packet_size, jsx->fp); + res = fread(data, packet_size, 1, jsx->fp); + + if (res == 1) { + jabber_ibb_session_send_data(sess, data, packet_size); + purple_xfer_set_bytes_sent(xfer, + purple_xfer_get_bytes_sent(xfer) + packet_size); + purple_xfer_update_progress(xfer); + } else { + purple_debug_error("jabber", + "jabber_si_xfer_ibb_send_data: error reading from file\n"); + purple_xfer_cancel_local(xfer); + } +} + +static void +jabber_si_xfer_ibb_sent_cb(JabberIBBSession *sess) +{ + PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(sess); + gsize remaining = purple_xfer_get_bytes_remaining(xfer); + + if (remaining == 0) { + /* close the session */ + jabber_ibb_session_close(sess); + purple_xfer_set_completed(xfer, TRUE); + purple_xfer_end(xfer); + } else { + /* send more... */ + jabber_si_xfer_ibb_send_data(sess); + } +} + +static void +jabber_si_xfer_ibb_opened_cb(JabberIBBSession *sess) +{ + PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(sess); + JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; + JabberStream *js = jabber_ibb_session_get_js(sess); + PurpleConnection *gc = js->gc; + PurpleAccount *account = purple_connection_get_account(gc); + + if (jabber_ibb_session_get_state(sess) == JABBER_IBB_SESSION_OPENED) { + const char *filename = purple_xfer_get_local_filename(xfer); + jsx->fp = g_fopen(filename, "rb"); + if (jsx->fp == NULL) { + purple_debug_error("jabber", "Failed to open file %s for reading: %s\n", + filename, g_strerror(errno)); + purple_xfer_error(purple_xfer_get_type(xfer), account, + jabber_ibb_session_get_who(sess), + _("Failed to open the file")); + purple_xfer_cancel_local(xfer); + return; + } + + purple_xfer_start(xfer, 0, NULL, 0); + purple_xfer_set_bytes_sent(xfer, 0); + purple_xfer_update_progress(xfer); + jabber_si_xfer_ibb_send_data(sess); + } else { + /* error */ + purple_xfer_error(purple_xfer_get_type(xfer), account, + jabber_ibb_session_get_who(sess), + _("Failed to open in-band bytestream")); + purple_xfer_end(xfer); + } +} + +static void +jabber_si_xfer_ibb_send_init(JabberStream *js, PurpleXfer *xfer) +{ + JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; + + purple_xfer_ref(xfer); + + jsx->ibb_session = jabber_ibb_session_create(js, jsx->stream_id, + purple_xfer_get_remote_user(xfer), xfer); + + if (jsx->ibb_session) { + /* should set callbacks here... */ + jabber_ibb_session_set_opened_callback(jsx->ibb_session, + jabber_si_xfer_ibb_opened_cb); + jabber_ibb_session_set_data_sent_callback(jsx->ibb_session, + jabber_si_xfer_ibb_sent_cb); + jabber_ibb_session_set_closed_callback(jsx->ibb_session, + jabber_si_xfer_ibb_closed_cb); + jabber_ibb_session_set_error_callback(jsx->ibb_session, + jabber_si_xfer_ibb_error_cb); + + /* open the IBB session */ + jabber_ibb_session_open(jsx->ibb_session); + + } else { + /* failed to create IBB session */ + purple_debug_error("jabber", + "failed to initiate IBB session for file transfer\n"); + purple_xfer_cancel_local(xfer); + } +} + static void jabber_si_xfer_send_method_cb(JabberStream *js, xmlnode *packet, gpointer data) { PurpleXfer *xfer = data; xmlnode *si, *feature, *x, *field, *value; + gboolean found_method = FALSE; if(!(si = xmlnode_get_child_with_namespace(packet, "si", "http://jabber.org/protocol/si"))) { purple_xfer_cancel_remote(xfer); @@ -864,20 +1206,33 @@ static void jabber_si_xfer_send_method_cb(JabberStream *js, xmlnode *packet, for(field = xmlnode_get_child(x, "field"); field; field = xmlnode_get_next_twin(field)) { const char *var = xmlnode_get_attrib(field, "var"); + JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; if(var && !strcmp(var, "stream-method")) { if((value = xmlnode_get_child(field, "value"))) { char *val = xmlnode_get_data(value); if(val && !strcmp(val, "http://jabber.org/protocol/bytestreams")) { jabber_si_xfer_bytestreams_send_init(xfer); - g_free(val); - return; + jsx->stream_method |= STREAM_METHOD_BYTESTREAMS; + found_method = TRUE; + } else if (val && !strcmp(val, XEP_0047_NAMESPACE)) { + jsx->stream_method |= STREAM_METHOD_IBB; + if (!found_method) { + /* we haven't tried to init a bytestream session, yet + start IBB right away... */ + jabber_si_xfer_ibb_send_init(js, xfer); + found_method = TRUE; + } } g_free(val); } } } - purple_xfer_cancel_remote(xfer); + + if (!found_method) { + purple_xfer_cancel_remote(xfer); + } + } static void jabber_si_xfer_send_request(PurpleXfer *xfer) @@ -914,14 +1269,14 @@ static void jabber_si_xfer_send_request(PurpleXfer *xfer) field = xmlnode_new_child(x, "field"); xmlnode_set_attrib(field, "var", "stream-method"); xmlnode_set_attrib(field, "type", "list-single"); + /* maybe we should add an option to always skip bytestreams for people + behind troublesome firewalls */ option = xmlnode_new_child(field, "option"); value = xmlnode_new_child(option, "value"); xmlnode_insert_data(value, "http://jabber.org/protocol/bytestreams", -1); - /* option = xmlnode_new_child(field, "option"); value = xmlnode_new_child(option, "value"); xmlnode_insert_data(value, "http://jabber.org/protocol/ibb", -1); - */ jabber_iq_set_callback(iq, jabber_si_xfer_send_method_cb, xfer); @@ -935,38 +1290,66 @@ static void jabber_si_xfer_send_request(PurpleXfer *xfer) static void jabber_si_xfer_free(PurpleXfer *xfer) { JabberSIXfer *jsx = xfer->data; - JabberStream *js = jsx->js; - js->file_transfers = g_list_remove(js->file_transfers, xfer); + if (jsx) { + JabberStream *js = jsx->js; + + js->file_transfers = g_list_remove(js->file_transfers, xfer); + + if (jsx->connect_data != NULL) + purple_proxy_connect_cancel(jsx->connect_data); + if (jsx->listen_data != NULL) + purple_network_listen_cancel(jsx->listen_data); + if (jsx->iq_id != NULL) + jabber_iq_remove_callback_by_id(js, jsx->iq_id); + if (jsx->local_streamhost_fd >= 0) + close(jsx->local_streamhost_fd); + if (jsx->connect_timeout > 0) + purple_timeout_remove(jsx->connect_timeout); + if (jsx->ibb_timeout_handle > 0) + purple_timeout_remove(jsx->ibb_timeout_handle); + + if (jsx->streamhosts) { + g_list_foreach(jsx->streamhosts, jabber_si_free_streamhost, NULL); + g_list_free(jsx->streamhosts); + } - if (jsx->connect_data != NULL) - purple_proxy_connect_cancel(jsx->connect_data); - if (jsx->listen_data != NULL) - purple_network_listen_cancel(jsx->listen_data); - if (jsx->iq_id != NULL) - jabber_iq_remove_callback_by_id(js, jsx->iq_id); - if (jsx->local_streamhost_fd >= 0) - close(jsx->local_streamhost_fd); - if (jsx->connect_timeout > 0) - purple_timeout_remove(jsx->connect_timeout); + if (jsx->ibb_session) { + purple_debug_info("jabber", + "jabber_si_xfer_free: destroying IBB session\n"); + jabber_ibb_session_destroy(jsx->ibb_session); + } - if (jsx->streamhosts) { - g_list_foreach(jsx->streamhosts, jabber_si_free_streamhost, NULL); - g_list_free(jsx->streamhosts); - } + if (jsx->fp) { + purple_debug_info("jabber", + "jabber_si_xfer_free: closing file for IBB transfer\n"); + fclose(jsx->fp); + } - g_free(jsx->stream_id); - g_free(jsx->iq_id); - /* XXX: free other stuff */ - g_free(jsx->rxqueue); - g_free(jsx); - xfer->data = NULL; + g_free(jsx->stream_id); + g_free(jsx->iq_id); + /* XXX: free other stuff */ + g_free(jsx->rxqueue); + g_free(jsx); + xfer->data = NULL; - purple_debug_info("jabber", "jabber_si_xfer_free(): freeing jsx %p", jsx); + purple_debug_info("jabber", "jabber_si_xfer_free(): freeing jsx %p\n", jsx); + } } +/* + * These four functions should only be called from the PurpleXfer functions + * (typically purple_xfer_cancel_(remote|local), purple_xfer_end, or + * purple_xfer_request_denied. + */ static void jabber_si_xfer_cancel_send(PurpleXfer *xfer) { + JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; + + /* if there is an IBB session active, send close on that */ + if (jsx->ibb_session) { + jabber_ibb_session_close(jsx->ibb_session); + } jabber_si_xfer_free(xfer); purple_debug(PURPLE_DEBUG_INFO, "jabber", "in jabber_si_xfer_cancel_send\n"); } @@ -981,6 +1364,11 @@ static void jabber_si_xfer_request_denied(PurpleXfer *xfer) static void jabber_si_xfer_cancel_recv(PurpleXfer *xfer) { + JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; + /* if there is an IBB session active, send close */ + if (jsx->ibb_session) { + jabber_ibb_session_close(jsx->ibb_session); + } jabber_si_xfer_free(xfer); purple_debug(PURPLE_DEBUG_INFO, "jabber", "in jabber_si_xfer_cancel_recv\n"); } @@ -995,9 +1383,16 @@ static void jabber_si_xfer_end(PurpleXfer *xfer) static void jabber_si_xfer_send_disco_cb(JabberStream *js, const char *who, JabberCapabilities capabilities, gpointer data) { - PurpleXfer *xfer = data; + PurpleXfer *xfer = (PurpleXfer *) data; + JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; + + if (capabilities & JABBER_CAP_IBB) { + purple_debug_info("jabber", + "jabber_si_xfer_send_disco_cb: remote JID supports IBB\n"); + jsx->stream_method |= STREAM_METHOD_IBB; + } - if(capabilities & JABBER_CAP_SI_FILE_XFER) { + if (capabilities & JABBER_CAP_SI_FILE_XFER) { jabber_si_xfer_send_request(xfer); } else { char *msg = g_strdup_printf(_("Unable to send file to %s, user does not support file transfers"), who); @@ -1124,17 +1519,21 @@ static void jabber_si_xfer_init(PurpleXfer *xfer) x = xmlnode_new_child(feature, "x"); xmlnode_set_namespace(x, "jabber:x:data"); xmlnode_set_attrib(x, "type", "submit"); - field = xmlnode_new_child(x, "field"); xmlnode_set_attrib(field, "var", "stream-method"); - value = xmlnode_new_child(field, "value"); - if(jsx->stream_method & STREAM_METHOD_BYTESTREAMS) + /* we should maybe "remember" if bytestreams has failed before (in the + same session) with this JID, and only present IBB as an option to + avoid unnessesary timeout */ + /* maybe we should have an account option to always just try IBB + for people who know their firewalls are very restrictive */ + if (jsx->stream_method & STREAM_METHOD_BYTESTREAMS) { + value = xmlnode_new_child(field, "value"); xmlnode_insert_data(value, "http://jabber.org/protocol/bytestreams", -1); - /* - else if(jsx->stream_method & STREAM_METHOD_IBB) - xmlnode_insert_data(value, "http://jabber.org/protocol/ibb", -1); - */ + } else if(jsx->stream_method & STREAM_METHOD_IBB) { + value = xmlnode_new_child(field, "value"); + xmlnode_insert_data(value, "http://jabber.org/protocol/ibb", -1); + } jabber_iq_send(iq); } @@ -1156,6 +1555,9 @@ PurpleXfer *jabber_si_new_xfer(PurpleConnection *gc, const char *who) jsx->js = js; jsx->local_streamhost_fd = -1; + jsx->ibb_session = NULL; + jsx->fp = NULL; + purple_xfer_set_init_fnc(xfer, jabber_si_xfer_init); purple_xfer_set_cancel_send_fnc(xfer, jabber_si_xfer_cancel_send); purple_xfer_set_end_fnc(xfer, jabber_si_xfer_end); @@ -1227,6 +1629,8 @@ void jabber_si_parse(JabberStream *js, xmlnode *packet) jsx = g_new0(JabberSIXfer, 1); jsx->local_streamhost_fd = -1; + jsx->ibb_session = NULL; + for(field = xmlnode_get_child(x, "field"); field; field = xmlnode_get_next_twin(field)) { const char *var = xmlnode_get_attrib(field, "var"); if(var && !strcmp(var, "stream-method")) { @@ -1237,10 +1641,8 @@ void jabber_si_parse(JabberStream *js, xmlnode *packet) if((val = xmlnode_get_data(value))) { if(!strcmp(val, "http://jabber.org/protocol/bytestreams")) { jsx->stream_method |= STREAM_METHOD_BYTESTREAMS; - /* } else if(!strcmp(val, "http://jabber.org/protocol/ibb")) { jsx->stream_method |= STREAM_METHOD_IBB; - */ } g_free(val); } @@ -1278,4 +1680,15 @@ void jabber_si_parse(JabberStream *js, xmlnode *packet) } } +void +jabber_si_init(void) +{ + jabber_ibb_register_open_handler(jabber_si_xfer_ibb_open_cb); +} + +void +jabber_si_uninit(void) +{ + jabber_ibb_unregister_open_handler(jabber_si_xfer_ibb_open_cb); +} diff --git a/libpurple/protocols/jabber/si.h b/libpurple/protocols/jabber/si.h index c7f0ff9526..120046fc59 100644 --- a/libpurple/protocols/jabber/si.h +++ b/libpurple/protocols/jabber/si.h @@ -30,5 +30,7 @@ void jabber_bytestreams_parse(JabberStream *js, xmlnode *packet); void jabber_si_parse(JabberStream *js, xmlnode *packet); PurpleXfer *jabber_si_new_xfer(PurpleConnection *gc, const char *who); void jabber_si_xfer_send(PurpleConnection *gc, const char *who, const char *file); +void jabber_si_init(void); +void jabber_si_uninit(void); #endif /* _PURPLE_JABBER_SI_H_ */ diff --git a/libpurple/protocols/jabber/usermood.c b/libpurple/protocols/jabber/usermood.c index 3ff09d0402..217d0926dd 100644 --- a/libpurple/protocols/jabber/usermood.c +++ b/libpurple/protocols/jabber/usermood.c @@ -103,7 +103,7 @@ static void jabber_mood_cb(JabberStream *js, const char *from, xmlnode *items) { /* ignore the mood of people not on our buddy list */ if (!buddy || !item) return; - + mood = xmlnode_get_child_with_namespace(item, "mood", "http://jabber.org/protocol/mood"); if (!mood) return; @@ -179,10 +179,10 @@ static void do_mood_set_mood(PurplePluginAction *action) { field = purple_request_field_choice_new("mood", _("Mood"), 0); - + for(i = 0; moodstrings[i]; ++i) purple_request_field_choice_add(field, _(moodstrings[i])); - + purple_request_field_set_required(field, TRUE); purple_request_field_group_add_field(group, field); @@ -190,7 +190,7 @@ static void do_mood_set_mood(PurplePluginAction *action) { _("Description"), NULL, FALSE); purple_request_field_group_add_field(group, field); - + purple_request_fields(gc, _("Edit User Mood"), _("Edit User Mood"), _("Please select your mood from the list."), @@ -199,7 +199,7 @@ static void do_mood_set_mood(PurplePluginAction *action) { _("Cancel"), NULL, purple_connection_get_account(gc), NULL, NULL, gc); - + } void jabber_mood_init_action(GList **m) { @@ -222,7 +222,7 @@ void jabber_mood_set(JabberStream *js, const char *mood, const char *text) { xmlnode *textnode = xmlnode_new_child(moodnode, "text"); xmlnode_insert_data(textnode, text, -1); } - + jabber_pep_publish(js, publish); /* publish is freed by jabber_pep_publish -> jabber_iq_send -> jabber_iq_free (yay for well-defined memory management rules) */ diff --git a/libpurple/protocols/jabber/usernick.c b/libpurple/protocols/jabber/usernick.c index 618d493aed..ff269ceeb5 100644 --- a/libpurple/protocols/jabber/usernick.c +++ b/libpurple/protocols/jabber/usernick.c @@ -34,11 +34,11 @@ static void jabber_nick_cb(JabberStream *js, const char *from, xmlnode *items) { JabberBuddy *buddy = jabber_buddy_find(js, from, FALSE); xmlnode *nick; char *nickname = NULL; - + /* ignore the tune of people not on our buddy list */ if (!buddy || !item) return; - + nick = xmlnode_get_child_with_namespace(item, "nick", "http://jabber.org/protocol/nick"); if (!nick) return; @@ -49,15 +49,15 @@ static void jabber_nick_cb(JabberStream *js, const char *from, xmlnode *items) { static void do_nick_set(JabberStream *js, const char *nick) { xmlnode *publish, *nicknode; - + publish = xmlnode_new("publish"); xmlnode_set_attrib(publish,"node","http://jabber.org/protocol/nick"); nicknode = xmlnode_new_child(xmlnode_new_child(publish, "item"), "nick"); xmlnode_set_namespace(nicknode, "http://jabber.org/protocol/nick"); - + if(nick && nick[0] != '\0') xmlnode_insert_data(nicknode, nick, -1); - + jabber_pep_publish(js, publish); /* publish is freed by jabber_pep_publish -> jabber_iq_send -> jabber_iq_free (yay for well-defined memory management rules) */ @@ -66,13 +66,13 @@ static void do_nick_set(JabberStream *js, const char *nick) { static void do_nick_got_own_nick_cb(JabberStream *js, const char *from, xmlnode *items) { char *oldnickname = NULL; xmlnode *item = xmlnode_get_child(items,"item"); - + if(item) { xmlnode *nick = xmlnode_get_child_with_namespace(item,"nick","http://jabber.org/protocol/nick"); if(nick) oldnickname = xmlnode_get_data(nick); } - + purple_request_input(js->gc, _("Set User Nickname"), _("Please specify a new nickname for you."), _("This information is visible to all contacts on your contact list, so choose something appropriate."), oldnickname, FALSE, FALSE, NULL, _("Set"), PURPLE_CALLBACK(do_nick_set), _("Cancel"), NULL, @@ -84,7 +84,7 @@ static void do_nick_set_nick(PurplePluginAction *action) { PurpleConnection *gc = (PurpleConnection *) action->context; JabberStream *js = gc->proto_data; char *jid = g_strdup_printf("%s@%s", js->user->node, js->user->domain); - + /* since the nickname might have been changed by another resource of this account, we always have to request the old one from the server to present as the default for the new one */ jabber_pep_request_item(js, jid, "http://jabber.org/protocol/nick", NULL, do_nick_got_own_nick_cb); diff --git a/libpurple/protocols/jabber/usertune.c b/libpurple/protocols/jabber/usertune.c index 92d06d3168..73139d5920 100644 --- a/libpurple/protocols/jabber/usertune.c +++ b/libpurple/protocols/jabber/usertune.c @@ -116,12 +116,12 @@ void jabber_tune_init(void) { void jabber_tune_set(PurpleConnection *gc, const PurpleJabberTuneInfo *tuneinfo) { xmlnode *publish, *tunenode; JabberStream *js = gc->proto_data; - + publish = xmlnode_new("publish"); xmlnode_set_attrib(publish,"node","http://jabber.org/protocol/tune"); tunenode = xmlnode_new_child(xmlnode_new_child(publish, "item"), "tune"); xmlnode_set_namespace(tunenode, "http://jabber.org/protocol/tune"); - + if(tuneinfo) { if(tuneinfo->artist && tuneinfo->artist[0] != '\0') xmlnode_insert_data(xmlnode_new_child(tunenode, "artist"),tuneinfo->artist,-1); @@ -139,7 +139,7 @@ void jabber_tune_set(PurpleConnection *gc, const PurpleJabberTuneInfo *tuneinfo) if(tuneinfo->track && tuneinfo->track[0] != '\0') xmlnode_insert_data(xmlnode_new_child(tunenode, "track"),tuneinfo->track,-1); } - + jabber_pep_publish(js, publish); /* publish is freed by jabber_pep_publish -> jabber_iq_send -> jabber_iq_free (yay for well-defined memory management rules) */ diff --git a/libpurple/protocols/jabber/xdata.c b/libpurple/protocols/jabber/xdata.c index 9eff9a84f9..1d2571c269 100644 --- a/libpurple/protocols/jabber/xdata.c +++ b/libpurple/protocols/jabber/xdata.c @@ -372,7 +372,7 @@ void *jabber_x_data_request_with_actions(JabberStream *js, xmlnode *packet, GLis if(field && xmlnode_get_child(fn, "required")) purple_request_field_set_required(field,TRUE); } - + if(actions != NULL) { PurpleRequestField *actionfield; GList *action; @@ -382,7 +382,7 @@ void *jabber_x_data_request_with_actions(JabberStream *js, xmlnode *packet, GLis for(action = actions; action; action = g_list_next(action)) { JabberXDataAction *a = action->data; - + purple_request_field_choice_add(actionfield, a->name); data->actions = g_list_append(data->actions, g_strdup(a->handle)); } diff --git a/libpurple/protocols/msn/directconn.c b/libpurple/protocols/msn/directconn.c index 7c5b1a5005..1ebc6f8b43 100644 --- a/libpurple/protocols/msn/directconn.c +++ b/libpurple/protocols/msn/directconn.c @@ -201,24 +201,6 @@ msn_directconn_write(MsnDirectConn *directconn, g_free(buffer); -#if 0 - /* Let's write the length of the data. */ - ret = write(directconn->fd, &len, sizeof(len)); - - /* Let's write the data. */ - ret = write(directconn->fd, data, len); - - char *str; - str = g_strdup_printf("/home/revo/msntest/w%.4d.bin", directconn->c); - - FILE *tf = g_fopen(str, "w"); - fwrite(&len, 1, sizeof(len), tf); - fwrite(data, 1, len, tf); - fclose(tf); - - g_free(str); -#endif - directconn->c++; return ret; @@ -341,7 +323,7 @@ read_cb(gpointer data, gint source, PurpleInputCondition cond) MsnMessage *msg; #ifdef DEBUG_DC - str = g_strdup_printf("/home/revo/msntest/r%.4d.bin", directconn->c); + str = g_strdup_printf("%s/msntest/r%.4d.bin", g_get_home_dir(), directconn->c); FILE *tf = g_fopen(str, "w"); fwrite(body, 1, len, tf); diff --git a/libpurple/protocols/msn/msn.c b/libpurple/protocols/msn/msn.c index 09377a0f4d..5cbfd8e879 100644 --- a/libpurple/protocols/msn/msn.c +++ b/libpurple/protocols/msn/msn.c @@ -457,23 +457,27 @@ show_send_to_mobile_cb(PurpleBlistNode *node, gpointer ignored) PurpleConnection *gc; MsnSession *session; MsnMobileData *data; + PurpleAccount *account; + const char *name; g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); + account = purple_buddy_get_account(buddy); + gc = purple_account_get_connection(account); + name = purple_buddy_get_name(buddy); session = gc->proto_data; data = g_new0(MsnMobileData, 1); data->gc = gc; - data->passport = buddy->name; + data->passport = name; purple_request_input(gc, NULL, _("Send a mobile message."), NULL, NULL, TRUE, FALSE, NULL, _("Page"), G_CALLBACK(send_to_mobile_cb), _("Close"), G_CALLBACK(close_mobile_page_cb), - purple_connection_get_account(gc), purple_buddy_get_name(buddy), NULL, + account, name, NULL, data); } @@ -505,6 +509,7 @@ initiate_chat_cb(PurpleBlistNode *node, gpointer data) { PurpleBuddy *buddy; PurpleConnection *gc; + PurpleAccount *account; MsnSession *session; MsnSwitchBoard *swboard; @@ -514,13 +519,14 @@ initiate_chat_cb(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); + account = purple_buddy_get_account(buddy); + gc = purple_account_get_connection(account); session = gc->proto_data; swboard = msn_switchboard_new(session); msn_switchboard_request(swboard); - msn_switchboard_request_add_user(swboard, buddy->name); + msn_switchboard_request_add_user(swboard, purple_buddy_get_name(buddy)); /* TODO: This might move somewhere else, after USR might be */ swboard->chat_id = msn_switchboard_get_chat_id(); @@ -528,9 +534,9 @@ initiate_chat_cb(PurpleBlistNode *node, gpointer data) swboard->flag = MSN_SB_FLAG_IM; /* Local alias > Display name > Username */ - if ((alias = purple_account_get_alias(buddy->account)) == NULL) + if ((alias = purple_account_get_alias(account)) == NULL) if ((alias = purple_connection_get_display_name(gc)) == NULL) - alias = purple_account_get_username(buddy->account); + alias = purple_account_get_username(account); purple_conv_chat_add_user(PURPLE_CONV_CHAT(swboard->conv), alias, NULL, PURPLE_CBFLAGS_NONE, TRUE); @@ -613,7 +619,7 @@ msn_list_icon(PurpleAccount *a, PurpleBuddy *b) static const char * msn_list_emblems(PurpleBuddy *b) { - MsnUser *user = b->proto_data; + MsnUser *user = purple_buddy_get_protocol_data(b); if (user != NULL) { if (user->clientid & MSN_CLIENT_CAP_BOT) @@ -694,7 +700,7 @@ msn_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, gboolean f PurplePresence *presence = purple_buddy_get_presence(buddy); PurpleStatus *status = purple_presence_get_active_status(presence); - user = buddy->proto_data; + user = purple_buddy_get_protocol_data(buddy); if (purple_presence_is_online(presence)) { @@ -937,7 +943,7 @@ msn_buddy_menu(PurpleBuddy *buddy) g_return_val_if_fail(buddy != NULL, NULL); - user = buddy->proto_data; + user = purple_buddy_get_protocol_data(buddy); if (user != NULL) { @@ -950,8 +956,8 @@ msn_buddy_menu(PurpleBuddy *buddy) } } - if (g_ascii_strcasecmp(buddy->name, - purple_account_get_username(buddy->account))) + if (g_ascii_strcasecmp(purple_buddy_get_name(buddy), + purple_account_get_username(purple_buddy_get_account(buddy)))) { act = purple_menu_action_new(_("Initiate _Chat"), PURPLE_CALLBACK(initiate_chat_cb), @@ -1430,14 +1436,15 @@ msn_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { MsnSession *session; MsnUserList *userlist; - const char *who; + const char *who, *gname; MsnUser *user; session = gc->proto_data; userlist = session->userlist; - who = msn_normalize(gc->account, buddy->name); + who = msn_normalize(purple_connection_get_account(gc), purple_buddy_get_name(buddy)); - purple_debug_info("msn", "Add user:%s to group:%s\n", who, (group && group->name) ? group->name : "(null)"); + gname = group ? purple_group_get_name(group) : NULL; + purple_debug_info("msn", "Add user:%s to group:%s\n", who, gname ? gname : "(null)"); if (!session->logged_in) { #if 0 @@ -1464,11 +1471,20 @@ msn_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) if ((user != NULL) && (user->networkid != MSN_NETWORK_UNKNOWN)) { /* We already know this buddy and their network. This function knows what to do with users already in the list and stuff... */ - msn_userlist_add_buddy(userlist, who, group ? group->name : NULL); + msn_userlist_add_buddy(userlist, who, gname); } else { + char **tokens; + char *fqy; /* We need to check the network for this buddy first */ - msn_userlist_save_pending_buddy(userlist, who, group ? group->name : NULL); - msn_notification_send_fqy(session, who); + msn_userlist_save_pending_buddy(userlist, who, gname); + tokens = g_strsplit(who, "@", 2); + fqy = g_strdup_printf("<ml><d n=\"%s\"><c n=\"%s\"/></d></ml>", + tokens[1], + tokens[0]); + msn_notification_send_fqy(session, fqy, strlen(fqy), + (MsnFqyCb)msn_userlist_add_pending_buddy); + g_free(fqy); + g_strfreev(tokens); } } @@ -1485,7 +1501,7 @@ msn_rem_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) return; /* XXX - Does buddy->name need to be msn_normalize'd here? --KingAnt */ - msn_userlist_rem_buddy(userlist, buddy->name); + msn_userlist_rem_buddy(userlist, purple_buddy_get_name(buddy)); } static void @@ -1738,20 +1754,22 @@ msn_rename_group(PurpleConnection *gc, const char *old_name, PurpleGroup *group, GList *moved_buddies) { MsnSession *session; + const char *gname; session = gc->proto_data; g_return_if_fail(session != NULL); g_return_if_fail(session->userlist != NULL); + gname = purple_group_get_name(group); if (msn_userlist_find_group_with_name(session->userlist, old_name) != NULL) { - msn_contact_rename_group(session, old_name, group->name); + msn_contact_rename_group(session, old_name, gname); } else { /* not found */ - msn_add_group(session, NULL, group->name); + msn_add_group(session, NULL, gname); } } @@ -1811,20 +1829,22 @@ msn_remove_group(PurpleConnection *gc, PurpleGroup *group) { MsnSession *session; MsnCmdProc *cmdproc; + const char *gname; session = gc->proto_data; cmdproc = session->notification->cmdproc; + gname = purple_group_get_name(group); - purple_debug_info("msn", "Remove group %s\n", group->name); + purple_debug_info("msn", "Remove group %s\n", gname); /*we can't delete the default group*/ - if(!strcmp(group->name, MSN_INDIVIDUALS_GROUP_NAME)|| - !strcmp(group->name, MSN_NON_IM_GROUP_NAME)) + if(!strcmp(gname, MSN_INDIVIDUALS_GROUP_NAME)|| + !strcmp(gname, MSN_NON_IM_GROUP_NAME)) { purple_debug_info("msn", "This group can't be removed, returning.\n"); return ; } - msn_del_group(session, group->name); + msn_del_group(session, gname); } /** @@ -1841,17 +1861,19 @@ msn_tooltip_extract_info_text(PurpleNotifyUserInfo *user_info, MsnGetInfoData *i if (b) { char *tmp; + const char *alias; - if (b->alias && b->alias[0]) + alias = purple_buddy_get_local_buddy_alias(b); + if (alias && alias[0]) { - char *aliastext = g_markup_escape_text(b->alias, -1); + char *aliastext = g_markup_escape_text(alias, -1); purple_notify_user_info_add_pair(user_info, _("Alias"), aliastext); g_free(aliastext); } - if (b->server_alias) + if ((alias = purple_buddy_get_server_alias(b)) != NULL) { - char *nicktext = g_markup_escape_text(b->server_alias, -1); + char *nicktext = g_markup_escape_text(alias, -1); tmp = g_strdup_printf("<font sml=\"msn\">%s</font>", nicktext); purple_notify_user_info_add_pair(user_info, _("Nickname"), tmp); g_free(tmp); diff --git a/libpurple/protocols/msn/notification.c b/libpurple/protocols/msn/notification.c index 47ea21fe0a..a7ffdf5b4e 100644 --- a/libpurple/protocols/msn/notification.c +++ b/libpurple/protocols/msn/notification.c @@ -544,17 +544,16 @@ msn_add_contact_xml(MsnSession *session, xmlnode *mlNode,const char *passport, M } /*find a domain Node*/ - for(d_node = xmlnode_get_child(mlNode,"d"); d_node; d_node = xmlnode_get_next_twin(d_node)) - { + for (d_node = xmlnode_get_child(mlNode, "d"); d_node; + d_node = xmlnode_get_next_twin(d_node)) { const char *attr = xmlnode_get_attrib(d_node,"n"); if (attr == NULL) continue; - if (!strcmp(attr,domain)) + if (!strcmp(attr, domain)) break; } - if(d_node == NULL) - { + if (d_node == NULL) { /*domain not found, create a new domain Node*/ purple_debug_info("msn", "Didn't find existing domain node, adding one.\n"); d_node = xmlnode_new("d"); @@ -566,20 +565,18 @@ msn_add_contact_xml(MsnSession *session, xmlnode *mlNode,const char *passport, M c_node = xmlnode_new("c"); xmlnode_set_attrib(c_node, "n", email); - purple_debug_info("msn", "list_op: %d\n", list_op); - g_snprintf(fmt_str, sizeof(fmt_str), "%d", list_op); - xmlnode_set_attrib(c_node, "l", fmt_str); + if (list_op != 0) { + purple_debug_info("msn", "list_op: %d\n", list_op); + g_snprintf(fmt_str, sizeof(fmt_str), "%d", list_op); + xmlnode_set_attrib(c_node, "l", fmt_str); + } - if (networkId != MSN_NETWORK_UNKNOWN) + if (networkId != MSN_NETWORK_UNKNOWN) { g_snprintf(fmt_str, sizeof(fmt_str), "%d", networkId); - else if (msn_user_is_yahoo(session->account, passport)) - g_snprintf(fmt_str, sizeof(fmt_str), "%d", MSN_NETWORK_YAHOO); - else - g_snprintf(fmt_str, sizeof(fmt_str), "%d", MSN_NETWORK_PASSPORT); - - /*mobile*/ - /*type_str = g_strdup_printf("4");*/ - xmlnode_set_attrib(c_node, "t", fmt_str); + /*mobile*/ + /*type_str = g_strdup_printf("4");*/ + xmlnode_set_attrib(c_node, "t", fmt_str); + } xmlnode_insert_child(d_node, c_node); @@ -596,6 +593,48 @@ msn_notification_post_adl(MsnCmdProc *cmdproc, const char *payload, int payload_ msn_cmdproc_send_trans(cmdproc, trans); } +void +msn_notification_send_fqy(MsnSession *session, + const char *payload, int payload_len, + MsnFqyCb cb) +{ + MsnTransaction *trans; + MsnCmdProc *cmdproc; + + cmdproc = session->notification->cmdproc; + + trans = msn_transaction_new(cmdproc, "FQY", "%d", payload_len); + msn_transaction_set_payload(trans, payload, payload_len); + msn_transaction_set_data(trans, cb); + msn_cmdproc_send_trans(cmdproc, trans); +} + +static void +update_contact_network(MsnSession *session, const char *passport, MsnNetwork network) +{ + MsnUser *user = msn_userlist_find_user(session->userlist, passport); + /* TODO: Also figure out how to update membership lists */ + if (user) { + xmlnode *adl_node; + char *payload; + int payload_len; + + msn_user_set_network(user, network); + + adl_node = xmlnode_new("ml"); + xmlnode_set_attrib(adl_node, "l", "1"); + msn_add_contact_xml(session, adl_node, passport, + user->list_op & MSN_LIST_OP_MASK, network); + payload = xmlnode_to_str(adl_node, &payload_len); + msn_notification_post_adl(session->notification->cmdproc, payload, payload_len); + + } else { + purple_debug_error("msn", + "Got FQY update for unkwown user %s on network %d.\n", + passport, network); + } +} + /*dump contact info to NS*/ void msn_notification_dump_contact(MsnSession *session) @@ -603,14 +642,17 @@ msn_notification_dump_contact(MsnSession *session) MsnUser *user; GList *l; xmlnode *adl_node; + xmlnode *fqy_node; char *payload; int payload_len; int adl_count = 0; + int fqy_count = 0; const char *display_name; adl_node = xmlnode_new("ml"); adl_node->child = NULL; xmlnode_set_attrib(adl_node, "l", "1"); + fqy_node = xmlnode_new("ml"); /*get the userlist*/ for (l = session->userlist->users; l != NULL; l = l->next) { @@ -635,36 +677,63 @@ msn_notification_dump_contact(MsnSession *session) msn_userlist_rem_buddy_from_list(session->userlist, user->passport, MSN_LIST_AL); } - msn_add_contact_xml(session, adl_node, user->passport, - user->list_op & MSN_LIST_OP_MASK, user->networkid); + if (user->networkid != MSN_NETWORK_UNKNOWN) { + msn_add_contact_xml(session, adl_node, user->passport, + user->list_op & MSN_LIST_OP_MASK, user->networkid); - /* each ADL command may contain up to 150 contacts */ - if (++adl_count % 150 == 0 || l->next == NULL) { - payload = xmlnode_to_str(adl_node,&payload_len); + /* each ADL command may contain up to 150 contacts */ + if (++adl_count % 150 == 0) { + payload = xmlnode_to_str(adl_node, &payload_len); - msn_notification_post_adl(session->notification->cmdproc, - payload, payload_len); + msn_notification_post_adl(session->notification->cmdproc, + payload, payload_len); - g_free(payload); - xmlnode_free(adl_node); + g_free(payload); + xmlnode_free(adl_node); - if (l->next) { adl_node = xmlnode_new("ml"); adl_node->child = NULL; xmlnode_set_attrib(adl_node, "l", "1"); } + } else { + msn_add_contact_xml(session, fqy_node, user->passport, + 0, user->networkid); + + /* each FQY command may contain up to 150 contacts, probably */ + if (++fqy_count % 150 == 0) { + payload = xmlnode_to_str(fqy_node, &payload_len); + + msn_notification_send_fqy(session, payload, payload_len, + update_contact_network); + + g_free(payload); + xmlnode_free(fqy_node); + fqy_node = xmlnode_new("ml"); + } } } - if (adl_count == 0) { - payload = xmlnode_to_str(adl_node,&payload_len); + /* Send the rest, or just an empty one to let the server set us online */ + if (adl_count == 0 || adl_count % 150 != 0) { + payload = xmlnode_to_str(adl_node, &payload_len); msn_notification_post_adl(session->notification->cmdproc, payload, payload_len); g_free(payload); - xmlnode_free(adl_node); } + if (fqy_count % 150 != 0) { + payload = xmlnode_to_str(fqy_node, &payload_len); + + msn_notification_send_fqy(session, payload, payload_len, + update_contact_network); + + g_free(payload); + } + + xmlnode_free(adl_node); + xmlnode_free(fqy_node); + display_name = purple_connection_get_display_name(session->account->gc); if (display_name && strcmp(display_name, @@ -674,30 +743,6 @@ msn_notification_dump_contact(MsnSession *session) } -/*Post FQY to NS,Inform add a Yahoo User*/ -void -msn_notification_send_fqy(MsnSession *session, const char *passport) -{ - MsnTransaction *trans; - MsnCmdProc *cmdproc; - char* email,*domain,*payload; - char **tokens; - - cmdproc = session->notification->cmdproc; - - tokens = g_strsplit(passport, "@", 2); - email = tokens[0]; - domain = tokens[1]; - - payload = g_strdup_printf("<ml><d n=\"%s\"><c n=\"%s\"/></d></ml>", domain, email); - trans = msn_transaction_new(cmdproc, "FQY","%" G_GSIZE_FORMAT, strlen(payload)); - msn_transaction_set_payload(trans, payload, strlen(payload)); - msn_cmdproc_send_trans(cmdproc, trans); - - g_free(payload); - g_strfreev(tokens); -} - static void blp_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { @@ -861,7 +906,7 @@ static void fqy_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload, size_t len) { - MsnUserList *userlist; + MsnSession *session; xmlnode *ml, *d, *c; const char *domain; const char *local; @@ -869,26 +914,37 @@ fqy_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload, char *passport; MsnNetwork network = MSN_NETWORK_PASSPORT; - userlist = cmdproc->session->userlist; + session = cmdproc->session; /* FQY response: <ml><d n="domain.com"><c n="local-node" t="network" /></d></ml> */ ml = xmlnode_from_str(payload, len); - d = xmlnode_get_child(ml, "d"); - c = xmlnode_get_child(d, "c"); - domain = xmlnode_get_attrib(d, "n"); - local = xmlnode_get_attrib(c, "n"); - type = xmlnode_get_attrib(c, "t"); - - passport = g_strdup_printf("%s@%s", local, domain); - - if (type != NULL) - network = (MsnNetwork)strtoul(type, NULL, 10); - purple_debug_info("msn", "FQY response says %s is from network %d\n", - passport, network); - msn_userlist_add_pending_buddy(userlist, passport, network); + for (d = xmlnode_get_child(ml, "d"); + d != NULL; + d = xmlnode_get_next_twin(d)) { + domain = xmlnode_get_attrib(d, "n"); + for (c = xmlnode_get_child(d, "c"); + c != NULL; + c = xmlnode_get_next_twin(c)) { + local = xmlnode_get_attrib(c, "n"); + type = xmlnode_get_attrib(c, "t"); + + passport = g_strdup_printf("%s@%s", local, domain); + + if (type != NULL) + network = (MsnNetwork)strtoul(type, NULL, 10); + else + network = MSN_NETWORK_PASSPORT; + + purple_debug_info("msn", "FQY response says %s is from network %d\n", + passport, network); + if (cmd->trans->data) + ((MsnFqyCb)cmd->trans->data)(session, passport, network); + + g_free(passport); + } + } - g_free(passport); xmlnode_free(ml); } diff --git a/libpurple/protocols/msn/notification.h b/libpurple/protocols/msn/notification.h index 8fa8d9d734..e2efd415cb 100644 --- a/libpurple/protocols/msn/notification.h +++ b/libpurple/protocols/msn/notification.h @@ -58,6 +58,8 @@ struct _MsnNotification gboolean in_use; }; +typedef void (*MsnFqyCb)(MsnSession *session, const char *passport, MsnNetwork network); + #include "state.h" void uum_send_msg(MsnSession *session,MsnMessage *msg); @@ -69,7 +71,9 @@ void msn_notification_add_buddy_to_list(MsnNotification *notification, void msn_notification_rem_buddy_from_list(MsnNotification *notification, MsnListId list_id, MsnUser *user); -void msn_notification_send_fqy(MsnSession *session, const char *passport); +void msn_notification_send_fqy(MsnSession *session, + const char *payload, int payload_len, + MsnFqyCb cb); MsnNotification *msn_notification_new(MsnSession *session); void msn_notification_destroy(MsnNotification *notification); diff --git a/libpurple/protocols/msn/session.c b/libpurple/protocols/msn/session.c index 1bbfd0efd6..424a37c6d5 100644 --- a/libpurple/protocols/msn/session.c +++ b/libpurple/protocols/msn/session.c @@ -271,16 +271,21 @@ msn_session_sync_users(MsnSession *session) * being logged in. This no longer happens, so we manually iterate * over the whole buddy list to identify sync issues. */ - for (gnode = purple_get_blist()->root; gnode; gnode = gnode->next) { + for (gnode = purple_blist_get_root(); gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) { PurpleGroup *group = (PurpleGroup *)gnode; const char *group_name; if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - group_name = group->name; - for(cnode = gnode->child; cnode; cnode = cnode->next) { + group_name = purple_group_get_name(group); + for(cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) { if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for(bnode = cnode->child; bnode; bnode = bnode->next) { + for(bnode = purple_blist_node_get_first_child(cnode); + bnode; + bnode = purple_blist_node_get_sibling_next(bnode)) { PurpleBuddy *b; if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; diff --git a/libpurple/protocols/msn/slpcall.c b/libpurple/protocols/msn/slpcall.c index 6cf852a13f..7de69a09be 100644 --- a/libpurple/protocols/msn/slpcall.c +++ b/libpurple/protocols/msn/slpcall.c @@ -47,8 +47,7 @@ msn_slpcall_timeout(gpointer data) if (!slpcall->pending && !slpcall->progress) { msn_slpcall_destroy(slpcall); - slpcall->timer = 0; - return FALSE; + return TRUE; } slpcall->progress = FALSE; diff --git a/libpurple/protocols/msn/switchboard.c b/libpurple/protocols/msn/switchboard.c index 315d3b555e..0ada2639d1 100644 --- a/libpurple/protocols/msn/switchboard.c +++ b/libpurple/protocols/msn/switchboard.c @@ -383,7 +383,7 @@ msg_resend_cb(gpointer data) { MsnSwitchBoard *swboard = data; - purple_debug_info("msn", "unqueuing unsent message to %s", swboard->im_user); + purple_debug_info("msn", "unqueuing unsent message to %s\n", swboard->im_user); msn_switchboard_request(swboard); msn_switchboard_request_add_user(swboard, swboard->im_user); @@ -448,7 +448,7 @@ msg_error_helper(MsnCmdProc *cmdproc, MsnMessage *msg, MsnMsgErrorType error) body_enc = g_markup_escape_text(body_str, -1); g_free(body_str); - purple_debug_info("msn", "queuing unsent message to %s: %s", + purple_debug_info("msn", "queuing unsent message to %s: %s\n", swboard->im_user, body_enc); g_free(body_enc); msn_send_im_message(session, msg); diff --git a/libpurple/protocols/msn/user.c b/libpurple/protocols/msn/user.c index d5b5430afc..2ec31db3a4 100644 --- a/libpurple/protocols/msn/user.c +++ b/libpurple/protocols/msn/user.c @@ -294,9 +294,8 @@ msn_user_add_group_id(MsnUser *user, const char* group_id) b = purple_buddy_new(account, passport, NULL); purple_blist_add_buddy(b, NULL, g, NULL); } - b->proto_data = user; + purple_buddy_set_protocol_data(b, user); /*Update the blist Node info*/ -// purple_blist_node_set_string(&(b->node), "", ""); } /*check if the msn user is online*/ diff --git a/libpurple/protocols/msn/userlist.c b/libpurple/protocols/msn/userlist.c index 520dd1978f..a98919d537 100644 --- a/libpurple/protocols/msn/userlist.c +++ b/libpurple/protocols/msn/userlist.c @@ -770,10 +770,11 @@ msn_userlist_save_pending_buddy(MsnUserList *userlist, * Actually adds a buddy once we have the response from FQY */ void -msn_userlist_add_pending_buddy(MsnUserList *userlist, +msn_userlist_add_pending_buddy(MsnSession *session, const char *who, /*MsnNetwork*/ int network) { + MsnUserList *userlist = session->userlist; MsnUser *user = NULL; MsnUser *user2; GList *l; @@ -930,31 +931,37 @@ void msn_userlist_load(MsnSession *session) { PurpleBlistNode *gnode, *cnode, *bnode; - PurpleConnection *gc = purple_account_get_connection(session->account); + PurpleAccount *account = session->account; + PurpleConnection *gc = purple_account_get_connection(account); GSList *l; MsnUser * user; g_return_if_fail(gc != NULL); - for (gnode = purple_get_blist()->root; gnode; gnode = gnode->next) + for (gnode = purple_blist_get_root(); gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for (cnode = gnode->child; cnode; cnode = cnode->next) + for (cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) { if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for (bnode = cnode->child; bnode; bnode = bnode->next) + for (bnode = purple_blist_node_get_first_child(cnode); + bnode; + bnode = purple_blist_node_get_sibling_next(bnode)) { PurpleBuddy *b; if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; b = (PurpleBuddy *)bnode; - if (b->account == gc->account) + if (purple_buddy_get_account(b) == account) { user = msn_userlist_find_add_user(session->userlist, - b->name,NULL); - b->proto_data = user; + purple_buddy_get_name(b), NULL); + purple_buddy_set_protocol_data(b, user); msn_user_set_op(user, MSN_LIST_FL_OP); } } diff --git a/libpurple/protocols/msn/userlist.h b/libpurple/protocols/msn/userlist.h index 49bf870fe1..fef45a3491 100644 --- a/libpurple/protocols/msn/userlist.h +++ b/libpurple/protocols/msn/userlist.h @@ -95,7 +95,7 @@ void msn_userlist_add_buddy(MsnUserList *userlist, void msn_userlist_save_pending_buddy(MsnUserList *userlist, const char *who, const char *group_name); -void msn_userlist_add_pending_buddy(MsnUserList *userlist, +void msn_userlist_add_pending_buddy(MsnSession *session, const char *who, /*MsnNetwork*/ int network); void msn_userlist_move_buddy(MsnUserList *userlist, const char *who, diff --git a/libpurple/protocols/myspace/README b/libpurple/protocols/myspace/README index b890160596..f9f062c9e6 100644 --- a/libpurple/protocols/myspace/README +++ b/libpurple/protocols/myspace/README @@ -1,9 +1,8 @@ -MySpaceIM Protocol Plugin for Libpurple by Jeff Connelly 20070807 - +MySpaceIM Protocol Plugin for libpurple by Jeff Connelly 2007-08-07 Greetings. This package contains a plugin for libpurple (as used in -Pidgin, formerly Gaim) to connect to the new MySpaceIM instant messaging -network and send/receive messages. Functionality is only basic as of yet, +Pidgin, formerly Gaim) to connect to the new MySpaceIM instant messaging +network and send/receive messages. Functionality is only basic as of yet, and this code should be considered alpha quality. This code was initially developed under Google Summer of Code 2007. @@ -15,10 +14,10 @@ Usage: Login using your _email address_ you use to login to myspace.com. You can't login using your numeric ID or alias. -To test it out, send a message to yourself (by your username or numeric -uid (email not yet supported)) or tom (6221). In either case you should -get a reply. You should also be able to talk to other MySpaceIM users if -you desire. Replies will always be shown as coming from a user's username, +To test it out, send a message to yourself (by your username or numeric +uid (email not yet supported)) or tom (6221). In either case you should +get a reply. You should also be able to talk to other MySpaceIM users if +you desire. Replies will always be shown as coming from a user's username, even if you IM by email or userid. Feedback welcome. You can IM my test account at "msimprpl" if you feel like it. @@ -26,4 +25,3 @@ Feedback welcome. You can IM my test account at "msimprpl" if you feel like it. Enjoy, -Jeff Connelly msimprpl@xyzzy.cjb.net - diff --git a/libpurple/protocols/myspace/myspace.c b/libpurple/protocols/myspace/myspace.c index c4b543da96..40ec871bd0 100644 --- a/libpurple/protocols/myspace/myspace.c +++ b/libpurple/protocols/myspace/myspace.c @@ -202,7 +202,7 @@ msim_postprocess_outgoing(MsimSession *session, MsimMessage *msg, /* Next, see if on buddy list and know uid. */ buddy = purple_find_buddy(session->account, username); if (buddy) { - uid = purple_blist_node_get_int(&buddy->node, "UserID"); + uid = purple_blist_node_get_int(PURPLE_BLIST_NODE(buddy), "UserID"); } else { uid = 0; } @@ -311,7 +311,7 @@ msim_uid2username_from_blist(PurpleAccount *account, guint wanted_uid) /* See finch/gnthistory.c */ buddy = cur->data; - uid = purple_blist_node_get_int(&buddy->node, "UserID"); + uid = purple_blist_node_get_int(PURPLE_BLIST_NODE(buddy), "UserID"); name = purple_buddy_get_name(buddy); if (uid == wanted_uid) @@ -383,12 +383,17 @@ msim_status_text(PurpleBuddy *buddy) MsimSession *session; MsimUser *user; const gchar *display_name, *headline; + PurpleAccount *account; + PurpleConnection *gc; g_return_val_if_fail(buddy != NULL, NULL); user = msim_get_user_from_buddy(buddy); - session = (MsimSession *)buddy->account->gc->proto_data; + account = purple_buddy_get_account(buddy); + gc = purple_account_get_connection(account); + session = (MsimSession *)gc->proto_data; + g_return_val_if_fail(MSIM_SESSION_VALID(session), NULL); display_name = headline = NULL; @@ -435,8 +440,10 @@ msim_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, if (PURPLE_BUDDY_IS_ONLINE(buddy)) { MsimSession *session; - - session = (MsimSession *)buddy->account->gc->proto_data; + PurpleAccount *account = purple_buddy_get_account(buddy); + PurpleConnection *gc = purple_account_get_connection(account); + + session = (MsimSession *)gc->proto_data; g_return_if_fail(MSIM_SESSION_VALID(session)); @@ -1036,11 +1043,11 @@ msim_add_contact_from_server_cb(MsimSession *session, const MsimMessage *user_lo * of numbers in the buddy list. */ if (display_name != NULL) { - purple_blist_node_set_string(&buddy->node, "DisplayName", display_name); + purple_blist_node_set_string(PURPLE_BLIST_NODE(buddy), "DisplayName", display_name); serv_got_alias(session->gc, username, display_name); } else { serv_got_alias(session->gc, username, - purple_blist_node_get_string(&buddy->node, "DisplayName")); + purple_blist_node_get_string(PURPLE_BLIST_NODE(buddy), "DisplayName")); } } g_free(display_name); @@ -1050,7 +1057,7 @@ msim_add_contact_from_server_cb(MsimSession *session, const MsimMessage *user_lo user->id = uid; /* Keep track of the user ID across sessions */ - purple_blist_node_set_int(&buddy->node, "UserID", uid); + purple_blist_node_set_int(PURPLE_BLIST_NODE(buddy), "UserID", uid); /* Stores a few fields in the MsimUser, relevant to the buddy itself. * AvatarURL, Headline, ContactID. */ @@ -1374,7 +1381,7 @@ msim_incoming_status(MsimSession *session, MsimMessage *msg) user->id = msim_msg_get_integer(msg, "f"); /* Keep track of the user ID across sessions */ - purple_blist_node_set_int(&buddy->node, "UserID", user->id); + purple_blist_node_set_int(PURPLE_BLIST_NODE(buddy), "UserID", user->id); msim_store_user_info(session, msg, NULL); } else { @@ -2628,10 +2635,14 @@ msim_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) MsimMessage *msg; MsimMessage *msg_persist; MsimMessage *body; + const char *name, *gname; session = (MsimSession *)gc->proto_data; + name = purple_buddy_get_name(buddy); + gname = group ? purple_group_get_name(group) : NULL; + purple_debug_info("msim", "msim_add_buddy: want to add %s to %s\n", - buddy->name, (group && group->name) ? group->name : "(no group)"); + name, gname ? gname : "(no group)"); msg = msim_msg_new( "addbuddy", MSIM_TYPE_BOOLEAN, TRUE, @@ -2640,7 +2651,7 @@ msim_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) "reason", MSIM_TYPE_STRING, g_strdup(""), NULL); - if (!msim_postprocess_outgoing(session, msg, buddy->name, "newprofileid", "reason")) { + if (!msim_postprocess_outgoing(session, msg, name, "newprofileid", "reason")) { purple_notify_error(NULL, NULL, _("Failed to add buddy"), _("'addbuddy' command failed.")); msim_msg_free(msg); return; @@ -2652,7 +2663,7 @@ msim_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) body = msim_msg_new( "ContactID", MSIM_TYPE_STRING, g_strdup("<uid>"), - "GroupName", MSIM_TYPE_STRING, g_strdup(group->name), + "GroupName", MSIM_TYPE_STRING, g_strdup(gname), "Position", MSIM_TYPE_INTEGER, 1000, "Visibility", MSIM_TYPE_INTEGER, 1, "NickName", MSIM_TYPE_STRING, g_strdup(""), @@ -2673,7 +2684,7 @@ msim_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) "body", MSIM_TYPE_DICTIONARY, body, NULL); - if (!msim_postprocess_outgoing(session, msg_persist, buddy->name, "body", NULL)) + if (!msim_postprocess_outgoing(session, msg_persist, name, "body", NULL)) { purple_notify_error(NULL, NULL, _("Failed to add buddy"), _("persist command failed")); msim_msg_free(msg_persist); @@ -2682,7 +2693,14 @@ msim_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) msim_msg_free(msg_persist); /* Add to allow list, remove from block list */ - msim_update_blocklist_for_buddy(session, buddy->name, TRUE, FALSE); + msim_update_blocklist_for_buddy(session, name, TRUE, FALSE); +} + +static void +msim_buddy_free(PurpleBuddy *buddy) +{ + msim_user_free(purple_buddy_get_protocol_data(buddy)); + purple_buddy_set_protocol_data(buddy, NULL); } /** @@ -2694,8 +2712,10 @@ msim_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) MsimSession *session; MsimMessage *delbuddy_msg; MsimMessage *persist_msg; + const char *name; session = (MsimSession *)gc->proto_data; + name = purple_buddy_get_name(buddy); delbuddy_msg = msim_msg_new( "delbuddy", MSIM_TYPE_BOOLEAN, TRUE, @@ -2703,7 +2723,7 @@ msim_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) /* 'delprofileid' with uid will be inserted here. */ NULL); - if (!msim_postprocess_outgoing(session, delbuddy_msg, buddy->name, "delprofileid", NULL)) { + if (!msim_postprocess_outgoing(session, delbuddy_msg, name, "delprofileid", NULL)) { purple_notify_error(NULL, NULL, _("Failed to remove buddy"), _("'delbuddy' command failed")); msim_msg_free(delbuddy_msg); return; @@ -2722,7 +2742,7 @@ msim_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) "body", MSIM_TYPE_STRING, g_strdup("ContactID=<uid>"), NULL); - if (!msim_postprocess_outgoing(session, persist_msg, buddy->name, "body", NULL)) { + if (!msim_postprocess_outgoing(session, persist_msg, name, "body", NULL)) { purple_notify_error(NULL, NULL, _("Failed to remove buddy"), _("persist command failed")); msim_msg_free(persist_msg); return; @@ -2734,15 +2754,12 @@ msim_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) * doesn't seem like it would be necessary, but the official client * does it) */ - if (!msim_update_blocklist_for_buddy(session, buddy->name, FALSE, FALSE)) { + if (!msim_update_blocklist_for_buddy(session, name, FALSE, FALSE)) { purple_notify_error(NULL, NULL, _("Failed to remove buddy"), _("blocklist command failed")); return; } - if (buddy->proto_data) { - msim_user_free(buddy->proto_data); - buddy->proto_data = NULL; - } + msim_buddy_free(buddy); } /** @@ -2832,13 +2849,6 @@ msim_rem_deny(PurpleConnection *gc, const char *name) msim_update_blocklist_for_buddy(session, name, FALSE, FALSE); } -static void -msim_buddy_free(PurpleBuddy *buddy) -{ - msim_user_free(buddy->proto_data); - buddy->proto_data = NULL; -} - /** * Returns a string of a username in canonical form. Basically removes all the * spaces, lowercases the string, and looks up user IDs to usernames. @@ -3112,8 +3122,8 @@ msim_import_friends_cb(MsimSession *session, const MsimMessage *reply, gpointer body = msim_msg_get_dictionary(reply, "body"); g_return_if_fail(body != NULL); completed = msim_msg_get_string(body, "Completed"); - g_return_if_fail(body != NULL); msim_msg_free(body); + g_return_if_fail(completed != NULL); if (!g_str_equal(completed, "True")) { purple_debug_info("msim_import_friends_cb", diff --git a/libpurple/protocols/myspace/user.c b/libpurple/protocols/myspace/user.c index 86115d93e5..bdd53d084c 100644 --- a/libpurple/protocols/myspace/user.c +++ b/libpurple/protocols/myspace/user.c @@ -52,17 +52,14 @@ msim_get_user_from_buddy(PurpleBuddy *buddy) return NULL; } - if (!buddy->proto_data) { + if (!(user = purple_buddy_get_protocol_data(buddy))) { /* No MsimUser for this buddy; make one. */ user = g_new0(MsimUser, 1); user->buddy = buddy; - user->id = purple_blist_node_get_int((PurpleBlistNode*)buddy, "UserID"); - buddy->proto_data = (gpointer)user; + purple_buddy_set_protocol_data(buddy, user); } - user = (MsimUser *)(buddy->proto_data); - return user; } @@ -111,6 +108,7 @@ msim_append_user_info(MsimSession *session, PurpleNotifyUserInfo *user_info, Msi { PurplePresence *presence; gchar *str; + guint uid; guint cv; /* Useful to identify the account the tooltip refers to. @@ -119,6 +117,8 @@ msim_append_user_info(MsimSession *session, PurpleNotifyUserInfo *user_info, Msi purple_notify_user_info_add_pair(user_info, _("User"), user->username); } + uid = purple_blist_node_get_int((PurpleBlistNode *)user->buddy, "UserID"); + /* a/s/l...the vitals */ if (user->age) { char age[16]; @@ -209,9 +209,9 @@ msim_downloaded_buddy_icon(PurpleUtilFetchUrlData *url_data, gsize len, const gchar *error_message) { - MsimUser *user; - - user = (MsimUser *)user_data; + MsimUser *user = (MsimUser *)user_data; + const char *name = purple_buddy_get_name(user->buddy); + PurpleAccount *account; purple_debug_info("msim_downloaded_buddy_icon", "Downloaded %" G_GSIZE_FORMAT " bytes\n", len); @@ -219,12 +219,12 @@ msim_downloaded_buddy_icon(PurpleUtilFetchUrlData *url_data, if (!url_text) { purple_debug_info("msim_downloaded_buddy_icon", "failed to download icon for %s", - user->buddy->name); + name); return; } - purple_buddy_icons_set_for_user(user->buddy->account, - user->buddy->name, + account = purple_buddy_get_account(user->buddy); + purple_buddy_icons_set_for_user(account, name, g_memdup((gchar *)url_text, len), len, /* Use URL itself as buddy icon "checksum" (TODO: ETag) */ user->image_url); /* checksum */ @@ -247,7 +247,9 @@ msim_downloaded_buddy_icon(PurpleUtilFetchUrlData *url_data, static void msim_set_artist_or_title(MsimUser *user, const char *new_artist, const char *new_title) { PurplePresence *presence; + PurpleAccount *account; const char *prev_artist, *prev_title; + const char *name; if (user->buddy == NULL) /* User not on buddy list so nothing to do */ @@ -261,8 +263,11 @@ static void msim_set_artist_or_title(MsimUser *user, const char *new_artist, con if (new_title && !*new_title) new_title = NULL; + account = purple_buddy_get_account(user->buddy); + name = purple_buddy_get_name(user->buddy); + if (!new_artist && !new_title) { - purple_prpl_got_user_status_deactive(user->buddy->account, user->buddy->name, "tune"); + purple_prpl_got_user_status_deactive(account, name, "tune"); return; } @@ -282,7 +287,7 @@ static void msim_set_artist_or_title(MsimUser *user, const char *new_artist, con if (!new_title) new_title = prev_title; - purple_prpl_got_user_status(user->buddy->account, user->buddy->name, "tune", + purple_prpl_got_user_status(account, name, "tune", PURPLE_TUNE_TITLE, new_title, PURPLE_TUNE_ARTIST, new_artist, NULL); @@ -299,14 +304,16 @@ static void msim_set_artist_or_title(MsimUser *user, const char *new_artist, con static void msim_store_user_info_each(const gchar *key_str, gchar *value_str, MsimUser *user) { + const char *name = user->buddy ? purple_buddy_get_name(user->buddy) : NULL; + if (g_str_equal(key_str, "UserID") || g_str_equal(key_str, "ContactID")) { /* Save to buddy list, if it exists, for quick cached uid lookup with msim_uid2username_from_blist(). */ user->id = atol(value_str); g_free(value_str); if (user->buddy) { - purple_debug_info("msim", "associating uid %s with username %s\n", key_str, user->buddy->name); - purple_blist_node_set_int(&user->buddy->node, "UserID", user->id); + purple_debug_info("msim", "associating uid %s with username %s\n", key_str, name); + purple_blist_node_set_int(PURPLE_BLIST_NODE(user->buddy), "UserID", user->id); } /* Need to store in MsimUser, too? What if not on blist? */ } else if (g_str_equal(key_str, "Age")) { @@ -359,9 +366,8 @@ msim_store_user_info_each(const gchar *key_str, gchar *value_str, MsimUser *user /* Instead of showing 'no photo' picture, show nothing. */ if (g_str_equal(user->image_url, "http://x.myspace.com/images/no_pic.gif")) { - purple_buddy_icons_set_for_user(user->buddy->account, - user->buddy->name, - NULL, 0, NULL); + purple_buddy_icons_set_for_user(purple_buddy_get_account(user->buddy), + name, NULL, 0, NULL); return; } diff --git a/libpurple/protocols/myspace/zap.c b/libpurple/protocols/myspace/zap.c index fdecee6c4c..a1501b28ef 100644 --- a/libpurple/protocols/myspace/zap.c +++ b/libpurple/protocols/myspace/zap.c @@ -173,13 +173,13 @@ msim_send_zap_from_menu(PurpleBlistNode *node, gpointer zap_num_ptr) buddy = (PurpleBuddy *)node; /* Find the session */ - account = buddy->account; + account = purple_buddy_get_account(buddy); gc = purple_account_get_connection(account); session = (MsimSession *)gc->proto_data; zap = GPOINTER_TO_INT(zap_num_ptr); - purple_prpl_send_attention(session->gc, buddy->name, zap); + purple_prpl_send_attention(session->gc, purple_buddy_get_name(buddy), zap); } /** Return menu, if any, for a buddy list node. */ diff --git a/libpurple/protocols/novell/novell.c b/libpurple/protocols/novell/novell.c index 55d4a53ea2..50ca789452 100644 --- a/libpurple/protocols/novell/novell.c +++ b/libpurple/protocols/novell/novell.c @@ -293,7 +293,7 @@ _get_details_resp_setup_buddy(NMUser * user, NMERR_T ret_code, nm_user_record_get_display_id(user_record)); alias = purple_buddy_get_alias(buddy); - if (alias == NULL || *alias == '\0' || (strcmp(alias, buddy->name) == 0)) { + if (alias == NULL || *alias == '\0' || (strcmp(alias, purple_buddy_get_name(buddy)) == 0)) { purple_blist_alias_buddy(buddy, nm_user_record_get_full_name(user_record)); @@ -1175,10 +1175,12 @@ _update_buddy_status(NMUser *user, PurpleBuddy * buddy, int novellstatus, int gm const char *status_id; const char *text = NULL; const char *dn; + const char *name; int idle = 0; gboolean loggedin = TRUE; - account = buddy->account; + account = purple_buddy_get_account(buddy); + name = purple_buddy_get_name(buddy); switch (novellstatus) { case NM_STATUS_AVAILABLE: @@ -1205,7 +1207,7 @@ _update_buddy_status(NMUser *user, PurpleBuddy * buddy, int novellstatus, int gm } /* Get status text for the user */ - dn = nm_lookup_dn(user, buddy->name); + dn = nm_lookup_dn(user, name); if (dn) { NMUserRecord *user_record = nm_find_user_record(user, dn); if (user_record) { @@ -1213,9 +1215,9 @@ _update_buddy_status(NMUser *user, PurpleBuddy * buddy, int novellstatus, int gm } } - purple_prpl_got_user_status(account, buddy->name, status_id, + purple_prpl_got_user_status(account, name, status_id, "message", text, NULL); - purple_prpl_got_user_idle(account, buddy->name, + purple_prpl_got_user_idle(account, name, (novellstatus == NM_STATUS_AWAY_IDLE), idle); } @@ -1230,44 +1232,46 @@ _remove_purple_buddies(NMUser *user) PurpleBlistNode *bnode; PurpleGroup *group; PurpleBuddy *buddy; - PurpleBuddyList *blist; GSList *rem_list = NULL; GSList *l; NMFolder *folder = NULL; const char *gname = NULL; - if ((blist = purple_get_blist())) { - for (gnode = blist->root; gnode; gnode = gnode->next) { - if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) + for (gnode = purple_blist_get_root(); gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) { + if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) + continue; + group = (PurpleGroup *) gnode; + gname = purple_group_get_name(group); + for (cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) { + if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - group = (PurpleGroup *) gnode; - for (cnode = gnode->child; cnode; cnode = cnode->next) { - if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) + for (bnode = purple_blist_node_get_first_child(cnode); + bnode; + bnode = purple_blist_node_get_sibling_next(bnode)) { + if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; - for (bnode = cnode->child; bnode; bnode = bnode->next) { - if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) - continue; - buddy = (PurpleBuddy *) bnode; - if (buddy->account == user->client_data) { - gname = group->name; - if (strcmp(group->name, NM_ROOT_FOLDER_NAME) == 0) - gname = ""; - folder = nm_find_folder(user, gname); - if (folder == NULL || - !nm_folder_find_contact_by_display_id(folder, buddy->name)) { - rem_list = g_slist_append(rem_list, buddy); - } + buddy = (PurpleBuddy *) bnode; + if (purple_buddy_get_account(buddy) == user->client_data) { + if (strcmp(gname, NM_ROOT_FOLDER_NAME) == 0) + gname = ""; + folder = nm_find_folder(user, gname); + if (folder == NULL || + !nm_folder_find_contact_by_display_id(folder, purple_buddy_get_name(buddy))) { + rem_list = g_slist_append(rem_list, buddy); } } } } + } - if (rem_list) { - for (l = rem_list; l; l = l->next) { - purple_blist_remove_buddy(l->data); - } - g_slist_free(rem_list); + if (rem_list) { + for (l = rem_list; l; l = l->next) { + purple_blist_remove_buddy(l->data); } + g_slist_free(rem_list); } } @@ -1613,14 +1617,14 @@ _initiate_conference_cb(PurpleBlistNode *node, gpointer ignored) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); user = gc->proto_data; if (user == NULL) return; /* We should already have a userrecord for the buddy */ - user_record = nm_find_user_record(user, buddy->name); + user_record = nm_find_user_record(user, purple_buddy_get_name(buddy)); if (user_record == NULL) return; @@ -2538,7 +2542,7 @@ novell_add_buddy(PurpleConnection * gc, PurpleBuddy *buddy, PurpleGroup * group) NMContact *contact; NMUser *user; NMERR_T rc = NM_OK; - const char *alias, *gname; + const char *alias, *gname, *bname; if (gc == NULL || buddy == NULL || group == NULL) return; @@ -2554,22 +2558,22 @@ novell_add_buddy(PurpleConnection * gc, PurpleBuddy *buddy, PurpleGroup * group) return; contact = nm_create_contact(); - nm_contact_set_dn(contact, buddy->name); + nm_contact_set_dn(contact, purple_buddy_get_name(buddy)); /* Remove the PurpleBuddy (we will add it back after adding it * to the server side list). Save the alias if there is one. */ alias = purple_buddy_get_alias(buddy); - if (alias && strcmp(alias, buddy->name)) + bname = purple_buddy_get_name(buddy); + if (alias && strcmp(alias, bname)) nm_contact_set_display_name(contact, alias); purple_blist_remove_buddy(buddy); buddy = NULL; - if (strcmp(group->name, NM_ROOT_FOLDER_NAME) == 0) { + gname = purple_group_get_name(group); + if (strcmp(gname, NM_ROOT_FOLDER_NAME) == 0) { gname = ""; - } else { - gname = group->name; } folder = nm_find_folder(user, gname); @@ -2603,11 +2607,10 @@ novell_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group return; user = (NMUser *) gc->proto_data; - if (user && (dn = nm_lookup_dn(user, buddy->name))) { - if (strcmp(group->name, NM_ROOT_FOLDER_NAME) == 0) { + if (user && (dn = nm_lookup_dn(user, purple_buddy_get_name(buddy)))) { + gname = purple_group_get_name(group); + if (strcmp(gname, NM_ROOT_FOLDER_NAME) == 0) { gname = ""; - } else { - gname = group->name; } folder = nm_find_folder(user, gname); if (folder) { @@ -2637,7 +2640,7 @@ novell_remove_group(PurpleConnection * gc, PurpleGroup *group) user = (NMUser *) gc->proto_data; if (user) { - NMFolder *folder = nm_find_folder(user, group->name); + NMFolder *folder = nm_find_folder(user, purple_group_get_name(group)); if (folder) { rc = nm_send_remove_folder(user, folder, @@ -2684,9 +2687,11 @@ novell_alias_buddy(PurpleConnection * gc, const char *name, const char *alias) } if (group) { + const char *balias; buddy = purple_find_buddy_in_group(user->client_data, name, group); - if (buddy && strcmp(buddy->alias, alias)) + balias = buddy ? purple_buddy_get_local_buddy_alias(buddy) : NULL; + if (balias && strcmp(balias, alias)) purple_blist_alias_buddy(buddy, alias); } @@ -2777,8 +2782,9 @@ novell_rename_group(PurpleConnection * gc, const char *old_name, user = gc->proto_data; if (user) { + const char *gname = purple_group_get_name(group); /* Does new folder exist already? */ - if (nm_find_folder(user, group->name)) { + if (nm_find_folder(user, gname)) { /* purple_blist_rename_group() adds the buddies * to the new group and removes the old group... * so there is nothing more to do here. @@ -2793,7 +2799,7 @@ novell_rename_group(PurpleConnection * gc, const char *old_name, folder = nm_find_folder(user, old_name); if (folder) { - rc = nm_send_rename_folder(user, folder, group->name, + rc = nm_send_rename_folder(user, folder, gname, _rename_folder_resp_cb, NULL); _check_for_disconnect(user, rc); } @@ -2819,12 +2825,12 @@ novell_tooltip_text(PurpleBuddy * buddy, PurpleNotifyUserInfo * user_info, gbool if (buddy == NULL) return; - gc = purple_account_get_connection(buddy->account); + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); if (gc == NULL || (user = gc->proto_data) == NULL) return; if (PURPLE_BUDDY_IS_ONLINE(buddy)) { - user_record = nm_find_user_record(user, buddy->name); + user_record = nm_find_user_record(user, purple_buddy_get_name(buddy)); if (user_record) { status = nm_user_record_get_status(user_record); text = nm_user_record_get_status_text(user_record); @@ -2923,14 +2929,16 @@ novell_status_text(PurpleBuddy * buddy) { const char *text = NULL; const char *dn = NULL; + PurpleAccount *account; - if (buddy && buddy->account) { - PurpleConnection *gc = purple_account_get_connection(buddy->account); + account = buddy ? purple_buddy_get_account(buddy) : NULL; + if (buddy && account) { + PurpleConnection *gc = purple_account_get_connection(account); if (gc && gc->proto_data) { NMUser *user = gc->proto_data; - dn = nm_lookup_dn(user, buddy->name); + dn = nm_lookup_dn(user, purple_buddy_get_name(buddy)); if (dn) { NMUserRecord *user_record = nm_find_user_record(user, dn); diff --git a/libpurple/protocols/null/README b/libpurple/protocols/null/README index a63e50667d..1e5d962e0b 100644 --- a/libpurple/protocols/null/README +++ b/libpurple/protocols/null/README @@ -28,11 +28,10 @@ BUILDING AND INSTALLING ----------------------- To build, just run ./configure as usual in the root directory of the pidgin -source distribution. Then cd libpurple/protocols/null and type make. To -install, copy libnull.la and .libs/libnull.so into your ~/.purple/plugins -directory. Then run Pidgin. +source distribution. Then cd libpurple/protocols/null and then make. To +install, run make install. Then run Pidgin. -To build nullprpl on Windows (with Cygwin/MinGW), use Makefile.mingw. +To build nullprpl on Windows (with Cygwin/MinGW), use: make -f Makefile.mingw ----- USAGE diff --git a/libpurple/protocols/null/nullprpl.c b/libpurple/protocols/null/nullprpl.c index 6515b56865..21d2f63caa 100644 --- a/libpurple/protocols/null/nullprpl.c +++ b/libpurple/protocols/null/nullprpl.c @@ -220,25 +220,7 @@ static GList *nullprpl_actions(PurplePlugin *plugin, gpointer context) */ static const char *nullprpl_list_icon(PurpleAccount *acct, PurpleBuddy *buddy) { - /* shamelessly steal (er, borrow) the meanwhile protocol icon. it's cute! */ - return "meanwhile"; -} - -static const char *nullprpl_list_emblem(PurpleBuddy *buddy) -{ - const char* emblem; - - if (get_nullprpl_gc(buddy->name)) { - PurplePresence *presence = purple_buddy_get_presence(buddy); - PurpleStatus *status = purple_presence_get_active_status(presence); - emblem = purple_status_get_name(status); - } else { - emblem = "offline"; - } - - purple_debug_info("nullprpl", "using emblem %s for %s's buddy %s\n", - emblem, buddy->account->username, buddy->name); - return emblem; + return "null"; } static char *nullprpl_status_text(PurpleBuddy *buddy) { @@ -304,22 +286,22 @@ static GList *nullprpl_status_types(PurpleAccount *acct) acct->username, NULL_STATUS_ONLINE, NULL_STATUS_AWAY, NULL_STATUS_OFFLINE); - type = purple_status_type_new(PURPLE_STATUS_AVAILABLE, NULL_STATUS_ONLINE, - NULL_STATUS_ONLINE, TRUE); - purple_status_type_add_attr(type, "message", _("Online"), - purple_value_new(PURPLE_TYPE_STRING)); + type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE, + NULL_STATUS_ONLINE, NULL, TRUE, TRUE, FALSE, + "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), + NULL); types = g_list_prepend(types, type); - type = purple_status_type_new(PURPLE_STATUS_AWAY, NULL_STATUS_AWAY, - NULL_STATUS_AWAY, TRUE); - purple_status_type_add_attr(type, "message", _("Away"), - purple_value_new(PURPLE_TYPE_STRING)); + type = purple_status_type_new_with_attrs(PURPLE_STATUS_AWAY, + NULL_STATUS_AWAY, NULL, TRUE, TRUE, FALSE, + "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), + NULL); types = g_list_prepend(types, type); - - type = purple_status_type_new(PURPLE_STATUS_OFFLINE, NULL_STATUS_OFFLINE, - NULL_STATUS_OFFLINE, TRUE); - purple_status_type_add_attr(type, "message", _("Offline"), - purple_value_new(PURPLE_TYPE_STRING)); + + type = purple_status_type_new_with_attrs(PURPLE_STATUS_OFFLINE, + NULL_STATUS_OFFLINE, NULL, TRUE, TRUE, FALSE, + "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), + NULL); types = g_list_prepend(types, type); return g_list_reverse(types); @@ -1073,7 +1055,7 @@ static PurplePluginProtocolInfo prpl_info = PURPLE_ICON_SCALE_DISPLAY, /* scale_rules */ }, nullprpl_list_icon, /* list_icon */ - nullprpl_list_emblem, /* list_emblem */ + NULL, /* list_emblem */ nullprpl_status_text, /* status_text */ nullprpl_tooltip_text, /* tooltip_text */ nullprpl_status_types, /* status_types */ @@ -1130,24 +1112,24 @@ static PurplePluginProtocolInfo prpl_info = NULL, /* whiteboard_prpl_ops */ NULL, /* send_raw */ NULL, /* roomlist_room_serialize */ - NULL, /* padding... */ - NULL, - NULL, - sizeof(PurplePluginProtocolInfo), /* struct_size */ - NULL + NULL, /* unregister_user */ + NULL, /* send_attention */ + NULL, /* attention_types */ + sizeof(PurplePluginProtocolInfo), /* struct_size */ + NULL, /* get_account_text_table */ }; static void nullprpl_init(PurplePlugin *plugin) { /* see accountopt.h for information about user splits and protocol options */ PurpleAccountUserSplit *split = purple_account_user_split_new( - _("Example user split (unused)"), /* text shown to user */ - "default", /* default value */ - '@'); /* field separator */ + _("Example user split"), /* text shown to user */ + "default", /* default value */ + '@'); /* field separator */ PurpleAccountOption *option = purple_account_option_string_new( - _("Example option (unused)"), /* text shown to user */ - "example", /* pref name */ - "default"); /* default value */ + _("Example option"), /* text shown to user */ + "example", /* pref name */ + "default"); /* default value */ purple_debug_info("nullprpl", "starting up\n"); @@ -1156,13 +1138,13 @@ static void nullprpl_init(PurplePlugin *plugin) /* register whisper chat command, /msg */ purple_cmd_register("msg", - "ws", /* args: recipient and message */ + "ws", /* args: recipient and message */ PURPLE_CMD_P_DEFAULT, /* priority */ PURPLE_CMD_FLAG_CHAT, "prpl-null", send_whisper, "msg <username> <message>: send a private message, aka a whisper", - NULL); /* userdata */ + NULL); /* userdata */ /* get ready to store offline messages */ goffline_messages = g_hash_table_new_full(g_str_hash, /* hash fn */ @@ -1189,12 +1171,12 @@ static PurplePluginInfo info = NULL, /* dependencies */ PURPLE_PRIORITY_DEFAULT, /* priority */ NULLPRPL_ID, /* id */ - "Nullprpl", /* name */ - "0.3", /* version */ - "Null Protocol Plugin", /* summary */ - "Null Protocol Plugin", /* description */ - "Ryan Barrett <nullprpl@ryanb.org>", /* author */ - "http://snarfed.org/space/pidgin+null+protocol+plugin", /* homepage */ + "Null - Testing Plugin", /* name */ + DISPLAY_VERSION, /* version */ + N_("Null Protocol Plugin"), /* summary */ + N_("Null Protocol Plugin"), /* description */ + NULL, /* author */ + PURPLE_WEBSITE, /* homepage */ NULL, /* load */ NULL, /* unload */ nullprpl_destroy, /* destroy */ diff --git a/libpurple/protocols/oscar/family_admin.c b/libpurple/protocols/oscar/family_admin.c index b111c3dfaf..c276f12cb9 100644 --- a/libpurple/protocols/oscar/family_admin.c +++ b/libpurple/protocols/oscar/family_admin.c @@ -21,9 +21,8 @@ /* * Family 0x0007 - Account Administration. * - * Used for stuff like changing the formating of your screen name, changing your + * Used for stuff like changing the formating of your username, changing your * email address, requesting an account confirmation email, getting account info, - * */ #include "oscar.h" @@ -32,7 +31,7 @@ * Subtype 0x0002 - Request a bit of account info. * * Info should be one of the following: - * 0x0001 - Screen name formatting + * 0x0001 - Username formatting * 0x0011 - Email address * 0x0013 - Unknown */ @@ -111,7 +110,7 @@ infochange(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *fr } /** - * Subtype 0x0004 - Set screenname formatting. + * Subtype 0x0004 - Set the formatting of username (change spaces and capitalization). */ void aim_admin_setnick(OscarData *od, FlapConnection *conn, const char *newnick) diff --git a/libpurple/protocols/oscar/family_alert.c b/libpurple/protocols/oscar/family_alert.c index f945dec34d..df6f909d7a 100644 --- a/libpurple/protocols/oscar/family_alert.c +++ b/libpurple/protocols/oscar/family_alert.c @@ -22,10 +22,10 @@ * Family 0x0018 - Email notification * * Used for being alerted when the email address(es) associated with - * your screen name get new electronic-m. For normal AIM accounts, you - * get the email address screenname@netscape.net. AOL accounts have - * screenname@aol.com, and can also activate a netscape.net account. - * + * your username get new electronic-m. For normal AIM accounts, you + * get the email address username@netscape.net. AOL accounts have + * username@aol.com, and can also activate a netscape.net account. + * Note: This information might be out of date. */ #include "oscar.h" @@ -88,7 +88,7 @@ aim_email_sendcookies(OscarData *od) * but this is coded so it will handle that, and handle it well. * This tells you if you have unread mail or not, the URL you * should use to access that mail, and the domain name for the - * email account (screenname@domainname.com). If this is the + * email account (username@domainname.com). If this is the * first 0x0007 SNAC you've received since you signed on, or if * this is just a periodic status update, this will also contain * the number of unread emails that you have. diff --git a/libpurple/protocols/oscar/family_auth.c b/libpurple/protocols/oscar/family_auth.c index ca7a069ee1..9b8bbb5b8f 100644 --- a/libpurple/protocols/oscar/family_auth.c +++ b/libpurple/protocols/oscar/family_auth.c @@ -229,7 +229,7 @@ aim_send_login(OscarData *od, FlapConnection *conn, const char *sn, const char * /* Truncate ICQ and AOL passwords, if necessary */ password_len = strlen(password); - if (aim_snvalid_icq(sn) && (password_len > MAXICQPASSLEN)) + if (oscar_util_valid_name_icq(sn) && (password_len > MAXICQPASSLEN)) password_len = MAXICQPASSLEN; else if (truncate_pass && password_len > 8) password_len = 8; @@ -293,11 +293,11 @@ parse(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, tlvlist = aim_tlvlist_read(bs); /* - * No matter what, we should have a screen name. + * No matter what, we should have a username. */ if (aim_tlv_gettlv(tlvlist, 0x0001, 1)) { - info->sn = aim_tlv_getstr(tlvlist, 0x0001, 1); - purple_connection_set_display_name(od->gc, info->sn); + info->bn = aim_tlv_getstr(tlvlist, 0x0001, 1); + purple_connection_set_display_name(od->gc, info->bn); } /* @@ -394,7 +394,7 @@ parse(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, #if 0 /* - * Unknown. Seen on an @mac.com screen name with value of 0x003f + * Unknown. Seen on an @mac.com username with value of 0x003f */ if (aim_tlv_gettlv(tlvlist, 0x0055, 1)) { /* Unhandled */ @@ -421,7 +421,7 @@ parse(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, * - connect * - server sends flap version * - client sends flap version - * - client sends screen name (17/6) + * - client sends username (17/6) * - server sends hash key (17/7) * - client sends auth request (17/2 -- aim_send_login) * - server yells @@ -460,7 +460,7 @@ goddamnicq(OscarData *od, FlapConnection *conn, const char *sn) * Subtype 0x0006 * * In AIM 3.5 protocol, the first stage of login is to request login from the - * Authorizer, passing it the screen name for verification. If the name is + * Authorizer, passing it the username for verification. If the name is * invalid, a 0017/0003 is spit back, with the standard error contents. If * valid, a 0017/0007 comes back, which is the signal to send it the main * login command (0017/0002). @@ -527,7 +527,7 @@ keyparse(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *fram /* * If the truncate_pass TLV exists then we should truncate the * user's password to 8 characters. This flag is sent to us - * when logging in with an AOL user's screen name. + * when logging in with an AOL user's username. */ truncate_pass = aim_tlv_gettlv(tlvlist, 0x0026, 1) != NULL; @@ -597,7 +597,7 @@ auth_shutdown(OscarData *od, aim_module_t *mod) { if (od->authinfo != NULL) { - g_free(od->authinfo->sn); + g_free(od->authinfo->bn); g_free(od->authinfo->bosip); g_free(od->authinfo->errorurl); g_free(od->authinfo->email); diff --git a/libpurple/protocols/oscar/family_bart.c b/libpurple/protocols/oscar/family_bart.c index d699f91617..ee388456bd 100644 --- a/libpurple/protocols/oscar/family_bart.c +++ b/libpurple/protocols/oscar/family_bart.c @@ -90,26 +90,26 @@ uploadack(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *fra * Subtype 0x0004 - Request someone's icon. * * @param od The oscar session. - * @param sn The screen name of the person who's icon you are requesting. + * @param bn The name of the buddy whose icon you are requesting. * @param iconcsum The MD5 checksum of the icon you are requesting. * @param iconcsumlen Length of the MD5 checksum given above. Should be 10 bytes. * @return Return 0 if no errors, otherwise return the error number. */ int -aim_bart_request(OscarData *od, const char *sn, guint8 iconcsumtype, const guint8 *iconcsum, guint16 iconcsumlen) +aim_bart_request(OscarData *od, const char *bn, guint8 iconcsumtype, const guint8 *iconcsum, guint16 iconcsumlen) { FlapConnection *conn; ByteStream bs; aim_snacid_t snacid; - if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_BART)) || !sn || !strlen(sn) || !iconcsum || !iconcsumlen) + if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_BART)) || !bn || !strlen(bn) || !iconcsum || !iconcsumlen) return -EINVAL; - byte_stream_new(&bs, 1+strlen(sn) + 4 + 1+iconcsumlen); + byte_stream_new(&bs, 1+strlen(bn) + 4 + 1+iconcsumlen); - /* Screen name */ - byte_stream_put8(&bs, strlen(sn)); - byte_stream_putstr(&bs, sn); + /* Buddy name */ + byte_stream_put8(&bs, strlen(bn)); + byte_stream_putstr(&bs, bn); /* Some numbers. You like numbers, right? */ byte_stream_put8(&bs, 0x01); @@ -138,11 +138,11 @@ parseicon(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *fra { int ret = 0; aim_rxcallback_t userfunc; - char *sn; + char *bn; guint16 flags, iconlen; guint8 iconcsumtype, iconcsumlen, *iconcsum, *icon; - sn = byte_stream_getstr(bs, byte_stream_get8(bs)); + bn = byte_stream_getstr(bs, byte_stream_get8(bs)); flags = byte_stream_get16(bs); iconcsumtype = byte_stream_get8(bs); iconcsumlen = byte_stream_get8(bs); @@ -151,9 +151,9 @@ parseicon(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *fra icon = byte_stream_getraw(bs, iconlen); if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) - ret = userfunc(od, conn, frame, sn, iconcsumtype, iconcsum, iconcsumlen, icon, iconlen); + ret = userfunc(od, conn, frame, bn, iconcsumtype, iconcsum, iconcsumlen, icon, iconlen); - g_free(sn); + g_free(bn); g_free(iconcsum); g_free(icon); diff --git a/libpurple/protocols/oscar/family_bos.c b/libpurple/protocols/oscar/family_bos.c index e34eba43b2..2790b2ed82 100644 --- a/libpurple/protocols/oscar/family_bos.c +++ b/libpurple/protocols/oscar/family_bos.c @@ -94,8 +94,7 @@ aim_bos_setgroupperm(OscarData *od, FlapConnection *conn, guint32 mask) * AIM_VISIBILITYCHANGE_DENYADD: Hides you from provided list of names * AIM_VISIBILITYCHANGE_DENYREMOVE: Lets list see you again * - * list should be a list of - * screen names in the form "Screen Name One&ScreenNameTwo&" etc. + * list should be a list of "Buddy Name One&BuddyNameTwo&" etc. * * Equivelents to options in WinAIM: * - Allow all users to contact me: Send an AIM_VISIBILITYCHANGE_DENYADD diff --git a/libpurple/protocols/oscar/family_buddy.c b/libpurple/protocols/oscar/family_buddy.c index b20e0fc7f5..3b98664519 100644 --- a/libpurple/protocols/oscar/family_buddy.c +++ b/libpurple/protocols/oscar/family_buddy.c @@ -121,7 +121,7 @@ aim_buddylist_addbuddy(OscarData *od, FlapConnection *conn, const char *sn) * * This just builds the "set buddy list" command then queues it. * - * buddy_list = "Screen Name One&ScreenNameTwo&"; + * buddy_list = "Buddy Name One&BuddyNameTwo&"; * * XXX Clean this up. * @@ -222,7 +222,7 @@ buddychange(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *f ret = userfunc(od, conn, frame, &userinfo); if (snac->subtype == SNAC_SUBTYPE_BUDDY_ONCOMING && userinfo.flags & AIM_FLAG_AWAY) - aim_locate_autofetch_away_message(od, userinfo.sn); + aim_locate_autofetch_away_message(od, userinfo.bn); aim_info_free(&userinfo); diff --git a/libpurple/protocols/oscar/family_feedbag.c b/libpurple/protocols/oscar/family_feedbag.c index dcc32b7e05..0ef5370068 100644 --- a/libpurple/protocols/oscar/family_feedbag.c +++ b/libpurple/protocols/oscar/family_feedbag.c @@ -243,7 +243,7 @@ static int aim_ssi_itemlist_cmp(struct aim_ssi_item *cur1, struct aim_ssi_item * if (!cur1->name && cur2->name) return 6; - if (cur1->name && cur2->name && aim_sncmp(cur1->name, cur2->name)) + if (cur1->name && cur2->name && oscar_util_name_compare(cur1->name, cur2->name)) return 7; if (cur1->gid != cur2->gid) @@ -285,8 +285,8 @@ struct aim_ssi_item *aim_ssi_itemlist_find(struct aim_ssi_item *list, guint16 gi } /** - * Locally find an item given a group name, screen name, and type. If group name - * and screen name are null, then just return the first item of the given type. + * Locally find an item given a group name, buddy name, and type. If group name + * and buddy name are null, then just return the first item of the given type. * * @param list A pointer to the current list of items. * @param gn The group name of the desired item. @@ -294,31 +294,31 @@ struct aim_ssi_item *aim_ssi_itemlist_find(struct aim_ssi_item *list, guint16 gi * @param type The type of the desired item. * @return Return a pointer to the item if found, else return NULL. */ -struct aim_ssi_item *aim_ssi_itemlist_finditem(struct aim_ssi_item *list, const char *gn, const char *sn, guint16 type) +struct aim_ssi_item *aim_ssi_itemlist_finditem(struct aim_ssi_item *list, const char *gn, const char *bn, guint16 type) { struct aim_ssi_item *cur; if (!list) return NULL; - if (gn && sn) { /* For finding buddies in groups */ + if (gn && bn) { /* For finding buddies in groups */ for (cur=list; cur; cur=cur->next) - if ((cur->type == type) && (cur->name) && !(aim_sncmp(cur->name, sn))) { + if ((cur->type == type) && (cur->name) && !(oscar_util_name_compare(cur->name, bn))) { struct aim_ssi_item *curg; for (curg=list; curg; curg=curg->next) - if ((curg->type == AIM_SSI_TYPE_GROUP) && (curg->gid == cur->gid) && (curg->name) && !(aim_sncmp(curg->name, gn))) + if ((curg->type == AIM_SSI_TYPE_GROUP) && (curg->gid == cur->gid) && (curg->name) && !(oscar_util_name_compare(curg->name, gn))) return cur; } } else if (gn) { /* For finding groups */ for (cur=list; cur; cur=cur->next) { - if ((cur->type == type) && (cur->bid == 0x0000) && (cur->name) && !(aim_sncmp(cur->name, gn))) { + if ((cur->type == type) && (cur->bid == 0x0000) && (cur->name) && !(oscar_util_name_compare(cur->name, gn))) { return cur; } } - } else if (sn) { /* For finding permits, denies, and ignores */ + } else if (bn) { /* For finding permits, denies, and ignores */ for (cur=list; cur; cur=cur->next) { - if ((cur->type == type) && (cur->name) && !(aim_sncmp(cur->name, sn))) { + if ((cur->type == type) && (cur->name) && !(oscar_util_name_compare(cur->name, bn))) { return cur; } } @@ -336,14 +336,14 @@ struct aim_ssi_item *aim_ssi_itemlist_finditem(struct aim_ssi_item *list, const * Check if the given buddy exists in any group in the buddy list. * * @param list A pointer to the current list of items. - * @param sn The group name of the desired item. + * @param bn The group name of the desired item. * @return Return a pointer to the name of the item if found, else return NULL; */ -struct aim_ssi_item *aim_ssi_itemlist_exists(struct aim_ssi_item *list, const char *sn) +struct aim_ssi_item *aim_ssi_itemlist_exists(struct aim_ssi_item *list, const char *bn) { - if (!sn) + if (!bn) return NULL; - return aim_ssi_itemlist_finditem(list, NULL, sn, AIM_SSI_TYPE_BUDDY); + return aim_ssi_itemlist_finditem(list, NULL, bn, AIM_SSI_TYPE_BUDDY); } /** @@ -353,12 +353,12 @@ struct aim_ssi_item *aim_ssi_itemlist_exists(struct aim_ssi_item *list, const ch * @param bn The buddy name of the desired item. * @return Return a pointer to the name of the item if found, else return NULL; */ -char *aim_ssi_itemlist_findparentname(struct aim_ssi_item *list, const char *sn) +char *aim_ssi_itemlist_findparentname(struct aim_ssi_item *list, const char *bn) { struct aim_ssi_item *cur, *curg; - if (!list || !sn) + if (!list || !bn) return NULL; - if (!(cur = aim_ssi_itemlist_exists(list, sn))) + if (!(cur = aim_ssi_itemlist_exists(list, bn))) return NULL; if (!(curg = aim_ssi_itemlist_find(list, cur->gid, 0x0000))) return NULL; @@ -406,14 +406,14 @@ guint32 aim_ssi_getpresence(struct aim_ssi_item *list) * * @param list A pointer to the current list of items. * @param gn The group of the buddy. - * @param sn The name of the buddy. + * @param bn The name of the buddy. * @return A pointer to a NULL terminated string that is the buddy's * alias, or NULL if the buddy has no alias. You should free * this returned value! */ -char *aim_ssi_getalias(struct aim_ssi_item *list, const char *gn, const char *sn) +char *aim_ssi_getalias(struct aim_ssi_item *list, const char *gn, const char *bn) { - struct aim_ssi_item *cur = aim_ssi_itemlist_finditem(list, gn, sn, AIM_SSI_TYPE_BUDDY); + struct aim_ssi_item *cur = aim_ssi_itemlist_finditem(list, gn, bn, AIM_SSI_TYPE_BUDDY); if (cur) { aim_tlv_t *tlv = aim_tlv_gettlv(cur->data, 0x0131, 1); if (tlv && tlv->length) @@ -427,14 +427,14 @@ char *aim_ssi_getalias(struct aim_ssi_item *list, const char *gn, const char *sn * * @param list A pointer to the current list of items. * @param gn The group of the buddy. - * @param sn The name of the buddy. + * @param bn The name of the buddy. * @return A pointer to a NULL terminated string that is the buddy's * comment, or NULL if the buddy has no comment. You should free * this returned value! */ -char *aim_ssi_getcomment(struct aim_ssi_item *list, const char *gn, const char *sn) +char *aim_ssi_getcomment(struct aim_ssi_item *list, const char *gn, const char *bn) { - struct aim_ssi_item *cur = aim_ssi_itemlist_finditem(list, gn, sn, AIM_SSI_TYPE_BUDDY); + struct aim_ssi_item *cur = aim_ssi_itemlist_finditem(list, gn, bn, AIM_SSI_TYPE_BUDDY); if (cur) { aim_tlv_t *tlv = aim_tlv_gettlv(cur->data, 0x013c, 1); if (tlv && tlv->length) { @@ -449,12 +449,12 @@ char *aim_ssi_getcomment(struct aim_ssi_item *list, const char *gn, const char * * * @param list A pointer to the current list of items. * @param gn The group of the buddy. - * @param sn The name of the buddy. + * @param bn The name of the buddy. * @return 1 if you are waiting for authorization; 0 if you are not */ -gboolean aim_ssi_waitingforauth(struct aim_ssi_item *list, const char *gn, const char *sn) +gboolean aim_ssi_waitingforauth(struct aim_ssi_item *list, const char *gn, const char *bn) { - struct aim_ssi_item *cur = aim_ssi_itemlist_finditem(list, gn, sn, AIM_SSI_TYPE_BUDDY); + struct aim_ssi_item *cur = aim_ssi_itemlist_finditem(list, gn, bn, AIM_SSI_TYPE_BUDDY); if (cur) { if (aim_tlv_gettlv(cur->data, 0x0066, 1)) return TRUE; @@ -678,7 +678,7 @@ int aim_ssi_cleanlist(OscarData *od) cur2 = cur->next; while (cur2) { next2 = cur2->next; - if ((cur->type == cur2->type) && (cur->gid == cur2->gid) && (cur->name != NULL) && (cur2->name != NULL) && (!aim_sncmp(cur->name, cur2->name))) { + if ((cur->type == cur2->type) && (cur->gid == cur2->gid) && (cur->name != NULL) && (cur2->name != NULL) && (!oscar_util_name_compare(cur->name, cur2->name))) { aim_ssi_itemlist_del(&od->ssi.local, cur2); } cur2 = next2; @@ -916,16 +916,16 @@ int aim_ssi_deldeny(OscarData *od, const char *name) * @param od The oscar odion. * @param oldgn The group that the buddy is currently in. * @param newgn The group that the buddy should be moved in to. - * @param sn The name of the buddy to be moved. + * @param bn The name of the buddy to be moved. * @return Return 0 if no errors, otherwise return the error number. */ -int aim_ssi_movebuddy(OscarData *od, const char *oldgn, const char *newgn, const char *sn) +int aim_ssi_movebuddy(OscarData *od, const char *oldgn, const char *newgn, const char *bn) { struct aim_ssi_item *buddy; GSList *data; /* Find the buddy */ - buddy = aim_ssi_itemlist_finditem(od->ssi.local, oldgn, sn, AIM_SSI_TYPE_BUDDY); + buddy = aim_ssi_itemlist_finditem(od->ssi.local, oldgn, bn, AIM_SSI_TYPE_BUDDY); if (buddy == NULL) return -EINVAL; @@ -933,10 +933,10 @@ int aim_ssi_movebuddy(OscarData *od, const char *oldgn, const char *newgn, const data = aim_tlvlist_copy(buddy->data); /* Delete the old item */ - aim_ssi_delbuddy(od, sn, oldgn); + aim_ssi_delbuddy(od, bn, oldgn); /* Add the new item using the EXACT SAME TLV list */ - aim_ssi_addbuddy(od, sn, newgn, data, NULL, NULL, NULL, FALSE); + aim_ssi_addbuddy(od, bn, newgn, data, NULL, NULL, NULL, FALSE); return 0; } @@ -946,19 +946,19 @@ int aim_ssi_movebuddy(OscarData *od, const char *oldgn, const char *newgn, const * * @param od The oscar odion. * @param gn The group that the buddy is currently in. - * @param sn The screen name of the buddy. + * @param bn The name of the buddy. * @param alias The new alias for the buddy, or NULL if you want to remove * a buddy's comment. * @return Return 0 if no errors, otherwise return the error number. */ -int aim_ssi_aliasbuddy(OscarData *od, const char *gn, const char *sn, const char *alias) +int aim_ssi_aliasbuddy(OscarData *od, const char *gn, const char *bn, const char *alias) { struct aim_ssi_item *tmp; - if (!od || !gn || !sn) + if (!od || !gn || !bn) return -EINVAL; - if (!(tmp = aim_ssi_itemlist_finditem(od->ssi.local, gn, sn, AIM_SSI_TYPE_BUDDY))) + if (!(tmp = aim_ssi_itemlist_finditem(od->ssi.local, gn, bn, AIM_SSI_TYPE_BUDDY))) return -EINVAL; /* Either add or remove the 0x0131 TLV from the TLV chain */ @@ -976,19 +976,19 @@ int aim_ssi_aliasbuddy(OscarData *od, const char *gn, const char *sn, const char * * @param od The oscar odion. * @param gn The group that the buddy is currently in. - * @param sn The screen name of the buddy. + * @param bn The name of the buddy. * @param alias The new comment for the buddy, or NULL if you want to remove * a buddy's comment. * @return Return 0 if no errors, otherwise return the error number. */ -int aim_ssi_editcomment(OscarData *od, const char *gn, const char *sn, const char *comment) +int aim_ssi_editcomment(OscarData *od, const char *gn, const char *bn, const char *comment) { struct aim_ssi_item *tmp; - if (!od || !gn || !sn) + if (!od || !gn || !bn) return -EINVAL; - if (!(tmp = aim_ssi_itemlist_finditem(od->ssi.local, gn, sn, AIM_SSI_TYPE_BUDDY))) + if (!(tmp = aim_ssi_itemlist_finditem(od->ssi.local, gn, bn, AIM_SSI_TYPE_BUDDY))) return -EINVAL; /* Either add or remove the 0x0131 TLV from the TLV chain */ @@ -1681,20 +1681,20 @@ int aim_ssi_modend(OscarData *od) * Authorizes a contact so they can add you to their contact list. * */ -int aim_ssi_sendauth(OscarData *od, char *sn, char *msg) +int aim_ssi_sendauth(OscarData *od, char *bn, char *msg) { FlapConnection *conn; ByteStream bs; aim_snacid_t snacid; - if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_FEEDBAG)) || !sn) + if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_FEEDBAG)) || !bn) return -EINVAL; - byte_stream_new(&bs, 1+strlen(sn) + 2+(msg ? strlen(msg)+1 : 0) + 2); + byte_stream_new(&bs, 1+strlen(bn) + 2+(msg ? strlen(msg)+1 : 0) + 2); - /* Screen name */ - byte_stream_put8(&bs, strlen(sn)); - byte_stream_putstr(&bs, sn); + /* Username */ + byte_stream_put8(&bs, strlen(bn)); + byte_stream_putstr(&bs, bn); /* Message (null terminated) */ byte_stream_put16(&bs, msg ? strlen(msg) : 0); @@ -1722,13 +1722,13 @@ static int receiveauthgrant(OscarData *od, FlapConnection *conn, aim_module_t *m int ret = 0; aim_rxcallback_t userfunc; guint16 tmp; - char *sn, *msg; + char *bn, *msg; - /* Read screen name */ + /* Read buddy name */ if ((tmp = byte_stream_get8(bs))) - sn = byte_stream_getstr(bs, tmp); + bn = byte_stream_getstr(bs, tmp); else - sn = NULL; + bn = NULL; /* Read message (null terminated) */ if ((tmp = byte_stream_get16(bs))) @@ -1740,9 +1740,9 @@ static int receiveauthgrant(OscarData *od, FlapConnection *conn, aim_module_t *m tmp = byte_stream_get16(bs); if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) - ret = userfunc(od, conn, frame, sn, msg); + ret = userfunc(od, conn, frame, bn, msg); - g_free(sn); + g_free(bn); g_free(msg); return ret; @@ -1755,20 +1755,20 @@ static int receiveauthgrant(OscarData *od, FlapConnection *conn, aim_module_t *m * granted, denied, or dropped. * */ -int aim_ssi_sendauthrequest(OscarData *od, char *sn, const char *msg) +int aim_ssi_sendauthrequest(OscarData *od, char *bn, const char *msg) { FlapConnection *conn; ByteStream bs; aim_snacid_t snacid; - if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_FEEDBAG)) || !sn) + if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_FEEDBAG)) || !bn) return -EINVAL; - byte_stream_new(&bs, 1+strlen(sn) + 2+(msg ? strlen(msg)+1 : 0) + 2); + byte_stream_new(&bs, 1+strlen(bn) + 2+(msg ? strlen(msg)+1 : 0) + 2); - /* Screen name */ - byte_stream_put8(&bs, strlen(sn)); - byte_stream_putstr(&bs, sn); + /* Username */ + byte_stream_put8(&bs, strlen(bn)); + byte_stream_putstr(&bs, bn); /* Message (null terminated) */ byte_stream_put16(&bs, msg ? strlen(msg) : 0); @@ -1796,13 +1796,13 @@ static int receiveauthrequest(OscarData *od, FlapConnection *conn, aim_module_t int ret = 0; aim_rxcallback_t userfunc; guint16 tmp; - char *sn, *msg; + char *bn, *msg; - /* Read screen name */ + /* Read buddy name */ if ((tmp = byte_stream_get8(bs))) - sn = byte_stream_getstr(bs, tmp); + bn = byte_stream_getstr(bs, tmp); else - sn = NULL; + bn = NULL; /* Read message (null terminated) */ if ((tmp = byte_stream_get16(bs))) @@ -1814,9 +1814,9 @@ static int receiveauthrequest(OscarData *od, FlapConnection *conn, aim_module_t tmp = byte_stream_get16(bs); if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) - ret = userfunc(od, conn, frame, sn, msg); + ret = userfunc(od, conn, frame, bn, msg); - g_free(sn); + g_free(bn); g_free(msg); return ret; @@ -1832,20 +1832,20 @@ static int receiveauthrequest(OscarData *od, FlapConnection *conn, aim_module_t * if reply=0x01 then grant * */ -int aim_ssi_sendauthreply(OscarData *od, char *sn, guint8 reply, const char *msg) +int aim_ssi_sendauthreply(OscarData *od, char *bn, guint8 reply, const char *msg) { FlapConnection *conn; ByteStream bs; aim_snacid_t snacid; - if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_FEEDBAG)) || !sn) + if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_FEEDBAG)) || !bn) return -EINVAL; - byte_stream_new(&bs, 1+strlen(sn) + 1 + 2+(msg ? (strlen(msg)+1) : 0) + 2); + byte_stream_new(&bs, 1+strlen(bn) + 1 + 2+(msg ? (strlen(msg)+1) : 0) + 2); - /* Screen name */ - byte_stream_put8(&bs, strlen(sn)); - byte_stream_putstr(&bs, sn); + /* Username */ + byte_stream_put8(&bs, strlen(bn)); + byte_stream_putstr(&bs, bn); /* Grant or deny */ byte_stream_put8(&bs, reply); @@ -1880,13 +1880,13 @@ static int receiveauthreply(OscarData *od, FlapConnection *conn, aim_module_t *m aim_rxcallback_t userfunc; guint16 tmp; guint8 reply; - char *sn, *msg; + char *bn, *msg; - /* Read screen name */ + /* Read buddy name */ if ((tmp = byte_stream_get8(bs))) - sn = byte_stream_getstr(bs, tmp); + bn = byte_stream_getstr(bs, tmp); else - sn = NULL; + bn = NULL; /* Read reply */ reply = byte_stream_get8(bs); @@ -1901,9 +1901,9 @@ static int receiveauthreply(OscarData *od, FlapConnection *conn, aim_module_t *m tmp = byte_stream_get16(bs); if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) - ret = userfunc(od, conn, frame, sn, reply, msg); + ret = userfunc(od, conn, frame, bn, reply, msg); - g_free(sn); + g_free(bn); g_free(msg); return ret; @@ -1917,18 +1917,18 @@ static int receiveadded(OscarData *od, FlapConnection *conn, aim_module_t *mod, int ret = 0; aim_rxcallback_t userfunc; guint16 tmp; - char *sn; + char *bn; - /* Read screen name */ + /* Read buddy name */ if ((tmp = byte_stream_get8(bs))) - sn = byte_stream_getstr(bs, tmp); + bn = byte_stream_getstr(bs, tmp); else - sn = NULL; + bn = NULL; if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) - ret = userfunc(od, conn, frame, sn); + ret = userfunc(od, conn, frame, bn); - g_free(sn); + g_free(bn); return ret; } diff --git a/libpurple/protocols/oscar/family_icbm.c b/libpurple/protocols/oscar/family_icbm.c index 3bd9fae6cd..c217e0f3bb 100644 --- a/libpurple/protocols/oscar/family_icbm.c +++ b/libpurple/protocols/oscar/family_icbm.c @@ -61,16 +61,16 @@ * @param bs The bstream to write the ICBM header to. * @param c c is for cookie, and cookie is for me. * @param channel The ICBM channel (1 through 4). - * @param sn Null-terminated scrizeen nizame. + * @param bn Null-terminated scrizeen nizame. * @return The number of bytes written. It's really not useful. */ -static int aim_im_puticbm(ByteStream *bs, const guchar *c, guint16 channel, const char *sn) +static int aim_im_puticbm(ByteStream *bs, const guchar *c, guint16 channel, const char *bn) { byte_stream_putraw(bs, c, 8); byte_stream_put16(bs, channel); - byte_stream_put8(bs, strlen(sn)); - byte_stream_putstr(bs, sn); - return 8+2+1+strlen(sn); + byte_stream_put8(bs, strlen(bn)); + byte_stream_putstr(bs, bn); + return 8+2+1+strlen(bn); } /** @@ -324,7 +324,7 @@ int aim_im_sendch1_ext(OscarData *od, struct aim_sendimext_args *args) aim_icbm_makecookie(cookie); /* ICBM header */ - aim_im_puticbm(&data, cookie, 0x0001, args->destsn); + aim_im_puticbm(&data, cookie, 0x0001, args->destbn); /* Message TLV (type 0x0002) */ byte_stream_put16(&data, 0x0002); @@ -410,7 +410,7 @@ int aim_im_sendch1_ext(OscarData *od, struct aim_sendimext_args *args) } /* XXX - should be optional */ - snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0006, 0x0000, args->destsn, strlen(args->destsn)+1); + snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0006, 0x0000, args->destbn, strlen(args->destbn)+1); flap_connection_send_snac(od, conn, SNAC_FAMILY_ICBM, 0x0006, 0x0000, snacid, &data); byte_stream_destroy(&data); @@ -431,11 +431,11 @@ int aim_im_sendch1_ext(OscarData *od, struct aim_sendimext_args *args) * that requires an explicit message length. Use aim_im_sendch1_ext(). * */ -int aim_im_sendch1(OscarData *od, const char *sn, guint16 flags, const char *msg) +int aim_im_sendch1(OscarData *od, const char *bn, guint16 flags, const char *msg) { struct aim_sendimext_args args; - args.destsn = sn; + args.destbn = bn; args.flags = flags; args.msg = msg; args.msglen = strlen(msg); @@ -451,7 +451,7 @@ int aim_im_sendch1(OscarData *od, const char *sn, guint16 flags, const char *msg /* * Subtype 0x0006 - Send a chat invitation. */ -int aim_im_sendch2_chatinvite(OscarData *od, const char *sn, const char *msg, guint16 exchange, const char *roomname, guint16 instance) +int aim_im_sendch2_chatinvite(OscarData *od, const char *bn, const char *msg, guint16 exchange, const char *roomname, guint16 instance) { FlapConnection *conn; ByteStream bs; @@ -465,18 +465,18 @@ int aim_im_sendch2_chatinvite(OscarData *od, const char *sn, const char *msg, gu if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_ICBM))) return -EINVAL; - if (!sn || !msg || !roomname) + if (!bn || !msg || !roomname) return -EINVAL; aim_icbm_makecookie(cookie); - byte_stream_new(&bs, 1142+strlen(sn)+strlen(roomname)+strlen(msg)); + byte_stream_new(&bs, 1142+strlen(bn)+strlen(roomname)+strlen(msg)); - snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0006, 0x0000, sn, strlen(sn)+1); + snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0006, 0x0000, bn, strlen(bn)+1); /* XXX should be uncached by an unwritten 'invite accept' handler */ priv = g_malloc(sizeof(struct aim_invite_priv)); - priv->sn = g_strdup(sn); + priv->bn = g_strdup(bn); priv->roomname = g_strdup(roomname); priv->exchange = exchange; priv->instance = instance; @@ -487,7 +487,7 @@ int aim_im_sendch2_chatinvite(OscarData *od, const char *sn, const char *msg, gu g_free(priv); /* ICBM Header */ - aim_im_puticbm(&bs, cookie, 0x0002, sn); + aim_im_puticbm(&bs, cookie, 0x0002, bn); /* * TLV t(0005) @@ -532,7 +532,7 @@ int aim_im_sendch2_chatinvite(OscarData *od, const char *sn, const char *msg, gu * This is also performance sensitive. (If you can believe it...) * */ -int aim_im_sendch2_icon(OscarData *od, const char *sn, const guint8 *icon, int iconlen, time_t stamp, guint16 iconsum) +int aim_im_sendch2_icon(OscarData *od, const char *bn, const guint8 *icon, int iconlen, time_t stamp, guint16 iconsum) { FlapConnection *conn; ByteStream bs; @@ -542,17 +542,17 @@ int aim_im_sendch2_icon(OscarData *od, const char *sn, const guint8 *icon, int i if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_ICBM))) return -EINVAL; - if (!sn || !icon || (iconlen <= 0) || (iconlen >= MAXICONLEN)) + if (!bn || !icon || (iconlen <= 0) || (iconlen >= MAXICONLEN)) return -EINVAL; aim_icbm_makecookie(cookie); - byte_stream_new(&bs, 8+2+1+strlen(sn)+2+2+2+8+16+2+2+2+2+2+2+2+4+4+4+iconlen+strlen(AIM_ICONIDENT)+2+2); + byte_stream_new(&bs, 8+2+1+strlen(bn)+2+2+2+8+16+2+2+2+2+2+2+2+4+4+4+iconlen+strlen(AIM_ICONIDENT)+2+2); snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0006, 0x0000, NULL, 0); /* ICBM header */ - aim_im_puticbm(&bs, cookie, 0x0002, sn); + aim_im_puticbm(&bs, cookie, 0x0002, bn); /* * TLV t(0005) @@ -623,7 +623,7 @@ int aim_im_sendch2_rtfmsg(OscarData *od, struct aim_sendrtfmsg_args *args) if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_ICBM))) return -EINVAL; - if (!args || !args->destsn || !args->rtfmsg) + if (!args || !args->destbn || !args->rtfmsg) return -EINVAL; servdatalen = 2+2+16+2+4+1+2 + 2+2+4+4+4 + 2+4+2+strlen(args->rtfmsg)+1 + 4+4+4+strlen(rtfcap)+1; @@ -635,7 +635,7 @@ int aim_im_sendch2_rtfmsg(OscarData *od, struct aim_sendrtfmsg_args *args) snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0006, 0x0000, NULL, 0); /* ICBM header */ - aim_im_puticbm(&bs, cookie, 0x0002, args->destsn); + aim_im_puticbm(&bs, cookie, 0x0002, args->destbn); /* TLV t(0005) - Encompasses everything below. */ byte_stream_put16(&bs, 0x0005); @@ -708,12 +708,12 @@ aim_im_sendch2_cancel(PeerConnection *peer_conn) if (conn == NULL) return; - byte_stream_new(&bs, 118+strlen(peer_conn->sn)); + byte_stream_new(&bs, 118+strlen(peer_conn->bn)); snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0006, 0x0000, NULL, 0); /* ICBM header */ - aim_im_puticbm(&bs, peer_conn->cookie, 0x0002, peer_conn->sn); + aim_im_puticbm(&bs, peer_conn->cookie, 0x0002, peer_conn->bn); aim_tlvlist_add_noval(&outer_tlvlist, 0x0003); @@ -757,12 +757,12 @@ aim_im_sendch2_connected(PeerConnection *peer_conn) if (conn == NULL) return; - byte_stream_new(&bs, 11+strlen(peer_conn->sn) + 4+2+8+16); + byte_stream_new(&bs, 11+strlen(peer_conn->bn) + 4+2+8+16); snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0006, 0x0000, NULL, 0); /* ICBM header */ - aim_im_puticbm(&bs, peer_conn->cookie, 0x0002, peer_conn->sn); + aim_im_puticbm(&bs, peer_conn->cookie, 0x0002, peer_conn->bn); byte_stream_put16(&bs, 0x0005); byte_stream_put16(&bs, 0x001a); @@ -783,7 +783,7 @@ aim_im_sendch2_connected(PeerConnection *peer_conn) * "I want to connect through a proxy server" */ void -aim_im_sendch2_odc_requestdirect(OscarData *od, guchar *cookie, const char *sn, const guint8 *ip, guint16 port, guint16 requestnumber) +aim_im_sendch2_odc_requestdirect(OscarData *od, guchar *cookie, const char *bn, const guint8 *ip, guint16 port, guint16 requestnumber) { FlapConnection *conn; ByteStream bs; @@ -795,12 +795,12 @@ aim_im_sendch2_odc_requestdirect(OscarData *od, guchar *cookie, const char *sn, if (conn == NULL) return; - byte_stream_new(&bs, 246+strlen(sn)); + byte_stream_new(&bs, 246+strlen(bn)); snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0006, 0x0000, NULL, 0); /* ICBM header */ - aim_im_puticbm(&bs, cookie, 0x0002, sn); + aim_im_puticbm(&bs, cookie, 0x0002, bn); aim_tlvlist_add_noval(&outer_tlvlist, 0x0003); @@ -835,7 +835,7 @@ aim_im_sendch2_odc_requestdirect(OscarData *od, guchar *cookie, const char *sn, * remote user to connect to us via a proxy server. */ void -aim_im_sendch2_odc_requestproxy(OscarData *od, guchar *cookie, const char *sn, const guint8 *ip, guint16 pin, guint16 requestnumber) +aim_im_sendch2_odc_requestproxy(OscarData *od, guchar *cookie, const char *bn, const guint8 *ip, guint16 pin, guint16 requestnumber) { FlapConnection *conn; ByteStream bs; @@ -848,12 +848,12 @@ aim_im_sendch2_odc_requestproxy(OscarData *od, guchar *cookie, const char *sn, c if (conn == NULL) return; - byte_stream_new(&bs, 246+strlen(sn)); + byte_stream_new(&bs, 246+strlen(bn)); snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0006, 0x0000, NULL, 0); /* ICBM header */ - aim_im_puticbm(&bs, cookie, 0x0002, sn); + aim_im_puticbm(&bs, cookie, 0x0002, bn); aim_tlvlist_add_noval(&outer_tlvlist, 0x0003); @@ -898,7 +898,7 @@ aim_im_sendch2_odc_requestproxy(OscarData *od, guchar *cookie, const char *sn, c * */ void -aim_im_sendch2_sendfile_requestdirect(OscarData *od, guchar *cookie, const char *sn, const guint8 *ip, guint16 port, guint16 requestnumber, const gchar *filename, guint32 size, guint16 numfiles) +aim_im_sendch2_sendfile_requestdirect(OscarData *od, guchar *cookie, const char *bn, const guint8 *ip, guint16 port, guint16 requestnumber, const gchar *filename, guint32 size, guint16 numfiles) { FlapConnection *conn; ByteStream bs; @@ -915,7 +915,7 @@ aim_im_sendch2_sendfile_requestdirect(OscarData *od, guchar *cookie, const char snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0006, 0x0000, NULL, 0); /* ICBM header */ - aim_im_puticbm(&bs, cookie, 0x0002, sn); + aim_im_puticbm(&bs, cookie, 0x0002, bn); aim_tlvlist_add_noval(&outer_tlvlist, 0x0003); @@ -981,7 +981,7 @@ aim_im_sendch2_sendfile_requestdirect(OscarData *od, guchar *cookie, const char * remote user to connect to us via a proxy server. */ void -aim_im_sendch2_sendfile_requestproxy(OscarData *od, guchar *cookie, const char *sn, const guint8 *ip, guint16 pin, guint16 requestnumber, const gchar *filename, guint32 size, guint16 numfiles) +aim_im_sendch2_sendfile_requestproxy(OscarData *od, guchar *cookie, const char *bn, const guint8 *ip, guint16 pin, guint16 requestnumber, const gchar *filename, guint32 size, guint16 numfiles) { FlapConnection *conn; ByteStream bs; @@ -999,7 +999,7 @@ aim_im_sendch2_sendfile_requestproxy(OscarData *od, guchar *cookie, const char * snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0006, 0x0000, NULL, 0); /* ICBM header */ - aim_im_puticbm(&bs, cookie, 0x0002, sn); + aim_im_puticbm(&bs, cookie, 0x0002, bn); aim_tlvlist_add_noval(&outer_tlvlist, 0x0003); @@ -1073,29 +1073,29 @@ aim_im_sendch2_sendfile_requestproxy(OscarData *od, guchar *cookie, const char * * Subtype 0x0006 - Request the status message of the given ICQ user. * * @param od The oscar session. - * @param sn The UIN of the user of whom you wish to request info. + * @param bn The UIN of the user of whom you wish to request info. * @param type The type of info you wish to request. This should be the current * state of the user, as one of the AIM_ICQ_STATE_* defines. * @return Return 0 if no errors, otherwise return the error number. */ -int aim_im_sendch2_geticqaway(OscarData *od, const char *sn, int type) +int aim_im_sendch2_geticqaway(OscarData *od, const char *bn, int type) { FlapConnection *conn; ByteStream bs; aim_snacid_t snacid; guchar cookie[8]; - if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_ICBM)) || !sn) + if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_ICBM)) || !bn) return -EINVAL; aim_icbm_makecookie(cookie); - byte_stream_new(&bs, 8+2+1+strlen(sn) + 4+0x5e + 4); + byte_stream_new(&bs, 8+2+1+strlen(bn) + 4+0x5e + 4); snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0006, 0x0000, NULL, 0); /* ICBM header */ - aim_im_puticbm(&bs, cookie, 0x0002, sn); + aim_im_puticbm(&bs, cookie, 0x0002, bn); /* TLV t(0005) - Encompasses almost everything below. */ byte_stream_put16(&bs, 0x0005); /* T */ @@ -1176,12 +1176,12 @@ int aim_im_sendch2_geticqaway(OscarData *od, const char *sn, int type) * but thats ok, because it gives me time to try to figure out what kind of drugs the AOL people * were taking when they merged the two protocols. * - * @param sn The destination screen name. + * @param bn The destination buddy name. * @param type The type of message. 0x0007 for authorization denied. 0x0008 for authorization granted. * @param message The message you want to send, it should be null terminated. * @return Return 0 if no errors, otherwise return the error number. */ -int aim_im_sendch4(OscarData *od, const char *sn, guint16 type, const char *message) +int aim_im_sendch4(OscarData *od, const char *bn, guint16 type, const char *message) { FlapConnection *conn; ByteStream bs; @@ -1191,17 +1191,17 @@ int aim_im_sendch4(OscarData *od, const char *sn, guint16 type, const char *mess if (!od || !(conn = flap_connection_findbygroup(od, 0x0002))) return -EINVAL; - if (!sn || !type || !message) + if (!bn || !type || !message) return -EINVAL; - byte_stream_new(&bs, 8+3+strlen(sn)+12+strlen(message)+1+4); + byte_stream_new(&bs, 8+3+strlen(bn)+12+strlen(message)+1+4); snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0006, 0x0000, NULL, 0); aim_icbm_makecookie(cookie); /* ICBM header */ - aim_im_puticbm(&bs, cookie, 0x0004, sn); + aim_im_puticbm(&bs, cookie, 0x0004, bn); /* * TLV t(0005) @@ -1246,8 +1246,8 @@ static int outgoingim(OscarData *od, FlapConnection *conn, aim_module_t *mod, Fl guchar cookie[8]; guint16 channel; GSList *tlvlist; - char *sn; - int snlen; + char *bn; + int bnlen; guint16 icbmflags = 0; guint8 flag1 = 0, flag2 = 0; gchar *msg = NULL; @@ -1264,8 +1264,8 @@ static int outgoingim(OscarData *od, FlapConnection *conn, aim_module_t *mod, Fl return 0; } - snlen = byte_stream_get8(bs); - sn = byte_stream_getstr(bs, snlen); + bnlen = byte_stream_get8(bs); + bn = byte_stream_getstr(bs, bnlen); tlvlist = aim_tlvlist_read(bs); @@ -1296,9 +1296,9 @@ static int outgoingim(OscarData *od, FlapConnection *conn, aim_module_t *mod, Fl } if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) - ret = userfunc(od, conn, frame, channel, sn, msg, icbmflags, flag1, flag2); + ret = userfunc(od, conn, frame, channel, bn, msg, icbmflags, flag1, flag2); - g_free(sn); + g_free(bn); g_free(msg); aim_tlvlist_free(tlvlist); @@ -1480,7 +1480,7 @@ static int incomingim_ch1_parsemsgs(OscarData *od, aim_userinfo_t *userinfo, gui msglen = byte_stream_get16(&mbs); if (msglen > byte_stream_empty(&mbs)) { - purple_debug_misc("oscar", "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->sn); + purple_debug_misc("oscar", "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->bn); break; } @@ -1589,7 +1589,7 @@ static int incomingim_ch1(OscarData *od, FlapConnection *conn, aim_module_t *mod if (length > byte_stream_empty(bs)) { - purple_debug_misc("oscar", "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->sn); + purple_debug_misc("oscar", "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->bn); break; } @@ -1625,14 +1625,14 @@ static int incomingim_ch1(OscarData *od, FlapConnection *conn, aim_module_t *mod if (magic1 != 0x501) { - purple_debug_misc("oscar", "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->sn); + purple_debug_misc("oscar", "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->bn); break; } args.featureslen = byte_stream_get16(bs); if (args.featureslen > byte_stream_empty(bs)) { - purple_debug_misc("oscar", "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->sn); + purple_debug_misc("oscar", "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->bn); break; } if (args.featureslen == 0) @@ -1654,7 +1654,7 @@ static int incomingim_ch1(OscarData *od, FlapConnection *conn, aim_module_t *mod magic1 = byte_stream_get16(bs); /* 01 01 */ if (magic1 != 0x101) /* Bad, message comes before attributes */ { - purple_debug_misc("oscar", "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->sn); + purple_debug_misc("oscar", "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->bn); break; } msglen = byte_stream_get16(bs); @@ -1721,7 +1721,7 @@ static int incomingim_ch1(OscarData *od, FlapConnection *conn, aim_module_t *mod if (length > byte_stream_empty(bs)) { - purple_debug_misc("oscar", "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->sn); + purple_debug_misc("oscar", "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->bn); break; } g_free(args.extdata); @@ -1796,7 +1796,7 @@ incomingim_ch2_buddylist(OscarData *od, FlapConnection *conn, aim_module_t *mod, bnlen = byte_stream_get16(servdata); bn = byte_stream_getstr(servdata, bnlen); - purple_debug_misc("oscar", "got a buddy list from %s: group %s, buddy %s\n", userinfo->sn, gn, bn); + purple_debug_misc("oscar", "got a buddy list from %s: group %s, buddy %s\n", userinfo->bn, gn, bn); g_free(bn); } @@ -2285,7 +2285,7 @@ static int incomingim(OscarData *od, FlapConnection *conn, aim_module_t *mod, Fl } /* - * Subtype 0x0008 - Send a warning to sn. + * Subtype 0x0008 - Send a warning to bn. * * Flags: * AIM_WARN_ANON Send as an anonymous (doesn't count as much) @@ -2293,21 +2293,21 @@ static int incomingim(OscarData *od, FlapConnection *conn, aim_module_t *mod, Fl * returns -1 on error (couldn't alloc packet), 0 on success. * */ -int aim_im_warn(OscarData *od, FlapConnection *conn, const char *sn, guint32 flags) +int aim_im_warn(OscarData *od, FlapConnection *conn, const char *bn, guint32 flags) { ByteStream bs; aim_snacid_t snacid; - if (!od || !conn || !sn) + if (!od || !conn || !bn) return -EINVAL; - byte_stream_new(&bs, strlen(sn)+3); + byte_stream_new(&bs, strlen(bn)+3); - snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0008, 0x0000, sn, strlen(sn)+1); + snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0008, 0x0000, bn, strlen(bn)+1); byte_stream_put16(&bs, (flags & AIM_WARN_ANON) ? 0x0001 : 0x0000); - byte_stream_put8(&bs, strlen(sn)); - byte_stream_putstr(&bs, sn); + byte_stream_put8(&bs, strlen(bn)); + byte_stream_putstr(&bs, bn); flap_connection_send_snac(od, conn, SNAC_FAMILY_ICBM, 0x0008, 0x0000, snacid, &bs); @@ -2349,7 +2349,7 @@ static int missedcall(OscarData *od, FlapConnection *conn, aim_module_t *mod, Fl * AIM_TRANSFER_DENY_NOTACCEPTING -- "client is not accepting transfers" * */ -int aim_im_denytransfer(OscarData *od, const char *sn, const guchar *cookie, guint16 code) +int aim_im_denytransfer(OscarData *od, const char *bn, const guchar *cookie, guint16 code) { FlapConnection *conn; ByteStream bs; @@ -2359,15 +2359,15 @@ int aim_im_denytransfer(OscarData *od, const char *sn, const guchar *cookie, gui if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_ICBM))) return -EINVAL; - byte_stream_new(&bs, 8+2+1+strlen(sn)+6); + byte_stream_new(&bs, 8+2+1+strlen(bn)+6); snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x000b, 0x0000, NULL, 0); byte_stream_putraw(&bs, cookie, 8); byte_stream_put16(&bs, 0x0002); /* channel */ - byte_stream_put8(&bs, strlen(sn)); - byte_stream_putstr(&bs, sn); + byte_stream_put8(&bs, strlen(bn)); + byte_stream_putstr(&bs, bn); aim_tlvlist_add_16(&tlvlist, 0x0003, code); aim_tlvlist_write(&bs, &tlvlist); @@ -2380,7 +2380,7 @@ int aim_im_denytransfer(OscarData *od, const char *sn, const guchar *cookie, gui return 0; } -static void parse_status_note_text(OscarData *od, guchar *cookie, char *sn, ByteStream *bs) +static void parse_status_note_text(OscarData *od, guchar *cookie, char *bn, ByteStream *bs) { struct aim_icq_info *info; struct aim_icq_info *prev_info; @@ -2534,10 +2534,10 @@ static void parse_status_note_text(OscarData *od, guchar *cookie, char *sn, Byte g_free(status_note_text); g_free(stripped_status_note_text); - buddy = purple_find_buddy(account, sn); + buddy = purple_find_buddy(account, bn); if (buddy == NULL) { - purple_debug_misc("oscar", "clientautoresp: buddy %s was not found.\n", sn); + purple_debug_misc("oscar", "clientautoresp: buddy %s was not found.\n", bn); g_free(status_note); return; } @@ -2548,7 +2548,7 @@ static void parse_status_note_text(OscarData *od, guchar *cookie, char *sn, Byte presence = purple_buddy_get_presence(buddy); status = purple_presence_get_active_status(presence); - purple_prpl_got_user_status(account, sn, + purple_prpl_got_user_status(account, bn, purple_status_get_id(status), "message", status_note, NULL); @@ -2565,26 +2565,26 @@ static int clientautoresp(OscarData *od, FlapConnection *conn, aim_module_t *mod int ret = 0; aim_rxcallback_t userfunc; guint16 channel, reason; - char *sn; + char *bn; guchar *cookie; - guint8 snlen; + guint8 bnlen; cookie = byte_stream_getraw(bs, 8); channel = byte_stream_get16(bs); - snlen = byte_stream_get8(bs); - sn = byte_stream_getstr(bs, snlen); + bnlen = byte_stream_get8(bs); + bn = byte_stream_getstr(bs, bnlen); reason = byte_stream_get16(bs); if (channel == 0x0002) { if (reason == 0x0003) /* channel-specific */ /* parse status note text */ - parse_status_note_text(od, cookie, sn, bs); + parse_status_note_text(od, cookie, bn, bs); byte_stream_get16(bs); /* Unknown */ byte_stream_get16(bs); /* Unknown */ if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) - ret = userfunc(od, conn, frame, channel, sn, reason, cookie); + ret = userfunc(od, conn, frame, channel, bn, reason, cookie); } else if (channel == 0x0004) { /* ICQ message */ switch (reason) { @@ -2629,20 +2629,20 @@ static int clientautoresp(OscarData *od, FlapConnection *conn, aim_module_t *mod msg = byte_stream_getraw(bs, len); if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) - ret = userfunc(od, conn, frame, channel, sn, reason, state, msg); + ret = userfunc(od, conn, frame, channel, bn, reason, state, msg); g_free(msg); } break; default: { if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) - ret = userfunc(od, conn, frame, channel, sn, reason); + ret = userfunc(od, conn, frame, channel, bn, reason); } break; } /* end switch */ } g_free(cookie); - g_free(sn); + g_free(bn); return ret; } @@ -2660,17 +2660,17 @@ static int msgack(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFr aim_rxcallback_t userfunc; guint16 ch; guchar *cookie; - char *sn; + char *bn; int ret = 0; cookie = byte_stream_getraw(bs, 8); ch = byte_stream_get16(bs); - sn = byte_stream_getstr(bs, byte_stream_get8(bs)); + bn = byte_stream_getstr(bs, byte_stream_get8(bs)); if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) - ret = userfunc(od, conn, frame, ch, sn); + ret = userfunc(od, conn, frame, ch, bn); - g_free(sn); + g_free(bn); g_free(cookie); return ret; @@ -2707,7 +2707,7 @@ int aim_im_reqofflinemsgs(OscarData *od) * and Purple 0.60 and newer. * */ -int aim_im_sendmtn(OscarData *od, guint16 type1, const char *sn, guint16 type2) +int aim_im_sendmtn(OscarData *od, guint16 type1, const char *bn, guint16 type2) { FlapConnection *conn; ByteStream bs; @@ -2716,10 +2716,10 @@ int aim_im_sendmtn(OscarData *od, guint16 type1, const char *sn, guint16 type2) if (!od || !(conn = flap_connection_findbygroup(od, 0x0002))) return -EINVAL; - if (!sn) + if (!bn) return -EINVAL; - byte_stream_new(&bs, 11+strlen(sn)+2); + byte_stream_new(&bs, 11+strlen(bn)+2); snacid = aim_cachesnac(od, SNAC_FAMILY_ICBM, 0x0014, 0x0000, NULL, 0); @@ -2738,10 +2738,10 @@ int aim_im_sendmtn(OscarData *od, guint16 type1, const char *sn, guint16 type2) byte_stream_put16(&bs, type1); /* - * Dest sn + * Dest buddy name */ - byte_stream_put8(&bs, strlen(sn)); - byte_stream_putstr(&bs, sn); + byte_stream_put8(&bs, strlen(bn)); + byte_stream_putstr(&bs, bn); /* * Type 2 (should be 0x0000, 0x0001, or 0x0002 for mtn) @@ -2766,20 +2766,20 @@ static int mtn_receive(OscarData *od, FlapConnection *conn, aim_module_t *mod, F { int ret = 0; aim_rxcallback_t userfunc; - char *sn; - guint8 snlen; + char *bn; + guint8 bnlen; guint16 type1, type2; byte_stream_advance(bs, 8); /* Unknown - All 0's */ type1 = byte_stream_get16(bs); - snlen = byte_stream_get8(bs); - sn = byte_stream_getstr(bs, snlen); + bnlen = byte_stream_get8(bs); + bn = byte_stream_getstr(bs, bnlen); type2 = byte_stream_get16(bs); if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) - ret = userfunc(od, conn, frame, type1, sn, type2); + ret = userfunc(od, conn, frame, type1, bn, type2); - g_free(sn); + g_free(bn); return ret; } diff --git a/libpurple/protocols/oscar/family_locate.c b/libpurple/protocols/oscar/family_locate.c index 0646a2b807..8bcb8c0955 100644 --- a/libpurple/protocols/oscar/family_locate.c +++ b/libpurple/protocols/oscar/family_locate.c @@ -100,7 +100,7 @@ static const struct { 0x82, 0x22, 0x44, 0x45, 0x45, 0x53, 0x54, 0x00}}, /* Supports "new status message features" (Who advertises this one?) */ - /* OSCAR_CAPABILITY_HOST_STATUS_TEXT_AWARE */ + /* OSCAR_CAPABILITY_HOST_STATUS_TEXT_AWARE */ {OSCAR_CAPABILITY_GENERICUNKNOWN, {0x09, 0x46, 0x01, 0x0a, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}, @@ -112,7 +112,7 @@ static const struct { 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}, /* Client only asserts caps for services in which it is participating */ - /* OSCAR_CAPABILITY_SMARTCAPS */ + /* OSCAR_CAPABILITY_SMARTCAPS */ {OSCAR_CAPABILITY_GENERICUNKNOWN, {0x09, 0x46, 0x01, 0xff, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}, @@ -253,11 +253,11 @@ aim_locate_adduserinfo(OscarData *od, aim_userinfo_t *userinfo) FlapConnection *conn; aim_rxcallback_t userfunc; - cur = aim_locate_finduserinfo(od, userinfo->sn); + cur = aim_locate_finduserinfo(od, userinfo->bn); if (cur == NULL) { cur = (aim_userinfo_t *)g_new0(aim_userinfo_t, 1); - cur->sn = g_strdup(userinfo->sn); + cur->bn = g_strdup(userinfo->bn); cur->next = od->locate.userinfo; od->locate.userinfo = cur; } @@ -366,35 +366,35 @@ aim_locate_adduserinfo(OscarData *od, aim_userinfo_t *userinfo) } /** - * Remove this screen name from our queue. If this info was requested + * Remove this buddy name from our queue. If this info was requested * by our info request queue, then pop the next element off of the queue. * * @param od The aim session. - * @param sn Screen name of the info we just received. + * @param bn Buddy name of the info we just received. * @return True if the request was explicit (client requested the info), * false if the request was implicit (libfaim request the info). */ static int -aim_locate_gotuserinfo(OscarData *od, FlapConnection *conn, const char *sn) +aim_locate_gotuserinfo(OscarData *od, FlapConnection *conn, const char *bn) { struct userinfo_node *cur, *del; int was_explicit = TRUE; - while ((od->locate.requested != NULL) && (aim_sncmp(sn, od->locate.requested->sn) == 0)) { + while ((od->locate.requested != NULL) && (oscar_util_name_compare(bn, od->locate.requested->bn) == 0)) { del = od->locate.requested; od->locate.requested = del->next; was_explicit = FALSE; - g_free(del->sn); + g_free(del->bn); g_free(del); } cur = od->locate.requested; while ((cur != NULL) && (cur->next != NULL)) { - if (aim_sncmp(sn, cur->next->sn) == 0) { + if (oscar_util_name_compare(bn, cur->next->bn) == 0) { del = cur->next; cur->next = del->next; was_explicit = FALSE; - g_free(del->sn); + g_free(del->bn); g_free(del); } else cur = cur->next; @@ -404,34 +404,34 @@ aim_locate_gotuserinfo(OscarData *od, FlapConnection *conn, const char *sn) } void -aim_locate_autofetch_away_message(OscarData *od, const char *sn) +aim_locate_autofetch_away_message(OscarData *od, const char *bn) { struct userinfo_node *cur; /* Make sure we haven't already made an info request for this buddy */ for (cur = od->locate.requested; cur != NULL; cur = cur->next) - if (aim_sncmp(sn, cur->sn) == 0) + if (oscar_util_name_compare(bn, cur->bn) == 0) return; /* Add a new node to our request queue */ cur = (struct userinfo_node *)g_malloc(sizeof(struct userinfo_node)); - cur->sn = g_strdup(sn); + cur->bn = g_strdup(bn); cur->next = od->locate.requested; od->locate.requested = cur; - aim_locate_getinfoshort(od, cur->sn, 0x00000002); + aim_locate_getinfoshort(od, cur->bn, 0x00000002); } -aim_userinfo_t *aim_locate_finduserinfo(OscarData *od, const char *sn) { +aim_userinfo_t *aim_locate_finduserinfo(OscarData *od, const char *bn) { aim_userinfo_t *cur = NULL; - if (sn == NULL) + if (bn == NULL) return NULL; cur = od->locate.userinfo; while (cur != NULL) { - if (aim_sncmp(cur->sn, sn) == 0) + if (oscar_util_name_compare(cur->bn, bn) == 0) return cur; cur = cur->next; } @@ -552,7 +552,7 @@ dumptlv(OscarData *od, guint16 type, ByteStream *bs, guint8 len) void aim_info_free(aim_userinfo_t *info) { - g_free(info->sn); + g_free(info->bn); g_free(info->iconcsum); g_free(info->info); g_free(info->info_encoding); @@ -572,7 +572,7 @@ int aim_info_extract(OscarData *od, ByteStream *bs, aim_userinfo_t *outinfo) { int curtlv, tlvcnt; - guint8 snlen; + guint8 bnlen; if (!bs || !outinfo) return -EINVAL; @@ -581,11 +581,11 @@ aim_info_extract(OscarData *od, ByteStream *bs, aim_userinfo_t *outinfo) memset(outinfo, 0x00, sizeof(aim_userinfo_t)); /* - * Screen name. Stored as an unterminated string prepended with a + * Username. Stored as an unterminated string prepended with a * byte containing its length. */ - snlen = byte_stream_get8(bs); - outinfo->sn = byte_stream_getstr(bs, snlen); + bnlen = byte_stream_get8(bs); + outinfo->bn = byte_stream_getstr(bs, bnlen); /* * Warning Level. Stored as an unsigned short. @@ -881,7 +881,7 @@ aim_info_extract(OscarData *od, ByteStream *bs, aim_userinfo_t *outinfo) */ #ifdef LOG_UNKNOWN_TLV purple_debug_misc("oscar", "userinfo: **warning: unexpected TLV:\n"); - purple_debug_misc("oscar", "userinfo: sn =%s\n", outinfo->sn); + purple_debug_misc("oscar", "userinfo: bn =%s\n", outinfo->bn); dumptlv(od, type, bs, length); #endif } @@ -906,8 +906,8 @@ aim_putuserinfo(ByteStream *bs, aim_userinfo_t *info) if (!bs || !info) return -EINVAL; - byte_stream_put8(bs, strlen(info->sn)); - byte_stream_putstr(bs, info->sn); + byte_stream_put8(bs, strlen(info->bn)); + byte_stream_putstr(bs, info->bn); byte_stream_put16(bs, info->warnlevel); @@ -922,7 +922,7 @@ aim_putuserinfo(ByteStream *bs, aim_userinfo_t *info) /* XXX - So, ICQ_OSCAR_SUPPORT is never defined anywhere... */ #ifdef ICQ_OSCAR_SUPPORT - if (atoi(info->sn) != 0) { + if (atoi(info->bn) != 0) { if (info->present & AIM_USERINFO_PRESENT_ICQEXTSTATUS) aim_tlvlist_add_16(&tlvlist, 0x0006, info->icqinfo.status); if (info->present & AIM_USERINFO_PRESENT_ICQIPADDR) @@ -953,35 +953,35 @@ error(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_rxcallback_t userfunc; aim_snac_t *snac2; guint16 reason; - char *sn; + char *bn; int was_explicit; if (!(snac2 = aim_remsnac(od, snac->id))) { - purple_debug_misc("oscar", "faim: locate.c, error(): received response from unknown request!\n"); + purple_debug_misc("oscar", "locate error: received response from unknown request!\n"); return 0; } if ((snac2->family != SNAC_FAMILY_LOCATE) && (snac2->type != 0x0015)) { - purple_debug_misc("oscar", "faim: locate.c, error(): received response from invalid request! %d\n", snac2->family); + purple_debug_misc("oscar", "locate error: received response from invalid request! %d\n", snac2->family); return 0; } - if (!(sn = snac2->data)) { - purple_debug_misc("oscar", "faim: locate.c, error(): received response from request without a screen name!\n"); + if (!(bn = snac2->data)) { + purple_debug_misc("oscar", "locate error: received response from request without a buddy name!\n"); return 0; } reason = byte_stream_get16(bs); /* - * Remove this screen name from our queue. If the client requested + * Remove this buddy name from our queue. If the client requested * this buddy's info explicitly, then notify them that we do not have * info for this buddy. */ - was_explicit = aim_locate_gotuserinfo(od, conn, sn); + was_explicit = aim_locate_gotuserinfo(od, conn, bn); if (was_explicit == TRUE) if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) - ret = userfunc(od, conn, frame, reason, sn); + ret = userfunc(od, conn, frame, reason, bn); if (snac2) g_free(snac2->data); @@ -1157,29 +1157,29 @@ aim_locate_setcaps(OscarData *od, guint32 caps) /* * Subtype 0x0005 - Request info of another AIM user. * - * @param sn The screenname whose info you wish to request. + * @param bn The buddy name whose info you wish to request. * @param infotype The type of info you wish to request. * 0x0001 - Info/profile * 0x0003 - Away message * 0x0004 - Capabilities */ int -aim_locate_getinfo(OscarData *od, const char *sn, guint16 infotype) +aim_locate_getinfo(OscarData *od, const char *bn, guint16 infotype) { FlapConnection *conn; ByteStream bs; aim_snacid_t snacid; - if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_LOCATE)) || !sn) + if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_LOCATE)) || !bn) return -EINVAL; - byte_stream_new(&bs, 2+1+strlen(sn)); + byte_stream_new(&bs, 2+1+strlen(bn)); snacid = aim_cachesnac(od, SNAC_FAMILY_LOCATE, 0x0005, 0x0000, NULL, 0); byte_stream_put16(&bs, infotype); - byte_stream_put8(&bs, strlen(sn)); - byte_stream_putstr(&bs, sn); + byte_stream_put8(&bs, strlen(bn)); + byte_stream_putstr(&bs, bn); flap_connection_send_snac(od, conn, SNAC_FAMILY_LOCATE, 0x0005, 0x0000, snacid, &bs); @@ -1229,18 +1229,18 @@ userinfo(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *fram aim_tlvlist_free(tlvlist); aim_locate_adduserinfo(od, userinfo); - userinfo2 = aim_locate_finduserinfo(od, userinfo->sn); + userinfo2 = aim_locate_finduserinfo(od, userinfo->bn); aim_info_free(userinfo); g_free(userinfo); /* - * Remove this screen name from our queue. If the client requested + * Remove this buddy name from our queue. If the client requested * this buddy's info explicitly, then notify them that we have info * for this buddy. */ if (userinfo2 != NULL) { - was_explicit = aim_locate_gotuserinfo(od, conn, userinfo2->sn); + was_explicit = aim_locate_gotuserinfo(od, conn, userinfo2->bn); if (was_explicit == TRUE) if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) ret = userfunc(od, conn, frame, userinfo2); @@ -1307,7 +1307,7 @@ int aim_locate_setdirinfo(OscarData *od, const char *first, const char *middle, /* * Subtype 0x000b - Huh? What is this? */ -int aim_locate_000b(OscarData *od, const char *sn) +int aim_locate_000b(OscarData *od, const char *bn) { FlapConnection *conn; ByteStream bs; @@ -1315,15 +1315,15 @@ int aim_locate_000b(OscarData *od, const char *sn) return -EINVAL; - if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_LOCATE)) || !sn) + if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_LOCATE)) || !bn) return -EINVAL; - byte_stream_new(&bs, 1+strlen(sn)); + byte_stream_new(&bs, 1+strlen(bn)); snacid = aim_cachesnac(od, SNAC_FAMILY_LOCATE, 0x000b, 0x0000, NULL, 0); - byte_stream_put8(&bs, strlen(sn)); - byte_stream_putstr(&bs, sn); + byte_stream_put8(&bs, strlen(bn)); + byte_stream_putstr(&bs, bn); flap_connection_send_snac(od, conn, SNAC_FAMILY_LOCATE, 0x000b, 0x0000, snacid, &bs); @@ -1380,7 +1380,7 @@ aim_locate_setinterests(OscarData *od, const char *interest1, const char *intere * Subtype 0x0015 - Request the info of a user using the short method. This is * what iChat uses. It normally is VERY leniently rate limited. * - * @param sn The screen name whose info you wish to request. + * @param bn The buddy name whose info you wish to request. * @param flags The bitmask which specifies the type of info you wish to request. * 0x00000001 - Info/profile. * 0x00000002 - Away message. @@ -1389,21 +1389,21 @@ aim_locate_setinterests(OscarData *od, const char *interest1, const char *intere * @return Return 0 if no errors, otherwise return the error number. */ int -aim_locate_getinfoshort(OscarData *od, const char *sn, guint32 flags) +aim_locate_getinfoshort(OscarData *od, const char *bn, guint32 flags) { FlapConnection *conn; ByteStream bs; aim_snacid_t snacid; - if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_LOCATE)) || !sn) + if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_LOCATE)) || !bn) return -EINVAL; - byte_stream_new(&bs, 4 + 1 + strlen(sn)); + byte_stream_new(&bs, 4 + 1 + strlen(bn)); byte_stream_put32(&bs, flags); - byte_stream_put8(&bs, strlen(sn)); - byte_stream_putstr(&bs, sn); + byte_stream_put8(&bs, strlen(bn)); + byte_stream_putstr(&bs, bn); - snacid = aim_cachesnac(od, SNAC_FAMILY_LOCATE, 0x0015, 0x0000, sn, strlen(sn)+1); + snacid = aim_cachesnac(od, SNAC_FAMILY_LOCATE, 0x0015, 0x0000, bn, strlen(bn)+1); flap_connection_send_snac_with_priority(od, conn, SNAC_FAMILY_LOCATE, 0x0015, 0x0000, snacid, &bs, FALSE); byte_stream_destroy(&bs); diff --git a/libpurple/protocols/oscar/family_odir.c b/libpurple/protocols/oscar/family_odir.c index a31768a003..be1638fb39 100644 --- a/libpurple/protocols/oscar/family_odir.c +++ b/libpurple/protocols/oscar/family_odir.c @@ -31,7 +31,7 @@ /** * Subtype 0x0002 - Submit a User Search Request * - * Search for an AIM screen name based on their email address. + * Search for an AIM buddy based on their email address. * * @param od The oscar session. * @param region Should be "us-ascii" unless you know what you're doing. @@ -70,7 +70,7 @@ int aim_odir_email(OscarData *od, const char *region, const char *email) /** * Subtype 0x0002 - Submit a User Search Request * - * Search for an AIM screen name based on various info + * Search for an AIM buddy based on various info * about the person. * * @param od The oscar session. @@ -202,7 +202,7 @@ static int parseresults(OscarData *od, FlapConnection *conn, aim_module_t *mod, new->country = aim_tlv_getstr(tlvlist, 0x0006, 1); new->state = aim_tlv_getstr(tlvlist, 0x0007, 1); new->city = aim_tlv_getstr(tlvlist, 0x0008, 1); - new->sn = aim_tlv_getstr(tlvlist, 0x0009, 1); + new->bn = aim_tlv_getstr(tlvlist, 0x0009, 1); new->interest = aim_tlv_getstr(tlvlist, 0x000b, 1); new->nick = aim_tlv_getstr(tlvlist, 0x000c, 1); new->zip = aim_tlv_getstr(tlvlist, 0x000d, 1); @@ -228,7 +228,7 @@ static int parseresults(OscarData *od, FlapConnection *conn, aim_module_t *mod, g_free(del->country); g_free(del->state); g_free(del->city); - g_free(del->sn); + g_free(del->bn); g_free(del->interest); g_free(del->nick); g_free(del->zip); diff --git a/libpurple/protocols/oscar/odc.c b/libpurple/protocols/oscar/odc.c index a4f29d09f4..8c02578972 100644 --- a/libpurple/protocols/oscar/odc.c +++ b/libpurple/protocols/oscar/odc.c @@ -62,7 +62,7 @@ peer_odc_close(PeerConnection *conn) PurpleConversation *conv; account = purple_connection_get_account(conn->od->gc); - conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, conn->sn); + conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, conn->bn); purple_conversation_write(conv, NULL, tmp, PURPLE_MESSAGE_SYSTEM, time(NULL)); g_free(tmp); } @@ -90,11 +90,11 @@ peer_odc_send(PeerConnection *conn, OdcFrame *frame) purple_debug_info("oscar", "Outgoing ODC frame to %s with " "type=0x%04x, flags=0x%04x, payload length=%u\n", - conn->sn, frame->type, frame->flags, frame->payload.len); + conn->bn, frame->type, frame->flags, frame->payload.len); account = purple_connection_get_account(conn->od->gc); username = purple_account_get_username(account); - memcpy(frame->sn, username, strlen(username)); + memcpy(frame->bn, username, strlen(username)); memcpy(frame->cookie, conn->cookie, 8); length = 76; @@ -116,7 +116,7 @@ peer_odc_send(PeerConnection *conn, OdcFrame *frame) byte_stream_put16(&bs, frame->flags); byte_stream_put16(&bs, 0x0000); byte_stream_put16(&bs, 0x0000); - byte_stream_putraw(&bs, frame->sn, 32); + byte_stream_putraw(&bs, frame->bn, 32); byte_stream_putraw(&bs, frame->payload.data, frame->payload.len); peer_connection_send(conn, &bs); @@ -366,7 +366,7 @@ peer_odc_handle_payload(PeerConnection *conn, const char *msg, size_t len, int e g_datalist_clear(&attributes); /* Append the message up to the tag */ - utf8 = purple_plugin_oscar_decode_im_part(account, conn->sn, + utf8 = purple_plugin_oscar_decode_im_part(account, conn->bn, encoding, 0x0000, tmp, start - tmp); if (utf8 != NULL) { g_string_append(newmsg, utf8); @@ -386,7 +386,7 @@ peer_odc_handle_payload(PeerConnection *conn, const char *msg, size_t len, int e /* Append any remaining message data */ if (tmp <= msgend) { - utf8 = purple_plugin_oscar_decode_im_part(account, conn->sn, + utf8 = purple_plugin_oscar_decode_im_part(account, conn->bn, encoding, 0x0000, tmp, msgend - tmp); if (utf8 != NULL) { g_string_append(newmsg, utf8); @@ -400,7 +400,7 @@ peer_odc_handle_payload(PeerConnection *conn, const char *msg, size_t len, int e imflags |= PURPLE_MESSAGE_IMAGES; if (autoreply) imflags |= PURPLE_MESSAGE_AUTO_RESP; - serv_got_im(gc, conn->sn, newmsg->str, imflags, time(NULL)); + serv_got_im(gc, conn->bn, newmsg->str, imflags, time(NULL)); g_string_free(newmsg, TRUE); /* unref any images we allocated */ @@ -503,11 +503,11 @@ peer_odc_recv_frame(PeerConnection *conn, ByteStream *bs) byte_stream_advance(bs, 4); frame->flags = byte_stream_get16(bs); byte_stream_advance(bs, 4); - byte_stream_getrawbuf(bs, frame->sn, 32); + byte_stream_getrawbuf(bs, frame->bn, 32); purple_debug_info("oscar", "Incoming ODC frame from %s with " "type=0x%04x, flags=0x%04x, payload length=%u\n", - frame->sn, frame->type, frame->flags, frame->payload.len); + frame->bn, frame->type, frame->flags, frame->payload.len); if (!conn->ready) { @@ -558,7 +558,7 @@ peer_odc_recv_frame(PeerConnection *conn, ByteStream *bs) /* Tell the local user that we are connected */ account = purple_connection_get_account(gc); - conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, conn->sn); + conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, conn->bn); purple_conversation_write(conv, NULL, _("Direct IM established"), PURPLE_MESSAGE_SYSTEM, time(NULL)); } @@ -576,16 +576,16 @@ peer_odc_recv_frame(PeerConnection *conn, ByteStream *bs) /* I had to leave this. It's just too funny. It reminds me of my sister. */ purple_debug_info("oscar", "ohmigod! %s has started typing " "(DirectIM). He's going to send you a message! " - "*squeal*\n", conn->sn); - serv_got_typing(gc, conn->sn, 0, PURPLE_TYPING); + "*squeal*\n", conn->bn); + serv_got_typing(gc, conn->bn, 0, PURPLE_TYPING); } else if (frame->flags & 0x0004) { - serv_got_typing(gc, conn->sn, 0, PURPLE_TYPED); + serv_got_typing(gc, conn->bn, 0, PURPLE_TYPED); } else { - serv_got_typing_stopped(gc, conn->sn); + serv_got_typing_stopped(gc, conn->bn); } if (frame->payload.len > 0) @@ -598,12 +598,12 @@ peer_odc_recv_frame(PeerConnection *conn, ByteStream *bs) size1 = purple_str_size_to_units(frame->payload.len); size2 = purple_str_size_to_units(DIRECTIM_MAX_FILESIZE); - tmp = g_strdup_printf(_("%s tried to send you a %s file, but we only allow files up to %s over Direct IM. Try using file transfer instead.\n"), conn->sn, size1, size2); + tmp = g_strdup_printf(_("%s tried to send you a %s file, but we only allow files up to %s over Direct IM. Try using file transfer instead.\n"), conn->bn, size1, size2); g_free(size1); g_free(size2); account = purple_connection_get_account(conn->od->gc); - conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, conn->sn); + conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, conn->bn); purple_conversation_write(conv, NULL, tmp, PURPLE_MESSAGE_SYSTEM, time(NULL)); g_free(tmp); diff --git a/libpurple/protocols/oscar/oft.c b/libpurple/protocols/oscar/oft.c index d2ba5bebd8..d82622a1c4 100644 --- a/libpurple/protocols/oscar/oft.c +++ b/libpurple/protocols/oscar/oft.c @@ -544,7 +544,7 @@ peer_oft_recv_frame(PeerConnection *conn, ByteStream *bs) frame.name = byte_stream_getraw(bs, frame.name_length); purple_debug_info("oscar", "Incoming OFT frame from %s with " - "type=0x%04x\n", conn->sn, frame.type); + "type=0x%04x\n", conn->bn, frame.type); /* TODOFT: peer_oft_dirconvert_fromstupid(frame->name); */ diff --git a/libpurple/protocols/oscar/oscar.c b/libpurple/protocols/oscar/oscar.c index 51dd59b732..661c7f9786 100644 --- a/libpurple/protocols/oscar/oscar.c +++ b/libpurple/protocols/oscar/oscar.c @@ -204,7 +204,7 @@ static void purple_icons_fetch(PurpleConnection *gc); void oscar_set_info(PurpleConnection *gc, const char *info); static void oscar_set_info_and_status(PurpleAccount *account, gboolean setinfo, const char *rawinfo, gboolean setstatus, PurpleStatus *status); static void oscar_set_extendedstatus(PurpleConnection *gc); -static void oscar_format_screenname(PurpleConnection *gc, const char *nick); +static void oscar_format_username(PurpleConnection *gc, const char *nick); static gboolean purple_ssi_rerequestdata(gpointer data); static void oscar_free_name_data(struct name_data *data) { @@ -362,7 +362,7 @@ oscar_utf8_try_convert(PurpleAccount *account, const gchar *msg) const char *charset = NULL; char *ret = NULL; - if(aim_snvalid_icq(purple_account_get_username(account))) + if(oscar_util_valid_name_icq(purple_account_get_username(account))) charset = purple_account_get_string(account, "encoding", NULL); if(charset && *charset) @@ -414,7 +414,7 @@ purple_plugin_oscar_convert_to_utf8(const gchar *data, gsize datalen, const char * charsetstr1 is always set to what the correct encoding should be. */ gchar * -purple_plugin_oscar_decode_im_part(PurpleAccount *account, const char *sourcesn, guint16 charset, guint16 charsubset, const gchar *data, gsize datalen) +purple_plugin_oscar_decode_im_part(PurpleAccount *account, const char *sourcebn, guint16 charset, guint16 charsubset, const gchar *data, gsize datalen) { gchar *ret = NULL; const gchar *charsetstr1, *charsetstr2; @@ -428,7 +428,7 @@ purple_plugin_oscar_decode_im_part(PurpleAccount *account, const char *sourcesn, charsetstr1 = "UTF-16BE"; charsetstr2 = "UTF-8"; } else if (charset == AIM_CHARSET_CUSTOM) { - if ((sourcesn != NULL) && aim_snvalid_icq(sourcesn)) + if ((sourcebn != NULL) && oscar_util_valid_name_icq(sourcebn)) charsetstr1 = purple_account_get_string(account, "encoding", OSCAR_DEFAULT_CUSTOM_ENCODING); else charsetstr1 = "ISO-8859-1"; @@ -458,7 +458,7 @@ purple_plugin_oscar_decode_im_part(PurpleAccount *account, const char *sourcesn, str[datalen] = '\0'; salvage = purple_utf8_salvage(str); tmp = g_strdup_printf(_("(There was an error receiving this message. Either you and %s have different encodings selected, or %s has a buggy client.)"), - sourcesn, sourcesn); + sourcebn, sourcebn); ret = g_strdup_printf("%s %s", salvage, tmp); g_free(tmp); g_free(str); @@ -473,11 +473,11 @@ purple_plugin_oscar_decode_im_part(PurpleAccount *account, const char *sourcesn, */ static void purple_plugin_oscar_convert_to_best_encoding(PurpleConnection *gc, - const char *destsn, const gchar *from, + const char *destbn, const gchar *from, gchar **msg, int *msglen_int, guint16 *charset, guint16 *charsubset) { - OscarData *od = gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); PurpleAccount *account = purple_connection_get_account(gc); GError *err = NULL; aim_userinfo_t *userinfo = NULL; @@ -499,13 +499,13 @@ purple_plugin_oscar_convert_to_best_encoding(PurpleConnection *gc, * capability, and they are online, then attempt to send * as UTF-16BE. */ - if ((destsn != NULL) && aim_snvalid_icq(destsn)) - userinfo = aim_locate_finduserinfo(od, destsn); + if ((destbn != NULL) && oscar_util_valid_name_icq(destbn)) + userinfo = aim_locate_finduserinfo(od, destbn); if ((userinfo != NULL) && (userinfo->capabilities & OSCAR_CAPABILITY_UNICODE)) { PurpleBuddy *b; - b = purple_find_buddy(account, destsn); + b = purple_find_buddy(account, destbn); if ((b != NULL) && (PURPLE_BUDDY_IS_ONLINE(b))) { *msg = g_convert(from, -1, "UTF-16BE", "UTF-8", NULL, &msglen, &err); @@ -529,7 +529,7 @@ purple_plugin_oscar_convert_to_best_encoding(PurpleConnection *gc, * ICQ then attempt to send as the user specified character encoding. */ charsetstr = "ISO-8859-1"; - if ((destsn != NULL) && aim_snvalid_icq(destsn)) + if ((destbn != NULL) && oscar_util_valid_name_icq(destbn)) charsetstr = purple_account_get_string(account, "encoding", OSCAR_DEFAULT_CUSTOM_ENCODING); /* @@ -808,16 +808,16 @@ static void oscar_user_info_append_status(PurpleConnection *gc, PurpleNotifyUser gchar *message = NULL, *itmsurl = NULL, *tmp; gboolean is_away; - od = gc->proto_data; + od = purple_connection_get_protocol_data(gc); if (userinfo == NULL) - userinfo = aim_locate_finduserinfo(od, b->name); + userinfo = aim_locate_finduserinfo(od, purple_buddy_get_name(b)); if ((user_info == NULL) || ((b == NULL) && (userinfo == NULL))) return; if (b == NULL) - b = purple_find_buddy(purple_connection_get_account(gc), userinfo->sn); + b = purple_find_buddy(purple_connection_get_account(gc), userinfo->bn); if (b) { presence = purple_buddy_get_presence(b); @@ -884,7 +884,7 @@ static void oscar_user_info_append_status(PurpleConnection *gc, PurpleNotifyUser if (b) { if (purple_presence_is_online(presence)) { - if (aim_snvalid_icq(b->name) || is_away || !message || !(*message)) { + if (oscar_util_valid_name_icq(purple_buddy_get_name(b)) || is_away || !message || !(*message)) { /* Append the status name for online ICQ statuses, away AIM statuses, and for all buddies with no message. * If the status name and the message are the same, only show one. */ const char *status_name = purple_status_get_name(status); @@ -899,21 +899,20 @@ static void oscar_user_info_append_status(PurpleConnection *gc, PurpleNotifyUser message = tmp; } + } else if (aim_ssi_waitingforauth(od->ssi.local, + aim_ssi_itemlist_findparentname(od->ssi.local, purple_buddy_get_name(b)), + purple_buddy_get_name(b))) + { + /* Note if an offline buddy is not authorized */ + tmp = g_strdup_printf("%s%s%s", + _("Not Authorized"), + (message && *message) ? ": " : "", + (message && *message) ? message : ""); + g_free(message); + message = tmp; } else { - if (aim_ssi_waitingforauth(od->ssi.local, - aim_ssi_itemlist_findparentname(od->ssi.local, b->name), - b->name)) { - /* Note if an offline buddy is not authorized */ - tmp = g_strdup_printf("%s%s%s", - _("Not Authorized"), - (message && *message) ? ": " : "", - (message && *message) ? message : ""); - g_free(message); - message = tmp; - } else { - g_free(message); - message = g_strdup(_("Offline")); - } + g_free(message); + message = g_strdup(_("Offline")); } } @@ -931,27 +930,30 @@ static void oscar_user_info_append_extra_info(PurpleConnection *gc, PurpleNotify PurpleGroup *g = NULL; struct buddyinfo *bi = NULL; char *tmp; + const char *bname, *gname = NULL; - od = gc->proto_data; + od = purple_connection_get_protocol_data(gc); account = purple_connection_get_account(gc); if ((user_info == NULL) || ((b == NULL) && (userinfo == NULL))) return; + bname = purple_buddy_get_name(b); if (userinfo == NULL) - userinfo = aim_locate_finduserinfo(od, b->name); + userinfo = aim_locate_finduserinfo(od, bname); if (b == NULL) - b = purple_find_buddy(account, userinfo->sn); + b = purple_find_buddy(account, userinfo->bn); if (b != NULL) { g = purple_buddy_get_group(b); + gname = purple_group_get_name(g); presence = purple_buddy_get_presence(b); status = purple_presence_get_active_status(presence); } if (userinfo != NULL) - bi = g_hash_table_lookup(od->buddyinfo, purple_normalize(account, userinfo->sn)); + bi = g_hash_table_lookup(od->buddyinfo, purple_normalize(account, userinfo->bn)); if ((bi != NULL) && (bi->ipaddr != 0)) { tmp = g_strdup_printf("%hhu.%hhu.%hhu.%hhu", @@ -969,8 +971,8 @@ static void oscar_user_info_append_extra_info(PurpleConnection *gc, PurpleNotify g_free(tmp); } - if ((b != NULL) && (b->name != NULL) && (g != NULL) && (g->name != NULL)) { - tmp = aim_ssi_getcomment(od->ssi.local, g->name, b->name); + if ((b != NULL) && (bname != NULL) && (g != NULL) && (gname != NULL)) { + tmp = aim_ssi_getcomment(od->ssi.local, gname, bname); if (tmp != NULL) { char *tmp2 = g_markup_escape_text(tmp, strlen(tmp)); g_free(tmp); @@ -1017,7 +1019,7 @@ static char *extract_name(const char *name) { static struct chat_connection * find_oscar_chat(PurpleConnection *gc, int id) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); GSList *cur; struct chat_connection *cc; @@ -1034,7 +1036,7 @@ find_oscar_chat(PurpleConnection *gc, int id) static struct chat_connection * find_oscar_chat_by_conn(PurpleConnection *gc, FlapConnection *conn) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); GSList *cur; struct chat_connection *cc; @@ -1051,7 +1053,7 @@ find_oscar_chat_by_conn(PurpleConnection *gc, FlapConnection *conn) static struct chat_connection * find_oscar_chat_by_conv(PurpleConnection *gc, PurpleConversation *conv) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); GSList *cur; struct chat_connection *cc; @@ -1076,7 +1078,7 @@ oscar_chat_destroy(struct chat_connection *cc) static void oscar_chat_kill(PurpleConnection *gc, struct chat_connection *cc) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); /* Notify the conversation window that we've left the chat */ serv_got_chat_left(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(cc->conv))); @@ -1292,10 +1294,10 @@ flap_connection_established_admin(OscarData *od, FlapConnection *conn) od->chpass = FALSE; } if (od->setnick) { - purple_debug_info("oscar", "formatting screen name\n"); - aim_admin_setnick(od, conn, od->newsn); - g_free(od->newsn); - od->newsn = NULL; + purple_debug_info("oscar", "formatting username\n"); + aim_admin_setnick(od, conn, od->newformatting); + g_free(od->newformatting); + od->newformatting = NULL; od->setnick = FALSE; } if (od->conf) { @@ -1391,7 +1393,7 @@ idle_reporting_pref_cb(const char *name, PurplePrefType type, guint32 presence; gc = data; - od = gc->proto_data; + od = purple_connection_get_protocol_data(gc); report_idle = strcmp((const char *)value, "none") != 0; presence = aim_ssi_getpresence(od->ssi.local); @@ -1414,7 +1416,7 @@ recent_buddies_pref_cb(const char *name, PurplePrefType type, guint32 presence; gc = data; - od = gc->proto_data; + od = purple_connection_get_protocol_data(gc); presence = aim_ssi_getpresence(od->ssi.local); if (value) @@ -1431,8 +1433,9 @@ oscar_login(PurpleAccount *account) FlapConnection *newconn; gc = purple_account_get_connection(account); - od = gc->proto_data = oscar_data_new(); + od = oscar_data_new(); od->gc = gc; + purple_connection_set_protocol_data(gc, od); oscar_data_addhandler(od, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, purple_connerr, 0); oscar_data_addhandler(od, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, flap_connection_established, 0); @@ -1499,7 +1502,7 @@ oscar_login(PurpleAccount *account) purple_debug_misc("oscar", "oscar_login: gc = %p\n", gc); - if (!aim_snvalid(purple_account_get_username(account))) { + if (!oscar_util_valid_name(purple_account_get_username(account))) { gchar *buf; buf = g_strdup_printf(_("Unable to login: Could not sign on as %s because the username is invalid. Usernames must be a valid email address, or start with a letter and contain only letters, numbers and spaces, or contain only numbers."), purple_account_get_username(account)); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, buf); @@ -1507,7 +1510,7 @@ oscar_login(PurpleAccount *account) return; } - if (aim_snvalid_icq((purple_account_get_username(account)))) { + if (oscar_util_valid_name_icq((purple_account_get_username(account)))) { od->icq = TRUE; } else { gc->flags |= PURPLE_CONNECTION_HTML; @@ -1578,7 +1581,7 @@ oscar_close(PurpleConnection *gc) { OscarData *od; - od = (OscarData *)gc->proto_data; + od = purple_connection_get_protocol_data(gc); while (od->oscar_chats) { @@ -1594,7 +1597,7 @@ oscar_close(PurpleConnection *gc) g_free(cr); } oscar_data_destroy(od); - gc->proto_data = NULL; + purple_connection_set_protocol_data(gc, NULL); purple_prefs_disconnect_by_handle(gc); @@ -1605,7 +1608,7 @@ static int purple_parse_auth_resp(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) { PurpleConnection *gc = od->gc; - PurpleAccount *account = gc->account; + PurpleAccount *account = purple_connection_get_account(gc); char *host; int port; int i; FlapConnection *newconn; @@ -1619,13 +1622,13 @@ purple_parse_auth_resp(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) va_end(ap); purple_debug_info("oscar", - "inside auth_resp (Username: %s)\n", info->sn); + "inside auth_resp (Username: %s)\n", info->bn); if (info->errorcode || !info->bosip || !info->cookielen || !info->cookie) { char buf[256]; switch (info->errorcode) { case 0x01: - /* Unregistered screen name */ + /* Unregistered username */ purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_INVALID_USERNAME, _("Invalid username.")); break; case 0x05: @@ -1644,7 +1647,7 @@ purple_parse_auth_resp(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("The AOL Instant Messenger service is temporarily unavailable.")); break; case 0x18: - /* screen name connecting too frequently */ + /* username connecting too frequently */ purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_OTHER_ERROR, _("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.")); break; case 0x1c: @@ -1722,7 +1725,7 @@ static void purple_parse_auth_securid_request_yes_cb(gpointer user_data, const char *msg) { PurpleConnection *gc = user_data; - OscarData *od = gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); aim_auth_securid_send(od, msg); } @@ -1774,7 +1777,7 @@ struct pieceofcrap { static void damn_you(gpointer data, gint source, PurpleInputCondition c) { struct pieceofcrap *pos = data; - OscarData *od = pos->gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(pos->gc); char in = '\0'; int x = 0; unsigned char m[17]; @@ -1840,7 +1843,7 @@ straight_to_hell(gpointer data, gint source, const gchar *error_message) pos->fd = source; if (source < 0) { - GHashTable *ui_info = purple_core_get_ui_info(); + GHashTable *ui_info = purple_core_get_ui_info(); buf = g_strdup_printf(_("You may be disconnected shortly. " "Check %s for updates."), ((ui_info && g_hash_table_lookup(ui_info, "website")) ? (char *)g_hash_table_lookup(ui_info, "website") : PURPLE_WEBSITE)); @@ -2099,7 +2102,7 @@ static int purple_parse_oncoming(OscarData *od, FlapConnection *conn, FlapFrame va_end(ap); g_return_val_if_fail(info != NULL, 1); - g_return_val_if_fail(info->sn != NULL, 1); + g_return_val_if_fail(info->bn != NULL, 1); if (info->present & AIM_USERINFO_PRESENT_FLAGS) { if (info->flags & AIM_FLAG_AWAY) @@ -2113,7 +2116,7 @@ static int purple_parse_oncoming(OscarData *od, FlapConnection *conn, FlapFrame } } - if (aim_snvalid_icq(info->sn)) { + if (oscar_util_valid_name_icq(info->bn)) { if (type & AIM_ICQ_STATE_CHAT) status_id = OSCAR_STATUS_ID_FREE4CHAT; else if (type & AIM_ICQ_STATE_DND) @@ -2139,9 +2142,9 @@ static int purple_parse_oncoming(OscarData *od, FlapConnection *conn, FlapFrame if (info->flags & AIM_FLAG_WIRELESS) { - purple_prpl_got_user_status(account, info->sn, OSCAR_STATUS_ID_MOBILE, NULL); + purple_prpl_got_user_status(account, info->bn, OSCAR_STATUS_ID_MOBILE, NULL); } else { - purple_prpl_got_user_status_deactive(account, info->sn, OSCAR_STATUS_ID_MOBILE); + purple_prpl_got_user_status_deactive(account, info->bn, OSCAR_STATUS_ID_MOBILE); } if (info->status != NULL && info->status[0] != '\0') @@ -2164,11 +2167,11 @@ static int purple_parse_oncoming(OscarData *od, FlapConnection *conn, FlapFrame */ tmp2 = ""; - purple_prpl_got_user_status(account, info->sn, status_id, + purple_prpl_got_user_status(account, info->bn, status_id, "message", tmp2, "itmsurl", itmsurl, NULL); } else - purple_prpl_got_user_status(account, info->sn, status_id, "message", tmp2, NULL); + purple_prpl_got_user_status(account, info->bn, status_id, "message", tmp2, NULL); g_free(tmp); @@ -2180,7 +2183,7 @@ static int purple_parse_oncoming(OscarData *od, FlapConnection *conn, FlapFrame signon = info->onlinesince; else if (info->present & AIM_USERINFO_PRESENT_SESSIONLEN) signon = time(NULL) - info->sessionlen; - purple_prpl_got_user_login_time(account, info->sn, signon); + purple_prpl_got_user_login_time(account, info->bn, signon); /* Idle time stuff */ /* info->idletime is the number of minutes that this user has been idle */ @@ -2188,15 +2191,15 @@ static int purple_parse_oncoming(OscarData *od, FlapConnection *conn, FlapFrame time_idle = time(NULL) - info->idletime * 60; if (time_idle > 0) - purple_prpl_got_user_idle(account, info->sn, TRUE, time_idle); + purple_prpl_got_user_idle(account, info->bn, TRUE, time_idle); else - purple_prpl_got_user_idle(account, info->sn, FALSE, 0); + purple_prpl_got_user_idle(account, info->bn, FALSE, 0); /* Server stored icon stuff */ - bi = g_hash_table_lookup(od->buddyinfo, purple_normalize(account, info->sn)); + bi = g_hash_table_lookup(od->buddyinfo, purple_normalize(account, info->bn)); if (!bi) { bi = g_new0(struct buddyinfo, 1); - g_hash_table_insert(od->buddyinfo, g_strdup(purple_normalize(account, info->sn)), bi); + g_hash_table_insert(od->buddyinfo, g_strdup(purple_normalize(account, info->bn)), bi); } bi->typingnot = FALSE; bi->ico_informed = FALSE; @@ -2208,20 +2211,20 @@ static int purple_parse_oncoming(OscarData *od, FlapConnection *conn, FlapFrame PurpleBuddy *b = NULL; b16 = purple_base16_encode(info->iconcsum, info->iconcsumlen); - b = purple_find_buddy(account, info->sn); + b = purple_find_buddy(account, info->bn); if (b != NULL) saved_b16 = purple_buddy_icons_get_checksum_for_user(b); if (!b16 || !saved_b16 || strcmp(b16, saved_b16)) { /* Invalidate the old icon for this user */ - purple_buddy_icons_set_for_user(account, info->sn, NULL, 0, NULL); + purple_buddy_icons_set_for_user(account, info->bn, NULL, 0, NULL); /* Fetch the new icon (if we're not already doing so) */ - if (g_slist_find_custom(od->requesticon, info->sn, - (GCompareFunc)aim_sncmp) == NULL) + if (g_slist_find_custom(od->requesticon, info->bn, + (GCompareFunc)oscar_util_name_compare) == NULL) { od->requesticon = g_slist_prepend(od->requesticon, - g_strdup(purple_normalize(account, info->sn))); + g_strdup(purple_normalize(account, info->bn))); purple_icons_fetch(gc); } } @@ -2248,9 +2251,9 @@ static int purple_parse_offgoing(OscarData *od, FlapConnection *conn, FlapFrame info = va_arg(ap, aim_userinfo_t *); va_end(ap); - purple_prpl_got_user_status(account, info->sn, OSCAR_STATUS_ID_OFFLINE, NULL); - purple_prpl_got_user_status_deactive(account, info->sn, OSCAR_STATUS_ID_MOBILE); - g_hash_table_remove(od->buddyinfo, purple_normalize(gc->account, info->sn)); + purple_prpl_got_user_status(account, info->bn, OSCAR_STATUS_ID_OFFLINE, NULL); + purple_prpl_got_user_status_deactive(account, info->bn, OSCAR_STATUS_ID_MOBILE); + g_hash_table_remove(od->buddyinfo, purple_normalize(gc->account, info->bn)); return 1; } @@ -2268,15 +2271,15 @@ static int incomingim_chan1(OscarData *od, FlapConnection *conn, aim_userinfo_t GData *attribs; purple_debug_misc("oscar", "Received IM from %s with %d parts\n", - userinfo->sn, args->mpmsg.numparts); + userinfo->bn, args->mpmsg.numparts); if (args->mpmsg.numparts == 0) return 1; - bi = g_hash_table_lookup(od->buddyinfo, purple_normalize(account, userinfo->sn)); + bi = g_hash_table_lookup(od->buddyinfo, purple_normalize(account, userinfo->bn)); if (!bi) { bi = g_new0(struct buddyinfo, 1); - g_hash_table_insert(od->buddyinfo, g_strdup(purple_normalize(account, userinfo->sn)), bi); + g_hash_table_insert(od->buddyinfo, g_strdup(purple_normalize(account, userinfo->bn)), bi); } if (args->icbmflags & AIM_IMFLAGS_AWAY) @@ -2288,7 +2291,7 @@ static int incomingim_chan1(OscarData *od, FlapConnection *conn, aim_userinfo_t bi->typingnot = FALSE; if ((args->icbmflags & AIM_IMFLAGS_HASICON) && (args->iconlen) && (args->iconsum) && (args->iconstamp)) { - purple_debug_misc("oscar", "%s has an icon\n", userinfo->sn); + purple_debug_misc("oscar", "%s has an icon\n", userinfo->bn); if ((args->iconlen != bi->ico_len) || (args->iconsum != bi->ico_csum) || (args->iconstamp != bi->ico_time)) { bi->ico_need = TRUE; bi->ico_len = args->iconlen; @@ -2304,8 +2307,8 @@ static int incomingim_chan1(OscarData *od, FlapConnection *conn, aim_userinfo_t size_t len = purple_imgstore_get_size(img); purple_debug_info("oscar", "Sending buddy icon to %s (%" G_GSIZE_FORMAT " bytes)\n", - userinfo->sn, len); - aim_im_sendch2_icon(od, userinfo->sn, data, len, + userinfo->bn, len); + aim_im_sendch2_icon(od, userinfo->bn, data, len, purple_buddy_icons_get_account_icon_timestamp(account), aimutil_iconsum(data, len)); } @@ -2314,7 +2317,7 @@ static int incomingim_chan1(OscarData *od, FlapConnection *conn, aim_userinfo_t message = g_string_new(""); curpart = args->mpmsg.parts; while (curpart != NULL) { - tmp = purple_plugin_oscar_decode_im_part(account, userinfo->sn, curpart->charset, + tmp = purple_plugin_oscar_decode_im_part(account, userinfo->bn, curpart->charset, curpart->charsubset, curpart->data, curpart->datalen); if (tmp != NULL) { g_string_append(message, tmp); @@ -2334,7 +2337,7 @@ static int incomingim_chan1(OscarData *od, FlapConnection *conn, aim_userinfo_t * Note: There *may* be some clients which send messages as HTML formatted - * they need to be special-cased somehow. */ - if (aim_snvalid_icq(purple_account_get_username(account)) && aim_snvalid_icq(userinfo->sn)) { + if (oscar_util_valid_name_icq(purple_account_get_username(account)) && oscar_util_valid_name_icq(userinfo->bn)) { /* being recevied by ICQ from ICQ - escape HTML so it is displayed as sent */ gchar *tmp2 = g_markup_escape_text(tmp, -1); g_free(tmp); @@ -2372,7 +2375,7 @@ static int incomingim_chan1(OscarData *od, FlapConnection *conn, aim_userinfo_t g_datalist_clear(&attribs); } - serv_got_im(gc, userinfo->sn, tmp, flags, + serv_got_im(gc, userinfo->bn, tmp, flags, (args->icbmflags & AIM_IMFLAGS_OFFLINE) ? args->timestamp : time(NULL)); g_free(tmp); @@ -2391,13 +2394,13 @@ incomingim_chan2(OscarData *od, FlapConnection *conn, aim_userinfo_t *userinfo, gc = od->gc; account = purple_connection_get_account(gc); - od = gc->proto_data; + od = purple_connection_get_protocol_data(gc); if (args == NULL) return 0; purple_debug_misc("oscar", "Incoming rendezvous message of type %u, " - "user %s, status %hu\n", args->type, userinfo->sn, args->status); + "user %s, status %hu\n", args->type, userinfo->bn, args->status); if (args->msg != NULL) { @@ -2443,7 +2446,7 @@ incomingim_chan2(OscarData *od, FlapConnection *conn, aim_userinfo_t *userinfo, g_strdup_printf("%d", args->info.chat.roominfo.exchange)); serv_got_chat_invite(gc, utf8name, - userinfo->sn, + userinfo->bn, message, components); } @@ -2453,14 +2456,14 @@ incomingim_chan2(OscarData *od, FlapConnection *conn, aim_userinfo_t *userinfo, { if (args->status == AIM_RENDEZVOUS_PROPOSE) { - peer_connection_got_proposition(od, userinfo->sn, message, args); + peer_connection_got_proposition(od, userinfo->bn, message, args); } else if (args->status == AIM_RENDEZVOUS_CANCEL) { /* The other user canceled a peer request */ PeerConnection *conn; - conn = peer_connection_find_by_cookie(od, userinfo->sn, args->cookie); + conn = peer_connection_find_by_cookie(od, userinfo->bn, args->cookie); /* * If conn is NULL it means we haven't tried to create * a connection with that user. They may be trying to @@ -2491,7 +2494,7 @@ incomingim_chan2(OscarData *od, FlapConnection *conn, aim_userinfo_t *userinfo, else if (args->type & OSCAR_CAPABILITY_BUDDYICON) { - purple_buddy_icons_set_for_user(account, userinfo->sn, + purple_buddy_icons_set_for_user(account, userinfo->bn, g_memdup(args->info.icon.icon, args->info.icon.length), args->info.icon.length, NULL); @@ -2528,9 +2531,10 @@ purple_auth_request(struct name_data *data, char *msg) PurpleAccount *account; PurpleBuddy *buddy; PurpleGroup *group; + const char *bname, *gname; gc = data->gc; - od = gc->proto_data; + od = purple_connection_get_protocol_data(gc); account = purple_connection_get_account(gc); buddy = purple_find_buddy(account, data->name); if (buddy != NULL) @@ -2540,15 +2544,17 @@ purple_auth_request(struct name_data *data, char *msg) if (group != NULL) { + bname = purple_buddy_get_name(buddy); + gname = purple_group_get_name(group); purple_debug_info("oscar", "ssi: adding buddy %s to group %s\n", - buddy->name, group->name); + bname, gname); aim_ssi_sendauthrequest(od, data->name, msg ? msg : _("Please authorize me so I can add you to my buddy list.")); - if (!aim_ssi_itemlist_finditem(od->ssi.local, group->name, buddy->name, AIM_SSI_TYPE_BUDDY)) + if (!aim_ssi_itemlist_finditem(od->ssi.local, gname, bname, AIM_SSI_TYPE_BUDDY)) { - aim_ssi_addbuddy(od, buddy->name, group->name, NULL, purple_buddy_get_alias_only(buddy), NULL, NULL, TRUE); + aim_ssi_addbuddy(od, bname, gname, NULL, purple_buddy_get_alias_only(buddy), NULL, NULL, TRUE); /* Mobile users should always be online */ - if (buddy->name[0] == '+') { + if (bname[0] == '+') { purple_prpl_got_user_status(account, purple_buddy_get_name(buddy), OSCAR_STATUS_ID_AVAILABLE, NULL); @@ -2588,8 +2594,8 @@ purple_auth_sendrequest_menu(PurpleBlistNode *node, gpointer ignored) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); - purple_auth_sendrequest(gc, buddy->name); + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); + purple_auth_sendrequest(gc, purple_buddy_get_name(buddy)); } /* When other people ask you for authorization */ @@ -2598,7 +2604,7 @@ purple_auth_grant(gpointer cbdata) { struct name_data *data = cbdata; PurpleConnection *gc = data->gc; - OscarData *od = gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); aim_ssi_sendauthreply(od, data->name, 0x01, NULL); @@ -2610,7 +2616,7 @@ static void purple_auth_dontgrant(struct name_data *data, char *msg) { PurpleConnection *gc = data->gc; - OscarData *od = gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); aim_ssi_sendauthreply(od, data->name, 0x00, msg ? msg : _("No reason given.")); } @@ -2724,21 +2730,21 @@ incomingim_chan4(OscarData *od, FlapConnection *conn, aim_userinfo_t *userinfo, case 0x06: { /* Someone requested authorization */ if (i >= 6) { struct name_data *data = g_new(struct name_data, 1); - gchar *sn = g_strdup_printf("%u", args->uin); + gchar *bn = g_strdup_printf("%u", args->uin); gchar *reason = NULL; if (msg2[5] != NULL) - reason = purple_plugin_oscar_decode_im_part(account, sn, AIM_CHARSET_CUSTOM, 0x0000, msg2[5], strlen(msg2[5])); + reason = purple_plugin_oscar_decode_im_part(account, bn, AIM_CHARSET_CUSTOM, 0x0000, msg2[5], strlen(msg2[5])); purple_debug_info("oscar", "Received an authorization request from UIN %u\n", args->uin); data->gc = gc; - data->name = sn; + data->name = bn; data->nick = NULL; - purple_account_request_authorization(account, sn, NULL, NULL, - reason, purple_find_buddy(account, sn) != NULL, + purple_account_request_authorization(account, bn, NULL, NULL, + reason, purple_find_buddy(account, bn) != NULL, purple_auth_grant, purple_auth_dontgrant_msgprompt, data); g_free(reason); @@ -2940,7 +2946,7 @@ static int purple_parse_misses(OscarData *od, FlapConnection *conn, FlapFrame *f "You missed %hu messages from %s because they were invalid.", nummissed), nummissed, - userinfo->sn); + userinfo->bn); break; case 1: /* Message too large */ buf = g_strdup_printf( @@ -2949,7 +2955,7 @@ static int purple_parse_misses(OscarData *od, FlapConnection *conn, FlapFrame *f "You missed %hu messages from %s because they were too large.", nummissed), nummissed, - userinfo->sn); + userinfo->bn); break; case 2: /* Rate exceeded */ buf = g_strdup_printf( @@ -2958,7 +2964,7 @@ static int purple_parse_misses(OscarData *od, FlapConnection *conn, FlapFrame *f "You missed %hu messages from %s because the rate limit has been exceeded.", nummissed), nummissed, - userinfo->sn); + userinfo->bn); break; case 3: /* Evil Sender */ buf = g_strdup_printf( @@ -2967,7 +2973,7 @@ static int purple_parse_misses(OscarData *od, FlapConnection *conn, FlapFrame *f "You missed %hu messages from %s because his/her warning level is too high.", nummissed), nummissed, - userinfo->sn); + userinfo->bn); break; case 4: /* Evil Receiver */ buf = g_strdup_printf( @@ -2976,7 +2982,7 @@ static int purple_parse_misses(OscarData *od, FlapConnection *conn, FlapFrame *f "You missed %hu messages from %s because your warning level is too high.", nummissed), nummissed, - userinfo->sn); + userinfo->bn); break; default: buf = g_strdup_printf( @@ -2985,11 +2991,11 @@ static int purple_parse_misses(OscarData *od, FlapConnection *conn, FlapFrame *f "You missed %hu messages from %s for an unknown reason.", nummissed), nummissed, - userinfo->sn); + userinfo->bn); break; } - if (!purple_conv_present_error(userinfo->sn, account, buf)) + if (!purple_conv_present_error(userinfo->bn, account, buf)) purple_notify_error(od->gc, NULL, buf, NULL); g_free(buf); @@ -3107,7 +3113,7 @@ static int purple_parse_genericerr(OscarData *od, FlapConnection *conn, FlapFram static int purple_parse_msgerr(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) { PurpleConnection *gc = od->gc; #ifdef TODOFT - OscarData *od = gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); PurpleXfer *xfer; #endif va_list ap; @@ -3135,7 +3141,7 @@ static int purple_parse_msgerr(OscarData *od, FlapConnection *conn, FlapFrame *f } #endif - /* Data is assumed to be the destination sn */ + /* Data is assumed to be the destination bn */ buf = g_strdup_printf(_("Unable to send message: %s"), (reason < msgerrreasonlen) ? _(msgerrreason[reason]) : _("Unknown reason.")); if (!purple_conv_present_error(data, purple_connection_get_account(gc), buf)) { g_free(buf); @@ -3152,25 +3158,25 @@ static int purple_parse_mtn(OscarData *od, FlapConnection *conn, FlapFrame *fr, PurpleConnection *gc = od->gc; va_list ap; guint16 type1, type2; - char *sn; + char *bn; va_start(ap, fr); type1 = (guint16) va_arg(ap, unsigned int); - sn = va_arg(ap, char *); + bn = va_arg(ap, char *); type2 = (guint16) va_arg(ap, unsigned int); va_end(ap); switch (type2) { case 0x0000: { /* Text has been cleared */ - serv_got_typing_stopped(gc, sn); + serv_got_typing_stopped(gc, bn); } break; case 0x0001: { /* Paused typing */ - serv_got_typing(gc, sn, 0, PURPLE_TYPED); + serv_got_typing(gc, bn, 0, PURPLE_TYPED); } break; case 0x0002: { /* Typing */ - serv_got_typing(gc, sn, 0, PURPLE_TYPING); + serv_got_typing(gc, bn, 0, PURPLE_TYPING); } break; default: { @@ -3178,7 +3184,7 @@ static int purple_parse_mtn(OscarData *od, FlapConnection *conn, FlapFrame *fr, * It looks like iChat sometimes sends typing notification * with type1=0x0001 and type2=0x000f. Not sure why. */ - purple_debug_info("oscar", "Received unknown typing notification message from %s. Type1 is 0x%04x and type2 is 0x%04hx.\n", sn, type1, type2); + purple_debug_info("oscar", "Received unknown typing notification message from %s. Type1 is 0x%04x and type2 is 0x%04hx.\n", bn, type1, type2); } break; } @@ -3239,7 +3245,7 @@ static int purple_parse_userinfo(OscarData *od, FlapConnection *conn, FlapFrame oscar_user_info_append_extra_info(gc, user_info, NULL, userinfo); - if ((userinfo->present & AIM_USERINFO_PRESENT_ONLINESINCE) && !aim_snvalid_sms(userinfo->sn)) { + if ((userinfo->present & AIM_USERINFO_PRESENT_ONLINESINCE) && !oscar_util_valid_name_sms(userinfo->bn)) { /* An SMS contact is always online; its Online Since valid is not useful */ time_t t = userinfo->onlinesince; oscar_user_info_add_pair(user_info, _("Online Since"), purple_date_format_full(localtime(&t))); @@ -3273,11 +3279,11 @@ static int purple_parse_userinfo(OscarData *od, FlapConnection *conn, FlapFrame purple_notify_user_info_add_section_break(user_info); tmp = g_strdup_printf("<a href=\"http://profiles.aim.com/%s\">%s</a>", - purple_normalize(account, userinfo->sn), _("View web profile")); + purple_normalize(account, userinfo->bn), _("View web profile")); purple_notify_user_info_add_pair(user_info, NULL, tmp); g_free(tmp); - purple_notify_userinfo(gc, userinfo->sn, user_info, NULL, NULL); + purple_notify_userinfo(gc, userinfo->bn, user_info, NULL, NULL); purple_notify_user_info_destroy(user_info); return 1; @@ -3299,14 +3305,14 @@ static int purple_got_infoblock(OscarData *od, FlapConnection *conn, FlapFrame * userinfo = va_arg(ap, aim_userinfo_t *); va_end(ap); - b = purple_find_buddy(account, userinfo->sn); + b = purple_find_buddy(account, userinfo->bn); if (b == NULL) return 1; - if (!aim_snvalid_icq(userinfo->sn)) + if (!oscar_util_valid_name_icq(userinfo->bn)) { - if (strcmp(purple_buddy_get_name(b), userinfo->sn) != 0) - serv_got_alias(gc, purple_buddy_get_name(b), userinfo->sn); + if (strcmp(purple_buddy_get_name(b), userinfo->bn) != 0) + serv_got_alias(gc, purple_buddy_get_name(b), userinfo->bn); else serv_got_alias(gc, purple_buddy_get_name(b), NULL); } @@ -3323,7 +3329,7 @@ static int purple_got_infoblock(OscarData *od, FlapConnection *conn, FlapFrame * userinfo->away, userinfo->away_len); g_free(charset); - purple_prpl_got_user_status(account, userinfo->sn, + purple_prpl_got_user_status(account, userinfo->bn, purple_status_get_id(status), "message", message, NULL); g_free(message); @@ -3444,7 +3450,7 @@ static int purple_conv_chat_join(OscarData *od, FlapConnection *conn, FlapFrame return 1; for (i = 0; i < count; i++) - purple_conv_chat_add_user(PURPLE_CONV_CHAT(c->conv), info[i].sn, NULL, PURPLE_CBFLAGS_NONE, TRUE); + purple_conv_chat_add_user(PURPLE_CONV_CHAT(c->conv), info[i].bn, NULL, PURPLE_CBFLAGS_NONE, TRUE); return 1; } @@ -3467,7 +3473,7 @@ static int purple_conv_chat_leave(OscarData *od, FlapConnection *conn, FlapFrame return 1; for (i = 0; i < count; i++) - purple_conv_chat_remove_user(PURPLE_CONV_CHAT(c->conv), info[i].sn, NULL); + purple_conv_chat_remove_user(PURPLE_CONV_CHAT(c->conv), info[i].bn, NULL); return 1; } @@ -3536,7 +3542,7 @@ static int purple_conv_chat_incoming_msg(OscarData *od, FlapConnection *conn, Fl if (utf8 == NULL) /* The conversion failed! */ utf8 = g_strdup(_("[Unable to display a message from this user because it contained invalid characters.]")); - serv_got_chat_in(gc, ccon->id, info->sn, 0, utf8, time((time_t)NULL)); + serv_got_chat_in(gc, ccon->id, info->bn, 0, utf8, time((time_t)NULL)); g_free(utf8); return 1; @@ -3544,11 +3550,15 @@ static int purple_conv_chat_incoming_msg(OscarData *od, FlapConnection *conn, Fl static int purple_email_parseupdate(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) { va_list ap; - PurpleConnection *gc = od->gc; + PurpleConnection *gc; + PurpleAccount *account; struct aim_emailinfo *emailinfo; int havenewmail; char *alertitle, *alerturl; + gc = od->gc; + account = purple_connection_get_account(gc); + va_start(ap, fr); emailinfo = va_arg(ap, struct aim_emailinfo *); havenewmail = va_arg(ap, int); @@ -3556,12 +3566,13 @@ static int purple_email_parseupdate(OscarData *od, FlapConnection *conn, FlapFra alerturl = va_arg(ap, char *); va_end(ap); - if ((emailinfo != NULL) && purple_account_get_check_mail(gc->account)) { - gchar *to = g_strdup_printf("%s%s%s", purple_account_get_username(purple_connection_get_account(gc)), - emailinfo->domain ? "@" : "", - emailinfo->domain ? emailinfo->domain : ""); - if (emailinfo->unread && havenewmail) - purple_notify_emails(gc, emailinfo->nummsgs, FALSE, NULL, NULL, (const char **)&to, (const char **)&emailinfo->url, NULL, NULL); + if (account != NULL && emailinfo != NULL && emailinfo->unread && havenewmail) { + gchar *to = g_strdup_printf("%s%s%s", + purple_account_get_username(account), + emailinfo->domain ? "@" : "", + emailinfo->domain ? emailinfo->domain : ""); + purple_notify_emails(gc, emailinfo->nummsgs, FALSE, NULL, NULL, + (const char **)&to, (const char **)&emailinfo->url, NULL, NULL); g_free(to); } @@ -3574,12 +3585,12 @@ static int purple_email_parseupdate(OscarData *od, FlapConnection *conn, FlapFra static int purple_icon_parseicon(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) { PurpleConnection *gc = od->gc; va_list ap; - char *sn; + char *bn; guint8 iconcsumtype, *iconcsum, *icon; guint16 iconcsumlen, iconlen; va_start(ap, fr); - sn = va_arg(ap, char *); + bn = va_arg(ap, char *); iconcsumtype = va_arg(ap, int); iconcsum = va_arg(ap, guint8 *); iconcsumlen = va_arg(ap, int); @@ -3594,7 +3605,7 @@ static int purple_icon_parseicon(OscarData *od, FlapConnection *conn, FlapFrame if ((iconlen > 0) && (iconlen != 90)) { char *b16 = purple_base16_encode(iconcsum, iconcsumlen); purple_buddy_icons_set_for_user(purple_connection_get_account(gc), - sn, g_memdup(icon, iconlen), iconlen, b16); + bn, g_memdup(icon, iconlen), iconlen, b16); g_free(b16); } @@ -3604,7 +3615,7 @@ static int purple_icon_parseicon(OscarData *od, FlapConnection *conn, FlapFrame static void purple_icons_fetch(PurpleConnection *gc) { - OscarData *od = gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); aim_userinfo_t *userinfo; FlapConnection *conn; @@ -3651,14 +3662,14 @@ purple_icons_fetch(PurpleConnection *gc) static int purple_parse_msgack(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) { va_list ap; guint16 type; - char *sn; + char *bn; va_start(ap, fr); type = (guint16) va_arg(ap, unsigned int); - sn = va_arg(ap, char *); + bn = va_arg(ap, char *); va_end(ap); - purple_debug_info("oscar", "Sent message to %s.\n", sn); + purple_debug_info("oscar", "Sent message to %s.\n", bn); return 1; } @@ -3718,7 +3729,7 @@ static int purple_parse_evilnotify(OscarData *od, FlapConnection *conn, FlapFram userinfo = va_arg(ap, aim_userinfo_t *); va_end(ap); - purple_prpl_got_account_warning_level(account, (userinfo && userinfo->sn) ? userinfo->sn : NULL, (newevil/10.0) + 0.5); + purple_prpl_got_account_warning_level(account, (userinfo && userinfo->bn) ? userinfo->bn : NULL, (newevil/10.0) + 0.5); #endif return 1; @@ -3733,7 +3744,7 @@ static int purple_selfinfo(OscarData *od, FlapConnection *conn, FlapFrame *fr, . info = va_arg(ap, aim_userinfo_t *); va_end(ap); - purple_connection_set_display_name(od->gc, info->sn); + purple_connection_set_display_name(od->gc, info->bn); /* * What's with the + 0.5? @@ -3842,13 +3853,13 @@ static int purple_bosrights(OscarData *od, FlapConnection *conn, FlapFrame *fr, PurpleAccount *account; PurpleStatus *status; PurplePresence *presence; - const char *message, *itmsurl; + const char *username, *message, *itmsurl; char *tmp; va_list ap; guint16 maxpermits, maxdenies; gc = od->gc; - od = (OscarData *)gc->proto_data; + od = purple_connection_get_protocol_data(gc); account = purple_connection_get_account(gc); va_start(ap, fr); @@ -3871,12 +3882,13 @@ static int purple_bosrights(OscarData *od, FlapConnection *conn, FlapFrame *fr, if (purple_account_get_user_info(account) != NULL) serv_set_info(gc, purple_account_get_user_info(account)); - if (!od->icq && strcmp(purple_account_get_username(account), purple_connection_get_display_name(gc)) != 0) + username = purple_account_get_username(account); + if (!od->icq && strcmp(username, purple_connection_get_display_name(gc)) != 0) /* - * Format the screen name for AIM accounts if it's different + * Format the username for AIM accounts if it's different * than what's currently set. */ - oscar_format_screenname(gc, account->username); + oscar_format_username(gc, username); /* Set our available message based on the current status */ status = purple_account_get_active_status(account); @@ -3910,13 +3922,13 @@ static int purple_bosrights(OscarData *od, FlapConnection *conn, FlapFrame *fr, /* * The "if" statement here is a pathetic attempt to not attempt to * connect to the alerts servce (aka email notification) if this - * screen name does not support it. I think mail notification + * username does not support it. I think mail notification * works for @mac.com accounts but does not work for the newer * @anythingelse.com accounts. If that's true then this change * breaks mail notification for @mac.com accounts, but it gets rid * of an annoying error at signon for @anythingelse.com accounts. */ - if ((od->authinfo->email != NULL) && ((strchr(gc->account->username, '@') == NULL))) + if (od->authinfo->email != NULL && strchr(username, '@') == NULL) aim_srv_requestnew(od, SNAC_FAMILY_ALERT); return 1; @@ -3980,9 +3992,9 @@ static int purple_icqinfo(OscarData *od, FlapConnection *conn, FlapFrame *fr, .. user_info = purple_notify_user_info_new(); g_snprintf(who, sizeof(who), "%u", info->uin); - buddy = purple_find_buddy(purple_connection_get_account(gc), who); + buddy = purple_find_buddy(account, who); if (buddy != NULL) - bi = g_hash_table_lookup(od->buddyinfo, purple_normalize(buddy->account, buddy->name)); + bi = g_hash_table_lookup(od->buddyinfo, purple_normalize(account, purple_buddy_get_name(buddy))); else bi = NULL; @@ -3999,7 +4011,7 @@ static int purple_icqinfo(OscarData *od, FlapConnection *conn, FlapFrame *fr, .. } oscar_user_info_convert_and_add(account, user_info, _("First Name"), info->first); oscar_user_info_convert_and_add(account, user_info, _("Last Name"), info->last); - if (info->email && info->email[0] && (utf8 = oscar_utf8_try_convert(gc->account, info->email))) { + if (info->email && info->email[0] && (utf8 = oscar_utf8_try_convert(account, info->email))) { buf = g_strdup_printf("<a href=\"mailto:%s\">%s</a>", utf8, utf8); purple_notify_user_info_add_pair(user_info, _("Email Address"), buf); g_free(buf); @@ -4008,7 +4020,7 @@ static int purple_icqinfo(OscarData *od, FlapConnection *conn, FlapFrame *fr, .. if (info->numaddresses && info->email2) { int i; for (i = 0; i < info->numaddresses; i++) { - if (info->email2[i] && info->email2[i][0] && (utf8 = oscar_utf8_try_convert(gc->account, info->email2[i]))) { + if (info->email2[i] && info->email2[i][0] && (utf8 = oscar_utf8_try_convert(account, info->email2[i]))) { buf = g_strdup_printf("<a href=\"mailto:%s\">%s</a>", utf8, utf8); purple_notify_user_info_add_pair(user_info, _("Email Address"), buf); g_free(buf); @@ -4043,7 +4055,7 @@ static int purple_icqinfo(OscarData *od, FlapConnection *conn, FlapFrame *fr, .. snprintf(age, sizeof(age), "%hhd", info->age); purple_notify_user_info_add_pair(user_info, _("Age"), age); } - if (info->personalwebpage && info->personalwebpage[0] && (utf8 = oscar_utf8_try_convert(gc->account, info->personalwebpage))) { + if (info->personalwebpage && info->personalwebpage[0] && (utf8 = oscar_utf8_try_convert(account, info->personalwebpage))) { buf = g_strdup_printf("<a href=\"%s\">%s</a>", utf8, utf8); purple_notify_user_info_add_pair(user_info, _("Personal Web Page"), buf); g_free(buf); @@ -4079,7 +4091,7 @@ static int purple_icqinfo(OscarData *od, FlapConnection *conn, FlapFrame *fr, .. oscar_user_info_convert_and_add(account, user_info, _("Division"), info->workdivision); oscar_user_info_convert_and_add(account, user_info, _("Position"), info->workposition); - if (info->workwebpage && info->workwebpage[0] && (utf8 = oscar_utf8_try_convert(gc->account, info->workwebpage))) { + if (info->workwebpage && info->workwebpage[0] && (utf8 = oscar_utf8_try_convert(account, info->workwebpage))) { char *webpage = g_strdup_printf("<a href=\"%s\">%s</a>", utf8, utf8); purple_notify_user_info_add_pair(user_info, _("Web Page"), webpage); g_free(webpage); @@ -4113,7 +4125,7 @@ static int purple_icqalias(OscarData *od, FlapConnection *conn, FlapFrame *fr, . if (info->uin && info->nick && info->nick[0] && (utf8 = oscar_utf8_try_convert(account, info->nick))) { g_snprintf(who, sizeof(who), "%u", info->uin); serv_got_alias(gc, who, utf8); - if ((b = purple_find_buddy(gc->account, who))) { + if ((b = purple_find_buddy(account, who))) { purple_blist_node_set_string((PurpleBlistNode*)b, "servernick", utf8); } g_free(utf8); @@ -4243,7 +4255,7 @@ static int purple_info_change(OscarData *od, FlapConnection *conn, FlapFrame *fr PurpleConnection *gc = od->gc; va_list ap; guint16 perms, err; - char *url, *sn, *email; + char *url, *bn, *email; int change; va_start(ap, fr); @@ -4251,15 +4263,15 @@ static int purple_info_change(OscarData *od, FlapConnection *conn, FlapFrame *fr perms = (guint16) va_arg(ap, unsigned int); err = (guint16) va_arg(ap, unsigned int); url = va_arg(ap, char *); - sn = va_arg(ap, char *); + bn = va_arg(ap, char *); email = va_arg(ap, char *); va_end(ap); purple_debug_misc("oscar", - "account info: because of %s, perms=0x%04x, err=0x%04x, url=%s, sn=%s, email=%s\n", + "account info: because of %s, perms=0x%04x, err=0x%04x, url=%s, bn=%s, email=%s\n", change ? "change" : "request", perms, err, (url != NULL) ? url : "(null)", - (sn != NULL) ? sn : "(null)", + (bn != NULL) ? bn : "(null)", (email != NULL) ? email : "(null)"); if ((err > 0) && (url != NULL)) { @@ -4301,7 +4313,7 @@ oscar_keepalive(PurpleConnection *gc) OscarData *od; FlapConnection *conn; - od = (OscarData *)gc->proto_data; + od = purple_connection_get_protocol_data(gc); conn = flap_connection_getbytype(od, SNAC_FAMILY_LOCATE); if (conn != NULL) flap_connection_send_keepalive(od, conn); @@ -4313,7 +4325,7 @@ oscar_send_typing(PurpleConnection *gc, const char *name, PurpleTypingState stat OscarData *od; PeerConnection *conn; - od = (OscarData *)gc->proto_data; + od = purple_connection_get_protocol_data(gc); conn = peer_connection_find_by_type(od, name, OSCAR_CAPABILITY_DIRECTIM); if ((conn != NULL) && (conn->ready)) @@ -4323,7 +4335,7 @@ oscar_send_typing(PurpleConnection *gc, const char *name, PurpleTypingState stat else { /* Don't send if this turkey is in our deny list */ GSList *list; - for (list=gc->account->deny; (list && aim_sncmp(name, list->data)); list=list->next); + for (list=gc->account->deny; (list && oscar_util_name_compare(name, list->data)); list=list->next); if (!list) { struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, purple_normalize(gc->account, name)); if (bi && bi->typingnot) { @@ -4409,7 +4421,7 @@ purple_odc_send_im(PeerConnection *conn, const char *message, PurpleMessageFlags /* Convert the message to a good encoding */ purple_plugin_oscar_convert_to_best_encoding(conn->od->gc, - conn->sn, msg->str, &tmp, &tmplen, &charset, &charsubset); + conn->bn, msg->str, &tmp, &tmplen, &charset, &charsubset); g_string_free(msg, TRUE); msg = g_string_new_len(tmp, tmplen); g_free(tmp); @@ -4435,11 +4447,11 @@ oscar_send_im(PurpleConnection *gc, const char *name, const char *message, Purpl char *tmp1, *tmp2; gboolean is_sms, is_html; - od = (OscarData *)gc->proto_data; + od = purple_connection_get_protocol_data(gc); account = purple_connection_get_account(gc); ret = 0; - is_sms = aim_snvalid_sms(name); + is_sms = oscar_util_valid_name_sms(name); if (od->icq && is_sms) { /* @@ -4478,7 +4490,7 @@ oscar_send_im(PurpleConnection *gc, const char *name, const char *message, Purpl "You must be Direct Connected to send IM Images."), PURPLE_MESSAGE_ERROR, time(NULL)); - buddy = purple_find_buddy(gc->account, name); + buddy = purple_find_buddy(account, name); bi = g_hash_table_lookup(od->buddyinfo, purple_normalize(account, name)); if (!bi) { @@ -4553,17 +4565,17 @@ oscar_send_im(PurpleConnection *gc, const char *name, const char *message, Purpl purple_imgstore_unref(img); } - args.destsn = name; + args.destbn = name; /* * If we're IMing an SMS user or an ICQ user from an ICQ account, then strip HTML. */ - if (aim_snvalid_sms(name)) { + if (oscar_util_valid_name_sms(name)) { /* Messaging an SMS (mobile) user */ tmp2 = purple_markup_strip_html(tmp1); is_html = FALSE; - } else if (aim_snvalid_icq(purple_account_get_username(account))) { - if (aim_snvalid_icq(name)) { + } else if (oscar_util_valid_name_icq(purple_account_get_username(account))) { + if (oscar_util_valid_name_icq(name)) { /* From ICQ to ICQ */ tmp2 = purple_markup_strip_html(tmp1); is_html = FALSE; @@ -4623,9 +4635,9 @@ oscar_send_im(PurpleConnection *gc, const char *name, const char *message, Purpl * AIM users can only request AIM info. */ void oscar_get_info(PurpleConnection *gc, const char *name) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); - if (od->icq && aim_snvalid_icq(name)) + if (od->icq && oscar_util_valid_name_icq(name)) aim_icq_getallinfo(od, name); else aim_locate_getinfoshort(od, name, 0x00000003); @@ -4635,14 +4647,14 @@ void oscar_get_info(PurpleConnection *gc, const char *name) { static void oscar_set_dir(PurpleConnection *gc, const char *first, const char *middle, const char *last, const char *maiden, const char *city, const char *state, const char *country, int web) { /* XXX - some of these things are wrong, but i'm lazy */ - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); aim_locate_setdirinfo(od, first, middle, last, maiden, NULL, NULL, city, state, NULL, 0, web); } #endif void oscar_set_idle(PurpleConnection *gc, int time) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); aim_srv_setidle(od, time); } @@ -4688,7 +4700,7 @@ oscar_set_extendedstatus(PurpleConnection *gc) const gchar *status_id; guint32 data = 0x00000000; - od = gc->proto_data; + od = purple_connection_get_protocol_data(gc); account = purple_connection_get_account(gc); status = purple_account_get_active_status(account); status_id = purple_status_get_id(status); @@ -4722,7 +4734,7 @@ oscar_set_info_and_status(PurpleAccount *account, gboolean setinfo, const char * gboolean setstatus, PurpleStatus *status) { PurpleConnection *gc = purple_account_get_connection(account); - OscarData *od = gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); PurpleStatusType *status_type; PurpleStatusPrimitive primitive; @@ -4854,7 +4866,7 @@ oscar_set_status_icq(PurpleAccount *account, PurpleStatus *status) OscarData *od = NULL; if (gc) - od = (OscarData *)gc->proto_data; + od = purple_connection_get_protocol_data(gc); if (!od) return; @@ -4884,14 +4896,14 @@ oscar_set_status(PurpleAccount *account, PurpleStatus *status) oscar_set_info_and_status(account, FALSE, NULL, TRUE, status); /* Set the ICQ status for ICQ accounts only */ - if (aim_snvalid_icq(purple_account_get_username(account))) + if (oscar_util_valid_name_icq(purple_account_get_username(account))) oscar_set_status_icq(account, status); } #ifdef CRAZY_WARN void oscar_warn(PurpleConnection *gc, const char *name, gboolean anonymous) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); aim_im_warn(od, od->conn, name, anonymous ? AIM_WARN_ANON : 0); } #endif @@ -4900,14 +4912,17 @@ void oscar_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { OscarData *od; PurpleAccount *account; + const char *bname, *gname; - od = (OscarData *)gc->proto_data; + od = purple_connection_get_protocol_data(gc); account = purple_connection_get_account(gc); + bname = purple_buddy_get_name(buddy); + gname = purple_group_get_name(group); - if (!aim_snvalid(buddy->name)) { + if (!oscar_util_valid_name(bname)) { gchar *buf; - buf = g_strdup_printf(_("Could not add the buddy %s because the username is invalid. Usernames must be a valid email address, or start with a letter and contain only letters, numbers and spaces, or contain only numbers."), buddy->name); - if (!purple_conv_present_error(buddy->name, account, buf)) + buf = g_strdup_printf(_("Could not add the buddy %s because the username is invalid. Usernames must be a valid email address, or start with a letter and contain only letters, numbers and spaces, or contain only numbers."), bname); + if (!purple_conv_present_error(bname, account, buf)) purple_notify_error(gc, NULL, _("Unable to Add"), buf); g_free(buf); @@ -4917,39 +4932,40 @@ oscar_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { return; } - if ((od->ssi.received_data) && !(aim_ssi_itemlist_finditem(od->ssi.local, group->name, buddy->name, AIM_SSI_TYPE_BUDDY))) { + if ((od->ssi.received_data) && !(aim_ssi_itemlist_finditem(od->ssi.local, gname, bname, AIM_SSI_TYPE_BUDDY))) { purple_debug_info("oscar", - "ssi: adding buddy %s to group %s\n", buddy->name, group->name); - aim_ssi_addbuddy(od, buddy->name, group->name, NULL, purple_buddy_get_alias_only(buddy), NULL, NULL, 0); + "ssi: adding buddy %s to group %s\n", bname, gname); + aim_ssi_addbuddy(od, bname, gname, NULL, purple_buddy_get_alias_only(buddy), NULL, NULL, 0); /* Mobile users should always be online */ - if (buddy->name[0] == '+') { + if (bname[0] == '+') { purple_prpl_got_user_status(account, - purple_buddy_get_name(buddy), - OSCAR_STATUS_ID_AVAILABLE, NULL); + bname, OSCAR_STATUS_ID_AVAILABLE, NULL); purple_prpl_got_user_status(account, - purple_buddy_get_name(buddy), - OSCAR_STATUS_ID_MOBILE, NULL); + bname, OSCAR_STATUS_ID_MOBILE, NULL); } } /* XXX - Should this be done from AIM accounts, as well? */ if (od->icq) - aim_icq_getalias(od, buddy->name); + aim_icq_getalias(od, bname); } void oscar_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); if (od->ssi.received_data) { + const char *gname = purple_group_get_name(group); + const char *bname = purple_buddy_get_name(buddy); purple_debug_info("oscar", - "ssi: deleting buddy %s from group %s\n", buddy->name, group->name); - aim_ssi_delbuddy(od, buddy->name, group->name); + "ssi: deleting buddy %s from group %s\n", bname, gname); + aim_ssi_delbuddy(od, bname, gname); } } void oscar_move_buddy(PurpleConnection *gc, const char *name, const char *old_group, const char *new_group) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); + if (od->ssi.received_data && strcmp(old_group, new_group)) { purple_debug_info("oscar", "ssi: moving buddy %s from group %s to group %s\n", name, old_group, new_group); @@ -4958,7 +4974,8 @@ void oscar_move_buddy(PurpleConnection *gc, const char *name, const char *old_gr } void oscar_alias_buddy(PurpleConnection *gc, const char *name, const char *alias) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); + if (od->ssi.received_data) { char *gname = aim_ssi_itemlist_findparentname(od->ssi.local, name); if (gname) { @@ -4973,10 +4990,11 @@ void oscar_alias_buddy(PurpleConnection *gc, const char *name, const char *alias * FYI, the OSCAR SSI code removes empty groups automatically. */ void oscar_rename_group(PurpleConnection *gc, const char *old_name, PurpleGroup *group, GList *moved_buddies) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); if (od->ssi.received_data) { - if (aim_ssi_itemlist_finditem(od->ssi.local, group->name, NULL, AIM_SSI_TYPE_GROUP)) { + const char *gname = purple_group_get_name(group); + if (aim_ssi_itemlist_finditem(od->ssi.local, gname, NULL, AIM_SSI_TYPE_GROUP)) { GList *cur, *groups = NULL; PurpleAccount *account = purple_connection_get_account(gc); @@ -4986,25 +5004,25 @@ void oscar_rename_group(PurpleConnection *gc, const char *old_name, PurpleGroup /* node is PurpleBuddy, parent is a PurpleContact. * We must go two levels up to get the Group */ groups = g_list_append(groups, - node->parent->parent); + purple_buddy_get_group((PurpleBuddy*)node)); } purple_account_remove_buddies(account, moved_buddies, groups); purple_account_add_buddies(account, moved_buddies); g_list_free(groups); purple_debug_info("oscar", - "ssi: moved all buddies from group %s to %s\n", old_name, group->name); + "ssi: moved all buddies from group %s to %s\n", old_name, gname); } else { - aim_ssi_rename_group(od, old_name, group->name); + aim_ssi_rename_group(od, old_name, gname); purple_debug_info("oscar", - "ssi: renamed group %s to %s\n", old_name, group->name); + "ssi: renamed group %s to %s\n", old_name, gname); } } } void oscar_remove_group(PurpleConnection *gc, PurpleGroup *group) { - aim_ssi_delgroup(gc->proto_data, group->name); + aim_ssi_delgroup(purple_connection_get_protocol_data(gc), purple_group_get_name(group)); } static gboolean purple_ssi_rerequestdata(gpointer data) { @@ -5085,7 +5103,7 @@ static int purple_ssi_parselist(OscarData *od, FlapConnection *conn, FlapFrame * guint32 timestamp; gc = od->gc; - od = gc->proto_data; + od = purple_connection_get_protocol_data(gc); account = purple_connection_get_account(gc); va_start(ap, fr); @@ -5113,33 +5131,44 @@ static int purple_ssi_parselist(OscarData *od, FlapConnection *conn, FlapFrame * /* Buddies */ cur = NULL; if ((blist = purple_get_blist()) != NULL) { - for (gnode = blist->root; gnode; gnode = gnode->next) { + for (gnode = purple_blist_get_root(); gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) { + const char *gname; if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; g = (PurpleGroup *)gnode; - for (cnode = gnode->child; cnode; cnode = cnode->next) { + gname = purple_group_get_name(g); + for (cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) { if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for (bnode = cnode->child; bnode; bnode = bnode->next) { + for (bnode = purple_blist_node_get_first_child(cnode); + bnode; + bnode = purple_blist_node_get_sibling_next(bnode)) { + const char *bname; if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; b = (PurpleBuddy *)bnode; - if (b->account == gc->account) { - if (aim_ssi_itemlist_exists(od->ssi.local, b->name)) { + bname = purple_buddy_get_name(b); + if (purple_buddy_get_account(b) == account) { + if (aim_ssi_itemlist_exists(od->ssi.local, bname)) { /* If the buddy is an ICQ user then load his nickname */ const char *servernick = purple_blist_node_get_string((PurpleBlistNode*)b, "servernick"); char *alias; + const char *balias; if (servernick) - serv_got_alias(gc, b->name, servernick); + serv_got_alias(gc, bname, servernick); /* Store local alias on server */ - alias = aim_ssi_getalias(od->ssi.local, g->name, b->name); - if (!alias && b->alias && strlen(b->alias)) - aim_ssi_aliasbuddy(od, g->name, b->name, b->alias); + alias = aim_ssi_getalias(od->ssi.local, gname, bname); + balias = purple_buddy_get_local_buddy_alias(b); + if (!alias && balias && *balias) + aim_ssi_aliasbuddy(od, gname, bname, balias); g_free(alias); } else { purple_debug_info("oscar", - "ssi: removing buddy %s from local list\n", b->name); + "ssi: removing buddy %s from local list\n", bname); /* We can't actually remove now because it will screw up our looping */ cur = g_slist_prepend(cur, b); } @@ -5156,8 +5185,8 @@ static int purple_ssi_parselist(OscarData *od, FlapConnection *conn, FlapFrame * } /* Permit list */ - if (gc->account->permit) { - next = gc->account->permit; + if (account->permit) { + next = account->permit; while (next != NULL) { cur = next; next = next->next; @@ -5170,8 +5199,8 @@ static int purple_ssi_parselist(OscarData *od, FlapConnection *conn, FlapFrame * } /* Deny list */ - if (gc->account->deny) { - next = gc->account->deny; + if (account->deny) { + next = account->deny; while (next != NULL) { cur = next; next = next->next; @@ -5215,7 +5244,7 @@ static int purple_ssi_parselist(OscarData *od, FlapConnection *conn, FlapFrame * if (g_utf8_validate(gname, -1, NULL)) gname_utf8 = g_strdup(gname); else - gname_utf8 = oscar_utf8_try_convert(gc->account, gname); + gname_utf8 = oscar_utf8_try_convert(account, gname); } else gname_utf8 = NULL; @@ -5235,18 +5264,18 @@ static int purple_ssi_parselist(OscarData *od, FlapConnection *conn, FlapFrame * } else alias_utf8 = NULL; - b = purple_find_buddy_in_group(gc->account, curitem->name, g); + b = purple_find_buddy_in_group(account, curitem->name, g); if (b) { /* Get server stored alias */ purple_blist_alias_buddy(b, alias_utf8); } else { - b = purple_buddy_new(gc->account, curitem->name, alias_utf8); + b = purple_buddy_new(account, curitem->name, alias_utf8); purple_debug_info("oscar", - "ssi: adding buddy %s to group %s to local list\n", curitem->name, g->name); + "ssi: adding buddy %s to group %s to local list\n", curitem->name, gname); purple_blist_add_buddy(b, NULL, g, NULL); } - if (!aim_sncmp(curitem->name, account->username)) { + if (!oscar_util_name_compare(curitem->name, purple_account_get_username(account))) { char *comment = aim_ssi_getcomment(od->ssi.local, gname, curitem->name); if (comment != NULL) { @@ -5256,7 +5285,7 @@ static int purple_ssi_parselist(OscarData *od, FlapConnection *conn, FlapFrame * } /* Mobile users should always be online */ - if (b->name[0] == '+') { + if (curitem->name[0] == '+') { purple_prpl_got_user_status(account, purple_buddy_get_name(b), OSCAR_STATUS_ID_AVAILABLE, NULL); @@ -5279,7 +5308,7 @@ static int purple_ssi_parselist(OscarData *od, FlapConnection *conn, FlapFrame * if (g_utf8_validate(gname, -1, NULL)) gname_utf8 = g_strdup(gname); else - gname_utf8 = oscar_utf8_try_convert(gc->account, gname); + gname_utf8 = oscar_utf8_try_convert(account, gname); } else gname_utf8 = NULL; @@ -5294,7 +5323,7 @@ static int purple_ssi_parselist(OscarData *od, FlapConnection *conn, FlapFrame * if (curitem->name) { /* if (!find_permdeny_by_name(gc->permit, curitem->name)) { AAA */ GSList *list; - for (list=account->permit; (list && aim_sncmp(curitem->name, list->data)); list=list->next); + for (list=account->permit; (list && oscar_util_name_compare(curitem->name, list->data)); list=list->next); if (!list) { purple_debug_info("oscar", "ssi: adding permit buddy %s to local list\n", curitem->name); @@ -5306,7 +5335,7 @@ static int purple_ssi_parselist(OscarData *od, FlapConnection *conn, FlapFrame * case 0x0003: { /* Deny buddy */ if (curitem->name) { GSList *list; - for (list=account->deny; (list && aim_sncmp(curitem->name, list->data)); list=list->next); + for (list=account->deny; (list && oscar_util_name_compare(curitem->name, list->data)); list=list->next); if (!list) { purple_debug_info("oscar", "ssi: adding deny buddy %s to local list\n", curitem->name); @@ -5323,7 +5352,7 @@ static int purple_ssi_parselist(OscarData *od, FlapConnection *conn, FlapFrame * "ssi: changing permdeny from %d to %hhu\n", account->perm_deny, permdeny); account->perm_deny = permdeny; if (od->icq && account->perm_deny == PURPLE_PRIVACY_ALLOW_USERS) { - purple_presence_set_status_active(account->presence, OSCAR_STATUS_ID_INVISIBLE, TRUE); + purple_presence_set_status_active(purple_account_get_presence(account), OSCAR_STATUS_ID_INVISIBLE, TRUE); } } } @@ -5469,13 +5498,11 @@ purple_ssi_parseaddmod(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) purple_blist_add_buddy(b, NULL, g, NULL); /* Mobile users should always be online */ - if (b->name[0] == '+') { + if (name[0] == '+') { purple_prpl_got_user_status(account, - purple_buddy_get_name(b), - OSCAR_STATUS_ID_AVAILABLE, NULL); + name, OSCAR_STATUS_ID_AVAILABLE, NULL); purple_prpl_got_user_status(account, - purple_buddy_get_name(b), - OSCAR_STATUS_ID_MOBILE, NULL); + name, OSCAR_STATUS_ID_MOBILE, NULL); } } @@ -5498,36 +5525,36 @@ purple_ssi_parseaddmod(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) static int purple_ssi_authgiven(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) { PurpleConnection *gc = od->gc; va_list ap; - char *sn, *msg; + char *bn, *msg; gchar *dialog_msg, *nombre; struct name_data *data; PurpleBuddy *buddy; va_start(ap, fr); - sn = va_arg(ap, char *); + bn = va_arg(ap, char *); msg = va_arg(ap, char *); va_end(ap); purple_debug_info("oscar", - "ssi: %s has given you permission to add him to your buddy list\n", sn); + "ssi: %s has given you permission to add him to your buddy list\n", bn); - buddy = purple_find_buddy(gc->account, sn); + buddy = purple_find_buddy(purple_connection_get_account(gc), bn); if (buddy && (purple_buddy_get_alias_only(buddy))) - nombre = g_strdup_printf("%s (%s)", sn, purple_buddy_get_alias_only(buddy)); + nombre = g_strdup_printf("%s (%s)", bn, purple_buddy_get_alias_only(buddy)); else - nombre = g_strdup(sn); + nombre = g_strdup(bn); dialog_msg = g_strdup_printf(_("The user %s has given you permission to add him or her to your buddy list. Do you want to add this user?"), nombre); g_free(nombre); data = g_new(struct name_data, 1); data->gc = gc; - data->name = g_strdup(sn); + data->name = g_strdup(bn); data->nick = (buddy ? g_strdup(purple_buddy_get_alias_only(buddy)) : NULL); purple_request_yes_no(gc, NULL, _("Authorization Given"), dialog_msg, PURPLE_DEFAULT_ACTION_NONE, - purple_connection_get_account(gc), sn, NULL, + purple_connection_get_account(gc), bn, NULL, data, G_CALLBACK(purple_icq_buddyadd), G_CALLBACK(oscar_free_name_data)); @@ -5539,7 +5566,7 @@ static int purple_ssi_authgiven(OscarData *od, FlapConnection *conn, FlapFrame * static int purple_ssi_authrequest(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) { PurpleConnection *gc = od->gc; va_list ap; - char *sn; + char *bn; char *msg; PurpleAccount *account = purple_connection_get_account(gc); gchar *reason = NULL; @@ -5547,24 +5574,24 @@ static int purple_ssi_authrequest(OscarData *od, FlapConnection *conn, FlapFrame PurpleBuddy *buddy; va_start(ap, fr); - sn = va_arg(ap, char *); + bn = va_arg(ap, char *); msg = va_arg(ap, char *); va_end(ap); purple_debug_info("oscar", - "ssi: received authorization request from %s\n", sn); + "ssi: received authorization request from %s\n", bn); - buddy = purple_find_buddy(account, sn); + buddy = purple_find_buddy(account, bn); if (msg != NULL) - reason = purple_plugin_oscar_decode_im_part(account, sn, AIM_CHARSET_CUSTOM, 0x0000, msg, strlen(msg)); + reason = purple_plugin_oscar_decode_im_part(account, bn, AIM_CHARSET_CUSTOM, 0x0000, msg, strlen(msg)); data = g_new(struct name_data, 1); data->gc = gc; - data->name = g_strdup(sn); + data->name = g_strdup(bn); data->nick = (buddy ? g_strdup(purple_buddy_get_alias_only(buddy)) : NULL); - purple_account_request_authorization(account, sn, NULL, + purple_account_request_authorization(account, bn, NULL, (buddy ? purple_buddy_get_alias_only(buddy) : NULL), reason, buddy != NULL, purple_auth_grant, purple_auth_dontgrant_msgprompt, data); @@ -5576,25 +5603,25 @@ static int purple_ssi_authrequest(OscarData *od, FlapConnection *conn, FlapFrame static int purple_ssi_authreply(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) { PurpleConnection *gc = od->gc; va_list ap; - char *sn, *msg; + char *bn, *msg; gchar *dialog_msg, *nombre; guint8 reply; PurpleBuddy *buddy; va_start(ap, fr); - sn = va_arg(ap, char *); + bn = va_arg(ap, char *); reply = (guint8)va_arg(ap, int); msg = va_arg(ap, char *); va_end(ap); purple_debug_info("oscar", - "ssi: received authorization reply from %s. Reply is 0x%04hhx\n", sn, reply); + "ssi: received authorization reply from %s. Reply is 0x%04hhx\n", bn, reply); - buddy = purple_find_buddy(gc->account, sn); + buddy = purple_find_buddy(purple_connection_get_account(gc), bn); if (buddy && (purple_buddy_get_alias_only(buddy))) - nombre = g_strdup_printf("%s (%s)", sn, purple_buddy_get_alias_only(buddy)); + nombre = g_strdup_printf("%s (%s)", bn, purple_buddy_get_alias_only(buddy)); else - nombre = g_strdup(sn); + nombre = g_strdup(bn); if (reply) { /* Granted */ @@ -5613,17 +5640,19 @@ static int purple_ssi_authreply(OscarData *od, FlapConnection *conn, FlapFrame * static int purple_ssi_gotadded(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) { PurpleConnection *gc = od->gc; + PurpleAccount *account = purple_connection_get_account(gc); va_list ap; - char *sn; + char *bn; PurpleBuddy *buddy; va_start(ap, fr); - sn = va_arg(ap, char *); + bn = va_arg(ap, char *); va_end(ap); - buddy = purple_find_buddy(gc->account, sn); - purple_debug_info("oscar", "ssi: %s added you to their buddy list\n", sn); - purple_account_notify_added(gc->account, sn, NULL, (buddy ? purple_buddy_get_alias_only(buddy) : NULL), NULL); + buddy = purple_find_buddy(account, bn); + purple_debug_info("oscar", "ssi: %s added you to their buddy list\n", bn); + purple_account_notify_added(account, bn, NULL, + (buddy ? purple_buddy_get_alias_only(buddy) : NULL), NULL); return 1; } @@ -5672,7 +5701,7 @@ oscar_get_chat_name(GHashTable *data) void oscar_join_chat(PurpleConnection *gc, GHashTable *data) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); FlapConnection *conn; char *name, *exchange; int exchange_int; @@ -5707,7 +5736,7 @@ oscar_join_chat(PurpleConnection *gc, GHashTable *data) void oscar_chat_invite(PurpleConnection *gc, int id, const char *message, const char *name) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); struct chat_connection *ccon = find_oscar_chat(gc, id); if (ccon == NULL) @@ -5727,14 +5756,16 @@ oscar_chat_leave(PurpleConnection *gc, int id) g_return_if_fail(conv != NULL); - purple_debug_info("oscar", "Leaving chat room %s\n", conv->name); + purple_debug_info("oscar", "Leaving chat room %s\n", + purple_conversation_get_name(conv)); cc = find_oscar_chat(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(conv))); oscar_chat_kill(gc, cc); } -int oscar_send_chat(PurpleConnection *gc, int id, const char *message, PurpleMessageFlags flags) { - OscarData *od = (OscarData *)gc->proto_data; +int oscar_send_chat(PurpleConnection *gc, int id, const char *message, PurpleMessageFlags flags) +{ + OscarData *od = purple_connection_get_protocol_data(gc); PurpleConversation *conv = NULL; struct chat_connection *c = NULL; char *buf, *buf2, *buf3; @@ -5801,30 +5832,32 @@ int oscar_send_chat(PurpleConnection *gc, int id, const char *message, PurpleMes const char *oscar_list_icon_icq(PurpleAccount *a, PurpleBuddy *b) { - if ((b == NULL) || (b->name == NULL) || aim_snvalid_sms(b->name)) + const char *name = b ? purple_buddy_get_name(b) : NULL; + if ((b == NULL) || (name == NULL) || oscar_util_valid_name_sms(name)) { - if (a == NULL || aim_snvalid_icq(purple_account_get_username(a))) + if (a == NULL || oscar_util_valid_name_icq(purple_account_get_username(a))) return "icq"; else return "aim"; } - if (aim_snvalid_icq(b->name)) + if (oscar_util_valid_name_icq(name)) return "icq"; return "aim"; } const char *oscar_list_icon_aim(PurpleAccount *a, PurpleBuddy *b) { - if ((b == NULL) || (b->name == NULL) || aim_snvalid_sms(b->name)) + const char *name = b ? purple_buddy_get_name(b) : NULL; + if ((b == NULL) || (name == NULL) || oscar_util_valid_name_sms(name)) { - if (a != NULL && aim_snvalid_icq(purple_account_get_username(a))) + if (a != NULL && oscar_util_valid_name_icq(purple_account_get_username(a))) return "icq"; else return "aim"; } - if (aim_snvalid_icq(b->name)) + if (oscar_util_valid_name_icq(name)) return "icq"; return "aim"; } @@ -5838,14 +5871,16 @@ const char *oscar_list_emblem(PurpleBuddy *b) PurpleStatus *status; const char *status_id; aim_userinfo_t *userinfo = NULL; + const char *name; - account = b->account; + account = purple_buddy_get_account(b); + name = purple_buddy_get_name(b); if (account != NULL) - gc = account->gc; + gc = purple_account_get_connection(account); if (gc != NULL) - od = gc->proto_data; + od = purple_connection_get_protocol_data(gc); if (od != NULL) - userinfo = aim_locate_finduserinfo(od, b->name); + userinfo = aim_locate_finduserinfo(od, name); presence = purple_buddy_get_presence(b); status = purple_presence_get_active_status(presence); @@ -5853,9 +5888,9 @@ const char *oscar_list_emblem(PurpleBuddy *b) if (purple_presence_is_online(presence) == FALSE) { char *gname; - if ((b->name) && (od) && (od->ssi.received_data) && - (gname = aim_ssi_itemlist_findparentname(od->ssi.local, b->name)) && - (aim_ssi_waitingforauth(od->ssi.local, gname, b->name))) { + if ((name) && (od) && (od->ssi.received_data) && + (gname = aim_ssi_itemlist_findparentname(od->ssi.local, name)) && + (aim_ssi_waitingforauth(od->ssi.local, gname, name))) { return "not-authorized"; } } @@ -5878,15 +5913,17 @@ const char *oscar_list_emblem(PurpleBuddy *b) void oscar_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full) { PurpleConnection *gc; + PurpleAccount *account; OscarData *od; aim_userinfo_t *userinfo; if (!PURPLE_BUDDY_IS_ONLINE(b)) return; - gc = b->account->gc; - od = gc->proto_data; - userinfo = aim_locate_finduserinfo(od, b->name); + account = purple_buddy_get_account(b); + gc = purple_account_get_connection(account); + od = purple_connection_get_protocol_data(gc); + userinfo = aim_locate_finduserinfo(od, purple_buddy_get_name(b)); oscar_user_info_append_status(gc, user_info, b, userinfo, /* strip_html_tags */ TRUE); @@ -5907,15 +5944,16 @@ char *oscar_status_text(PurpleBuddy *b) gc = purple_account_get_connection(purple_buddy_get_account(b)); account = purple_connection_get_account(gc); - od = gc->proto_data; + od = purple_connection_get_protocol_data(gc); presence = purple_buddy_get_presence(b); status = purple_presence_get_active_status(presence); id = purple_status_get_id(status); if ((od != NULL) && !purple_presence_is_online(presence)) { - char *gname = aim_ssi_itemlist_findparentname(od->ssi.local, b->name); - if (aim_ssi_waitingforauth(od->ssi.local, gname, b->name)) + const char *name = purple_buddy_get_name(b); + char *gname = aim_ssi_itemlist_findparentname(od->ssi.local, name); + if (aim_ssi_waitingforauth(od->ssi.local, gname, name)) ret = g_strdup(_("Not Authorized")); else ret = g_strdup(_("Offline")); @@ -6006,7 +6044,7 @@ static int oscar_icon_req(OscarData *od, FlapConnection *conn, FlapFrame *fr, .. void oscar_set_permit_deny(PurpleConnection *gc) { PurpleAccount *account = purple_connection_get_account(gc); - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); if (od->ssi.received_data) { switch (account->perm_deny) { @@ -6033,28 +6071,28 @@ void oscar_set_permit_deny(PurpleConnection *gc) { } void oscar_add_permit(PurpleConnection *gc, const char *who) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); purple_debug_info("oscar", "ssi: About to add a permit\n"); if (od->ssi.received_data) aim_ssi_addpermit(od, who); } void oscar_add_deny(PurpleConnection *gc, const char *who) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); purple_debug_info("oscar", "ssi: About to add a deny\n"); if (od->ssi.received_data) aim_ssi_adddeny(od, who); } void oscar_rem_permit(PurpleConnection *gc, const char *who) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); purple_debug_info("oscar", "ssi: About to delete a permit\n"); if (od->ssi.received_data) aim_ssi_delpermit(od, who); } void oscar_rem_deny(PurpleConnection *gc, const char *who) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); purple_debug_info("oscar", "ssi: About to delete a deny\n"); if (od->ssi.received_data) aim_ssi_deldeny(od, who); @@ -6070,7 +6108,7 @@ oscar_status_types(PurpleAccount *account) g_return_val_if_fail(account != NULL, NULL); /* Used to flag some statuses as "user settable" or not */ - is_icq = aim_snvalid_icq(purple_account_get_username(account)); + is_icq = oscar_util_valid_name_icq(purple_account_get_username(account)); /* Common status types */ /* Really the available message should only be settable for AIM accounts */ @@ -6136,24 +6174,33 @@ oscar_status_types(PurpleAccount *account) } static void oscar_ssi_editcomment(struct name_data *data, const char *text) { - PurpleConnection *gc = data->gc; - OscarData *od = gc->proto_data; + PurpleConnection *gc; + PurpleAccount *account; + OscarData *od; PurpleBuddy *b; PurpleGroup *g; + const char *username; - if (!(b = purple_find_buddy(purple_connection_get_account(data->gc), data->name))) { + gc = data->gc; + od = purple_connection_get_protocol_data(gc); + account = purple_connection_get_account(gc); + + b = purple_find_buddy(account, data->name); + if (b == NULL) { oscar_free_name_data(data); return; } - if (!(g = purple_buddy_get_group(b))) { + g = purple_buddy_get_group(b); + if (g == NULL) { oscar_free_name_data(data); return; } - aim_ssi_editcomment(od, g->name, data->name, text); + aim_ssi_editcomment(od, purple_group_get_name(g), data->name, text); - if (!aim_sncmp(data->name, gc->account->username)) + username = purple_account_get_username(account); + if (!oscar_util_name_compare(data->name, username)) purple_check_comment(od, text); oscar_free_name_data(data); @@ -6169,23 +6216,27 @@ static void oscar_buddycb_edit_comment(PurpleBlistNode *node, gpointer ignore) { char *comment; gchar *comment_utf8; gchar *title; + PurpleAccount *account; + const char *name; g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); - od = gc->proto_data; + name = purple_buddy_get_name(buddy); + account = purple_buddy_get_account(buddy); + gc = purple_account_get_connection(account); + od = purple_connection_get_protocol_data(gc); if (!(g = purple_buddy_get_group(buddy))) return; data = g_new(struct name_data, 1); - comment = aim_ssi_getcomment(od->ssi.local, g->name, buddy->name); - comment_utf8 = comment ? oscar_utf8_try_convert(gc->account, comment) : NULL; + comment = aim_ssi_getcomment(od->ssi.local, purple_group_get_name(g), name); + comment_utf8 = comment ? oscar_utf8_try_convert(account, comment) : NULL; data->gc = gc; - data->name = g_strdup(purple_buddy_get_name(buddy)); + data->name = g_strdup(name); data->nick = g_strdup(purple_buddy_get_alias_only(buddy)); title = g_strdup_printf(_("Buddy Comment for %s"), data->name); @@ -6193,7 +6244,7 @@ static void oscar_buddycb_edit_comment(PurpleBlistNode *node, gpointer ignore) { comment_utf8, TRUE, FALSE, NULL, _("_OK"), G_CALLBACK(oscar_ssi_editcomment), _("_Cancel"), G_CALLBACK(oscar_free_name_data), - purple_connection_get_account(gc), data->name, NULL, + account, data->name, NULL, data); g_free(title); @@ -6225,26 +6276,28 @@ oscar_ask_directim(gpointer object, gpointer ignored) PurpleConnection *gc; gchar *buf; struct oscar_ask_directim_data *data; + PurpleAccount *account; node = object; g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *)node; - gc = purple_account_get_connection(buddy->account); + account = purple_buddy_get_account(buddy); + gc = purple_account_get_connection(account); data = g_new0(struct oscar_ask_directim_data, 1); - data->who = g_strdup(buddy->name); - data->od = gc->proto_data; + data->who = g_strdup(purple_buddy_get_name(buddy)); + data->od = purple_connection_get_protocol_data(gc); buf = g_strdup_printf(_("You have selected to open a Direct IM connection with %s."), - buddy->name); + data->who); purple_request_action(gc, NULL, buf, _("Because this reveals your IP address, it " "may be considered a security risk. Do you " "wish to continue?"), 0, /* Default action is "connect" */ - purple_connection_get_account(gc), data->who, NULL, + account, data->who, NULL, data, 2, _("C_onnect"), G_CALLBACK(oscar_ask_directim_yes_cb), _("_Cancel"), G_CALLBACK(oscar_ask_directim_no_cb)); @@ -6260,9 +6313,10 @@ oscar_get_aim_info_cb(PurpleBlistNode *node, gpointer ignore) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *)node; - gc = purple_account_get_connection(buddy->account); + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); - aim_locate_getinfoshort(gc->proto_data, purple_buddy_get_name(buddy), 0x00000003); + aim_locate_getinfoshort(purple_connection_get_protocol_data(gc), + purple_buddy_get_name(buddy), 0x00000003); } static GList * @@ -6273,13 +6327,16 @@ oscar_buddy_menu(PurpleBuddy *buddy) { GList *menu; PurpleMenuAction *act; aim_userinfo_t *userinfo; + PurpleAccount *account; + const char *bname = purple_buddy_get_name(buddy); - gc = purple_account_get_connection(buddy->account); - od = gc->proto_data; - userinfo = aim_locate_finduserinfo(od, buddy->name); + account = purple_buddy_get_account(buddy); + gc = purple_account_get_connection(account); + od = purple_connection_get_protocol_data(gc); + userinfo = aim_locate_finduserinfo(od, bname); menu = NULL; - if (od->icq && aim_snvalid_icq(purple_buddy_get_name(buddy))) + if (od->icq && oscar_util_valid_name_icq(bname)) { act = purple_menu_action_new(_("Get AIM Info"), PURPLE_CALLBACK(oscar_get_aim_info_cb), @@ -6307,7 +6364,7 @@ oscar_buddy_menu(PurpleBuddy *buddy) { #endif if (userinfo && - aim_sncmp(purple_account_get_username(buddy->account), buddy->name) && + oscar_util_name_compare(purple_account_get_username(account), bname) && PURPLE_BUDDY_IS_ONLINE(buddy)) { if (userinfo->capabilities & OSCAR_CAPABILITY_DIRECTIM) @@ -6331,8 +6388,8 @@ oscar_buddy_menu(PurpleBuddy *buddy) { if (od->ssi.received_data && purple_buddy_get_group(buddy) != NULL) { char *gname; - gname = aim_ssi_itemlist_findparentname(od->ssi.local, buddy->name); - if (gname && aim_ssi_waitingforauth(od->ssi.local, gname, buddy->name)) + gname = aim_ssi_itemlist_findparentname(od->ssi.local, bname); + if (gname && aim_ssi_waitingforauth(od->ssi.local, gname, bname)) { act = purple_menu_action_new(_("Re-request Authorization"), PURPLE_CALLBACK(purple_auth_sendrequest_menu), @@ -6358,7 +6415,7 @@ GList *oscar_blist_node_menu(PurpleBlistNode *node) { static void oscar_icq_privacy_opts(PurpleConnection *gc, PurpleRequestFields *fields) { - OscarData *od = gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); PurpleAccount *account = purple_connection_get_account(gc); PurpleRequestField *f; gboolean auth, web_aware; @@ -6409,13 +6466,13 @@ oscar_show_icq_privacy_opts(PurplePluginAction *action) gc); } -static void oscar_format_screenname(PurpleConnection *gc, const char *nick) { - OscarData *od = gc->proto_data; - if (!aim_sncmp(purple_account_get_username(purple_connection_get_account(gc)), nick)) { +static void oscar_format_username(PurpleConnection *gc, const char *nick) { + OscarData *od = purple_connection_get_protocol_data(gc); + if (!oscar_util_name_compare(purple_account_get_username(purple_connection_get_account(gc)), nick)) { if (!flap_connection_getbytype(od, SNAC_FAMILY_ADMIN)) { od->setnick = TRUE; - g_free(od->newsn); - od->newsn = g_strdup(nick); + g_free(od->newformatting); + od->newformatting = g_strdup(nick); aim_srv_requestnew(od, SNAC_FAMILY_ADMIN); } else { aim_admin_setnick(od, flap_connection_getbytype(od, SNAC_FAMILY_ADMIN), nick); @@ -6433,7 +6490,7 @@ static void oscar_confirm_account(PurplePluginAction *action) FlapConnection *conn; gc = (PurpleConnection *)action->context; - od = gc->proto_data; + od = purple_connection_get_protocol_data(gc); conn = flap_connection_getbytype(od, SNAC_FAMILY_ADMIN); if (conn != NULL) { @@ -6447,7 +6504,7 @@ static void oscar_confirm_account(PurplePluginAction *action) static void oscar_show_email(PurplePluginAction *action) { PurpleConnection *gc = (PurpleConnection *) action->context; - OscarData *od = gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); FlapConnection *conn = flap_connection_getbytype(od, SNAC_FAMILY_ADMIN); if (conn) { @@ -6460,7 +6517,7 @@ static void oscar_show_email(PurplePluginAction *action) static void oscar_change_email(PurpleConnection *gc, const char *email) { - OscarData *od = gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); FlapConnection *conn = flap_connection_getbytype(od, SNAC_FAMILY_ADMIN); if (conn) { @@ -6486,29 +6543,40 @@ static void oscar_show_change_email(PurplePluginAction *action) static void oscar_show_awaitingauth(PurplePluginAction *action) { PurpleConnection *gc = (PurpleConnection *) action->context; - OscarData *od = gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); gchar *nombre, *text, *tmp; PurpleBlistNode *gnode, *cnode, *bnode; + PurpleAccount *account; int num=0; text = g_strdup(""); + account = purple_connection_get_account(gc); - for (gnode = purple_get_blist()->root; gnode; gnode = gnode->next) { + for (gnode = purple_blist_get_root(); gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) { PurpleGroup *group = (PurpleGroup *)gnode; + const char *gname; if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for (cnode = gnode->child; cnode; cnode = cnode->next) { + gname = purple_group_get_name(group); + for (cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) { if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for (bnode = cnode->child; bnode; bnode = bnode->next) { + for (bnode = purple_blist_node_get_first_child(cnode); + bnode; + bnode = purple_blist_node_get_sibling_next(bnode)) { PurpleBuddy *buddy = (PurpleBuddy *)bnode; + const char *bname; if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; - if (buddy->account == gc->account && aim_ssi_waitingforauth(od->ssi.local, group->name, buddy->name)) { + bname = purple_buddy_get_name(buddy); + if (purple_buddy_get_account(buddy) == account && aim_ssi_waitingforauth(od->ssi.local, gname, bname)) { if (purple_buddy_get_alias_only(buddy)) - nombre = g_strdup_printf(" %s (%s)", buddy->name, purple_buddy_get_alias_only(buddy)); + nombre = g_strdup_printf(" %s (%s)", bname, purple_buddy_get_alias_only(buddy)); else - nombre = g_strdup_printf(" %s", buddy->name); + nombre = g_strdup_printf(" %s", bname); tmp = g_strdup_printf("%s%s<br>", text, nombre); g_free(text); text = tmp; @@ -6534,7 +6602,7 @@ static void oscar_show_awaitingauth(PurplePluginAction *action) static void search_by_email_cb(PurpleConnection *gc, const char *email) { - OscarData *od = (OscarData *)gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); aim_search_address(od, email); } @@ -6574,7 +6642,7 @@ static void oscar_change_pass(PurplePluginAction *action) static void oscar_show_chpassurl(PurplePluginAction *action) { PurpleConnection *gc = (PurpleConnection *) action->context; - OscarData *od = gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); gchar *substituted = purple_strreplace(od->authinfo->chpassurl, "%s", purple_account_get_username(purple_connection_get_account(gc))); purple_notify_uri(gc, substituted); g_free(substituted); @@ -6588,7 +6656,7 @@ static void oscar_show_imforwardingurl(PurplePluginAction *action) void oscar_set_icon(PurpleConnection *gc, PurpleStoredImage *img) { - OscarData *od = gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); if (img == NULL) { aim_ssi_delicon(od); @@ -6617,7 +6685,7 @@ oscar_can_receive_file(PurpleConnection *gc, const char *who) OscarData *od; PurpleAccount *account; - od = gc->proto_data; + od = purple_connection_get_protocol_data(gc); account = purple_connection_get_account(gc); if (od != NULL) @@ -6631,7 +6699,7 @@ oscar_can_receive_file(PurpleConnection *gc, const char *who) */ if (((userinfo == NULL) || (userinfo->capabilities & OSCAR_CAPABILITY_SENDFILE)) && - aim_sncmp(who, purple_account_get_username(account))) + oscar_util_name_compare(who, purple_account_get_username(account))) { return TRUE; } @@ -6648,7 +6716,7 @@ oscar_new_xfer(PurpleConnection *gc, const char *who) PurpleAccount *account; PeerConnection *conn; - od = gc->proto_data; + od = purple_connection_get_protocol_data(gc); account = purple_connection_get_account(gc); xfer = purple_xfer_new(account, PURPLE_XFER_SEND, who); @@ -6692,7 +6760,7 @@ GList * oscar_actions(PurplePlugin *plugin, gpointer context) { PurpleConnection *gc = (PurpleConnection *) context; - OscarData *od = gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); GList *menu = NULL; PurplePluginAction *act; @@ -6772,7 +6840,7 @@ oscar_actions(PurplePlugin *plugin, gpointer context) void oscar_change_passwd(PurpleConnection *gc, const char *old, const char *new) { - OscarData *od = gc->proto_data; + OscarData *od = purple_connection_get_protocol_data(gc); if (od->icq) { aim_icq_changepasswd(od, new); @@ -6796,7 +6864,7 @@ oscar_convo_closed(PurpleConnection *gc, const char *who) OscarData *od; PeerConnection *conn; - od = gc->proto_data; + od = purple_connection_get_protocol_data(gc); conn = peer_connection_find_by_type(od, who, OSCAR_CAPABILITY_DIRECTIM); if (conn != NULL) @@ -6818,11 +6886,13 @@ oscar_normalize(const PurpleAccount *account, const char *str) g_return_val_if_fail(str != NULL, NULL); /* copy str to buf and skip all blanks */ - for (i=0, j=0; str[j] && i < BUF_LEN - 1; i++, j++) - { - while (str[j] == ' ') - j++; - buf[i] = str[j]; + i = 0; + for (j = 0; str[j]; j++) { + if (str[j] != ' ') { + buf[i++] = str[j]; + if (i >= BUF_LEN - 1) + break; + } } buf[i] = '\0'; @@ -6887,14 +6957,14 @@ static gboolean oscar_uri_handler(const char *proto, const char *cmd, GHashTable /* aim:GoIM?screenname=SCREENNAME&message=MESSAGE */ if (!g_ascii_strcasecmp(cmd, "GoIM")) { - char *sname = g_hash_table_lookup(params, "screenname"); - if (sname) { + char *bname = g_hash_table_lookup(params, "screenname"); + if (bname) { char *message = g_hash_table_lookup(params, "message"); PurpleConversation *conv = purple_find_conversation_with_account( - PURPLE_CONV_TYPE_IM, sname, acct); + PURPLE_CONV_TYPE_IM, bname, acct); if (conv == NULL) - conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, acct, sname); + conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, acct, bname); purple_conversation_present(conv); if (message) { @@ -6927,9 +6997,9 @@ static gboolean oscar_uri_handler(const char *proto, const char *cmd, GHashTable } /* aim:AddBuddy?screenname=SCREENNAME&groupname=GROUPNAME*/ else if (!g_ascii_strcasecmp(cmd, "AddBuddy")) { - char *sname = g_hash_table_lookup(params, "screenname"); + char *bname = g_hash_table_lookup(params, "screenname"); char *gname = g_hash_table_lookup(params, "groupname"); - purple_blist_request_add_buddy(acct, sname, gname, NULL); + purple_blist_request_add_buddy(acct, bname, gname, NULL); return TRUE; } @@ -6959,7 +7029,7 @@ void oscar_init(PurplePluginProtocolInfo *prpl_info) option = purple_account_option_bool_new(_("Allow multiple simultaneous logins"), "allow_multiple_logins", OSCAR_DEFAULT_ALLOW_MULTIPLE_LOGINS); prpl_info->protocol_options = g_list_append(prpl_info->protocol_options, option); - + if (init) return; init = TRUE; diff --git a/libpurple/protocols/oscar/oscar.h b/libpurple/protocols/oscar/oscar.h index ce29d8e004..0b86cee965 100644 --- a/libpurple/protocols/oscar/oscar.h +++ b/libpurple/protocols/oscar/oscar.h @@ -75,7 +75,7 @@ extern "C" { #define FAIM_SNAC_HASH_SIZE 16 /* - * Current Maximum Length for Screen Names (not including NULL) + * Current Maximum Length for usernames (not including NULL) * * Currently only names up to 16 characters can be registered * however it is apparently legal for them to be larger. @@ -479,7 +479,7 @@ struct _OscarData gboolean setemail; char *email; gboolean setnick; - char *newsn; + char *newformatting; gboolean chpass; char *oldp; char *newp; @@ -582,7 +582,7 @@ struct aim_clientrelease struct aim_authresp_info { - char *sn; + char *bn; guint16 errorcode; char *errorurl; guint16 regstatus; @@ -611,8 +611,8 @@ struct aim_redirect_data } chat; }; -int aim_request_login(OscarData *od, FlapConnection *conn, const char *sn); -int aim_send_login(OscarData *od, FlapConnection *conn, const char *sn, const char *password, gboolean truncate_pass, ClientInfo *ci, const char *key, gboolean allow_multiple_logins); +int aim_request_login(OscarData *od, FlapConnection *conn, const char *bn); +int aim_send_login(OscarData *od, FlapConnection *conn, const char *bn, const char *password, gboolean truncate_pass, ClientInfo *ci, const char *key, gboolean allow_multiple_logins); /* 0x000b */ int aim_auth_securid_send(OscarData *od, const char *securid); void oscar_data_addhandler(OscarData *od, guint16 family, guint16 subtype, aim_rxcallback_t newhandler, guint16 flags); @@ -811,7 +811,7 @@ struct aim_sendimext_args { /* These are _required_ */ - const char *destsn; + const char *destbn; guint32 flags; /* often 0 */ /* Only required if not using multipart messages */ @@ -840,7 +840,7 @@ struct aim_sendimext_args */ struct aim_sendrtfmsg_args { - const char *destsn; + const char *destbn; guint32 fgcolor; guint32 bgcolor; const char *rtfmsg; /* must be in RTF */ @@ -954,28 +954,28 @@ struct aim_incomingim_ch4_args /* 0x0002 */ int aim_im_setparams(OscarData *od, struct aim_icbmparameters *params); /* 0x0004 */ int aim_im_reqparams(OscarData *od); /* 0x0006 */ int aim_im_sendch1_ext(OscarData *od, struct aim_sendimext_args *args); -/* 0x0006 */ int aim_im_sendch1(OscarData *, const char *destsn, guint16 flags, const char *msg); -/* 0x0006 */ int aim_im_sendch2_chatinvite(OscarData *od, const char *sn, const char *msg, guint16 exchange, const char *roomname, guint16 instance); -/* 0x0006 */ int aim_im_sendch2_icon(OscarData *od, const char *sn, const guint8 *icon, int iconlen, time_t stamp, guint16 iconsum); +/* 0x0006 */ int aim_im_sendch1(OscarData *, const char *destbn, guint16 flags, const char *msg); +/* 0x0006 */ int aim_im_sendch2_chatinvite(OscarData *od, const char *bn, const char *msg, guint16 exchange, const char *roomname, guint16 instance); +/* 0x0006 */ int aim_im_sendch2_icon(OscarData *od, const char *bn, const guint8 *icon, int iconlen, time_t stamp, guint16 iconsum); /* 0x0006 */ int aim_im_sendch2_rtfmsg(OscarData *od, struct aim_sendrtfmsg_args *args); /* 0x0006 */ void aim_im_sendch2_cancel(PeerConnection *peer_conn); /* 0x0006 */ void aim_im_sendch2_connected(PeerConnection *peer_conn); -/* 0x0006 */ void aim_im_sendch2_odc_requestdirect(OscarData *od, guchar *cookie, const char *sn, const guint8 *ip, guint16 port, guint16 requestnumber); -/* 0x0006 */ void aim_im_sendch2_odc_requestproxy(OscarData *od, guchar *cookie, const char *sn, const guint8 *ip, guint16 pin, guint16 requestnumber); -/* 0x0006 */ void aim_im_sendch2_sendfile_requestdirect(OscarData *od, guchar *cookie, const char *sn, const guint8 *ip, guint16 port, guint16 requestnumber, const gchar *filename, guint32 size, guint16 numfiles); -/* 0x0006 */ void aim_im_sendch2_sendfile_requestproxy(OscarData *od, guchar *cookie, const char *sn, const guint8 *ip, guint16 pin, guint16 requestnumber, const gchar *filename, guint32 size, guint16 numfiles); - -/* 0x0006 */ int aim_im_sendch2_geticqaway(OscarData *od, const char *sn, int type); -/* 0x0006 */ int aim_im_sendch4(OscarData *od, const char *sn, guint16 type, const char *message); -/* 0x0008 */ int aim_im_warn(OscarData *od, FlapConnection *conn, const char *destsn, guint32 flags); -/* 0x000b */ int aim_im_denytransfer(OscarData *od, const char *sn, const guchar *cookie, guint16 code); +/* 0x0006 */ void aim_im_sendch2_odc_requestdirect(OscarData *od, guchar *cookie, const char *bn, const guint8 *ip, guint16 port, guint16 requestnumber); +/* 0x0006 */ void aim_im_sendch2_odc_requestproxy(OscarData *od, guchar *cookie, const char *bn, const guint8 *ip, guint16 pin, guint16 requestnumber); +/* 0x0006 */ void aim_im_sendch2_sendfile_requestdirect(OscarData *od, guchar *cookie, const char *bn, const guint8 *ip, guint16 port, guint16 requestnumber, const gchar *filename, guint32 size, guint16 numfiles); +/* 0x0006 */ void aim_im_sendch2_sendfile_requestproxy(OscarData *od, guchar *cookie, const char *bn, const guint8 *ip, guint16 pin, guint16 requestnumber, const gchar *filename, guint32 size, guint16 numfiles); + +/* 0x0006 */ int aim_im_sendch2_geticqaway(OscarData *od, const char *bn, int type); +/* 0x0006 */ int aim_im_sendch4(OscarData *od, const char *bn, guint16 type, const char *message); +/* 0x0008 */ int aim_im_warn(OscarData *od, FlapConnection *conn, const char *destbn, guint32 flags); +/* 0x000b */ int aim_im_denytransfer(OscarData *od, const char *bn, const guchar *cookie, guint16 code); /* 0x0010 */ int aim_im_reqofflinemsgs(OscarData *od); -/* 0x0014 */ int aim_im_sendmtn(OscarData *od, guint16 type1, const char *sn, guint16 type2); +/* 0x0014 */ int aim_im_sendmtn(OscarData *od, guint16 type1, const char *bn, guint16 type2); void aim_icbm_makecookie(guchar* cookie); gchar *oscar_encoding_extract(const char *encoding); gchar *oscar_encoding_to_utf8(PurpleAccount *account, const char *encoding, const char *text, int textlen); -gchar *purple_plugin_oscar_decode_im_part(PurpleAccount *account, const char *sourcesn, guint16 charset, guint16 charsubset, const gchar *data, gsize datalen); +gchar *purple_plugin_oscar_decode_im_part(PurpleAccount *account, const char *sourcebn, guint16 charset, guint16 charsubset, const gchar *data, gsize datalen); /* 0x0002 - family_locate.c */ @@ -1010,13 +1010,13 @@ gchar *purple_plugin_oscar_decode_im_part(PurpleAccount *account, const char *so struct userinfo_node { - char *sn; + char *bn; struct userinfo_node *next; }; typedef struct aim_userinfo_s { - char *sn; + char *bn; guint16 warnlevel; /* evil percent * 10 (999 = 99.9%) */ guint16 idletime; /* in seconds */ guint16 flags; @@ -1062,7 +1062,7 @@ int aim_sendmemblock(OscarData *od, FlapConnection *conn, guint32 offset, guint3 struct aim_invite_priv { - char *sn; + char *bn; char *roomname; guint16 exchange; guint16 instance; @@ -1085,7 +1085,7 @@ struct aim_invite_priv #define AIM_COOKIETYPE_OFTIMAGE 0x14 #define AIM_COOKIETYPE_OFTICON 0x15 -aim_userinfo_t *aim_locate_finduserinfo(OscarData *od, const char *sn); +aim_userinfo_t *aim_locate_finduserinfo(OscarData *od, const char *bn); void aim_locate_dorequest(OscarData *od); /* 0x0002 */ int aim_locate_reqrights(OscarData *od); @@ -1093,11 +1093,11 @@ void aim_locate_dorequest(OscarData *od); /* 0x0004 */ int aim_locate_setprofile(OscarData *od, const char *profile_encoding, const gchar *profile, const int profile_len, const char *awaymsg_encoding, const gchar *awaymsg, const int awaymsg_len); /* 0x0005 */ int aim_locate_getinfo(OscarData *od, const char *, guint16); /* 0x0009 */ int aim_locate_setdirinfo(OscarData *od, const char *first, const char *middle, const char *last, const char *maiden, const char *nickname, const char *street, const char *city, const char *state, const char *zip, int country, guint16 privacy); -/* 0x000b */ int aim_locate_000b(OscarData *od, const char *sn); +/* 0x000b */ int aim_locate_000b(OscarData *od, const char *bn); /* 0x000f */ int aim_locate_setinterests(OscarData *od, const char *interest1, const char *interest2, const char *interest3, const char *interest4, const char *interest5, guint16 privacy); -/* 0x0015 */ int aim_locate_getinfoshort(OscarData *od, const char *sn, guint32 flags); +/* 0x0015 */ int aim_locate_getinfoshort(OscarData *od, const char *bn, guint32 flags); -void aim_locate_autofetch_away_message(OscarData *od, const char *sn); +void aim_locate_autofetch_away_message(OscarData *od, const char *bn); guint32 aim_locate_getcaps(OscarData *od, ByteStream *bs, int len); guint32 aim_locate_getcaps_short(OscarData *od, ByteStream *bs, int len); void aim_info_free(aim_userinfo_t *); @@ -1164,7 +1164,7 @@ struct aim_odir char *country; char *state; char *city; - char *sn; + char *bn; char *interest; char *nick; char *zip; @@ -1181,7 +1181,7 @@ int aim_odir_interest(OscarData *, const char *, const char *); /* 0x0010 - family_bart.c */ int aim_bart_upload(OscarData *od, const guint8 *icon, guint16 iconlen); -int aim_bart_request(OscarData *od, const char *sn, guint8 iconcsumtype, const guint8 *iconstr, guint16 iconstrlen); +int aim_bart_request(OscarData *od, const char *bn, guint8 iconcsumtype, const guint8 *iconstr, guint16 iconstrlen); @@ -1231,20 +1231,20 @@ struct aim_ssi_tmp /* 0x0007 */ int aim_ssi_enable(OscarData *od); /* 0x0011 */ int aim_ssi_modbegin(OscarData *od); /* 0x0012 */ int aim_ssi_modend(OscarData *od); -/* 0x0014 */ int aim_ssi_sendauth(OscarData *od, char *sn, char *msg); -/* 0x0018 */ int aim_ssi_sendauthrequest(OscarData *od, char *sn, const char *msg); -/* 0x001a */ int aim_ssi_sendauthreply(OscarData *od, char *sn, guint8 reply, const char *msg); +/* 0x0014 */ int aim_ssi_sendauth(OscarData *od, char *bn, char *msg); +/* 0x0018 */ int aim_ssi_sendauthrequest(OscarData *od, char *bn, const char *msg); +/* 0x001a */ int aim_ssi_sendauthreply(OscarData *od, char *bn, guint8 reply, const char *msg); /* Client functions for retrieving SSI data */ struct aim_ssi_item *aim_ssi_itemlist_find(struct aim_ssi_item *list, guint16 gid, guint16 bid); -struct aim_ssi_item *aim_ssi_itemlist_finditem(struct aim_ssi_item *list, const char *gn, const char *sn, guint16 type); -struct aim_ssi_item *aim_ssi_itemlist_exists(struct aim_ssi_item *list, const char *sn); -char *aim_ssi_itemlist_findparentname(struct aim_ssi_item *list, const char *sn); +struct aim_ssi_item *aim_ssi_itemlist_finditem(struct aim_ssi_item *list, const char *gn, const char *bn, guint16 type); +struct aim_ssi_item *aim_ssi_itemlist_exists(struct aim_ssi_item *list, const char *bn); +char *aim_ssi_itemlist_findparentname(struct aim_ssi_item *list, const char *bn); int aim_ssi_getpermdeny(struct aim_ssi_item *list); guint32 aim_ssi_getpresence(struct aim_ssi_item *list); -char *aim_ssi_getalias(struct aim_ssi_item *list, const char *gn, const char *sn); -char *aim_ssi_getcomment(struct aim_ssi_item *list, const char *gn, const char *sn); -gboolean aim_ssi_waitingforauth(struct aim_ssi_item *list, const char *gn, const char *sn); +char *aim_ssi_getalias(struct aim_ssi_item *list, const char *gn, const char *bn); +char *aim_ssi_getcomment(struct aim_ssi_item *list, const char *gn, const char *bn); +gboolean aim_ssi_waitingforauth(struct aim_ssi_item *list, const char *gn, const char *bn); /* Client functions for changing SSI data */ int aim_ssi_addbuddy(OscarData *od, const char *name, const char *group, GSList *tlvlist, const char *alias, const char *comment, const char *smsnum, gboolean needauth); @@ -1254,9 +1254,9 @@ int aim_ssi_delbuddy(OscarData *od, const char *name, const char *group); int aim_ssi_delgroup(OscarData *od, const char *group); int aim_ssi_delpermit(OscarData *od, const char *name); int aim_ssi_deldeny(OscarData *od, const char *name); -int aim_ssi_movebuddy(OscarData *od, const char *oldgn, const char *newgn, const char *sn); -int aim_ssi_aliasbuddy(OscarData *od, const char *gn, const char *sn, const char *alias); -int aim_ssi_editcomment(OscarData *od, const char *gn, const char *sn, const char *alias); +int aim_ssi_movebuddy(OscarData *od, const char *oldgn, const char *newgn, const char *bn); +int aim_ssi_aliasbuddy(OscarData *od, const char *gn, const char *bn, const char *alias); +int aim_ssi_editcomment(OscarData *od, const char *gn, const char *bn, const char *alias); int aim_ssi_rename_group(OscarData *od, const char *oldgn, const char *newgn); int aim_ssi_cleanlist(OscarData *od); int aim_ssi_deletelist(OscarData *od); @@ -1501,11 +1501,10 @@ int aimutil_tokslen(char *toSearch, int theindex, char dl); int aimutil_itemcnt(char *toSearch, char dl); char *aimutil_itemindex(char *toSearch, int theindex, char dl); -gboolean aim_snvalid(const char *sn); -gboolean aim_snvalid_icq(const char *sn); -gboolean aim_snvalid_sms(const char *sn); -int aim_snlen(const char *sn); -int aim_sncmp(const char *sn1, const char *sn2); +gboolean oscar_util_valid_name(const char *bn); +gboolean oscar_util_valid_name_icq(const char *bn); +gboolean oscar_util_valid_name_sms(const char *bn); +int oscar_util_name_compare(const char *bn1, const char *bn2); diff --git a/libpurple/protocols/oscar/peer.c b/libpurple/protocols/oscar/peer.c index f91989744e..b8c6f6bf9a 100644 --- a/libpurple/protocols/oscar/peer.c +++ b/libpurple/protocols/oscar/peer.c @@ -69,7 +69,7 @@ #endif PeerConnection * -peer_connection_find_by_type(OscarData *od, const char *sn, OscarCapability type) +peer_connection_find_by_type(OscarData *od, const char *bn, OscarCapability type) { GSList *cur; PeerConnection *conn; @@ -77,7 +77,7 @@ peer_connection_find_by_type(OscarData *od, const char *sn, OscarCapability type for (cur = od->peer_connections; cur != NULL; cur = cur->next) { conn = cur->data; - if ((conn->type == type) && !aim_sncmp(conn->sn, sn)) + if ((conn->type == type) && !oscar_util_name_compare(conn->bn, bn)) return conn; } @@ -88,7 +88,7 @@ peer_connection_find_by_type(OscarData *od, const char *sn, OscarCapability type * @param cookie This must be exactly 8 characters. */ PeerConnection * -peer_connection_find_by_cookie(OscarData *od, const char *sn, const guchar *cookie) +peer_connection_find_by_cookie(OscarData *od, const char *bn, const guchar *cookie) { GSList *cur; PeerConnection *conn; @@ -96,7 +96,7 @@ peer_connection_find_by_cookie(OscarData *od, const char *sn, const guchar *cook for (cur = od->peer_connections; cur != NULL; cur = cur->next) { conn = cur->data; - if (!memcmp(conn->cookie, cookie, 8) && !aim_sncmp(conn->sn, sn)) + if (!memcmp(conn->cookie, cookie, 8) && !oscar_util_name_compare(conn->bn, bn)) return conn; } @@ -104,7 +104,7 @@ peer_connection_find_by_cookie(OscarData *od, const char *sn, const guchar *cook } PeerConnection * -peer_connection_new(OscarData *od, OscarCapability type, const char *sn) +peer_connection_new(OscarData *od, OscarCapability type, const char *bn) { PeerConnection *conn; PurpleAccount *account; @@ -114,7 +114,7 @@ peer_connection_new(OscarData *od, OscarCapability type, const char *sn) conn = g_new0(PeerConnection, 1); conn->od = od; conn->type = type; - conn->sn = g_strdup(sn); + conn->bn = g_strdup(bn); conn->buffer_outgoing = purple_circ_buffer_new(0); conn->listenerfd = -1; conn->fd = -1; @@ -228,7 +228,7 @@ peer_connection_destroy_cb(gpointer data) conn->xfer = NULL; } - g_free(conn->sn); + g_free(conn->bn); g_free(conn->error_message); g_free(conn->proxyip); g_free(conn->clientip); @@ -698,20 +698,20 @@ peer_connection_establish_listener_cb(int listenerfd, gpointer data) if (conn->type == OSCAR_CAPABILITY_DIRECTIM) { aim_im_sendch2_odc_requestdirect(od, - conn->cookie, conn->sn, purple_network_ip_atoi(listener_ip), + conn->cookie, conn->bn, purple_network_ip_atoi(listener_ip), listener_port, ++conn->lastrequestnumber); /* Print a message to a local conversation window */ - conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, conn->sn); + conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, conn->bn); tmp = g_strdup_printf(_("Asking %s to connect to us at %s:%hu for " - "Direct IM."), conn->sn, listener_ip, listener_port); + "Direct IM."), conn->bn, listener_ip, listener_port); purple_conversation_write(conv, NULL, tmp, PURPLE_MESSAGE_SYSTEM, time(NULL)); g_free(tmp); } else if (conn->type == OSCAR_CAPABILITY_SENDFILE) { aim_im_sendch2_sendfile_requestdirect(od, - conn->cookie, conn->sn, + conn->cookie, conn->bn, purple_network_ip_atoi(listener_ip), listener_port, ++conn->lastrequestnumber, (const gchar *)conn->xferdata.name, @@ -790,7 +790,7 @@ peer_connection_trynext(PeerConnection *conn) PurpleConversation *conv; tmp = g_strdup_printf(_("Attempting to connect to %s:%hu."), conn->verifiedip, conn->port); - conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, conn->sn); + conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, conn->bn); purple_conversation_write(conv, NULL, tmp, PURPLE_MESSAGE_SYSTEM, time(NULL)); g_free(tmp); @@ -863,7 +863,7 @@ peer_connection_trynext(PeerConnection *conn) gchar *tmp; PurpleConversation *conv; tmp = g_strdup(_("Attempting to connect via proxy server.")); - conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, conn->sn); + conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, conn->bn); purple_conversation_write(conv, NULL, tmp, PURPLE_MESSAGE_SYSTEM, time(NULL)); g_free(tmp); @@ -888,13 +888,13 @@ peer_connection_trynext(PeerConnection *conn) * Initiate a peer connection with someone. */ void -peer_connection_propose(OscarData *od, OscarCapability type, const char *sn) +peer_connection_propose(OscarData *od, OscarCapability type, const char *bn) { PeerConnection *conn; if (type == OSCAR_CAPABILITY_DIRECTIM) { - conn = peer_connection_find_by_type(od, sn, type); + conn = peer_connection_find_by_type(od, bn, type); if (conn != NULL) { if (conn->ready) @@ -903,10 +903,10 @@ peer_connection_propose(OscarData *od, OscarCapability type, const char *sn) PurpleConversation *conv; purple_debug_info("oscar", "Already have a direct IM " - "session with %s.\n", sn); + "session with %s.\n", bn); account = purple_connection_get_account(od->gc); conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, - sn, account); + bn, account); if (conv != NULL) purple_conversation_present(conv); return; @@ -917,7 +917,7 @@ peer_connection_propose(OscarData *od, OscarCapability type, const char *sn) } } - conn = peer_connection_new(od, type, sn); + conn = peer_connection_new(od, type, bn); conn->flags |= PEER_CONNECTION_FLAG_INITIATED_BY_ME; conn->flags |= PEER_CONNECTION_FLAG_APPROVED; aim_icbm_makecookie(conn->cookie); @@ -954,7 +954,7 @@ peer_connection_got_proposition_no_cb(gpointer data, gint id) conn = data; - aim_im_denytransfer(conn->od, conn->sn, conn->cookie, + aim_im_denytransfer(conn->od, conn->bn, conn->cookie, AIM_TRANSFER_DENY_DECLINE); peer_connection_destroy(conn, OSCAR_DISCONNECT_LOCAL_CLOSED, NULL); } @@ -963,7 +963,7 @@ peer_connection_got_proposition_no_cb(gpointer data, gint id) * Someone else wants to establish a peer connection with us. */ void -peer_connection_got_proposition(OscarData *od, const gchar *sn, const gchar *message, IcbmArgsCh2 *args) +peer_connection_got_proposition(OscarData *od, const gchar *bn, const gchar *message, IcbmArgsCh2 *args) { PurpleConnection *gc; PurpleAccount *account; @@ -979,7 +979,7 @@ peer_connection_got_proposition(OscarData *od, const gchar *sn, const gchar *mes * and we should try connecting to them, instead. Or they want * to go through a proxy. */ - conn = peer_connection_find_by_cookie(od, sn, args->cookie); + conn = peer_connection_find_by_cookie(od, bn, args->cookie); if ((conn != NULL) && (conn->type == args->type)) { purple_debug_info("oscar", "Remote user wants to try a " @@ -1003,12 +1003,12 @@ peer_connection_got_proposition(OscarData *od, const gchar *sn, const gchar *mes /* If this is a direct IM, then close any existing session */ if (args->type == OSCAR_CAPABILITY_DIRECTIM) { - conn = peer_connection_find_by_type(od, sn, args->type); + conn = peer_connection_find_by_type(od, bn, args->type); if (conn != NULL) { /* Close the old direct IM and start a new one */ purple_debug_info("oscar", "Received new direct IM request " - "from %s. Destroying old connection.\n", sn); + "from %s. Destroying old connection.\n", bn); peer_connection_destroy(conn, OSCAR_DISCONNECT_REMOTE_CLOSED, NULL); } } @@ -1022,12 +1022,12 @@ peer_connection_got_proposition(OscarData *od, const gchar *sn, const gchar *mes { purple_debug_warning("oscar", "%s tried to send you a file with incomplete " - "information.\n", sn); + "information.\n", bn); return; } } - conn = peer_connection_new(od, args->type, sn); + conn = peer_connection_new(od, args->type, bn); memcpy(conn->cookie, args->cookie, 8); if (args->use_proxy) conn->proxyip = g_strdup(args->proxyip); @@ -1040,7 +1040,7 @@ peer_connection_got_proposition(OscarData *od, const gchar *sn, const gchar *mes if (args->type == OSCAR_CAPABILITY_DIRECTIM) { buf = g_strdup_printf(_("%s has just asked to directly connect to %s"), - sn, purple_account_get_username(account)); + bn, purple_account_get_username(account)); purple_request_action(conn, NULL, buf, _("This requires a direct connection between " @@ -1049,7 +1049,7 @@ peer_connection_got_proposition(OscarData *od, const gchar *sn, const gchar *mes "revealed, this may be considered a privacy " "risk."), PURPLE_DEFAULT_ACTION_NONE, - account, sn, NULL, + account, bn, NULL, conn, 2, _("C_onnect"), G_CALLBACK(peer_connection_got_proposition_yes_cb), _("Cancel"), G_CALLBACK(peer_connection_got_proposition_no_cb)); @@ -1058,7 +1058,7 @@ peer_connection_got_proposition(OscarData *od, const gchar *sn, const gchar *mes { gchar *filename; - conn->xfer = purple_xfer_new(account, PURPLE_XFER_RECEIVE, sn); + conn->xfer = purple_xfer_new(account, PURPLE_XFER_RECEIVE, bn); if (conn->xfer) { conn->xfer->data = conn; diff --git a/libpurple/protocols/oscar/peer.h b/libpurple/protocols/oscar/peer.h index ebdfc1ca20..1027a75b1b 100644 --- a/libpurple/protocols/oscar/peer.h +++ b/libpurple/protocols/oscar/peer.h @@ -83,7 +83,7 @@ struct _OdcFrame /* Unknown */ guint16 flags; /* 38 */ /* Unknown */ - guchar sn[32]; /* 44 */ + guchar bn[32]; /* 44 */ /* Unknown */ ByteStream payload; /* 76 */ }; @@ -137,7 +137,7 @@ struct _PeerConnection { OscarData *od; OscarCapability type; - char *sn; + char *bn; guchar magic[4]; guchar cookie[8]; guint16 lastrequestnumber; @@ -228,12 +228,12 @@ struct _PeerConnection * @param type The type of the peer connection. One of * OSCAR_CAPABILITY_DIRECTIM or OSCAR_CAPABILITY_SENDFILE. */ -PeerConnection *peer_connection_new(OscarData *od, OscarCapability type, const char *sn); +PeerConnection *peer_connection_new(OscarData *od, OscarCapability type, const char *bn); void peer_connection_destroy(PeerConnection *conn, OscarDisconnectReason reason, const gchar *error_message); void peer_connection_schedule_destroy(PeerConnection *conn, OscarDisconnectReason reason, const gchar *error_message); -PeerConnection *peer_connection_find_by_type(OscarData *od, const char *sn, OscarCapability type); -PeerConnection *peer_connection_find_by_cookie(OscarData *od, const char *sn, const guchar *cookie); +PeerConnection *peer_connection_find_by_type(OscarData *od, const char *bn, OscarCapability type); +PeerConnection *peer_connection_find_by_cookie(OscarData *od, const char *bn, const guchar *cookie); void peer_connection_listen_cb(gpointer data, gint source, PurpleInputCondition cond); void peer_connection_recv_cb(gpointer data, gint source, PurpleInputCondition cond); @@ -241,8 +241,8 @@ void peer_connection_send(PeerConnection *conn, ByteStream *bs); void peer_connection_trynext(PeerConnection *conn); void peer_connection_finalize_connection(PeerConnection *conn); -void peer_connection_propose(OscarData *od, OscarCapability type, const char *sn); -void peer_connection_got_proposition(OscarData *od, const gchar *sn, const gchar *message, IcbmArgsCh2 *args); +void peer_connection_propose(OscarData *od, OscarCapability type, const char *bn); +void peer_connection_got_proposition(OscarData *od, const gchar *bn, const gchar *message, IcbmArgsCh2 *args); /* * For ODC diff --git a/libpurple/protocols/oscar/peer_proxy.c b/libpurple/protocols/oscar/peer_proxy.c index 0ca423e2b3..1ef991b704 100644 --- a/libpurple/protocols/oscar/peer_proxy.c +++ b/libpurple/protocols/oscar/peer_proxy.c @@ -63,19 +63,19 @@ peer_proxy_send_create_new_conn(PeerConnection *conn) { ProxyFrame frame; PurpleAccount *account; - const gchar *sn; - guint8 sn_length; + const gchar *bn; + guint8 bn_length; memset(&frame, 0, sizeof(ProxyFrame)); frame.type = PEER_PROXY_TYPE_CREATE; frame.flags = 0x0000; account = purple_connection_get_account(conn->od->gc); - sn = purple_account_get_username(account); - sn_length = strlen(sn); - byte_stream_new(&frame.payload, 1 + sn_length + 8 + 20); - byte_stream_put8(&frame.payload, sn_length); - byte_stream_putraw(&frame.payload, (const guint8 *)sn, sn_length); + bn = purple_account_get_username(account); + bn_length = strlen(bn); + byte_stream_new(&frame.payload, 1 + bn_length + 8 + 20); + byte_stream_put8(&frame.payload, bn_length); + byte_stream_putraw(&frame.payload, (const guint8 *)bn, bn_length); byte_stream_putraw(&frame.payload, conn->cookie, 8); byte_stream_put16(&frame.payload, 0x0001); /* Type */ @@ -99,19 +99,19 @@ peer_proxy_send_join_existing_conn(PeerConnection *conn, guint16 pin) { ProxyFrame frame; PurpleAccount *account; - const gchar *sn; - guint8 sn_length; + const gchar *bn; + guint8 bn_length; memset(&frame, 0, sizeof(ProxyFrame)); frame.type = PEER_PROXY_TYPE_JOIN; frame.flags = 0x0000; account = purple_connection_get_account(conn->od->gc); - sn = purple_account_get_username(account); - sn_length = strlen(sn); - byte_stream_new(&frame.payload, 1 + sn_length + 2 + 8 + 20); - byte_stream_put8(&frame.payload, sn_length); - byte_stream_putraw(&frame.payload, (const guint8 *)sn, sn_length); + bn = purple_account_get_username(account); + bn_length = strlen(bn); + byte_stream_new(&frame.payload, 1 + bn_length + 2 + 8 + 20); + byte_stream_put8(&frame.payload, bn_length); + byte_stream_putraw(&frame.payload, (const guint8 *)bn, bn_length); byte_stream_put16(&frame.payload, pin); byte_stream_putraw(&frame.payload, conn->cookie, 8); @@ -149,11 +149,11 @@ peer_proxy_recv_frame(PeerConnection *conn, ProxyFrame *frame) if (conn->type == OSCAR_CAPABILITY_DIRECTIM) aim_im_sendch2_odc_requestproxy(conn->od, conn->cookie, - conn->sn, ip, pin, ++conn->lastrequestnumber); + conn->bn, ip, pin, ++conn->lastrequestnumber); else if (conn->type == OSCAR_CAPABILITY_SENDFILE) { aim_im_sendch2_sendfile_requestproxy(conn->od, - conn->cookie, conn->sn, + conn->cookie, conn->bn, ip, pin, ++conn->lastrequestnumber, (const gchar *)conn->xferdata.name, conn->xferdata.size, conn->xferdata.totfiles); diff --git a/libpurple/protocols/oscar/snactypes.h b/libpurple/protocols/oscar/snactypes.h index 31d60ffb5c..5a697aa827 100644 --- a/libpurple/protocols/oscar/snactypes.h +++ b/libpurple/protocols/oscar/snactypes.h @@ -252,7 +252,6 @@ * SNAC Family: Authorizer * * Used only in protocol versions three and above. - * */ #define SNAC_SUBTYPE_AUTH_ERROR 0x0001 #define SNAC_SUBTYPE_AUTH_LOGINREQEST 0x0002 @@ -266,8 +265,7 @@ * SNAC Family: Email * * Used for getting information on the email address - * associated with your screen name. - * + * associated with your username. */ #define SNAC_SUBTYPE_ALERT_ERROR 0x0001 #define SNAC_SUBTYPE_ALERT_SENDCOOKIES 0x0006 @@ -280,7 +278,6 @@ * This isn't truly a SNAC family either, but using * these, we can integrated non-SNAC services into * the SNAC-centered libfaim callback structure. - * */ #define AIM_CB_SPECIAL_CONNERR 0x0003 #define AIM_CB_SPECIAL_CONNINITDONE 0x0006 diff --git a/libpurple/protocols/oscar/util.c b/libpurple/protocols/oscar/util.c index 6875f68887..ed06bb74f5 100644 --- a/libpurple/protocols/oscar/util.c +++ b/libpurple/protocols/oscar/util.c @@ -136,27 +136,27 @@ aimutil_iconsum(const guint8 *buf, int buflen) } /** - * Check if the given screen name is a valid AIM screen name. + * Check if the given name is a valid AIM username. * Example: BobDole * Example: Henry_Ford@mac.com * Example: 1KrazyKat@example.com * - * @return TRUE if the screen name is valid, FALSE if not. + * @return TRUE if the name is valid, FALSE if not. */ static gboolean -aim_snvalid_aim(const char *sn) +oscar_util_valid_name_aim(const char *name) { int i; - if (purple_email_is_valid(sn)) + if (purple_email_is_valid(name)) return TRUE; - /* Normal AIM screen names can't start with a number */ - if (isdigit(sn[0])) + /* Normal AIM usernames can't start with a number */ + if (isdigit(name[0])) return FALSE; - for (i = 0; sn[i] != '\0'; i++) { - if (!isalnum(sn[i]) && (sn[i] != ' ')) + for (i = 0; name[i] != '\0'; i++) { + if (!isalnum(name[i]) && (name[i] != ' ')) return FALSE; } @@ -164,18 +164,18 @@ aim_snvalid_aim(const char *sn) } /** - * Check if the given screen name is a valid ICQ screen name. + * Check if the given name is a valid ICQ username. * Example: 1234567 * - * @return TRUE if the screen name is valid, FALSE if not. + * @return TRUE if the name is valid, FALSE if not. */ gboolean -aim_snvalid_icq(const char *sn) +oscar_util_valid_name_icq(const char *name) { int i; - for (i = 0; sn[i] != '\0'; i++) { - if (!isdigit(sn[i])) + for (i = 0; name[i] != '\0'; i++) { + if (!isdigit(name[i])) return FALSE; } @@ -183,21 +183,21 @@ aim_snvalid_icq(const char *sn) } /** - * Check if the given screen name is a valid SMS screen name. + * Check if the given name is a valid SMS username. * Example: +19195551234 * - * @return TRUE if the screen name is valid, FALSE if not. + * @return TRUE if the name is valid, FALSE if not. */ gboolean -aim_snvalid_sms(const char *sn) +oscar_util_valid_name_sms(const char *name) { int i; - if (sn[0] != '+') + if (name[0] != '+') return FALSE; - for (i = 1; sn[i] != '\0'; i++) { - if (!isdigit(sn[i])) + for (i = 1; name[i] != '\0'; i++) { + if (!isdigit(name[i])) return FALSE; } @@ -205,44 +205,46 @@ aim_snvalid_sms(const char *sn) } /** - * Check if the given screen name is a valid oscar screen name. + * Check if the given name is a valid oscar username. * - * @return TRUE if the screen name is valid, FALSE if not. + * @return TRUE if the name is valid, FALSE if not. */ gboolean -aim_snvalid(const char *sn) +oscar_util_valid_name(const char *name) { - if ((sn == NULL) || (*sn == '\0')) + if ((name == NULL) || (*name == '\0')) return FALSE; - return aim_snvalid_icq(sn) || aim_snvalid_sms(sn) || aim_snvalid_aim(sn); + return oscar_util_valid_name_icq(name) + || oscar_util_valid_name_sms(name) + || oscar_util_valid_name_aim(name); } /** - * This takes two screen names and compares them using the rules - * on screen names for AIM/AOL. Mainly, this means case and space + * This takes two names and compares them using the rules + * on usernames for AIM/AOL. Mainly, this means case and space * insensitivity (all case differences and spacing differences are - * ignored, with the exception that screen names can not start with + * ignored, with the exception that usernames can not start with * a space). * * @return 0 if equal, non-0 if different */ /* TODO: Do something different for email addresses. */ int -aim_sncmp(const char *sn1, const char *sn2) +oscar_util_name_compare(const char *name1, const char *name2) { - if ((sn1 == NULL) || (sn2 == NULL)) + if ((name1 == NULL) || (name2 == NULL)) return -1; do { - while (*sn2 == ' ') - sn2++; - while (*sn1 == ' ') - sn1++; - if (toupper(*sn1) != toupper(*sn2)) + while (*name2 == ' ') + name2++; + while (*name1 == ' ') + name1++; + if (toupper(*name1) != toupper(*name2)) return 1; - } while ((*sn1 != '\0') && sn1++ && sn2++); + } while ((*name1 != '\0') && name1++ && name2++); return 0; } diff --git a/libpurple/protocols/qq/ChangeLog b/libpurple/protocols/qq/ChangeLog index d6619d35fb..241f449dc6 100644 --- a/libpurple/protocols/qq/ChangeLog +++ b/libpurple/protocols/qq/ChangeLog @@ -1,3 +1,9 @@ +2009.02.25 - flos <lonicerae(at)gmail.com> + * Changed text 'ZipCode' to 'Postal Code' + +2009.02.24 - flos <lonicerae(at)gmail.com> + * NEVER forget our COPYRIGHT, ;) + 2009.02.24 - flos <lonicerae(at)gmail.com> * Changed update_class type from gint to guint32 * Fixed a bug of displaying of memo when memo is nothing diff --git a/libpurple/protocols/qq/buddy_info.c b/libpurple/protocols/qq/buddy_info.c index 5342907e02..f84fce81d0 100644 --- a/libpurple/protocols/qq/buddy_info.c +++ b/libpurple/protocols/qq/buddy_info.c @@ -614,7 +614,7 @@ static void update_buddy_info(PurpleConnection *gc, gchar **segments) gchar *alias_utf8; PurpleAccount *account = purple_connection_get_account(gc); - qd = (qq_data *) gc->proto_data; + qd = (qq_data *)purple_connection_get_protocol_data(gc); uid = strtoul(segments[QQ_INFO_UID], NULL, 10); who = uid_to_purple_name(uid); @@ -633,15 +633,16 @@ static void update_buddy_info(PurpleConnection *gc, gchar **segments) buddy = purple_find_buddy(gc->account, who); } - if (buddy == NULL || buddy->proto_data == NULL) { + /* if the buddy is null, the api will catch it and return null here */ + bd = purple_buddy_get_protocol_data(buddy); + + if (buddy == NULL || bd) { g_free(who); g_free(alias_utf8); return; } /* update buddy list (including myself, if myself is the buddy) */ - bd = (qq_buddy_data *)buddy->proto_data; - bd->age = strtol(segments[QQ_INFO_AGE], NULL, 10); bd->gender = strtol(segments[QQ_INFO_GENDER], NULL, 10); bd->face = strtol(segments[QQ_INFO_FACE], NULL, 10); @@ -770,8 +771,7 @@ void qq_request_get_buddies_level(PurpleConnection *gc, guint32 update_class) for (it = buddies; it; it = it->next) { buddy = it->data; if (buddy == NULL) continue; - if (buddy->proto_data == NULL) continue; - bd = (qq_buddy_data *)buddy->proto_data; + if ((bd = purple_buddy_get_protocol_data(buddy)) == NULL) continue; if (bd->uid == 0) continue; /* keep me as end of packet*/ if (bd->uid == qd->uid) continue; bytes += qq_put32(buf + bytes, bd->uid); diff --git a/libpurple/protocols/qq/buddy_list.c b/libpurple/protocols/qq/buddy_list.c index 2d8c5a1d32..e826354753 100644 --- a/libpurple/protocols/qq/buddy_list.c +++ b/libpurple/protocols/qq/buddy_list.c @@ -233,7 +233,7 @@ guint8 qq_process_get_buddies_online(guint8 *data, gint data_len, PurpleConnecti /* create no-auth buddy */ buddy = qq_buddy_new(gc, bs.uid); } - bd = (buddy == NULL) ? NULL : (qq_buddy_data *)buddy->proto_data; + bd = (buddy == NULL) ? NULL : (qq_buddy_data *)purple_buddy_get_protocol_data(buddy); if (bd == NULL) { purple_debug_error("QQ", "Got an online buddy %u, but not in my buddy list\n", bs.uid); @@ -335,7 +335,7 @@ guint16 qq_process_get_buddies(guint8 *data, gint data_len, PurpleConnection *gc #endif buddy = qq_buddy_find_or_new(gc, bd.uid); - if (buddy == NULL || buddy->proto_data == NULL) { + if (buddy == NULL || purple_buddy_get_protocol_data(buddy) == NULL) { g_free(bd.nickname); continue; } @@ -343,7 +343,7 @@ guint16 qq_process_get_buddies(guint8 *data, gint data_len, PurpleConnection *gc bd.last_update = time(NULL); qq_update_buddy_status(gc, bd.uid, bd.status, bd.comm_flag); - g_memmove(buddy->proto_data, &bd, sizeof(qq_buddy_data)); + g_memmove(purple_buddy_get_protocol_data(buddy), &bd, sizeof(qq_buddy_data)); /* nickname has been copy to buddy_data do not free g_free(bd.nickname); */ @@ -570,7 +570,7 @@ void qq_process_buddy_change_status(guint8 *data, gint data_len, PurpleConnectio /* create no-auth buddy */ buddy = qq_buddy_new(gc, bs.uid); } - bd = (buddy == NULL) ? NULL : (qq_buddy_data *) buddy->proto_data; + bd = (buddy == NULL) ? NULL : (qq_buddy_data *)purple_buddy_get_protocol_data(buddy); if (bd == NULL) { purple_debug_warning("QQ", "Got status of no-auth buddy %u\n", bs.uid); return; @@ -662,9 +662,10 @@ void qq_update_buddyies_status(PurpleConnection *gc) for (it = buddies; it; it = it->next) { buddy = it->data; if (buddy == NULL) continue; - if (buddy->proto_data == NULL) continue; - bd = (qq_buddy_data *)buddy->proto_data; + bd = purple_buddy_get_protocol_data(buddy); + if (bd == NULL) continue; + if (bd->uid == 0) continue; if (bd->uid == qd->uid) continue; /* my status is always online in my buddy list */ if (tm_limit < bd->last_update) continue; @@ -684,16 +685,20 @@ void qq_buddy_data_free_all(PurpleConnection *gc) GSList *buddies, *it; gint count = 0; - qd = (qq_data *) (gc->proto_data); + qd = (qq_data *)purple_connection_get_protocol_data(gc); buddies = purple_find_buddies(purple_connection_get_account(gc), NULL); for (it = buddies; it; it = it->next) { + qq_buddy_data *qbd = NULL; + buddy = it->data; if (buddy == NULL) continue; - if (buddy->proto_data == NULL) continue; - qq_buddy_data_free(buddy->proto_data); - buddy->proto_data = NULL; + qbd = purple_buddy_get_protocol_data(buddy); + if (qbd == NULL) continue; + + qq_buddy_data_free(qbd); + purple_buddy_set_protocol_data(buddy, NULL); count++; } diff --git a/libpurple/protocols/qq/buddy_memo.c b/libpurple/protocols/qq/buddy_memo.c index a890cba7d4..ac8b22399f 100644 --- a/libpurple/protocols/qq/buddy_memo.c +++ b/libpurple/protocols/qq/buddy_memo.c @@ -1,3 +1,27 @@ +/** + * @file buddy_memo.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 "internal.h" #include "debug.h" #include "notify.h" @@ -53,7 +77,7 @@ static const gchar *memo_txt[] = { N_("Telephone"), N_("Address"), N_("Email"), - N_("ZipCode"), + N_("Postal Code"), N_("Note") }; diff --git a/libpurple/protocols/qq/buddy_memo.h b/libpurple/protocols/qq/buddy_memo.h index 9e5f0bc466..8ceb246f2e 100644 --- a/libpurple/protocols/qq/buddy_memo.h +++ b/libpurple/protocols/qq/buddy_memo.h @@ -1,3 +1,27 @@ +/** + * @file buddy_memo.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_MEMO_H_ #define _QQ_BUDDY_MEMO_H_ diff --git a/libpurple/protocols/qq/buddy_opt.c b/libpurple/protocols/qq/buddy_opt.c index 92d9ebceb3..d2527aa285 100644 --- a/libpurple/protocols/qq/buddy_opt.c +++ b/libpurple/protocols/qq/buddy_opt.c @@ -101,6 +101,7 @@ qq_buddy_data *qq_buddy_data_find(PurpleConnection *gc, guint32 uid) { gchar *who; PurpleBuddy *buddy; + qq_buddy_data *bd; g_return_val_if_fail(gc != NULL, NULL); @@ -113,11 +114,12 @@ qq_buddy_data *qq_buddy_data_find(PurpleConnection *gc, guint32 uid) purple_debug_error("QQ", "Can not find purple buddy of %u\n", uid); return NULL; } - if (buddy->proto_data == NULL) { + + if ((bd = purple_buddy_get_protocol_data(buddy)) == NULL) { purple_debug_error("QQ", "Can not find buddy data of %u\n", uid); return NULL; } - return (qq_buddy_data *)buddy->proto_data; + return bd; } void qq_buddy_data_free(qq_buddy_data *bd) @@ -149,7 +151,7 @@ PurpleBuddy *qq_buddy_new(PurpleConnection *gc, guint32 uid) purple_debug_info("QQ", "Add new purple buddy: [%u]\n", uid); who = uid_to_purple_name(uid); buddy = purple_buddy_new(gc->account, who, NULL); /* alias is NULL */ - buddy->proto_data = NULL; + purple_buddy_set_protocol_data(buddy, NULL); g_free(who); @@ -162,11 +164,14 @@ PurpleBuddy *qq_buddy_new(PurpleConnection *gc, guint32 uid) static void qq_buddy_free(PurpleBuddy *buddy) { + qq_buddy_data *bd; + g_return_if_fail(buddy); - if (buddy->proto_data) { - qq_buddy_data_free(buddy->proto_data); + + if ((bd = purple_buddy_get_protocol_data(buddy)) != NULL) { + qq_buddy_data_free(bd); } - buddy->proto_data = NULL; + purple_buddy_set_protocol_data(buddy, NULL); purple_blist_remove_buddy(buddy); } @@ -186,6 +191,7 @@ PurpleBuddy *qq_buddy_find(PurpleConnection *gc, guint32 uid) PurpleBuddy *qq_buddy_find_or_new(PurpleConnection *gc, guint32 uid) { PurpleBuddy *buddy; + qq_buddy_data *bd; g_return_val_if_fail(gc->account != NULL && uid != 0, NULL); @@ -197,11 +203,12 @@ PurpleBuddy *qq_buddy_find_or_new(PurpleConnection *gc, guint32 uid) } } - if (buddy->proto_data != NULL) { + if (purple_buddy_get_protocol_data(buddy) != NULL) { return buddy; } - buddy->proto_data = qq_buddy_data_new(uid); + bd = qq_buddy_data_new(uid); + purple_buddy_set_protocol_data(buddy, bd); return buddy; } @@ -691,7 +698,7 @@ void qq_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) if (!qd->is_login) return; /* IMPORTANT ! */ - uid = purple_name_to_uid(buddy->name); + uid = purple_name_to_uid(purple_buddy_get_name(buddy)); if (uid > 0) { if (qd->client_version > 2005) { request_add_buddy_no_auth_ex(gc, uid); @@ -782,6 +789,7 @@ void qq_process_add_buddy_no_auth(PurpleConnection *gc, gchar **segments; gchar *dest_uid, *reply; PurpleBuddy *buddy; + qq_buddy_data *bd; g_return_if_fail(data != NULL && data_len != 0); g_return_if_fail(uid != 0); @@ -826,10 +834,10 @@ void qq_process_add_buddy_no_auth(PurpleConnection *gc, if (buddy == NULL) { buddy = qq_buddy_new(gc, uid); } - if (buddy != NULL && buddy->proto_data != NULL) { + if (buddy != NULL && (bd = purple_buddy_get_protocol_data(buddy)) != NULL) { /* Not authorized now, free buddy data */ - qq_buddy_data_free(buddy->proto_data); - buddy->proto_data = NULL; + qq_buddy_data_free(bd); + purple_buddy_set_protocol_data(buddy, NULL); } add_buddy_authorize_input(gc, uid, NULL, 0); @@ -905,6 +913,7 @@ void qq_process_add_buddy_no_auth_ex(PurpleConnection *gc, void qq_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { qq_data *qd; + qq_buddy_data *bd; guint32 uid; g_return_if_fail(gc != NULL && gc->proto_data != NULL); @@ -914,7 +923,7 @@ void qq_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *grou if (!qd->is_login) return; - uid = purple_name_to_uid(buddy->name); + uid = purple_name_to_uid(purple_buddy_get_name(buddy)); if (uid > 0 && uid != qd->uid) { if (qd->client_version > 2005) { qq_request_auth_code(gc, QQ_AUTH_INFO_BUDDY, QQ_AUTH_INFO_REMOVE_BUDDY, uid); @@ -924,11 +933,11 @@ void qq_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *grou } } - if (buddy->proto_data) { - qq_buddy_data_free(buddy->proto_data); - buddy->proto_data = NULL; + if ((bd = purple_buddy_get_protocol_data(buddy)) != NULL) { + qq_buddy_data_free(bd); + purple_buddy_set_protocol_data(buddy, NULL); } else { - purple_debug_warning("QQ", "Empty buddy data of %s\n", buddy->name); + purple_debug_warning("QQ", "Empty buddy data of %s\n", purple_buddy_get_name(buddy)); } /* Do not call purple_blist_remove_buddy, @@ -1216,6 +1225,7 @@ static void server_buddy_rejected_me(PurpleConnection *gc, gchar *from, gchar *t gint bytes; gchar **segments; gchar *primary, *secondary; + qq_buddy_data *bd; g_return_if_fail(from != NULL && to != NULL); @@ -1255,10 +1265,10 @@ static void server_buddy_rejected_me(PurpleConnection *gc, gchar *from, gchar *t g_return_if_fail(uid != 0); buddy = qq_buddy_find(gc, uid); - if (buddy != NULL && buddy->proto_data != NULL) { + if (buddy != NULL && (bd = purple_buddy_get_protocol_data(buddy)) != NULL) { /* Not authorized now, free buddy data */ - qq_buddy_data_free(buddy->proto_data); - buddy->proto_data = NULL; + qq_buddy_data_free(bd); + purple_buddy_set_protocol_data(buddy, NULL); } } diff --git a/libpurple/protocols/qq/group_internal.c b/libpurple/protocols/qq/group_internal.c index 4176ec0b2b..e8f0645f69 100644 --- a/libpurple/protocols/qq/group_internal.c +++ b/libpurple/protocols/qq/group_internal.c @@ -103,16 +103,21 @@ static void room_data_free(qq_room_data *rmd) void qq_room_update_chat_info(PurpleChat *chat, qq_room_data *rmd) { + GHashTable *components; + if (rmd->title_utf8 != NULL && strlen(rmd->title_utf8) > 0) { purple_blist_alias_chat(chat, rmd->title_utf8); } - g_hash_table_replace(chat->components, + + components = purple_chat_get_components(chat); + + g_hash_table_replace(components, g_strdup(QQ_ROOM_KEY_INTERNAL_ID), g_strdup_printf("%u", rmd->id)); - g_hash_table_replace(chat->components, + g_hash_table_replace(components, g_strdup(QQ_ROOM_KEY_EXTERNAL_ID), g_strdup_printf("%u", rmd->ext_id)); - g_hash_table_replace(chat->components, + g_hash_table_replace(components, g_strdup(QQ_ROOM_KEY_TITLE_UTF8), g_strdup(rmd->title_utf8)); } @@ -251,11 +256,13 @@ qq_buddy_data *qq_room_buddy_find_or_new(PurpleConnection *gc, qq_room_data *rmd member->uid = member_uid; buddy = purple_find_buddy(purple_connection_get_account(gc), uid_to_purple_name(member_uid)); if (buddy != NULL) { - bd = (qq_buddy_data *) buddy->proto_data; + const gchar *alias = NULL; + + bd = purple_buddy_get_protocol_data(buddy); if (bd != NULL && bd->nickname != NULL) member->nickname = g_strdup(bd->nickname); - else if (buddy->alias != NULL) - member->nickname = g_strdup(buddy->alias); + else if ((alias = purple_buddy_get_alias(buddy)) != NULL) + member->nickname = g_strdup(alias); } rmd->members = g_list_append(rmd->members, member); } @@ -384,16 +391,19 @@ void qq_room_data_initial(PurpleConnection *gc) } count = 0; - for (node = ((PurpleBlistNode *) purple_group)->child; node != NULL; node = node->next) { + for (node = purple_blist_node_get_first_child((PurpleBlistNode *)purple_group); + node != NULL; + node = purple_blist_node_get_sibling_next(node)) + { if ( !PURPLE_BLIST_NODE_IS_CHAT(node)) { continue; } /* got one */ chat = (PurpleChat *) node; - if (account != chat->account) /* not qq account*/ + if (account != purple_chat_get_account(chat)) /* not qq account*/ continue; - rmd = room_data_new_by_hashtable(gc, chat->components); + rmd = room_data_new_by_hashtable(gc, purple_chat_get_components(chat)); qd->groups = g_list_append(qd->groups, rmd); count++; } diff --git a/libpurple/protocols/qq/im.c b/libpurple/protocols/qq/im.c index 6d75d75de9..c4363bf826 100644 --- a/libpurple/protocols/qq/im.c +++ b/libpurple/protocols/qq/im.c @@ -718,7 +718,7 @@ void qq_got_message(PurpleConnection *gc, const gchar *msg) qq_buddy_find_or_new(gc, qd->uid); from = uid_to_purple_name(qd->uid); - serv_got_im(gc, from, msg, PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NOTIFY, now); + serv_got_im(gc, from, msg, PURPLE_MESSAGE_SYSTEM, now); g_free(from); } @@ -788,7 +788,7 @@ static void process_im_text(PurpleConnection *gc, guint8 *data, gint len, qq_im_ /* create no-auth buddy */ buddy = qq_buddy_new(gc, im_header->uid_from); } - bd = (buddy == NULL) ? NULL : (qq_buddy_data *) buddy->proto_data; + bd = (buddy == NULL) ? NULL : purple_buddy_get_protocol_data(buddy); if (bd != NULL) { bd->client_tag = im_header->version_from; bd->face = im_text.sender_icon; @@ -889,7 +889,7 @@ static void process_extend_im_text(PurpleConnection *gc, guint8 *data, gint len, /* create no-auth buddy */ buddy = qq_buddy_new(gc, im_header->uid_from); } - bd = (buddy == NULL) ? NULL : (qq_buddy_data *) buddy->proto_data; + bd = (buddy == NULL) ? NULL : purple_buddy_get_protocol_data(buddy); if (bd != NULL) { bd->client_tag = im_header->version_from; bd->face = im_text.sender_icon; diff --git a/libpurple/protocols/qq/qq.c b/libpurple/protocols/qq/qq.c index 9dbb11eeb1..1fc436d22c 100644 --- a/libpurple/protocols/qq/qq.c +++ b/libpurple/protocols/qq/qq.c @@ -248,7 +248,7 @@ static gchar *qq_status_text(PurpleBuddy *b) qq_buddy_data *bd; GString *status; - bd = (qq_buddy_data *) b->proto_data; + bd = purple_buddy_get_protocol_data(b); if (bd == NULL) return NULL; @@ -291,7 +291,7 @@ static void qq_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gbo g_return_if_fail(b != NULL); - bd = (qq_buddy_data *) b->proto_data; + bd = purple_buddy_get_protocol_data(b); if (bd == NULL) return; @@ -382,11 +382,12 @@ static const char *qq_list_emblem(PurpleBuddy *b) qq_data *qd; qq_buddy_data *buddy; - if (!b || !(account = b->account) || - !(gc = purple_account_get_connection(account)) || !(qd = gc->proto_data)) + if (!b || !(account = purple_buddy_get_account(b)) || + !(gc = purple_account_get_connection(account)) || + !(qd = purple_connection_get_protocol_data(gc))) return NULL; - buddy = (qq_buddy_data *)b->proto_data; + buddy = purple_buddy_get_protocol_data(b); if (!buddy) { return "not-authorized"; } @@ -708,8 +709,9 @@ static void action_about_openq(PurplePluginAction *action) static void action_chat_quit(PurpleBlistNode * node) { PurpleChat *chat = (PurpleChat *)node; - PurpleConnection *gc = purple_account_get_connection(chat->account); - GHashTable *components = chat -> components; + PurpleAccount *account = purple_chat_get_account(chat); + PurpleConnection *gc = purple_account_get_connection(account); + GHashTable *components = purple_chat_get_components(chat); gchar *num_str; guint32 room_id; @@ -727,8 +729,9 @@ static void action_chat_quit(PurpleBlistNode * node) static void action_chat_get_info(PurpleBlistNode * node) { PurpleChat *chat = (PurpleChat *)node; - PurpleConnection *gc = purple_account_get_connection(chat->account); - GHashTable *components = chat -> components; + PurpleAccount *account = purple_chat_get_account(chat); + PurpleConnection *gc = purple_account_get_connection(account); + GHashTable *components = purple_chat_get_components(chat); gchar *num_str; guint32 room_id; @@ -815,7 +818,7 @@ static void qq_add_buddy_from_menu_cb(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); qq_add_buddy(gc, buddy, NULL); } @@ -830,12 +833,12 @@ static void qq_modify_buddy_memo_from_menu_cb(PurpleBlistNode *node, gpointer da g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *)node; - g_return_if_fail(NULL != buddy && NULL != buddy->proto_data); + g_return_if_fail(NULL != buddy); - gc = purple_account_get_connection(buddy->account); + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); g_return_if_fail(NULL != gc); - bd = (qq_buddy_data *)buddy->proto_data; + bd = (qq_buddy_data *)purple_buddy_get_protocol_data(buddy); g_return_if_fail(NULL != bd); bd_uid = bd->uid; @@ -849,7 +852,7 @@ static GList *qq_buddy_menu(PurpleBuddy *buddy) { GList *m = NULL; PurpleMenuAction *act; - qq_buddy_data *bd = (qq_buddy_data *)buddy->proto_data; + qq_buddy_data *bd = purple_buddy_get_protocol_data(buddy); if (bd == NULL) { act = purple_menu_action_new(_("Add Buddy"), diff --git a/libpurple/protocols/qq/send_file.c b/libpurple/protocols/qq/send_file.c index 85441d97e3..38d9504269 100644 --- a/libpurple/protocols/qq/send_file.c +++ b/libpurple/protocols/qq/send_file.c @@ -808,7 +808,7 @@ void qq_process_recv_file_request(guint8 *data, gint data_len, guint32 sender_ui "Received a FACE ip detect from %d, so he/she must be online :)\n", sender_uid); b = purple_find_buddy(gc->account, sender_name); - bd = (b == NULL) ? NULL : (qq_buddy_data *) b->proto_data; + bd = (b == NULL) ? NULL : purple_buddy_get_protocol_data(b); if (bd) { if(0 != info->remote_real_ip) { g_memmove(&(bd->ip), &info->remote_real_ip, sizeof(bd->ip)); diff --git a/libpurple/protocols/sametime/sametime.c b/libpurple/protocols/sametime/sametime.c index a3c59a298b..5e35c3c3fe 100644 --- a/libpurple/protocols/sametime/sametime.c +++ b/libpurple/protocols/sametime/sametime.c @@ -663,7 +663,6 @@ static void blist_export(PurpleConnection *gc, struct mwSametimeList *stlist) { */ PurpleAccount *acct; - PurpleBuddyList *blist; PurpleBlistNode *gn, *cn, *bn; PurpleGroup *grp; PurpleBuddy *bdy; @@ -674,10 +673,8 @@ static void blist_export(PurpleConnection *gc, struct mwSametimeList *stlist) { acct = purple_connection_get_account(gc); g_return_if_fail(acct != NULL); - blist = purple_get_blist(); - g_return_if_fail(blist != NULL); - - for(gn = blist->root; gn; gn = gn->next) { + for(gn = purple_blist_get_root(); gn; + gn = purple_blist_node_get_sibling_next(gn)) { const char *owner; const char *gname; enum mwSametimeGroupType gtype; @@ -702,13 +699,13 @@ static void blist_export(PurpleConnection *gc, struct mwSametimeList *stlist) { /* the group's actual name may be different from the purple group's name. Find whichever is there */ gname = purple_blist_node_get_string(gn, GROUP_KEY_NAME); - if(! gname) gname = grp->name; + if(! gname) gname = purple_group_get_name(grp); /* we save this, but never actually honor it */ gopen = ! purple_blist_node_get_bool(gn, GROUP_KEY_COLLAPSED); stg = mwSametimeGroup_new(stlist, gtype, gname); - mwSametimeGroup_setAlias(stg, grp->name); + mwSametimeGroup_setAlias(stg, purple_group_get_name(grp)); mwSametimeGroup_setOpen(stg, gopen); /* don't attempt to put buddies in a dynamic group, it breaks @@ -716,27 +713,31 @@ static void blist_export(PurpleConnection *gc, struct mwSametimeList *stlist) { if(gtype == mwSametimeGroup_DYNAMIC) continue; - for(cn = gn->child; cn; cn = cn->next) { + for(cn = purple_blist_node_get_first_child(gn); + cn; + cn = purple_blist_node_get_sibling_next(cn)) { if(! PURPLE_BLIST_NODE_IS_CONTACT(cn)) continue; - for(bn = cn->child; bn; bn = bn->next) { + for(bn = purple_blist_node_get_first_child(cn); + bn; + bn = purple_blist_node_get_sibling_next(bn)) { if(! PURPLE_BLIST_NODE_IS_BUDDY(bn)) continue; if(! PURPLE_BLIST_NODE_SHOULD_SAVE(bn)) continue; bdy = (PurpleBuddy *) bn; - if(bdy->account == acct) { + if(purple_buddy_get_account(bdy) == acct) { struct mwSametimeUser *stu; enum mwSametimeUserType utype; - idb.user = bdy->name; + idb.user = (char *)purple_buddy_get_name(bdy); utype = purple_blist_node_get_int(bn, BUDDY_KEY_TYPE); if(! utype) utype = mwSametimeUser_NORMAL; stu = mwSametimeUser_new(stg, utype, &idb); - mwSametimeUser_setShortName(stu, bdy->server_alias); - mwSametimeUser_setAlias(stu, bdy->alias); + mwSametimeUser_setShortName(stu, purple_buddy_get_server_alias(bdy)); + mwSametimeUser_setAlias(stu, purple_buddy_get_local_buddy_alias(bdy)); } } } @@ -816,7 +817,7 @@ static void blist_schedule(struct mwPurplePluginData *pd) { static gboolean buddy_is_external(PurpleBuddy *b) { g_return_val_if_fail(b != NULL, FALSE); - return purple_str_has_prefix(b->name, "@E "); + return purple_str_has_prefix(purple_buddy_get_name(b), "@E "); } @@ -825,7 +826,7 @@ static gboolean buddy_is_external(PurpleBuddy *b) { static void buddy_add(struct mwPurplePluginData *pd, PurpleBuddy *buddy) { - struct mwAwareIdBlock idb = { mwAware_USER, (char *) buddy->name, NULL }; + struct mwAwareIdBlock idb = { mwAware_USER, (char *) purple_buddy_get_name(buddy), NULL }; struct mwAwareList *list; PurpleGroup *group; @@ -890,7 +891,7 @@ static void group_add(struct mwPurplePluginData *pd, GList *add; n = purple_blist_node_get_string((PurpleBlistNode *) group, GROUP_KEY_NAME); - if(! n) n = group->name; + if(! n) n = purple_group_get_name(group); idb.user = (char *) n; add = g_list_prepend(NULL, &idb); @@ -926,7 +927,8 @@ static PurpleGroup *group_ensure(PurpleConnection *gc, NSTR(name), NSTR(alias)); /* first attempt at finding the group, by the name key */ - for(gn = blist->root; gn; gn = gn->next) { + for(gn = purple_blist_get_root(); gn; + gn = purple_blist_node_get_sibling_next(gn)) { const char *n, *o; if(! PURPLE_BLIST_NODE_IS_GROUP(gn)) continue; n = purple_blist_node_get_string(gn, GROUP_KEY_NAME); @@ -1006,23 +1008,27 @@ static void group_clear(PurpleGroup *group, PurpleAccount *acct, gboolean del) { g_return_if_fail(group != NULL); - DEBUG_INFO("clearing members from pruned group %s\n", NSTR(group->name)); + DEBUG_INFO("clearing members from pruned group %s\n", NSTR(purple_group_get_name(group))); gc = purple_account_get_connection(acct); g_return_if_fail(gc != NULL); gn = (PurpleBlistNode *) group; - for(cn = gn->child; cn; cn = cn->next) { + for(cn = purple_blist_node_get_first_child(gn); + cn; + cn = purple_blist_node_get_sibling_next(cn)) { if(! PURPLE_BLIST_NODE_IS_CONTACT(cn)) continue; - for(bn = cn->child; bn; bn = bn->next) { + for(bn = purple_blist_node_get_first_child(cn); + bn; + bn = purple_blist_node_get_sibling_next(bn)) { PurpleBuddy *gb = (PurpleBuddy *) bn; if(! PURPLE_BLIST_NODE_IS_BUDDY(bn)) continue; - if(gb->account == acct) { - DEBUG_INFO("clearing %s from group\n", NSTR(gb->name)); + if(purple_buddy_get_account(gb) == acct) { + DEBUG_INFO("clearing %s from group\n", NSTR(purple_buddy_get_name(gb))); prune = g_list_prepend(prune, gb); } } @@ -1059,7 +1065,7 @@ static void group_prune(PurpleConnection *gc, PurpleGroup *group, g_return_if_fail(group != NULL); - DEBUG_INFO("pruning membership of group %s\n", NSTR(group->name)); + DEBUG_INFO("pruning membership of group %s\n", NSTR(purple_group_get_name(group))); acct = purple_connection_get_account(gc); g_return_if_fail(acct != NULL); @@ -1078,18 +1084,22 @@ static void group_prune(PurpleConnection *gc, PurpleGroup *group, gn = (PurpleBlistNode *) group; - for(cn = gn->child; cn; cn = cn->next) { + for(cn = purple_blist_node_get_first_child(gn); + cn; + cn = purple_blist_node_get_sibling_next(cn)) { if(! PURPLE_BLIST_NODE_IS_CONTACT(cn)) continue; - for(bn = cn->child; bn; bn = bn->next) { + for(bn = purple_blist_node_get_first_child(cn); + bn; + bn = purple_blist_node_get_sibling_next(bn)) { PurpleBuddy *gb = (PurpleBuddy *) bn; if(! PURPLE_BLIST_NODE_IS_BUDDY(bn)) continue; /* if the account is correct and they're not in our table, mark them for pruning */ - if(gb->account == acct && !g_hash_table_lookup(stusers, gb->name)) { - DEBUG_INFO("marking %s for pruning\n", NSTR(gb->name)); + if(purple_buddy_get_account(gb) == acct && !g_hash_table_lookup(stusers, purple_buddy_get_name(gb))) { + DEBUG_INFO("marking %s for pruning\n", NSTR(purple_buddy_get_name(gb))); prune = g_list_prepend(prune, gb); } } @@ -1145,7 +1155,8 @@ static void blist_sync(PurpleConnection *gc, struct mwSametimeList *stlist) { g_list_free(gtl); /* find all groups which should be pruned from the local list */ - for(gn = blist->root; gn; gn = gn->next) { + for(gn = purple_blist_get_root(); gn; + gn = purple_blist_node_get_sibling_next(gn)) { PurpleGroup *grp = (PurpleGroup *) gn; const char *gname, *owner; struct mwSametimeGroup *stgrp; @@ -1164,12 +1175,12 @@ static void blist_sync(PurpleConnection *gc, struct mwSametimeList *stlist) { /* we actually are synching by this key as opposed to the group title, which can be different things in the st list */ gname = purple_blist_node_get_string(gn, GROUP_KEY_NAME); - if(! gname) gname = grp->name; + if(! gname) gname = purple_group_get_name(grp); stgrp = g_hash_table_lookup(stgroups, gname); if(! stgrp) { /* remove the whole group */ - DEBUG_INFO("marking group %s for pruning\n", grp->name); + DEBUG_INFO("marking group %s for pruning\n", purple_group_get_name(grp)); g_prune = g_list_prepend(g_prune, grp); } else { @@ -1284,6 +1295,7 @@ static void blist_menu_nab(PurpleBlistNode *node, gpointer data) { GString *str; char *tmp; + const char *gname; g_return_if_fail(pd != NULL); @@ -1295,11 +1307,12 @@ static void blist_menu_nab(PurpleBlistNode *node, gpointer data) { str = g_string_new(NULL); tmp = (char *) purple_blist_node_get_string(node, GROUP_KEY_NAME); + gname = purple_group_get_name(group); - g_string_append_printf(str, _("<b>Group Title:</b> %s<br>"), group->name); + g_string_append_printf(str, _("<b>Group Title:</b> %s<br>"), gname); g_string_append_printf(str, _("<b>Notes Group ID:</b> %s<br>"), tmp); - tmp = g_strdup_printf(_("Info for Group %s"), group->name); + tmp = g_strdup_printf(_("Info for Group %s"), gname); purple_notify_formatted(gc, tmp, _("Notes Address Book Information"), NULL, str->str, NULL, NULL); @@ -1356,19 +1369,24 @@ static void blist_init(PurpleAccount *acct) { PurpleBlistNode *gnode, *cnode, *bnode; GList *add_buds = NULL; - for(gnode = purple_get_blist()->root; gnode; gnode = gnode->next) { + for(gnode = purple_blist_get_root(); gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) { if(! PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for(cnode = gnode->child; cnode; cnode = cnode->next) { + for(cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) { if(! PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for(bnode = cnode->child; bnode; bnode = bnode->next) { + for(bnode = purple_blist_node_get_first_child(cnode); + bnode; + bnode = purple_blist_node_get_sibling_next(bnode)) { PurpleBuddy *b; if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; - + b = (PurpleBuddy *)bnode; - if(b->account == acct) { + if(purple_buddy_get_account(b) == acct) { add_buds = g_list_append(add_buds, b); } } @@ -1388,7 +1406,6 @@ static void services_starting(struct mwPurplePluginData *pd) { PurpleConnection *gc; PurpleAccount *acct; struct mwStorageUnit *unit; - PurpleBuddyList *blist; PurpleBlistNode *l; gc = pd->gc; @@ -1399,8 +1416,8 @@ static void services_starting(struct mwPurplePluginData *pd) { mwServiceStorage_load(pd->srvc_store, unit, fetch_blist_cb, pd, NULL); /* find all the NAB groups and subscribe to them */ - blist = purple_get_blist(); - for(l = blist->root; l; l = l->next) { + for(l = purple_blist_get_root(); l; + l = purple_blist_node_get_sibling_next(l)) { PurpleGroup *group = (PurpleGroup *) l; enum mwSametimeGroupType gt; const char *owner; @@ -3239,10 +3256,10 @@ static const char* mw_prpl_list_emblem(PurpleBuddy *b) static char *mw_prpl_status_text(PurpleBuddy *b) { PurpleConnection *gc; struct mwPurplePluginData *pd; - struct mwAwareIdBlock t = { mwAware_USER, b->name, NULL }; + struct mwAwareIdBlock t = { mwAware_USER, (char *)purple_buddy_get_name(b), NULL }; const char *ret = NULL; - if ((gc = purple_account_get_connection(b->account)) + if ((gc = purple_account_get_connection(purple_buddy_get_account(b))) && (pd = gc->proto_data)) ret = mwServiceAware_getText(pd->srvc_aware, &t); @@ -3299,13 +3316,13 @@ static char *user_supports_text(struct mwServiceAware *srvc, const char *who) { static void mw_prpl_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full) { PurpleConnection *gc; struct mwPurplePluginData *pd = NULL; - struct mwAwareIdBlock idb = { mwAware_USER, b->name, NULL }; + struct mwAwareIdBlock idb = { mwAware_USER, (char *)purple_buddy_get_name(b), NULL }; const char *message = NULL; const char *status; char *tmp; - if ((gc = purple_account_get_connection(b->account)) + if ((gc = purple_account_get_connection(purple_buddy_get_account(b))) && (pd = gc->proto_data)) message = mwServiceAware_getText(pd->srvc_aware, &idb); @@ -3321,7 +3338,7 @@ static void mw_prpl_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info } if(full && pd != NULL) { - tmp = user_supports_text(pd->srvc_aware, b->name); + tmp = user_supports_text(pd->srvc_aware, purple_buddy_get_name(b)); if(tmp) { purple_notify_user_info_add_pair(user_info, _("Supports"), tmp); g_free(tmp); @@ -3333,34 +3350,34 @@ static void mw_prpl_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info } } +static GList *mw_prpl_status_types(PurpleAccount *acct) +{ + GList *types = NULL; + PurpleStatusType *type; -static GList *mw_prpl_status_types(PurpleAccount *acct) { - GList *types = NULL; - PurpleStatusType *type; + type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE, + MW_STATE_ACTIVE, NULL, TRUE, TRUE, FALSE, + MW_STATE_MESSAGE, _("Message"), purple_value_new(PURPLE_TYPE_STRING), + NULL); + types = g_list_append(types, type); - type = purple_status_type_new(PURPLE_STATUS_AVAILABLE, MW_STATE_ACTIVE, - NULL, TRUE); - purple_status_type_add_attr(type, MW_STATE_MESSAGE, _("Message"), - purple_value_new(PURPLE_TYPE_STRING)); - types = g_list_append(types, type); + type = purple_status_type_new_with_attrs(PURPLE_STATUS_AWAY, + MW_STATE_AWAY, NULL, TRUE, TRUE, FALSE, + MW_STATE_MESSAGE, _("Message"), purple_value_new(PURPLE_TYPE_STRING), + NULL); + types = g_list_append(types, type); - type = purple_status_type_new(PURPLE_STATUS_AWAY, MW_STATE_AWAY, - NULL, TRUE); - purple_status_type_add_attr(type, MW_STATE_MESSAGE, _("Message"), - purple_value_new(PURPLE_TYPE_STRING)); - types = g_list_append(types, type); - - type = purple_status_type_new(PURPLE_STATUS_UNAVAILABLE, MW_STATE_BUSY, - _("Do Not Disturb"), TRUE); - purple_status_type_add_attr(type, MW_STATE_MESSAGE, _("Message"), - purple_value_new(PURPLE_TYPE_STRING)); - types = g_list_append(types, type); - - type = purple_status_type_new(PURPLE_STATUS_OFFLINE, MW_STATE_OFFLINE, - NULL, TRUE); - types = g_list_append(types, type); + type = purple_status_type_new_with_attrs(PURPLE_STATUS_UNAVAILABLE, + MW_STATE_BUSY, _("Do Not Disturb"), TRUE, TRUE, FALSE, + MW_STATE_MESSAGE, _("Message"), purple_value_new(PURPLE_TYPE_STRING), + NULL); + types = g_list_append(types, type); + + type = purple_status_type_new_full(PURPLE_STATUS_OFFLINE, + MW_STATE_OFFLINE, NULL, TRUE, TRUE, FALSE); + types = g_list_append(types, type); - return types; + return types; } @@ -3383,7 +3400,7 @@ static void conf_create_prompt_join(PurpleBuddy *buddy, struct mwConference *conf; struct mwIdBlock idb = { NULL, NULL }; - acct = buddy->account; + acct = purple_buddy_get_account(buddy); gc = purple_account_get_connection(acct); pd = gc->proto_data; srvc = pd->srvc_conf; @@ -3397,7 +3414,7 @@ static void conf_create_prompt_join(PurpleBuddy *buddy, conf = mwConference_new(srvc, topic); mwConference_open(conf); - idb.user = buddy->name; + idb.user = (char *)purple_buddy_get_name(buddy); mwConference_invite(conf, &idb, invite); } @@ -3417,7 +3434,7 @@ static void blist_menu_conf_create(PurpleBuddy *buddy, const char *msg) { g_return_if_fail(buddy != NULL); - acct = buddy->account; + acct = purple_buddy_get_account(buddy); g_return_if_fail(acct != NULL); gc = purple_account_get_connection(acct); @@ -3437,7 +3454,7 @@ static void blist_menu_conf_create(PurpleBuddy *buddy, const char *msg) { msgA = _("Create conference with user"); msgB = _("Please enter a topic for the new conference, and an invitation" " message to be sent to %s"); - msg1 = g_strdup_printf(msgB, buddy->name); + msg1 = g_strdup_printf(msgB, purple_buddy_get_name(buddy)); purple_request_fields(gc, _("New Conference"), msgA, msg1, fields, @@ -3474,7 +3491,7 @@ static void conf_select_prompt_invite(PurpleBuddy *buddy, blist_menu_conf_create(buddy, msg); } else { - struct mwIdBlock idb = { buddy->name, NULL }; + struct mwIdBlock idb = { (char *)purple_buddy_get_name(buddy), NULL }; mwConference_invite(d, &idb, msg); } } @@ -3495,7 +3512,7 @@ static void blist_menu_conf_list(PurpleBuddy *buddy, const char *msgB; char *msg; - acct = buddy->account; + acct = purple_buddy_get_account(buddy); g_return_if_fail(acct != NULL); gc = purple_account_get_connection(acct); @@ -3523,7 +3540,7 @@ static void blist_menu_conf_list(PurpleBuddy *buddy, msgB = _("Select a conference from the list below to send an invite to" " user %s. Select \"Create New Conference\" if you'd like to" " create a new conference to invite this user to."); - msg = g_strdup_printf(msgB, buddy->name); + msg = g_strdup_printf(msgB, purple_buddy_get_name(buddy)); purple_request_fields(gc, _("Invite to Conference"), msgA, msg, fields, @@ -3545,7 +3562,7 @@ static void blist_menu_conf(PurpleBlistNode *node, gpointer data) { g_return_if_fail(node != NULL); g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); - acct = buddy->account; + acct = purple_buddy_get_account(buddy); g_return_if_fail(acct != NULL); gc = purple_account_get_connection(acct); @@ -4186,8 +4203,8 @@ static void mw_prpl_get_info(PurpleConnection *gc, const char *who) { if(b) { guint32 type; - if(b->server_alias) { - purple_notify_user_info_add_pair(user_info, _("Full Name"), b->server_alias); + if(purple_buddy_get_server_alias(b)) { + purple_notify_user_info_add_pair(user_info, _("Full Name"), purple_buddy_get_server_alias(b)); } type = purple_blist_node_get_int((PurpleBlistNode *) b, BUDDY_KEY_CLIENT); @@ -4329,10 +4346,10 @@ static void notify_im(PurpleConnection *gc, GList *row, void *user_data) { static void notify_add(PurpleConnection *gc, GList *row, void *user_data) { BuddyAddData *data = user_data; - char *group_name = NULL; + const char *group_name = NULL; if (data && data->group) { - group_name = data->group->name; + group_name = purple_group_get_name(data->group); } purple_blist_request_add_buddy(purple_connection_get_account(gc), @@ -4414,7 +4431,7 @@ static void add_buddy_resolved(struct mwServiceResolve *srvc, buddy = data->buddy; - gc = purple_account_get_connection(buddy->account); + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); pd = gc->proto_data; if(results) @@ -4515,7 +4532,7 @@ static void mw_prpl_add_buddy(PurpleConnection *gc, srvc = pd->srvc_resolve; - query = g_list_prepend(NULL, buddy->name); + query = g_list_prepend(NULL, (char *)purple_buddy_get_name(buddy)); flags = mwResolveFlag_FIRST | mwResolveFlag_USERS; req = mwServiceResolve_resolve(srvc, query, flags, add_buddy_resolved, @@ -4568,7 +4585,7 @@ static void mw_prpl_add_buddies(PurpleConnection *gc, /* convert PurpleBuddy into a mwAwareIdBlock */ idb->type = mwAware_USER; - idb->user = (char *) b->name; + idb->user = (char *) purple_buddy_get_name(b); idb->community = NULL; /* put idb into the list associated with the buddy's group */ @@ -4593,7 +4610,7 @@ static void mw_prpl_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { struct mwPurplePluginData *pd; - struct mwAwareIdBlock idb = { mwAware_USER, buddy->name, NULL }; + struct mwAwareIdBlock idb = { mwAware_USER, (char *)purple_buddy_get_name(buddy), NULL }; struct mwAwareList *list; GList *rem = g_list_prepend(NULL, &idb); diff --git a/libpurple/protocols/silc/buddy.c b/libpurple/protocols/silc/buddy.c index 112d796ddd..7b2a055ff2 100644 --- a/libpurple/protocols/silc/buddy.c +++ b/libpurple/protocols/silc/buddy.c @@ -322,9 +322,12 @@ static void silcpurple_buddy_keyagr(PurpleBlistNode *node, gpointer data) { PurpleBuddy *buddy; + PurpleAccount *account; buddy = (PurpleBuddy *)node; - silcpurple_buddy_keyagr_do(buddy->account->gc, buddy->name, FALSE); + account = purple_buddy_get_account(buddy); + silcpurple_buddy_keyagr_do(purple_account_get_connection(account), + purple_buddy_get_name(buddy), FALSE); } @@ -341,12 +344,12 @@ silcpurple_buddy_resetkey(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); b = (PurpleBuddy *) node; - gc = purple_account_get_connection(b->account); + gc = purple_account_get_connection(purple_buddy_get_account(b)); sg = gc->proto_data; /* Find client entry */ clients = silc_client_get_clients_local(sg->client, sg->conn, - b->name, FALSE); + purple_buddy_get_name(b), FALSE); if (!clients) return; @@ -467,9 +470,9 @@ silcpurple_buddy_privkey_menu(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); - silcpurple_buddy_privkey(gc, buddy->name); + silcpurple_buddy_privkey(gc, purple_buddy_get_name(buddy)); } @@ -596,9 +599,9 @@ silcpurple_buddy_getkey_menu(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); - silcpurple_buddy_getkey(gc, buddy->name); + silcpurple_buddy_getkey(gc, purple_buddy_get_name(buddy)); } static void @@ -613,7 +616,7 @@ silcpurple_buddy_showkey(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); b = (PurpleBuddy *) node; - gc = purple_account_get_connection(b->account); + gc = purple_account_get_connection(purple_buddy_get_account(b)); sg = gc->proto_data; pkfile = purple_blist_node_get_string(node, "public-key"); @@ -624,7 +627,7 @@ silcpurple_buddy_showkey(PurpleBlistNode *node, gpointer data) return; } - silcpurple_show_public_key(sg, b->name, public_key, NULL, NULL); + silcpurple_show_public_key(sg, purple_buddy_get_name(b), public_key, NULL, NULL); silc_pkcs_public_key_free(public_key); } @@ -686,6 +689,7 @@ void silcpurple_get_info(PurpleConnection *gc, const char *who) if (b) { /* See if we have this buddy's public key. If we do use that to search the details. */ + gpointer proto_data; filename = purple_blist_node_get_string((PurpleBlistNode *)b, "public-key"); if (filename) { /* Call WHOIS. The user info is displayed in the WHOIS @@ -695,15 +699,15 @@ void silcpurple_get_info(PurpleConnection *gc, const char *who) return; } - if (!b->proto_data) { + if (!(proto_data = purple_buddy_get_protocol_data(b))) { g_snprintf(tmp, sizeof(tmp), - _("User %s is not present in the network"), b->name); + _("User %s is not present in the network"), purple_buddy_get_name(b)); purple_notify_error(gc, _("User Information"), _("Cannot get user information"), tmp); return; } - client_entry = silc_client_get_client_by_id(client, conn, b->proto_data); + client_entry = silc_client_get_client_by_id(client, conn, proto_data); if (client_entry) { /* Call WHOIS. The user info is displayed in the WHOIS command reply. */ @@ -721,7 +725,7 @@ silcpurple_add_buddy_pk_no(SilcPurpleBuddyRes r) { char tmp[512]; g_snprintf(tmp, sizeof(tmp), _("The %s buddy is not trusted"), - r->b->name); + purple_buddy_get_name(r->b)); purple_notify_error(r->client->application, _("Add Buddy"), tmp, _("You cannot receive buddy notifications until you " "import his/her public key. You can use the Get Public Key " @@ -1033,7 +1037,7 @@ silcpurple_add_buddy_ask_import(void *user_data, const char *name) /* Now verify the public key */ r->offline_pk = silc_pkcs_public_key_encode(r->public_key, &r->offline_pk_len); - silcpurple_verify_public_key(r->client, r->conn, r->b->name, + silcpurple_verify_public_key(r->client, r->conn, purple_buddy_get_name(r->b), SILC_CONN_CLIENT, r->public_key, silcpurple_add_buddy_save, r); } @@ -1071,7 +1075,7 @@ silcpurple_add_buddy_ask_pk(SilcPurpleBuddyRes r) { char tmp[512]; g_snprintf(tmp, sizeof(tmp), _("The %s buddy is not present in the network"), - r->b->name); + purple_buddy_get_name(r->b)); purple_request_action(r->client->application, _("Add Buddy"), tmp, _("To add the buddy you must import his/her public key. " "Press Import to import a public key."), 0, @@ -1209,6 +1213,7 @@ silcpurple_add_buddy_resolved(SilcClient client, const char *filename; SilcClientEntry client_entry = NULL; SilcUInt16 cmd_ident; + const char *name; filename = purple_blist_node_get_string((PurpleBlistNode *)b, "public-key"); @@ -1246,17 +1251,19 @@ silcpurple_add_buddy_resolved(SilcClient client, silc_dlist_start(clients); client_entry = silc_dlist_get(clients); + name = purple_buddy_get_name(b); + /* If we searched using public keys and more than one entry was found the same person is logged on multiple times. */ - if (silc_dlist_count(clients) > 1 && r->pubkey_search && b->name) { + if (silc_dlist_count(clients) > 1 && r->pubkey_search && name) { if (r->init) { /* Find the entry that closest matches to the buddy nickname. */ SilcClientEntry entry; silc_dlist_start(clients); while ((entry = silc_dlist_get(clients))) { - if (!g_ascii_strncasecmp(b->name, entry->nickname, - strlen(b->name))) { + if (!g_ascii_strncasecmp(name, entry->nickname, + strlen(name))) { client_entry = entry; break; } @@ -1271,7 +1278,7 @@ silcpurple_add_buddy_resolved(SilcClient client, /* The client was found. Now get its public key and verify that before adding the buddy. */ memset(&userpk, 0, sizeof(userpk)); - b->proto_data = silc_memdup(&client_entry->id, sizeof(client_entry->id)); + purple_buddy_set_protocol_data(b, silc_memdup(&client_entry->id, sizeof(client_entry->id))); r->client_id = client_entry->id; /* Get the public key from attributes, if not present then @@ -1335,7 +1342,7 @@ silcpurple_add_buddy_i(PurpleConnection *gc, PurpleBuddy *b, gboolean init) SilcClientConnection conn = sg->conn; SilcPurpleBuddyRes r; SilcBuffer attrs; - const char *filename, *name = b->name; + const char *filename, *name = purple_buddy_get_name(b); r = silc_calloc(1, sizeof(*r)); if (!r) @@ -1395,31 +1402,33 @@ void silcpurple_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup void silcpurple_send_buddylist(PurpleConnection *gc) { - PurpleBuddyList *blist; PurpleBlistNode *gnode, *cnode, *bnode; PurpleBuddy *buddy; PurpleAccount *account; account = purple_connection_get_account(gc); - if ((blist = purple_get_blist()) != NULL) + for (gnode = purple_blist_get_root(); + gnode != NULL; + gnode = purple_blist_node_get_sibling_next(gnode)) { - for (gnode = blist->root; gnode != NULL; gnode = gnode->next) + if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) + continue; + for (cnode = purple_blist_node_get_first_child(gnode); + cnode != NULL; + cnode = purple_blist_node_get_sibling_next(cnode)) { - if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) + if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for (cnode = gnode->child; cnode != NULL; cnode = cnode->next) + for (bnode = purple_blist_node_get_first_child(cnode); + bnode != NULL; + bnode = purple_blist_node_get_sibling_next(bnode)) { - if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) + if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; - for (bnode = cnode->child; bnode != NULL; bnode = bnode->next) - { - if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) - continue; - buddy = (PurpleBuddy *)bnode; - if (purple_buddy_get_account(buddy) == account) - silcpurple_add_buddy_i(gc, buddy, TRUE); - } + buddy = (PurpleBuddy *)bnode; + if (purple_buddy_get_account(buddy) == account) + silcpurple_add_buddy_i(gc, buddy, TRUE); } } } @@ -1428,7 +1437,7 @@ void silcpurple_send_buddylist(PurpleConnection *gc) void silcpurple_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { - silc_free(buddy->proto_data); + silc_free(purple_buddy_get_protocol_data(buddy)); } void silcpurple_idle_set(PurpleConnection *gc, int idle) @@ -1469,10 +1478,12 @@ void silcpurple_idle_set(PurpleConnection *gc, int idle) char *silcpurple_status_text(PurpleBuddy *b) { - SilcPurple sg = b->account->gc->proto_data; + PurpleAccount *account = purple_buddy_get_account(b); + PurpleConnection *gc = purple_account_get_connection(account); + SilcPurple sg = gc->proto_data; SilcClient client = sg->client; SilcClientConnection conn = sg->conn; - SilcClientID *client_id = b->proto_data; + SilcClientID *client_id = purple_buddy_get_protocol_data(b); SilcClientEntry client_entry; SilcAttributePayload attr; SilcAttributeMood mood = 0; @@ -1533,10 +1544,12 @@ char *silcpurple_status_text(PurpleBuddy *b) void silcpurple_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full) { - SilcPurple sg = b->account->gc->proto_data; + PurpleAccount *account = purple_buddy_get_account(b); + PurpleConnection *gc = purple_account_get_connection(account); + SilcPurple sg = gc->proto_data; SilcClient client = sg->client; SilcClientConnection conn = sg->conn; - SilcClientID *client_id = b->proto_data; + SilcClientID *client_id = purple_buddy_get_protocol_data(b); SilcClientEntry client_entry; char *moodstr, *statusstr, *contactstr, *langstr, *devicestr, *tzstr, *geostr; char tmp[256]; @@ -1610,12 +1623,12 @@ silcpurple_buddy_kill(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); b = (PurpleBuddy *) node; - gc = purple_account_get_connection(b->account); + gc = purple_account_get_connection(purple_buddy_get_account(b)); sg = gc->proto_data; /* Call KILL */ silc_client_command_call(sg->client, sg->conn, NULL, "KILL", - b->name, "Killed by operator", NULL); + purple_buddy_get_name(b), "Killed by operator", NULL); } typedef struct { @@ -1633,7 +1646,8 @@ silcpurple_buddy_wb(PurpleBlistNode *node, gpointer data) GList *silcpurple_buddy_menu(PurpleBuddy *buddy) { - PurpleConnection *gc = purple_account_get_connection(buddy->account); + PurpleAccount *account = purple_buddy_get_account(buddy); + PurpleConnection *gc = purple_account_get_connection(account); SilcPurple sg = gc->proto_data; SilcClientConnection conn = sg->conn; const char *pkfile = NULL; @@ -1645,7 +1659,7 @@ GList *silcpurple_buddy_menu(PurpleBuddy *buddy) pkfile = purple_blist_node_get_string((PurpleBlistNode *) buddy, "public-key"); client_entry = silc_client_get_client_by_id(sg->client, sg->conn, - buddy->proto_data); + purple_buddy_get_protocol_data(buddy)); if (client_entry && silc_client_private_message_key_is_set(sg->client, diff --git a/libpurple/protocols/silc/chat.c b/libpurple/protocols/silc/chat.c index 320cfbd31a..fa95dd708b 100644 --- a/libpurple/protocols/silc/chat.c +++ b/libpurple/protocols/silc/chat.c @@ -182,7 +182,9 @@ static void silcpurple_chat_getinfo_menu(PurpleBlistNode *node, gpointer data) { PurpleChat *chat = (PurpleChat *)node; - silcpurple_chat_getinfo(chat->account->gc, chat->components); + PurpleAccount *account = purple_chat_get_account(chat); + silcpurple_chat_getinfo(purple_account_get_connection(account), + purple_chat_get_components(chat)); } @@ -496,11 +498,11 @@ silcpurple_chat_chauth(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); chat = (PurpleChat *) node; - gc = purple_account_get_connection(chat->account); + gc = purple_account_get_connection(purple_chat_get_account(chat)); sg = gc->proto_data; silc_client_command_call(sg->client, sg->conn, NULL, "CMODE", - g_hash_table_lookup(chat->components, "channel"), + g_hash_table_lookup(purple_chat_get_components(chat), "channel"), "+C", NULL); } @@ -549,7 +551,7 @@ silcpurple_chat_prv_add(SilcPurpleCharPrv p, PurpleRequestFields *fields) g_hash_table_replace(comp, "passphrase", g_strdup(passphrase)); cn = purple_chat_new(sg->account, alias, comp); - g = (PurpleGroup *)p->c->node.parent; + g = purple_chat_get_group(p->c); purple_blist_add_chat(cn, g, (PurpleBlistNode *)p->c); /* Associate to a real channel */ @@ -583,7 +585,7 @@ silcpurple_chat_prv(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); chat = (PurpleChat *) node; - gc = purple_account_get_connection(chat->account); + gc = purple_account_get_connection(purple_chat_get_account(chat)); sg = gc->proto_data; p = silc_calloc(1, sizeof(*p)); @@ -591,7 +593,7 @@ silcpurple_chat_prv(PurpleBlistNode *node, gpointer data) return; p->sg = sg; - p->channel = g_hash_table_lookup(chat->components, "channel"); + p->channel = g_hash_table_lookup(purple_chat_get_components(chat), "channel"); p->c = purple_blist_find_chat(sg->account, p->channel); fields = purple_request_fields_new(); @@ -633,11 +635,11 @@ silcpurple_chat_permanent_reset(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); chat = (PurpleChat *) node; - gc = purple_account_get_connection(chat->account); + gc = purple_account_get_connection(purple_chat_get_account(chat)); sg = gc->proto_data; silc_client_command_call(sg->client, sg->conn, NULL, "CMODE", - g_hash_table_lookup(chat->components, "channel"), + g_hash_table_lookup(purple_chat_get_components(chat), "channel"), "-f", NULL); } @@ -652,7 +654,7 @@ silcpurple_chat_permanent(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); chat = (PurpleChat *) node; - gc = purple_account_get_connection(chat->account); + gc = purple_account_get_connection(purple_chat_get_account(chat)); sg = gc->proto_data; if (!sg->conn) @@ -663,7 +665,7 @@ silcpurple_chat_permanent(PurpleBlistNode *node, gpointer data) (default key). */ /* Call CMODE */ - channel = g_hash_table_lookup(chat->components, "channel"); + channel = g_hash_table_lookup(purple_chat_get_components(chat), "channel"); silc_client_command_call(sg->client, sg->conn, NULL, "CMODE", channel, "+f", NULL); } @@ -729,13 +731,13 @@ silcpurple_chat_ulimit(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); chat = (PurpleChat *) node; - gc = purple_account_get_connection(chat->account); + gc = purple_account_get_connection(purple_chat_get_account(chat)); sg = gc->proto_data; if (!sg->conn) return; - ch = g_strdup(g_hash_table_lookup(chat->components, "channel")); + ch = g_strdup(g_hash_table_lookup(purple_chat_get_components(chat), "channel")); channel = silc_client_get_channel(sg->client, sg->conn, (char *)ch); if (!channel) return; @@ -764,11 +766,11 @@ silcpurple_chat_resettopic(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); chat = (PurpleChat *) node; - gc = purple_account_get_connection(chat->account); + gc = purple_account_get_connection(purple_chat_get_account(chat)); sg = gc->proto_data; silc_client_command_call(sg->client, sg->conn, NULL, "CMODE", - g_hash_table_lookup(chat->components, "channel"), + g_hash_table_lookup(purple_chat_get_components(chat), "channel"), "-t", NULL); } @@ -782,11 +784,11 @@ silcpurple_chat_settopic(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); chat = (PurpleChat *) node; - gc = purple_account_get_connection(chat->account); + gc = purple_account_get_connection(purple_chat_get_account(chat)); sg = gc->proto_data; silc_client_command_call(sg->client, sg->conn, NULL, "CMODE", - g_hash_table_lookup(chat->components, "channel"), + g_hash_table_lookup(purple_chat_get_components(chat), "channel"), "+t", NULL); } @@ -800,11 +802,11 @@ silcpurple_chat_resetprivate(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); chat = (PurpleChat *) node; - gc = purple_account_get_connection(chat->account); + gc = purple_account_get_connection(purple_chat_get_account(chat)); sg = gc->proto_data; silc_client_command_call(sg->client, sg->conn, NULL, "CMODE", - g_hash_table_lookup(chat->components, "channel"), + g_hash_table_lookup(purple_chat_get_components(chat), "channel"), "-p", NULL); } @@ -818,11 +820,11 @@ silcpurple_chat_setprivate(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); chat = (PurpleChat *) node; - gc = purple_account_get_connection(chat->account); + gc = purple_account_get_connection(purple_chat_get_account(chat)); sg = gc->proto_data; silc_client_command_call(sg->client, sg->conn, NULL, "CMODE", - g_hash_table_lookup(chat->components, "channel"), + g_hash_table_lookup(purple_chat_get_components(chat), "channel"), "+p", NULL); } @@ -836,11 +838,11 @@ silcpurple_chat_resetsecret(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); chat = (PurpleChat *) node; - gc = purple_account_get_connection(chat->account); + gc = purple_account_get_connection(purple_chat_get_account(chat)); sg = gc->proto_data; silc_client_command_call(sg->client, sg->conn, NULL, "CMODE", - g_hash_table_lookup(chat->components, "channel"), + g_hash_table_lookup(purple_chat_get_components(chat), "channel"), "-s", NULL); } @@ -854,11 +856,11 @@ silcpurple_chat_setsecret(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); chat = (PurpleChat *) node; - gc = purple_account_get_connection(chat->account); + gc = purple_account_get_connection(purple_chat_get_account(chat)); sg = gc->proto_data; silc_client_command_call(sg->client, sg->conn, NULL, "CMODE", - g_hash_table_lookup(chat->components, "channel"), + g_hash_table_lookup(purple_chat_get_components(chat), "channel"), "+s", NULL); } @@ -877,8 +879,8 @@ silcpurple_chat_wb(PurpleBlistNode *node, gpointer data) GList *silcpurple_chat_menu(PurpleChat *chat) { - GHashTable *components = chat->components; - PurpleConnection *gc = purple_account_get_connection(chat->account); + GHashTable *components = purple_chat_get_components(chat); + PurpleConnection *gc = purple_account_get_connection(purple_chat_get_account(chat)); SilcPurple sg = gc->proto_data; SilcClientConnection conn = sg->conn; const char *chname = NULL; diff --git a/libpurple/protocols/silc/ops.c b/libpurple/protocols/silc/ops.c index 0a918ffd56..649b9b8afc 100644 --- a/libpurple/protocols/silc/ops.c +++ b/libpurple/protocols/silc/ops.c @@ -431,6 +431,7 @@ silc_notify(SilcClient client, SilcClientConnection conn, va_list va; PurpleConnection *gc = client->application; SilcPurple sg = gc->proto_data; + PurpleAccount *account = purple_connection_get_account(gc); PurpleConversation *convo; SilcClientEntry client_entry, client_entry2; SilcChannelEntry channel; @@ -856,19 +857,22 @@ silc_notify(SilcClient client, SilcClientConnection conn, silc_free(pk); /* Find buddy by associated public key */ - for (gnode = purple_get_blist()->root; gnode; - gnode = gnode->next) { + for (gnode = purple_blist_get_root(); gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for (cnode = gnode->child; cnode; cnode = cnode->next) { + for (cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) { if( !PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for (bnode = cnode->child; bnode; - bnode = bnode->next) { + for (bnode = purple_blist_node_get_first_child(cnode); + bnode; + bnode = purple_blist_node_get_sibling_next(bnode)) { if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; b = (PurpleBuddy *)bnode; - if (b->account != gc->account) + if (purple_buddy_get_account(b) != account) continue; f = purple_blist_node_get_string(bnode, "public-key"); if (f && !strcmp(f, buf)) @@ -889,9 +893,9 @@ silc_notify(SilcClient client, SilcClientConnection conn, } } - silc_free(b->proto_data); - b->proto_data = silc_memdup(&client_entry->id, - sizeof(client_entry->id)); + silc_free(purple_buddy_get_protocol_data(b)); + purple_buddy_set_protocol_data(b, silc_memdup(&client_entry->id, + sizeof(client_entry->id))); if (notify == SILC_NOTIFY_TYPE_NICK_CHANGE) { break; } else if (notify == SILC_NOTIFY_TYPE_UMODE_CHANGE) { diff --git a/libpurple/protocols/simple/simple.c b/libpurple/protocols/simple/simple.c index 2ce022f550..8eb9060cb9 100644 --- a/libpurple/protocols/simple/simple.c +++ b/libpurple/protocols/simple/simple.c @@ -196,33 +196,41 @@ static void simple_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGro { struct simple_account_data *sip = (struct simple_account_data *)gc->proto_data; struct simple_buddy *b; - if(strncmp(buddy->name, "sip:", 4)) { - gchar *buf = g_strdup_printf("sip:%s", buddy->name); + const char *name = purple_buddy_get_name(buddy); + if(strncmp(name, "sip:", 4)) { + gchar *buf = g_strdup_printf("sip:%s", name); purple_blist_rename_buddy(buddy, buf); g_free(buf); } - if(!g_hash_table_lookup(sip->buddies, buddy->name)) { + if(!g_hash_table_lookup(sip->buddies, name)) { b = g_new0(struct simple_buddy, 1); - purple_debug_info("simple", "simple_add_buddy %s\n", buddy->name); - b->name = g_strdup(buddy->name); + purple_debug_info("simple", "simple_add_buddy %s\n", name); + b->name = g_strdup(name); g_hash_table_insert(sip->buddies, b->name, b); } else { - purple_debug_info("simple", "buddy %s already in internal list\n", buddy->name); + purple_debug_info("simple", "buddy %s already in internal list\n", name); } } static void simple_get_buddies(PurpleConnection *gc) { PurpleBlistNode *gnode, *cnode, *bnode; + PurpleAccount *account; purple_debug_info("simple", "simple_get_buddies\n"); - for(gnode = purple_get_blist()->root; gnode; gnode = gnode->next) { + account = purple_connection_get_account(gc); + for(gnode = purple_blist_get_root(); gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) { if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for(cnode = gnode->child; cnode; cnode = cnode->next) { + for(cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) { if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for(bnode = cnode->child; bnode; bnode = bnode->next) { + for(bnode = purple_blist_node_get_first_child(cnode); + bnode; + bnode = purple_blist_node_get_sibling_next(bnode)) { if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; - if(((PurpleBuddy*)bnode)->account == gc->account) + if(purple_buddy_get_account((PurpleBuddy*)bnode) == account) simple_add_buddy(gc, (PurpleBuddy*)bnode, (PurpleGroup *)gnode); } } @@ -231,9 +239,10 @@ static void simple_get_buddies(PurpleConnection *gc) { static void simple_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { + const char *name = purple_buddy_get_name(buddy); struct simple_account_data *sip = (struct simple_account_data *)gc->proto_data; - struct simple_buddy *b = g_hash_table_lookup(sip->buddies, buddy->name); - g_hash_table_remove(sip->buddies, buddy->name); + struct simple_buddy *b = g_hash_table_lookup(sip->buddies, name); + g_hash_table_remove(sip->buddies, name); g_free(b->name); g_free(b); } @@ -922,7 +931,7 @@ static gboolean simple_add_lcs_contacts(struct simple_account_data *sip, struct purple_blist_add_buddy(b, NULL, g, NULL); purple_blist_alias_buddy(b, uri); bs = g_new0(struct simple_buddy, 1); - bs->name = g_strdup(b->name); + bs->name = g_strdup(purple_buddy_get_name(b)); g_hash_table_insert(sip->buddies, bs->name, bs); } xmlnode_free(isc); diff --git a/libpurple/protocols/toc/toc.c b/libpurple/protocols/toc/toc.c index 95b9d926b2..e89a5d7bb0 100644 --- a/libpurple/protocols/toc/toc.c +++ b/libpurple/protocols/toc/toc.c @@ -119,7 +119,7 @@ struct signon { #define TOC_CONNECT_STEPS 3 -static void toc_login_callback(gpointer, gint, PurpleInputCondition); +static void toc_login_callback(gpointer, gint, const gchar *); static void toc_callback(gpointer, gint, PurpleInputCondition); /* ok. this function used to take username/password, and return 0 on success. @@ -152,7 +152,7 @@ static void toc_login(PurpleAccount *account) } } -static void toc_login_callback(gpointer data, gint source, PurpleInputCondition cond) +static void toc_login_callback(gpointer data, gint source, const gchar *error_message) { PurpleConnection *gc = data; struct toc_data *tdt; @@ -260,7 +260,8 @@ static void toc_build_config(PurpleAccount *account, char *s, int len, gboolean } } -char *escape_message(const char *msg) +static char * +escape_message(const char *msg) { char *ret; int i, j; @@ -305,7 +306,8 @@ char *escape_message(const char *msg) * Duplicates the input string, replacing each \n with a <BR>, and * escaping a few other characters. */ -char *escape_text(const char *msg) +static char * +escape_text(const char *msg) { char *ret; int i, j; @@ -435,7 +437,7 @@ static int wait_reply(PurpleConnection *gc, char *buffer, size_t buflen) if (buflen < ntohs(hdr->len)) { /* fake like there's a read error */ purple_debug(PURPLE_DEBUG_ERROR, "toc", - "buffer too small (have %d, need %d)\n", + "buffer too small (have %" G_GSIZE_FORMAT ", need %d)\n", buflen, ntohs(hdr->len)); return -1; } diff --git a/libpurple/protocols/yahoo/yahoo.c b/libpurple/protocols/yahoo/yahoo.c index 7d4fe1d45f..166dc0f454 100644 --- a/libpurple/protocols/yahoo/yahoo.c +++ b/libpurple/protocols/yahoo/yahoo.c @@ -385,7 +385,7 @@ static void yahoo_do_group_check(PurpleAccount *account, GHashTable *ht, const c for (i = list; i; i = i->next) { b = i->data; g = purple_buddy_get_group(b); - if (!purple_utf8_strcasecmp(group, g->name)) { + if (!purple_utf8_strcasecmp(group, purple_group_get_name(g))) { purple_debug(PURPLE_DEBUG_MISC, "yahoo", "Oh good, %s is in the right group (%s).\n", name, group); list = g_slist_delete_link(list, i); @@ -423,7 +423,8 @@ static void yahoo_do_group_cleanup(gpointer key, gpointer value, gpointer user_d for (i = list; i; i = i->next) { b = i->data; g = purple_buddy_get_group(b); - purple_debug(PURPLE_DEBUG_MISC, "yahoo", "Deleting Buddy %s from group %s.\n", name, g->name); + purple_debug(PURPLE_DEBUG_MISC, "yahoo", "Deleting Buddy %s from group %s.\n", name, + purple_group_get_name(g)); purple_blist_remove_buddy(b); } } @@ -2027,21 +2028,23 @@ static void ignore_buddy(PurpleBuddy *buddy) { return; group = purple_buddy_get_group(buddy); - name = g_strdup(buddy->name); - account = buddy->account; + name = g_strdup(purple_buddy_get_name(buddy)); + account = purple_buddy_get_account(buddy); purple_debug(PURPLE_DEBUG_INFO, "blist", - "Removing '%s' from buddy list.\n", buddy->name); + "Removing '%s' from buddy list.\n", name); purple_account_remove_buddy(account, buddy, group); purple_blist_remove_buddy(buddy); - serv_add_deny(account->gc, name); + serv_add_deny(purple_account_get_connection(account), name); g_free(name); } -static void keep_buddy(PurpleBuddy *b) { - purple_privacy_deny_remove(b->account, b->name, 1); +static void keep_buddy(PurpleBuddy *b) +{ + purple_privacy_deny_remove(purple_buddy_get_account(b), + purple_buddy_get_name(b), 1); } static void yahoo_process_ignore(PurpleConnection *gc, struct yahoo_packet *pkt) { @@ -3128,11 +3131,12 @@ static const char *yahoo_list_emblem(PurpleBuddy *b) YahooFriend *f; PurplePresence *presence; - if (!b || !(account = b->account) || !(gc = purple_account_get_connection(account)) || - !(yd = gc->proto_data)) + if (!b || !(account = purple_buddy_get_account(b)) || + !(gc = purple_account_get_connection(account)) || + !(yd = gc->proto_data)) return NULL; - f = yahoo_friend_find(gc, b->name); + f = yahoo_friend_find(gc, purple_buddy_get_name(b)); if (!f) { return "not-authorized"; } @@ -3192,7 +3196,7 @@ static void yahoo_initiate_conference(PurpleBlistNode *node, gpointer data) { g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); yd = gc->proto_data; id = yd->conf_id; @@ -3204,7 +3208,7 @@ static void yahoo_initiate_conference(PurpleBlistNode *node, gpointer data) { yahoo_c_join(gc, components); g_hash_table_destroy(components); - yahoo_c_invite(gc, id, "Join my conference...", buddy->name); + yahoo_c_invite(gc, id, "Join my conference...", purple_buddy_get_name(buddy)); } static void yahoo_presence_settings(PurpleBlistNode *node, gpointer data) { @@ -3213,9 +3217,9 @@ static void yahoo_presence_settings(PurpleBlistNode *node, gpointer data) { int presence_val = GPOINTER_TO_INT(data); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); - yahoo_friend_update_presence(gc, buddy->name, presence_val); + yahoo_friend_update_presence(gc, purple_buddy_get_name(buddy), presence_val); } static void yahoo_game(PurpleBlistNode *node, gpointer data) { @@ -3233,10 +3237,10 @@ static void yahoo_game(PurpleBlistNode *node, gpointer data) { g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); yd = (struct yahoo_data *) gc->proto_data; - f = yahoo_friend_find(gc, buddy->name); + f = yahoo_friend_find(gc, purple_buddy_get_name(buddy)); if (!f) return; @@ -3258,8 +3262,10 @@ static char *yahoo_status_text(PurpleBuddy *b) YahooFriend *f = NULL; const char *msg; char *msg2; + PurpleAccount *account; - f = yahoo_friend_find(b->account->gc, b->name); + account = purple_buddy_get_account(b); + f = yahoo_friend_find(purple_account_get_connection(account), purple_buddy_get_name(b)); if (!f) return g_strdup(_("Not on server list")); @@ -3288,8 +3294,10 @@ void yahoo_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolea char *escaped; char *status = NULL; const char *presence = NULL; + PurpleAccount *account; - f = yahoo_friend_find(b->account->gc, b->name); + account = purple_buddy_get_account(b); + f = yahoo_friend_find(purple_account_get_connection(account), purple_buddy_get_name(b)); if (!f) status = g_strdup_printf("\n%s", _("Not on server list")); else { @@ -3340,7 +3348,7 @@ static void yahoo_addbuddyfrommenu_cb(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); yahoo_add_buddy(gc, buddy, NULL); } @@ -3354,9 +3362,9 @@ static void yahoo_chat_goto_menu(PurpleBlistNode *node, gpointer data) g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); - yahoo_chat_goto(gc, buddy->name); + yahoo_chat_goto(gc, purple_buddy_get_name(buddy)); } static GList *build_presence_submenu(YahooFriend *f, PurpleConnection *gc) { @@ -3400,9 +3408,10 @@ static GList *build_presence_submenu(YahooFriend *f, PurpleConnection *gc) { static void yahoo_doodle_blist_node(PurpleBlistNode *node, gpointer data) { PurpleBuddy *b = (PurpleBuddy *)node; - PurpleConnection *gc = b->account->gc; + PurpleAccount *account = purple_buddy_get_account(b); + PurpleConnection *gc = purple_account_get_connection(account); - yahoo_doodle_initiate(gc, b->name); + yahoo_doodle_initiate(gc, purple_buddy_get_name(b)); } static GList *yahoo_buddy_menu(PurpleBuddy *buddy) @@ -3410,12 +3419,12 @@ static GList *yahoo_buddy_menu(PurpleBuddy *buddy) GList *m = NULL; PurpleMenuAction *act; - PurpleConnection *gc = purple_account_get_connection(buddy->account); + PurpleConnection *gc = purple_account_get_connection(purple_buddy_get_account(buddy)); struct yahoo_data *yd = gc->proto_data; static char buf2[1024]; YahooFriend *f; - f = yahoo_friend_find(gc, buddy->name); + f = yahoo_friend_find(gc, purple_buddy_get_name(buddy)); if (!f && !yd->wm) { act = purple_menu_action_new(_("Add Buddy"), @@ -3942,19 +3951,20 @@ static void yahoo_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGrou const char *group = NULL; char *group2; YahooFriend *f; + const char *bname; if (!yd->logged_in) return; - if (!purple_privacy_check(purple_connection_get_account(gc), - purple_buddy_get_name(buddy))) + bname = purple_buddy_get_name(buddy); + if (!purple_privacy_check(purple_connection_get_account(gc), bname)) return; - f = yahoo_friend_find(gc, purple_buddy_get_name(buddy)); + f = yahoo_friend_find(gc, bname); g = purple_buddy_get_group(buddy); if (g) - group = g->name; + group = purple_group_get_name(g); else group = "Buddies"; @@ -3967,7 +3977,7 @@ static void yahoo_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGrou 1, purple_connection_get_display_name(gc), 302, "319", 300, "319", - 7, buddy->name, + 7, bname, 334, "0", 301, "319", 303, "319" @@ -3981,19 +3991,22 @@ static void yahoo_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGrou static void yahoo_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; - struct yahoo_packet *pkt; + struct yahoo_packet *pkt; GSList *buddies, *l; PurpleGroup *g; gboolean remove = TRUE; char *cg; + const char *bname, *gname; - if (!(yahoo_friend_find(gc, buddy->name))) + bname = purple_buddy_get_name(buddy); + if (!(yahoo_friend_find(gc, bname))) return; - buddies = purple_find_buddies(purple_connection_get_account(gc), buddy->name); + gname = purple_group_get_name(group); + buddies = purple_find_buddies(purple_connection_get_account(gc), bname); for (l = buddies; l; l = l->next) { g = purple_buddy_get_group(l->data); - if (purple_utf8_strcasecmp(group->name, g->name)) { + if (purple_utf8_strcasecmp(gname, purple_group_get_name(g))) { remove = FALSE; break; } @@ -4002,12 +4015,12 @@ static void yahoo_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleG g_slist_free(buddies); if (remove) - g_hash_table_remove(yd->friends, buddy->name); + g_hash_table_remove(yd->friends, bname); - cg = yahoo_string_encode(gc, group->name, NULL); + cg = yahoo_string_encode(gc, gname, NULL); pkt = yahoo_packet_new(YAHOO_SERVICE_REMBUDDY, YAHOO_STATUS_AVAILABLE, 0); yahoo_packet_hash(pkt, "sss", 1, purple_connection_get_display_name(gc), - 7, buddy->name, 65, cg); + 7, bname, 65, cg); yahoo_packet_send_and_free(pkt, yd); g_free(cg); } @@ -4116,7 +4129,7 @@ static void yahoo_rename_group(PurpleConnection *gc, const char *old_name, struct yahoo_packet *pkt; char *gpn, *gpo; - gpn = yahoo_string_encode(gc, group->name, NULL); + gpn = yahoo_string_encode(gc, purple_group_get_name(group), NULL); gpo = yahoo_string_encode(gc, old_name, NULL); if (!strcmp(gpn, gpo)) { g_free(gpn); @@ -4271,7 +4284,7 @@ static PurpleAccount *find_acct(const char *prpl, const char *acct_id) } /* This may not be the best way to do this, but we find the first key w/o a value - * and assume it is the screenname */ + * and assume it is the buddy name */ static void yahoo_find_uri_novalue_param(gpointer key, gpointer value, gpointer user_data) { char **retval = user_data; diff --git a/libpurple/protocols/yahoo/yahoo_picture.c b/libpurple/protocols/yahoo/yahoo_picture.c index e91995011d..0f006fa442 100644 --- a/libpurple/protocols/yahoo/yahoo_picture.c +++ b/libpurple/protocols/yahoo/yahoo_picture.c @@ -569,7 +569,7 @@ static int yahoo_buddy_icon_calculate_checksum(const guchar *data, gsize len) checksum &= ~g; } - purple_debug_misc("yahoo", "Calculated buddy icon checksum: %d", checksum); + purple_debug_misc("yahoo", "Calculated buddy icon checksum: %d\n", checksum); return checksum; } diff --git a/libpurple/protocols/yahoo/yahoo_profile.c b/libpurple/protocols/yahoo/yahoo_profile.c index 5a3ac178f3..3abd1d950d 100644 --- a/libpurple/protocols/yahoo/yahoo_profile.c +++ b/libpurple/protocols/yahoo/yahoo_profile.c @@ -699,8 +699,9 @@ static void yahoo_extract_user_info_text(PurpleNotifyUserInfo *user_info, YahooG info_data->name); if (b) { - if(b->alias && b->alias[0]) { - char *aliastext = g_markup_escape_text(b->alias, -1); + const char *balias = purple_buddy_get_local_buddy_alias(b); + if(balias && balias[0]) { + char *aliastext = g_markup_escape_text(balias, -1); purple_notify_user_info_add_pair(user_info, _("Alias"), aliastext); g_free(aliastext); } @@ -715,7 +716,7 @@ static void yahoo_extract_user_info_text(PurpleNotifyUserInfo *user_info, YahooG /* Add the normal tooltip pairs */ yahoo_tooltip_text(b, user_info, TRUE); - if ((f = yahoo_friend_find(info_data->gc, b->name))) { + if ((f = yahoo_friend_find(info_data->gc, purple_buddy_get_name(b)))) { const char *ip; if ((ip = yahoo_friend_get_ip(f))) purple_notify_user_info_add_pair(user_info, _("IP Address"), ip); @@ -1213,7 +1214,9 @@ yahoo_got_photo(PurpleUtilFetchUrlData *url_data, gpointer data, * in which case the user may or may not actually exist. * Hence this extra step. */ - f = yahoo_friend_find(b->account->gc, b->name); + PurpleAccount *account = purple_buddy_get_account(b); + f = yahoo_friend_find(purple_account_get_connection(account), + purple_buddy_get_name(b)); } str = f ? _("Could not retrieve the user's profile. " "This most likely is a temporary server-side problem. " diff --git a/libpurple/protocols/yahoo/yahoochat.c b/libpurple/protocols/yahoo/yahoochat.c index b4ca3b38fa..7abfc868e1 100644 --- a/libpurple/protocols/yahoo/yahoochat.c +++ b/libpurple/protocols/yahoo/yahoochat.c @@ -519,7 +519,7 @@ void yahoo_process_chat_join(PurpleConnection *gc, struct yahoo_packet *pkt) GList *l; GList *flags = NULL; for (l = members; l; l = l->next) - flags = g_list_append(flags, GINT_TO_POINTER(PURPLE_CBFLAGS_NONE)); + flags = g_list_prepend(flags, GINT_TO_POINTER(PURPLE_CBFLAGS_NONE)); if (c && purple_conv_chat_has_left(PURPLE_CONV_CHAT(c))) { /* this might be a hack, but oh well, it should nicely */ char *tmpmsg; diff --git a/libpurple/protocols/zephyr/zephyr.c b/libpurple/protocols/zephyr/zephyr.c index a26292ecc7..cc549e5ae2 100644 --- a/libpurple/protocols/zephyr/zephyr.c +++ b/libpurple/protocols/zephyr/zephyr.c @@ -732,7 +732,7 @@ static char *zephyr_to_html(const char *message) return ret; } -static gboolean pending_zloc(zephyr_account *zephyr,char *who) +static gboolean pending_zloc(zephyr_account *zephyr, const char *who) { GList *curr; @@ -771,6 +771,8 @@ static void handle_message(PurpleConnection *gc,ZNotice_t notice) int nlocs; char *user; PurpleBuddy *b; + const char *bname; + /* XXX add real error reporting */ if (ZParseLocations(¬ice, NULL, &nlocs, &user) != ZERR_NONE) return; @@ -780,15 +782,19 @@ static void handle_message(PurpleConnection *gc,ZNotice_t notice) b = purple_find_buddy(gc->account,stripped_user); g_free(stripped_user); } - if ((b && pending_zloc(zephyr,b->name)) || pending_zloc(zephyr,user)) { + + bname = b ? purple_buddy_get_name(b) : NULL; + if ((b && pending_zloc(zephyr,bname)) || pending_zloc(zephyr,user)) { ZLocations_t locs; int one = 1; PurpleNotifyUserInfo *user_info = purple_notify_user_info_new(); char *tmp; + const char *balias; - purple_notify_user_info_add_pair(user_info, _("User"), (b ? b->name : user)); - if (b && b->alias) - purple_notify_user_info_add_pair(user_info, _("Alias"), b->alias); + purple_notify_user_info_add_pair(user_info, _("User"), (b ? bname : user)); + balias = purple_buddy_get_local_buddy_alias(b); + if (b && balias) + purple_notify_user_info_add_pair(user_info, _("Alias"), balias); if (!nlocs) { purple_notify_user_info_add_pair(user_info, NULL, _("Hidden or not logged-in")); @@ -801,14 +807,14 @@ static void handle_message(PurpleConnection *gc,ZNotice_t notice) purple_notify_user_info_add_pair(user_info, _("Location"), tmp); g_free(tmp); } - purple_notify_userinfo(gc, (b ? b->name : user), + purple_notify_userinfo(gc, (b ? bname : user), user_info, NULL, NULL); purple_notify_user_info_destroy(user_info); } else { if (nlocs>0) - purple_prpl_got_user_status(gc->account, b ? b->name : user, "available", NULL); + purple_prpl_got_user_status(gc->account, b ? bname : user, "available", NULL); else - purple_prpl_got_user_status(gc->account, b ? b->name : user, "offline", NULL); + purple_prpl_got_user_status(gc->account, b ? bname : user, "offline", NULL); } g_free(user); @@ -1141,6 +1147,7 @@ static gint check_notify_tzc(gpointer data) /* XXX fix */ char *user; PurpleBuddy *b; + const char *bname; int nlocs = 0; parse_tree *locations; gchar *locval; @@ -1160,15 +1167,18 @@ static gint check_notify_tzc(gpointer data) nlocs = 1; } - if ((b && pending_zloc(zephyr,b->name)) || pending_zloc(zephyr,user) || pending_zloc(zephyr,local_zephyr_normalize(zephyr,user))){ + bname = b ? purple_buddy_get_name(b) : NULL; + if ((b && pending_zloc(zephyr,bname)) || pending_zloc(zephyr,user) || pending_zloc(zephyr,local_zephyr_normalize(zephyr,user))){ PurpleNotifyUserInfo *user_info = purple_notify_user_info_new(); char *tmp; + const char *balias; - purple_notify_user_info_add_pair(user_info, _("User"), (b ? b->name : user)); + purple_notify_user_info_add_pair(user_info, _("User"), (b ? bname : user)); + + balias = b ? purple_buddy_get_local_buddy_alias(b) : NULL; + if (balias) + purple_notify_user_info_add_pair(user_info, _("Alias"), balias); - if (b && b->alias) - purple_notify_user_info_add_pair(user_info, _("Alias"), b->alias); - if (!nlocs) { purple_notify_user_info_add_pair(user_info, NULL, _("Hidden or not logged-in")); } else { @@ -1179,14 +1189,14 @@ static gint check_notify_tzc(gpointer data) g_free(tmp); } - purple_notify_userinfo(gc, b ? b->name : user, + purple_notify_userinfo(gc, b ? bname : user, user_info, NULL, NULL); purple_notify_user_info_destroy(user_info); } else { if (nlocs>0) - purple_prpl_got_user_status(gc->account, b ? b->name : user, "available", NULL); + purple_prpl_got_user_status(gc->account, b ? bname : user, "available", NULL); else - purple_prpl_got_user_status(gc->account, b ? b->name : user, "offline", NULL); + purple_prpl_got_user_status(gc->account, b ? bname : user, "offline", NULL); } } else if (!g_ascii_strncasecmp(spewtype,"subscribed",10)) { @@ -1246,38 +1256,44 @@ static gint check_notify_zeph02(gpointer data) static gint check_loc(gpointer_data) { - PurpleBlistNode *gnode, *cnode, *bnode; - ZLocations_t locations; - int numlocs; - int one = 1; + PurpleBlistNode *gnode, *cnode, *bnode; + ZLocations_t locations; + int numlocs; + int one = 1; - for (gnode = purple_get_blist()->root; gnode; gnode = gnode->next) { + for (gnode = purple_blist_get_root(); gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for (cnode = gnode->child; cnode; cnode = cnode->next) { + for (cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) { if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for (bnode = cnode->child; bnode; bnode = bnode->next) { + for (bnode = purple_blist_node_get_first_child(cnode); + bnode; + bnode = purple_blist_node_get_sibling_next(bnode)) { PurpleBuddy *b = (PurpleBuddy *) bnode; if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; - if (b->account->gc == zgc) { + if (purple_buddy_get_account(b)->gc == zgc) { char *chk; - chk = local_zephyr_normalize(b->name); - ZLocateUser(chk,&numlocs, ZAUTH); - if (numlocs) { - int i; - for(i=0;i<numlocs;i++) { - ZGetLocations(&locations,&one); - serv_got_update(zgc,b->name,1,0,0,0,0); - } - } - } - } - } - } - return TRUE; + const char *bname = purple_buddy_get_name(b); + chk = local_zephyr_normalize(bname); + ZLocateUser(chk,&numlocs, ZAUTH); + if (numlocs) { + int i; + for(i=0;i<numlocs;i++) { + ZGetLocations(&locations,&one); + serv_got_update(zgc,bname,1,0,0,0,0); + } + } + } + } + } + } + return TRUE; } #else @@ -1288,6 +1304,7 @@ static gint check_loc(gpointer data) ZAsyncLocateData_t ald; PurpleConnection *gc = (PurpleConnection *)data; zephyr_account *zephyr = gc->proto_data; + PurpleAccount *account = purple_connection_get_account(gc); if (use_zeph02(zephyr)) { ald.user = NULL; @@ -1295,22 +1312,28 @@ static gint check_loc(gpointer data) ald.version = NULL; } - for (gnode = purple_get_blist()->root; gnode; gnode = gnode->next) { + for (gnode = purple_blist_get_root(); gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for (cnode = gnode->child; cnode; cnode = cnode->next) { + for (cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) { if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for (bnode = cnode->child; bnode; bnode = bnode->next) { + for (bnode = purple_blist_node_get_first_child(cnode); + bnode; + bnode = purple_blist_node_get_sibling_next(bnode)) { PurpleBuddy *b = (PurpleBuddy *) bnode; if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; - if (b->account->gc == gc) { + if (purple_buddy_get_account(b) == account) { const char *chk; + const char *name = purple_buddy_get_name(b); - chk = local_zephyr_normalize(zephyr,b->name); - purple_debug_info("zephyr","chk: %s b->name %s\n",chk,b->name); + chk = local_zephyr_normalize(zephyr,name); + purple_debug_info("zephyr","chk: %s b->name %s\n",chk,name); /* XXX add real error reporting */ /* doesn't matter if this fails or not; we'll just move on to the next one */ if (use_zeph02(zephyr)) { @@ -1323,9 +1346,9 @@ static gint check_loc(gpointer data) for(i=0;i<numlocs;i++) { ZGetLocations(&locations,&one); if (nlocs>0) - purple_prpl_got_user_status(gc->account,b->name,"available",NULL); + purple_prpl_got_user_status(account,name,"available",NULL); else - purple_prpl_got_user_status(gc->account,b->name,"offline",NULL); + purple_prpl_got_user_status(account,name,"offline",NULL); } } #else @@ -1936,6 +1959,7 @@ static void write_anyone(PurpleConnection *gc) PurpleBuddy *b; char *fname; FILE *fd; + PurpleAccount *account; zephyr_account* zephyr = gc->proto_data; fname = g_strdup_printf("%s/.anyone", purple_home_dir()); fd = g_fopen(fname, "w"); @@ -1944,18 +1968,25 @@ static void write_anyone(PurpleConnection *gc) return; } - for (gnode = purple_get_blist()->root; gnode; gnode = gnode->next) { + account = purple_connection_get_account(gc); + for (gnode = purple_blist_get_root(); + gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for (cnode = gnode->child; cnode; cnode = cnode->next) { + for (cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) { if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for (bnode = cnode->child; bnode; bnode = bnode->next) { + for (bnode = purple_blist_node_get_first_child(cnode); + bnode; + bnode = purple_blist_node_get_sibling_next(bnode)) { if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; b = (PurpleBuddy *) bnode; - if (b->account == gc->account) { - gchar *stripped_user = zephyr_strip_local_realm(zephyr,b->name); + if (purple_buddy_get_account(b) == account) { + gchar *stripped_user = zephyr_strip_local_realm(zephyr, purple_buddy_get_name(b)); fprintf(fd, "%s\n", stripped_user); g_free(stripped_user); } @@ -2498,26 +2529,31 @@ static PurpleChat *zephyr_find_blist_chat(PurpleAccount *account, const char *na PurpleBlistNode *gnode, *cnode; /* XXX needs to be %host%,%canon%, and %me% clean */ - for(gnode = purple_get_blist()->root; gnode; gnode = gnode->next) { - for(cnode = gnode->child; cnode; cnode = cnode->next) { + for(gnode = purple_blist_get_root(); gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) { + for(cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) { PurpleChat *chat = (PurpleChat*)cnode; char *zclass, *inst, *recip; char** triple; + GHashTable *components; if(!PURPLE_BLIST_NODE_IS_CHAT(cnode)) continue; - if(chat->account !=account) + if(purple_chat_get_account(chat) != account) continue; - if(!(zclass = g_hash_table_lookup(chat->components, "class"))) + components = purple_chat_get_components(chat); + if(!(zclass = g_hash_table_lookup(components, "class"))) continue; - if(!(inst = g_hash_table_lookup(chat->components, "instance"))) + if(!(inst = g_hash_table_lookup(components, "instance"))) inst = g_strdup(""); - if(!(recip = g_hash_table_lookup(chat->components, "recipient"))) + if(!(recip = g_hash_table_lookup(components, "recipient"))) recip = g_strdup(""); /* purple_debug_info("zephyr","in zephyr_find_blist_chat name: %s\n",name?name:""); */ triple = g_strsplit(name,",",3); if (!g_ascii_strcasecmp(triple[0],zclass) && !g_ascii_strcasecmp(triple[1],inst) && !g_ascii_strcasecmp(triple[2],recip)) return chat; - + } } return NULL; diff --git a/libpurple/proxy.c b/libpurple/proxy.c index 03d798e631..fb51fe14c5 100644 --- a/libpurple/proxy.c +++ b/libpurple/proxy.c @@ -207,6 +207,16 @@ purple_global_proxy_get_info(void) return global_proxy_info; } +void +purple_global_proxy_set_info(PurpleProxyInfo *info) +{ + g_return_if_fail(info != NULL); + + purple_proxy_info_destroy(global_proxy_info); + + global_proxy_info = info; +} + static PurpleProxyInfo * purple_gnome_proxy_get_info(void) { @@ -228,13 +238,13 @@ purple_gnome_proxy_get_info(void) g_free(err); err = NULL; - if (!strcmp(tmp, "none\n")) { + if (purple_strequal(tmp, "none\n")) { info.type = PURPLE_PROXY_NONE; g_free(tmp); return &info; } - if (strcmp(tmp, "manual\n")) { + if (purple_strequal(tmp, "manual\n")) { /* Unknown setting. Fallback to using our global proxy settings. */ g_free(tmp); return purple_global_proxy_get_info(); @@ -263,7 +273,7 @@ purple_gnome_proxy_get_info(void) g_free(err); err = NULL; - if (!strcmp(tmp, "true\n")) + if (purple_strequal(tmp, "true\n")) use_same_proxy = TRUE; g_free(tmp); tmp = NULL; @@ -2300,31 +2310,31 @@ proxy_pref_cb(const char *name, PurplePrefType type, { PurpleProxyInfo *info = purple_global_proxy_get_info(); - if (!strcmp(name, "/purple/proxy/type")) { + if (purple_strequal(name, "/purple/proxy/type")) { int proxytype; const char *type = value; - if (!strcmp(type, "none")) + if (purple_strequal(type, "none")) proxytype = PURPLE_PROXY_NONE; - else if (!strcmp(type, "http")) + else if (purple_strequal(type, "http")) proxytype = PURPLE_PROXY_HTTP; - else if (!strcmp(type, "socks4")) + else if (purple_strequal(type, "socks4")) proxytype = PURPLE_PROXY_SOCKS4; - else if (!strcmp(type, "socks5")) + else if (purple_strequal(type, "socks5")) proxytype = PURPLE_PROXY_SOCKS5; - else if (!strcmp(type, "envvar")) + else if (purple_strequal(type, "envvar")) proxytype = PURPLE_PROXY_USE_ENVVAR; else proxytype = -1; purple_proxy_info_set_type(info, proxytype); - } else if (!strcmp(name, "/purple/proxy/host")) + } else if (purple_strequal(name, "/purple/proxy/host")) purple_proxy_info_set_host(info, value); - else if (!strcmp(name, "/purple/proxy/port")) + else if (purple_strequal(name, "/purple/proxy/port")) purple_proxy_info_set_port(info, GPOINTER_TO_INT(value)); - else if (!strcmp(name, "/purple/proxy/username")) + else if (purple_strequal(name, "/purple/proxy/username")) purple_proxy_info_set_username(info, value); - else if (!strcmp(name, "/purple/proxy/password")) + else if (purple_strequal(name, "/purple/proxy/password")) purple_proxy_info_set_password(info, value); } diff --git a/libpurple/proxy.h b/libpurple/proxy.h index 2145f6038f..6cff7b46e7 100644 --- a/libpurple/proxy.h +++ b/libpurple/proxy.h @@ -186,6 +186,14 @@ const char *purple_proxy_info_get_password(const PurpleProxyInfo *info); */ PurpleProxyInfo *purple_global_proxy_get_info(void); +/** + * Set purple's global proxy information. + * + * @param info The proxy information. + * @since 2.6.0 + */ +void purple_global_proxy_set_info(PurpleProxyInfo *info); + /*@}*/ /**************************************************************************/ diff --git a/libpurple/prpl.c b/libpurple/prpl.c index bbb1ec66f0..de44d2765a 100644 --- a/libpurple/prpl.c +++ b/libpurple/prpl.c @@ -75,7 +75,7 @@ void purple_attention_type_set_icon_name(PurpleAttentionType *type, const char *name) { g_return_if_fail(type != NULL); - + type->icon_name = name; } @@ -400,7 +400,7 @@ purple_prpl_send_attention(PurpleConnection *gc, const char *who, guint type_cod PurpleConversation *conv; gboolean (*send_attention)(PurpleConnection *, const char *, guint); PurpleBuddy *buddy; - const char *alias; + const char *alias; gchar *description; time_t mtime; @@ -425,7 +425,7 @@ purple_prpl_send_attention(PurpleConnection *gc, const char *who, guint type_cod } else { description = g_strdup_printf(_("Requesting %s's attention..."), alias); } - + flags = PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_NOTIFY | PURPLE_MESSAGE_SYSTEM; purple_debug_info("server", "serv_send_attention: sending '%s' to %s\n", @@ -511,7 +511,7 @@ purple_find_prpl(const char *id) for (l = purple_plugins_get_protocols(); l != NULL; l = l->next) { plugin = (PurplePlugin *)l->data; - if (!strcmp(plugin->info->id, id)) + if (purple_strequal(plugin->info->id, id)) return plugin; } diff --git a/libpurple/prpl.h b/libpurple/prpl.h index 615beb6981..c43e003759 100644 --- a/libpurple/prpl.h +++ b/libpurple/prpl.h @@ -178,9 +178,11 @@ typedef enum OPT_PROTO_USE_POINTSIZE = 0x00000100, /** - * Set the Register button active when screenname is not given. + * Set the Register button active even when the username has not + * been specified. * - * Gadu-Gadu doesn't need a screenname to register new account. + * Gadu-Gadu doesn't need a username to register new account (because + * usernames are assigned by the server). */ OPT_PROTO_REGISTER_NOSCREENNAME = 0x00000200, @@ -211,7 +213,7 @@ struct _PurplePluginProtocolInfo /** * Returns the base icon name for the given buddy and account. - * If buddy is NULL and the account is non-NULL, it will return the + * If buddy is NULL and the account is non-NULL, it will return the * name to use for the account's icon. If both are NULL, it will * return the name to use for the protocol's icon. * @@ -413,7 +415,7 @@ struct _PurplePluginProtocolInfo * reasons. */ void (*unregister_user)(PurpleAccount *, PurpleAccountUnregistrationCb cb, void *user_data); - + /* Attention API for sending & receiving zaps/nudges/buzzes etc. */ gboolean (*send_attention)(PurpleConnection *gc, const char *username, guint type); GList *(*get_attention_types)(PurpleAccount *acct); @@ -594,7 +596,7 @@ const char *purple_attention_type_get_unlocalized_name(const PurpleAttentionType /*@{*/ /** - * Notifies Purple that an account's idle state and time have changed. + * Notifies Purple that our account's idle state and time have changed. * * This is meant to be called from protocol plugins. * @@ -606,7 +608,7 @@ void purple_prpl_got_account_idle(PurpleAccount *account, gboolean idle, time_t idle_time); /** - * Notifies Purple of an account's log-in time. + * Notifies Purple of our account's log-in time. * * This is meant to be called from protocol plugins. * @@ -616,7 +618,7 @@ void purple_prpl_got_account_idle(PurpleAccount *account, gboolean idle, void purple_prpl_got_account_login_time(PurpleAccount *account, time_t login_time); /** - * Notifies Purple that an account's status has changed. + * Notifies Purple that our account's status has changed. * * This is meant to be called from protocol plugins. * @@ -627,13 +629,14 @@ void purple_prpl_got_account_login_time(PurpleAccount *account, time_t login_tim */ void purple_prpl_got_account_status(PurpleAccount *account, const char *status_id, ...) G_GNUC_NULL_TERMINATED; + /** - * Notifies Purple that a user's idle state and time have changed. + * Notifies Purple that a buddy's idle state and time have changed. * * This is meant to be called from protocol plugins. * * @param account The account the user is on. - * @param name The screen name of the user. + * @param name The name of the buddy. * @param idle The user's idle state. * @param idle_time The user's idle time. This is the time at * which the user became idle, in seconds since @@ -644,24 +647,24 @@ void purple_prpl_got_user_idle(PurpleAccount *account, const char *name, gboolean idle, time_t idle_time); /** - * Notifies Purple of a user's log-in time. + * Notifies Purple of a buddy's log-in time. * * This is meant to be called from protocol plugins. * * @param account The account the user is on. - * @param name The screen name of the user. + * @param name The name of the buddy. * @param login_time The user's log-in time. */ void purple_prpl_got_user_login_time(PurpleAccount *account, const char *name, time_t login_time); /** - * Notifies Purple that a user's status has been activated. + * Notifies Purple that a buddy's status has been activated. * * This is meant to be called from protocol plugins. * * @param account The account the user is on. - * @param name The screen name of the user. + * @param name The name of the buddy. * @param status_id The status ID. * @param ... A NULL-terminated list of attribute IDs and values, * beginning with the value for @a attr_id. @@ -670,19 +673,19 @@ void purple_prpl_got_user_status(PurpleAccount *account, const char *name, const char *status_id, ...) G_GNUC_NULL_TERMINATED; /** - * Notifies libpurple that a user's status has been deactivated + * Notifies libpurple that a buddy's status has been deactivated * * This is meant to be called from protocol plugins. * * @param account The account the user is on. - * @param name The screen name of the user. + * @param name The name of the buddy. * @param status_id The status ID. */ void purple_prpl_got_user_status_deactive(PurpleAccount *account, const char *name, const char *status_id); - + /** - * Informs the server that an account's status changed. + * Informs the server that our account's status changed. * * @param account The account the user is on. * @param old_status The previous status. @@ -703,37 +706,43 @@ void purple_prpl_change_account_status(PurpleAccount *account, */ GList *purple_prpl_get_statuses(PurpleAccount *account, PurplePresence *presence); -/** Send an attention request message. +/** + * Send an attention request message. * * @param gc The connection to send the message on. * @param who Whose attention to request. * @param type_code An index into the prpl's attention_types list determining the type - * of the attention request command to send. 0 if prpl only defines one - * (for example, Yahoo and MSN), but some protocols define more (MySpaceIM). + * of the attention request command to send. 0 if prpl only defines one + * (for example, Yahoo and MSN), but some protocols define more (MySpaceIM). * * Note that you can't send arbitrary PurpleAttentionType's, because there is * only a fixed set of attention commands. + * * @since 2.5.0 */ void purple_prpl_send_attention(PurpleConnection *gc, const char *who, guint type_code); -/** Process an incoming attention message. +/** + * Process an incoming attention message. * * @param gc The connection that received the attention message. * @param who Who requested your attention. * @param type_code An index into the prpl's attention_types list determining the type - * of the attention request command to send. + * of the attention request command to send. + * * @since 2.5.0 */ void purple_prpl_got_attention(PurpleConnection *gc, const char *who, guint type_code); -/** Process an incoming attention message in a chat. +/** + * Process an incoming attention message in a chat. * * @param gc The connection that received the attention message. * @param id The chat id. * @param who Who requested your attention. * @param type_code An index into the prpl's attention_types list determining the type - * of the attention request command to send. + * of the attention request command to send. + * * @since 2.5.0 */ void purple_prpl_got_attention_in_chat(PurpleConnection *gc, int id, const char *who, guint type_code); diff --git a/libpurple/purple-remote b/libpurple/purple-remote index 4ff2a19fcc..89fa0a1714 100755 --- a/libpurple/purple-remote +++ b/libpurple/purple-remote @@ -61,6 +61,8 @@ Examples of commands: jabber:addbuddy?screenname=my friend setstatus?status=away&message=don't disturb + getstatus + getstatusmessage quit PurpleAccountsFindConnected?name=&protocol=prpl-jabber diff --git a/libpurple/purple-send-async b/libpurple/purple-send-async index a5cfbda821..e15340eb07 100755 --- a/libpurple/purple-send-async +++ b/libpurple/purple-send-async @@ -2,18 +2,18 @@ METHOD_NAME=$1 -if test -z "$METHOD_NAME" +if test -z "$METHOD_NAME" then - cat <<EOF -This program calls purple API functions using DBus. As opposed to purple-send, + cat <<EOF +This program calls purple API functions using DBus. As opposed to purple-send, it does not print the return value. Usage: $0 method-name type1:parameter1 type2:parameter2 ... -This shell script just invokes dbus-send, see man dbus-send for how -to specify the parameters. +This shell script just invokes dbus-send, see man dbus-send for how +to specify the parameters. Examples: @@ -27,4 +27,4 @@ fi shift dbus-send --dest=im.pidgin.purple.PurpleService --type=method_call /im/pidgin/purple/PurpleObject im.pidgin.purple.PurpleInterface.$METHOD_NAME "$@" -echo +echo diff --git a/libpurple/request.c b/libpurple/request.c index c35b04fb1e..8ff0e3728e 100644 --- a/libpurple/request.c +++ b/libpurple/request.c @@ -23,6 +23,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ +#define _PURPLE_REQUEST_C_ + #include "internal.h" #include "notify.h" @@ -137,6 +139,23 @@ purple_request_fields_is_field_required(const PurpleRequestFields *fields, return purple_request_field_is_required(field); } +gpointer +purple_request_field_get_ui_data(const PurpleRequestField *field) +{ + g_return_val_if_fail(field != NULL, NULL); + + return field->ui_data; +} + +void +purple_request_field_set_ui_data(PurpleRequestField *field, + gpointer ui_data) +{ + g_return_if_fail(field != NULL); + + field->ui_data = ui_data; +} + gboolean purple_request_fields_all_required_filled(const PurpleRequestFields *fields) { @@ -443,6 +462,14 @@ purple_request_field_get_type(const PurpleRequestField *field) return field->type; } +PurpleRequestFieldGroup * +purple_request_field_get_group(const PurpleRequestField *field) +{ + g_return_val_if_fail(field != NULL, NULL); + + return field->group; +} + const char * purple_request_field_get_id(const PurpleRequestField *field) { diff --git a/libpurple/request.h b/libpurple/request.h index 2d66522123..08a18faaca 100644 --- a/libpurple/request.h +++ b/libpurple/request.h @@ -30,6 +30,9 @@ #include <glib-object.h> #include <glib.h> +/** @copydoc _PurpleRequestField */ +typedef struct _PurpleRequestField PurpleRequestField; + #include "account.h" #define PURPLE_DEFAULT_ACTION_NONE -1 @@ -93,10 +96,11 @@ typedef struct } PurpleRequestFieldGroup; +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_REQUEST_C_) /** * A request field. */ -typedef struct +struct _PurpleRequestField { PurpleRequestFieldType type; PurpleRequestFieldGroup *group; @@ -176,7 +180,8 @@ typedef struct void *ui_data; -} PurpleRequestField; +}; +#endif /** * Request UI operations. @@ -521,6 +526,17 @@ void purple_request_field_set_required(PurpleRequestField *field, PurpleRequestFieldType purple_request_field_get_type(const PurpleRequestField *field); /** + * Returns the group for the field. + * + * @param field The field. + * + * @return The UI data. + * + * @since 2.6.0 + */ +PurpleRequestFieldGroup *purple_request_field_get_group(const PurpleRequestField *field); + +/** * Returns the ID of a field. * * @param field The field. @@ -565,6 +581,30 @@ const char *purple_request_field_get_type_hint(const PurpleRequestField *field); */ gboolean purple_request_field_is_required(const PurpleRequestField *field); +/** + * Returns the ui_data for a field. + * + * @param field The field. + * + * @return The UI data. + * + * @since 2.6.0 + */ +gpointer purple_request_field_get_ui_data(const PurpleRequestField *field); + +/** + * Sets the ui_data for a field. + * + * @param field The field. + * @param ui_data The UI data. + * + * @return The UI data. + * + * @since 2.6.0 + */ +void purple_request_field_set_ui_data(PurpleRequestField *field, + gpointer ui_data); + /*@}*/ /**************************************************************************/ diff --git a/libpurple/savedstatuses.c b/libpurple/savedstatuses.c index 4fe457ca82..2f7baf1a3a 100644 --- a/libpurple/savedstatuses.c +++ b/libpurple/savedstatuses.c @@ -461,7 +461,7 @@ parse_status(xmlnode *status) ret = g_new0(PurpleSavedStatus, 1); attrib = xmlnode_get_attrib(status, "transient"); - if ((attrib == NULL) || (strcmp(attrib, "true"))) + if (!purple_strequal(attrib, "true")) { /* Read the title */ attrib = xmlnode_get_attrib(status, "name"); @@ -940,7 +940,7 @@ purple_savedstatus_find(const char *title) for (iter = saved_statuses; iter != NULL; iter = iter->next) { status = (PurpleSavedStatus *)iter->data; - if ((status->title != NULL) && !strcmp(status->title, title)) + if (purple_strequal(status->title, title)) return status; } @@ -975,8 +975,7 @@ purple_savedstatus_find_transient_by_type_and_message(PurpleStatusPrimitive type status = (PurpleSavedStatus *)iter->data; if ((status->type == type) && purple_savedstatus_is_transient(status) && !purple_savedstatus_has_substatuses(status) && - (((status->message == NULL) && (message == NULL)) || - ((status->message != NULL) && (message != NULL) && !strcmp(status->message, message)))) + purple_strequal(status->message, message)) { return status; } diff --git a/libpurple/server.c b/libpurple/server.c index 2b223acf94..6b04e1f495 100644 --- a/libpurple/server.c +++ b/libpurple/server.c @@ -152,7 +152,7 @@ int serv_send_im(PurpleConnection *gc, const char *name, const char *message, auto_reply_pref = purple_prefs_get_string("/purple/away/auto_reply"); if((gc->flags & PURPLE_CONNECTION_AUTO_RESP) && !purple_presence_is_available(presence) && - strcmp(auto_reply_pref, "never")) { + !purple_strequal(auto_reply_pref, "never")) { struct last_auto_response *lar; lar = get_last_auto_response(gc, name); @@ -172,7 +172,7 @@ void serv_get_info(PurpleConnection *gc, const char *name) if(gc) prpl = purple_connection_get_prpl(gc); - + if(prpl) prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); @@ -188,7 +188,7 @@ void serv_set_info(PurpleConnection *gc, const char *info) if(gc) prpl = purple_connection_get_prpl(gc); - + if(prpl) prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); @@ -230,7 +230,7 @@ void serv_alias_buddy(PurpleBuddy *b) prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); if(b && prpl_info && prpl_info->alias_buddy) { - prpl_info->alias_buddy(gc, b->name, b->alias); + prpl_info->alias_buddy(gc, purple_buddy_get_name(b), purple_buddy_get_local_buddy_alias(b)); } } @@ -247,20 +247,20 @@ serv_got_alias(PurpleConnection *gc, const char *who, const char *alias) while (buddies != NULL) { + const char *server_alias; + b = buddies->data; buddies = g_slist_delete_link(buddies, buddies); - if((b->server_alias == NULL && alias == NULL) || - (b->server_alias && alias && !strcmp(b->server_alias, alias))) - { + server_alias = purple_buddy_get_server_alias(b); + + if (purple_strequal(server_alias, alias)) continue; - } purple_blist_server_alias_buddy(b, alias); - conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, b->name, account); - if(conv != NULL && alias != NULL && - who != NULL && strcmp(alias, who)) + conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, purple_buddy_get_name(b), account); + if (conv != NULL && alias != NULL && purple_strequal(alias, who)) { char *escaped = g_markup_escape_text(who, -1); char *escaped2 = g_markup_escape_text(alias, -1); @@ -289,11 +289,13 @@ purple_serv_got_private_alias(PurpleConnection *gc, const char *who, const char buddies = purple_find_buddies(account, who); while(buddies != NULL) { + const char *balias; b = buddies->data; buddies = g_slist_delete_link(buddies, buddies); - if((!b->alias && !alias) || (b->alias && alias && !strcmp(b->alias, alias))) + balias = purple_buddy_get_local_buddy_alias(b); + if (purple_strequal(balias, alias)) continue; purple_blist_alias_buddy(b, alias); @@ -367,7 +369,9 @@ void serv_move_buddy(PurpleBuddy *b, PurpleGroup *og, PurpleGroup *ng) if(gc && og && ng) { if (prpl_info && prpl_info->group_buddy) { - prpl_info->group_buddy(gc, b->name, og->name, ng->name); + prpl_info->group_buddy(gc, purple_buddy_get_name(b), + purple_group_get_name(og), + purple_group_get_name(ng)); } } } @@ -666,8 +670,8 @@ void serv_got_im(PurpleConnection *gc, const char *who, const char *msg, if ((primitive == PURPLE_STATUS_AVAILABLE) || (primitive == PURPLE_STATUS_INVISIBLE) || mobile || - !strcmp(auto_reply_pref, "never") || - (!purple_presence_is_idle(presence) && !strcmp(auto_reply_pref, "awayidle"))) + purple_strequal(auto_reply_pref, "never") || + (!purple_presence_is_idle(presence) && purple_strequal(auto_reply_pref, "awayidle"))) { g_free(name); return; diff --git a/libpurple/server.h b/libpurple/server.h index 8832e30583..5c5b40d67f 100644 --- a/libpurple/server.h +++ b/libpurple/server.h @@ -55,8 +55,8 @@ unsigned int serv_send_typing(PurpleConnection *gc, const char *name, PurpleTypi void serv_move_buddy(PurpleBuddy *, PurpleGroup *, PurpleGroup *); int serv_send_im(PurpleConnection *, const char *, const char *, PurpleMessageFlags flags); -/** Get information about an account's attention commands, from the prpl. - * +/** Get information about an account's attention commands, from the prpl. + * * @return The attention command numbered 'code' from the prpl's attention_types, or NULL. */ PurpleAttentionType *purple_get_attention_type_from_code(PurpleAccount *account, guint type_code); @@ -76,14 +76,14 @@ PurpleAttentionType *purple_get_attention_type_from_code(PurpleAccount *account, */ void serv_send_attention(PurpleConnection *gc, const char *who, guint type_code); -/** Process an incoming attention message. +/** Process an incoming attention message. * * @deprecated Use purple_prpl_got_attention() instead. * * @param gc The connection that received the attention message. * @param who Who requested your attention. * @param type_code An index into the prpl's attention_types list determining the type - * of the attention request command to send. + * of the attention request command to send. */ void serv_got_attention(PurpleConnection *gc, const char *who, guint type_code); @@ -108,7 +108,7 @@ void serv_got_alias(PurpleConnection *gc, const char *who, const char *alias); * aliases are the aliases or display names that buddies set for themselves. * * @param gc The connection on which the alias was received. - * @param who The screen name of the buddy whose alias was received. + * @param who The name of the buddy whose alias was received. * @param alias The alias that was received. */ void purple_serv_got_private_alias(PurpleConnection *gc, const char *who, const char *alias); @@ -180,7 +180,7 @@ PurpleConversation *serv_got_joined_chat(PurpleConnection *gc, * function should be g_str_equal(). */ void purple_serv_got_join_chat_failed(PurpleConnection *gc, GHashTable *data); - + void serv_got_chat_left(PurpleConnection *g, int id); void serv_got_chat_in(PurpleConnection *g, int id, const char *who, PurpleMessageFlags flags, const char *message, time_t mtime); diff --git a/libpurple/signals.c b/libpurple/signals.c index 26a3aa9054..f3f4b19856 100644 --- a/libpurple/signals.c +++ b/libpurple/signals.c @@ -487,7 +487,7 @@ purple_signal_emit_vargs(void *instance, const char *signal, va_list args) } #ifdef HAVE_DBUS - purple_dbus_signal_emit_purple(signal, signal_data->num_values, + purple_dbus_signal_emit_purple(signal, signal_data->num_values, signal_data->values, args); #endif /* HAVE_DBUS */ @@ -539,7 +539,7 @@ purple_signal_emit_vargs_return_1(void *instance, const char *signal, #ifdef HAVE_DBUS G_VA_COPY(tmp, args); - purple_dbus_signal_emit_purple(signal, signal_data->num_values, + purple_dbus_signal_emit_purple(signal, signal_data->num_values, signal_data->values, tmp); va_end(tmp); #endif /* HAVE_DBUS */ diff --git a/libpurple/signals.h b/libpurple/signals.h index 3a104c15fa..77352a042b 100644 --- a/libpurple/signals.h +++ b/libpurple/signals.h @@ -137,7 +137,7 @@ gulong purple_signal_connect_priority(void *instance, const char *signal, /** * Connects a signal handler to a signal for a particular object. * (Its priority defaults to 0, aka #PURPLE_SIGNAL_PRIORITY_DEFAULT.) - * + * * Take care not to register a handler function twice. Purple will * not correct any mistakes for you in this area. * diff --git a/libpurple/smiley.c b/libpurple/smiley.c index 8bcb8e935f..2c08b5994b 100644 --- a/libpurple/smiley.c +++ b/libpurple/smiley.c @@ -722,7 +722,7 @@ purple_smiley_new_from_file(const char *shortcut, const char *filepath) smiley = purple_smiley_new_from_stream(shortcut, smiley_data, smiley_data_len); } - + return smiley; } diff --git a/libpurple/sound-theme-loader.c b/libpurple/sound-theme-loader.c new file mode 100644 index 0000000000..8a9d7fe875 --- /dev/null +++ b/libpurple/sound-theme-loader.c @@ -0,0 +1,111 @@ +/* + * SoundThemeLoader for libpurple + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include "internal.h" +#include "sound-theme-loader.h" +#include "sound-theme.h" +#include "util.h" +#include "xmlnode.h" + +/***************************************************************************** + * Sound Theme Builder + *****************************************************************************/ + +static PurpleTheme * +purple_sound_loader_build(const gchar *dir) +{ + xmlnode *root_node = NULL, *sub_node; + gchar *filename_full, *data; + PurpleSoundTheme *theme = NULL; + + /* Find the theme file */ + g_return_val_if_fail(dir != NULL, NULL); + filename_full = g_build_filename(dir, "theme.xml", NULL); + + if (g_file_test(filename_full, G_FILE_TEST_IS_REGULAR)) + root_node = xmlnode_from_file(dir, "theme.xml", "sound themes", "sound-theme-loader"); + + g_free(filename_full); + g_return_val_if_fail(root_node != NULL, NULL); + + /* Parse the tree */ + sub_node = xmlnode_get_child(root_node, "description"); + data = xmlnode_get_data(sub_node); + + if (xmlnode_get_attrib(root_node, "name") != NULL) { + theme = g_object_new(PURPLE_TYPE_SOUND_THEME, + "type", "sound", + "name", xmlnode_get_attrib(root_node, "name"), + "author", xmlnode_get_attrib(root_node, "author"), + "image", xmlnode_get_attrib(root_node, "image"), + "directory", dir, + "description", data, NULL); + + sub_node = xmlnode_get_child(root_node, "event"); + + while (sub_node) { + purple_sound_theme_set_file(theme, + xmlnode_get_attrib(sub_node, "name"), + xmlnode_get_attrib(sub_node, "file")); + sub_node = xmlnode_get_next_twin(sub_node); + } + } + + xmlnode_free(root_node); + g_free(data); + return PURPLE_THEME(theme); +} + +/****************************************************************************** + * GObject Stuff + *****************************************************************************/ + +static void +purple_sound_theme_loader_class_init(PurpleSoundThemeLoaderClass *klass) +{ + PurpleThemeLoaderClass *loader_klass = PURPLE_THEME_LOADER_CLASS(klass); + + loader_klass->purple_theme_loader_build = purple_sound_loader_build; +} + +GType +purple_sound_theme_loader_get_type(void) +{ + static GType type = 0; + if (type == 0) { + static const GTypeInfo info = { + sizeof(PurpleSoundThemeLoaderClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc)purple_sound_theme_loader_class_init, /* class_init */ + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof(PurpleSoundThemeLoader), + 0, /* n_preallocs */ + NULL, /* instance_init */ + NULL, /* value table */ + }; + type = g_type_register_static(PURPLE_TYPE_THEME_LOADER, + "PurpleSoundThemeLoader", &info, 0); + } + return type; +} diff --git a/libpurple/sound-theme-loader.h b/libpurple/sound-theme-loader.h new file mode 100644 index 0000000000..9eb927b156 --- /dev/null +++ b/libpurple/sound-theme-loader.h @@ -0,0 +1,71 @@ +/** + * @file sound-theme-loader.h Purple Sound Theme Loader Class API + */ + +/* purple + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#ifndef PURPLE_SOUND_THEME_LOADER_H +#define PURPLE_SOUND_THEME_LOADER_H + +#include <glib.h> +#include <glib-object.h> +#include "theme-loader.h" + +/** + * A purple sound theme loader. extends PurpleThemeLoader (theme-loader.h) + * This is a class designed to build sound themes + * + * PurpleSoundThemeLoader is a GObject. + */ +typedef struct _PurpleSoundThemeLoader PurpleSoundThemeLoader; +typedef struct _PurpleSoundThemeLoaderClass PurpleSoundThemeLoaderClass; + +#define PURPLE_TYPE_SOUND_THEME_LOADER (purple_sound_theme_loader_get_type()) +#define PURPLE_SOUND_THEME_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_SOUND_THEME_LOADER, PurpleSoundThemeLoader)) +#define PURPLE_SOUND_THEME_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_SOUND_THEME_LOADER, PurpleSoundThemeLoaderClass)) +#define PURPLE_IS_SOUND_THEME_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_SOUND_THEME_LOADER)) +#define PURPLE_IS_SOUND_THEME_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_SOUND_THEME_LOADER)) +#define PURPLE_SOUND_THEME_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_SOUND_THEME_LOADER, PurpleSoundThemeLoaderClass)) + +struct _PurpleSoundThemeLoader +{ + PurpleThemeLoader parent; +}; + +struct _PurpleSoundThemeLoaderClass +{ + PurpleThemeLoaderClass parent_class; +}; + +/**************************************************************************/ +/** @name Purple Theme-Loader API */ +/**************************************************************************/ +G_BEGIN_DECLS + +/** + * GObject foo. + * @internal. + */ +GType purple_sound_theme_loader_get_type(void); + +G_END_DECLS +#endif /* PURPLE_SOUND_THEME_LOADER_H */ diff --git a/libpurple/sound-theme.c b/libpurple/sound-theme.c new file mode 100644 index 0000000000..4918f40758 --- /dev/null +++ b/libpurple/sound-theme.c @@ -0,0 +1,158 @@ +/* + * Sound Themes for libpurple + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include "internal.h" +#include "sound-theme.h" + +#define PURPLE_SOUND_THEME_GET_PRIVATE(Gobject) \ + ((PurpleSoundThemePrivate *) ((PURPLE_SOUND_THEME(Gobject))->priv)) + +/****************************************************************************** + * Structs + *****************************************************************************/ + +typedef struct { + /* used to store filenames of diffrent sounds */ + GHashTable *sound_files; +} PurpleSoundThemePrivate; + +/****************************************************************************** + * Globals + *****************************************************************************/ + +static GObjectClass *parent_class = NULL; + +/****************************************************************************** + * Enums + *****************************************************************************/ + +/****************************************************************************** + * GObject Stuff + *****************************************************************************/ + +static void +purple_sound_theme_init(GTypeInstance *instance, + gpointer klass) +{ + PurpleSoundThemePrivate *priv; + + (PURPLE_SOUND_THEME(instance))->priv = g_new0(PurpleSoundThemePrivate, 1); + + priv = PURPLE_SOUND_THEME_GET_PRIVATE(instance); + + priv->sound_files = g_hash_table_new_full(g_str_hash, + g_str_equal, g_free, g_free); +} + +static void +purple_sound_theme_finalize(GObject *obj) +{ + PurpleSoundThemePrivate *priv; + + priv = PURPLE_SOUND_THEME_GET_PRIVATE(obj); + + g_hash_table_destroy(priv->sound_files); + + parent_class->finalize(obj); +} + +static void +purple_sound_theme_class_init(PurpleSoundThemeClass *klass) +{ + GObjectClass *obj_class = G_OBJECT_CLASS(klass); + + parent_class = g_type_class_peek_parent(klass); + + obj_class->finalize = purple_sound_theme_finalize; +} + +GType +purple_sound_theme_get_type(void) +{ + static GType type = 0; + if (type == 0) { + static const GTypeInfo info = { + sizeof(PurpleSoundThemeClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc)purple_sound_theme_class_init, /* class_init */ + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof(PurpleSoundTheme), + 0, /* n_preallocs */ + purple_sound_theme_init, /* instance_init */ + NULL, /* value table */ + }; + type = g_type_register_static(PURPLE_TYPE_THEME, + "PurpleSoundTheme", &info, 0); + } + return type; +} + +/***************************************************************************** + * Public API functions + *****************************************************************************/ + +const gchar * +purple_sound_theme_get_file(PurpleSoundTheme *theme, + const gchar *event) +{ + PurpleSoundThemePrivate *priv; + + g_return_val_if_fail(PURPLE_IS_SOUND_THEME(theme), NULL); + + priv = PURPLE_SOUND_THEME_GET_PRIVATE(theme); + + return g_hash_table_lookup(priv->sound_files, event); +} + +gchar * +purple_sound_theme_get_file_full(PurpleSoundTheme *theme, + const gchar *event) +{ + const gchar *filename; + + g_return_val_if_fail(PURPLE_IS_SOUND_THEME(theme), NULL); + + filename = purple_sound_theme_get_file(theme, event); + + g_return_val_if_fail(filename, NULL); + + return g_build_filename(purple_theme_get_dir(PURPLE_THEME(theme)), filename, NULL); +} + +void +purple_sound_theme_set_file(PurpleSoundTheme *theme, + const gchar *event, + const gchar *filename) +{ + PurpleSoundThemePrivate *priv; + g_return_if_fail(PURPLE_IS_SOUND_THEME(theme)); + + priv = PURPLE_SOUND_THEME_GET_PRIVATE(theme); + + if (filename != NULL) + g_hash_table_replace(priv->sound_files, + g_strdup(event), g_strdup(filename)); + else + g_hash_table_remove(priv->sound_files, event); +} diff --git a/libpurple/sound-theme.h b/libpurple/sound-theme.h new file mode 100644 index 0000000000..3c40a462c2 --- /dev/null +++ b/libpurple/sound-theme.h @@ -0,0 +1,105 @@ +/** + * @file sound-theme.h Purple Sound Theme Abstact Class API + */ + +/* purple + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#ifndef PURPLE_SOUND_THEME_H +#define PURPLE_SOUND_THEME_H + +#include <glib.h> +#include <glib-object.h> +#include "theme.h" +#include "sound.h" + +/** + * extends PurpleTheme (theme.h) + * A purple sound theme. + * This is an object for Purple to represent a sound theme. + * + * PurpleSoundTheme is a PurpleTheme Object. + */ +typedef struct _PurpleSoundTheme PurpleSoundTheme; +typedef struct _PurpleSoundThemeClass PurpleSoundThemeClass; + +#define PURPLE_TYPE_SOUND_THEME (purple_sound_theme_get_type()) +#define PURPLE_SOUND_THEME(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_SOUND_THEME, PurpleSoundTheme)) +#define PURPLE_SOUND_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_SOUND_THEME, PurpleSoundThemeClass)) +#define PURPLE_IS_SOUND_THEME(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_SOUND_THEME)) +#define PURPLE_IS_SOUND_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_SOUND_THEME)) +#define PURPLE_SOUND_THEME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_SOUND_THEME, PurpleSoundThemeClass)) + +struct _PurpleSoundTheme +{ + PurpleTheme parent; + gpointer priv; +}; + +struct _PurpleSoundThemeClass +{ + PurpleThemeClass parent_class; +}; + +/**************************************************************************/ +/** @name Purple Sound Theme API */ +/**************************************************************************/ +G_BEGIN_DECLS + +/** + * GObject foo. + * @internal. + */ +GType purple_sound_theme_get_type(void); + +/** + * Returns a copy of the filename for the sound event. + * + * @param event The purple sound event to look up. + * + * @returns The filename of the sound event. + */ +const gchar *purple_sound_theme_get_file(PurpleSoundTheme *theme, + const gchar *event); + +/** + * Returns a copy of the directory and filename for the sound event + * + * @param event The purple sound event to look up + * + * @returns The directory + '/' + filename of the sound event. This is + * a newly allocated string that should be freed with g_free. + */ +gchar *purple_sound_theme_get_file_full(PurpleSoundTheme *theme, + const gchar *event); + +/** + * Sets the filename for a given sound event + * + * @param event the purple sound event to look up + * @param filename the name of the file to be used for the event + */ +void purple_sound_theme_set_file(PurpleSoundTheme *theme, + const gchar *event, + const gchar *filename); + +G_END_DECLS +#endif /* PURPLE_SOUND_THEME_H */ diff --git a/libpurple/sound.c b/libpurple/sound.c index 86eeade167..4cb4ebb013 100644 --- a/libpurple/sound.c +++ b/libpurple/sound.c @@ -25,6 +25,8 @@ #include "blist.h" #include "prefs.h" #include "sound.h" +#include "sound-theme-loader.h" +#include "theme-manager.h" static PurpleSoundUiOps *sound_ui_ops = NULL; @@ -134,6 +136,8 @@ purple_sound_init() purple_prefs_add_none("/purple/sound"); purple_prefs_add_int("/purple/sound/while_status", STATUS_AVAILABLE); memset(last_played, 0, sizeof(last_played)); + + purple_theme_manager_register_type(g_object_new(PURPLE_TYPE_SOUND_THEME_LOADER, "type", "sound", NULL)); } void diff --git a/libpurple/sslconn.c b/libpurple/sslconn.c index fb921a53ba..c44bb54c06 100644 --- a/libpurple/sslconn.c +++ b/libpurple/sslconn.c @@ -216,7 +216,7 @@ purple_ssl_connect_with_host_fd(PurpleAccount *account, int fd, /* TODO: Move this elsewhere */ gsc->verifier = purple_certificate_find_verifier("x509","tls_cached"); - + ops = purple_ssl_get_ops(); ops->connectfunc(gsc); diff --git a/libpurple/sslconn.h b/libpurple/sslconn.h index 4c8a912618..d7378f8e42 100644 --- a/libpurple/sslconn.h +++ b/libpurple/sslconn.h @@ -66,7 +66,7 @@ struct _PurpleSslConnection /** File descriptor used to refer to the socket */ int fd; - /** Glib event source ID; used to refer to the received data callback + /** Glib event source ID; used to refer to the received data callback * in the glib eventloop */ guint inpa; /** Data related to the underlying TCP connection */ @@ -134,7 +134,7 @@ typedef struct * list can be guaranteed. */ GList * (* get_peer_certificates)(PurpleSslConnection * gsc); - + void (*_purple_reserved2)(void); void (*_purple_reserved3)(void); void (*_purple_reserved4)(void); diff --git a/libpurple/status.c b/libpurple/status.c index 5feb311e7d..7d91ddd5e4 100644 --- a/libpurple/status.c +++ b/libpurple/status.c @@ -23,6 +23,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ +#define _PURPLE_STATUS_C_ + #include "internal.h" #include "blist.h" @@ -203,7 +205,7 @@ purple_primitive_get_type_from_id(const char *id) for (i = 0; i < PURPLE_STATUS_NUM_PRIMITIVES; i++) { - if (!strcmp(id, status_primitive_map[i].id)) + if (purple_strequal(id, status_primitive_map[i].id)) return status_primitive_map[i].type; } @@ -451,7 +453,7 @@ purple_status_type_get_attr(const PurpleStatusType *status_type, const char *id) { PurpleStatusAttr *attr = (PurpleStatusAttr *)l->data; - if (!strcmp(purple_status_attr_get_id(attr), id)) + if (purple_strequal(purple_status_attr_get_id(attr), id)) return attr; } @@ -477,7 +479,7 @@ purple_status_type_find_with_id(GList *status_types, const char *id) { status_type = status_types->data; - if (!strcmp(id, status_type->id)) + if (purple_strequal(id, status_type->id)) return status_type; status_types = status_types->next; @@ -612,7 +614,8 @@ notify_buddy_status_update(PurpleBuddy *buddy, PurplePresence *presence, if (old_status != NULL) { - tmp = g_strdup_printf(_("%s (%s) changed status from %s to %s"), buddy_alias, buddy->name, + tmp = g_strdup_printf(_("%s (%s) changed status from %s to %s"), buddy_alias, + purple_buddy_get_name(buddy), purple_status_get_name(old_status), purple_status_get_name(new_status)); logtmp = g_markup_escape_text(tmp, -1); @@ -623,19 +626,21 @@ notify_buddy_status_update(PurpleBuddy *buddy, PurplePresence *presence, if (purple_status_is_active(new_status)) { - tmp = g_strdup_printf(_("%s (%s) is now %s"), buddy_alias, buddy->name, + tmp = g_strdup_printf(_("%s (%s) is now %s"), buddy_alias, + purple_buddy_get_name(buddy), purple_status_get_name(new_status)); logtmp = g_markup_escape_text(tmp, -1); } else { - tmp = g_strdup_printf(_("%s (%s) is no longer %s"), buddy_alias, buddy->name, + tmp = g_strdup_printf(_("%s (%s) is no longer %s"), buddy_alias, + purple_buddy_get_name(buddy), purple_status_get_name(new_status)); logtmp = g_markup_escape_text(tmp, -1); } } - log = purple_account_get_log(buddy->account, FALSE); + log = purple_account_get_log(purple_buddy_get_account(buddy), FALSE); if (log != NULL) { purple_log_write(log, PURPLE_MESSAGE_SYSTEM, buddy_alias, @@ -779,12 +784,8 @@ purple_status_set_active_with_attrs_list(PurpleStatus *status, gboolean active, { const gchar *string_data = l->data; l = l->next; - if (((string_data == NULL) && (value->data.string_data == NULL)) || - ((string_data != NULL) && (value->data.string_data != NULL) && - !strcmp(string_data, value->data.string_data))) - { + if (purple_strequal(string_data, value->data.string_data)) continue; - } purple_status_set_attr_string(status, id, string_data); changed = TRUE; } @@ -1146,13 +1147,13 @@ purple_presence_new_for_buddy(PurpleBuddy *buddy) PurpleAccount *account; g_return_val_if_fail(buddy != NULL, NULL); - account = buddy->account; + account = purple_buddy_get_account(buddy); presence = purple_presence_new(PURPLE_PRESENCE_CONTEXT_BUDDY); - presence->u.buddy.name = g_strdup(buddy->name); - presence->u.buddy.account = buddy->account; - presence->statuses = purple_prpl_get_statuses(buddy->account, presence); + presence->u.buddy.name = g_strdup(purple_buddy_get_name(buddy)); + presence->u.buddy.account = account; + presence->statuses = purple_prpl_get_statuses(account, presence); presence->u.buddy.buddy = buddy; @@ -1248,12 +1249,13 @@ update_buddy_idle(PurpleBuddy *buddy, PurplePresence *presence, time_t current_time, gboolean old_idle, gboolean idle) { PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); + PurpleAccount *account = purple_buddy_get_account(buddy); if (!old_idle && idle) { if (purple_prefs_get_bool("/purple/logging/log_system")) { - PurpleLog *log = purple_account_get_log(buddy->account, FALSE); + PurpleLog *log = purple_account_get_log(account, FALSE); if (log != NULL) { @@ -1273,7 +1275,7 @@ update_buddy_idle(PurpleBuddy *buddy, PurplePresence *presence, { if (purple_prefs_get_bool("/purple/logging/log_system")) { - PurpleLog *log = purple_account_get_log(buddy->account, FALSE); + PurpleLog *log = purple_account_get_log(account, FALSE); if (log != NULL) { @@ -1461,7 +1463,7 @@ purple_presence_get_status(const PurplePresence *presence, const char *status_id { PurpleStatus *temp_status = l->data; - if (!strcmp(status_id, purple_status_get_id(temp_status))) + if (purple_strequal(status_id, purple_status_get_id(temp_status))) status = temp_status; } diff --git a/libpurple/status.h b/libpurple/status.h index a364a8a0fd..f79a1958cc 100644 --- a/libpurple/status.h +++ b/libpurple/status.h @@ -252,6 +252,7 @@ PurpleStatusType *purple_status_type_new_with_attrs(PurpleStatusPrimitive primit */ void purple_status_type_destroy(PurpleStatusType *status_type); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) /** * Sets a status type's primary attribute. * @@ -261,10 +262,14 @@ void purple_status_type_destroy(PurpleStatusType *status_type); * * @param status_type The status type. * @param attr_id The ID of the primary attribute. + * + * @deprecated This function isn't used and should be removed in 3.0.0. */ void purple_status_type_set_primary_attr(PurpleStatusType *status_type, const char *attr_id); +#endif +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) /** * Adds an attribute to a status type. * @@ -272,10 +277,16 @@ void purple_status_type_set_primary_attr(PurpleStatusType *status_type, * @param id The ID of the attribute. * @param name The name presented to the user. * @param value The value type of this attribute. + * + * @deprecated This function isn't needed and should be removed in 3.0.0. + * Status type attributes should be set when the status type + * is created, in the call to purple_status_type_new_with_attrs. */ void purple_status_type_add_attr(PurpleStatusType *status_type, const char *id, const char *name, PurpleValue *value); +#endif +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) /** * Adds multiple attributes to a status type. * @@ -284,18 +295,29 @@ void purple_status_type_add_attr(PurpleStatusType *status_type, const char *id, * @param name The description of the first attribute. * @param value The value type of the first attribute attribute. * @param ... Additional attribute information. + * + * @deprecated This function isn't needed and should be removed in 3.0.0. + * Status type attributes should be set when the status type + * is created, in the call to purple_status_type_new_with_attrs. */ void purple_status_type_add_attrs(PurpleStatusType *status_type, const char *id, const char *name, PurpleValue *value, ...) G_GNUC_NULL_TERMINATED; +#endif +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) /** * Adds multiple attributes to a status type using a va_list. * * @param status_type The status type to add the attribute to. * @param args The va_list of attributes. + * + * @deprecated This function isn't needed and should be removed in 3.0.0. + * Status type attributes should be set when the status type + * is created, in the call to purple_status_type_new_with_attrs. */ void purple_status_type_add_attrs_vargs(PurpleStatusType *status_type, va_list args); +#endif /** * Returns the primitive type of a status type. @@ -378,14 +400,18 @@ gboolean purple_status_type_is_exclusive(const PurpleStatusType *status_type); */ gboolean purple_status_type_is_available(const PurpleStatusType *status_type); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) /** * Returns a status type's primary attribute ID. * * @param type The status type. * * @return The primary attribute's ID. + * + * @deprecated This function isn't used and should be removed in 3.0.0. */ const char *purple_status_type_get_primary_attr(const PurpleStatusType *type); +#endif /** * Returns the attribute with the specified ID. @@ -537,35 +563,50 @@ void purple_status_set_active_with_attrs(PurpleStatus *status, gboolean active, void purple_status_set_active_with_attrs_list(PurpleStatus *status, gboolean active, GList *attrs); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) /** * Sets the boolean value of an attribute in a status with the specified ID. * * @param status The status. * @param id The attribute ID. * @param value The boolean value. + * + * @deprecated This function is only used by status.c and should be made + * static in 3.0.0. */ void purple_status_set_attr_boolean(PurpleStatus *status, const char *id, gboolean value); +#endif +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) /** * Sets the integer value of an attribute in a status with the specified ID. * * @param status The status. * @param id The attribute ID. * @param value The integer value. + * + * @deprecated This function is only used by status.c and should be made + * static in 3.0.0. */ void purple_status_set_attr_int(PurpleStatus *status, const char *id, int value); +#endif +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) /** * Sets the string value of an attribute in a status with the specified ID. * * @param status The status. * @param id The attribute ID. * @param value The string value. + * + * @deprecated This function is only used by status.c and should be made + * static in 3.0.0. */ void purple_status_set_attr_string(PurpleStatus *status, const char *id, const char *value); +#endif /** * Returns the status's type. @@ -773,22 +814,31 @@ PurplePresence *purple_presence_new_for_buddy(PurpleBuddy *buddy); */ void purple_presence_destroy(PurplePresence *presence); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) /** * Adds a status to a presence. * * @param presence The presence. * @param status The status to add. + * + * @deprecated This function is only used by purple_presence_add_list, + * and both should be removed in 3.0.0. */ void purple_presence_add_status(PurplePresence *presence, PurpleStatus *status); +#endif +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) /** * Adds a list of statuses to the presence. * * @param presence The presence. * @param source_list The source list of statuses to add, which is not * modified or freed by this function. + * + * @deprecated This function isn't used and should be removed in 3.0.0. */ void purple_presence_add_list(PurplePresence *presence, GList *source_list); +#endif /** * Sets the active state of a status in a presence. diff --git a/libpurple/stun.c b/libpurple/stun.c index d28a04114d..9e39601241 100644 --- a/libpurple/stun.c +++ b/libpurple/stun.c @@ -388,9 +388,7 @@ PurpleStunNatDiscovery *purple_stun_discover(StunCallback cb) { /** Deal with the server name having changed since we did the lookup */ if (servername && strlen(servername) > 1 - && ((nattype.servername - && strcmp(servername, nattype.servername)) - || !nattype.servername)) { + && !purple_strequal(servername, nattype.servername)) { use_cached_result = FALSE; } diff --git a/libpurple/theme-loader.c b/libpurple/theme-loader.c new file mode 100644 index 0000000000..d50c28dec0 --- /dev/null +++ b/libpurple/theme-loader.c @@ -0,0 +1,183 @@ +/* + * ThemeLoaders for libpurple + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include "internal.h" +#include "theme-loader.h" + +#define PURPLE_THEME_LOADER_GET_PRIVATE(PurpleThemeLoader) \ + ((PurpleThemeLoaderPrivate *) ((PurpleThemeLoader)->priv)) + +void purple_theme_loader_set_type_string(PurpleThemeLoader *loader, const gchar *type); + +/****************************************************************************** + * Structs + *****************************************************************************/ +typedef struct { + gchar *type; +} PurpleThemeLoaderPrivate; + +/****************************************************************************** + * Globals + *****************************************************************************/ + +static GObjectClass *parent_class = NULL; + +/****************************************************************************** + * Enums + *****************************************************************************/ + +enum { + PROP_ZERO = 0, + PROP_TYPE, +}; + +/****************************************************************************** + * GObject Stuff * + *****************************************************************************/ + +static void +purple_theme_loader_get_property(GObject *obj, guint param_id, GValue *value, + GParamSpec *psec) +{ + PurpleThemeLoader *theme_loader = PURPLE_THEME_LOADER(obj); + + switch (param_id) { + case PROP_TYPE: + g_value_set_string(value, purple_theme_loader_get_type_string(theme_loader)); + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, psec); + break; + } +} + +static void +purple_theme_loader_set_property(GObject *obj, guint param_id, const GValue *value, + GParamSpec *psec) +{ + PurpleThemeLoader *loader = PURPLE_THEME_LOADER(obj); + + switch (param_id) { + case PROP_TYPE: + purple_theme_loader_set_type_string(loader, g_value_get_string(value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, psec); + break; + } +} + +static void +purple_theme_loader_init(GTypeInstance *instance, + gpointer klass) +{ + PurpleThemeLoader *loader = PURPLE_THEME_LOADER(instance); + loader->priv = g_new0(PurpleThemeLoaderPrivate, 1); +} + +static void +purple_theme_loader_finalize(GObject *obj) +{ + PurpleThemeLoader *loader = PURPLE_THEME_LOADER(obj); + PurpleThemeLoaderPrivate *priv = PURPLE_THEME_LOADER_GET_PRIVATE(loader); + + g_free(priv->type); + + parent_class->finalize(obj); +} + +static void +purple_theme_loader_class_init(PurpleThemeLoaderClass *klass) +{ + GObjectClass *obj_class = G_OBJECT_CLASS(klass); + GParamSpec *pspec; + + parent_class = g_type_class_peek_parent(klass); + + obj_class->get_property = purple_theme_loader_get_property; + obj_class->set_property = purple_theme_loader_set_property; + obj_class->finalize = purple_theme_loader_finalize; + + /* TYPE STRING (read only) */ + pspec = g_param_spec_string("type", "Type", + "The string represtenting the type of the theme", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property(obj_class, PROP_TYPE, pspec); +} + +GType +purple_theme_loader_get_type(void) +{ + static GType type = 0; + if (type == 0) { + static const GTypeInfo info = { + sizeof(PurpleThemeLoaderClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc)purple_theme_loader_class_init, /* class_init */ + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof(PurpleThemeLoader), + 0, /* n_preallocs */ + purple_theme_loader_init, /* instance_init */ + NULL, /* value table */ + }; + type = g_type_register_static(G_TYPE_OBJECT, + "PurpleThemeLoader", &info, G_TYPE_FLAG_ABSTRACT); + } + return type; +} + +/***************************************************************************** + * Public API functions + *****************************************************************************/ + +const gchar * +purple_theme_loader_get_type_string(PurpleThemeLoader *theme_loader) +{ + PurpleThemeLoaderPrivate *priv = NULL; + + g_return_val_if_fail(PURPLE_IS_THEME_LOADER(theme_loader), NULL); + + priv = PURPLE_THEME_LOADER_GET_PRIVATE(theme_loader); + return priv->type; +} + +/* < private > */ +void +purple_theme_loader_set_type_string(PurpleThemeLoader *loader, const gchar *type) +{ + PurpleThemeLoaderPrivate *priv; + + g_return_if_fail(PURPLE_IS_THEME_LOADER(loader)); + + priv = PURPLE_THEME_LOADER_GET_PRIVATE(loader); + + g_free(priv->type); + priv->type = g_strdup(type); +} + +PurpleTheme * +purple_theme_loader_build(PurpleThemeLoader *loader, const gchar *dir) +{ + return PURPLE_THEME_LOADER_GET_CLASS(loader)->purple_theme_loader_build(dir); +} diff --git a/libpurple/theme-loader.h b/libpurple/theme-loader.h new file mode 100644 index 0000000000..8cd82155c3 --- /dev/null +++ b/libpurple/theme-loader.h @@ -0,0 +1,92 @@ +/** + * @file theme-loader.h Purple Theme Loader Abstact Class API + */ + +/* purple + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#ifndef PURPLE_THEME_LOADER_H +#define PURPLE_THEME_LOADER_H + +#include <glib.h> +#include <glib-object.h> +#include "theme.h" + +/** + * A purple theme loader. + * This is an abstract class for Purple to use with the Purple theme manager. + * The loader is responsible for building each type of theme + * + * PurpleThemeLoader is a GObject. + */ +typedef struct _PurpleThemeLoader PurpleThemeLoader; +typedef struct _PurpleThemeLoaderClass PurpleThemeLoaderClass; + +#define PURPLE_TYPE_THEME_LOADER (purple_theme_loader_get_type()) +#define PURPLE_THEME_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_THEME_LOADER, PurpleThemeLoader)) +#define PURPLE_THEME_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_THEME_LOADER, PurpleThemeLoaderClass)) +#define PURPLE_IS_THEME_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_THEME_LOADER)) +#define PURPLE_IS_THEME_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_THEME_LOADER)) +#define PURPLE_THEME_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_THEME_LOADER, PurpleThemeLoaderClass)) + +struct _PurpleThemeLoader +{ + GObject parent; + gpointer priv; +}; + +struct _PurpleThemeLoaderClass +{ + GObjectClass parent_class; + PurpleTheme *((*purple_theme_loader_build)(const gchar*)); +}; + +/**************************************************************************/ +/** @name Purple Theme-Loader API */ +/**************************************************************************/ +G_BEGIN_DECLS + +/** + * GObject foo. + * @internal. + */ +GType purple_theme_loader_get_type(void); + +/** + * Returns the string represtenting the type of the theme loader + * + * @param self The theme loader + * + * @returns The string represting this type + */ +const gchar *purple_theme_loader_get_type_string(PurpleThemeLoader *self); + +/** + * Creates a new PurpleTheme + * + * @param dir The directory containing the theme + * + * @returns A PurpleTheme containing the information from the directory + */ +PurpleTheme *purple_theme_loader_build(PurpleThemeLoader *loader, const gchar *dir); + +G_END_DECLS +#endif /* PURPLE_THEME_LOADER_H */ diff --git a/libpurple/theme-manager.c b/libpurple/theme-manager.c new file mode 100644 index 0000000000..1843692f28 --- /dev/null +++ b/libpurple/theme-manager.c @@ -0,0 +1,295 @@ +/* + * Themes for libpurple + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include <glib.h> +#include <string.h> + +#include "internal.h" +#include "theme-manager.h" +#include "util.h" + +/****************************************************************************** + * Globals + *****************************************************************************/ + +static GHashTable *theme_table = NULL; + +/***************************************************************************** + * GObject Stuff + ****************************************************************************/ + +GType +purple_theme_manager_get_type(void) +{ + static GType type = 0; + if (type == 0) { + static const GTypeInfo info = { + sizeof(PurpleThemeManagerClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + NULL, /* class_init */ + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof(PurpleThemeManager), + 0, /* n_preallocs */ + NULL, /* instance_init */ + NULL, /* Value Table */ + }; + type = g_type_register_static(G_TYPE_OBJECT, + "PurpleThemeManager", &info, 0); + } + return type; +} + +/****************************************************************************** + * Helpers + *****************************************************************************/ + +/* makes a key of <type> + '/' + <name> */ +static gchar * +purple_theme_manager_make_key(const gchar *name, const gchar *type) +{ + g_return_val_if_fail(name && *name, NULL); + g_return_val_if_fail(type && *type, NULL); + return g_strconcat(type, "/", name, NULL); +} + +/* returns TRUE if theme is of type "user_data" */ +static gboolean +purple_theme_manager_is_theme_type(gchar *key, + gpointer value, + gchar *user_data) +{ + return g_str_has_prefix(key, g_strconcat(user_data, "/", NULL)); +} + +static gboolean +purple_theme_manager_is_theme(gchar *key, + gpointer value, + gchar *user_data) +{ + return PURPLE_IS_THEME(value); +} + +static void +purple_theme_manager_function_wrapper(gchar *key, + gpointer value, + PTFunc user_data) +{ + if (PURPLE_IS_THEME(value)) + (* user_data)(value); +} + +static void +purple_theme_manager_build_dir(const gchar *root) +{ + gchar *purple_dir, *theme_dir; + const gchar *name = NULL, *type = NULL; + GDir *rdir, *tdir; + PurpleThemeLoader *loader; + + rdir = g_dir_open(root, 0, NULL); + + if (!rdir) + return; + + /* Parses directory by root/name/purple/type */ + while ((name = g_dir_read_name(rdir))) { + purple_dir = g_build_filename(root, name, "purple", NULL); + tdir = g_dir_open(purple_dir, 0, NULL); + + if (!tdir) { + g_free(purple_dir); + + continue; + } + + while ((type = g_dir_read_name(tdir))) { + if ((loader = g_hash_table_lookup(theme_table, type))) { + PurpleTheme *theme = NULL; + + theme_dir = g_build_filename(purple_dir, type, NULL); + + theme = purple_theme_loader_build(loader, theme_dir); + + if (PURPLE_IS_THEME(theme)) + purple_theme_manager_add_theme(theme); + } + } + + g_dir_close(tdir); + g_free(purple_dir); + } + + g_dir_close(rdir); +} + +/***************************************************************************** + * Public API functions + *****************************************************************************/ + +void +purple_theme_manager_init(void) +{ + theme_table = g_hash_table_new_full(g_str_hash, + g_str_equal, g_free, g_object_unref); +} + +void +purple_theme_manager_refresh(void) +{ + gchar *path = NULL; + const gchar *xdg = NULL; + gint i = 0; + + g_hash_table_foreach_remove(theme_table, + (GHRFunc) purple_theme_manager_is_theme, NULL); + + /* Add themes from ~/.purple */ + path = g_build_filename(purple_user_dir(), "themes", NULL); + purple_theme_manager_build_dir(path); + g_free(path); + + /* look for XDG_DATA_HOME. If we don't have it use ~/.local, and add it */ + if ((xdg = g_getenv("XDG_DATA_HOME")) != NULL) + path = g_build_filename(xdg, "themes", NULL); + else + path = g_build_filename(purple_home_dir(), ".local", "themes", NULL); + + purple_theme_manager_build_dir(path); + g_free(path); + + /* now dig through XDG_DATA_DIRS and add those too */ + xdg = g_getenv("XDG_DATA_DIRS"); + if (xdg) { + gchar **xdg_dirs = g_strsplit(xdg, G_SEARCHPATH_SEPARATOR_S, 0); + + for (i = 0; xdg_dirs[i]; i++) { + path = g_build_filename(xdg_dirs[i], "themes", NULL); + purple_theme_manager_build_dir(path); + g_free(path); + } + + g_strfreev(xdg_dirs); + } +} + +void +purple_theme_manager_uninit(void) +{ + g_hash_table_destroy(theme_table); +} + +void +purple_theme_manager_register_type(PurpleThemeLoader *loader) +{ + gchar *type; + + g_return_if_fail(PURPLE_IS_THEME_LOADER(loader)); + + type = g_strdup(purple_theme_loader_get_type_string(loader)); + g_return_if_fail(type); + + /* if something is already there do nothing */ + if (!g_hash_table_lookup(theme_table, type)) + g_hash_table_insert(theme_table, type, loader); +} + +void +purple_theme_manager_unregister_type(PurpleThemeLoader *loader) +{ + const gchar *type; + + g_return_if_fail(PURPLE_IS_THEME_LOADER(loader)); + + type = purple_theme_loader_get_type_string(loader); + g_return_if_fail(type); + + if (g_hash_table_lookup(theme_table, type) == loader) + { + g_hash_table_remove(theme_table, type); + + g_hash_table_foreach_remove(theme_table, + (GHRFunc)purple_theme_manager_is_theme_type, (gpointer)type); + } /* only free if given registered loader */ +} + +PurpleTheme * +purple_theme_manager_find_theme(const gchar *name, + const gchar *type) +{ + gchar *key; + PurpleTheme *theme; + + key = purple_theme_manager_make_key(name, type); + + g_return_val_if_fail(key, NULL); + + theme = g_hash_table_lookup(theme_table, key); + + g_free(key); + + return theme; +} + +void +purple_theme_manager_add_theme(PurpleTheme *theme) +{ + gchar *key; + + g_return_if_fail(PURPLE_IS_THEME(theme)); + + key = purple_theme_manager_make_key(purple_theme_get_name(theme), + purple_theme_get_type_string(theme)); + + g_return_if_fail(key); + + /* if something is already there do nothing */ + if (g_hash_table_lookup(theme_table, key) == NULL) + g_hash_table_insert(theme_table, key, theme); +} + +void +purple_theme_manager_remove_theme(PurpleTheme *theme) +{ + gchar *key; + + g_return_if_fail(PURPLE_IS_THEME(theme)); + + key = purple_theme_manager_make_key(purple_theme_get_name(theme), + purple_theme_get_type_string(theme)); + + g_return_if_fail(key); + + g_hash_table_remove(theme_table, key); + + g_free(key); +} + +void +purple_theme_manager_for_each_theme(PTFunc func) +{ + g_return_if_fail(func); + + g_hash_table_foreach(theme_table, + (GHFunc) purple_theme_manager_function_wrapper, func); +} diff --git a/libpurple/theme-manager.h b/libpurple/theme-manager.h new file mode 100644 index 0000000000..96e0a6986d --- /dev/null +++ b/libpurple/theme-manager.h @@ -0,0 +1,131 @@ +/** + * @file thememanager.h Theme Manager API + */ + +/* + * purple + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#ifndef PURPLE_THEME_MANAGER_H +#define PURPLE_THEME_MANAGER_H + +#include <glib-object.h> +#include <glib.h> +#include "theme.h" +#include "theme-loader.h" + +typedef void (*PTFunc) (PurpleTheme *); + +typedef struct _PurpleThemeManager PurpleThemeManager; +typedef struct _PurpleThemeManagerClass PurpleThemeManagerClass; + +#define PURPLE_TYPE_THEME_MANAGER (purple_theme_manager_get_type()) +#define PURPLE_THEME_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_THEME_MANAGER, PurpleThemeManager)) +#define PURPLE_THEME_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_THEME_MANAGER, PurpleThemeManagerClass)) +#define PURPLE_IS_THEME_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_THEME_MANAGER)) +#define PURPLE_IS_THEME_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_THEME_MANAGER)) +#define PURPLE_GET_THEME_MANAGER_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_THEME_MANAGER, PurpleThemeManagerClass)) + +struct _PurpleThemeManager { + GObject parent; +}; + +struct _PurpleThemeManagerClass { + GObjectClass parent_class; +}; + +/**************************************************************************/ +/** @name Purple Theme Manager API */ +/**************************************************************************/ +G_BEGIN_DECLS + +/** + * GObject foo. + * + * @internal. + */ +GType purple_theme_manager_get_type(void); + +/** + * Initalizes the theme manager. + */ +void purple_theme_manager_init(void); + +/** + * Uninitalizes the manager then frees all the themes and loaders it is + * responsible for. + */ +void purple_theme_manager_uninit(void); + +/** + * Rebuilds all the themes in the theme manager. + * (Removes all current themes but keeps the added loaders.) + */ +void purple_theme_manager_refresh(void); + +/** + * Finds the PurpleTheme object stored by the theme manager. + * + * @param name The name of the PurpleTheme. + * @param type The type of the PurpleTheme. + * + * @returns The PurpleTheme, or NULL if it wasn't found. + */ +PurpleTheme *purple_theme_manager_find_theme(const gchar *name, const gchar *type); + +/** + * Adds a PurpleTheme to the theme manager. If the theme already exists + * then this function does nothing. + * + * @param theme The PurpleTheme to add to the manager. + */ +void purple_theme_manager_add_theme(PurpleTheme *theme); + +/** + * Removes a PurpleTheme from the theme manager and frees the theme. + * + * @param theme The PurpleTheme to remove from the manager. + */ +void purple_theme_manager_remove_theme(PurpleTheme *theme); + +/** + * Adds a loader to the theme manager so it knows how to build themes. + * + * @param loader The PurpleThemeLoader to add. + */ +void purple_theme_manager_register_type(PurpleThemeLoader *loader); + +/** + * Removes the loader and all themes of the same type from the loader. + * + * @param loader The PurpleThemeLoader to be removed. + */ +void purple_theme_manager_unregister_type(PurpleThemeLoader *loader); + +/** + * Calls the given function on each purple theme. + * + * @param func The PTFunc to be applied to each theme. + */ +void purple_theme_manager_for_each_theme(PTFunc func); + +G_END_DECLS +#endif /* PURPLE_THEME_MANAGER_H */ diff --git a/libpurple/theme.c b/libpurple/theme.c new file mode 100644 index 0000000000..2560cf2548 --- /dev/null +++ b/libpurple/theme.c @@ -0,0 +1,408 @@ +/* + * Themes for libpurple + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include <glib.h> +#include <string.h> + +#include "internal.h" +#include "theme.h" +#include "util.h" + +#define PURPLE_THEME_GET_PRIVATE(PurpleTheme) \ + ((PurpleThemePrivate *) ((PurpleTheme)->priv)) + +void purple_theme_set_type_string(PurpleTheme *theme, const gchar *type); + +/****************************************************************************** + * Structs + *****************************************************************************/ + +typedef struct { + gchar *name; + gchar *description; + gchar *author; + gchar *type; + gchar *dir; + gchar *img; +} PurpleThemePrivate; + +/****************************************************************************** + * Globals + *****************************************************************************/ + +static GObjectClass *parent_class = NULL; + +/****************************************************************************** + * Enums + *****************************************************************************/ + +enum { + PROP_ZERO = 0, + PROP_NAME, + PROP_DESCRIPTION, + PROP_AUTHOR, + PROP_TYPE, + PROP_DIR, + PROP_IMAGE +}; + +/****************************************************************************** + * GObject Stuff + *****************************************************************************/ + +static void +purple_theme_get_property(GObject *obj, guint param_id, GValue *value, + GParamSpec *psec) +{ + PurpleTheme *theme = PURPLE_THEME(obj); + + switch (param_id) { + case PROP_NAME: + g_value_set_string(value, purple_theme_get_name(theme)); + break; + case PROP_DESCRIPTION: + g_value_set_string(value, purple_theme_get_description(theme)); + break; + case PROP_AUTHOR: + g_value_set_string(value, purple_theme_get_author(theme)); + break; + case PROP_TYPE: + g_value_set_string(value, purple_theme_get_type_string(theme)); + break; + case PROP_DIR: + g_value_set_string(value, purple_theme_get_dir(theme)); + break; + case PROP_IMAGE: + g_value_set_string(value, purple_theme_get_image(theme)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, psec); + break; + } +} + +static void +purple_theme_set_property(GObject *obj, guint param_id, const GValue *value, + GParamSpec *psec) +{ + PurpleTheme *theme = PURPLE_THEME(obj); + + switch (param_id) { + case PROP_NAME: + purple_theme_set_name(theme, g_value_get_string(value)); + break; + case PROP_DESCRIPTION: + purple_theme_set_description(theme, g_value_get_string(value)); + break; + case PROP_AUTHOR: + purple_theme_set_author(theme, g_value_get_string(value)); + break; + case PROP_TYPE: + purple_theme_set_type_string(theme, g_value_get_string(value)); + break; + case PROP_DIR: + purple_theme_set_dir(theme, g_value_get_string(value)); + break; + case PROP_IMAGE: + purple_theme_set_image(theme, g_value_get_string(value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, psec); + break; + } +} + +static void +purple_theme_init(GTypeInstance *instance, + gpointer klass) +{ + PurpleTheme *theme = PURPLE_THEME(instance); + theme->priv = g_new0(PurpleThemePrivate, 1); +} + +static void +purple_theme_finalize(GObject *obj) +{ + PurpleTheme *theme = PURPLE_THEME(obj); + PurpleThemePrivate *priv = PURPLE_THEME_GET_PRIVATE(theme); + + g_free(priv->name); + g_free(priv->description); + g_free(priv->author); + g_free(priv->type); + g_free(priv->dir); + g_free(priv->img); + + G_OBJECT_CLASS (parent_class)->finalize (obj); +} + +static void +purple_theme_class_init(PurpleThemeClass *klass) +{ + GObjectClass *obj_class = G_OBJECT_CLASS(klass); + GParamSpec *pspec; + + parent_class = g_type_class_peek_parent(klass); + + obj_class->get_property = purple_theme_get_property; + obj_class->set_property = purple_theme_set_property; + obj_class->finalize = purple_theme_finalize; + + /* NAME */ + pspec = g_param_spec_string("name", "Name", + "The name of the theme", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT); + g_object_class_install_property(obj_class, PROP_NAME, pspec); + + /* DESCRIPTION */ + pspec = g_param_spec_string("description", "Description", + "The description of the theme", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT); + g_object_class_install_property(obj_class, PROP_DESCRIPTION, pspec); + + /* AUTHOR */ + pspec = g_param_spec_string("author", "Author", + "The author of the theme", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT); + g_object_class_install_property(obj_class, PROP_AUTHOR, pspec); + + /* TYPE STRING (read only) */ + pspec = g_param_spec_string("type", "Type", + "The string represtenting the type of the theme", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property(obj_class, PROP_TYPE, pspec); + + /* DIRECTORY */ + pspec = g_param_spec_string("directory", "Directory", + "The directory that contains the theme and all its files", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT); + g_object_class_install_property(obj_class, PROP_DIR, pspec); + + /* PREVIEW IMAGE */ + pspec = g_param_spec_string("image", "Image", + "A preview image of the theme", + NULL, + G_PARAM_READWRITE); + g_object_class_install_property(obj_class, PROP_IMAGE, pspec); +} + + +GType +purple_theme_get_type(void) +{ + static GType type = 0; + if (type == 0) { + static const GTypeInfo info = { + sizeof(PurpleThemeClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc)purple_theme_class_init, /* class_init */ + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof(PurpleTheme), + 0, /* n_preallocs */ + purple_theme_init, /* instance_init */ + NULL, /* value table */ + }; + type = g_type_register_static (G_TYPE_OBJECT, + "PurpleTheme", &info, G_TYPE_FLAG_ABSTRACT); + } + return type; +} + +/****************************************************************************** + * Helper Functions + *****************************************************************************/ + +static gchar * +theme_clean_text(const gchar *text) +{ + gchar *clean_text = g_markup_escape_text(text, -1); + g_strdelimit(clean_text, "\n", ' '); + purple_str_strip_char(clean_text, '\r'); + return clean_text; +} + +/***************************************************************************** + * Public API function + *****************************************************************************/ + +const gchar * +purple_theme_get_name(PurpleTheme *theme) +{ + PurpleThemePrivate *priv; + + g_return_val_if_fail(PURPLE_IS_THEME(theme), NULL); + + priv = PURPLE_THEME_GET_PRIVATE(theme); + return priv->name; +} + +void +purple_theme_set_name(PurpleTheme *theme, const gchar *name) +{ + PurpleThemePrivate *priv; + + g_return_if_fail(PURPLE_IS_THEME(theme)); + + priv = PURPLE_THEME_GET_PRIVATE(theme); + + g_free(priv->name); + priv->name = theme_clean_text(name); +} + +const gchar * +purple_theme_get_description(PurpleTheme *theme) +{ + PurpleThemePrivate *priv; + + g_return_val_if_fail(PURPLE_IS_THEME(theme), NULL); + + priv = PURPLE_THEME_GET_PRIVATE(theme); + return priv->description; +} + +void +purple_theme_set_description(PurpleTheme *theme, const gchar *description) +{ + PurpleThemePrivate *priv; + + g_return_if_fail(PURPLE_IS_THEME(theme)); + + priv = PURPLE_THEME_GET_PRIVATE(theme); + + g_free(priv->description); + priv->description = theme_clean_text(description); +} + +const gchar * +purple_theme_get_author(PurpleTheme *theme) +{ + PurpleThemePrivate *priv; + + g_return_val_if_fail(PURPLE_IS_THEME(theme), NULL); + + priv = PURPLE_THEME_GET_PRIVATE(theme); + return priv->author; +} + +void +purple_theme_set_author(PurpleTheme *theme, const gchar *author) +{ + PurpleThemePrivate *priv; + + g_return_if_fail(PURPLE_IS_THEME(theme)); + + priv = PURPLE_THEME_GET_PRIVATE(theme); + + g_free(priv->author); + priv->author = theme_clean_text(author); +} + +const gchar * +purple_theme_get_type_string(PurpleTheme *theme) +{ + PurpleThemePrivate *priv; + + g_return_val_if_fail(PURPLE_IS_THEME(theme), NULL); + + priv = PURPLE_THEME_GET_PRIVATE(theme); + return priv->type; +} + +/* < private > */ +void +purple_theme_set_type_string(PurpleTheme *theme, const gchar *type) +{ + PurpleThemePrivate *priv; + + g_return_if_fail(PURPLE_IS_THEME(theme)); + + priv = PURPLE_THEME_GET_PRIVATE(theme); + + g_free(priv->type); + priv->type = g_strdup(type); +} + +const gchar * +purple_theme_get_dir(PurpleTheme *theme) +{ + PurpleThemePrivate *priv; + + g_return_val_if_fail(PURPLE_IS_THEME(theme), NULL); + + priv = PURPLE_THEME_GET_PRIVATE(theme); + return priv->dir; +} + +void +purple_theme_set_dir(PurpleTheme *theme, const gchar *dir) +{ + PurpleThemePrivate *priv; + + g_return_if_fail(PURPLE_IS_THEME(theme)); + + priv = PURPLE_THEME_GET_PRIVATE(theme); + + g_free(priv->dir); + priv->dir = g_strdup(dir); +} + +const gchar * +purple_theme_get_image(PurpleTheme *theme) +{ + PurpleThemePrivate *priv; + + g_return_val_if_fail(PURPLE_IS_THEME(theme), NULL); + + priv = PURPLE_THEME_GET_PRIVATE(theme); + + return priv->img; +} + +gchar * +purple_theme_get_image_full(PurpleTheme *theme) +{ + const gchar *filename = purple_theme_get_image(theme); + + g_return_val_if_fail(filename, NULL); + + return g_build_filename(purple_theme_get_dir(PURPLE_THEME(theme)), filename, NULL); +} + +void +purple_theme_set_image(PurpleTheme *theme, const gchar *img) +{ + PurpleThemePrivate *priv; + + g_return_if_fail(PURPLE_IS_THEME(theme)); + + priv = PURPLE_THEME_GET_PRIVATE(theme); + + g_free(priv->img); + priv->img = g_strdup(img); +} diff --git a/libpurple/theme.h b/libpurple/theme.h new file mode 100644 index 0000000000..5efae71a82 --- /dev/null +++ b/libpurple/theme.h @@ -0,0 +1,175 @@ +/** + * @file theme.h Purple Theme Abstact Class API + */ + +/* purple + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#ifndef PURPLE_THEME_H +#define PURPLE_THEME_H + +#include <glib.h> +#include <glib-object.h> +#include "imgstore.h" + +/** + * A purple theme. + * This is an abstract class for Purple to use with the Purple theme manager. + * + * PurpleTheme is a GObject. + */ +typedef struct _PurpleTheme PurpleTheme; +typedef struct _PurpleThemeClass PurpleThemeClass; + +#define PURPLE_TYPE_THEME (purple_theme_get_type ()) +#define PURPLE_THEME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PURPLE_TYPE_THEME, PurpleTheme)) +#define PURPLE_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PURPLE_TYPE_THEME, PurpleThemeClass)) +#define PURPLE_IS_THEME(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PURPLE_TYPE_THEME)) +#define PURPLE_IS_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PURPLE_TYPE_THEME)) +#define PURPLE_THEME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PURPLE_TYPE_THEME, PurpleThemeClass)) + +struct _PurpleTheme +{ + GObject parent; + gpointer priv; +}; + +struct _PurpleThemeClass +{ + GObjectClass parent_class; +}; + +/**************************************************************************/ +/** @name Purple Theme API */ +/**************************************************************************/ +G_BEGIN_DECLS + +/** + * GObject foo. + * @internal. + */ +GType purple_theme_get_type(void); + +/** + * Returns the name of the PurpleTheme object. + * + * @param theme The purple theme. + * + * @return The string representating the name of the theme. + */ +const gchar *purple_theme_get_name(PurpleTheme *theme); + +/** + * Sets the name of the PurpleTheme object. + * + * @param theme The purple theme. + * @param name The name of the PurpleTheme object. + */ +void purple_theme_set_name(PurpleTheme *theme, const gchar *name); + +/** + * Returns the description of the PurpleTheme object. + * + * @param theme The purple theme. + * + * @return A short description of the theme. + */ +const gchar *purple_theme_get_description(PurpleTheme *theme); + +/** + * Sets the description of the PurpleTheme object. + * + * @param theme The purple theme. + * @param description The description of the PurpleTheme object. + */ +void purple_theme_set_description(PurpleTheme *theme, const gchar *description); + +/** + * Returns the author of the PurpleTheme object. + * + * @param theme The purple theme. + * + * @return The author of the theme. + */ +const gchar *purple_theme_get_author(PurpleTheme *theme); + +/** + * Sets the author of the PurpleTheme object. + * + * @param theme The purple theme. + * @param author The author of the PurpleTheme object. + */ +void purple_theme_set_author(PurpleTheme *theme, const gchar *author); + +/** + * Returns the type (string) of the PurpleTheme object. + * + * @param theme The purple theme. + * + * @return The string represtenting the type. + */ +const gchar *purple_theme_get_type_string(PurpleTheme *theme); + +/** + * Returns the directory of the PurpleTheme object. + * + * @param theme The purple theme. + * + * @return The string represtenting the theme directory. + */ +const gchar *purple_theme_get_dir(PurpleTheme *theme); + +/** + * Sets the directory of the PurpleTheme object. + * + * @param theme The purple theme. + * @param dir The directory of the PurpleTheme object. + */ +void purple_theme_set_dir(PurpleTheme *theme, const gchar *dir); + +/** + * Returns the image preview of the PurpleTheme object. + * + * @param theme The purple theme. + * + * @return The image preview of the PurpleTheme object. + */ +const gchar *purple_theme_get_image(PurpleTheme *theme); + +/** + * Returns the image preview and directory of the PurpleTheme object. + * + * @param theme The purple theme. + * + * @return The image preview of the PurpleTheme object. + */ +gchar *purple_theme_get_image_full(PurpleTheme *theme); + +/** + * Sets the directory of the PurpleTheme object. + * + * @param theme The purple theme. + * @param img The image preview of the PurpleTheme object. + */ +void purple_theme_set_image(PurpleTheme *theme, const gchar *img); + +G_END_DECLS +#endif /* PURPLE_THEME_H */ diff --git a/libpurple/upnp.c b/libpurple/upnp.c index 9b63072ece..6d91061db8 100644 --- a/libpurple/upnp.c +++ b/libpurple/upnp.c @@ -1049,7 +1049,7 @@ static void* purple_upnp_get_handle(void) { static int handle; - + return &handle; } diff --git a/libpurple/util.c b/libpurple/util.c index c9aa7648a5..ac7598e317 100644 --- a/libpurple/util.c +++ b/libpurple/util.c @@ -98,7 +98,7 @@ purple_menu_action_free(PurpleMenuAction *act) void purple_util_init(void) { - /* This does nothing right now. It exists for symmetry with + /* This does nothing right now. It exists for symmetry with * purple_util_uninit() and forwards compatibility. */ } @@ -1409,7 +1409,7 @@ purple_markup_html_to_xhtml(const char *html, char **xhtml_out, struct purple_parse_tag *pt = tags->data; if(xhtml) g_string_append_printf(xhtml, "</%s>", pt->dest_tag); - if(plain && !strcmp(pt->src_tag, "a")) { + if(plain && purple_strequal(pt->src_tag, "a")) { /* if this is a link, we have to add the url to the plaintext, too */ if (cdata && url && (!g_string_equal(cdata, url) && (g_ascii_strncasecmp(url->str, "mailto:", 7) != 0 || @@ -2693,7 +2693,7 @@ purple_util_write_data_to_file_absolute(const char *filename_full, const char *d return FALSE; } #endif - + /* Close file */ if (fclose(file) != 0) { @@ -2774,70 +2774,7 @@ purple_util_write_data_to_file_absolute(const char *filename_full, const char *d xmlnode * purple_util_read_xml_from_file(const char *filename, const char *description) { - const char *user_dir = purple_user_dir(); - gchar *filename_full; - GError *error = NULL; - gchar *contents = NULL; - gsize length; - xmlnode *node = NULL; - - g_return_val_if_fail(user_dir != NULL, NULL); - - purple_debug_info("util", "Reading file %s from directory %s\n", - filename, user_dir); - - filename_full = g_build_filename(user_dir, filename, NULL); - - if (!g_file_test(filename_full, G_FILE_TEST_EXISTS)) - { - purple_debug_info("util", "File %s does not exist (this is not " - "necessarily an error)\n", filename_full); - g_free(filename_full); - return NULL; - } - - if (!g_file_get_contents(filename_full, &contents, &length, &error)) - { - purple_debug_error("util", "Error reading file %s: %s\n", - filename_full, error->message); - g_error_free(error); - } - - if ((contents != NULL) && (length > 0)) - { - node = xmlnode_from_str(contents, length); - - /* If we were unable to parse the file then save its contents to a backup file */ - if (node == NULL) - { - gchar *filename_temp; - - filename_temp = g_strdup_printf("%s~", filename); - purple_debug_error("util", "Error parsing file %s. Renaming old " - "file to %s\n", filename_full, filename_temp); - purple_util_write_data_to_file(filename_temp, contents, length); - g_free(filename_temp); - } - - g_free(contents); - } - - /* If we could not parse the file then show the user an error message */ - if (node == NULL) - { - gchar *title, *msg; - title = g_strdup_printf(_("Error Reading %s"), filename); - msg = g_strdup_printf(_("An error was encountered reading your " - "%s. They have not been loaded, and the old file " - "has been renamed to %s~."), description, filename_full); - purple_notify_error(NULL, NULL, title, msg); - g_free(title); - g_free(msg); - } - - g_free(filename_full); - - return node; + return xmlnode_from_file(purple_user_dir(), filename, description, "util"); } /* @@ -3012,7 +2949,7 @@ purple_running_kde(void) g_free(tmp); session = g_getenv("KDE_FULL_SESSION"); - if (session != NULL && !strcmp(session, "true")) + if (purple_strequal(session, "true")) return TRUE; /* If you run Purple from Konsole under !KDE, this will provide a @@ -3053,6 +2990,17 @@ purple_fd_get_ip(int fd) /************************************************************************** * String Functions **************************************************************************/ +gboolean +purple_strequal(const gchar *left, const gchar *right) +{ +#if GLIB_CHECK_VERSION(2,16,0) + return (g_strcmp0(left, right) == 0); +#else + return ((left == NULL && right == NULL) || + (left != NULL && right != NULL && strcmp(left, right) == 0)); +#endif +} + const char * purple_normalize(const PurpleAccount *account, const char *str) { @@ -3167,7 +3115,7 @@ purple_str_has_suffix(const char *s, const char *x) g_return_val_if_fail(x != NULL, FALSE); off = strlen(s) - strlen(x); - return (off >= 0 && !strcmp(s + off, x)); + return (off >= 0 && purple_strequal(s + off, x)); #endif } @@ -4764,7 +4712,7 @@ purple_escape_filename(const char *str) const char *_purple_oscar_convert(const char *act, const char *protocol) { - if (protocol && act && strcmp(protocol, "prpl-oscar") == 0) { + if (act && purple_strequal(protocol, "prpl-oscar")) { int i; for (i = 0; act[i] != '\0'; i++) if (!isdigit(act[i])) diff --git a/libpurple/util.h b/libpurple/util.h index 6092fc4da0..b68c746706 100644 --- a/libpurple/util.h +++ b/libpurple/util.h @@ -775,6 +775,21 @@ char *purple_fd_get_ip(int fd); /*@{*/ /** + * Tests two strings for equality. + * + * Unlike strcmp(), this function will not crash if one or both of the + * strings are @c NULL. + * + * @param left A string + * @param right A string to compare with left + * + * @return @c TRUE if the strings are the same, else @c FALSE. + * + * @since 2.6.0 + */ +gboolean purple_strequal(const gchar *left, const gchar *right); + +/** * Normalizes a string, so that it is suitable for comparison. * * The returned string will point to a static buffer, so if the diff --git a/libpurple/whiteboard.c b/libpurple/whiteboard.c index 319191d527..97f061545e 100644 --- a/libpurple/whiteboard.c +++ b/libpurple/whiteboard.c @@ -115,7 +115,7 @@ PurpleWhiteboard *purple_whiteboard_get_session(const PurpleAccount *account, co { wb = l->data; - if(wb->account == account && !strcmp(wb->who, who)) + if(wb->account == account && purple_strequal(wb->who, who)) return wb; l = l->next; diff --git a/libpurple/xmlnode.c b/libpurple/xmlnode.c index bcfea76b0b..fc2fc37b36 100644 --- a/libpurple/xmlnode.c +++ b/libpurple/xmlnode.c @@ -129,7 +129,7 @@ xmlnode_remove_attrib(xmlnode *node, const char *attr) for(attr_node = node->child; attr_node; attr_node = attr_node->next) { if(attr_node->type == XMLNODE_TYPE_ATTRIB && - !strcmp(attr_node->name, attr)) + purple_strequal(attr_node->name, attr)) { if(sibling == NULL) { node->child = attr_node->next; @@ -146,20 +146,6 @@ xmlnode_remove_attrib(xmlnode *node, const char *attr) } } -/* Compare two nullable xmlns strings. - * They are considered equal if they're both NULL or the strings are equal - */ -static gboolean _xmlnode_compare_xmlns(const char *xmlns1, const char *xmlns2) { - gboolean equal = FALSE; - - if (xmlns1 == NULL && xmlns2 == NULL) - equal = TRUE; - else if (xmlns1 != NULL && xmlns2 != NULL && !strcmp(xmlns1, xmlns2)) - equal = TRUE; - - return equal; -} - void xmlnode_remove_attrib_with_namespace(xmlnode *node, const char *attr, const char *xmlns) { @@ -171,8 +157,8 @@ xmlnode_remove_attrib_with_namespace(xmlnode *node, const char *attr, const char for(attr_node = node->child; attr_node; attr_node = attr_node->next) { if(attr_node->type == XMLNODE_TYPE_ATTRIB && - !strcmp(attr_node->name, attr) && - _xmlnode_compare_xmlns(xmlns, attr_node->xmlns)) + purple_strequal(attr, attr_node->name) && + purple_strequal(xmlns, attr_node->xmlns)) { if(sibling == NULL) { node->child = attr_node->next; @@ -252,7 +238,7 @@ xmlnode_get_attrib(xmlnode *node, const char *attr) g_return_val_if_fail(attr != NULL, NULL); for(x = node->child; x; x = x->next) { - if(x->type == XMLNODE_TYPE_ATTRIB && !strcmp(attr, x->name)) { + if(x->type == XMLNODE_TYPE_ATTRIB && purple_strequal(attr, x->name)) { return x->data; } } @@ -270,8 +256,8 @@ xmlnode_get_attrib_with_namespace(xmlnode *node, const char *attr, const char *x for(x = node->child; x; x = x->next) { if(x->type == XMLNODE_TYPE_ATTRIB && - !strcmp(attr, x->name) && - _xmlnode_compare_xmlns(xmlns, x->xmlns)) { + purple_strequal(attr, x->name) && + purple_strequal(xmlns, x->xmlns)) { return x->data; } } @@ -382,8 +368,8 @@ xmlnode_get_child_with_namespace(const xmlnode *parent, const char *name, const if(ns) xmlns = xmlnode_get_namespace(x); - if(x->type == XMLNODE_TYPE_TAG && name && !strcmp(parent_name, x->name) - && (!ns || (xmlns && !strcmp(ns, xmlns)))) { + if(x->type == XMLNODE_TYPE_TAG && purple_strequal(parent_name, x->name) + && purple_strequal(ns, xmlns)) { ret = x; break; } @@ -471,7 +457,7 @@ xmlnode_to_str_helper(const xmlnode *node, int *len, gboolean formatting, int de g_hash_table_foreach(node->namespace_map, (GHFunc)xmlnode_to_str_foreach_append_ns, text); } else if (node->xmlns) { - if(!node->parent || !node->parent->xmlns || strcmp(node->xmlns, node->parent->xmlns)) + if(!node->parent || !purple_strequal(node->xmlns, node->parent->xmlns)) { char *xmlns = g_markup_escape_text(node->xmlns, -1); g_string_append_printf(text, " xmlns='%s'", xmlns); @@ -642,7 +628,7 @@ xmlnode_parser_element_text_libxml(void *user_data, const xmlChar *text, int tex if(!xpd->current || xpd->error) return; - + if(!text || !text_len) return; @@ -730,6 +716,78 @@ xmlnode_from_str(const char *str, gssize size) return ret; } +xmlnode * +xmlnode_from_file(const char *dir,const char *filename, const char *description, const char *process) +{ + gchar *filename_full; + GError *error = NULL; + gchar *contents = NULL; + gsize length; + xmlnode *node = NULL; + + g_return_val_if_fail(dir != NULL, NULL); + + purple_debug_info(process, "Reading file %s from directory %s\n", + filename, dir); + + filename_full = g_build_filename(dir, filename, NULL); + + if (!g_file_test(filename_full, G_FILE_TEST_EXISTS)) + { + purple_debug_info(process, "File %s does not exist (this is not " + "necessarily an error)\n", filename_full); + g_free(filename_full); + return NULL; + } + + if (!g_file_get_contents(filename_full, &contents, &length, &error)) + { + purple_debug_error(process, "Error reading file %s: %s\n", + filename_full, error->message); + g_error_free(error); + } + + if ((contents != NULL) && (length > 0)) + { + node = xmlnode_from_str(contents, length); + + /* If we were unable to parse the file then save its contents to a backup file */ + if (node == NULL) + { + gchar *filename_temp, *filename_temp_full; + + filename_temp = g_strdup_printf("%s~", filename); + filename_temp_full = g_build_filename(dir, filename_temp, NULL); + + purple_debug_error("util", "Error parsing file %s. Renaming old " + "file to %s\n", filename_full, filename_temp); + purple_util_write_data_to_file_absolute(filename_temp_full, contents, length); + + g_free(filename_temp_full); + g_free(filename_temp); + } + + g_free(contents); + } + + /* If we could not parse the file then show the user an error message */ + if (node == NULL) + { + gchar *title, *msg; + title = g_strdup_printf(_("Error Reading %s"), filename); + msg = g_strdup_printf(_("An error was encountered reading your " + "%s. The file has not been loaded, and the old file " + "has been renamed to %s~."), description, filename_full); + purple_notify_error(NULL, NULL, title, msg); + g_free(title); + g_free(msg); + } + + g_free(filename_full); + + return node; +} + static void xmlnode_copy_foreach_ns(gpointer key, gpointer value, gpointer user_data) { @@ -794,8 +852,8 @@ xmlnode_get_next_twin(xmlnode *node) if(ns) xmlns = xmlnode_get_namespace(sibling); - if(sibling->type == XMLNODE_TYPE_TAG && !strcmp(node->name, sibling->name) && - (!ns || (xmlns && !strcmp(ns, xmlns)))) + if(sibling->type == XMLNODE_TYPE_TAG && purple_strequal(node->name, sibling->name) && + purple_strequal(ns, xmlns)) return sibling; } diff --git a/libpurple/xmlnode.h b/libpurple/xmlnode.h index 769600ca07..bab8192d13 100644 --- a/libpurple/xmlnode.h +++ b/libpurple/xmlnode.h @@ -26,6 +26,8 @@ #ifndef _PURPLE_XMLNODE_H_ #define _PURPLE_XMLNODE_H_ +#include <glib.h> + #ifdef __cplusplus extern "C" { #endif @@ -297,6 +299,22 @@ xmlnode *xmlnode_copy(const xmlnode *src); */ void xmlnode_free(xmlnode *node); +/** + * Creates a node from a XML File. Calling this on the + * root node of an XML document will parse the entire document + * into a tree of nodes, and return the xmlnode of the root. + * + * @param str The string of xml. + * @param description The description of the file being parsed + * @process The utility that is calling xmlnode_from_file + * + * @return The new node. + * + * @since 2.6.0 + */ +xmlnode *xmlnode_from_file(const char *dir, const char *filename, + const char *description, const char *process); + #ifdef __cplusplus } #endif diff --git a/pidgin/Makefile.am b/pidgin/Makefile.am index 450d19bbbb..b56f48bfb0 100644 --- a/pidgin/Makefile.am +++ b/pidgin/Makefile.am @@ -78,6 +78,8 @@ pidgin_SOURCES = \ pidginstock.c \ gtkaccount.c \ gtkblist.c \ + gtkblist-theme.c \ + gtkblist-theme-loader.c \ gtkcelllayout.c \ gtkcellrendererexpander.c \ gtkcellrendererprogress.c \ @@ -94,6 +96,8 @@ pidgin_SOURCES = \ gtkeventloop.c \ gtkexpander.c \ gtkft.c \ + gtkicon-theme.c \ + gtkicon-theme-loader.c \ gtkidle.c \ gtkimhtml.c \ gtkimhtmltoolbar.c \ @@ -116,6 +120,7 @@ pidgin_SOURCES = \ gtksourceiter.c \ gtksourceundomanager.c \ gtksourceview-marshal.c \ + gtkstatus-icon-theme.c \ gtkstatusbox.c \ gtkthemes.c \ gtkutils.c \ @@ -127,6 +132,8 @@ pidgin_headers = \ eggtrayicon.h \ gtkaccount.h \ gtkblist.h \ + gtkblist-theme.h \ + gtkblist-theme-loader.h \ gtkcelllayout.h \ gtkcellrendererexpander.h \ gtkcellrendererprogress.h \ @@ -146,6 +153,8 @@ pidgin_headers = \ gtkeventloop.h \ gtkexpander.h \ gtkft.h \ + gtkicon-theme.h \ + gtkicon-theme-loader.h \ gtkidle.h \ gtkgaim-compat.h \ gtkimhtml.h \ @@ -169,6 +178,7 @@ pidgin_headers = \ gtksourceiter.h \ gtksourceundomanager.h \ gtksourceview-marshal.h \ + gtkstatus-icon-theme.h \ gtkstatusbox.h \ pidginstock.h \ gtkthemes.h \ diff --git a/pidgin/Makefile.mingw b/pidgin/Makefile.mingw index 97a683ec5b..dbe6a35c7d 100644 --- a/pidgin/Makefile.mingw +++ b/pidgin/Makefile.mingw @@ -56,6 +56,8 @@ LIB_PATHS += -L$(GTK_TOP)/lib \ PIDGIN_C_SRC = \ gtkaccount.c \ gtkblist.c \ + gtkblist-theme.c \ + gtkblist-theme-loader.c \ gtkcertmgr.c \ gtkcellrendererexpander.c \ gtkcellrendererprogress.c \ @@ -68,6 +70,8 @@ PIDGIN_C_SRC = \ gtkeventloop.c \ gtkexpander.c \ gtkft.c \ + gtkicon-theme.c \ + gtkicon-theme-loader.c \ gtkidle.c \ gtkimhtml.c \ gtkimhtmltoolbar.c \ @@ -88,6 +92,7 @@ PIDGIN_C_SRC = \ gtksound.c \ gtksourceiter.c \ gtksourceundomanager.c \ + gtkstatus-icon-theme.c \ gtkstatusbox.c \ gtkthemes.c \ gtkutils.c \ diff --git a/pidgin/eggtrayicon.c b/pidgin/eggtrayicon.c index 5fe5c29709..d246c49028 100644 --- a/pidgin/eggtrayicon.c +++ b/pidgin/eggtrayicon.c @@ -39,7 +39,7 @@ enum { PROP_0, PROP_ORIENTATION }; - + static GtkPlugClass *parent_class = NULL; static void egg_tray_icon_init (EggTrayIcon *icon); @@ -102,7 +102,7 @@ egg_tray_icon_init (EggTrayIcon *icon) { icon->stamp = 1; icon->orientation = GTK_ORIENTATION_HORIZONTAL; - + gtk_widget_add_events (GTK_WIDGET (icon), GDK_PROPERTY_CHANGE_MASK); } @@ -250,7 +250,7 @@ egg_tray_icon_manager_filter (GdkXEvent *xevent, GdkEvent *event, gpointer user_ egg_tray_icon_manager_window_destroyed (icon); } } - + return GDK_FILTER_CONTINUE; } @@ -296,7 +296,7 @@ egg_tray_icon_send_manager_message (EggTrayIcon *icon, { XClientMessageEvent ev; Display *display; - + ev.type = ClientMessage; ev.window = window; ev.message_type = icon->system_tray_opcode_atom; @@ -335,7 +335,7 @@ egg_tray_icon_update_manager_window (EggTrayIcon *icon, gboolean dock_if_realized) { Display *xdisplay; - + if (icon->manager_window != None) return; @@ -345,7 +345,7 @@ egg_tray_icon_update_manager_window (EggTrayIcon *icon, return; XGrabServer (xdisplay); - + icon->manager_window = XGetSelectionOwner (xdisplay, icon->selection_atom); @@ -355,7 +355,7 @@ egg_tray_icon_update_manager_window (EggTrayIcon *icon, XUngrabServer (xdisplay); XFlush (xdisplay); - + if (icon->manager_window != None) { GdkWindow *gdkwin; @@ -380,7 +380,7 @@ static void egg_tray_icon_manager_window_destroyed (EggTrayIcon *icon) { GdkWindow *gdkwin; - + g_return_if_fail (icon->manager_window != None); #if GTK_CHECK_VERSION(2,1,0) @@ -458,9 +458,9 @@ egg_tray_icon_realize (GtkWidget *widget) screen); icon->selection_atom = XInternAtom (xdisplay, buffer, False); - + icon->manager_atom = XInternAtom (xdisplay, "MANAGER", False); - + icon->system_tray_opcode_atom = XInternAtom (xdisplay, "_NET_SYSTEM_TRAY_OPCODE", False); @@ -514,11 +514,11 @@ egg_tray_icon_send_message (EggTrayIcon *icon, gint len) { guint stamp; - + g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), 0); g_return_val_if_fail (timeout >= 0, 0); g_return_val_if_fail (message != NULL, 0); - + if (icon->manager_window == None) return 0; @@ -526,7 +526,7 @@ egg_tray_icon_send_message (EggTrayIcon *icon, len = strlen (message); stamp = icon->stamp++; - + /* Get ready to send the message */ egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_BEGIN_MESSAGE, (Window)gtk_plug_get_id (GTK_PLUG (icon)), @@ -576,7 +576,7 @@ egg_tray_icon_cancel_message (EggTrayIcon *icon, { g_return_if_fail (EGG_IS_TRAY_ICON (icon)); g_return_if_fail (id > 0); - + egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_CANCEL_MESSAGE, (Window)gtk_plug_get_id (GTK_PLUG (icon)), id, 0, 0); diff --git a/pidgin/eggtrayicon.h b/pidgin/eggtrayicon.h index 0266ca91e9..01475a9a48 100644 --- a/pidgin/eggtrayicon.h +++ b/pidgin/eggtrayicon.h @@ -33,7 +33,7 @@ G_BEGIN_DECLS #define EGG_IS_TRAY_ICON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_TRAY_ICON)) #define EGG_IS_TRAY_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_TRAY_ICON)) #define EGG_TRAY_ICON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_TRAY_ICON, EggTrayIconClass)) - + typedef struct _EggTrayIcon EggTrayIcon; typedef struct _EggTrayIconClass EggTrayIconClass; @@ -42,7 +42,7 @@ struct _EggTrayIcon GtkPlug parent_instance; guint stamp; - + Atom selection_atom; Atom manager_atom; Atom system_tray_opcode_atom; @@ -74,7 +74,7 @@ void egg_tray_icon_cancel_message (EggTrayIcon *icon, guint id); GtkOrientation egg_tray_icon_get_orientation (EggTrayIcon *icon); - + G_END_DECLS #endif /* __EGG_TRAY_ICON_H__ */ diff --git a/pidgin/getopt.c b/pidgin/getopt.c index c73442bd87..7399c02097 100644 --- a/pidgin/getopt.c +++ b/pidgin/getopt.c @@ -178,7 +178,7 @@ static enum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER } ordering; - + #ifdef __GNU_LIBRARY__ /* We want to avoid inclusion of string.h with non-GNU libraries because there are many ways it can cause trouble. @@ -219,7 +219,7 @@ my_bcopy (from, to, size) to[i] = from[i]; } #endif /* GNU C library. */ - + /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have @@ -259,7 +259,7 @@ exchange (argv) first_nonopt += (optind - last_nonopt); last_nonopt = optind; } - + /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. @@ -663,7 +663,7 @@ getopt (argc, argv, optstring) } #endif /* _LIBC or not __GNU_LIBRARY__. */ - + #ifdef TEST /* Compile with -DTEST to make an executable for use in testing diff --git a/pidgin/getopt1.c b/pidgin/getopt1.c index df69cb59bf..d381d28101 100644 --- a/pidgin/getopt1.c +++ b/pidgin/getopt1.c @@ -81,7 +81,7 @@ getopt_long_only (argc, argv, options, long_options, opt_index) #endif /* _LIBC or not __GNU_LIBRARY__. */ - + #ifdef TEST #include <stdio.h> diff --git a/pidgin/gtkaccount.c b/pidgin/gtkaccount.c index 586b41c3ae..a5f0a85fe9 100644 --- a/pidgin/gtkaccount.c +++ b/pidgin/gtkaccount.c @@ -51,7 +51,7 @@ enum { COLUMN_ICON, COLUMN_BUDDYICON, - COLUMN_SCREENNAME, + COLUMN_USERNAME, COLUMN_ENABLED, COLUMN_PROTOCOL, COLUMN_DATA, @@ -78,7 +78,7 @@ typedef struct GtkListStore *model; GtkTreeIter drag_iter; - GtkTreeViewColumn *screenname_col; + GtkTreeViewColumn *username_col; } AccountsWindow; @@ -115,7 +115,7 @@ typedef struct GtkWidget *login_frame; GtkWidget *protocol_menu; GtkWidget *password_box; - GtkWidget *screenname_entry; + GtkWidget *username_entry; GtkWidget *password_entry; GtkWidget *alias_entry; GtkWidget *remember_pass_check; @@ -256,7 +256,7 @@ set_account_protocol_cb(GtkWidget *item, const char *id, } static gboolean -screenname_focus_cb(GtkWidget *widget, GdkEventFocus *event, AccountPrefsDialog *dialog) +username_focus_cb(GtkWidget *widget, GdkEventFocus *event, AccountPrefsDialog *dialog) { GHashTable *table; const char *label; @@ -275,7 +275,7 @@ screenname_focus_cb(GtkWidget *widget, GdkEventFocus *event, AccountPrefsDialog } static void -screenname_changed_cb(GtkEntry *entry, AccountPrefsDialog *dialog) +username_changed_cb(GtkEntry *entry, AccountPrefsDialog *dialog) { if (dialog->ok_button) gtk_widget_set_sensitive(dialog->ok_button, @@ -290,7 +290,7 @@ screenname_changed_cb(GtkEntry *entry, AccountPrefsDialog *dialog) } static gboolean -screenname_nofocus_cb(GtkWidget *widget, GdkEventFocus *event, AccountPrefsDialog *dialog) +username_nofocus_cb(GtkWidget *widget, GdkEventFocus *event, AccountPrefsDialog *dialog) { GdkColor color = {0, 34952, 35466, 34181}; GHashTable *table = NULL; @@ -301,13 +301,13 @@ screenname_nofocus_cb(GtkWidget *widget, GdkEventFocus *event, AccountPrefsDialo label = g_hash_table_lookup(table, "login_label"); if (*gtk_entry_get_text(GTK_ENTRY(widget)) == '\0') { - /* We have to avoid hitting the screenname_changed_cb function + /* We have to avoid hitting the username_changed_cb function * because it enables buttons we don't want enabled yet ;) */ - g_signal_handlers_block_by_func(widget, G_CALLBACK(screenname_changed_cb), dialog); + g_signal_handlers_block_by_func(widget, G_CALLBACK(username_changed_cb), dialog); gtk_entry_set_text(GTK_ENTRY(widget), label); /* Make sure we can hit it again */ - g_signal_handlers_unblock_by_func(widget, G_CALLBACK(screenname_changed_cb), dialog); + g_signal_handlers_unblock_by_func(widget, G_CALLBACK(username_changed_cb), dialog); gtk_widget_modify_text(widget, GTK_STATE_NORMAL, &color); } @@ -393,7 +393,7 @@ update_editable(PurpleConnection *gc, AccountPrefsDialog *dialog) set = !(purple_account_is_connected(dialog->account) || purple_account_is_connecting(dialog->account)); gtk_widget_set_sensitive(dialog->protocol_menu, set); - gtk_widget_set_sensitive(dialog->screenname_entry, set); + gtk_widget_set_sensitive(dialog->username_entry, set); for (l = dialog->user_split_entries ; l != NULL ; l = l->next) gtk_widget_set_sensitive((GtkWidget *)l->data, set); @@ -449,13 +449,13 @@ add_login_options(AccountPrefsDialog *dialog, GtkWidget *parent) gtk_widget_unref(dialog->protocol_menu); - /* Screen name */ - dialog->screenname_entry = gtk_entry_new(); + /* Username */ + dialog->username_entry = gtk_entry_new(); #if GTK_CHECK_VERSION(2,10,0) - g_object_set(G_OBJECT(dialog->screenname_entry), "truncate-multiline", TRUE, NULL); + g_object_set(G_OBJECT(dialog->username_entry), "truncate-multiline", TRUE, NULL); #endif - add_pref_box(dialog, vbox, _("_Username:"), dialog->screenname_entry); + add_pref_box(dialog, vbox, _("_Username:"), dialog->username_entry); if (dialog->account != NULL) username = g_strdup(purple_account_get_username(dialog->account)); @@ -468,17 +468,17 @@ add_login_options(AccountPrefsDialog *dialog, GtkWidget *parent) table = dialog->prpl_info->get_account_text_table(NULL); label = g_hash_table_lookup(table, "login_label"); - gtk_entry_set_text(GTK_ENTRY(dialog->screenname_entry), label); - g_signal_connect(G_OBJECT(dialog->screenname_entry), "focus-in-event", - G_CALLBACK(screenname_focus_cb), dialog); - g_signal_connect(G_OBJECT(dialog->screenname_entry), "focus-out-event", - G_CALLBACK(screenname_nofocus_cb), dialog); - gtk_widget_modify_text(dialog->screenname_entry, GTK_STATE_NORMAL, &color); + gtk_entry_set_text(GTK_ENTRY(dialog->username_entry), label); + g_signal_connect(G_OBJECT(dialog->username_entry), "focus-in-event", + G_CALLBACK(username_focus_cb), dialog); + g_signal_connect(G_OBJECT(dialog->username_entry), "focus-out-event", + G_CALLBACK(username_nofocus_cb), dialog); + gtk_widget_modify_text(dialog->username_entry, GTK_STATE_NORMAL, &color); g_hash_table_destroy(table); } - g_signal_connect(G_OBJECT(dialog->screenname_entry), "changed", - G_CALLBACK(screenname_changed_cb), dialog); + g_signal_connect(G_OBJECT(dialog->username_entry), "changed", + G_CALLBACK(username_changed_cb), dialog); /* Do the user split thang */ if (dialog->prpl_info == NULL) @@ -547,7 +547,7 @@ add_login_options(AccountPrefsDialog *dialog, GtkWidget *parent) } if (username != NULL) - gtk_entry_set_text(GTK_ENTRY(dialog->screenname_entry), username); + gtk_entry_set_text(GTK_ENTRY(dialog->username_entry), username); g_free(username); @@ -590,7 +590,7 @@ add_login_options(AccountPrefsDialog *dialog, GtkWidget *parent) gtk_widget_hide(dialog->remember_pass_check); } - /* Do not let the user change the protocol/screenname while connected. */ + /* Do not let the user change the protocol/username while connected. */ update_editable(NULL, dialog); purple_signal_connect(purple_connections_get_handle(), "signing-on", dialog, G_CALLBACK(update_editable), dialog); @@ -1193,7 +1193,7 @@ ok_account_prefs_cb(GtkWidget *w, AccountPrefsDialog *dialog) PurpleAccount *account; /* Build the username string. */ - username = g_strdup(gtk_entry_get_text(GTK_ENTRY(dialog->screenname_entry))); + username = g_strdup(gtk_entry_get_text(GTK_ENTRY(dialog->username_entry))); if (dialog->prpl_info != NULL) { @@ -1933,7 +1933,7 @@ add_columns(GtkWidget *treeview, AccountsWindow *dialog) gtk_tree_view_column_set_resizable(column, FALSE); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); - /* Screen Name column */ + /* Username column */ column = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(column, _("Username")); gtk_tree_view_column_set_resizable(column, TRUE); @@ -1945,12 +1945,12 @@ add_columns(GtkWidget *treeview, AccountsWindow *dialog) gtk_tree_view_column_add_attribute(column, renderer, "pixbuf", COLUMN_BUDDYICON); - /* Screen Name */ + /* Username */ renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(column, renderer, TRUE); gtk_tree_view_column_add_attribute(column, renderer, - "text", COLUMN_SCREENNAME); - dialog->screenname_col = column; + "text", COLUMN_USERNAME); + dialog->username_col = column; /* Protocol name */ @@ -2016,7 +2016,7 @@ set_account(GtkListStore *store, GtkTreeIter *iter, PurpleAccount *account, GdkP gtk_list_store_set(store, iter, COLUMN_ICON, pixbuf, COLUMN_BUDDYICON, buddyicon, - COLUMN_SCREENNAME, purple_account_get_username(account), + COLUMN_USERNAME, purple_account_get_username(account), COLUMN_ENABLED, purple_account_get_enabled(account, PIDGIN_UI), COLUMN_PROTOCOL, purple_account_get_protocol_name(account), COLUMN_DATA, account, @@ -2190,7 +2190,7 @@ create_accounts_list(AccountsWindow *dialog) dialog->model = gtk_list_store_new(NUM_COLUMNS, GDK_TYPE_PIXBUF, /* COLUMN_ICON */ GDK_TYPE_PIXBUF, /* COLUMN_BUDDYICON */ - G_TYPE_STRING, /* COLUMN_SCREENNAME */ + G_TYPE_STRING, /* COLUMN_USERNAME */ G_TYPE_BOOLEAN, /* COLUMN_ENABLED */ G_TYPE_STRING, /* COLUMN_PROTOCOL */ G_TYPE_POINTER /* COLUMN_DATA */ diff --git a/pidgin/gtkblist-theme-loader.c b/pidgin/gtkblist-theme-loader.c new file mode 100644 index 0000000000..8571a53f37 --- /dev/null +++ b/pidgin/gtkblist-theme-loader.c @@ -0,0 +1,279 @@ +/* + * GTKBlistThemeLoader for Pidgin + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include <stdlib.h> + +#include "xmlnode.h" + +#include "gtkblist-theme-loader.h" +#include "gtkblist-theme.h" + +/****************************************************************************** + * Globals + *****************************************************************************/ + +#define DEFAULT_TEXT_COLOR "black" + +/***************************************************************************** + * Buddy List Theme Builder + *****************************************************************************/ + +static PurpleTheme * +pidgin_blist_loader_build(const gchar *dir) +{ + xmlnode *root_node = NULL, *sub_node, *sub_sub_node; + gchar *filename_full, *data; + const gchar *temp; + gboolean success = TRUE; + GdkColor *bgcolor, *expanded_bgcolor, *collapsed_bgcolor, *contact_color; + GdkColor color; + FontColorPair *expanded, *collapsed, *contact, *online, *away, *offline, *idle, *message, *message_nick_said, *status; + PidginBlistLayout *layout; + PidginBlistTheme *theme; + + /* Find the theme file */ + g_return_val_if_fail(dir != NULL, NULL); + filename_full = g_build_filename(dir, "theme.xml", NULL); + + if (g_file_test(filename_full, G_FILE_TEST_IS_REGULAR)) + root_node = xmlnode_from_file(dir, "theme.xml", "buddy list themes", "blist-loader"); + + g_free(filename_full); + g_return_val_if_fail(root_node != NULL, NULL); + + sub_node = xmlnode_get_child(root_node, "description"); + data = xmlnode_get_data(sub_node); + + /* init all structs and colors */ + bgcolor = g_new0(GdkColor, 1); + expanded_bgcolor = g_new0(GdkColor, 1); + collapsed_bgcolor = g_new0(GdkColor, 1); + + layout = g_new0(PidginBlistLayout, 1); + + contact_color = g_new0(GdkColor, 1); + + expanded = g_new0(FontColorPair, 1); + collapsed = g_new0(FontColorPair, 1); + contact = g_new0(FontColorPair, 1); + online = g_new0(FontColorPair, 1); + away = g_new0(FontColorPair, 1); + offline = g_new0(FontColorPair, 1); + idle = g_new0(FontColorPair, 1); + message = g_new0(FontColorPair, 1); + message_nick_said = g_new0(FontColorPair, 1); + status = g_new0(FontColorPair, 1); + + /* <blist> */ + if ((success = (sub_node = xmlnode_get_child(root_node, "blist")) != NULL)) { + if ((temp = xmlnode_get_attrib(sub_node, "color")) != NULL && gdk_color_parse(temp, bgcolor)) + gdk_colormap_alloc_color(gdk_colormap_get_system(), bgcolor, FALSE, TRUE); + else { + g_free(bgcolor); + bgcolor = NULL; + } + } + + /* <groups> */ + if ((success = (success && (sub_node = xmlnode_get_child(root_node, "groups")) != NULL + && (sub_sub_node = xmlnode_get_child(sub_node, "expanded")) != NULL))) + { + expanded->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font")); + + if ((temp = xmlnode_get_attrib(sub_sub_node, "text_color")) != NULL && gdk_color_parse(temp, &color)) + expanded->color = g_strdup(temp); + else expanded->color = g_strdup(DEFAULT_TEXT_COLOR); + + if ((temp = xmlnode_get_attrib(sub_sub_node, "background")) != NULL && gdk_color_parse(temp, expanded_bgcolor)) + gdk_colormap_alloc_color(gdk_colormap_get_system(), expanded_bgcolor, FALSE, TRUE); + else { + g_free(expanded_bgcolor); + expanded_bgcolor = NULL; + } + } + + if ((success = (success && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "collapsed")) != NULL))) + { + collapsed->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font")); + + if((temp = xmlnode_get_attrib(sub_sub_node, "text_color")) != NULL && gdk_color_parse(temp, &color)) + collapsed->color = g_strdup(temp); + else collapsed->color = g_strdup(DEFAULT_TEXT_COLOR); + + if ((temp = xmlnode_get_attrib(sub_sub_node, "background")) != NULL && gdk_color_parse(temp, collapsed_bgcolor)) + gdk_colormap_alloc_color(gdk_colormap_get_system(), collapsed_bgcolor, FALSE, TRUE); + else { + g_free(collapsed_bgcolor); + collapsed_bgcolor = NULL; + } + } + + /* <buddys> */ + if ((success = (success && (sub_node = xmlnode_get_child(root_node, "buddys")) != NULL && + (sub_sub_node = xmlnode_get_child(sub_node, "placement")) != NULL))) + { + layout->status_icon = (temp = xmlnode_get_attrib(sub_sub_node, "status_icon")) != NULL ? atoi(temp) : 0; + layout->text = (temp = xmlnode_get_attrib(sub_sub_node, "name")) != NULL ? atoi(temp) : 1; + layout->emblem = (temp = xmlnode_get_attrib(sub_sub_node, "emblem")) != NULL ? atoi(temp) : 2; + layout->protocol_icon = (temp = xmlnode_get_attrib(sub_sub_node, "protocol_icon")) != NULL ? atoi(temp) : 3; + layout->buddy_icon = (temp = xmlnode_get_attrib(sub_sub_node, "buddy_icon")) != NULL ? atoi(temp) : 4; + layout->show_status = (temp = xmlnode_get_attrib(sub_sub_node, "status_icon")) != NULL ? atoi(temp) != 0 : 1; + } + + if ((success = (success && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "background")) != NULL))) { + if(gdk_color_parse(xmlnode_get_attrib(sub_sub_node, "color"), contact_color)) + gdk_colormap_alloc_color(gdk_colormap_get_system(), contact_color, FALSE, TRUE); + else { + g_free(contact_color); + contact_color = NULL; + } + } + + if ((success = (success && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "contact_text")) != NULL))) { + contact->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font")); + if(gdk_color_parse(temp = xmlnode_get_attrib(sub_sub_node, "color"), &color)) + contact->color = g_strdup(temp); + else contact->color = g_strdup(DEFAULT_TEXT_COLOR); + } + + if ((success = (success && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "online_text")) != NULL))) { + online->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font")); + if(gdk_color_parse(temp = xmlnode_get_attrib(sub_sub_node, "color"), &color)) + online->color = g_strdup(temp); + else online->color = g_strdup(DEFAULT_TEXT_COLOR); + } + + if ((success = (success && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "away_text")) != NULL))) { + away->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font")); + if(gdk_color_parse(temp = xmlnode_get_attrib(sub_sub_node, "color"), &color)) + away->color = g_strdup(temp); + else away->color = g_strdup(DEFAULT_TEXT_COLOR); + } + + if ((success = (success && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "offline_text")) != NULL))) { + offline->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font")); + if(gdk_color_parse(temp = xmlnode_get_attrib(sub_sub_node, "color"), &color)) + online->color = g_strdup(temp); + else online->color = g_strdup(DEFAULT_TEXT_COLOR); + } + + if ((success = (success && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "idle_text")) != NULL))) { + idle->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font")); + if(gdk_color_parse(temp = xmlnode_get_attrib(sub_sub_node, "color"), &color)) + idle->color = g_strdup(temp); + else online->color = g_strdup(DEFAULT_TEXT_COLOR); + } + + if ((success = (success && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "message_text")) != NULL))) { + message->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font")); + if(gdk_color_parse(temp = xmlnode_get_attrib(sub_sub_node, "color"), &color)) + message->color = g_strdup(temp); + else message->color = g_strdup(DEFAULT_TEXT_COLOR); + } + + if ((success = (success && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "message_nick_said_text")) != NULL))) { + message_nick_said->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font")); + if(gdk_color_parse(temp = xmlnode_get_attrib(sub_sub_node, "color"), &color)) + message_nick_said->color = g_strdup(temp); + else message_nick_said->color = g_strdup(DEFAULT_TEXT_COLOR); + } + + if ((success = (success && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "status_text")) != NULL))) { + status->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font")); + if(gdk_color_parse(temp = xmlnode_get_attrib(sub_sub_node, "color"), &color)) + status->color = g_strdup(temp); + else status->color = g_strdup(DEFAULT_TEXT_COLOR); + } + + /* name is required for theme manager */ + success = (success && xmlnode_get_attrib(root_node, "name") != NULL); + + /* the new theme */ + theme = g_object_new(PIDGIN_TYPE_BLIST_THEME, + "type", "blist", + "name", xmlnode_get_attrib(root_node, "name"), + "author", xmlnode_get_attrib(root_node, "author"), + "image", xmlnode_get_attrib(root_node, "image"), + "directory", dir, + "description", data, + "background-color", bgcolor, + "layout", layout, + "expanded-color", expanded_bgcolor, + "expanded-text", expanded, + "collapsed-color", collapsed_bgcolor, + "collapsed-text", collapsed, + "contact-color", contact_color, + "contact", contact, + "online", online, + "away", away, + "offline", offline, + "idle", idle, + "message", message, + "message_nick_said", message_nick_said, + "status", status, NULL); + + xmlnode_free(root_node); + g_free(data); + + /* malformed xml file - also frees all partial data*/ + if (!success) { + g_object_unref(theme); + theme = NULL; + } + + return PURPLE_THEME(theme); +} + +/****************************************************************************** + * GObject Stuff + *****************************************************************************/ + +static void +pidgin_blist_theme_loader_class_init(PidginBlistThemeLoaderClass *klass) +{ + PurpleThemeLoaderClass *loader_klass = PURPLE_THEME_LOADER_CLASS(klass); + + loader_klass->purple_theme_loader_build = pidgin_blist_loader_build; +} + +GType +pidgin_blist_theme_loader_get_type(void) +{ + static GType type = 0; + if (type == 0) { + static const GTypeInfo info = { + sizeof(PidginBlistThemeLoaderClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc)pidgin_blist_theme_loader_class_init, /* class_init */ + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof(PidginBlistThemeLoader), + 0, /* n_preallocs */ + NULL, /* instance_init */ + NULL, /* value table */ + }; + type = g_type_register_static(PURPLE_TYPE_THEME_LOADER, + "PidginBlistThemeLoader", &info, 0); + } + return type; +} diff --git a/pidgin/gtkblist-theme-loader.h b/pidgin/gtkblist-theme-loader.h new file mode 100644 index 0000000000..a5a40621e3 --- /dev/null +++ b/pidgin/gtkblist-theme-loader.h @@ -0,0 +1,71 @@ +/** + * @file gtkblist-loader.h Pidgin Buddy List Theme Loader Class API + */ + +/* pidgin + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#ifndef PIDGIN_BLIST_THEME_LOADER_H +#define PIDGIN_BLIST_THEME_LOADER_H + +#include <glib.h> +#include <glib-object.h> +#include "theme-loader.h" + +/** + * A pidgin buddy list theme loader. extends PurpleThemeLoader (theme-loader.h) + * This is a class designed to build sound themes + * + * PidginBlistThemeLoader is a GObject. + */ +typedef struct _PidginBlistThemeLoader PidginBlistThemeLoader; +typedef struct _PidginBlistThemeLoaderClass PidginBlistThemeLoaderClass; + +#define PIDGIN_TYPE_BLIST_THEME_LOADER (pidgin_blist_theme_loader_get_type ()) +#define PIDGIN_BLIST_THEME_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIDGIN_TYPE_BLIST_THEME_LOADER, PidginBlistThemeLoader)) +#define PIDGIN_BLIST_THEME_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PIDGIN_TYPE_BLIST_THEME_LOADER, PidginBlistThemeLoaderClass)) +#define PIDGIN_IS_BLIST_THEME_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PIDGIN_TYPE_BLIST_THEME_LOADER)) +#define PIDGIN_IS_BLIST_THEME_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PIDGIN_TYPE_BLIST_THEME_LOADER)) +#define PIDGIN_BLIST_THEME_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PIDGIN_TYPE_BLIST_THEME_LOADER, PidginBlistThemeLoaderClass)) + +struct _PidginBlistThemeLoader +{ + PurpleThemeLoader parent; +}; + +struct _PidginBlistThemeLoaderClass +{ + PurpleThemeLoaderClass parent_class; +}; + +/**************************************************************************/ +/** @name Buddy List Theme-Loader API */ +/**************************************************************************/ +G_BEGIN_DECLS + +/** + * GObject foo. + * @internal. + */ +GType pidgin_blist_theme_loader_get_type(void); + +G_END_DECLS +#endif /* PIDGIN_BLIST_THEME_LOADER_H */ diff --git a/pidgin/gtkblist-theme.c b/pidgin/gtkblist-theme.c new file mode 100644 index 0000000000..86ab512420 --- /dev/null +++ b/pidgin/gtkblist-theme.c @@ -0,0 +1,784 @@ +/* + * Buddy List Themes for Pidgin + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include "gtkblist-theme.h" + +#define PIDGIN_BLIST_THEME_GET_PRIVATE(Gobject) \ + ((PidginBlistThemePrivate *) ((PIDGIN_BLIST_THEME(Gobject))->priv)) + +/****************************************************************************** + * Structs + *****************************************************************************/ + +typedef struct { + /* Buddy list */ + gdouble opacity; + GdkColor *bgcolor; + PidginBlistLayout *layout; + + /* groups */ + GdkColor *expanded_color; + FontColorPair *expanded; + + GdkColor *collapsed_color; + FontColorPair *collapsed; + + /* buddy */ + GdkColor *contact_color; + + FontColorPair *contact; + + FontColorPair *online; + FontColorPair *away; + FontColorPair *offline; + FontColorPair *idle; + FontColorPair *message; + FontColorPair *message_nick_said; + + FontColorPair *status; + +} PidginBlistThemePrivate; + +/****************************************************************************** + * Globals + *****************************************************************************/ + +static GObjectClass *parent_class = NULL; + +/****************************************************************************** + * Enums + *****************************************************************************/ + +enum { + PROP_ZERO = 0, + PROP_BACKGROUND_COLOR, + PROP_OPACITY, + PROP_LAYOUT, + PROP_EXPANDED_COLOR, + PROP_EXPANDED_TEXT, + PROP_COLLAPSED_COLOR, + PROP_COLLAPSED_TEXT, + PROP_CONTACT_COLOR, + PROP_CONTACT, + PROP_ONLINE, + PROP_AWAY, + PROP_OFFLINE, + PROP_IDLE, + PROP_MESSAGE, + PROP_MESSAGE_NICK_SAID, + PROP_STATUS, +}; + +/****************************************************************************** + * Helpers + *****************************************************************************/ + +void +free_font_and_color(FontColorPair *pair) +{ + if (pair != NULL) { + if (pair->font) + g_free(pair->font); + if (pair->color) + g_free(pair->color); + g_free(pair); + } +} + +/****************************************************************************** + * GObject Stuff + *****************************************************************************/ + +static void +pidgin_blist_theme_init(GTypeInstance *instance, + gpointer klass) +{ + (PIDGIN_BLIST_THEME(instance))->priv = g_new0(PidginBlistThemePrivate, 1); +} + +static void +pidgin_blist_theme_get_property(GObject *obj, guint param_id, GValue *value, + GParamSpec *psec) +{ + PidginBlistTheme *theme = PIDGIN_BLIST_THEME(obj); + + switch (param_id) { + case PROP_BACKGROUND_COLOR: + g_value_set_pointer(value, pidgin_blist_theme_get_background_color(theme)); + break; + case PROP_OPACITY: + g_value_set_double(value, pidgin_blist_theme_get_opacity(theme)); + break; + case PROP_LAYOUT: + g_value_set_pointer(value, pidgin_blist_theme_get_layout(theme)); + break; + case PROP_EXPANDED_COLOR: + g_value_set_pointer(value, pidgin_blist_theme_get_expanded_background_color(theme)); + break; + case PROP_EXPANDED_TEXT: + g_value_set_pointer(value, pidgin_blist_theme_get_expanded_text_info(theme)); + break; + case PROP_COLLAPSED_COLOR: + g_value_set_pointer(value, pidgin_blist_theme_get_collapsed_background_color(theme)); + break; + case PROP_COLLAPSED_TEXT: + g_value_set_pointer(value, pidgin_blist_theme_get_collapsed_text_info(theme)); + break; + case PROP_CONTACT_COLOR: + g_value_set_pointer(value, pidgin_blist_theme_get_contact_color(theme)); + break; + case PROP_CONTACT: + g_value_set_pointer(value, pidgin_blist_theme_get_contact_text_info(theme)); + break; + case PROP_ONLINE: + g_value_set_pointer(value, pidgin_blist_theme_get_online_text_info(theme)); + break; + case PROP_AWAY: + g_value_set_pointer(value, pidgin_blist_theme_get_away_text_info(theme)); + break; + case PROP_OFFLINE: + g_value_set_pointer(value, pidgin_blist_theme_get_offline_text_info(theme)); + break; + case PROP_IDLE: + g_value_set_pointer(value, pidgin_blist_theme_get_idle_text_info(theme)); + break; + case PROP_MESSAGE: + g_value_set_pointer(value, pidgin_blist_theme_get_unread_message_text_info(theme)); + break; + case PROP_MESSAGE_NICK_SAID: + g_value_set_pointer(value, pidgin_blist_theme_get_unread_message_nick_said_text_info(theme)); + break; + case PROP_STATUS: + g_value_set_pointer(value, pidgin_blist_theme_get_status_text_info(theme)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, psec); + break; + } +} + +static void +pidgin_blist_theme_set_property(GObject *obj, guint param_id, const GValue *value, + GParamSpec *psec) +{ + PidginBlistTheme *theme = PIDGIN_BLIST_THEME(obj); + + switch (param_id) { + case PROP_BACKGROUND_COLOR: + pidgin_blist_theme_set_background_color(theme, g_value_get_pointer(value)); + break; + case PROP_OPACITY: + pidgin_blist_theme_set_opacity(theme, g_value_get_double(value)); + break; + case PROP_LAYOUT: + pidgin_blist_theme_set_layout(theme, g_value_get_pointer(value)); + break; + case PROP_EXPANDED_COLOR: + pidgin_blist_theme_set_expanded_background_color(theme, g_value_get_pointer(value)); + break; + case PROP_EXPANDED_TEXT: + pidgin_blist_theme_set_expanded_text_info(theme, g_value_get_pointer(value)); + break; + case PROP_COLLAPSED_COLOR: + pidgin_blist_theme_set_collapsed_background_color(theme, g_value_get_pointer(value)); + break; + case PROP_COLLAPSED_TEXT: + pidgin_blist_theme_set_collapsed_text_info(theme, g_value_get_pointer(value)); + break; + case PROP_CONTACT_COLOR: + pidgin_blist_theme_set_contact_color(theme, g_value_get_pointer(value)); + break; + case PROP_CONTACT: + pidgin_blist_theme_set_contact_text_info(theme, g_value_get_pointer(value)); + break; + case PROP_ONLINE: + pidgin_blist_theme_set_online_text_info(theme, g_value_get_pointer(value)); + break; + case PROP_AWAY: + pidgin_blist_theme_set_away_text_info(theme, g_value_get_pointer(value)); + break; + case PROP_OFFLINE: + pidgin_blist_theme_set_offline_text_info(theme, g_value_get_pointer(value)); + break; + case PROP_IDLE: + pidgin_blist_theme_set_idle_text_info(theme, g_value_get_pointer(value)); + break; + case PROP_MESSAGE: + pidgin_blist_theme_set_unread_message_text_info(theme, g_value_get_pointer(value)); + break; + case PROP_MESSAGE_NICK_SAID: + pidgin_blist_theme_set_unread_message_nick_said_text_info(theme, g_value_get_pointer(value)); + break; + case PROP_STATUS: + pidgin_blist_theme_set_status_text_info(theme, g_value_get_pointer(value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, psec); + break; + } +} + +static void +pidgin_blist_theme_finalize(GObject *obj) +{ + PidginBlistThemePrivate *priv; + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(obj); + + /* Buddy List */ + g_free(priv->layout); + + /* Group */ + free_font_and_color(priv->expanded); + free_font_and_color(priv->collapsed); + + /* Buddy */ + free_font_and_color(priv->contact); + free_font_and_color(priv->online); + free_font_and_color(priv->away); + free_font_and_color(priv->offline); + free_font_and_color(priv->message); + free_font_and_color(priv->message_nick_said); + free_font_and_color(priv->status); + + g_free(priv); + + parent_class->finalize (obj); +} + +static void +pidgin_blist_theme_class_init(PidginBlistThemeClass *klass) +{ + GObjectClass *obj_class = G_OBJECT_CLASS(klass); + GParamSpec *pspec; + + parent_class = g_type_class_peek_parent (klass); + + obj_class->get_property = pidgin_blist_theme_get_property; + obj_class->set_property = pidgin_blist_theme_set_property; + obj_class->finalize = pidgin_blist_theme_finalize; + + /* Buddy List */ + pspec = g_param_spec_pointer("background-color", "Background Color", + "The background color for the buddy list", + G_PARAM_READWRITE); + g_object_class_install_property(obj_class, PROP_BACKGROUND_COLOR, pspec); + + pspec = g_param_spec_pointer("layout", "Layout", + "The layout of icons, name, and status of the blist", + G_PARAM_READWRITE); + + g_object_class_install_property(obj_class, PROP_LAYOUT, pspec); + + /* Group */ + pspec = g_param_spec_pointer("expanded-color", "Expanded Background Color", + "The background color of an expanded group", + G_PARAM_READWRITE); + g_object_class_install_property(obj_class, PROP_EXPANDED_COLOR, pspec); + + pspec = g_param_spec_pointer("expanded-text", "Expanded Text", + "The text information for when a group is expanded", + G_PARAM_READWRITE); + g_object_class_install_property(obj_class, PROP_EXPANDED_TEXT, pspec); + + pspec = g_param_spec_pointer("collapsed-color", "Collapsed Background Color", + "The background color of a collapsed group", + G_PARAM_READWRITE); + g_object_class_install_property(obj_class, PROP_COLLAPSED_COLOR, pspec); + + pspec = g_param_spec_pointer("collapsed-text", "Collapsed Text", + "The text information for when a group is collapsed", + G_PARAM_READWRITE); + g_object_class_install_property(obj_class, PROP_COLLAPSED_TEXT, pspec); + + /* Buddy */ + pspec = g_param_spec_pointer("contact-color", "Contact/Chat Background Color", + "The background color of a contact or chat", + G_PARAM_READWRITE); + g_object_class_install_property(obj_class, PROP_CONTACT_COLOR, pspec); + + pspec = g_param_spec_pointer("contact", "Contact Text", + "The text information for when a contact is expanded", + G_PARAM_READWRITE); + g_object_class_install_property(obj_class, PROP_CONTACT, pspec); + + pspec = g_param_spec_pointer("online", "On-line Text", + "The text information for when a buddy is online", + G_PARAM_READWRITE); + g_object_class_install_property(obj_class, PROP_ONLINE, pspec); + + pspec = g_param_spec_pointer("away", "Away Text", + "The text information for when a buddy is away", + G_PARAM_READWRITE); + g_object_class_install_property(obj_class, PROP_AWAY, pspec); + + pspec = g_param_spec_pointer("offline", "Off-line Text", + "The text information for when a buddy is off-line", + G_PARAM_READWRITE); + g_object_class_install_property(obj_class, PROP_OFFLINE, pspec); + + pspec = g_param_spec_pointer("idle", "Idle Text", + "The text information for when a buddy is idle", + G_PARAM_READWRITE); + g_object_class_install_property(obj_class, PROP_IDLE, pspec); + + pspec = g_param_spec_pointer("message", "Message Text", + "The text information for when a buddy has an unread message", + G_PARAM_READWRITE); + g_object_class_install_property(obj_class, PROP_MESSAGE, pspec); + + pspec = g_param_spec_pointer("message_nick_said", "Message (Nick Said) Text", + "The text information for when a chat has an unread message that mentions your nick", + G_PARAM_READWRITE); + g_object_class_install_property(obj_class, PROP_MESSAGE_NICK_SAID, pspec); + + pspec = g_param_spec_pointer("status", "Status Text", + "The text information for a buddy's status", + G_PARAM_READWRITE); + g_object_class_install_property(obj_class, PROP_STATUS, pspec); +} + +GType +pidgin_blist_theme_get_type (void) +{ + static GType type = 0; + if (type == 0) { + static GTypeInfo info = { + sizeof(PidginBlistThemeClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc)pidgin_blist_theme_class_init, /* class_init */ + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof(PidginBlistTheme), + 0, /* n_preallocs */ + pidgin_blist_theme_init, /* instance_init */ + NULL, /* value table */ + }; + type = g_type_register_static (PURPLE_TYPE_THEME, + "PidginBlistTheme", &info, 0); + } + return type; +} + + +/***************************************************************************** + * Public API functions + *****************************************************************************/ + +/* get methods */ + +GdkColor * +pidgin_blist_theme_get_background_color(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->bgcolor; +} + +gdouble +pidgin_blist_theme_get_opacity(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), 1.0); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->opacity; +} + +PidginBlistLayout * +pidgin_blist_theme_get_layout(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->layout; +} + +GdkColor * +pidgin_blist_theme_get_expanded_background_color(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->expanded_color; +} + +FontColorPair * +pidgin_blist_theme_get_expanded_text_info(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->expanded; +} + +GdkColor * +pidgin_blist_theme_get_collapsed_background_color(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->collapsed_color; +} + +FontColorPair * +pidgin_blist_theme_get_collapsed_text_info(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->collapsed; +} + +GdkColor * +pidgin_blist_theme_get_contact_color(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->contact_color; +} + +FontColorPair * +pidgin_blist_theme_get_contact_text_info(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->contact; +} + +FontColorPair * +pidgin_blist_theme_get_online_text_info(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->online; +} + +FontColorPair * +pidgin_blist_theme_get_away_text_info(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->away; +} + +FontColorPair * +pidgin_blist_theme_get_offline_text_info(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->offline; +} + +FontColorPair * +pidgin_blist_theme_get_idle_text_info(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->idle; +} + +FontColorPair * +pidgin_blist_theme_get_unread_message_text_info(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->message; +} + +FontColorPair * +pidgin_blist_theme_get_unread_message_nick_said_text_info(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->message_nick_said; +} + +FontColorPair * +pidgin_blist_theme_get_status_text_info(PidginBlistTheme *theme) +{ + PidginBlistThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + return priv->status; +} + +/* Set Methods */ +void +pidgin_blist_theme_set_background_color(PidginBlistTheme *theme, GdkColor *color) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme)); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + priv->bgcolor = color; +} + +void +pidgin_blist_theme_set_opacity(PidginBlistTheme *theme, gdouble opacity) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme) || opacity < 0.0 || opacity > 1.0); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + priv->opacity = opacity; +} + +void +pidgin_blist_theme_set_layout(PidginBlistTheme *theme, PidginBlistLayout *layout) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme)); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + g_free(priv->layout); + priv->layout = layout; +} + +void +pidgin_blist_theme_set_expanded_background_color(PidginBlistTheme *theme, GdkColor *color) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme)); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + priv->expanded_color = color; +} + +void +pidgin_blist_theme_set_expanded_text_info(PidginBlistTheme *theme, FontColorPair *pair) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme)); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + free_font_and_color(priv->expanded); + priv->expanded = pair; +} + +void +pidgin_blist_theme_set_collapsed_background_color(PidginBlistTheme *theme, GdkColor *color) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme)); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + priv->collapsed_color = color; +} + +void +pidgin_blist_theme_set_collapsed_text_info(PidginBlistTheme *theme, FontColorPair *pair) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme)); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + free_font_and_color(priv->collapsed); + priv->collapsed = pair; +} + +void +pidgin_blist_theme_set_contact_color(PidginBlistTheme *theme, GdkColor *color) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme)); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + priv->contact_color = color; +} + +void +pidgin_blist_theme_set_contact_text_info(PidginBlistTheme *theme, FontColorPair *pair) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme)); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + free_font_and_color(priv->contact); + priv->contact = pair; +} + +void +pidgin_blist_theme_set_online_text_info(PidginBlistTheme *theme, FontColorPair *pair) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme)); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + free_font_and_color(priv->online); + priv->online = pair; +} + +void +pidgin_blist_theme_set_away_text_info(PidginBlistTheme *theme, FontColorPair *pair) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme)); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + free_font_and_color(priv->away); + priv->away = pair; +} + +void +pidgin_blist_theme_set_offline_text_info(PidginBlistTheme *theme, FontColorPair *pair) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme)); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + free_font_and_color(priv->offline); + priv->offline = pair; +} + +void +pidgin_blist_theme_set_idle_text_info(PidginBlistTheme *theme, FontColorPair *pair) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme)); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + free_font_and_color(priv->idle); + priv->idle = pair; +} + +void +pidgin_blist_theme_set_unread_message_text_info(PidginBlistTheme *theme, FontColorPair *pair) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme)); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + free_font_and_color(priv->message); + priv->message = pair; +} + +void +pidgin_blist_theme_set_unread_message_nick_said_text_info(PidginBlistTheme *theme, FontColorPair *pair) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme)); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + free_font_and_color(priv->message_nick_said); + priv->message_nick_said = pair; +} + +void +pidgin_blist_theme_set_status_text_info(PidginBlistTheme *theme, FontColorPair *pair) +{ + PidginBlistThemePrivate *priv; + + g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme)); + + priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme)); + + free_font_and_color(priv->status); + priv->status = pair; +} diff --git a/pidgin/gtkblist-theme.h b/pidgin/gtkblist-theme.h new file mode 100644 index 0000000000..bcfb4649b4 --- /dev/null +++ b/pidgin/gtkblist-theme.h @@ -0,0 +1,332 @@ +/** + * @file gtkblist-theme.h GTK+ Buddy List Theme API + */ + +/* pidgin + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#ifndef PIDGIN_BLIST_THEME_H +#define PIDGIN_BLIST_THEME_H + +#include <glib.h> +#include <glib-object.h> +#include <gtk/gtk.h> + +#include "theme.h" + +/** + * A pidgin buddy list theme. + * This is an object for Purple to represent a buddy list theme. + * + * PidginBlistTheme is a PurpleTheme Object. + */ +typedef struct _PidginBlistTheme PidginBlistTheme; +typedef struct _PidginBlistThemeClass PidginBlistThemeClass; + +#define PIDGIN_TYPE_BLIST_THEME (pidgin_blist_theme_get_type ()) +#define PIDGIN_BLIST_THEME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIDGIN_TYPE_BLIST_THEME, PidginBlistTheme)) +#define PIDGIN_BLIST_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PIDGIN_TYPE_BLIST_THEME, PidginBlistThemeClass)) +#define PIDGIN_IS_BLIST_THEME(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PIDGIN_TYPE_BLIST_THEME)) +#define PIDGIN_IS_BLIST_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PIDGIN_TYPE_BLIST_THEME)) +#define PIDGIN_BLIST_THEME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PIDGIN_TYPE_BLIST_THEME, PidginBlistThemeClass)) + +struct _PidginBlistTheme +{ + PurpleTheme parent; + gpointer priv; +}; + +struct _PidginBlistThemeClass +{ + PurpleThemeClass parent_class; +}; + +typedef struct +{ + gchar *font; + gchar *color; + +} FontColorPair; + +typedef struct +{ + gint status_icon; + gint text; + gint emblem; + gint protocol_icon; + gint buddy_icon; + gboolean show_status; + +} PidginBlistLayout; + +/**************************************************************************/ +/** @name FontColorPair API */ +/**************************************************************************/ + +/** + * Frees a font and color pair + */ +void free_font_and_color(FontColorPair *pair); + +/**************************************************************************/ +/** @name Purple Buddy List Theme API */ +/**************************************************************************/ +G_BEGIN_DECLS + +/** + * GObject foo. + * @internal. + */ +GType pidgin_blist_theme_get_type(void); + +/* get methods */ + +/** + * Returns the background color of the buddy list. + * + * @returns A gdk color. + */ + GdkColor *pidgin_blist_theme_get_background_color(PidginBlistTheme *theme); + +/** + * Returns the opacity of the buddy list window + * (0.0 or clear to 1.0 fully opaque). + * + * @returns The opacity + */ +gdouble pidgin_blist_theme_get_opacity(PidginBlistTheme *theme); + +/** + * Returns the layout to be used with the buddy list. + * + * @returns The buddy list layout. + */ + PidginBlistLayout *pidgin_blist_theme_get_layout(PidginBlistTheme *theme); + +/** + * Returns the background color to be used with expanded groups. + * + * @returns A gdk color. + */ + GdkColor *pidgin_blist_theme_get_expanded_background_color(PidginBlistTheme *theme); + +/** + * Returns the text font and color to be used with expanded groups. + * + * @returns A font and color pair. + */ + FontColorPair *pidgin_blist_theme_get_expanded_text_info(PidginBlistTheme *theme); + +/** + * Returns the background color to be used with collapsed groups. + * + * @returns A gdk color. + */ + GdkColor *pidgin_blist_theme_get_collapsed_background_color(PidginBlistTheme *theme); + +/** + * Returns the text font and color to be used with collapsed groups. + * + * @returns A font and color pair. + */ + FontColorPair *pidgin_blist_theme_get_collapsed_text_info(PidginBlistTheme *theme); + +/** + * Returns the colors to be used for contacts and chats. + * + * @returns A gdkcolor for contacts and chats. + */ + GdkColor *pidgin_blist_theme_get_contact_color(PidginBlistTheme *theme); + +/** + * Returns the text font and color to be used for expanded contacts. + * + * @returns A font and color pair. + */ + FontColorPair *pidgin_blist_theme_get_contact_text_info(PidginBlistTheme *theme); + +/** + * Returns the text font and color to be used for online buddies. + * + * @returns A font and color pair. + */ + FontColorPair *pidgin_blist_theme_get_online_text_info(PidginBlistTheme *theme); + +/** + * Returns the text font and color to be used for away and idle buddies. + * + * @returns A font and color pair. + */ + FontColorPair *pidgin_blist_theme_get_away_text_info(PidginBlistTheme *theme); + +/** + * Returns the text font and color to be used for offline buddies. + * + * @returns A font and color pair. + */ + FontColorPair *pidgin_blist_theme_get_offline_text_info(PidginBlistTheme *theme); + +/** + * Returns the text font and color to be used for idle buddies. + * + * @returns A font and color pair. + */ + FontColorPair *pidgin_blist_theme_get_idle_text_info(PidginBlistTheme *theme); + +/** + * Returns the text font and color to be used for buddies with unread messages. + * + * @returns A font and color pair. + */ + FontColorPair *pidgin_blist_theme_get_unread_message_text_info(PidginBlistTheme *theme); + +/** + * Returns the text font and color to be used for chats with unread messages + * that mention your nick. + * + * @returns A font and color pair. + */ + FontColorPair *pidgin_blist_theme_get_unread_message_nick_said_text_info(PidginBlistTheme *theme); + +/** + * Returns the text font and color to be used for a buddy's status message. + * + * @returns A font and color pair. + */ + FontColorPair *pidgin_blist_theme_get_status_text_info(PidginBlistTheme *theme); + +/* Set Methods */ + +/** + * Sets the background color to be used for this buddy list theme. + * + * @param color The new background color. + */ +void pidgin_blist_theme_set_background_color(PidginBlistTheme *theme, GdkColor *color); + +/** + * Sets the opacity to be used for this buddy list theme. + * + * @param opacity The new opacity setting. + */ +void pidgin_blist_theme_set_opacity(PidginBlistTheme *theme, gdouble opacity); + +/** + * Sets the buddy list layout to be used for this buddy list theme. + * + * @param layout The new layout. + */ +void pidgin_blist_theme_set_layout(PidginBlistTheme *theme, PidginBlistLayout *layout); + +/** + * Sets the background color to be used for expanded groups. + * + * @param color The new background color. + */ +void pidgin_blist_theme_set_expanded_background_color(PidginBlistTheme *theme, GdkColor *color); + +/** + * Sets the text color and font to be used for expanded groups. + * + * @param pair The new text font at color pair. + */ +void pidgin_blist_theme_set_expanded_text_info(PidginBlistTheme *theme, FontColorPair *pair); + +/** + * Sets the background color to be used for collapsed groups. + * + * @param color The new background color. + */ +void pidgin_blist_theme_set_collapsed_background_color(PidginBlistTheme *theme, GdkColor *color); + +/** + * Sets the text color and font to be used for expanded groups. + * + * @param pair The new text font at color pair. + */ +void pidgin_blist_theme_set_collapsed_text_info(PidginBlistTheme *theme, FontColorPair *pair); + +/** + * Sets the background color to be used for contacts and chats. + * + * @param color The color to use for contacts and chats. + */ +void pidgin_blist_theme_set_contact_color(PidginBlistTheme *theme, GdkColor *color); + +/** + * Sets the text color and font to be used for expanded contacts. + * + * @param pair The new text font at color pair. + */ +void pidgin_blist_theme_set_contact_text_info(PidginBlistTheme *theme, FontColorPair *pair); + +/** + * Sets the text color and font to be used for online buddies. + * + * @param pair The new text font at color pair. + */ +void pidgin_blist_theme_set_online_text_info(PidginBlistTheme *theme, FontColorPair *pair); + +/** + * Sets the text color and font to be used for away and idle buddies. + * + * @param pair The new text font at color pair. + */ +void pidgin_blist_theme_set_away_text_info(PidginBlistTheme *theme, FontColorPair *pair); + +/** + * Sets the text color and font to be used for offline buddies. + * + * @param pair The new text font at color pair. + */ +void pidgin_blist_theme_set_offline_text_info(PidginBlistTheme *theme, FontColorPair *pair); + +/** + * Sets the text color and font to be used for idle buddies. + * + * @param pair The new text font at color pair. + */ +void pidgin_blist_theme_set_idle_text_info(PidginBlistTheme *theme, FontColorPair *pair); + +/** + * Sets the text color and font to be used for buddies with unread messages. + * + * @param pair The new text font at color pair. + */ +void pidgin_blist_theme_set_unread_message_text_info(PidginBlistTheme *theme, FontColorPair *pair); + +/** + * Sets the text color and font to be used for a chat with unread messages + * that mention your nick. + * + * @param pair The new text font at color pair. + */ +void pidgin_blist_theme_set_unread_message_nick_said_text_info(PidginBlistTheme *theme, FontColorPair *pair); + +/** + * Sets the text color and font to be used for buddy status messages. + * + * @param pair The new text font at color pair. + */ +void pidgin_blist_theme_set_status_text_info(PidginBlistTheme *theme, FontColorPair *pair); + +G_END_DECLS +#endif /* PIDGIN_BLIST_THEME_H */ diff --git a/pidgin/gtkblist.c b/pidgin/gtkblist.c index 5d16af4d67..2e169acb3a 100644 --- a/pidgin/gtkblist.c +++ b/pidgin/gtkblist.c @@ -38,6 +38,8 @@ #include "request.h" #include "signals.h" #include "pidginstock.h" +#include "theme-loader.h" +#include "theme-manager.h" #include "util.h" #include "gtkaccount.h" @@ -58,6 +60,8 @@ #include "gtkstatusbox.h" #include "gtkscrollbook.h" #include "gtksmiley.h" +#include "gtkblist-theme.h" +#include "gtkblist-theme-loader.h" #include "gtkutils.h" #include "pidgin/minidialog.h" #include "pidgin/pidgintooltip.h" @@ -121,6 +125,9 @@ typedef struct * is showing; @c NULL otherwise. */ PidginMiniDialog *signed_on_elsewhere; + + PidginBlistTheme *current_theme; + } PidginBuddyListPrivate; #define PIDGIN_BUDDY_LIST_GET_PRIVATE(list) \ @@ -142,7 +149,7 @@ static void sort_method_none(PurpleBlistNode *node, PurpleBuddyList *blist, GtkT #if GTK_CHECK_VERSION(2,2,1) static void sort_method_alphabetical(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter); static void sort_method_status(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter); -static void sort_method_log(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter); +static void sort_method_log_activity(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter); #endif static PidginBuddyList *gtkblist = NULL; @@ -164,7 +171,8 @@ static void pidgin_blist_expand_contact_cb(GtkWidget *w, PurpleBlistNode *node); static void set_urgent(void); typedef enum { - PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE = 1 << 0, /* Whether there's pending message in a conversation */ + PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE = 1 << 0, /* Whether there's pending message in a conversation */ + PIDGIN_BLIST_CHAT_HAS_PENDING_MESSAGE_WITH_NICK = 1 << 1, /* Whether there's a pending message in a chat that mentions our nick */ } PidginBlistNodeFlags; typedef struct _pidgin_blist_node { @@ -179,17 +187,6 @@ typedef struct _pidgin_blist_node { } conv; } PidginBlistNode; -static char dim_grey_string[8] = ""; -static char *dim_grey(void) -{ - if (!gtkblist) - return "dim grey"; - if (!dim_grey_string[0]) { - snprintf(dim_grey_string, sizeof(dim_grey_string), "%s", pidgin_get_dim_grey_string(gtkblist->treeview)); - } - return dim_grey_string; -} - /*************************************************** * Callbacks * ***************************************************/ @@ -329,17 +326,24 @@ static gboolean gtk_blist_configure_cb(GtkWidget *w, GdkEventConfigure *event, g static void gtk_blist_menu_info_cb(GtkWidget *w, PurpleBuddy *b) { - pidgin_retrieve_user_info(b->account->gc, purple_buddy_get_name(b)); + PurpleAccount *account = purple_buddy_get_account(b); + + pidgin_retrieve_user_info(purple_account_get_connection(account), + purple_buddy_get_name(b)); } static void gtk_blist_menu_im_cb(GtkWidget *w, PurpleBuddy *b) { - pidgin_dialogs_im_with_user(b->account, b->name); + pidgin_dialogs_im_with_user(purple_buddy_get_account(b), + purple_buddy_get_name(b)); } static void gtk_blist_menu_send_file_cb(GtkWidget *w, PurpleBuddy *b) { - serv_send_file(b->account->gc, b->name, NULL); + PurpleAccount *account = purple_buddy_get_account(b); + + serv_send_file(purple_account_get_connection(account), + purple_buddy_get_name(b), NULL); } static void gtk_blist_menu_move_to_cb(GtkWidget *w, PurpleBlistNode *node) @@ -364,7 +368,7 @@ static void gtk_blist_menu_persistent_cb(GtkWidget *w, PurpleChat *chat) static PurpleConversation * find_conversation_with_buddy(PurpleBuddy *buddy) { - PidginBlistNode *ui = buddy->node.ui_data; + PidginBlistNode *ui = purple_blist_node_get_ui_data(PURPLE_BLIST_NODE(buddy)); if (ui) return ui->conv.conv; return purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, @@ -374,15 +378,20 @@ find_conversation_with_buddy(PurpleBuddy *buddy) static void gtk_blist_join_chat(PurpleChat *chat) { + PurpleAccount *account; PurpleConversation *conv; PurplePluginProtocolInfo *prpl_info; + GHashTable *components; const char *name; char *chat_name; - prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_find_prpl(purple_account_get_protocol_id(chat->account))); + account = purple_chat_get_account(chat); + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_find_prpl(purple_account_get_protocol_id(account))); + + components = purple_chat_get_components(chat); if (prpl_info && prpl_info->get_chat_name) - chat_name = prpl_info->get_chat_name(chat->components); + chat_name = prpl_info->get_chat_name(components); else chat_name = NULL; @@ -392,14 +401,14 @@ static void gtk_blist_join_chat(PurpleChat *chat) name = purple_chat_get_name(chat); conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, name, - chat->account); + account); if (conv != NULL) { pidgin_conv_attach_to_conversation(conv); purple_conversation_present(conv); } - serv_join_chat(chat->account->gc, chat->components); + serv_join_chat(purple_account_get_connection(account), components); g_free(chat_name); } @@ -434,15 +443,15 @@ static void gtk_blist_renderer_editing_started_cb(GtkCellRenderer *renderer, gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val); node = g_value_get_pointer(&val); - switch (node->type) { + switch (purple_blist_node_get_type(node)) { case PURPLE_BLIST_CONTACT_NODE: - text = purple_contact_get_alias((PurpleContact *)node); + text = purple_contact_get_alias(PURPLE_CONTACT(node)); break; case PURPLE_BLIST_BUDDY_NODE: - text = purple_buddy_get_alias((PurpleBuddy *)node); + text = purple_buddy_get_alias(PURPLE_BUDDY(node)); break; case PURPLE_BLIST_GROUP_NODE: - text = ((PurpleGroup *)node)->name; + text = purple_group_get_name(PURPLE_GROUP(node)); break; default: g_return_if_reached(); @@ -470,17 +479,24 @@ gtk_blist_do_personize(GList *merges) for (tmp = merges; tmp; tmp = tmp->next) { PurpleBlistNode *node = tmp->data; PurpleBlistNode *b; + PurpleBlistNodeType type; int i = 0; - if (node->type == PURPLE_BLIST_BUDDY_NODE) - node = node->parent; + type = purple_blist_node_get_type(node); + + if(type == PURPLE_BLIST_BUDDY_NODE) + node = purple_blist_node_get_parent(node); - if (node->type != PURPLE_BLIST_CONTACT_NODE) + if(type == PURPLE_BLIST_CONTACT_NODE) continue; - - for (b = node->child; b; b = b->next) + for (b = purple_blist_node_get_first_child(node); + b; + b = purple_blist_node_get_sibling_next(b)) + { i++; + } + if (i > max) { contact = node; max = i; @@ -493,8 +509,8 @@ gtk_blist_do_personize(GList *merges) /* Merge all those buddies into this contact */ for (tmp = merges; tmp; tmp = tmp->next) { PurpleBlistNode *node = tmp->data; - if (node->type == PURPLE_BLIST_BUDDY_NODE) - node = node->parent; + if (purple_blist_node_get_type(node) == PURPLE_BLIST_BUDDY_NODE) + node = purple_blist_node_get_parent(node); if (node == contact) continue; @@ -516,9 +532,11 @@ gtk_blist_auto_personize(PurpleBlistNode *group, const char *alias) int i = 0; char *a = g_utf8_casefold(alias, -1); - for (contact = group->child; contact; contact = contact->next) { + for (contact = purple_blist_node_get_first_child(group); + contact != NULL; + contact = purple_blist_node_get_sibling_next(contact)) { char *node_alias; - if (contact->type != PURPLE_BLIST_CONTACT_NODE) + if (purple_blist_node_get_type(contact) != PURPLE_BLIST_CONTACT_NODE) continue; node_alias = g_utf8_casefold(purple_contact_get_alias((PurpleContact *)contact), -1); @@ -530,11 +548,14 @@ gtk_blist_auto_personize(PurpleBlistNode *group, const char *alias) } g_free(node_alias); - for (buddy = contact->child; buddy; buddy = buddy->next) { - if (buddy->type != PURPLE_BLIST_BUDDY_NODE) + for (buddy = purple_blist_node_get_first_child(contact); + buddy; + buddy = purple_blist_node_get_sibling_next(buddy)) + { + if (purple_blist_node_get_type(buddy) != PURPLE_BLIST_BUDDY_NODE) continue; - node_alias = g_utf8_casefold(purple_buddy_get_alias((PurpleBuddy *)buddy), -1); + node_alias = g_utf8_casefold(purple_buddy_get_alias(PURPLE_BUDDY(buddy)), -1); if (node_alias && !g_utf8_collate(node_alias, a)) { merges = g_list_append(merges, buddy); i++; @@ -576,39 +597,45 @@ static void gtk_blist_renderer_edited_cb(GtkCellRendererText *text_rend, char *a gtk_tree_view_set_enable_search (GTK_TREE_VIEW(gtkblist->treeview), TRUE); g_object_set(G_OBJECT(gtkblist->text_rend), "editable", FALSE, NULL); - switch (node->type) + switch (purple_blist_node_get_type(node)) { case PURPLE_BLIST_CONTACT_NODE: { - PurpleContact *contact = (PurpleContact *)node; - struct _pidgin_blist_node *gtknode = (struct _pidgin_blist_node *)node->ui_data; + PurpleContact *contact = PURPLE_CONTACT(node); + struct _pidgin_blist_node *gtknode = + (struct _pidgin_blist_node *)purple_blist_node_get_ui_data(node); - if (contact->alias || gtknode->contact_expanded) { + if (purple_contact_get_alias(contact) || gtknode->contact_expanded) { purple_blist_alias_contact(contact, arg2); - gtk_blist_auto_personize(node->parent, arg2); + gtk_blist_auto_personize(purple_blist_node_get_parent(node), arg2); } else { PurpleBuddy *buddy = purple_contact_get_priority_buddy(contact); purple_blist_alias_buddy(buddy, arg2); serv_alias_buddy(buddy); - gtk_blist_auto_personize(node->parent, arg2); + gtk_blist_auto_personize(purple_blist_node_get_parent(node), arg2); } } break; case PURPLE_BLIST_BUDDY_NODE: - purple_blist_alias_buddy((PurpleBuddy*)node, arg2); - serv_alias_buddy((PurpleBuddy *)node); - gtk_blist_auto_personize(node->parent->parent, arg2); + { + PurpleGroup *group = purple_buddy_get_group(PURPLE_BUDDY(node)); + + purple_blist_alias_buddy(PURPLE_BUDDY(node), arg2); + serv_alias_buddy(PURPLE_BUDDY(node)); + gtk_blist_auto_personize(PURPLE_BLIST_NODE(group), arg2); + } break; case PURPLE_BLIST_GROUP_NODE: dest = purple_find_group(arg2); - if (dest != NULL && purple_utf8_strcasecmp(arg2, ((PurpleGroup*) node)->name)) { - pidgin_dialogs_merge_groups((PurpleGroup*) node, arg2); - } else - purple_blist_rename_group((PurpleGroup*)node, arg2); + if (dest != NULL && purple_utf8_strcasecmp(arg2, purple_group_get_name(PURPLE_GROUP(node)))) { + pidgin_dialogs_merge_groups(PURPLE_GROUP(node), arg2); + } else { + purple_blist_rename_group(PURPLE_GROUP(node), arg2); + } break; case PURPLE_BLIST_CHAT_NODE: - purple_blist_alias_chat((PurpleChat*)node, arg2); + purple_blist_alias_chat(PURPLE_CHAT(node), arg2); break; default: break; @@ -695,7 +722,7 @@ static void gtk_blist_menu_alias_cb(GtkWidget *w, PurpleBlistNode *node) if (!(get_iter_from_node(node, &iter))) { /* This is either a bug, or the buddy is in a collapsed contact */ - node = node->parent; + node = purple_blist_node_get_parent(node); if (!get_iter_from_node(node, &iter)) /* Now it's definitely a bug */ return; @@ -718,7 +745,8 @@ static void gtk_blist_menu_alias_cb(GtkWidget *w, PurpleBlistNode *node) static void gtk_blist_menu_bp_cb(GtkWidget *w, PurpleBuddy *b) { - pidgin_pounce_editor_show(b->account, b->name, NULL); + pidgin_pounce_editor_show(purple_buddy_get_account(b), + purple_buddy_get_name(b), NULL); } static void gtk_blist_menu_showlog_cb(GtkWidget *w, PurpleBlistNode *node) @@ -732,19 +760,19 @@ static void gtk_blist_menu_showlog_cb(GtkWidget *w, PurpleBlistNode *node) if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { PurpleBuddy *b = (PurpleBuddy*) node; type = PURPLE_LOG_IM; - name = g_strdup(b->name); - account = b->account; + name = g_strdup(purple_buddy_get_name(b)); + account = purple_buddy_get_account(b); } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { - PurpleChat *c = (PurpleChat*) node; + PurpleChat *c = PURPLE_CHAT(node); PurplePluginProtocolInfo *prpl_info = NULL; type = PURPLE_LOG_CHAT; - account = c->account; + account = purple_chat_get_account(c); prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_find_prpl(purple_account_get_protocol_id(account))); if (prpl_info && prpl_info->get_chat_name) { - name = prpl_info->get_chat_name(c->components); + name = prpl_info->get_chat_name(purple_chat_get_components(c)); } } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { - pidgin_log_show_contact((PurpleContact *)node); + pidgin_log_show_contact(PURPLE_CONTACT(node)); pidgin_clear_cursor(gtkblist->window); return; } else { @@ -757,10 +785,10 @@ static void gtk_blist_menu_showlog_cb(GtkWidget *w, PurpleBlistNode *node) if (name && account) { pidgin_log_show(type, name, account); - g_free(name); - pidgin_clear_cursor(gtkblist->window); } + + g_free(name); } static void gtk_blist_menu_showoffline_cb(GtkWidget *w, PurpleBlistNode *node) @@ -777,7 +805,10 @@ static void gtk_blist_menu_showoffline_cb(GtkWidget *w, PurpleBlistNode *node) gboolean setting = !purple_blist_node_get_bool(node, "show_offline"); purple_blist_node_set_bool(node, "show_offline", setting); - for (bnode = node->child; bnode != NULL; bnode = bnode->next) { + for (bnode = purple_blist_node_get_first_child(node); + bnode != NULL; + bnode = purple_blist_node_get_sibling_next(bnode)) + { purple_blist_node_set_bool(bnode, "show_offline", setting); pidgin_blist_update(purple_get_blist(), bnode); } @@ -786,9 +817,15 @@ static void gtk_blist_menu_showoffline_cb(GtkWidget *w, PurpleBlistNode *node) gboolean setting = !purple_blist_node_get_bool(node, "show_offline"); purple_blist_node_set_bool(node, "show_offline", setting); - for (cnode = node->child; cnode != NULL; cnode = cnode->next) { + for (cnode = purple_blist_node_get_first_child(node); + cnode != NULL; + cnode = purple_blist_node_get_sibling_next(cnode)) + { purple_blist_node_set_bool(cnode, "show_offline", setting); - for (bnode = cnode->child; bnode != NULL; bnode = bnode->next) { + for (bnode = purple_blist_node_get_first_child(cnode); + bnode != NULL; + bnode = purple_blist_node_get_sibling_next(bnode)) + { purple_blist_node_set_bool(bnode, "show_offline", setting); pidgin_blist_update(purple_get_blist(), bnode); } @@ -900,9 +937,10 @@ joinchat_set_sensitive_if_input_cb(GtkWidget *entry, gpointer user_data) static void pidgin_blist_update_privacy_cb(PurpleBuddy *buddy) { - if (buddy->node.ui_data == NULL || ((struct _pidgin_blist_node*)buddy->node.ui_data)->row == NULL) + struct _pidgin_blist_node *ui_data = purple_blist_node_get_ui_data(PURPLE_BLIST_NODE(buddy)); + if (ui_data == NULL || ui_data->row == NULL) return; - pidgin_blist_update_buddy(purple_get_blist(), (PurpleBlistNode*)(buddy), TRUE); + pidgin_blist_update_buddy(purple_get_blist(), PURPLE_BLIST_NODE(buddy), TRUE); } static void @@ -1032,7 +1070,7 @@ pidgin_blist_joinchat_show(void) GtkWidget *img = NULL; PidginJoinChatData *data = NULL; - gtkblist = PIDGIN_BLIST(purple_get_blist()); + gtkblist = purple_blist_get_ui_data(); img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); data = g_new0(PidginJoinChatData, 1); @@ -1452,7 +1490,7 @@ pidgin_blist_make_buddy_menu(GtkWidget *menu, PurpleBuddy *buddy, gboolean sub) pidgin_new_item_from_stock(menu, _("Add Buddy _Pounce..."), NULL, G_CALLBACK(gtk_blist_menu_bp_cb), buddy, 0, 0, NULL); - if (node->parent && node->parent->child->next && + if (node->parent && node->parent->child->next && !sub && !contact_expanded) { pidgin_new_item_from_stock(menu, _("View _Log"), NULL, G_CALLBACK(gtk_blist_menu_showlog_cb), @@ -1474,7 +1512,7 @@ pidgin_blist_make_buddy_menu(GtkWidget *menu, PurpleBuddy *buddy, gboolean sub) if (!contact_expanded && contact != NULL) pidgin_append_blist_node_move_to_menu(menu, (PurpleBlistNode *)contact); - if (node->parent && node->parent->child->next && + if (node->parent && node->parent->child->next && !sub && !contact_expanded) { pidgin_separator(menu); pidgin_append_blist_node_privacy_menu(menu, node); @@ -1792,7 +1830,8 @@ pidgin_blist_show_context_menu(PurpleBlistNode *node, return handled; } -static gboolean gtk_blist_button_press_cb(GtkWidget *tv, GdkEventButton *event, gpointer user_data) +static gboolean +gtk_blist_button_press_cb(GtkWidget *tv, GdkEventButton *event, gpointer user_data) { GtkTreePath *path; PurpleBlistNode *node; @@ -2496,7 +2535,7 @@ static void pidgin_blist_drag_data_rcv_cb(GtkWidget *widget, GdkDragContext *dc, node = g_value_get_pointer(&val); if (PURPLE_BLIST_NODE_IS_BUDDY(node) || PURPLE_BLIST_NODE_IS_CONTACT(node)) { - PurpleBuddy *b = PURPLE_BLIST_NODE_IS_BUDDY(node) ? (PurpleBuddy*)node : purple_contact_get_priority_buddy((PurpleContact*)node); + PurpleBuddy *b = PURPLE_BLIST_NODE_IS_BUDDY(node) ? PURPLE_BUDDY(node) : purple_contact_get_priority_buddy(PURPLE_CONTACT(node)); pidgin_dnd_file_manage(sd, b->account, b->name); gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); } else { @@ -2720,7 +2759,7 @@ static GdkPixbuf *pidgin_blist_get_buddy_icon(PurpleBlistNode *node, * * */ -#define STATUS_SIZE 16 +#define STATUS_SIZE 16 #define TOOLTIP_BORDER 12 #define SMALL_SPACE 6 #define LARGE_SPACE 12 @@ -2982,18 +3021,18 @@ void pidgin_blist_tooltip_destroy() } static void -pidgin_blist_align_tooltip(struct tooltip_data *td, GtkWidget *widget) -{ - GtkTextDirection dir = gtk_widget_get_direction(widget); +pidgin_blist_align_tooltip(struct tooltip_data *td, GtkWidget *widget) +{ + GtkTextDirection dir = gtk_widget_get_direction(widget); - if (dir == GTK_TEXT_DIR_RTL) + if (dir == GTK_TEXT_DIR_RTL) { char* layout_name = purple_markup_strip_html(pango_layout_get_text(td->name_layout)); PangoDirection dir = pango_find_base_dir(layout_name, -1); if (dir == PANGO_DIRECTION_RTL || dir == PANGO_DIRECTION_NEUTRAL) - pango_layout_set_alignment(td->name_layout, PANGO_ALIGN_RIGHT); + pango_layout_set_alignment(td->name_layout, PANGO_ALIGN_RIGHT); g_free(layout_name); - pango_layout_set_alignment(td->layout, PANGO_ALIGN_RIGHT); + pango_layout_set_alignment(td->layout, PANGO_ALIGN_RIGHT); } } @@ -3082,7 +3121,7 @@ static gboolean pidgin_blist_expand_timeout(GtkWidget *tv) GValue val; struct _pidgin_blist_node *gtknode; - if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y + (gtkblist->tip_rect.height/2), + if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y + (gtkblist->tip_rect.height/2), &path, NULL, NULL, NULL)) return FALSE; gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); @@ -3168,7 +3207,7 @@ static gboolean pidgin_blist_drag_motion_cb(GtkWidget *tv, GdkDragContext *drag_ if (y < rect.y + (rect.height / 3) || y > rect.y + (2 * (rect.height /3))) return FALSE; - + rect.height = rect.height / 3; rect.y += rect.height; @@ -3287,10 +3326,10 @@ static GtkItemFactoryEntry blist_menu[] = { N_("/_Tools"), NULL, NULL, 0, "<Branch>", NULL }, { N_("/Tools/Buddy _Pounces"), NULL, pidgin_pounces_manager_show, 1, "<Item>", NULL }, { N_("/Tools/_Certificates"), NULL, pidgin_certmgr_show, 0, "<Item>", NULL }, + { N_("/Tools/Custom Smile_ys"), "<CTL>Y", pidgin_smiley_manager_show, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_SMILEY }, { N_("/Tools/Plu_gins"), "<CTL>U", pidgin_plugin_dialog_show, 2, "<StockItem>", PIDGIN_STOCK_TOOLBAR_PLUGINS }, { N_("/Tools/Pr_eferences"), "<CTL>P", pidgin_prefs_show, 0, "<StockItem>", GTK_STOCK_PREFERENCES }, { N_("/Tools/Pr_ivacy"), NULL, pidgin_privacy_dialog_show, 0, "<Item>", NULL }, - { N_("/Tools/Smile_y"), "<CTL>Y", pidgin_smiley_manager_show, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_SMILEY }, { "/Tools/sep2", NULL, NULL, 0, "<Separator>", NULL }, { N_("/Tools/_File Transfers"), "<CTL>T", pidgin_xfer_dialog_show, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_TRANSFER }, { N_("/Tools/R_oom List"), NULL, pidgin_roomlist_dialog_show, 0, "<Item>", NULL }, @@ -3815,19 +3854,22 @@ pidgin_blist_get_status_icon(PurpleBlistNode *node, PidginStatusIconSize size) return ret; } -gchar *pidgin_blist_get_name_markup(PurpleBuddy *b, gboolean selected, gboolean aliased) +gchar * +pidgin_blist_get_name_markup(PurpleBuddy *b, gboolean selected, gboolean aliased) { - const char *name; - char *esc, *text = NULL; + const char *name, *name_color, *name_font, *status_color, *status_font; + char *text = NULL; PurplePlugin *prpl; PurplePluginProtocolInfo *prpl_info = NULL; PurpleContact *contact; PurplePresence *presence; struct _pidgin_blist_node *gtkcontactnode = NULL; - char *idletime = NULL, *statustext = NULL; - time_t t; + char *idletime = NULL, *statustext = NULL, *nametext = NULL; PurpleConversation *conv = find_conversation_with_buddy(b); gboolean hidden_conv = FALSE; + gboolean biglist = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"); + FontColorPair *pair = NULL; + PidginBlistTheme *theme; if (conv != NULL) { PidginBlistNode *ui = b->node.ui_data; @@ -3841,178 +3883,171 @@ gchar *pidgin_blist_get_name_markup(PurpleBuddy *b, gboolean selected, gboolean } /* XXX Good luck cleaning up this crap */ - contact = (PurpleContact*)((PurpleBlistNode*)b)->parent; + contact = PURPLE_CONTACT(PURPLE_BLIST_NODE(b)->parent); if(contact) - gtkcontactnode = ((PurpleBlistNode*)contact)->ui_data; + gtkcontactnode = purple_blist_node_get_ui_data(PURPLE_BLIST_NODE(contact)); - if(gtkcontactnode && !gtkcontactnode->contact_expanded && contact->alias) + /* Name */ + if (gtkcontactnode && !gtkcontactnode->contact_expanded && contact->alias) name = contact->alias; else name = purple_buddy_get_alias(b); - - esc = g_markup_escape_text(name, strlen(name)); - presence = purple_buddy_get_presence(b); + nametext = g_markup_escape_text(name, strlen(name)); - if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons") && aliased) - { - if (!selected && purple_presence_is_idle(presence)) - { - text = g_strdup_printf("<span color='%s'>%s</span>", - dim_grey(), esc); - g_free(esc); - if (hidden_conv) { - char *tmp = text; - text = g_strdup_printf("<b>%s</b>", text); - g_free(tmp); - } - return text; - } - else if (hidden_conv) - { - char *tmp = esc; - esc = g_strdup_printf("<b>%s</b>", esc); - g_free(tmp); - } - return esc; - } + presence = purple_buddy_get_presence(b); - prpl = purple_find_prpl(purple_account_get_protocol_id(b->account)); + /* Name is all that is needed */ + if (aliased && biglist) { - if (prpl != NULL) - prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); + /* Status Info */ + prpl = purple_find_prpl(purple_account_get_protocol_id(b->account)); - if (prpl_info && prpl_info->status_text && b->account->gc) { - char *tmp = prpl_info->status_text(b); - const char *end; + if (prpl != NULL) + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); - if(tmp && !g_utf8_validate(tmp, -1, &end)) { - char *new = g_strndup(tmp, - g_utf8_pointer_to_offset(tmp, end)); - g_free(tmp); - tmp = new; - } + if (prpl_info && prpl_info->status_text && b->account->gc) { + char *tmp = prpl_info->status_text(b); + const char *end; -#if !GTK_CHECK_VERSION(2,6,0) - if(tmp) { - char buf[32]; - char *c = tmp; - int length = 0, vis=0; - gboolean inside = FALSE; - g_strdelimit(tmp, "\n", ' '); - purple_str_strip_char(tmp, '\r'); - - while(*c && vis < 20) { - if(*c == '&') - inside = TRUE; - else if(*c == ';') - inside = FALSE; - if(!inside) - vis++; - c = g_utf8_next_char(c); /* this is fun */ + if(tmp && !g_utf8_validate(tmp, -1, &end)) { + char *new = g_strndup(tmp, + g_utf8_pointer_to_offset(tmp, end)); + g_free(tmp); + tmp = new; } + /* add ... to messages that are too long, GTK 2.6+ does it automatically */ +#if !GTK_CHECK_VERSION(2,6,0) + if(tmp) { + char buf[32]; + char *c = tmp; + int length = 0, vis=0; + gboolean inside = FALSE; + g_strdelimit(tmp, "\n", ' '); + purple_str_strip_char(tmp, '\r'); + + while(*c && vis < 20) { + if(*c == '&') + inside = TRUE; + else if(*c == ';') + inside = FALSE; + if(!inside) + vis++; + c = g_utf8_next_char(c); /* this is fun */ + } - length = c - tmp; + length = c - tmp; - if(vis == 20) - g_snprintf(buf, sizeof(buf), "%%.%ds...", length); - else - g_snprintf(buf, sizeof(buf), "%%s "); + if(vis == 20) + g_snprintf(buf, sizeof(buf), "%%.%ds...", length); + else + g_snprintf(buf, sizeof(buf), "%%s "); - statustext = g_strdup_printf(buf, tmp); + statustext = g_strdup_printf(buf, tmp);purple_presence_is_idle(presence) - g_free(tmp); - } + g_free(tmp); + } #else - if(tmp) { - g_strdelimit(tmp, "\n", ' '); - purple_str_strip_char(tmp, '\r'); - } - statustext = tmp; + if(tmp) { + g_strdelimit(tmp, "\n", ' '); + purple_str_strip_char(tmp, '\r'); + } + statustext = tmp; #endif - } + } - if(!purple_presence_is_online(presence) && !statustext) - statustext = g_strdup(_("Offline")); - else if (!statustext) - text = g_strdup(esc); + if(!purple_presence_is_online(presence) && !statustext) + statustext = g_strdup(_("Offline")); - if (purple_presence_is_idle(presence)) { - if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_idle_time")) { + /* Idle Text */ + if (purple_presence_is_idle(presence) && purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_idle_time")) { time_t idle_secs = purple_presence_get_idle_time(presence); if (idle_secs > 0) { int iday, ihrs, imin; + time_t t; time(&t); iday = (t - idle_secs) / (24 * 60 * 60); ihrs = ((t - idle_secs) / 60 / 60) % 24; imin = ((t - idle_secs) / 60) % 60; - if (iday) + if (iday) idletime = g_strdup_printf(_("Idle %dd %dh %02dm"), iday, ihrs, imin); else if (ihrs) idletime = g_strdup_printf(_("Idle %dh %02dm"), ihrs, imin); else idletime = g_strdup_printf(_("Idle %dm"), imin); - } - else - idletime = g_strdup(_("Idle")); - if (!selected) { - g_free(text); - text = g_strdup_printf("<span color='%s'>%s</span>\n" - "<span color='%s' size='smaller'>%s%s%s</span>", - dim_grey(), esc, dim_grey(), - idletime != NULL ? idletime : "", - (idletime != NULL && statustext != NULL) ? " - " : "", - statustext != NULL ? statustext : ""); - } - } - else if (!selected && !statustext) {/* We handle selected text later */ - g_free(text); - text = g_strdup_printf("<span color='%s'>%s</span>", dim_grey(), esc); - } else if (!selected && !text) { - g_free(text); - text = g_strdup_printf("<span color='%s'>%s</span>\n" - "<span color='%s' size='smaller'>%s</span>", - dim_grey(), esc, dim_grey(), - statustext != NULL ? statustext : ""); + } else + idletime = g_strdup(_("Idle")); } - } else if (!PURPLE_BUDDY_IS_ONLINE(b)) { - if (!selected && !statustext) {/* We handle selected text later */ - g_free(text); - text = g_strdup_printf("<span color='%s'>%s</span>", dim_grey(), esc); - } else if (!selected && !text) - text = g_strdup_printf("<span color='%s'>%s</span>\n" - "<span color='%s' size='smaller'>%s</span>", - dim_grey(), esc, dim_grey(), - statustext != NULL ? statustext : ""); - - } - /* Not idle and not selected */ - else if (!selected && !text) - { - text = g_strdup_printf("%s\n" - "<span color='%s' size='smaller'>%s</span>", - esc, dim_grey(), - statustext != NULL ? statustext : ""); } - /* It is selected. */ - if ((selected && !text) || (selected && idletime)) { - g_free(text); - text = g_strdup_printf("%s\n" - "<span size='smaller'>%s%s%s</span>", - esc, - idletime != NULL ? idletime : "", - (idletime != NULL && statustext != NULL) ? " - " : "", - statustext != NULL ? statustext : ""); + /* choose the colors of the text */ + theme = pidgin_blist_get_theme(); + + if (purple_presence_is_idle(presence)) { + if (theme) + pair = pidgin_blist_theme_get_idle_text_info(theme); + status_color = name_color = (pair != NULL && pair->color != NULL) ? pair->color : "dim grey"; + status_font = name_font = (pair != NULL && pair->font != NULL) ? pair->font : ""; + + } else if (!purple_presence_is_online(presence)) { + if (theme) + pair = pidgin_blist_theme_get_offline_text_info(theme); + name_color = (pair != NULL && pair->color != NULL) ? pair->color : "black"; + name_font = (pair != NULL && pair->font != NULL) ? pair->font : ""; + + if (theme) + pair = pidgin_blist_theme_get_status_text_info(theme); + status_color = (pair != NULL && pair->color != NULL) ? pair->color : "dim grey"; + status_font = (pair != NULL && pair->font != NULL) ? pair->font : ""; + + } else if (purple_presence_is_available(presence)) { + if (theme) + pair = pidgin_blist_theme_get_online_text_info(theme); + name_color = (pair != NULL && pair->color != NULL) ? pair->color : "black"; + name_font = (pair != NULL && pair->font != NULL) ? pair->font : ""; + + if (theme) + pair = pidgin_blist_theme_get_status_text_info(theme); + status_color = (pair != NULL && pair->color != NULL) ? pair->color : "dim grey"; + status_font = (pair != NULL && pair->font != NULL) ? pair->font : ""; + + } else { + if (theme) + pair = pidgin_blist_theme_get_away_text_info(theme); + name_color = (pair != NULL && pair->color != NULL) ? pair->color : "black"; + name_font = (pair != NULL && pair->font != NULL) ? pair->font : ""; + + if (theme) + pair = pidgin_blist_theme_get_status_text_info(theme); + status_color = (pair != NULL && pair->color != NULL) ? pair->color : "dim grey"; + status_font = (pair != NULL && pair->font != NULL) ? pair->font : ""; } - g_free(idletime); + if (aliased && selected) { + name_color = "black"; + status_color = "black"; + } + + /* Put it all together */ + if (aliased && biglist && (statustext || idletime)) { + /* using <span size='smaller'> breaks the status, so it must be seperated into <small><span>*/ + text = g_strdup_printf("<span font_desc='%s' foreground='%s'>%s</span>\n" + "<small><span font_desc='%s' foreground='%s'>%s%s%s</span></small>", + name_font, name_color, nametext, status_font, status_color, + idletime != NULL ? idletime : "", + (idletime != NULL && statustext != NULL) ? " - " : "", + statustext != NULL ? statustext : ""); + + } else + text = g_strdup_printf("<span font_desc='%s' color='%s'>%s</span>", name_font, name_color, nametext); + + g_free(nametext); g_free(statustext); - g_free(esc); + g_free(idletime); if (hidden_conv) { char *tmp = text; @@ -4062,7 +4097,7 @@ static gboolean pidgin_blist_refresh_timer(PurpleBuddyList *list) PurpleBlistNode *gnode, *cnode; if (gtk_blist_visibility == GDK_VISIBILITY_FULLY_OBSCURED - || !GTK_WIDGET_VISIBLE(gtkblist->window)) + || !GTK_WIDGET_VISIBLE(gtkblist->window)) return TRUE; for(gnode = list->root; gnode; gnode = gnode->next) { @@ -4331,6 +4366,10 @@ written_msg_update_ui_cb(PurpleAccount *account, const char *who, const char *me !(flag & (PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_RECV))) return; ui->conv.flags |= PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE; + if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT + && (flag & PURPLE_MESSAGE_NICK)) + ui->conv.flags |= PIDGIN_BLIST_CHAT_HAS_PENDING_MESSAGE_WITH_NICK; + ui->conv.last_message = time(NULL); /* XXX: for lack of better data */ pidgin_blist_update(purple_get_blist(), node); } @@ -4341,7 +4380,8 @@ displayed_msg_update_ui_cb(PidginConversation *gtkconv, PurpleBlistNode *node) PidginBlistNode *ui = node->ui_data; if (ui->conv.conv != gtkconv->active_conv) return; - ui->conv.flags &= ~PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE; + ui->conv.flags &= ~(PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE | + PIDGIN_BLIST_CHAT_HAS_PENDING_MESSAGE_WITH_NICK); pidgin_blist_update(purple_get_blist(), node); } @@ -4450,7 +4490,7 @@ void pidgin_blist_setup_sort_methods() #if GTK_CHECK_VERSION(2,2,1) pidgin_blist_sort_method_reg("alphabetical", _("Alphabetically"), sort_method_alphabetical); pidgin_blist_sort_method_reg("status", _("By status"), sort_method_status); - pidgin_blist_sort_method_reg("log_size", _("By log size"), sort_method_log); + pidgin_blist_sort_method_reg("log_size", _("By recent log activity"), sort_method_log_activity); #endif pidgin_blist_sort_method_set(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/blist/sort_type")); } @@ -5261,11 +5301,144 @@ kiosk_page() } #endif +/* builds the blist layout according to to the current theme */ +static void +pidgin_blist_build_layout(PurpleBuddyList *list) +{ + GtkTreeViewColumn *column; + PidginBlistLayout *layout; + PidginBlistTheme *theme; + GtkCellRenderer *rend; + gint i, status_icon = 0, text = 1, emblem = 2, protocol_icon = 3, buddy_icon = 4; + + + column = gtkblist->text_column; + + if ((theme = pidgin_blist_get_theme()) != NULL && (layout = pidgin_blist_theme_get_layout(theme)) != NULL) { + status_icon = layout->status_icon ; + text = layout->text; + emblem = layout->emblem; + protocol_icon = layout->protocol_icon; + buddy_icon = layout->buddy_icon; + } + + gtk_tree_view_column_clear(column); + + /* group */ + rend = pidgin_cell_renderer_expander_new(); + gtk_tree_view_column_pack_start(column, rend, FALSE); + gtk_tree_view_column_set_attributes(column, rend, + "visible", GROUP_EXPANDER_VISIBLE_COLUMN, + "expander-visible", GROUP_EXPANDER_COLUMN, +#if GTK_CHECK_VERSION(2,6,0) + "sensitive", GROUP_EXPANDER_COLUMN, + "cell-background-gdk", BGCOLOR_COLUMN, +#endif + NULL); + + /* contact */ + rend = pidgin_cell_renderer_expander_new(); + gtk_tree_view_column_pack_start(column, rend, FALSE); + gtk_tree_view_column_set_attributes(column, rend, + "visible", CONTACT_EXPANDER_VISIBLE_COLUMN, + "expander-visible", CONTACT_EXPANDER_COLUMN, +#if GTK_CHECK_VERSION(2,6,0) + "sensitive", CONTACT_EXPANDER_COLUMN, + "cell-background-gdk", BGCOLOR_COLUMN, +#endif + NULL); + + for (i = 0; i < 5; i++) { + + if (status_icon == i) { + /* status icons */ + rend = gtk_cell_renderer_pixbuf_new(); + gtk_tree_view_column_pack_start(column, rend, FALSE); + gtk_tree_view_column_set_attributes(column, rend, + "pixbuf", STATUS_ICON_COLUMN, + "visible", STATUS_ICON_VISIBLE_COLUMN, +#if GTK_CHECK_VERSION(2,6,0) + "cell-background-gdk", BGCOLOR_COLUMN, +#endif + NULL); + g_object_set(rend, "xalign", 0.0, "xpad", 6, "ypad", 0, NULL); + + } else if (text == i) { + /* name */ + gtkblist->text_rend = rend = gtk_cell_renderer_text_new(); + gtk_tree_view_column_pack_start(column, rend, TRUE); + gtk_tree_view_column_set_attributes(column, rend, +#if GTK_CHECK_VERSION(2,6,0) + "cell-background-gdk", BGCOLOR_COLUMN, +#endif + "markup", NAME_COLUMN, + NULL); +#if GTK_CHECK_VERSION(2,6,0) + g_signal_connect(G_OBJECT(rend), "editing-started", G_CALLBACK(gtk_blist_renderer_editing_started_cb), NULL); + g_signal_connect(G_OBJECT(rend), "editing-canceled", G_CALLBACK(gtk_blist_renderer_editing_cancelled_cb), list); +#endif + g_signal_connect(G_OBJECT(rend), "edited", G_CALLBACK(gtk_blist_renderer_edited_cb), list); + g_object_set(rend, "ypad", 0, "yalign", 0.5, NULL); +#if GTK_CHECK_VERSION(2,6,0) + g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); +#endif + + /* idle */ + rend = gtk_cell_renderer_text_new(); + g_object_set(rend, "xalign", 1.0, "ypad", 0, NULL); + gtk_tree_view_column_pack_start(column, rend, FALSE); + gtk_tree_view_column_set_attributes(column, rend, + "markup", IDLE_COLUMN, + "visible", IDLE_VISIBLE_COLUMN, +#if GTK_CHECK_VERSION(2,6,0) + "cell-background-gdk", BGCOLOR_COLUMN, +#endif + NULL); + } else if (emblem == i) { + /* emblem */ + rend = gtk_cell_renderer_pixbuf_new(); + g_object_set(rend, "xalign", 1.0, "yalign", 0.5, "ypad", 0, "xpad", 3, NULL); + gtk_tree_view_column_pack_start(column, rend, FALSE); + gtk_tree_view_column_set_attributes(column, rend, "pixbuf", EMBLEM_COLUMN, +#if GTK_CHECK_VERSION(2,6,0) + "cell-background-gdk", BGCOLOR_COLUMN, +#endif + "visible", EMBLEM_VISIBLE_COLUMN, NULL); + + } else if (protocol_icon == i) { + /* protocol icon */ + rend = gtk_cell_renderer_pixbuf_new(); + gtk_tree_view_column_pack_start(column, rend, FALSE); + gtk_tree_view_column_set_attributes(column, rend, + "pixbuf", PROTOCOL_ICON_COLUMN, + "visible", PROTOCOL_ICON_VISIBLE_COLUMN, +#if GTK_CHECK_VERSION(2,6,0) + "cell-background-gdk", BGCOLOR_COLUMN, +#endif + NULL); + g_object_set(rend, "xalign", 0.0, "xpad", 3, "ypad", 0, NULL); + + } else if (buddy_icon == i) { + /* buddy icon */ + rend = gtk_cell_renderer_pixbuf_new(); + g_object_set(rend, "xalign", 1.0, "ypad", 0, NULL); + gtk_tree_view_column_pack_start(column, rend, FALSE); + gtk_tree_view_column_set_attributes(column, rend, "pixbuf", BUDDY_ICON_COLUMN, +#if GTK_CHECK_VERSION(2,6,0) + "cell-background-gdk", BGCOLOR_COLUMN, +#endif + "visible", BUDDY_ICON_VISIBLE_COLUMN, + NULL); + } + + }/* end for loop */ + +} + static void pidgin_blist_show(PurpleBuddyList *list) { PidginBuddyListPrivate *priv; void *handle; - GtkCellRenderer *rend; GtkTreeViewColumn *column; GtkWidget *menu; GtkWidget *ebox; @@ -5291,6 +5464,8 @@ static void pidgin_blist_show(PurpleBuddyList *list) gtkblist = PIDGIN_BLIST(list); priv = PIDGIN_BUDDY_LIST_GET_PRIVATE(gtkblist); + priv->current_theme = PIDGIN_BLIST_THEME(purple_theme_manager_find_theme(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/blist/theme"), "blist")); + gtkblist->empty_avatar = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 32, 32); gdk_pixbuf_fill(gtkblist->empty_avatar, 0x00000000); @@ -5323,8 +5498,8 @@ static void pidgin_blist_show(PurpleBuddyList *list) gtk_item_factory_create_items(gtkblist->ift, sizeof(blist_menu) / sizeof(*blist_menu), blist_menu, NULL); pidgin_load_accels(); - g_signal_connect(G_OBJECT(accel_group), "accel-changed", - G_CALLBACK(pidgin_save_accels_cb), NULL); + g_signal_connect(G_OBJECT(accel_group), "accel-changed", G_CALLBACK(pidgin_save_accels_cb), NULL); + menu = gtk_item_factory_get_widget(gtkblist->ift, "<PurpleMain>"); gtkblist->menutray = pidgin_menu_tray_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtkblist->menutray); @@ -5468,105 +5643,16 @@ static void pidgin_blist_show(PurpleBuddyList *list) gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(gtkblist->treeview), FALSE); + /* expander columns */ column = gtk_tree_view_column_new(); gtk_tree_view_append_column(GTK_TREE_VIEW(gtkblist->treeview), column); gtk_tree_view_column_set_visible(column, FALSE); gtk_tree_view_set_expander_column(GTK_TREE_VIEW(gtkblist->treeview), column); - gtkblist->text_column = column = gtk_tree_view_column_new (); - rend = pidgin_cell_renderer_expander_new(); - gtk_tree_view_column_pack_start(column, rend, FALSE); - gtk_tree_view_column_set_attributes(column, rend, - "visible", GROUP_EXPANDER_VISIBLE_COLUMN, - "expander-visible", GROUP_EXPANDER_COLUMN, -#if GTK_CHECK_VERSION(2,6,0) - "sensitive", GROUP_EXPANDER_COLUMN, - "cell-background-gdk", BGCOLOR_COLUMN, -#endif - NULL); - - rend = pidgin_cell_renderer_expander_new(); - gtk_tree_view_column_pack_start(column, rend, FALSE); - gtk_tree_view_column_set_attributes(column, rend, - "expander-visible", CONTACT_EXPANDER_COLUMN, -#if GTK_CHECK_VERSION(2,6,0) - "sensitive", CONTACT_EXPANDER_COLUMN, - "cell-background-gdk", BGCOLOR_COLUMN, -#endif - "visible", CONTACT_EXPANDER_VISIBLE_COLUMN, - NULL); - - rend = gtk_cell_renderer_pixbuf_new(); - gtk_tree_view_column_pack_start(column, rend, FALSE); - gtk_tree_view_column_set_attributes(column, rend, - "pixbuf", STATUS_ICON_COLUMN, - "visible", STATUS_ICON_VISIBLE_COLUMN, -#if GTK_CHECK_VERSION(2,6,0) - "cell-background-gdk", BGCOLOR_COLUMN, -#endif - NULL); - g_object_set(rend, "xalign", 0.0, "xpad", 6, "ypad", 0, NULL); - - gtkblist->text_rend = rend = gtk_cell_renderer_text_new(); - gtk_tree_view_column_pack_start (column, rend, TRUE); - gtk_tree_view_column_set_attributes(column, rend, -#if GTK_CHECK_VERSION(2,6,0) - "cell-background-gdk", BGCOLOR_COLUMN, -#endif - "markup", NAME_COLUMN, - NULL); -#if GTK_CHECK_VERSION(2,6,0) - g_signal_connect(G_OBJECT(rend), "editing-started", G_CALLBACK(gtk_blist_renderer_editing_started_cb), NULL); - g_signal_connect(G_OBJECT(rend), "editing-canceled", G_CALLBACK(gtk_blist_renderer_editing_cancelled_cb), list); -#endif - g_signal_connect(G_OBJECT(rend), "edited", G_CALLBACK(gtk_blist_renderer_edited_cb), list); - g_object_set(rend, "ypad", 0, "yalign", 0.5, NULL); -#if GTK_CHECK_VERSION(2,6,0) - g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); -#endif - gtk_tree_view_append_column(GTK_TREE_VIEW(gtkblist->treeview), column); - - rend = gtk_cell_renderer_text_new(); - g_object_set(rend, "xalign", 1.0, "ypad", 0, NULL); - gtk_tree_view_column_pack_start(column, rend, FALSE); - gtk_tree_view_column_set_attributes(column, rend, - "markup", IDLE_COLUMN, - "visible", IDLE_VISIBLE_COLUMN, -#if GTK_CHECK_VERSION(2,6,0) - "cell-background-gdk", BGCOLOR_COLUMN, -#endif - NULL); - - rend = gtk_cell_renderer_pixbuf_new(); - g_object_set(rend, "xalign", 1.0, "yalign", 0.5, "ypad", 0, "xpad", 3, NULL); - gtk_tree_view_column_pack_start(column, rend, FALSE); - gtk_tree_view_column_set_attributes(column, rend, "pixbuf", EMBLEM_COLUMN, -#if GTK_CHECK_VERSION(2,6,0) - "cell-background-gdk", BGCOLOR_COLUMN, -#endif - "visible", EMBLEM_VISIBLE_COLUMN, NULL); - - rend = gtk_cell_renderer_pixbuf_new(); - gtk_tree_view_column_pack_start(column, rend, FALSE); - gtk_tree_view_column_set_attributes(column, rend, - "pixbuf", PROTOCOL_ICON_COLUMN, - "visible", PROTOCOL_ICON_VISIBLE_COLUMN, -#if GTK_CHECK_VERSION(2,6,0) - "cell-background-gdk", BGCOLOR_COLUMN, -#endif - NULL); - g_object_set(rend, "xalign", 0.0, "xpad", 3, "ypad", 0, NULL); - - rend = gtk_cell_renderer_pixbuf_new(); - g_object_set(rend, "xalign", 1.0, "ypad", 0, NULL); - gtk_tree_view_column_pack_start(column, rend, FALSE); - gtk_tree_view_column_set_attributes(column, rend, "pixbuf", BUDDY_ICON_COLUMN, -#if GTK_CHECK_VERSION(2,6,0) - "cell-background-gdk", BGCOLOR_COLUMN, -#endif - "visible", BUDDY_ICON_VISIBLE_COLUMN, - NULL); - + /* everything else column */ + gtkblist->text_column = gtk_tree_view_column_new (); + gtk_tree_view_append_column(GTK_TREE_VIEW(gtkblist->treeview), gtkblist->text_column); + pidgin_blist_build_layout(list); g_signal_connect(G_OBJECT(gtkblist->treeview), "row-activated", G_CALLBACK(gtk_blist_row_activated_cb), NULL); g_signal_connect(G_OBJECT(gtkblist->treeview), "row-expanded", G_CALLBACK(gtk_blist_row_expanded_cb), NULL); @@ -5959,7 +6045,7 @@ static void pidgin_blist_update_group(PurpleBuddyList *list, if (editing_blist) return; - + if (PURPLE_BLIST_NODE_IS_GROUP(node)) gnode = node; else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) @@ -5993,13 +6079,19 @@ static void pidgin_blist_update_group(PurpleBuddyList *list, GtkTreeIter iter; GtkTreePath *path; gboolean expanded; - GdkColor bgcolor; + GdkColor *bgcolor = NULL; GdkPixbuf *avatar = NULL; + PidginBlistTheme *theme = NULL; if(!insert_node(list, gnode, &iter)) return; - bgcolor = gtkblist->treeview->style->bg[GTK_STATE_ACTIVE]; + if ((theme = pidgin_blist_get_theme()) == NULL) + bgcolor = NULL; + else if (purple_blist_node_get_bool(gnode, "collapsed") || count <= 0) + bgcolor = pidgin_blist_theme_get_collapsed_background_color(theme); + else + bgcolor = pidgin_blist_theme_get_expanded_background_color(theme); path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter); expanded = gtk_tree_view_row_expanded(GTK_TREE_VIEW(gtkblist->treeview), path); @@ -6017,7 +6109,7 @@ static void pidgin_blist_update_group(PurpleBuddyList *list, STATUS_ICON_COLUMN, NULL, NAME_COLUMN, title, NODE_COLUMN, gnode, - /* BGCOLOR_COLUMN, &bgcolor, */ + BGCOLOR_COLUMN, bgcolor, GROUP_EXPANDER_COLUMN, TRUE, GROUP_EXPANDER_VISIBLE_COLUMN, TRUE, CONTACT_EXPANDER_VISIBLE_COLUMN, FALSE, @@ -6040,6 +6132,9 @@ static char *pidgin_get_group_title(PurpleBlistNode *gnode, gboolean expanded) char *mark, *esc; PurpleBlistNode *selected_node = NULL; GtkTreeIter iter; + FontColorPair *pair; + gchar *text_color, *text_font; + PidginBlistTheme *theme; group = (PurpleGroup*)gnode; @@ -6055,8 +6150,21 @@ static char *pidgin_get_group_title(PurpleBlistNode *gnode, gboolean expanded) purple_blist_get_group_size(group, FALSE)); } + theme = pidgin_blist_get_theme(); + if (theme == NULL) + pair = NULL; + else if (expanded) + pair = pidgin_blist_theme_get_expanded_text_info(theme); + else + pair = pidgin_blist_theme_get_collapsed_text_info(theme); + + + text_color = (selected || pair == NULL || pair->color == NULL) ? "black" : pair->color; + text_font = (pair == NULL || pair->font == NULL) ? "" : pair->font; + esc = g_markup_escape_text(group->name, -1); - mark = g_strdup_printf("<span weight='bold'>%s</span>%s", esc ? esc : "", group_count); + mark = g_strdup_printf("<span foreground='%s' font_desc='%s'><b>%s</b>%s</span>", + text_color, text_font, esc ? esc : "", group_count); g_free(esc); return mark; @@ -6064,14 +6172,15 @@ static char *pidgin_get_group_title(PurpleBlistNode *gnode, gboolean expanded) static void buddy_node(PurpleBuddy *buddy, GtkTreeIter *iter, PurpleBlistNode *node) { - PurplePresence *presence; + PurplePresence *presence = purple_buddy_get_presence(buddy); GdkPixbuf *status, *avatar, *emblem, *prpl_icon; + GdkColor *color = NULL; char *mark; char *idle = NULL; gboolean expanded = ((struct _pidgin_blist_node *)(node->parent->ui_data))->contact_expanded; gboolean selected = (gtkblist->selected_node == node); gboolean biglist = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"); - presence = purple_buddy_get_presence(buddy); + PidginBlistTheme *theme; if (editing_blist) return; @@ -6095,35 +6204,39 @@ static void buddy_node(PurpleBuddy *buddy, GtkTreeIter *iter, PurpleBlistNode *n emblem = pidgin_blist_get_emblem((PurpleBlistNode*) buddy); mark = pidgin_blist_get_name_markup(buddy, selected, TRUE); + theme = pidgin_blist_get_theme(); + if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_idle_time") && - purple_presence_is_idle(presence) && - !purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons")) + purple_presence_is_idle(presence) && !biglist) { time_t idle_secs = purple_presence_get_idle_time(presence); if (idle_secs > 0) { + FontColorPair *pair = NULL; + const gchar *textcolor; time_t t; int ihrs, imin; time(&t); + ihrs = (t - idle_secs) / 3600; imin = ((t - idle_secs) / 60) % 60; - idle = g_strdup_printf("%d:%02d", ihrs, imin); - } - } - if (purple_presence_is_idle(presence)) - { - if (idle && !selected) { - char *i2 = g_strdup_printf("<span color='%s'>%s</span>", - dim_grey(), idle); - g_free(idle); - idle = i2; + if (!selected && theme != NULL && (pair = pidgin_blist_theme_get_idle_text_info(theme)) != NULL && pair->color != NULL) + textcolor = pair->color; + else + textcolor = "black"; + + idle = g_strdup_printf("<span color='%s' font_desc='%s'>%d:%02d</span>", textcolor, + (pair == NULL || pair->font == NULL) ? "" : pair->font, ihrs, imin); } } prpl_icon = pidgin_create_prpl_icon(buddy->account, PIDGIN_PRPL_ICON_SMALL); + if (theme != NULL) + color = pidgin_blist_theme_get_contact_color(theme); + gtk_tree_store_set(gtkblist->treemodel, iter, STATUS_ICON_COLUMN, status, STATUS_ICON_VISIBLE_COLUMN, TRUE, @@ -6136,7 +6249,7 @@ static void buddy_node(PurpleBuddy *buddy, GtkTreeIter *iter, PurpleBlistNode *n EMBLEM_VISIBLE_COLUMN, (emblem != NULL), PROTOCOL_ICON_COLUMN, prpl_icon, PROTOCOL_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons"), - BGCOLOR_COLUMN, NULL, + BGCOLOR_COLUMN, color, CONTACT_EXPANDER_COLUMN, NULL, CONTACT_EXPANDER_VISIBLE_COLUMN, expanded, GROUP_EXPANDER_VISIBLE_COLUMN, FALSE, @@ -6194,19 +6307,41 @@ static void pidgin_blist_update_contact(PurpleBuddyList *list, PurpleBlistNode * if(gtknode->contact_expanded) { GdkPixbuf *status; - char *mark; + gchar *mark, *tmp; + const gchar *fg_color, *font; + GdkColor *color = NULL; + PidginBlistTheme *theme = pidgin_blist_get_theme(); + FontColorPair *pair; + gboolean selected = (gtkblist->selected_node == cnode); + + mark = g_markup_escape_text(purple_contact_get_alias(contact), -1); + + theme = pidgin_blist_get_theme(); + if (theme == NULL) + pair = NULL; + else { + pair = pidgin_blist_theme_get_contact_text_info(theme); + color = pidgin_blist_theme_get_contact_color(theme); + } + + font = (pair == NULL || pair->font == NULL) ? "" : pair->font; + fg_color = (selected || pair == NULL || pair->color == NULL) ? "black" : pair->color; + + tmp = g_strdup_printf("<span font_desc='%s' color='%s'>%s</span>", + font, fg_color, mark); + g_free(mark); + mark = tmp; status = pidgin_blist_get_status_icon(cnode, biglist? PIDGIN_STATUS_ICON_LARGE : PIDGIN_STATUS_ICON_SMALL); - mark = g_markup_escape_text(purple_contact_get_alias(contact), -1); gtk_tree_store_set(gtkblist->treemodel, &iter, STATUS_ICON_COLUMN, status, STATUS_ICON_VISIBLE_COLUMN, TRUE, NAME_COLUMN, mark, IDLE_COLUMN, NULL, IDLE_VISIBLE_COLUMN, FALSE, - BGCOLOR_COLUMN, NULL, + BGCOLOR_COLUMN, color, BUDDY_ICON_COLUMN, NULL, CONTACT_EXPANDER_COLUMN, TRUE, CONTACT_EXPANDER_VISIBLE_COLUMN, TRUE, @@ -6274,20 +6409,28 @@ static void pidgin_blist_update_chat(PurpleBuddyList *list, PurpleBlistNode *nod if(purple_account_is_connected(chat->account)) { GtkTreeIter iter; GdkPixbuf *status, *avatar, *emblem, *prpl_icon; - char *mark; + const gchar *color, *font; + gchar *mark, *tmp; gboolean showicons = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"); gboolean biglist = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"); PidginBlistNode *ui; PurpleConversation *conv; gboolean hidden; + GdkColor *bgcolor = NULL; + FontColorPair *pair; + PidginBlistTheme *theme; + gboolean selected = (gtkblist->selected_node == node); + gboolean nick_said = FALSE; if (!insert_node(list, node, &iter)) return; ui = node->ui_data; conv = ui->conv.conv; - hidden = (conv && (ui->conv.flags & PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE) && - pidgin_conv_is_hidden(PIDGIN_CONVERSATION(conv))); + if (conv && pidgin_conv_is_hidden(PIDGIN_CONVERSATION(conv))) { + hidden = (ui->conv.flags & PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE); + nick_said = (ui->conv.flags & PIDGIN_BLIST_CHAT_HAS_PENDING_MESSAGE_WITH_NICK); + } status = pidgin_blist_get_status_icon(node, biglist ? PIDGIN_STATUS_ICON_LARGE : PIDGIN_STATUS_ICON_SMALL); @@ -6300,14 +6443,36 @@ static void pidgin_blist_update_chat(PurpleBuddyList *list, PurpleBlistNode *nod avatar = NULL; mark = g_markup_escape_text(purple_chat_get_name(chat), -1); - if (hidden) { - char *bold = g_strdup_printf("<b>%s</b>", mark); - g_free(mark); - mark = bold; - } + + theme = pidgin_blist_get_theme(); + + if (theme == NULL) + pair = NULL; + else if (nick_said) + pair = pidgin_blist_theme_get_unread_message_nick_said_text_info(theme); + else if (hidden) + pair = pidgin_blist_theme_get_unread_message_text_info(theme); + else pair = pidgin_blist_theme_get_online_text_info(theme); + + + font = (pair == NULL || pair->font == NULL) ? "" : pair->font; + if (selected || pair == NULL || pair->color == NULL) + /* nick_said color is the same as gtkconv:tab-label-attention */ + color = (nick_said ? "#006aff" : "black"); + else + color = pair->color; + + tmp = g_strdup_printf("<span font_desc='%s' color='%s' weight='%s'>%s</span>", + font, color, hidden ? "bold" : "normal", mark); + + g_free(mark); + mark = tmp; prpl_icon = pidgin_create_prpl_icon(chat->account, PIDGIN_PRPL_ICON_SMALL); + if (theme != NULL) + bgcolor = pidgin_blist_theme_get_contact_color(theme); + gtk_tree_store_set(gtkblist->treemodel, &iter, STATUS_ICON_COLUMN, status, STATUS_ICON_VISIBLE_COLUMN, TRUE, @@ -6318,6 +6483,7 @@ static void pidgin_blist_update_chat(PurpleBuddyList *list, PurpleBlistNode *nod PROTOCOL_ICON_COLUMN, prpl_icon, PROTOCOL_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons"), NAME_COLUMN, mark, + BGCOLOR_COLUMN, bgcolor, GROUP_EXPANDER_VISIBLE_COLUMN, FALSE, -1); @@ -6330,6 +6496,7 @@ static void pidgin_blist_update_chat(PurpleBuddyList *list, PurpleBlistNode *nod g_object_unref(avatar); if(prpl_icon) g_object_unref(prpl_icon); + } else { pidgin_blist_hide_node(list, node, TRUE); } @@ -6987,7 +7154,7 @@ pidgin_blist_request_add_chat(PurpleAccount *account, PurpleGroup *group, data->group_combo = pidgin_text_combo_box_entry_new(group ? group->name : NULL, groups_tree()); pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("_Group:"), data->sg, data->group_combo, TRUE, NULL); - + data->autojoin = gtk_check_button_new_with_mnemonic(_("Auto_join when account becomes online.")); data->persistent = gtk_check_button_new_with_mnemonic(_("_Remain in chat after window is closed.")); gtk_box_pack_start(GTK_BOX(vbox), data->autojoin, FALSE, FALSE, 0); @@ -7191,6 +7358,34 @@ static void buddy_signonoff_cb(PurpleBuddy *buddy) (GSourceFunc)buddy_signonoff_timeout_cb, buddy); } +void +pidgin_blist_set_theme(PidginBlistTheme *theme) +{ + PidginBuddyListPrivate *priv = PIDGIN_BUDDY_LIST_GET_PRIVATE(gtkblist); + PurpleBuddyList *list = purple_get_blist(); + + if (theme != NULL) + purple_prefs_set_string(PIDGIN_PREFS_ROOT "/blist/theme", + purple_theme_get_name(PURPLE_THEME(theme))); + else + purple_prefs_set_string(PIDGIN_PREFS_ROOT "/blist/theme", ""); + + priv->current_theme = theme; + + pidgin_blist_build_layout(list); + + pidgin_blist_refresh(list); +} + + +PidginBlistTheme * +pidgin_blist_get_theme() +{ + PidginBuddyListPrivate *priv = PIDGIN_BUDDY_LIST_GET_PRIVATE(gtkblist); + + return priv->current_theme; +} + void pidgin_blist_init(void) { void *gtk_blist_handle = pidgin_blist_get_handle(); @@ -7219,6 +7414,9 @@ void pidgin_blist_init(void) /* This pref is used in pidgintooltip.c. */ purple_prefs_add_int(PIDGIN_PREFS_ROOT "/blist/tooltip_delay", 500); #endif + purple_prefs_add_string(PIDGIN_PREFS_ROOT "/blist/theme", ""); + + purple_theme_manager_register_type(g_object_new(PIDGIN_TYPE_BLIST_THEME_LOADER, "type", "blist", NULL)); /* Register our signals */ purple_signal_register(gtk_blist_handle, "gtkblist-hiding", @@ -7493,11 +7691,11 @@ static void sort_method_status(PurpleBlistNode *node, PurpleBuddyList *blist, Gt } } -static void sort_method_log(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter) +static void sort_method_log_activity(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter) { GtkTreeIter more_z; - int log_size = 0, this_log_size = 0; + int activity_score = 0, this_log_activity_score = 0; const char *buddy_name, *this_buddy_name; if(cur && (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(gtkblist->treemodel), &groupiter) == 1)) { @@ -7507,8 +7705,11 @@ static void sort_method_log(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTr if(PURPLE_BLIST_NODE_IS_CONTACT(node)) { PurpleBlistNode *n; - for (n = node->child; n; n = n->next) - log_size += purple_log_get_total_size(PURPLE_LOG_IM, ((PurpleBuddy*)(n))->name, ((PurpleBuddy*)(n))->account); + PurpleBuddy *buddy; + for (n = node->child; n; n = n->next) { + buddy = (PurpleBuddy*)n; + activity_score += purple_log_get_activity_score(PURPLE_LOG_IM, buddy->name, buddy->account); + } buddy_name = purple_contact_get_alias((PurpleContact*)node); } else if(PURPLE_BLIST_NODE_IS_CHAT(node)) { /* we don't have a reliable way of getting the log filename @@ -7535,16 +7736,19 @@ static void sort_method_log(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTr GValue val; PurpleBlistNode *n; PurpleBlistNode *n2; + PurpleBuddy *buddy; int cmp; val.g_type = 0; gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &val); n = g_value_get_pointer(&val); - this_log_size = 0; + this_log_activity_score = 0; if(PURPLE_BLIST_NODE_IS_CONTACT(n)) { - for (n2 = n->child; n2; n2 = n2->next) - this_log_size += purple_log_get_total_size(PURPLE_LOG_IM, ((PurpleBuddy*)(n2))->name, ((PurpleBuddy*)(n2))->account); + for (n2 = n->child; n2; n2 = n2->next) { + buddy = (PurpleBuddy*)n2; + this_log_activity_score += purple_log_get_activity_score(PURPLE_LOG_IM, buddy->name, buddy->account); + } this_buddy_name = purple_contact_get_alias((PurpleContact*)n); } else { this_buddy_name = NULL; @@ -7552,8 +7756,8 @@ static void sort_method_log(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTr cmp = purple_utf8_strcasecmp(buddy_name, this_buddy_name); - if (!PURPLE_BLIST_NODE_IS_CONTACT(n) || log_size > this_log_size || - ((log_size == this_log_size) && + if (!PURPLE_BLIST_NODE_IS_CONTACT(n) || activity_score > this_log_activity_score || + ((activity_score == this_log_activity_score) && (cmp < 0 || (cmp == 0 && node < n)))) { if (cur != NULL) { gtk_tree_store_move_before(gtkblist->treemodel, cur, &more_z); diff --git a/pidgin/gtkblist.h b/pidgin/gtkblist.h index 9df53a899a..bda0ef77d8 100644 --- a/pidgin/gtkblist.h +++ b/pidgin/gtkblist.h @@ -60,6 +60,7 @@ typedef enum { #include "pidgin.h" #include "blist.h" +#include "gtkblist-theme.h" /************************************************************************** * @name Structures @@ -251,6 +252,23 @@ void pidgin_blist_visibility_manager_remove(void); */ void pidgin_blist_add_alert(GtkWidget *widget); +/** + * Sets the current theme for Pidgin to use + * + * @param theme the new theme to use + * + * @since 2.6.0 + */ +void pidgin_blist_set_theme(PidginBlistTheme *theme); + +/** + * Gets Pidgin's current buddy list theme + * + * @returns the current theme + * + * @since 2.6.0 + */ +PidginBlistTheme *pidgin_blist_get_theme(void); /************************************************************************** * @name GTK+ Buddy List sorting functions @@ -382,7 +400,7 @@ void pidgin_blist_set_headline(const char *text, GdkPixbuf *pixbuf, GCallback ca * * @param buddy The buddy to return markup from * @param selected Whether this buddy is selected. If TRUE, the markup will not change the color. - * @param aliased TRUE to return the appropriate alias of this buddy, FALSE to return its screenname and status information + * @param aliased TRUE to return the appropriate alias of this buddy, FALSE to return its username and status information * @return The markup for this buddy * * @since 2.1.0 diff --git a/pidgin/gtkcellrendererexpander.c b/pidgin/gtkcellrendererexpander.c index 289e34143d..dda5578f16 100644 --- a/pidgin/gtkcellrendererexpander.c +++ b/pidgin/gtkcellrendererexpander.c @@ -18,14 +18,14 @@ * 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 * */ -/* This is taken largely from GtkCellRenderer[Text|Pixbuf|Toggle] by +/* This is taken largely from GtkCellRenderer[Text|Pixbuf|Toggle] by * Jonathon Blandford <jrb@redhat.com> for RedHat, Inc. */ @@ -74,14 +74,14 @@ enum { PROP_0, PROP_IS_EXPANDER }; - + static gpointer parent_class; /* static guint expander_cell_renderer_signals [LAST_SIGNAL]; */ GType pidgin_cell_renderer_expander_get_type (void) { static GType cell_expander_type = 0; - + if (!cell_expander_type) { static const GTypeInfo cell_expander_info = @@ -97,13 +97,13 @@ GType pidgin_cell_renderer_expander_get_type (void) (GInstanceInitFunc) pidgin_cell_renderer_expander_init, NULL /* value_table */ }; - + cell_expander_type = g_type_register_static (GTK_TYPE_CELL_RENDERER, "PidginCellRendererExpander", &cell_expander_info, 0); } - + return cell_expander_type; } @@ -118,17 +118,17 @@ static void pidgin_cell_renderer_expander_class_init (PidginCellRendererExpander { GObjectClass *object_class = G_OBJECT_CLASS(class); GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS(class); - + parent_class = g_type_class_peek_parent (class); object_class->finalize = pidgin_cell_renderer_expander_finalize; object_class->get_property = pidgin_cell_renderer_expander_get_property; object_class->set_property = pidgin_cell_renderer_expander_set_property; - + cell_class->get_size = pidgin_cell_renderer_expander_get_size; cell_class->render = pidgin_cell_renderer_expander_render; cell_class->activate = pidgin_cell_renderer_expander_activate; - + g_object_class_install_property (object_class, PROP_IS_EXPANDER, g_param_spec_boolean ("expander-visible", @@ -162,7 +162,7 @@ static void pidgin_cell_renderer_expander_get_property (GObject *object, default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, psec); break; - + } } @@ -199,19 +199,19 @@ static void pidgin_cell_renderer_expander_get_size (GtkCellRenderer *cell, { gint calc_width; gint calc_height; - gint expander_size; - + gint expander_size; + gtk_widget_style_get(widget, "expander-size", &expander_size, NULL); - + calc_width = (gint) cell->xpad * 2 + expander_size; calc_height = (gint) cell->ypad * 2 + expander_size; - + if (width) *width = calc_width; - + if (height) *height = calc_height; - + if (cell_area) { if (x_offset) @@ -228,7 +228,7 @@ static void pidgin_cell_renderer_expander_get_size (GtkCellRenderer *cell, } -static void pidgin_cell_renderer_expander_render (GtkCellRenderer *cell, +static void pidgin_cell_renderer_expander_render(GtkCellRenderer *cell, GdkWindow *window, GtkWidget *widget, GdkRectangle *background_area, @@ -237,7 +237,7 @@ static void pidgin_cell_renderer_expander_render (GtkCellRenderer *cell, guint flags) { PidginCellRendererExpander *cellexpander = (PidginCellRendererExpander *) cell; - + gboolean set; gint width, height; GtkStateType state; @@ -246,7 +246,7 @@ static void pidgin_cell_renderer_expander_render (GtkCellRenderer *cell, width = cell_area->width; height = cell_area->height; - + #if GTK_CHECK_VERSION(2,6,0) if (!cell->sensitive) state = GTK_STATE_INSENSITIVE; @@ -270,8 +270,11 @@ static void pidgin_cell_renderer_expander_render (GtkCellRenderer *cell, cell_area->x + cell->xpad + (width / 2), cell_area->y + cell->ypad + (height / 2), cell->is_expanded ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED); - if (cell->is_expanded) - gtk_paint_hline (widget->style, window, state, NULL, widget, NULL, 0, + + /* only draw the line if the color isn't set - this prevents a bug where the hline appears only under the expander */ + g_object_get(cellexpander, "cell-background-set", &set, NULL); + if (cell->is_expanded && !set) + gtk_paint_hline (widget->style, window, state, NULL, widget, NULL, 0, widget->allocation.width, cell_area->y + cell_area->height); } diff --git a/pidgin/gtkcellrendererexpander.h b/pidgin/gtkcellrendererexpander.h index ec62370cf0..7b1aa4a2dc 100644 --- a/pidgin/gtkcellrendererexpander.h +++ b/pidgin/gtkcellrendererexpander.h @@ -12,7 +12,7 @@ * 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 diff --git a/pidgin/gtkcellrendererprogress.c b/pidgin/gtkcellrendererprogress.c index 44b831e1ef..ea5e90b59d 100644 --- a/pidgin/gtkcellrendererprogress.c +++ b/pidgin/gtkcellrendererprogress.c @@ -18,14 +18,14 @@ * 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 * */ -/* This is taken largely from GtkCellRenderer[Text|Pixbuf|Toggle] by +/* This is taken largely from GtkCellRenderer[Text|Pixbuf|Toggle] by * Jonathon Blandford <jrb@redhat.com> for RedHat, Inc. */ @@ -76,14 +76,14 @@ enum { PROP_TEXT, PROP_SHOW_TEXT }; - + static gpointer parent_class; /* static guint progress_cell_renderer_signals [LAST_SIGNAL]; */ GType pidgin_cell_renderer_progress_get_type (void) { static GType cell_progress_type = 0; - + if (!cell_progress_type) { static const GTypeInfo cell_progress_info = @@ -99,13 +99,13 @@ GType pidgin_cell_renderer_progress_get_type (void) (GInstanceInitFunc) pidgin_cell_renderer_progress_init, NULL /* value_table */ }; - + cell_progress_type = g_type_register_static (GTK_TYPE_CELL_RENDERER, "PidginCellRendererProgress", &cell_progress_info, 0); } - + return cell_progress_type; } @@ -120,16 +120,16 @@ static void pidgin_cell_renderer_progress_class_init (PidginCellRendererProgress { GObjectClass *object_class = G_OBJECT_CLASS(class); GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS(class); - + parent_class = g_type_class_peek_parent (class); object_class->finalize = pidgin_cell_renderer_progress_finalize; object_class->get_property = pidgin_cell_renderer_progress_get_property; object_class->set_property = pidgin_cell_renderer_progress_set_property; - + cell_class->get_size = pidgin_cell_renderer_progress_get_size; cell_class->render = pidgin_cell_renderer_progress_render; - + g_object_class_install_property (object_class, PROP_PERCENTAGE, g_param_spec_double ("percentage", @@ -228,16 +228,16 @@ static void pidgin_cell_renderer_progress_get_size (GtkCellRenderer *cell, { gint calc_width; gint calc_height; - + calc_width = (gint) cell->xpad * 2 + 50; calc_height = (gint) cell->ypad * 2 + 12; - + if (width) *width = calc_width; - + if (height) *height = calc_height; - + if (cell_area) { if (x_offset) @@ -263,13 +263,13 @@ static void pidgin_cell_renderer_progress_render (GtkCellRenderer *cell, guint flags) { PidginCellRendererProgress *cellprogress = (PidginCellRendererProgress *) cell; - + gint width, height; GtkStateType state; width = cell_area->width; height = cell_area->height; - + if (GTK_WIDGET_HAS_FOCUS (widget)) state = GTK_STATE_ACTIVE; else @@ -280,7 +280,7 @@ static void pidgin_cell_renderer_progress_render (GtkCellRenderer *cell, gtk_paint_box (widget->style, window, - GTK_STATE_NORMAL, GTK_SHADOW_IN, + GTK_STATE_NORMAL, GTK_SHADOW_IN, NULL, widget, "trough", cell_area->x + cell->xpad, cell_area->y + cell->ypad, diff --git a/pidgin/gtkcellrendererprogress.h b/pidgin/gtkcellrendererprogress.h index 4c97f69cb8..9fc147d21a 100644 --- a/pidgin/gtkcellrendererprogress.h +++ b/pidgin/gtkcellrendererprogress.h @@ -12,7 +12,7 @@ * 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 diff --git a/pidgin/gtkcellview.c b/pidgin/gtkcellview.c index 83b011001f..1f16de9f15 100644 --- a/pidgin/gtkcellview.c +++ b/pidgin/gtkcellview.c @@ -463,14 +463,14 @@ gtk_cell_view_expose (GtkWidget *widget, area = widget->allocation; /* we draw on our very own window, initialize x and y to zero */ - area.x = widget->allocation.x + (rtl ? widget->allocation.width : 0); + area.x = widget->allocation.x + (rtl ? widget->allocation.width : 0); area.y = widget->allocation.y; if (GTK_WIDGET_STATE (widget) == GTK_STATE_PRELIGHT) state = GTK_CELL_RENDERER_PRELIT; else state = 0; - + /* PACK_START */ for (i = cellview->priv->cell_list; i; i = i->next) { @@ -483,7 +483,7 @@ gtk_cell_view_expose (GtkWidget *widget, continue; area.width = info->real_width; - if (rtl) + if (rtl) area.x -= area.width; gtk_cell_renderer_render (info->cell, @@ -492,11 +492,11 @@ gtk_cell_view_expose (GtkWidget *widget, /* FIXME! */ &area, &area, &event->area, state); - if (!rtl) + if (!rtl) area.x += info->real_width; } - area.x = rtl ? widget->allocation.x : (widget->allocation.x + widget->allocation.width); + area.x = rtl ? widget->allocation.x : (widget->allocation.x + widget->allocation.width); /* PACK_END */ for (i = cellview->priv->cell_list; i; i = i->next) @@ -511,7 +511,7 @@ gtk_cell_view_expose (GtkWidget *widget, area.width = info->real_width; if (!rtl) - area.x -= area.width; + area.x -= area.width; gtk_cell_renderer_render (info->cell, widget->window, @@ -550,7 +550,7 @@ gtk_cell_view_set_cell_data (GtkCellView *cellview) GtkTreePath *path; g_return_if_fail (cellview->priv->displayed_row != NULL); - + path = gtk_tree_row_reference_get_path (cellview->priv->displayed_row); gtk_tree_model_get_iter (cellview->priv->model, &iter, path); gtk_tree_path_free (path); @@ -666,7 +666,7 @@ gtk_cell_view_cell_layout_clear (GtkCellLayout *layout) gtk_cell_view_cell_layout_clear_attributes (layout, info->cell); g_object_unref (G_OBJECT (info->cell)); g_free (info); - cellview->priv->cell_list = g_list_delete_link (cellview->priv->cell_list, + cellview->priv->cell_list = g_list_delete_link (cellview->priv->cell_list, cellview->priv->cell_list); } } @@ -719,7 +719,7 @@ gtk_cell_view_cell_layout_clear_attributes (GtkCellLayout *layout, g_free (list->data); list = list->next->next; } - + g_slist_free (info->attributes); info->attributes = NULL; } @@ -905,7 +905,7 @@ gtk_cell_view_set_model (GtkCellView *cell_view, * gtk_cell_view_set_displayed_row: * @cell_view: a #GtkCellView * @path: a #GtkTreePath or %NULL to unset. - * + * * Sets the row of the model that is currently displayed * by the #GtkCellView. If the path is unset, then the * contents of the cellview "stick" at their last value; diff --git a/pidgin/gtkconv.c b/pidgin/gtkconv.c index dbd7a2ee1c..d821ce3f43 100644 --- a/pidgin/gtkconv.c +++ b/pidgin/gtkconv.c @@ -201,11 +201,11 @@ get_conversation_blist_node(PurpleConversation *conv) switch (purple_conversation_get_type(conv)) { case PURPLE_CONV_TYPE_IM: - node = (PurpleBlistNode*)purple_find_buddy(conv->account, conv->name); + node = PURPLE_BLIST_NODE(purple_find_buddy(conv->account, conv->name)); node = node ? node->parent : NULL; break; case PURPLE_CONV_TYPE_CHAT: - node = (PurpleBlistNode*)purple_blist_find_chat(conv->account, conv->name); + node = PURPLE_BLIST_NODE(purple_blist_find_chat(conv->account, conv->name)); break; default: break; @@ -1395,7 +1395,7 @@ menu_logging_cb(gpointer data, guint action, GtkWidget *widget) if (logging == purple_conversation_is_logging(conv)) return; - + node = get_conversation_blist_node(conv); if (logging) @@ -1835,7 +1835,7 @@ right_click_chat_cb(GtkWidget *widget, GdkEventButton *event, gtk_tree_selection_select_path(GTK_TREE_SELECTION( gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkchat->list))), path); gtk_tree_view_set_cursor(GTK_TREE_VIEW(gtkchat->list), - path, NULL, FALSE); + path, NULL, FALSE); gtk_widget_grab_focus(GTK_WIDGET(gtkchat->list)); gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, path); @@ -1867,7 +1867,7 @@ activate_list_cb(GtkTreeView *list, GtkTreePath *path, GtkTreeViewColumn *column GtkTreeIter iter; GtkTreeModel *model; gchar *who; - + model = gtk_tree_view_get_model(GTK_TREE_VIEW(list)); gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, path); @@ -2061,7 +2061,7 @@ entry_key_press_cb(GtkWidget *entry, GdkEventKey *event, gpointer data) gtkconv = (PidginConversation *)data; conv = gtkconv->active_conv; win = gtkconv->win; - + if (conv_keypress_common(gtkconv, event)) return TRUE; @@ -2519,7 +2519,7 @@ pidgin_conv_get_icon(PurpleConversation *conv, GtkWidget *parent, const char *ic if (ops && ops->update) ops->update(NULL, (PurpleBlistNode*)b); - /* XXX Seanegan: We really need a util function to return a pixbuf for a Presence to avoid all this switching */ + /* XXX Seanegan: We really need a util function to return a pixbuf for a Presence to avoid all this switching */ if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_AWAY)) status = pidgin_create_status_icon(PURPLE_STATUS_AWAY, parent, icon_size); else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_EXTENDED_AWAY)) @@ -2545,7 +2545,7 @@ pidgin_conv_get_icon(PurpleConversation *conv, GtkWidget *parent, const char *ic status = gtk_widget_render_icon (parent, PIDGIN_STOCK_STATUS_CHAT, size, "GtkWidget"); } - } + } return status; } @@ -2588,11 +2588,11 @@ update_tab_icon(PurpleConversation *conv) gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->icon), status); gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->menu_icon), status); - gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model), + gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model), &(gtkconv->infopane_iter), CONV_ICON_COLUMN, infopane_status, -1); - gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model), + gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model), &(gtkconv->infopane_iter), CONV_EMBLEM_COLUMN, emblem, -1); if (emblem) @@ -3853,7 +3853,7 @@ generate_send_to_items(PidginWindow *win) { PurpleBlistNode *node; - node = (PurpleBlistNode *) purple_buddy_get_contact((PurpleBuddy *)l->data); + node = PURPLE_BLIST_NODE(purple_buddy_get_contact(PURPLE_BUDDY(l->data))); for (node = node->child; node != NULL; node = node->next) { @@ -4802,7 +4802,7 @@ setup_common_pane(PidginConversation *gtkconv) gtkconv->infopane = gtk_cell_view_new(); gtkconv->infopane_model = gtk_list_store_new(CONV_NUM_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, GDK_TYPE_PIXBUF, GDK_TYPE_PIXBUF); - gtk_cell_view_set_model(GTK_CELL_VIEW(gtkconv->infopane), + gtk_cell_view_set_model(GTK_CELL_VIEW(gtkconv->infopane), GTK_TREE_MODEL(gtkconv->infopane_model)); g_object_unref(gtkconv->infopane_model); gtk_list_store_append(gtkconv->infopane_model, &(gtkconv->infopane_iter)); @@ -5036,9 +5036,9 @@ static const GtkTargetEntry te[] = static PidginConversation * pidgin_conv_find_gtkconv(PurpleConversation * conv) { - PurpleBuddy *bud = purple_find_buddy(conv->account, conv->name), *b; + PurpleBuddy *bud = purple_find_buddy(conv->account, conv->name); PurpleContact *c; - PurpleBlistNode *cn; + PurpleBlistNode *cn, *bn; if (!bud) return NULL; @@ -5046,8 +5046,9 @@ pidgin_conv_find_gtkconv(PurpleConversation * conv) if (!(c = purple_buddy_get_contact(bud))) return NULL; - cn = (PurpleBlistNode *)c; - for (b = (PurpleBuddy *)cn->child; b; b = (PurpleBuddy *) ((PurpleBlistNode *)b)->next) { + cn = PURPLE_BLIST_NODE(c); + for (bn = purple_blist_node_get_first_child(cn); bn; bn = purple_blist_node_get_sibling_next(bn)) { + PurpleBuddy *b = PURPLE_BUDDY(bn); PurpleConversation *conv; if ((conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, b->name, b->account))) { if (conv->ui_data) @@ -5497,7 +5498,7 @@ static void pidgin_conv_calculate_newday(PidginConversation *gtkconv, time_t mti gtkconv->newday = mktime(tm); } -/* Detect string direction and encapsulate the string in RLE/LRE/PDF unicode characters +/* Detect string direction and encapsulate the string in RLE/LRE/PDF unicode characters str - pointer to string (string is re-allocated and the pointer updated) */ static void str_embed_direction_chars(char **str) @@ -5534,14 +5535,14 @@ str_embed_direction_chars(char **str) } /* Returns true if the given HTML contains RTL text */ -static gboolean +static gboolean html_is_rtl(const char *html) { GData *attributes; const gchar *start, *end; gboolean res = FALSE; - if (purple_markup_find_tag("span", html, &start, &end, &attributes)) + if (purple_markup_find_tag("span", html, &start, &end, &attributes)) { /* tmp is a member of attributes and is free with g_datalist_clear call */ const char *tmp = g_datalist_get_data(&attributes, "dir"); @@ -6465,10 +6466,10 @@ gray_stuff_out(PidginConversation *gtkconv) PurpleBuddy *buddy = purple_find_buddy(conv->account, conv->name); window_icon = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim); - + if (buddy && !PURPLE_BUDDY_IS_ONLINE(buddy)) gdk_pixbuf_saturate_and_pixelate(window_icon, window_icon, 0.0, FALSE); - + g_object_ref(window_icon); l = g_list_append(l, window_icon); } else { @@ -6661,7 +6662,7 @@ pidgin_conv_update_fields(PurpleConversation *conv, PidginConvFields fields) pango_attr_list_unref(list); } else gtk_label_set_attributes(GTK_LABEL(gtkconv->tab_label), NULL); - + if (pidgin_conv_window_is_active_conversation(conv)) update_typing_icon(gtkconv); @@ -7233,7 +7234,7 @@ show_buddy_icons_pref_cb(const char *name, PurplePrefType type, PurpleConversation *conv = l->data; if (!PIDGIN_CONVERSATION(conv)) continue; - if (GPOINTER_TO_INT(value)) + if (GPOINTER_TO_INT(value)) gtk_widget_show(PIDGIN_CONVERSATION(conv)->infopane_hbox); else gtk_widget_hide(PIDGIN_CONVERSATION(conv)->infopane_hbox); @@ -7643,7 +7644,7 @@ gboolean pidgin_conv_attach_to_conversation(PurpleConversation *conv) list = purple_conversation_get_message_history(conv); if (list) { switch (purple_conversation_get_type(conv)) { - case PURPLE_CONV_TYPE_IM: + case PURPLE_CONV_TYPE_IM: { GList *convs; list = g_list_copy(list); @@ -8409,7 +8410,7 @@ infopane_press_cb(GtkWidget *widget, GdkEventButton *e, PidginConversation *gtkc G_CALLBACK(notebook_leave_cb), gtkconv->win); return FALSE; } - + if (e->button == 3) { /* Right click was pressed. Popup the context menu. */ GtkWidget *menu = gtk_menu_new(), *sub; @@ -8435,7 +8436,7 @@ infopane_press_cb(GtkWidget *widget, GdkEventButton *e, PidginConversation *gtkc } return FALSE; } - + static gboolean notebook_press_cb(GtkWidget *widget, GdkEventButton *e, PidginWindow *win) { @@ -9015,7 +9016,7 @@ plugin_changed_cb(PurplePlugin *p, gpointer data) static gboolean gtk_conv_configure_cb(GtkWidget *w, GdkEventConfigure *event, gpointer data) { int x, y; - + if (GTK_WIDGET_VISIBLE(w)) gtk_window_get_position(GTK_WINDOW(w), &x, &y); else @@ -9025,7 +9026,7 @@ static gboolean gtk_conv_configure_cb(GtkWidget *w, GdkEventConfigure *event, gp * when the window is being maximized */ if (gdk_window_get_state(w->window) & GDK_WINDOW_STATE_MAXIMIZED) return FALSE; - + /* don't save off-screen positioning */ if (x + event->width < 0 || y + event->height < 0 || @@ -9041,7 +9042,7 @@ static gboolean gtk_conv_configure_cb(GtkWidget *w, GdkEventConfigure *event, gp /* continue to handle event normally */ return FALSE; - + } static void @@ -9122,7 +9123,7 @@ pidgin_conv_window_new() /* Intercept keystrokes from the menu items */ g_signal_connect(G_OBJECT(win->window), "key_press_event", G_CALLBACK(window_keypress_cb), win); - + /* Create the notebook. */ win->notebook = gtk_notebook_new(); @@ -9284,7 +9285,7 @@ pidgin_conv_window_add_gtkconv(PidginWindow *win, PidginConversation *gtkconv) win->gtkconvs = g_list_append(win->gtkconvs, gtkconv); gtkconv->win = win; - if (win->gtkconvs && win->gtkconvs->next && win->gtkconvs->next->next == NULL) + if (win->gtkconvs && win->gtkconvs->next && win->gtkconvs->next->next == NULL) pidgin_conv_tab_pack(win, ((PidginConversation*)win->gtkconvs->data)); @@ -9443,11 +9444,11 @@ pidgin_conv_tab_pack(PidginWindow *win, PidginConversation *gtkconv) gtk_notebook_set_tab_label(GTK_NOTEBOOK(win->notebook), gtkconv->tab_cont, ebox); } - gtk_notebook_set_tab_label_packing(GTK_NOTEBOOK(win->notebook), gtkconv->tab_cont, - !tabs_side && !angle, + gtk_notebook_set_tab_label_packing(GTK_NOTEBOOK(win->notebook), gtkconv->tab_cont, + !tabs_side && !angle, TRUE, GTK_PACK_START); - if (pidgin_conv_window_get_gtkconv_count(win) == 1) + if (pidgin_conv_window_get_gtkconv_count(win) == 1) gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/tabs") && (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons") || @@ -9658,7 +9659,7 @@ conv_placement_last_created_win(PidginConversation *conv) if (win == NULL) { win = pidgin_conv_window_new(); - g_signal_connect(G_OBJECT(win->window), "configure_event", + g_signal_connect(G_OBJECT(win->window), "configure_event", G_CALLBACK(gtk_conv_configure_cb), NULL); pidgin_conv_window_add_gtkconv(win, conv); @@ -9673,7 +9674,7 @@ static gboolean conv_placement_last_created_win_type_configured_cb(GtkWidget *w, GdkEventConfigure *event, PidginConversation *conv) { - int x, y; + int x, y; PurpleConversationType type = purple_conversation_get_type(conv->active_conv); GList *all; @@ -9686,7 +9687,7 @@ conv_placement_last_created_win_type_configured_cb(GtkWidget *w, * when the window is being maximized */ if (gdk_window_get_state(w->window) & GDK_WINDOW_STATE_MAXIMIZED) return FALSE; - + /* don't save off-screen positioning */ if (x + event->width < 0 || y + event->height < 0 || @@ -9740,11 +9741,11 @@ conv_placement_last_created_win_type(PidginConversation *conv) purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/width"), purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/height")); } - + pidgin_conv_window_add_gtkconv(win, conv); pidgin_conv_window_show(win); - g_signal_connect(G_OBJECT(win->window), "configure_event", + g_signal_connect(G_OBJECT(win->window), "configure_event", G_CALLBACK(conv_placement_last_created_win_type_configured_cb), conv); } else pidgin_conv_window_add_gtkconv(win, conv); @@ -9758,7 +9759,7 @@ conv_placement_new_window(PidginConversation *conv) win = pidgin_conv_window_new(); - g_signal_connect(G_OBJECT(win->window), "configure_event", + g_signal_connect(G_OBJECT(win->window), "configure_event", G_CALLBACK(gtk_conv_configure_cb), NULL); pidgin_conv_window_add_gtkconv(win, conv); diff --git a/pidgin/gtkdebug.c b/pidgin/gtkdebug.c index b6edea6233..084c06169e 100644 --- a/pidgin/gtkdebug.c +++ b/pidgin/gtkdebug.c @@ -769,7 +769,7 @@ debug_window_new(void) win->filter = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_CHILD_TOGGLEBUTTON, - NULL, _("Filter"), _("Filter"), + NULL, _("Filter"), _("Filter"), NULL, NULL, G_CALLBACK(regex_filter_toggled_cb), win); @@ -821,7 +821,7 @@ debug_window_new(void) GTK_TOOLBAR_CHILD_WIDGET, gtk_label_new(_("Level ")), NULL, _("Select the debug filter level."), NULL, NULL, NULL, NULL); - + win->filterlevel = gtk_combo_box_new_text(); gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_CHILD_WIDGET, win->filterlevel, diff --git a/pidgin/gtkdialogs.c b/pidgin/gtkdialogs.c index df431e22ec..ec8cccb091 100644 --- a/pidgin/gtkdialogs.c +++ b/pidgin/gtkdialogs.c @@ -100,7 +100,7 @@ static const struct developer developers[] = { /* Order: Alphabetical by Last Name */ static const struct developer patch_writers[] = { - {"Paul Aurich", NULL, NULL }, + {"Paul 'darkrain42' Aurich", NULL, NULL }, {"Marcus 'malu' Lundblad", NULL, NULL}, {"Dennis 'EvilDennisR' Ristuccia", N_("Senior Contributor/QA"), NULL}, {"Peter 'Fmoo' Ruibal", NULL, NULL}, @@ -188,6 +188,7 @@ static const struct translator translators[] = { {N_("Italian"), "it", "Claudio Satriano", "satriano@na.infn.it"}, {N_("Japanese"), "ja", "Takashi Aihana", "aihana@gnome.gr.jp"}, {N_("Georgian"), "ka", N_("Ubuntu Georgian Translators"), "alexander.didebulidze@stusta.mhn.de"}, + {"Khmer", "km", "Khoem Sokhem", "khoemsokhem@khmeros.info"}, {N_("Kannada"), "kn", N_("Kannada Translation team"), "translation@sampada.info"}, {N_("Korean"), "ko", "Sushizang", "sushizang@empal.com"}, {N_("Kurdish"), "ku", "Erdal Ronahi", "erdal.ronahi@gmail.com"}, @@ -349,7 +350,7 @@ static void destroy_about(void) } #if 0 -/* This function puts the version number onto the pixmap we use in the 'about' +/* This function puts the version number onto the pixmap we use in the 'about' * screen in Pidgin. */ static void pidgin_logo_versionize(GdkPixbuf **original, GtkWidget *widget) { @@ -492,7 +493,7 @@ void pidgin_dialogs_about() _("Retired Crazy Patch Writers")); add_developers(str, retired_patch_writers); g_string_append(str, "<BR/>"); - + /* Current Translators */ g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>", _("Current Translators")); @@ -1066,8 +1067,8 @@ pidgin_dialogs_remove_contact(PurpleContact *contact) g_return_if_fail(contact != NULL); g_return_if_fail(buddy != NULL); - if (((PurpleBlistNode*)contact)->child == (PurpleBlistNode*)buddy && - !((PurpleBlistNode*)buddy)->next) { + if (PURPLE_BLIST_NODE(contact)->child == PURPLE_BLIST_NODE(buddy) && + PURPLE_BLIST_NODE(buddy)->next == NULL) { pidgin_dialogs_remove_buddy(buddy); } else { gchar *text; @@ -1121,7 +1122,7 @@ pidgin_dialogs_merge_groups(PurpleGroup *source, const char *new_name) ggp = g_new(struct _PidginGroupMergeObject, 1); ggp->parent = source; ggp->new_name = g_strdup(new_name); - + purple_request_action(source, NULL, _("Merge Groups"), text, 0, NULL, NULL, NULL, ggp, 2, diff --git a/pidgin/gtkdnd-hints.c b/pidgin/gtkdnd-hints.c index 141724ee93..faed31c511 100644 --- a/pidgin/gtkdnd-hints.c +++ b/pidgin/gtkdnd-hints.c @@ -46,7 +46,7 @@ typedef struct /** * Info about each hint widget. See DndHintWindowId enum. */ -static HintWindowInfo hint_windows[] = { +static HintWindowInfo hint_windows[] = { { NULL, "arrow-up.xpm", -13/2, 0 }, { NULL, "arrow-down.xpm", -13/2, -16 }, { NULL, "arrow-left.xpm", 0, -13/2 }, @@ -139,7 +139,7 @@ dnd_hints_hide_all(void) dnd_hints_hide(i); } -void +void dnd_hints_hide(DndHintWindowId i) { GtkWidget *w = hint_windows[i].widget; @@ -148,7 +148,7 @@ dnd_hints_hide(DndHintWindowId i) gtk_widget_hide(w); } -void +void dnd_hints_show(DndHintWindowId id, gint x, gint y) { GtkWidget *w; @@ -165,7 +165,7 @@ dnd_hints_show(DndHintWindowId id, gint x, gint y) } } -void +void dnd_hints_show_relative(DndHintWindowId id, GtkWidget *widget, DndHintPosition horiz, DndHintPosition vert) { diff --git a/pidgin/gtkdocklet-x11.c b/pidgin/gtkdocklet-x11.c index 06b832b2aa..8a07edf8ca 100644 --- a/pidgin/gtkdocklet-x11.c +++ b/pidgin/gtkdocklet-x11.c @@ -5,7 +5,7 @@ * Copyright (C) 2003 Herman Bloggs <hermanator12002@yahoo.com> * Inspired by a similar plugin by: * John (J5) Palmieri <johnp@martianrock.com> - * + * * 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 @@ -15,7 +15,7 @@ * 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 @@ -59,7 +59,7 @@ static void docklet_x11_embedded_cb(GtkWidget *widget, void *data) { purple_debug(PURPLE_DEBUG_INFO, "docklet", "embedded\n"); - + g_source_remove(embed_timeout); embed_timeout = 0; pidgin_docklet_embedded(); @@ -211,9 +211,9 @@ docklet_x11_destroy(void) if (embed_timeout) g_source_remove(embed_timeout); - + pidgin_docklet_remove(); - + g_signal_handlers_disconnect_by_func(G_OBJECT(docklet), G_CALLBACK(docklet_x11_destroyed_cb), NULL); gtk_widget_destroy(GTK_WIDGET(docklet)); @@ -239,7 +239,7 @@ docklet_x11_embed_timeout_cb(gpointer data) */ purple_debug_info("docklet", "failed to embed within timeout\n"); pidgin_docklet_remove(); - + return FALSE; } diff --git a/pidgin/gtkdocklet.h b/pidgin/gtkdocklet.h index e4e44bdc9b..8904dfe088 100644 --- a/pidgin/gtkdocklet.h +++ b/pidgin/gtkdocklet.h @@ -1,11 +1,11 @@ -/* +/* * System tray icon (aka docklet) plugin for Purple - * + * * Copyright (C) 2002-3 Robert McQueen <robot101@debian.org> * Copyright (C) 2003 Herman Bloggs <hermanator12002@yahoo.com> * Inspired by a similar plugin by: * John (J5) Palmieri <johnp@martianrock.com> - * + * * 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 @@ -15,7 +15,7 @@ * 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 diff --git a/pidgin/gtkexpander.c b/pidgin/gtkexpander.c index 71661bdf45..8df893d8b6 100644 --- a/pidgin/gtkexpander.c +++ b/pidgin/gtkexpander.c @@ -63,7 +63,7 @@ struct _GtkExpanderPrivate guint expanded : 1; guint use_underline : 1; - guint use_markup : 1; + guint use_markup : 1; guint button_down : 1; guint prelight : 1; }; @@ -129,7 +129,7 @@ GType gtk_expander_get_type (void) { static GType expander_type = 0; - + if (!expander_type) { static const GTypeInfo expander_info = @@ -144,12 +144,12 @@ gtk_expander_get_type (void) 0, /* n_preallocs */ (GInstanceInitFunc) gtk_expander_init, }; - + expander_type = g_type_register_static (GTK_TYPE_BIN, "GtkExpander", &expander_info, 0); } - + return expander_type; } @@ -314,7 +314,7 @@ gtk_expander_set_property (GObject *object, GParamSpec *pspec) { GtkExpander *expander = GTK_EXPANDER (object); - + switch (prop_id) { case PROP_EXPANDED: @@ -382,7 +382,7 @@ static void gtk_expander_destroy (GtkObject *object) { GtkExpanderPrivate *priv = GTK_EXPANDER (object)->priv; - + if (priv->animation_timeout) { g_source_remove (priv->animation_timeout); @@ -407,7 +407,7 @@ gtk_expander_realize (GtkWidget *widget) border_width = GTK_CONTAINER (widget)->border_width; get_expander_bounds (GTK_EXPANDER (widget), &expander_rect); - + attributes.window_type = GDK_WINDOW_CHILD; attributes.x = widget->allocation.x + border_width; attributes.y = expander_rect.y; @@ -831,7 +831,7 @@ gtk_expander_paint_focus (GtkExpander *expander, NULL); ltr = gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL; - + x = widget->allocation.x + border_width; y = widget->allocation.y + border_width; @@ -853,7 +853,7 @@ gtk_expander_paint_focus (GtkExpander *expander, width += expander_size + 2 * expander_spacing; height = MAX (height, expander_size + 2 * expander_spacing); } - + width += 2 * focus_pad + 2 * focus_width; height += 2 * focus_pad + 2 * focus_width; @@ -1115,16 +1115,16 @@ gtk_expander_focus (GtkWidget *widget, GtkDirectionType direction) { GtkExpander *expander = GTK_EXPANDER (widget); - + if (!focus_current_site (expander, direction)) { GtkWidget *old_focus_child; gboolean widget_is_focus; FocusSite site = FOCUS_NONE; - + widget_is_focus = gtk_widget_is_focus (widget); old_focus_child = GTK_CONTAINER (widget)->focus_child; - + if (old_focus_child && old_focus_child == expander->priv->label_widget) site = FOCUS_LABEL; else if (old_focus_child) @@ -1192,9 +1192,9 @@ gtk_expander_activate (GtkExpander *expander) /** * gtk_expander_new: * @label: the text of the label - * + * * Creates a new expander using @label as the text of the label. - * + * * Return value: a new #GtkExpander widget. * * Since: 2.4 @@ -1209,14 +1209,14 @@ gtk_expander_new (const gchar *label) * gtk_expander_new_with_mnemonic: * @label: the text of the label with an underscore in front of the * mnemonic character - * + * * Creates a new expander using @label as the text of the label. * If characters in @label are preceded by an underscore, they are underlined. - * If you need a literal underscore character in a label, use '__' (two - * underscores). The first underlined character represents a keyboard + * If you need a literal underscore character in a label, use '__' (two + * underscores). The first underlined character represents a keyboard * accelerator called a mnemonic. * Pressing Alt and that key activates the button. - * + * * Return value: a new #GtkExpander widget. * * Since: 2.4 @@ -1328,7 +1328,7 @@ gtk_expander_set_expanded (GtkExpander *expander, { gtk_expander_start_animation (expander); } - else + else { priv->expander_style = expanded ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED; @@ -1643,7 +1643,7 @@ gtk_expander_set_label_widget (GtkExpander *expander, * gtk_expander_set_label_widget(). * * Return value: the label widget, or %NULL if there is none. - * + * * Since: 2.4 **/ GtkWidget * diff --git a/pidgin/gtkicon-theme-loader.c b/pidgin/gtkicon-theme-loader.c new file mode 100644 index 0000000000..5ddbd4f5e9 --- /dev/null +++ b/pidgin/gtkicon-theme-loader.c @@ -0,0 +1,111 @@ +/* + * PidginIconThemeLoader for Pidgin + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include "gtkicon-theme-loader.h" +#include "gtkstatus-icon-theme.h" + +#include "xmlnode.h" + +/***************************************************************************** + * Icon Theme Builder + *****************************************************************************/ + +static PurpleTheme * +pidgin_icon_loader_build(const gchar *dir) +{ + xmlnode *root_node = NULL, *sub_node; + gchar *filename_full, *data; + PidginIconTheme *theme = NULL; + + /* Find the theme file */ + g_return_val_if_fail(dir != NULL, NULL); + filename_full = g_build_filename(dir, "theme.xml", NULL); + + if (g_file_test(filename_full, G_FILE_TEST_IS_REGULAR)) + root_node = xmlnode_from_file(dir, "theme.xml", "sound themes", "sound-theme-loader"); + + g_free(filename_full); + g_return_val_if_fail(root_node != NULL, NULL); + + /* Parse the tree */ + sub_node = xmlnode_get_child(root_node, "description"); + data = xmlnode_get_data(sub_node); + + if (xmlnode_get_attrib(root_node, "name") != NULL) { + theme = g_object_new(PIDGIN_TYPE_STATUS_ICON_THEME, + "type", "status-icon", + "name", xmlnode_get_attrib(root_node, "name"), + "author", xmlnode_get_attrib(root_node, "author"), + "image", xmlnode_get_attrib(root_node, "image"), + "directory", dir, + "description", data, NULL); + + sub_node = xmlnode_get_child(root_node, "icon"); + + while (sub_node) { + pidgin_icon_theme_set_icon(theme, + xmlnode_get_attrib(sub_node, "id"), + xmlnode_get_attrib(sub_node, "file")); + sub_node = xmlnode_get_next_twin(sub_node); + } + } + + xmlnode_free(root_node); + g_free(data); + return PURPLE_THEME(theme); +} + +/****************************************************************************** + * GObject Stuff + *****************************************************************************/ + +static void +pidgin_icon_theme_loader_class_init (PidginIconThemeLoaderClass *klass) +{ + PurpleThemeLoaderClass *loader_klass = PURPLE_THEME_LOADER_CLASS(klass); + + loader_klass->purple_theme_loader_build = pidgin_icon_loader_build; +} + + +GType +pidgin_icon_theme_loader_get_type (void) +{ + static GType type = 0; + if (type == 0) { + static const GTypeInfo info = { + sizeof(PidginIconThemeLoaderClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc)pidgin_icon_theme_loader_class_init, /* class_init */ + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (PidginIconThemeLoader), + 0, /* n_preallocs */ + NULL, /* instance_init */ + NULL, /* value table */ + }; + type = g_type_register_static (PURPLE_TYPE_THEME_LOADER, + "PidginIconThemeLoader", &info, 0); + } + return type; +} diff --git a/pidgin/gtkicon-theme-loader.h b/pidgin/gtkicon-theme-loader.h new file mode 100644 index 0000000000..57ab2b53a3 --- /dev/null +++ b/pidgin/gtkicon-theme-loader.h @@ -0,0 +1,71 @@ +/** + * @file gtkicon-loader.h Pidgin Icon Theme Loader Class API + */ + +/* 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 PIDGIN_ICON_THEME_LOADER_H +#define PIDGIN_ICON_THEME_LOADER_H + +#include <glib.h> +#include <glib-object.h> +#include "theme-loader.h" + +/** + * A pidgin icon theme loader. Extends PurpleThemeLoader (theme-loader.h) + * This is a class designed to build icon themes + * + * PidginIconThemeLoader is a GObject. + */ +typedef struct _PidginIconThemeLoader PidginIconThemeLoader; +typedef struct _PidginIconThemeLoaderClass PidginIconThemeLoaderClass; + +#define PIDGIN_TYPE_ICON_THEME_LOADER (pidgin_icon_theme_loader_get_type ()) +#define PIDGIN_ICON_THEME_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIDGIN_TYPE_ICON_THEME_LOADER, PidginIconThemeLoader)) +#define PIDGIN_ICON_THEME_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PIDGIN_TYPE_ICON_THEME_LOADER, PidginIconThemeLoaderClass)) +#define PIDGIN_IS_ICON_THEME_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PIDGIN_TYPE_ICON_THEME_LOADER)) +#define PIDGIN_IS_ICON_THEME_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PIDGIN_TYPE_ICON_THEME_LOADER)) +#define PIDGIN_ICON_THEME_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PIDGIN_TYPE_ICON_THEME_LOADER, PidginIconThemeLoaderClass)) + +struct _PidginIconThemeLoader +{ + PurpleThemeLoader parent; +}; + +struct _PidginIconThemeLoaderClass +{ + PurpleThemeLoaderClass parent_class; +}; + +/**************************************************************************/ +/** @name Pidgin Icon Theme-Loader API */ +/**************************************************************************/ +G_BEGIN_DECLS + +/** + * GObject foo. + * @internal. + */ +GType pidgin_icon_theme_loader_get_type(void); + +G_END_DECLS +#endif /* PIDGIN_ICON_THEME_LOADER_H */ diff --git a/pidgin/gtkicon-theme.c b/pidgin/gtkicon-theme.c new file mode 100644 index 0000000000..feca1dd7ef --- /dev/null +++ b/pidgin/gtkicon-theme.c @@ -0,0 +1,142 @@ +/* + * Icon Themes for Pidgin + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include "gtkicon-theme.h" +#include "pidginstock.h" + +#include <gtk/gtk.h> + +#define PIDGIN_ICON_THEME_GET_PRIVATE(Gobject) \ + ((PidginIconThemePrivate *) ((PIDGIN_ICON_THEME(Gobject))->priv)) + +/****************************************************************************** + * Structs + *****************************************************************************/ + +typedef struct { + /* used to store filenames of diffrent icons */ + GHashTable *icon_files; +} PidginIconThemePrivate; + +/****************************************************************************** + * Globals + *****************************************************************************/ + +static GObjectClass *parent_class = NULL; + +/****************************************************************************** + * GObject Stuff + *****************************************************************************/ + +static void +pidgin_icon_theme_init(GTypeInstance *instance, + gpointer klass) +{ + PidginIconThemePrivate *priv; + + (PIDGIN_ICON_THEME(instance))->priv = g_new0(PidginIconThemePrivate, 1); + + priv = PIDGIN_ICON_THEME_GET_PRIVATE(instance); + + priv->icon_files = g_hash_table_new_full(g_str_hash, + g_str_equal, g_free, g_free); +} + +static void +pidgin_icon_theme_finalize(GObject *obj) +{ + PidginIconThemePrivate *priv; + + priv = PIDGIN_ICON_THEME_GET_PRIVATE(obj); + + g_hash_table_destroy(priv->icon_files); + g_free(priv); + + parent_class->finalize(obj); +} + +static void +pidgin_icon_theme_class_init(PidginIconThemeClass *klass) +{ + GObjectClass *obj_class = G_OBJECT_CLASS(klass); + + parent_class = g_type_class_peek_parent(klass); + + obj_class->finalize = pidgin_icon_theme_finalize; +} + +GType +pidgin_icon_theme_get_type(void) +{ + static GType type = 0; + if (type == 0) { + static const GTypeInfo info = { + sizeof(PidginIconThemeClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc)pidgin_icon_theme_class_init, /* class_init */ + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof(PidginIconTheme), + 0, /* n_preallocs */ + pidgin_icon_theme_init, /* instance_init */ + NULL, /* value table */ + }; + type = g_type_register_static(PURPLE_TYPE_THEME, + "PidginIconTheme", &info, G_TYPE_FLAG_ABSTRACT); + } + return type; +} + +/***************************************************************************** + * Public API functions + *****************************************************************************/ + +const gchar * +pidgin_icon_theme_get_icon(PidginIconTheme *theme, + const gchar *id) +{ + PidginIconThemePrivate *priv; + + g_return_val_if_fail(PIDGIN_IS_ICON_THEME(theme), NULL); + + priv = PIDGIN_ICON_THEME_GET_PRIVATE(theme); + + return g_hash_table_lookup(priv->icon_files, id); +} + +void +pidgin_icon_theme_set_icon(PidginIconTheme *theme, + const gchar *id, + const gchar *filename) +{ + PidginIconThemePrivate *priv; + g_return_if_fail(PIDGIN_IS_ICON_THEME(theme)); + + priv = PIDGIN_ICON_THEME_GET_PRIVATE(theme); + + if (filename != NULL) + g_hash_table_replace(priv->icon_files, + g_strdup(id), g_strdup(filename)); + else + g_hash_table_remove(priv->icon_files, id); +} diff --git a/pidgin/gtkicon-theme.h b/pidgin/gtkicon-theme.h new file mode 100644 index 0000000000..0ba669d349 --- /dev/null +++ b/pidgin/gtkicon-theme.h @@ -0,0 +1,93 @@ +/** + * @file icon-theme.h Pidgin Icon Theme Class API + */ + +/* pidgin + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#ifndef PIDGIN_ICON_THEME_H +#define PIDGIN_ICON_THEME_H + +#include <glib.h> +#include <glib-object.h> +#include "theme.h" + +/** + * extends PurpleTheme (theme.h) + * A pidgin icon theme. + * This object represents a Pidgin icon theme. + * + * PidginIconTheme is a PurpleTheme Object. + */ +typedef struct _PidginIconTheme PidginIconTheme; +typedef struct _PidginIconThemeClass PidginIconThemeClass; + +#define PIDGIN_TYPE_ICON_THEME (pidgin_icon_theme_get_type ()) +#define PIDGIN_ICON_THEME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIDGIN_TYPE_ICON_THEME, PidginIconTheme)) +#define PIDGIN_ICON_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PIDGIN_TYPE_ICON_THEME, PidginIconThemeClass)) +#define PIDGIN_IS_ICON_THEME(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PIDGIN_TYPE_ICON_THEME)) +#define PIDGIN_IS_ICON_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PIDGIN_TYPE_ICON_THEME)) +#define PIDGIN_ICON_THEME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PIDGIN_TYPE_ICON_THEME, PidginIconThemeClass)) + +struct _PidginIconTheme +{ + PurpleTheme parent; + gpointer priv; +}; + +struct _PidginIconThemeClass +{ + PurpleThemeClass parent_class; +}; + +/**************************************************************************/ +/** @name Pidgin Icon Theme API */ +/**************************************************************************/ +G_BEGIN_DECLS + +/** + * GObject foo. + * @internal. + */ +GType pidgin_icon_theme_get_type(void); + +/** + * Returns a copy of the filename for the icon event or NULL if it is not set + * + * @param event the pidgin icon event to look up + * + * @returns the filename of the icon event + */ +const gchar *pidgin_icon_theme_get_icon(PidginIconTheme *theme, + const gchar *event); + +/** + * Sets the filename for a given icon id, setting the icon to NULL will remove the icon from the theme + * + * @param icon_id a string representing what the icon is to be used for + * @param filename the name of the file to be used for the given id + */ +void pidgin_icon_theme_set_icon(PidginIconTheme *theme, + const gchar *icon_id, + const gchar *filename); + +G_END_DECLS +#endif /* PIDGIN_ICON_THEME_H */ diff --git a/pidgin/gtkimhtml.c b/pidgin/gtkimhtml.c index 5008c65eb4..f90f0b8996 100644 --- a/pidgin/gtkimhtml.c +++ b/pidgin/gtkimhtml.c @@ -88,6 +88,22 @@ struct im_image_data { GtkTextMark *mark; }; +struct _GtkIMHtmlLink +{ + GtkIMHtml *imhtml; + gchar *url; + GtkTextTag *tag; +}; + +typedef struct _GtkIMHtmlProtocol +{ + char *name; + int length; + + gboolean (*activate)(GtkIMHtml *imhtml, GtkIMHtmlLink *link); + gboolean (*context_menu)(GtkIMHtml *imhtml, GtkIMHtmlLink *link, GtkWidget *menu); +} GtkIMHtmlProtocol; + static gboolean gtk_text_view_drag_motion (GtkWidget *widget, GdkDragContext *context, @@ -115,6 +131,9 @@ static void imhtml_toggle_underline(GtkIMHtml *imhtml); static void imhtml_font_grow(GtkIMHtml *imhtml); static void imhtml_font_shrink(GtkIMHtml *imhtml); static void imhtml_clear_formatting(GtkIMHtml *imhtml); +static int gtk_imhtml_is_protocol(const char *text); +static void gtk_imhtml_activate_tag(GtkIMHtml *imhtml, GtkTextTag *tag); +static void gtk_imhtml_link_destroy(GtkIMHtmlLink *link); /* POINT_SIZE converts from AIM font sizes to a point size scale factor. */ #define MAX_FONT_SIZE 7 @@ -349,7 +368,7 @@ gtk_smiley_tree_destroy (GtkSmileyTree *tree) g_string_free (t->values, TRUE); g_free (t->children); } - + g_free (t); } } @@ -819,7 +838,7 @@ gtk_imhtml_expose_event (GtkWidget *widget, &tag_area.x, &tag_area.y); - + rect.height = tag_area.y + tag_area.height - rect.y + gtk_text_view_get_pixels_above_lines(GTK_TEXT_VIEW(widget)) + gtk_text_view_get_pixels_below_lines(GTK_TEXT_VIEW(widget)); @@ -1106,8 +1125,8 @@ static void imhtml_paste_insert(GtkIMHtml *imhtml, const char *text, gboolean pl GtkTextIter iter; GtkIMHtmlOptions flags = plaintext ? GTK_IMHTML_NO_SMILEY : (GTK_IMHTML_NO_NEWLINE | GTK_IMHTML_NO_COMMENTS); - if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL)) - gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE); + /* Delete any currently selected text */ + gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE); gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, gtk_text_buffer_get_insert(imhtml->text_buffer)); if (!imhtml->wbfo && !plaintext) @@ -1391,6 +1410,38 @@ gtk_imhtml_finalize (GObject *object) } +static GtkIMHtmlProtocol * +imhtml_find_protocol(const char *url, gboolean reverse) +{ + GtkIMHtmlClass *klass; + GList *iter; + GtkIMHtmlProtocol *proto = NULL; + int length = reverse ? strlen(url) : -1; + + klass = g_type_class_ref(GTK_TYPE_IMHTML); + for (iter = klass->protocols; iter; iter = iter->next) { + proto = iter->data; + if (g_ascii_strncasecmp(url, proto->name, reverse ? MIN(length, proto->length) : proto->length) == 0) { + return proto; + } + } + return NULL; +} + +static void +imhtml_url_clicked(GtkIMHtml *imhtml, const char *url) +{ + GtkIMHtmlProtocol *proto = imhtml_find_protocol(url, FALSE); + GtkIMHtmlLink *link; + if (!proto) + return; + link = g_new0(GtkIMHtmlLink, 1); + link->imhtml = g_object_ref(imhtml); + link->url = g_strdup(url); + proto->activate(imhtml, link); /* XXX: Do something with the return value? */ + gtk_imhtml_link_destroy(link); +} + /* Boring GTK+ stuff */ static void gtk_imhtml_class_init (GtkIMHtmlClass *klass) { @@ -1475,6 +1526,7 @@ static void gtk_imhtml_class_init (GtkIMHtmlClass *klass) klass->toggle_format = imhtml_toggle_format; klass->message_send = imhtml_message_send; klass->clear_format = imhtml_clear_formatting; + klass->url_clicked = imhtml_url_clicked; klass->undo = gtk_imhtml_undo; klass->redo = gtk_imhtml_redo; @@ -1688,37 +1740,14 @@ GType gtk_imhtml_get_type() return imhtml_type; } -struct url_data { - GObject *object; - gchar *url; - GtkTextTag *tag; -}; - -static void url_data_destroy(gpointer mydata) -{ - struct url_data *data = mydata; - g_object_unref(data->object); - g_object_unref(data->tag); - g_free(data->url); - g_free(data); -} - -static void url_open(GtkWidget *w, struct url_data *data) +static void gtk_imhtml_link_destroy(GtkIMHtmlLink *link) { - if(!data) return; - g_signal_emit(data->object, signals[URL_CLICKED], 0, data->url); - g_object_set_data(G_OBJECT(data->tag), "visited", GINT_TO_POINTER(TRUE)); - gtk_imhtml_set_link_color(GTK_IMHTML(data->object), data->tag); -} - -static void url_copy(GtkWidget *w, gchar *url) { - GtkClipboard *clipboard; - - clipboard = gtk_widget_get_clipboard(w, GDK_SELECTION_PRIMARY); - gtk_clipboard_set_text(clipboard, url, -1); - - clipboard = gtk_widget_get_clipboard(w, GDK_SELECTION_CLIPBOARD); - gtk_clipboard_set_text(clipboard, url, -1); + if (link->imhtml) + g_object_unref(link->imhtml); + if (link->tag) + g_object_unref(link->tag); + g_free(link->url); + g_free(link); } /* The callback for an event on a link tag. */ @@ -1734,21 +1763,16 @@ static gboolean tag_event(GtkTextTag *tag, GObject *imhtml, GdkEvent *event, Gtk if (gtk_text_buffer_get_selection_bounds( gtk_text_iter_get_buffer(arg2), &start, &end)) return FALSE; - - /* A link was clicked--we emit the "url_clicked" signal - * with the URL as the argument */ - g_object_ref(G_OBJECT(tag)); - g_signal_emit(imhtml, signals[URL_CLICKED], 0, g_object_get_data(G_OBJECT(tag), "link_url")); - g_object_unref(G_OBJECT(tag)); - g_object_set_data(G_OBJECT(tag), "visited", GINT_TO_POINTER(TRUE)); - gtk_imhtml_set_link_color(GTK_IMHTML(imhtml), tag); + gtk_imhtml_activate_tag(GTK_IMHTML(imhtml), tag); return FALSE; } else if(event_button->button == 3) { - GtkWidget *img, *item, *menu; - struct url_data *tempdata = g_new(struct url_data, 1); - tempdata->object = g_object_ref(imhtml); - tempdata->url = g_strdup(g_object_get_data(G_OBJECT(tag), "link_url")); - tempdata->tag = g_object_ref(tag); + GList *children; + GtkWidget *menu; + GtkIMHtmlProtocol *proto; + GtkIMHtmlLink *link = g_new(GtkIMHtmlLink, 1); + link->imhtml = g_object_ref(imhtml); + link->url = g_strdup(g_object_get_data(G_OBJECT(tag), "link_url")); + link->tag = g_object_ref(tag); /* Don't want the tooltip around if user right-clicked on link */ if (GTK_IMHTML(imhtml)->tip_window) { @@ -1764,43 +1788,23 @@ static gboolean tag_event(GtkTextTag *tag, GObject *imhtml, GdkEvent *event, Gtk else gdk_window_set_cursor(event_button->window, GTK_IMHTML(imhtml)->arrow_cursor); menu = gtk_menu_new(); - g_object_set_data_full(G_OBJECT(menu), "x-imhtml-url-data", tempdata, url_data_destroy); + g_object_set_data_full(G_OBJECT(menu), "x-imhtml-url-data", link, + (GDestroyNotify)gtk_imhtml_link_destroy); - /* buttons and such */ + proto = imhtml_find_protocol(link->url, FALSE); - if (!strncmp(tempdata->url, "mailto:", 7)) - { - /* Copy Email Address */ - img = gtk_image_new_from_stock(GTK_STOCK_COPY, - GTK_ICON_SIZE_MENU); - item = gtk_image_menu_item_new_with_mnemonic( - _("_Copy Email Address")); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img); - g_signal_connect(G_OBJECT(item), "activate", - G_CALLBACK(url_copy), tempdata->url + 7); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + if (proto && proto->context_menu) { + proto->context_menu(GTK_IMHTML(link->imhtml), link, menu); } - else - { - /* Open Link in Browser */ - img = gtk_image_new_from_stock(GTK_STOCK_JUMP_TO, - GTK_ICON_SIZE_MENU); - item = gtk_image_menu_item_new_with_mnemonic( - _("_Open Link in Browser")); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img); - g_signal_connect(G_OBJECT(item), "activate", - G_CALLBACK(url_open), tempdata); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); - /* Copy Link Location */ - img = gtk_image_new_from_stock(GTK_STOCK_COPY, - GTK_ICON_SIZE_MENU); - item = gtk_image_menu_item_new_with_mnemonic( - _("_Copy Link Location")); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img); - g_signal_connect(G_OBJECT(item), "activate", - G_CALLBACK(url_copy), tempdata->url); + children = gtk_container_get_children(GTK_CONTAINER(menu)); + if (!children) { + GtkWidget *item = gtk_menu_item_new_with_label(_("No actions available")); + gtk_widget_show(item); + gtk_widget_set_sensitive(item, FALSE); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + } else { + g_list_free(children); } @@ -1884,10 +1888,7 @@ gtk_imhtml_link_drag_rcv_cb(GtkWidget *widget, GdkDragContext *dc, guint x, guin links = g_strsplit((char *)sd->data, "\n", 0); while((link = links[i]) != NULL){ - if(purple_str_has_prefix(link, "http://") || - purple_str_has_prefix(link, "https://") || - purple_str_has_prefix(link, "ftp://")) - { + if (gtk_imhtml_is_protocol(link)) { gchar *label; if(links[i + 1]) @@ -1896,7 +1897,7 @@ gtk_imhtml_link_drag_rcv_cb(GtkWidget *widget, GdkDragContext *dc, guint x, guin label = links[i]; gtk_imhtml_insert_link(imhtml, mark, link, label); - } else if (link=='\0') { + } else if (*link == '\0') { /* Ignore blank lines */ } else { /* Special reasons, aka images being put in via other tag, etc. */ @@ -2067,7 +2068,7 @@ gtk_imhtml_disassociate_smiley(GtkIMHtmlSmiley *smiley) { if (smiley->imhtml) { gtk_smiley_tree_remove(smiley->imhtml->default_smilies, smiley); - g_hash_table_foreach(smiley->imhtml->smiley_data, + g_hash_table_foreach(smiley->imhtml->smiley_data, gtk_imhtml_disassociate_smiley_foreach, smiley); g_signal_handlers_disconnect_matched(smiley->imhtml, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, smiley); @@ -2096,13 +2097,13 @@ gtk_imhtml_associate_smiley (GtkIMHtml *imhtml, g_signal_handlers_disconnect_matched(smiley->imhtml, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, smiley); } - + smiley->imhtml = imhtml; gtk_smiley_tree_insert (tree, smiley); - + /* connect destroy signal for the imhtml */ - g_signal_connect(imhtml, "destroy", G_CALLBACK(gtk_imhtml_disconnect_smiley), + g_signal_connect(imhtml, "destroy", G_CALLBACK(gtk_imhtml_disconnect_smiley), smiley); } @@ -2198,14 +2199,17 @@ gtk_smiley_tree_image (GtkIMHtml *imhtml, return gtk_smiley_get_image(smiley); } -#define VALID_TAG(x) if (!g_ascii_strncasecmp (string, x ">", strlen (x ">"))) { \ - *tag = g_strndup (string, strlen (x)); \ - *len = strlen (x) + 1; \ +#define VALID_TAG(x) do { \ + if (!g_ascii_strncasecmp (string, x ">", strlen (x ">"))) { \ + if (tag) *tag = g_strndup (string, strlen (x)); \ + if (len) *len = strlen (x) + 1; \ return TRUE; \ } \ - (*type)++ + if (type) (*type)++; \ + } while (0) -#define VALID_OPT_TAG(x) if (!g_ascii_strncasecmp (string, x " ", strlen (x " "))) { \ +#define VALID_OPT_TAG(x) do { \ + if (!g_ascii_strncasecmp (string, x " ", strlen (x " "))) { \ const gchar *c = string + strlen (x " "); \ gchar e = '"'; \ gboolean quote = FALSE; \ @@ -2222,12 +2226,13 @@ gtk_smiley_tree_image (GtkIMHtml *imhtml, c++; \ } \ if (*c) { \ - *tag = g_strndup (string, c - string); \ - *len = c - string + 1; \ + if (tag) *tag = g_strndup (string, c - string); \ + if (len) *len = c - string + 1; \ return TRUE; \ } \ } \ - (*type)++ + if (type) (*type)++; \ + } while (0) static gboolean @@ -2237,8 +2242,8 @@ gtk_imhtml_is_tag (const gchar *string, gint *type) { char *close; - *type = 1; - + if (type) + *type = 1; if (!(close = strchr (string, '>'))) return FALSE; @@ -2311,15 +2316,20 @@ gtk_imhtml_is_tag (const gchar *string, if (!g_ascii_strncasecmp(string, "!--", strlen ("!--"))) { gchar *e = strstr (string + strlen("!--"), "-->"); if (e) { - *len = e - string + strlen ("-->"); - *tag = g_strndup (string + strlen ("!--"), *len - strlen ("!---->")); + if (len) + *len = e - string + strlen ("-->"); + if (tag) + *tag = g_strndup (string + strlen ("!--"), *len - strlen ("!---->")); return TRUE; } } - *type = -1; - *len = close - string + 1; - *tag = g_strndup(string, *len - 1); + if (type) + *type = -1; + if (len) + *len = close - string + 1; + if (tag) + *tag = g_strndup(string, *len - 1); return TRUE; } @@ -2382,26 +2392,12 @@ gtk_imhtml_get_html_opt (gchar *tag, return g_string_free(ret, FALSE); } -static const char *accepted_protocols[] = { - "http://", - "https://", - "ftp://" -}; - -static const int accepted_protocols_size = 3; - /* returns if the beginning of the text is a protocol. If it is the protocol, returns the length so the caller knows how long the protocol string is. */ static int gtk_imhtml_is_protocol(const char *text) { - gint i; - - for(i=0; i<accepted_protocols_size; i++){ - if( g_ascii_strncasecmp(text, accepted_protocols[i], strlen(accepted_protocols[i])) == 0 ){ - return strlen(accepted_protocols[i]); - } - } - return 0; + GtkIMHtmlProtocol *proto = imhtml_find_protocol(text, FALSE); + return proto ? proto->length : 0; } /* @@ -2606,7 +2602,7 @@ parse_css_color(gchar *in_color) count++; } - + g_free(in_color); return g_strdup_printf("#%02X%02X%02X", rgbval[0], rgbval[1], rgbval[2]); } @@ -2655,7 +2651,7 @@ void gtk_imhtml_insert_html_at_iter(GtkIMHtml *imhtml, c = text; len = strlen(text); ws = g_malloc(len + 1); - ws[0] = 0; + ws[0] = '\0'; gtk_text_buffer_begin_user_action(imhtml->text_buffer); while (pos < len) { @@ -3307,8 +3303,7 @@ void gtk_imhtml_insert_html_at_iter(GtkIMHtml *imhtml, ws[wpos] = '\n'; wpos++; gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); - ws[0] = '\0'; - wpos = 0; + ws[0] = '\0'; wpos = 0; /* NEW_BIT (NEW_TEXT_BIT); */ } else if (!br) { /* Don't insert a space immediately after an HTML break */ /* A newline is defined by HTML as whitespace, which means we have to replace it with a word boundary. @@ -3319,19 +3314,43 @@ void gtk_imhtml_insert_html_at_iter(GtkIMHtml *imhtml, ws[wpos] = ' '; wpos++; gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); - ws[0] = '\0'; - wpos = 0; + ws[0] = '\0'; wpos = 0; } c++; pos++; - } else if ((len_protocol = gtk_imhtml_is_protocol(c)) > 0){ + } else if ((pos == 0 || wpos == 0 || isspace(*(c - 1))) && + (len_protocol = gtk_imhtml_is_protocol(c)) > 0 && + c[len_protocol] && !isspace(c[len_protocol])) { br = FALSE; - while(len_protocol--){ - /* Skip the next len_protocol characters, but make sure they're - copied into the ws array. - */ - ws [wpos++] = *c++; - pos++; + if (wpos > 0) { + gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); + ws[0] = '\0'; wpos = 0; + } + while (len_protocol--) { + /* Skip the next len_protocol characters, but + * make sure they're copied into the ws array. + */ + ws [wpos++] = *c++; + pos++; + } + if (!imhtml->edit.link && (imhtml->format_functions & GTK_IMHTML_LINK)) { + while (*c && !isspace((int)*c) && + (*c != '<' || !gtk_imhtml_is_tag(c + 1, NULL, NULL, NULL))) { + if (*c == '&' && (amp = purple_markup_unescape_entity(c, &tlen))) { + while (*amp) + ws[wpos++] = *amp++; + c += tlen; + pos += tlen; + } else { + ws [wpos++] = *c++; + pos++; + } + } + ws[wpos] = '\0'; + gtk_imhtml_toggle_link(imhtml, ws); + gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); + ws[0] = '\0'; wpos = 0; + gtk_imhtml_toggle_link(imhtml, NULL); } } else if (*c) { br = FALSE; @@ -3355,7 +3374,7 @@ void gtk_imhtml_insert_html_at_iter(GtkIMHtml *imhtml, ws[wpos++] = 0xE2; ws[wpos++] = 0x80; ws[wpos++] = 0x8F; - + if (!rtl_direction) { /* insert LRM character to set direction */ @@ -3368,8 +3387,7 @@ void gtk_imhtml_insert_html_at_iter(GtkIMHtml *imhtml, ws[wpos] = '\0'; gtk_text_buffer_insert(imhtml->text_buffer, &line_iter, ws, wpos); gtk_text_buffer_get_end_iter(gtk_text_iter_get_buffer(&line_iter), iter); - ws[0] = '\0'; - wpos = 0; + ws[0] = '\0'; wpos = 0; } while (fonts) { @@ -4885,8 +4903,8 @@ void gtk_imhtml_insert_link(GtkIMHtml *imhtml, GtkTextMark *mark, const char *ur { GtkTextIter iter; - if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL)) - gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE); + /* Delete any currently selected text */ + gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE); gtk_imhtml_toggle_link(imhtml, url); gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark); @@ -4899,8 +4917,8 @@ void gtk_imhtml_insert_smiley(GtkIMHtml *imhtml, const char *sml, char *smiley) GtkTextMark *mark; GtkTextIter iter; - if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL)) - gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE); + /* Delete any currently selected text */ + gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE); mark = gtk_text_buffer_get_insert(imhtml->text_buffer); @@ -5753,3 +5771,111 @@ void gtk_imhtml_smiley_destroy(GtkIMHtmlSmiley *smiley) g_free(smiley); } +gboolean gtk_imhtml_class_register_protocol(const char *name, + gboolean (*activate)(GtkIMHtml *imhtml, GtkIMHtmlLink *link), + gboolean (*context_menu)(GtkIMHtml *imhtml, GtkIMHtmlLink *link, GtkWidget *menu)) +{ + GtkIMHtmlClass *klass; + GtkIMHtmlProtocol *proto; + + g_return_val_if_fail(name, FALSE); + + klass = g_type_class_ref(GTK_TYPE_IMHTML); + g_return_val_if_fail(klass, FALSE); + + if ((proto = imhtml_find_protocol(name, TRUE))) { + if (activate) { + return FALSE; + } + g_free(proto->name); + g_free(proto); + klass->protocols = g_list_remove(klass->protocols, proto); + return TRUE; + } else if (!activate) { + return FALSE; + } + + proto = g_new0(GtkIMHtmlProtocol, 1); + proto->name = g_strdup(name); + proto->length = strlen(name); + proto->activate = activate; + proto->context_menu = context_menu; + klass->protocols = g_list_prepend(klass->protocols, proto); + + return TRUE; +} + +static void +gtk_imhtml_activate_tag(GtkIMHtml *imhtml, GtkTextTag *tag) +{ + /* A link was clicked--we emit the "url_clicked" signal + * with the URL as the argument */ + g_object_ref(G_OBJECT(tag)); + g_signal_emit(imhtml, signals[URL_CLICKED], 0, g_object_get_data(G_OBJECT(tag), "link_url")); + g_object_unref(G_OBJECT(tag)); + g_object_set_data(G_OBJECT(tag), "visited", GINT_TO_POINTER(TRUE)); + gtk_imhtml_set_link_color(GTK_IMHTML(imhtml), tag); +} + +gboolean gtk_imhtml_link_activate(GtkIMHtmlLink *link) +{ + g_return_val_if_fail(link, FALSE); + + if (link->tag) { + gtk_imhtml_activate_tag(link->imhtml, link->tag); + } else if (link->url) { + g_signal_emit(link->imhtml, signals[URL_CLICKED], 0, link->url); + } else + return FALSE; + return TRUE; +} + +const char *gtk_imhtml_link_get_url(GtkIMHtmlLink *link) +{ + return link->url; +} + +const GtkTextTag * gtk_imhtml_link_get_text_tag(GtkIMHtmlLink *link) +{ + return link->tag; +} + +static gboolean return_add_newline_cb(GtkWidget *widget, gpointer data) +{ + GtkTextBuffer *buffer; + GtkTextMark *mark; + GtkTextIter iter; + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget)); + + /* Delete any currently selected text */ + gtk_text_buffer_delete_selection(buffer, TRUE, TRUE); + + /* Insert a newline at the current cursor position */ + mark = gtk_text_buffer_get_insert(buffer); + gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark); + gtk_imhtml_insert_html_at_iter(GTK_IMHTML(widget), "\n", 0, &iter); + + /* + * If we just newlined ourselves past the end of the visible area + * then scroll down so the cursor is in view. + */ + gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(widget), + gtk_text_buffer_get_insert(buffer), + 0, FALSE, 0.0, 0.0); + + return TRUE; +} + +/* + * It's kind of a pain that we need this function and the above just + * to reinstate the default GtkTextView behavior. It might be better + * if GtkIMHtml didn't intercept the enter key and just required the + * application to deal with it--it's really not much more work than it + * is to connect to the current "message_send" signal. + */ +void gtk_imhtml_set_return_inserts_newline(GtkIMHtml *imhtml) +{ + g_signal_connect(G_OBJECT(imhtml), "message_send", + G_CALLBACK(return_add_newline_cb), NULL); +} diff --git a/pidgin/gtkimhtml.h b/pidgin/gtkimhtml.h index ef18d99445..f3bdc5d2d2 100644 --- a/pidgin/gtkimhtml.h +++ b/pidgin/gtkimhtml.h @@ -61,6 +61,11 @@ typedef struct _GtkIMHtmlAnimation GtkIMHtmlAnimation; typedef struct _GtkIMHtmlHr GtkIMHtmlHr; typedef struct _GtkIMHtmlFuncs GtkIMHtmlFuncs; +/** + * @since 2.6.0 + */ +typedef struct _GtkIMHtmlLink GtkIMHtmlLink; + typedef enum { GTK_IMHTML_BOLD = 1 << 0, GTK_IMHTML_ITALIC = 1 << 1, @@ -156,6 +161,7 @@ struct _GtkIMHtmlClass { gboolean (*message_send)(GtkIMHtml *); void (*undo)(GtkIMHtml *); void (*redo)(GtkIMHtml *); + GList *protocols; /* List of GtkIMHtmlProtocol's */ }; struct _GtkIMHtmlFontDetail { @@ -885,6 +891,74 @@ void gtk_imhtml_smiley_reload(GtkIMHtmlSmiley *smiley); * @since 2.5.0 */ void gtk_imhtml_smiley_destroy(GtkIMHtmlSmiley *smiley); + +/** + * Register a protocol with the GtkIMHtml widget. Registering a protocol would + * allow certain text to be clickable. + * + * @param name The name of the protocol (e.g. http://) + * @param activate The callback to trigger when the protocol text is clicked. + * Removes any current protocol definition if @c NULL. The + * callback should return @c TRUE if the link was activated + * properly, @c FALSE otherwise. + * @param context_menu The callback to trigger when the context menu is popped + * up on the protocol text. The callback should return + * @c TRUE if the request for context menu was processed + * successfully, @c FALSE otherwise. + * + * @return @c TRUE if the protocol was successfully registered (or unregistered, when #activate is @c NULL) + * + * @since 2.6.0 + */ +gboolean gtk_imhtml_class_register_protocol(const char *name, + gboolean (*activate)(GtkIMHtml *imhtml, GtkIMHtmlLink *link), + gboolean (*context_menu)(GtkIMHtml *imhtml, GtkIMHtmlLink *link, GtkWidget *menu)); + +/** + * Get the URL associated with a link. This should be used by the IMHtml protocol-callbacks. + * + * @param link The GtkIMHtmlLink object sent to the callback functions + * + * @return The URL + * + * @since 2.6.0 + */ +const char *gtk_imhtml_link_get_url(GtkIMHtmlLink *link); + +/** + * Get the GtkTextTag object (if any) associated with a particular link. + * + * @param link The GtkIMHtmlLink object sent to the callback functions + * + * @return The GtkTextTag object, or @c NULL + * + * @since 2.6.0 + */ +const GtkTextTag *gtk_imhtml_link_get_text_tag(GtkIMHtmlLink *link); + +/** + * Activates a GtkIMHtmlLink object. This triggers the 'url-clicked' signal, marks the + * link as visited (when possible). + * + * @param link The GtkIMHtmlLink object sent to the callback functions + * + * @return @c TRUE if 'url-clicked' signal was emitted, @c FALSE otherwise. + * + * @since 2.6.0 + */ +gboolean gtk_imhtml_link_activate(GtkIMHtmlLink *link); + +/** + * By default this widget intercepts presses of the "return" key and + * emits the "message_send" signal instead. If you don't want this + * behavior, and you want the standard GtkTextView behavior of + * inserting a newline into the buffer, then call this function. + * + * @param imhtml The GtkIMHtml where you want the "return" key to add + * newline and not emit the "message_send" signal. + */ +void gtk_imhtml_set_return_inserts_newline(GtkIMHtml *imhtml); + /*@}*/ #ifdef __cplusplus diff --git a/pidgin/gtkimhtmltoolbar.c b/pidgin/gtkimhtmltoolbar.c index a09208b490..39e0ce475c 100644 --- a/pidgin/gtkimhtmltoolbar.c +++ b/pidgin/gtkimhtmltoolbar.c @@ -680,7 +680,7 @@ sort_smileys(struct smiley_button_list *ls, GtkIMHtmlToolbar *toolbar, is custom smiley-enabled */ if (supports_custom && psmiley && !(smiley->flags & GTK_IMHTML_SMILEY_CUSTOM)) { gchar tip[128]; - g_snprintf(tip, sizeof(tip), + g_snprintf(tip, sizeof(tip), _("This smiley is disabled because a custom smiley exists for this shortcut:\n %s"), face); gtk_tooltips_set_tip(toolbar->tooltips, button, tip, NULL); @@ -808,7 +808,7 @@ insert_smiley_cb(GtkWidget *smiley, GtkIMHtmlToolbar *toolbar) unique_smileys = g_slist_prepend(unique_smileys, smiley); } } - + /* we need to reverse the list to get the smileys in the correct order */ unique_smileys = g_slist_reverse(unique_smileys); @@ -1413,13 +1413,13 @@ static void gtk_imhtmltoolbar_init (GtkIMHtmlToolbar *toolbar) menuitem = gtk_menu_item_new_with_mnemonic(_("_Horizontal rule")); g_signal_connect(G_OBJECT(menuitem), "activate" , G_CALLBACK(insert_hr_cb), toolbar); gtk_menu_shell_append(GTK_MENU_SHELL(insert_menu), menuitem); - toolbar->insert_hr = menuitem; + toolbar->insert_hr = menuitem; g_signal_connect_swapped(G_OBJECT(insert_button), "button-press-event", G_CALLBACK(gtk_widget_activate), insert_button); g_signal_connect(G_OBJECT(insert_button), "activate", G_CALLBACK(pidgin_menu_clicked), insert_menu); g_signal_connect(G_OBJECT(insert_menu), "deactivate", G_CALLBACK(pidgin_menu_deactivate), insert_button); toolbar->sml = NULL; - + /* Sep */ sep = gtk_vseparator_new(); gtk_box_pack_start(GTK_BOX(box), sep, FALSE, FALSE, 0); diff --git a/pidgin/gtklog.c b/pidgin/gtklog.c index bcc1b8cd66..aed4f054e0 100644 --- a/pidgin/gtklog.c +++ b/pidgin/gtklog.c @@ -45,7 +45,7 @@ static PidginLogViewer *syslog_viewer = NULL; struct log_viewer_hash_t { PurpleLogType type; - char *screenname; + char *buddyname; PurpleAccount *account; PurpleContact *contact; }; @@ -57,7 +57,7 @@ static guint log_viewer_hash(gconstpointer data) if (viewer->contact != NULL) return g_direct_hash(viewer->contact); - return g_str_hash(viewer->screenname) + + return g_str_hash(viewer->buddyname) + g_str_hash(purple_account_get_username(viewer->account)); } @@ -80,9 +80,9 @@ static gboolean log_viewer_equal(gconstpointer y, gconstpointer z) return FALSE; } - normal = g_strdup(purple_normalize(a->account, a->screenname)); + normal = g_strdup(purple_normalize(a->account, a->buddyname)); ret = (a->account == b->account) && - !strcmp(normal, purple_normalize(b->account, b->screenname)); + !strcmp(normal, purple_normalize(b->account, b->buddyname)); g_free(normal); return ret; @@ -209,7 +209,7 @@ static void destroy_cb(GtkWidget *w, gint resp, struct log_viewer_hash_t *ht) { lv = g_hash_table_lookup(log_viewers, ht); g_hash_table_remove(log_viewers, ht); - g_free(ht->screenname); + g_free(ht->buddyname); g_free(ht); } else syslog_viewer = NULL; @@ -556,7 +556,7 @@ static PidginLogViewer *display_log_viewer(struct log_viewer_hash_t *ht, GList * if (!purple_prefs_get_bool("/purple/logging/log_chats")) log_preferences = _("Chats will only be logged if the \"Log all chats\" preference is enabled."); } - g_free(ht->screenname); + g_free(ht->buddyname); g_free(ht); } @@ -681,27 +681,27 @@ static PidginLogViewer *display_log_viewer(struct log_viewer_hash_t *ht, GList * return lv; } -void pidgin_log_show(PurpleLogType type, const char *screenname, PurpleAccount *account) { +void pidgin_log_show(PurpleLogType type, const char *buddyname, PurpleAccount *account) { struct log_viewer_hash_t *ht; PidginLogViewer *lv = NULL; - const char *name = screenname; + const char *name = buddyname; char *title; GdkPixbuf *prpl_icon; g_return_if_fail(account != NULL); - g_return_if_fail(screenname != NULL); + g_return_if_fail(buddyname != NULL); ht = g_new0(struct log_viewer_hash_t, 1); ht->type = type; - ht->screenname = g_strdup(screenname); + ht->buddyname = g_strdup(buddyname); ht->account = account; if (log_viewers == NULL) { log_viewers = g_hash_table_new(log_viewer_hash, log_viewer_equal); } else if ((lv = g_hash_table_lookup(log_viewers, ht))) { gtk_window_present(GTK_WINDOW(lv->window)); - g_free(ht->screenname); + g_free(ht->buddyname); g_free(ht); return; } @@ -709,7 +709,7 @@ void pidgin_log_show(PurpleLogType type, const char *screenname, PurpleAccount * if (type == PURPLE_LOG_CHAT) { PurpleChat *chat; - chat = purple_blist_find_chat(account, screenname); + chat = purple_blist_find_chat(account, buddyname); if (chat != NULL) name = purple_chat_get_name(chat); @@ -717,7 +717,7 @@ void pidgin_log_show(PurpleLogType type, const char *screenname, PurpleAccount * } else { PurpleBuddy *buddy; - buddy = purple_find_buddy(account, screenname); + buddy = purple_find_buddy(account, buddyname); if (buddy != NULL) name = purple_buddy_get_contact_alias(buddy); @@ -726,9 +726,9 @@ void pidgin_log_show(PurpleLogType type, const char *screenname, PurpleAccount * prpl_icon = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_MEDIUM); - display_log_viewer(ht, purple_log_get_logs(type, screenname, account), + display_log_viewer(ht, purple_log_get_logs(type, buddyname, account), title, gtk_image_new_from_pixbuf(prpl_icon), - purple_log_get_total_size(type, screenname, account)); + purple_log_get_total_size(type, buddyname, account)); if (prpl_icon) g_object_unref(prpl_icon); @@ -760,13 +760,19 @@ void pidgin_log_show_contact(PurpleContact *contact) { return; } - for (child = contact->node.child ; child ; child = child->next) { + for (child = purple_blist_node_get_first_child((PurpleBlistNode*)contact) ; + child != NULL ; + child = purple_blist_node_get_sibling_next(child)) { + const char *buddy_name; + PurpleAccount *account; + if (!PURPLE_BLIST_NODE_IS_BUDDY(child)) continue; - logs = g_list_concat(purple_log_get_logs(PURPLE_LOG_IM, ((PurpleBuddy *)child)->name, - ((PurpleBuddy *)child)->account), logs); - total_log_size += purple_log_get_total_size(PURPLE_LOG_IM, ((PurpleBuddy *)child)->name, ((PurpleBuddy *)child)->account); + buddy_name = purple_buddy_get_name((PurpleBuddy *)child); + account = purple_buddy_get_account((PurpleBuddy *)child); + logs = g_list_concat(purple_log_get_logs(PURPLE_LOG_IM, buddy_name, account), logs); + total_log_size += purple_log_get_total_size(PURPLE_LOG_IM, buddy_name, account); } logs = g_list_sort(logs, purple_log_compare); diff --git a/pidgin/gtklog.h b/pidgin/gtklog.h index adc6c4320c..77917a8a15 100644 --- a/pidgin/gtklog.h +++ b/pidgin/gtklog.h @@ -9,7 +9,7 @@ * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -53,7 +53,7 @@ struct _PidginLogViewer { -void pidgin_log_show(PurpleLogType type, const char *screenname, PurpleAccount *account); +void pidgin_log_show(PurpleLogType type, const char *buddyname, PurpleAccount *account); void pidgin_log_show_contact(PurpleContact *contact); void pidgin_syslog_show(void); diff --git a/pidgin/gtkmain.c b/pidgin/gtkmain.c index 0bc642a7f8..e8e8f9c3f8 100644 --- a/pidgin/gtkmain.c +++ b/pidgin/gtkmain.c @@ -310,6 +310,7 @@ pidgin_ui_init(void) pidgin_log_init(); pidgin_docklet_init(); pidgin_smileys_init(); + pidgin_utils_init(); } static GHashTable *ui_info = NULL; @@ -323,6 +324,7 @@ pidgin_quit(void) #endif /* Uninit */ + pidgin_utils_uninit(); pidgin_smileys_uninit(); pidgin_conversations_uninit(); pidgin_status_uninit(); @@ -385,6 +387,7 @@ show_usage(const char *name, gboolean terse) "Usage: %s [OPTION]...\n\n" " -c, --config=DIR use DIR for config files\n" " -d, --debug print debugging messages to stdout\n" + " -f, --force-online force online, regardless of network status\n" " -h, --help display this help and exit\n" " -m, --multiple do not ensure single instance\n" " -n, --nologin don't automatically login\n" @@ -398,6 +401,7 @@ show_usage(const char *name, gboolean terse) "Usage: %s [OPTION]...\n\n" " -c, --config=DIR use DIR for config files\n" " -d, --debug print debugging messages to stdout\n" + " -f, --force-online force online, regardless of network status\n" " -h, --help display this help and exit\n" " -m, --multiple do not ensure single instance\n" " -n, --nologin don't automatically login\n" @@ -457,10 +461,10 @@ int pidgin_main(HINSTANCE hint, int argc, char *argv[]) int main(int argc, char *argv[]) #endif { + gboolean opt_force_online = FALSE; gboolean opt_help = FALSE; gboolean opt_login = FALSE; gboolean opt_nologin = FALSE; - gboolean opt_nocrash = FALSE; gboolean opt_version = FALSE; gboolean opt_si = TRUE; /* Check for single instance? */ char *opt_config_dir_arg = NULL; @@ -485,17 +489,17 @@ int main(int argc, char *argv[]) GList *active_accounts; struct option long_options[] = { - {"config", required_argument, NULL, 'c'}, - {"debug", no_argument, NULL, 'd'}, - {"help", no_argument, NULL, 'h'}, - {"login", optional_argument, NULL, 'l'}, - {"multiple", no_argument, NULL, 'm'}, - {"nologin", no_argument, NULL, 'n'}, - {"nocrash", no_argument, NULL, 'x'}, - {"session", required_argument, NULL, 's'}, - {"version", no_argument, NULL, 'v'}, - {"display", required_argument, NULL, 'D'}, - {"sync", no_argument, NULL, 'S'}, + {"config", required_argument, NULL, 'c'}, + {"debug", no_argument, NULL, 'd'}, + {"force-online", no_argument, NULL, 'd'}, + {"help", no_argument, NULL, 'h'}, + {"login", optional_argument, NULL, 'l'}, + {"multiple", no_argument, NULL, 'm'}, + {"nologin", no_argument, NULL, 'n'}, + {"session", required_argument, NULL, 's'}, + {"version", no_argument, NULL, 'v'}, + {"display", required_argument, NULL, 'D'}, + {"sync", no_argument, NULL, 'S'}, {0, 0, 0, 0} }; @@ -602,9 +606,9 @@ int main(int argc, char *argv[]) opterr = 1; while ((opt = getopt_long(argc, argv, #ifndef _WIN32 - "c:dhmnl::s:v", + "c:dfhmnl::s:v", #else - "c:dhmnl::v", + "c:dfhmnl::v", #endif long_options, NULL)) != -1) { switch (opt) { @@ -615,6 +619,9 @@ int main(int argc, char *argv[]) case 'd': /* debug */ debug_enabled = TRUE; break; + case 'f': /* force-online */ + opt_force_online = TRUE; + break; case 'h': /* help */ opt_help = TRUE; break; @@ -637,9 +644,6 @@ int main(int argc, char *argv[]) case 'm': /* do not ensure single instance. */ opt_si = FALSE; break; - case 'x': /* --nocrash */ - opt_nocrash = TRUE; - break; case 'D': /* --display */ case 'S': /* --sync */ /* handled by gtk_init_check below */ @@ -816,6 +820,11 @@ int main(int argc, char *argv[]) opt_config_dir_arg = NULL; } + /* This needs to be before purple_blist_show() so the + * statusbox gets the forced online status. */ + if (opt_force_online) + purple_network_force_online(); + /* * We want to show the blist early in the init process so the * user feels warm and fuzzy (not cold and prickley). diff --git a/pidgin/gtkpluginpref.c b/pidgin/gtkpluginpref.c index cc353de990..024575a034 100644 --- a/pidgin/gtkpluginpref.c +++ b/pidgin/gtkpluginpref.c @@ -93,7 +93,7 @@ make_string_pref(GtkWidget *parent, PurplePluginPref *pref, GtkSizeGroup *sg) { case PURPLE_PLUGIN_PREF_NONE: default: if (format == PURPLE_STRING_FORMAT_TYPE_NONE) - { + { entry = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry), purple_prefs_get_string(pref_name)); gtk_entry_set_max_length(GTK_ENTRY(entry), diff --git a/pidgin/gtkpounce.c b/pidgin/gtkpounce.c index 51c497a850..a8b2096014 100644 --- a/pidgin/gtkpounce.c +++ b/pidgin/gtkpounce.c @@ -535,7 +535,7 @@ pidgin_pounce_editor_show(PurpleAccount *account, const char *name, /* Create the window. */ dialog->window = window = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(window), (cur_pounce == NULL ? _("New Buddy Pounce") : _("Edit Buddy Pounce"))); + gtk_window_set_title(GTK_WINDOW(window), (cur_pounce == NULL ? _("Add Buddy Pounce") : _("Modify Buddy Pounce"))); gtk_window_set_role(GTK_WINDOW(window), "buddy_pounce"); gtk_container_set_border_width(GTK_CONTAINER(dialog->window), PIDGIN_HIG_BORDER); @@ -637,19 +637,19 @@ pidgin_pounce_editor_show(PurpleAccount *account, const char *name, GTK_FILL, 0, 0, 0); gtk_table_attach(GTK_TABLE(table), dialog->signoff, 0, 1, 2, 3, GTK_FILL, 0, 0, 0); - gtk_table_attach(GTK_TABLE(table), dialog->away, 0, 1, 3, 4, + gtk_table_attach(GTK_TABLE(table), dialog->away, 1, 2, 0, 1, GTK_FILL, 0, 0, 0); - gtk_table_attach(GTK_TABLE(table), dialog->away_return, 0, 1, 4, 5, + gtk_table_attach(GTK_TABLE(table), dialog->away_return, 1, 2, 1, 2, GTK_FILL, 0, 0, 0); - gtk_table_attach(GTK_TABLE(table), dialog->idle, 1, 2, 0, 1, + gtk_table_attach(GTK_TABLE(table), dialog->idle, 1, 2, 2, 3, GTK_FILL, 0, 0, 0); - gtk_table_attach(GTK_TABLE(table), dialog->idle_return, 1, 2, 1, 2, + gtk_table_attach(GTK_TABLE(table), dialog->idle_return, 2, 3, 0, 1, GTK_FILL, 0, 0, 0); - gtk_table_attach(GTK_TABLE(table), dialog->typing, 1, 2, 2, 3, + gtk_table_attach(GTK_TABLE(table), dialog->typing, 2, 3, 1, 2, GTK_FILL, 0, 0, 0); - gtk_table_attach(GTK_TABLE(table), dialog->typed, 1, 2, 3, 4, + gtk_table_attach(GTK_TABLE(table), dialog->typed, 2, 3, 2, 3, GTK_FILL, 0, 0, 0); - gtk_table_attach(GTK_TABLE(table), dialog->stop_typing, 1, 2, 4, 5, + gtk_table_attach(GTK_TABLE(table), dialog->stop_typing, 3, 4, 0, 1, GTK_FILL, 0, 0, 0); gtk_widget_show(dialog->signon); diff --git a/pidgin/gtkpounce.h b/pidgin/gtkpounce.h index 7d62a22030..ce5bbc6505 100644 --- a/pidgin/gtkpounce.h +++ b/pidgin/gtkpounce.h @@ -8,7 +8,7 @@ * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or diff --git a/pidgin/gtkprefs.c b/pidgin/gtkprefs.c index bf827ffaa0..44f05ea794 100644 --- a/pidgin/gtkprefs.c +++ b/pidgin/gtkprefs.c @@ -35,6 +35,8 @@ #include "request.h" #include "savedstatuses.h" #include "sound.h" +#include "sound-theme.h" +#include "theme-manager.h" #include "util.h" #include "network.h" @@ -47,6 +49,7 @@ #include "gtkprefs.h" #include "gtksavedstatuses.h" #include "gtksound.h" +#include "gtkstatus-icon-theme.h" #include "gtkthemes.h" #include "gtkutils.h" #include "pidginstock.h" @@ -56,6 +59,8 @@ #define PROXYUSER 2 #define PROXYPASS 3 +#define PREFS_OPTIMAL_ICON_SIZE 32 + static int sound_row_sel = 0; static GtkWidget *prefsnotebook; @@ -69,6 +74,12 @@ static GtkWidget *debugbutton = NULL; static int notebook_page = 0; static GtkTreeRowReference *previous_smiley_row = NULL; +static gboolean prefs_themes_unsorted = TRUE; +static GtkListStore *prefs_sound_themes; +static GtkListStore *prefs_blist_themes; +static GtkListStore *prefs_status_icon_themes; + + /* * PROTOTYPES */ @@ -546,6 +557,212 @@ theme_dnd_recv(GtkWidget *widget, GdkDragContext *dc, guint x, guint y, gtk_drag_finish(dc, FALSE, FALSE, t); } +/* Rebuild the markup for the sound theme selection for "(Custom)" themes */ +static void +pref_sound_generate_markup() +{ + gboolean print_custom, customized; + const gchar *name, *author, *description, *current_theme; + gchar *markup; + PurpleSoundTheme *theme; + GtkTreeIter iter; + + customized = pidgin_sound_is_customized(); + current_theme = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/sound/theme"); + + if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(prefs_sound_themes), &iter)) { + do { + gtk_tree_model_get(GTK_TREE_MODEL(prefs_sound_themes), &iter, 2, &name, -1); + + print_custom = customized && g_str_equal(current_theme, name); + + if (g_str_equal(name, "")) + markup = g_strdup_printf("<b>(Default)</b>%s%s - None\n<span foreground='dim grey'>The default Pidgin sound theme</span>", + print_custom ? " " : "", print_custom ? "(Custom)" : ""); + else { + theme = PURPLE_SOUND_THEME(purple_theme_manager_find_theme(name, "sound")); + author = purple_theme_get_author(PURPLE_THEME(theme)); + description = purple_theme_get_description(PURPLE_THEME(theme)); + + markup = g_strdup_printf("<b>%s</b>%s%s%s%s\n<span foreground='dim grey'>%s</span>", + name, print_custom ? " " : "", print_custom ? "(Custom)" : "", + author != NULL ? " - " : "", author != NULL ? author : "", description != NULL ? description : ""); + } + + gtk_list_store_set(prefs_sound_themes, &iter, 1, markup, -1); + + g_free(markup); + + } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(prefs_sound_themes), &iter)); + } +} + +/* adds the themes to the theme list from the manager so they can be sisplayed in prefs */ +static void +prefs_themes_sort(PurpleTheme *theme) +{ + GdkPixbuf *pixbuf = NULL; + GtkTreeIter iter; + gchar *image_full = NULL, *markup; + const gchar *name, *author, *description; + + if (PURPLE_IS_SOUND_THEME(theme)){ + + image_full = purple_theme_get_image_full(theme); + if (image_full != NULL){ + pixbuf = gdk_pixbuf_new_from_file_at_scale(image_full, PREFS_OPTIMAL_ICON_SIZE, PREFS_OPTIMAL_ICON_SIZE, TRUE, NULL); + g_free(image_full); + } else pixbuf = NULL; + + gtk_list_store_append(prefs_sound_themes, &iter); + gtk_list_store_set(prefs_sound_themes, &iter, 0, pixbuf, 2, purple_theme_get_name(theme), -1); + + if (pixbuf != NULL) + gdk_pixbuf_unref(pixbuf); + + } else if (PIDGIN_IS_BLIST_THEME(theme) || PIDGIN_IS_STATUS_ICON_THEME(theme)){ + GtkListStore *store; + + if (PIDGIN_IS_BLIST_THEME(theme)) + store = prefs_blist_themes; + else store = prefs_status_icon_themes; + + image_full = purple_theme_get_image_full(theme); + if (image_full != NULL){ + pixbuf = gdk_pixbuf_new_from_file_at_scale(image_full, PREFS_OPTIMAL_ICON_SIZE, PREFS_OPTIMAL_ICON_SIZE, TRUE, NULL); + g_free(image_full); + } else pixbuf = NULL; + + name = purple_theme_get_name(theme); + author = purple_theme_get_author(theme); + description = purple_theme_get_description(theme); + + markup = g_strdup_printf("<b>%s</b>%s%s\n<span foreground='dim grey'>%s</span>", name, author != NULL ? " - " : "", + author != NULL ? author : "", description != NULL ? description : ""); + + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, 0, pixbuf, 1, markup, 2, name, -1); + + g_free(markup); + if (pixbuf != NULL) + gdk_pixbuf_unref(pixbuf); + } + +} + +/* init all the theme variables so that the themes can be sorted later and used by pref pages */ +static void +prefs_themes_init() +{ + GdkPixbuf *pixbuf = NULL; + gchar *filename; + GtkTreeIter iter; + + filename = g_build_filename(DATADIR, "icons", "hicolor", "32x32", "apps", "pidgin.png", NULL); + pixbuf = gdk_pixbuf_new_from_file_at_scale(filename, PREFS_OPTIMAL_ICON_SIZE, PREFS_OPTIMAL_ICON_SIZE, TRUE, NULL); + g_free(filename); + + /* sound themes */ + prefs_sound_themes = gtk_list_store_new(3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING); + + gtk_list_store_append(prefs_sound_themes, &iter); + gtk_list_store_set(prefs_sound_themes, &iter, 0, pixbuf, 2, "", -1); + + /* blist themes */ + prefs_blist_themes = gtk_list_store_new(3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING); + + gtk_list_store_append(prefs_blist_themes, &iter); + gtk_list_store_set(prefs_blist_themes, &iter, 0, pixbuf, 1, "<b>(Default)</b> - None\n<span color='dim grey'>" + "The default Pidgin buddy list theme</span>", 2, "", -1); + + /* status icon themes */ + prefs_status_icon_themes = gtk_list_store_new(3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING); + + gtk_list_store_append(prefs_status_icon_themes, &iter); + gtk_list_store_set(prefs_status_icon_themes, &iter, 0, pixbuf, 1, "<b>(Default)</b> - None\n<span color='dim grey'>" + "The default Pidgin status icon theme</span>", 2, "", -1); + + gdk_pixbuf_unref(pixbuf); +} + +/* builds a theme combo box from a list store with colums: icon preview, markup, theme name */ +static GtkWidget * +prefs_build_theme_combo_box(GtkListStore *store, const gchar *current_theme) +{ + GtkWidget *combo_box; + GtkCellRenderer *cell_rend; + GtkTreeIter iter; + gchar *theme = NULL; + gboolean unset = TRUE; + + g_return_val_if_fail(store != NULL && current_theme != NULL, NULL); + + combo_box = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store)); + + cell_rend = gtk_cell_renderer_pixbuf_new(); + gtk_cell_renderer_set_fixed_size(cell_rend, PREFS_OPTIMAL_ICON_SIZE, PREFS_OPTIMAL_ICON_SIZE); + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT (combo_box), cell_rend, FALSE); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo_box), cell_rend, "pixbuf", 0, NULL); + + cell_rend = gtk_cell_renderer_text_new(); + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT (combo_box), cell_rend, FALSE); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo_box), cell_rend, "markup", 1, NULL); +/*#if GTK_CHECK_VERSION(2,6,0) + g_object_set(cell_rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); +#endif*/ + + if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter)) { + do { + gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, 2, &theme, -1); + + if (g_str_equal(current_theme, theme)) { + gtk_combo_box_set_active_iter(GTK_COMBO_BOX(combo_box), &iter); + unset = FALSE; + } + + g_free(theme); + } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter)); + } + + if (unset) + gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), 0); + + return combo_box; +} + +/* sets the current sound theme */ +static void +prefs_set_sound_theme_cb(GtkComboBox *combo_box, gpointer user_data) +{ + gint i; + gchar *pref; + gchar *new_theme; + gboolean success; + GtkTreeIter new_iter; + + success = gtk_combo_box_get_active_iter(combo_box, &new_iter); + g_return_if_fail(success); + + gtk_tree_model_get(GTK_TREE_MODEL(prefs_sound_themes), &new_iter, 2, &new_theme, -1); + + purple_prefs_set_string(PIDGIN_PREFS_ROOT "/sound/theme", new_theme); + + /* New theme removes all customization */ + for(i=0; i < PURPLE_NUM_SOUNDS; i++){ + pref = g_strdup_printf(PIDGIN_PREFS_ROOT "/sound/file/%s", + pidgin_sound_get_event_option(i)); + purple_prefs_set_path(pref, ""); + g_free(pref); + } + + /* gets rid of the "(Custom)" from the last selection */ + pref_sound_generate_markup(); + + gtk_entry_set_text(GTK_ENTRY(sound_entry), _("(default)")); + + g_free(new_theme); +} + /* Does same as normal sort, except "none" is sorted first */ static gint pidgin_sort_smileys (GtkTreeModel *model, GtkTreeIter *a, @@ -922,6 +1139,40 @@ keyboard_shortcuts(GtkWidget *page) gtk_box_pack_start(GTK_BOX(vbox), checkbox, FALSE, FALSE, 0); } +/* sets the current buddy list theme */ +static void +prefs_set_blist_theme_cb(GtkComboBox *combo_box, gpointer user_data) +{ + PidginBlistTheme *theme; + GtkTreeIter iter; + gchar *name = NULL; + + g_return_if_fail(gtk_combo_box_get_active_iter(combo_box, &iter)); + gtk_tree_model_get(GTK_TREE_MODEL(prefs_blist_themes), &iter, 2, &name, -1); + + theme = PIDGIN_BLIST_THEME(purple_theme_manager_find_theme(name, "blist")); + g_free(name); + + pidgin_blist_set_theme(theme); +} + +/* sets the current icon theme */ +static void +prefs_set_status_icon_theme_cb(GtkComboBox *combo_box, gpointer user_data) +{ + PidginStatusIconTheme *theme; + GtkTreeIter iter; + gchar *name = NULL; + + g_return_if_fail(gtk_combo_box_get_active_iter(combo_box, &iter)); + gtk_tree_model_get(GTK_TREE_MODEL(prefs_status_icon_themes), &iter, 2, &name, -1); + + theme = PIDGIN_STATUS_ICON_THEME(purple_theme_manager_find_theme(name, "status-icon")); + g_free(name); + + pidgin_stock_load_status_icon_theme(theme); +} + static GtkWidget * interface_page(void) { @@ -929,6 +1180,7 @@ interface_page(void) GtkWidget *vbox; GtkWidget *vbox2; GtkWidget *label; + GtkWidget *combo_box; GtkSizeGroup *sg; GList *names = NULL; @@ -937,6 +1189,19 @@ interface_page(void) sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); + /* Buddy List Themes */ + vbox = pidgin_make_frame(ret, _("Buddy List Theme")); + + combo_box = prefs_build_theme_combo_box(prefs_blist_themes, purple_prefs_get_string(PIDGIN_PREFS_ROOT "/blist/theme")); + gtk_box_pack_start(GTK_BOX (vbox), combo_box, FALSE, FALSE, 0); + g_signal_connect(G_OBJECT(combo_box), "changed", (GCallback)prefs_set_blist_theme_cb, NULL); + + /* Status Icon Themes */ + combo_box = prefs_build_theme_combo_box(prefs_status_icon_themes, purple_prefs_get_string(PIDGIN_PREFS_ROOT "/status/icon-theme")); + gtk_box_pack_start(GTK_BOX (vbox), combo_box, FALSE, FALSE, 0); + g_signal_connect(G_OBJECT(combo_box), "changed", (GCallback)prefs_set_status_icon_theme_cb, NULL); + + /* System Tray */ vbox = pidgin_make_frame(ret, _("System Tray Icon")); label = pidgin_prefs_dropdown(vbox, _("_Show system tray icon:"), PURPLE_PREF_STRING, PIDGIN_PREFS_ROOT "/docklet/show", @@ -1742,6 +2007,8 @@ reset_sound(GtkWidget *button, gpointer i_am_also_NULL) g_free(pref); gtk_entry_set_text(GTK_ENTRY(sound_entry), _("(default)")); + + pref_sound_generate_markup(); } static void @@ -1764,6 +2031,8 @@ sound_chosen_cb(void *user_data, const char *filename) */ if (sound == sound_row_sel) gtk_entry_set_text(GTK_ENTRY(sound_entry), filename); + + pref_sound_generate_markup(); } static void select_sound(GtkWidget *button, gpointer being_NULL_is_fun) @@ -1832,6 +2101,8 @@ static void prefs_sound_sel(GtkTreeSelection *sel, GtkTreeModel *model) { if (sound_entry) gtk_entry_set_text(GTK_ENTRY(sound_entry), (file && *file != '\0') ? file : _("(default)")); g_value_unset (&val); + + pref_sound_generate_markup(); } @@ -1857,7 +2128,7 @@ static GtkWidget * sound_page(void) { GtkWidget *ret; - GtkWidget *vbox, *sw, *button; + GtkWidget *vbox, *sw, *button, *combo_box; GtkSizeGroup *sg; GtkTreeIter iter; GtkWidget *event_view; @@ -1951,7 +2222,6 @@ sound_page(void) purple_prefs_connect_callback(prefs, PIDGIN_PREFS_ROOT "/sound/method", sound_changed2_cb, vbox); #endif - vbox = pidgin_make_frame(ret, _("Sound Events")); /* The following is an ugly hack to make the frame expand so the @@ -1963,6 +2233,14 @@ sound_page(void) gtk_box_set_child_packing(GTK_BOX(vbox->parent->parent->parent), vbox->parent->parent, TRUE, TRUE, 0, GTK_PACK_START); + /* SOUND THEMES */ + combo_box = prefs_build_theme_combo_box(prefs_sound_themes, purple_prefs_get_string(PIDGIN_PREFS_ROOT "/sound/theme")); + pref_sound_generate_markup(); + gtk_box_pack_start(GTK_BOX (vbox), combo_box, FALSE, FALSE, 0); + + g_signal_connect(G_OBJECT(combo_box), "changed", (GCallback)prefs_set_sound_theme_cb, NULL); + + /* SOUND SELECTION */ sw = gtk_scrolled_window_new(NULL,NULL); gtk_widget_set_size_request(sw, -1, 100); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); @@ -2196,6 +2474,14 @@ void pidgin_prefs_show(void) return; } + /* Refresh the list of themes before showing the preferences window */ + purple_theme_manager_refresh(); + + /* add everything in the theme manager before the window is loaded */ + if (prefs_themes_unsorted) { + purple_theme_manager_for_each_theme(prefs_themes_sort); + prefs_themes_unsorted = FALSE; + } /* copy the preferences to tmp values... * I liked "take affect immediately" Oh well :-( */ /* (that should have been "effect," right?) */ @@ -2290,6 +2576,9 @@ pidgin_prefs_init(void) purple_prefs_add_path(PIDGIN_PREFS_ROOT "/filelocations/last_open_folder", ""); purple_prefs_add_path(PIDGIN_PREFS_ROOT "/filelocations/last_icon_folder", ""); + /* Themes */ + prefs_themes_init(); + /* Smiley Themes */ purple_prefs_add_none(PIDGIN_PREFS_ROOT "/smileys"); purple_prefs_add_string(PIDGIN_PREFS_ROOT "/smileys/theme", "Default"); diff --git a/pidgin/gtkprefs.h b/pidgin/gtkprefs.h index e2baefc397..e8b7945a53 100644 --- a/pidgin/gtkprefs.h +++ b/pidgin/gtkprefs.h @@ -59,7 +59,7 @@ GtkWidget *pidgin_prefs_checkbox(const char *title, const char *key, * @param max The maximum value of the spin button * @param sg If not NULL, the size group to which the spin button will be added * @return An hbox containing both the label and the spinner. Can be - * used to set the widgets to sensitive or insensitive based on the + * used to set the widgets to sensitive or insensitive based on the * value of a checkbox. */ GtkWidget *pidgin_prefs_labeled_spin_button(GtkWidget *page, diff --git a/pidgin/gtkrequest.c b/pidgin/gtkrequest.c index 81f1ba0f71..7fc4b97a04 100644 --- a/pidgin/gtkrequest.c +++ b/pidgin/gtkrequest.c @@ -384,6 +384,8 @@ pidgin_request_input(const char *title, const char *primary, gtk_imhtml_append_text(GTK_IMHTML(entry), default_value, GTK_IMHTML_NO_SCROLL); gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); gtk_widget_show(frame); + + gtk_imhtml_set_return_inserts_newline(GTK_IMHTML(entry)); } else { if (multiline) { @@ -682,15 +684,17 @@ pidgin_request_action(const char *title, const char *primary, static void req_entry_field_changed_cb(GtkWidget *entry, PurpleRequestField *field) { + PurpleRequestFieldGroup *group; PidginRequestData *req_data; const char *text = gtk_entry_get_text(GTK_ENTRY(entry)); purple_request_field_string_set_value(field, (*text == '\0' ? NULL : text)); - req_data = (PidginRequestData *)field->group->fields_list->ui_data; + group = purple_request_field_get_group(field); + req_data = (PidginRequestData *)group->fields_list->ui_data; gtk_widget_set_sensitive(req_data->ok_button, - purple_request_fields_all_required_filled(field->group->fields_list)); + purple_request_fields_all_required_filled(group->fields_list)); } static void @@ -711,7 +715,8 @@ setup_entry_field(GtkWidget *entry, PurpleRequestField *field) if (purple_str_has_prefix(type_hint, "screenname")) { GtkWidget *optmenu = NULL; - GList *fields = field->group->fields; + PurpleRequestFieldGroup *group = purple_request_field_get_group(field); + GList *fields = group->fields; while (fields) { PurpleRequestField *fld = fields->data; @@ -722,9 +727,11 @@ setup_entry_field(GtkWidget *entry, PurpleRequestField *field) const char *type_hint = purple_request_field_get_type_hint(fld); if (type_hint != NULL && strcmp(type_hint, "account") == 0) { - if (fld->ui_data == NULL) - fld->ui_data = create_account_field(fld); - optmenu = GTK_WIDGET(fld->ui_data); + optmenu = GTK_WIDGET(purple_request_field_get_ui_data(fld)); + if (optmenu == NULL) { + optmenu = GTK_WIDGET(create_account_field(fld)); + purple_request_field_set_ui_data(field, optmenu); + } break; } } @@ -1338,24 +1345,26 @@ pidgin_request_fields(const char *title, const char *primary, gtk_widget_show(label); } - if (field->ui_data != NULL) - widget = GTK_WIDGET(field->ui_data); - else if (type == PURPLE_REQUEST_FIELD_STRING) - widget = create_string_field(field); - else if (type == PURPLE_REQUEST_FIELD_INTEGER) - widget = create_int_field(field); - else if (type == PURPLE_REQUEST_FIELD_BOOLEAN) - widget = create_bool_field(field); - else if (type == PURPLE_REQUEST_FIELD_CHOICE) - widget = create_choice_field(field); - else if (type == PURPLE_REQUEST_FIELD_LIST) - widget = create_list_field(field); - else if (type == PURPLE_REQUEST_FIELD_IMAGE) - widget = create_image_field(field); - else if (type == PURPLE_REQUEST_FIELD_ACCOUNT) - widget = create_account_field(field); - else - continue; + widget = GTK_WIDGET(purple_request_field_get_ui_data(field)); + if (widget == NULL) + { + if (type == PURPLE_REQUEST_FIELD_STRING) + widget = create_string_field(field); + else if (type == PURPLE_REQUEST_FIELD_INTEGER) + widget = create_int_field(field); + else if (type == PURPLE_REQUEST_FIELD_BOOLEAN) + widget = create_bool_field(field); + else if (type == PURPLE_REQUEST_FIELD_CHOICE) + widget = create_choice_field(field); + else if (type == PURPLE_REQUEST_FIELD_LIST) + widget = create_list_field(field); + else if (type == PURPLE_REQUEST_FIELD_IMAGE) + widget = create_image_field(field); + else if (type == PURPLE_REQUEST_FIELD_ACCOUNT) + widget = create_account_field(field); + else + continue; + } if (label) gtk_label_set_mnemonic_widget(GTK_LABEL(label), widget); @@ -1400,7 +1409,7 @@ pidgin_request_fields(const char *title, const char *primary, gtk_widget_show(widget); - field->ui_data = widget; + purple_request_field_set_ui_data(field, widget); } } } diff --git a/pidgin/gtksavedstatuses.c b/pidgin/gtksavedstatuses.c index 5ea80774fa..9df26bf30b 100644 --- a/pidgin/gtksavedstatuses.c +++ b/pidgin/gtksavedstatuses.c @@ -76,7 +76,7 @@ enum STATUS_EDITOR_COLUMN_WINDOW, STATUS_EDITOR_COLUMN_ENABLE_SUBSTATUS, STATUS_EDITOR_COLUMN_ICON, - STATUS_EDITOR_COLUMN_SCREENNAME, + STATUS_EDITOR_COLUMN_USERNAME, /** A hidden column containing the ID of this PurpleStatusType. */ STATUS_EDITOR_COLUMN_STATUS_ID, STATUS_EDITOR_COLUMN_STATUS_NAME, @@ -1007,7 +1007,7 @@ status_editor_add_columns(StatusEditor *dialog) g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(status_editor_substatus_cb), dialog); - /* Screen Name column */ + /* Username column */ column = gtk_tree_view_column_new(); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_column_set_title(column, _("Username")); @@ -1020,11 +1020,11 @@ status_editor_add_columns(StatusEditor *dialog) gtk_tree_view_column_add_attribute(column, renderer, "pixbuf", STATUS_EDITOR_COLUMN_ICON); - /* Screen Name */ + /* Username */ renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(column, renderer, TRUE); gtk_tree_view_column_add_attribute(column, renderer, "text", - STATUS_EDITOR_COLUMN_SCREENNAME); + STATUS_EDITOR_COLUMN_USERNAME); /* Status column */ column = gtk_tree_view_column_new(); @@ -1086,7 +1086,7 @@ status_editor_set_account(GtkListStore *store, PurpleAccount *account, STATUS_EDITOR_COLUMN_ACCOUNT, account, STATUS_EDITOR_COLUMN_ENABLE_SUBSTATUS, (substatus != NULL), STATUS_EDITOR_COLUMN_ICON, pixbuf, - STATUS_EDITOR_COLUMN_SCREENNAME, purple_account_get_username(account), + STATUS_EDITOR_COLUMN_USERNAME, purple_account_get_username(account), STATUS_EDITOR_COLUMN_STATUS_ID, id, STATUS_EDITOR_COLUMN_STATUS_NAME, name, STATUS_EDITOR_COLUMN_STATUS_MESSAGE, message, @@ -1218,6 +1218,8 @@ pidgin_status_editor_show(gboolean edit, PurpleSavedStatus *saved_status) gtk_container_set_focus_chain(GTK_CONTAINER(hbox), focus_chain); g_list_free(focus_chain); + gtk_imhtml_set_return_inserts_newline(dialog->message); + if ((saved_status != NULL) && (purple_savedstatus_get_message(saved_status) != NULL)) gtk_imhtml_append_text(GTK_IMHTML(text), purple_savedstatus_get_message(saved_status), 0); @@ -1547,7 +1549,7 @@ edit_substatus(StatusEditor *status_editor, PurpleAccount *account) /* Seed the input widgets with the current values */ /* Only look at the saved status if we can't find it in the parent status dialog's substatuses model */ - gtk_tree_model_get(GTK_TREE_MODEL(status_editor->model), &iter, + gtk_tree_model_get(GTK_TREE_MODEL(status_editor->model), &iter, STATUS_EDITOR_COLUMN_ENABLE_SUBSTATUS, &parent_dialog_has_substatus, -1); if (parent_dialog_has_substatus) { gtk_tree_model_get(GTK_TREE_MODEL(status_editor->model), &iter, @@ -1656,7 +1658,7 @@ enum { * And whether or not that emblem is visible */ SS_MENU_EMBLEM_VISIBLE_COLUMN, - + SS_MENU_NUM_COLUMNS }; diff --git a/pidgin/gtkscrollbook.h b/pidgin/gtkscrollbook.h index 859488c145..4dec336e87 100644 --- a/pidgin/gtkscrollbook.h +++ b/pidgin/gtkscrollbook.h @@ -51,7 +51,7 @@ struct _PidginScrollBook GtkWidget *left_arrow; GtkWidget *right_arrow; GList *children; - + /* Padding for future expansion */ void (*_gtk_reserved1) (void); void (*_gtk_reserved2) (void); diff --git a/pidgin/gtksession.c b/pidgin/gtksession.c index cf75989634..9e3192170b 100644 --- a/pidgin/gtksession.c +++ b/pidgin/gtksession.c @@ -108,7 +108,7 @@ static void ice_connection_watch(IceConn connection, IcePointer client_data, purple_debug(PURPLE_DEBUG_INFO, NULL, "done.\n"); } -/* We call any handler installed before (or after) ice_init but +/* We call any handler installed before (or after) ice_init but * avoid calling the default libICE handler which does an exit(). * * This means we do nothing by default, which is probably correct, diff --git a/pidgin/gtksmiley.c b/pidgin/gtksmiley.c index f111eb1770..d8f0b3e422 100644 --- a/pidgin/gtksmiley.c +++ b/pidgin/gtksmiley.c @@ -225,6 +225,12 @@ static void do_add(GtkWidget *widget, PidginSmiley *s) entry = gtk_entry_get_text(GTK_ENTRY(s->smile)); if (!entry || !*entry) { + /* + * TODO: We should enable/disable the add button based on + * whether the user has entered all required data. That + * would eliminate the need for this check and provide a + * better user experience. + */ purple_notify_error(s->parent, _("Custom Smiley"), _("More Data needed"), _("Please provide a shortcut to associate with the smiley.")); @@ -233,9 +239,12 @@ static void do_add(GtkWidget *widget, PidginSmiley *s) emoticon = purple_smileys_find_by_shortcut(entry); if (emoticon && emoticon != s->smiley) { + gchar *msg; + msg = g_strdup_printf(_("A custom smiley for '%s' already exists. " + "Please use a different shortcut."), entry); purple_notify_error(s->parent, _("Custom Smiley"), - _("Duplicate Shortcut"), - _("A custom smiley for the selected shortcut already exists. Please specify a different shortcut.")); + _("Duplicate Shortcut"), msg); + g_free(msg); return; } @@ -273,7 +282,7 @@ static void do_add(GtkWidget *widget, PidginSmiley *s) gsize size = 0; gchar *filename; const gchar *dirname = purple_smileys_get_storing_dir(); - + /* since this may be called before purple_smiley_new_* has ever been called, we create the storing dir, if it doesn't exist yet, to be able to save the pixbuf before adding the smiley */ @@ -286,7 +295,7 @@ static void do_add(GtkWidget *widget, PidginSmiley *s) dirname, g_strerror(errno)); } } - + gdk_pixbuf_save_to_buffer(s->custom_pixbuf, &buffer, &size, "png", NULL, "compression", "9", NULL, NULL); filename = purple_util_get_image_filename(buffer, size); @@ -385,7 +394,7 @@ pidgin_smiley_edit(GtkWidget *widget, PurpleSmiley *smiley) hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); gtk_container_add(GTK_CONTAINER(GTK_VBOX(vbox)), hbox); - label = gtk_label_new_with_mnemonic(_("Smiley _Image")); + label = gtk_label_new_with_mnemonic(_("_Image:")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_widget_show(label); @@ -415,8 +424,8 @@ pidgin_smiley_edit(GtkWidget *widget, PurpleSmiley *smiley) hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); gtk_container_add(GTK_CONTAINER(GTK_VBOX(vbox)),hbox); - /* Smiley shortcut */ - label = gtk_label_new_with_mnemonic(_("Smiley S_hortcut")); + /* Shortcut text */ + label = gtk_label_new_with_mnemonic(_("S_hortcut text:")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_widget_show(label); @@ -520,9 +529,9 @@ static void add_columns(GtkWidget *treeview, SmileyManager *dialog) gtk_tree_view_column_pack_start(column, rend, FALSE); gtk_tree_view_column_add_attribute(column, rend, "pixbuf", ICON); - /* Shortcut */ + /* Shortcut Text */ column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title(column, _("Shortcut")); + gtk_tree_view_column_set_title(column, _("Shortcut Text")); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); @@ -712,7 +721,7 @@ void pidgin_smiley_manager_show(void) _("Custom Smiley Manager"), NULL, GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_STOCK_ADD, GTK_RESPONSE_YES, + PIDGIN_STOCK_ADD, GTK_RESPONSE_YES, PIDGIN_STOCK_MODIFY, PIDGIN_RESPONSE_MODIFY, GTK_STOCK_DELETE, GTK_RESPONSE_NO, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, @@ -740,4 +749,3 @@ void pidgin_smiley_manager_show(void) gtk_widget_show(win); } - diff --git a/pidgin/gtksmiley.h b/pidgin/gtksmiley.h index 37795c51a4..46f68541a9 100644 --- a/pidgin/gtksmiley.h +++ b/pidgin/gtksmiley.h @@ -25,8 +25,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ -#ifndef _PIDGIN_GTKSMILEY_H_ -#define _PIDGIN_GTKSMILEY_H_ +#ifndef PIDGIN_GTKSMILEY_H +#define PIDGIN_GTKSMILEY_H #include "smiley.h" @@ -62,7 +62,7 @@ void pidgin_smileys_uninit(void); * * @constreturn A GtkIMHmlSmiley list */ -GSList* pidgin_smileys_get_all(void); +GSList *pidgin_smileys_get_all(void); /****************************************************************************** * Smiley Manager @@ -100,4 +100,4 @@ void pidgin_smiley_editor_set_shortcut(PidginSmiley *editor, const gchar *shortc */ void pidgin_smiley_editor_set_image(PidginSmiley *editor, GdkPixbuf *image); -#endif /* _PIDGIN_GTKSMILEY_H_*/ +#endif /* PIDGIN_GTKSMILEY_H */ diff --git a/pidgin/gtksound.c b/pidgin/gtksound.c index dfb5a5d48c..5e89167819 100644 --- a/pidgin/gtksound.c +++ b/pidgin/gtksound.c @@ -40,6 +40,8 @@ #include "notify.h" #include "prefs.h" #include "sound.h" +#include "sound-theme.h" +#include "theme-manager.h" #include "util.h" #include "gtkconv.h" @@ -294,6 +296,7 @@ pidgin_sound_init(void) purple_prefs_add_path(PIDGIN_PREFS_ROOT "/sound/file/nick_said", ""); purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/sound/enabled/pounce_default", TRUE); purple_prefs_add_path(PIDGIN_PREFS_ROOT "/sound/file/pounce_default", ""); + purple_prefs_add_string(PIDGIN_PREFS_ROOT "/sound/theme", ""); purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/sound/conv_focus", TRUE); purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/sound/mute", FALSE); purple_prefs_add_path(PIDGIN_PREFS_ROOT "/sound/command", ""); @@ -557,6 +560,8 @@ pidgin_sound_play_event(PurpleSoundEventID event) { char *enable_pref; char *file_pref; + const char *theme_name; + PurpleSoundTheme *theme; if ((event == PURPLE_SOUND_BUDDY_ARRIVE) && mute_login_sounds) return; @@ -573,13 +578,31 @@ pidgin_sound_play_event(PurpleSoundEventID event) /* check NULL for sounds that don't have an option, ie buddy pounce */ if (purple_prefs_get_bool(enable_pref)) { char *filename = g_strdup(purple_prefs_get_path(file_pref)); - if(!filename || !strlen(filename)) { + theme_name = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/sound/theme"); + + if (theme_name && *theme_name && (!filename || !*filename)) { + /* Use theme */ + g_free(filename); + + theme = PURPLE_SOUND_THEME(purple_theme_manager_find_theme(theme_name, "sound")); + filename = purple_sound_theme_get_file_full(theme, sounds[event].pref); + + if(!g_file_test(filename, G_FILE_TEST_IS_REGULAR)){ /* Use Default sound in this case */ + purple_debug_error("sound", "The file: (%s) %s\n from theme: %s, was not found or wasn't readable\n", + sounds[event].pref, filename, theme_name); + g_free(filename); + } + } + + if (!filename || !strlen(filename)) { /* Use Default sounds */ g_free(filename); + /* XXX Consider creating a constant for "sounds/purple" to be shared with Finch */ filename = g_build_filename(DATADIR, "sounds", "purple", sounds[event].def, NULL); } purple_sound_play_file(filename, NULL); + g_free(filename); } @@ -587,6 +610,29 @@ pidgin_sound_play_event(PurpleSoundEventID event) g_free(file_pref); } +gboolean +pidgin_sound_is_customized(void) +{ + gint i; + gchar *path, *file; + + for (i = 0; i < PURPLE_NUM_SOUNDS; i++) { + path = g_strdup_printf(PIDGIN_PREFS_ROOT "/sound/file/%s", sounds[i].pref); + file = g_strdup(purple_prefs_get_path(path)); + g_free(path); + + if (file && file[0] != '\0'){ + g_free(file); + return TRUE; + } + + g_free(file); + } + + return FALSE; + +} + static PurpleSoundUiOps sound_ui_ops = { pidgin_sound_init, diff --git a/pidgin/gtksound.h b/pidgin/gtksound.h index c1bb91d7e8..f55713907e 100644 --- a/pidgin/gtksound.h +++ b/pidgin/gtksound.h @@ -63,6 +63,15 @@ PurpleSoundUiOps *pidgin_sound_get_ui_ops(void); */ void *pidgin_sound_get_handle(void); +/** + * Returns true Pidgin is using customized sounds + * + * @return TRUE if non default sounds are used. + * + * @since 2.6.0 + */ +gboolean pidgin_sound_is_customized(void); + /*@}*/ #endif /* _PIDGINSOUND_H_ */ diff --git a/pidgin/gtksourceiter.c b/pidgin/gtksourceiter.c index 97397a07e8..bc0086268c 100644 --- a/pidgin/gtksourceiter.c +++ b/pidgin/gtksourceiter.c @@ -1,4 +1,4 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- * gtksourceiter.c * * Pidgin is the legal property of its developers, whose names are too numerous @@ -7,7 +7,7 @@ * * The following copyright notice applies to this file: * - * Copyright (C) 2000 - 2005 Paolo Maggi + * Copyright (C) 2000 - 2005 Paolo Maggi * Copyright (C) 2002, 2003 Jeroen Zwartepoorte * * This program is free software; you can redistribute it and/or modify @@ -206,7 +206,7 @@ g_utf8_caselessnmatch (const char *s1, const char *s2, finally_2: g_free (normalized_s1); - g_free (normalized_s2); + g_free (normalized_s2); return ret; } @@ -247,7 +247,7 @@ forward_chars_with_skipping (GtkTextIter *iter, { /* being UTF8 correct sucks; this accounts for extra offsets coming from canonical decompositions of - UTF8 characters (e.g. accented characters) which + UTF8 characters (e.g. accented characters) which g_utf8_normalize() performs */ gchar *normal; gchar buffer[6]; @@ -530,14 +530,14 @@ strbreakup (const char *string, * @match_start: return location for start of match, or %%NULL. * @match_end: return location for end of match, or %%NULL. * @limit: bound for the search, or %%NULL for the end of the buffer. - * - * Searches forward for @str. Any match is returned by setting - * @match_start to the first character of the match and @match_end to the + * + * Searches forward for @str. Any match is returned by setting + * @match_start to the first character of the match and @match_end to the * first character after the match. The search will not continue past * @limit. Note that a search is a linear or O(n) operation, so you * may wish to use @limit to avoid locking up your UI on large * buffers. - * + * * If the #GTK_SOURCE_SEARCH_VISIBLE_ONLY flag is present, the match may * have invisible text interspersed in @str. i.e. @str will be a * possibly-noncontiguous subsequence of the matched range. similarly, @@ -550,7 +550,7 @@ strbreakup (const char *string, * * Same as gtk_text_iter_forward_search(), but supports case insensitive * searching. - * + * * Return value: whether a match was found. **/ gboolean @@ -574,7 +574,7 @@ gtk_source_iter_forward_search (const GtkTextIter *iter, if ((flags & GTK_SOURCE_SEARCH_CASE_INSENSITIVE) == 0) return gtk_text_iter_forward_search (iter, str, flags, match_start, match_end, - limit); + limit); if (limit && gtk_text_iter_compare (iter, limit) >= 0) return FALSE; @@ -650,10 +650,10 @@ gtk_source_iter_forward_search (const GtkTextIter *iter, * @match_start: return location for start of match, or %%NULL. * @match_end: return location for end of match, or %%NULL. * @limit: location of last possible @match_start, or %%NULL for start of buffer. - * + * * Same as gtk_text_iter_backward_search(), but supports case insensitive * searching. - * + * * Return value: whether a match was found. **/ gboolean @@ -677,7 +677,7 @@ gtk_source_iter_backward_search (const GtkTextIter *iter, if ((flags & GTK_SOURCE_SEARCH_CASE_INSENSITIVE) == 0) return gtk_text_iter_backward_search (iter, str, flags, match_start, match_end, - limit); + limit); if (limit && gtk_text_iter_compare (iter, limit) <= 0) return FALSE; diff --git a/pidgin/gtksourceiter.h b/pidgin/gtksourceiter.h index b69e478a53..33d6c46ccb 100644 --- a/pidgin/gtksourceiter.h +++ b/pidgin/gtksourceiter.h @@ -1,4 +1,4 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- * gtksourceiter.h * * Pidgin is the legal property of its developers, whose names are too numerous @@ -7,7 +7,7 @@ * * The following copyright notice applies to this file: * - * Copyright (C) 2000 - 2005 Paolo Maggi + * Copyright (C) 2000 - 2005 Paolo Maggi * Copyright (C) 2002, 2003 Jeroen Zwartepoorte * * This program is free software; you can redistribute it and/or modify diff --git a/pidgin/gtksourceundomanager.c b/pidgin/gtksourceundomanager.c index af9e2e0ef9..9cb177ed80 100644 --- a/pidgin/gtksourceundomanager.c +++ b/pidgin/gtksourceundomanager.c @@ -4,8 +4,8 @@ * This file is part of GtkSourceView * * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence - * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi - * Copyright (C) 2002-2005 Paolo Maggi + * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi + * Copyright (C) 2002-2005 Paolo Maggi * * 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 @@ -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, + * Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1301, USA. */ @@ -49,14 +49,14 @@ typedef enum { GTK_SOURCE_UNDO_ACTION_INSERT_ANCHOR, } GtkSourceUndoActionType; -/* +/* * We use offsets instead of GtkTextIters because the last ones * require to much memory in this context without giving us any advantage. - */ + */ struct _GtkSourceUndoInsertAction { - gint pos; + gint pos; gchar *text; gint length; gint chars; @@ -79,7 +79,7 @@ struct _GtkSourceUndoInsertAnchorAction struct _GtkSourceUndoAction { GtkSourceUndoActionType action_type; - + union { GtkSourceUndoInsertAction insert; GtkSourceUndoDeleteAction delete; @@ -92,7 +92,7 @@ struct _GtkSourceUndoAction guint mergeable : 1; /* It is TRUE whether the action is marked as "modified". - * An action is marked as "modified" if it changed the + * An action is marked as "modified" if it changed the * state of the buffer from "not modified" to "modified". Only the first * action of a group can be marked as modified. * There can be a single action marked as "modified" in the actions list. @@ -106,29 +106,29 @@ struct _GtkSourceUndoAction struct _GtkSourceUndoManagerPrivate { GtkTextBuffer *document; - + GList* actions; - gint next_redo; + gint next_redo; gint actions_in_current_group; - + gint running_not_undoable_actions; gint num_of_groups; gint max_undo_levels; - + guint can_undo : 1; guint can_redo : 1; - + /* It is TRUE whether, while undoing an action of the current group (with order_in_group > 1), * the state of the buffer changed from "not modified" to "modified". */ - guint modified_undoing_group : 1; + guint modified_undoing_group : 1; /* Pointer to the action (in the action list) marked as "modified". - * It is NULL when no action is marked as "modified". - * It is INVALID when the action marked as "modified" has been removed + * It is NULL when no action is marked as "modified". + * It is INVALID when the action marked as "modified" has been removed * from the action list (freeing the list or resizing it) */ GtkSourceUndoAction *modified_action; }; @@ -143,33 +143,33 @@ static void gtk_source_undo_manager_class_init (GtkSourceUndoManagerClass *k static void gtk_source_undo_manager_init (GtkSourceUndoManager *um); static void gtk_source_undo_manager_finalize (GObject *object); -static void gtk_source_undo_manager_insert_text_handler (GtkTextBuffer *buffer, +static void gtk_source_undo_manager_insert_text_handler (GtkTextBuffer *buffer, GtkTextIter *pos, - const gchar *text, - gint length, + const gchar *text, + gint length, GtkSourceUndoManager *um); static void gtk_source_undo_manager_insert_anchor_handler (GtkTextBuffer *buffer, GtkTextIter *pos, GtkTextChildAnchor *anchor, GtkSourceUndoManager *um); -static void gtk_source_undo_manager_delete_range_handler (GtkTextBuffer *buffer, +static void gtk_source_undo_manager_delete_range_handler (GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end, GtkSourceUndoManager *um); -static void gtk_source_undo_manager_begin_user_action_handler (GtkTextBuffer *buffer, +static void gtk_source_undo_manager_begin_user_action_handler (GtkTextBuffer *buffer, GtkSourceUndoManager *um); static void gtk_source_undo_manager_modified_changed_handler (GtkTextBuffer *buffer, GtkSourceUndoManager *um); static void gtk_source_undo_manager_free_action_list (GtkSourceUndoManager *um); -static void gtk_source_undo_manager_add_action (GtkSourceUndoManager *um, +static void gtk_source_undo_manager_add_action (GtkSourceUndoManager *um, const GtkSourceUndoAction *undo_action); -static void gtk_source_undo_manager_free_first_n_actions (GtkSourceUndoManager *um, +static void gtk_source_undo_manager_free_first_n_actions (GtkSourceUndoManager *um, gint n); static void gtk_source_undo_manager_check_list_size (GtkSourceUndoManager *um); -static gboolean gtk_source_undo_manager_merge_action (GtkSourceUndoManager *um, +static gboolean gtk_source_undo_manager_merge_action (GtkSourceUndoManager *um, const GtkSourceUndoAction *undo_action); static GObjectClass *parent_class = NULL; @@ -216,7 +216,7 @@ gtk_source_undo_manager_class_init (GtkSourceUndoManagerClass *klass) klass->can_undo = NULL; klass->can_redo = NULL; - + undo_manager_signals[CAN_UNDO] = g_signal_new ("can_undo", G_OBJECT_CLASS_TYPE (object_class), @@ -269,7 +269,7 @@ gtk_source_undo_manager_finalize (GObject *object) g_return_if_fail (object != NULL); g_return_if_fail (GTK_SOURCE_IS_UNDO_MANAGER (object)); - + um = GTK_SOURCE_UNDO_MANAGER (object); g_return_if_fail (um->priv != NULL); @@ -280,19 +280,19 @@ gtk_source_undo_manager_finalize (GObject *object) } g_signal_handlers_disconnect_by_func (G_OBJECT (um->priv->document), - G_CALLBACK (gtk_source_undo_manager_delete_range_handler), + G_CALLBACK (gtk_source_undo_manager_delete_range_handler), um); g_signal_handlers_disconnect_by_func (G_OBJECT (um->priv->document), - G_CALLBACK (gtk_source_undo_manager_insert_text_handler), + G_CALLBACK (gtk_source_undo_manager_insert_text_handler), um); - + g_signal_handlers_disconnect_by_func (G_OBJECT (um->priv->document), - G_CALLBACK (gtk_source_undo_manager_insert_anchor_handler), + G_CALLBACK (gtk_source_undo_manager_insert_anchor_handler), um); - + g_signal_handlers_disconnect_by_func (G_OBJECT (um->priv->document), - G_CALLBACK (gtk_source_undo_manager_begin_user_action_handler), + G_CALLBACK (gtk_source_undo_manager_begin_user_action_handler), um); g_free (um->priv); @@ -311,19 +311,19 @@ gtk_source_undo_manager_new (GtkTextBuffer* buffer) um->priv->document = buffer; g_signal_connect (G_OBJECT (buffer), "insert_text", - G_CALLBACK (gtk_source_undo_manager_insert_text_handler), + G_CALLBACK (gtk_source_undo_manager_insert_text_handler), um); g_signal_connect (G_OBJECT (buffer), "insert_child_anchor", - G_CALLBACK (gtk_source_undo_manager_insert_anchor_handler), + G_CALLBACK (gtk_source_undo_manager_insert_anchor_handler), um); g_signal_connect (G_OBJECT (buffer), "delete_range", - G_CALLBACK (gtk_source_undo_manager_delete_range_handler), + G_CALLBACK (gtk_source_undo_manager_delete_range_handler), um); g_signal_connect (G_OBJECT (buffer), "begin_user_action", - G_CALLBACK (gtk_source_undo_manager_begin_user_action_handler), + G_CALLBACK (gtk_source_undo_manager_begin_user_action_handler), um); g_signal_connect (G_OBJECT (buffer), "modified_changed", @@ -332,7 +332,7 @@ gtk_source_undo_manager_new (GtkTextBuffer* buffer) return um; } -void +void gtk_source_undo_manager_begin_not_undoable_action (GtkSourceUndoManager *um) { g_return_if_fail (GTK_SOURCE_IS_UNDO_MANAGER (um)); @@ -341,18 +341,18 @@ gtk_source_undo_manager_begin_not_undoable_action (GtkSourceUndoManager *um) ++um->priv->running_not_undoable_actions; } -static void +static void gtk_source_undo_manager_end_not_undoable_action_internal (GtkSourceUndoManager *um) { g_return_if_fail (GTK_SOURCE_IS_UNDO_MANAGER (um)); g_return_if_fail (um->priv != NULL); g_return_if_fail (um->priv->running_not_undoable_actions > 0); - + --um->priv->running_not_undoable_actions; } -void +void gtk_source_undo_manager_end_not_undoable_action (GtkSourceUndoManager *um) { g_return_if_fail (GTK_SOURCE_IS_UNDO_MANAGER (um)); @@ -361,26 +361,26 @@ gtk_source_undo_manager_end_not_undoable_action (GtkSourceUndoManager *um) gtk_source_undo_manager_end_not_undoable_action_internal (um); if (um->priv->running_not_undoable_actions == 0) - { + { gtk_source_undo_manager_free_action_list (um); - - um->priv->next_redo = -1; + + um->priv->next_redo = -1; if (um->priv->can_undo) { um->priv->can_undo = FALSE; - g_signal_emit (G_OBJECT (um), - undo_manager_signals [CAN_UNDO], - 0, + g_signal_emit (G_OBJECT (um), + undo_manager_signals [CAN_UNDO], + 0, FALSE); } if (um->priv->can_redo) { um->priv->can_redo = FALSE; - g_signal_emit (G_OBJECT (um), - undo_manager_signals [CAN_REDO], - 0, + g_signal_emit (G_OBJECT (um), + undo_manager_signals [CAN_REDO], + 0, FALSE); } } @@ -395,7 +395,7 @@ gtk_source_undo_manager_can_undo (const GtkSourceUndoManager *um) return um->priv->can_undo; } -gboolean +gboolean gtk_source_undo_manager_can_redo (const GtkSourceUndoManager *um) { g_return_val_if_fail (GTK_SOURCE_IS_UNDO_MANAGER (um), FALSE); @@ -408,31 +408,31 @@ static void set_cursor (GtkTextBuffer *buffer, gint cursor) { GtkTextIter iter; - + /* Place the cursor at the requested position */ gtk_text_buffer_get_iter_at_offset (buffer, &iter, cursor); gtk_text_buffer_place_cursor (buffer, &iter); } -static void +static void insert_text (GtkTextBuffer *buffer, gint pos, const gchar *text, gint len) { GtkTextIter iter; - + gtk_text_buffer_get_iter_at_offset (buffer, &iter, pos); gtk_text_buffer_insert (buffer, &iter, text, len); } -static void +static void insert_anchor (GtkTextBuffer *buffer, gint pos, GtkTextChildAnchor *anchor) { GtkTextIter iter; - + gtk_text_buffer_get_iter_at_offset (buffer, &iter, pos); gtk_text_buffer_insert_child_anchor (buffer, &iter, anchor); } -static void +static void delete_text (GtkTextBuffer *buffer, gint start, gint end) { GtkTextIter start_iter; @@ -464,7 +464,7 @@ get_chars (GtkTextBuffer *buffer, gint start, gint end) return gtk_text_buffer_get_slice (buffer, &start_iter, &end_iter, TRUE); } -void +void gtk_source_undo_manager_undo (GtkSourceUndoManager *um) { GtkSourceUndoAction *undo_action; @@ -473,13 +473,13 @@ gtk_source_undo_manager_undo (GtkSourceUndoManager *um) g_return_if_fail (GTK_SOURCE_IS_UNDO_MANAGER (um)); g_return_if_fail (um->priv != NULL); g_return_if_fail (um->priv->can_undo); - + um->priv->modified_undoing_group = FALSE; gtk_source_undo_manager_begin_not_undoable_action (um); do - { + { undo_action = g_list_nth_data (um->priv->actions, um->priv->next_redo + 1); g_return_if_fail (undo_action != NULL); @@ -490,7 +490,7 @@ gtk_source_undo_manager_undo (GtkSourceUndoManager *um) if (undo_action->order_in_group <= 1) { /* Set modified to TRUE only if the buffer did not change its state from - * "not modified" to "modified" undoing an action (with order_in_group > 1) + * "not modified" to "modified" undoing an action (with order_in_group > 1) * in current group. */ modified = (undo_action->modified && !um->priv->modified_undoing_group); } @@ -499,31 +499,31 @@ gtk_source_undo_manager_undo (GtkSourceUndoManager *um) { case GTK_SOURCE_UNDO_ACTION_DELETE: insert_text ( - um->priv->document, - undo_action->action.delete.start, + um->priv->document, + undo_action->action.delete.start, undo_action->action.delete.text, strlen (undo_action->action.delete.text)); if (undo_action->action.delete.forward) set_cursor ( - um->priv->document, + um->priv->document, undo_action->action.delete.start); else set_cursor ( - um->priv->document, + um->priv->document, undo_action->action.delete.end); break; - + case GTK_SOURCE_UNDO_ACTION_INSERT: delete_text ( - um->priv->document, - undo_action->action.insert.pos, - undo_action->action.insert.pos + - undo_action->action.insert.chars); + um->priv->document, + undo_action->action.insert.pos, + undo_action->action.insert.pos + + undo_action->action.insert.chars); set_cursor ( - um->priv->document, + um->priv->document, undo_action->action.insert.pos); break; @@ -551,29 +551,29 @@ gtk_source_undo_manager_undo (GtkSourceUndoManager *um) } gtk_source_undo_manager_end_not_undoable_action_internal (um); - + um->priv->modified_undoing_group = FALSE; if (!um->priv->can_redo) { um->priv->can_redo = TRUE; - g_signal_emit (G_OBJECT (um), - undo_manager_signals [CAN_REDO], - 0, + g_signal_emit (G_OBJECT (um), + undo_manager_signals [CAN_REDO], + 0, TRUE); } if (um->priv->next_redo >= (gint)(g_list_length (um->priv->actions) - 1)) { um->priv->can_undo = FALSE; - g_signal_emit (G_OBJECT (um), - undo_manager_signals [CAN_UNDO], - 0, + g_signal_emit (G_OBJECT (um), + undo_manager_signals [CAN_UNDO], + 0, FALSE); } } -void +void gtk_source_undo_manager_redo (GtkSourceUndoManager *um) { GtkSourceUndoAction *undo_action; @@ -582,7 +582,7 @@ gtk_source_undo_manager_redo (GtkSourceUndoManager *um) g_return_if_fail (GTK_SOURCE_IS_UNDO_MANAGER (um)); g_return_if_fail (um->priv != NULL); g_return_if_fail (um->priv->can_redo); - + undo_action = g_list_nth_data (um->priv->actions, um->priv->next_redo); g_return_if_fail (undo_action != NULL); @@ -597,29 +597,29 @@ gtk_source_undo_manager_redo (GtkSourceUndoManager *um) } --um->priv->next_redo; - + switch (undo_action->action_type) { case GTK_SOURCE_UNDO_ACTION_DELETE: delete_text ( - um->priv->document, - undo_action->action.delete.start, - undo_action->action.delete.end); + um->priv->document, + undo_action->action.delete.start, + undo_action->action.delete.end); set_cursor ( um->priv->document, undo_action->action.delete.start); break; - + case GTK_SOURCE_UNDO_ACTION_INSERT: set_cursor ( um->priv->document, undo_action->action.insert.pos); insert_text ( - um->priv->document, - undo_action->action.insert.pos, + um->priv->document, + undo_action->action.insert.pos, undo_action->action.insert.text, undo_action->action.insert.length); @@ -646,7 +646,7 @@ gtk_source_undo_manager_redo (GtkSourceUndoManager *um) undo_action = NULL; else undo_action = g_list_nth_data (um->priv->actions, um->priv->next_redo); - + } while ((undo_action != NULL) && (undo_action->order_in_group > 1)); if (modified) @@ -689,7 +689,7 @@ gtk_source_undo_action_free (GtkSourceUndoAction *action) g_free (action); } -static void +static void gtk_source_undo_manager_free_action_list (GtkSourceUndoManager *um) { GList *l; @@ -712,18 +712,18 @@ gtk_source_undo_manager_free_action_list (GtkSourceUndoManager *um) } g_list_free (um->priv->actions); - um->priv->actions = NULL; + um->priv->actions = NULL; } -static void -gtk_source_undo_manager_insert_text_handler (GtkTextBuffer *buffer, +static void +gtk_source_undo_manager_insert_text_handler (GtkTextBuffer *buffer, GtkTextIter *pos, - const gchar *text, - gint length, + const gchar *text, + gint length, GtkSourceUndoManager *um) { GtkSourceUndoAction undo_action; - + if (um->priv->running_not_undoable_actions > 0) return; @@ -766,15 +766,15 @@ static void gtk_source_undo_manager_insert_anchor_handler (GtkTextBuffer *buffer gtk_source_undo_manager_add_action (um, &undo_action); } -static void -gtk_source_undo_manager_delete_range_handler (GtkTextBuffer *buffer, +static void +gtk_source_undo_manager_delete_range_handler (GtkTextBuffer *buffer, GtkTextIter *start, - GtkTextIter *end, + GtkTextIter *end, GtkSourceUndoManager *um) { GtkSourceUndoAction undo_action; GtkTextIter insert_iter; - + if (um->priv->running_not_undoable_actions > 0) return; @@ -805,14 +805,14 @@ gtk_source_undo_manager_delete_range_handler (GtkTextBuffer *buffer, undo_action.mergeable = TRUE; undo_action.modified = FALSE; - + gtk_source_undo_manager_add_action (um, &undo_action); g_free (undo_action.action.delete.text); } -static void +static void gtk_source_undo_manager_begin_user_action_handler (GtkTextBuffer *buffer, GtkSourceUndoManager *um) { g_return_if_fail (GTK_SOURCE_IS_UNDO_MANAGER (um)); @@ -825,11 +825,11 @@ gtk_source_undo_manager_begin_user_action_handler (GtkTextBuffer *buffer, GtkSou } static void -gtk_source_undo_manager_add_action (GtkSourceUndoManager *um, +gtk_source_undo_manager_add_action (GtkSourceUndoManager *um, const GtkSourceUndoAction *undo_action) { GtkSourceUndoAction* action; - + if (um->priv->next_redo >= 0) { gtk_source_undo_manager_free_first_n_actions (um, um->priv->next_redo + 1); @@ -845,7 +845,7 @@ gtk_source_undo_manager_add_action (GtkSourceUndoManager *um, if (action->action_type == GTK_SOURCE_UNDO_ACTION_INSERT) action->action.insert.text = g_strndup (undo_action->action.insert.text, undo_action->action.insert.length); else if (action->action_type == GTK_SOURCE_UNDO_ACTION_DELETE) - action->action.delete.text = g_strdup (undo_action->action.delete.text); + action->action.delete.text = g_strdup (undo_action->action.delete.text); else if (action->action_type == GTK_SOURCE_UNDO_ACTION_INSERT_ANCHOR) { /* Nothing needs to be done */ @@ -855,16 +855,16 @@ gtk_source_undo_manager_add_action (GtkSourceUndoManager *um, g_free (action); g_return_if_reached (); } - + ++um->priv->actions_in_current_group; action->order_in_group = um->priv->actions_in_current_group; if (action->order_in_group == 1) ++um->priv->num_of_groups; - + um->priv->actions = g_list_prepend (um->priv->actions, action); } - + gtk_source_undo_manager_check_list_size (um); if (!um->priv->can_undo) @@ -880,8 +880,8 @@ gtk_source_undo_manager_add_action (GtkSourceUndoManager *um, } } -static void -gtk_source_undo_manager_free_first_n_actions (GtkSourceUndoManager *um, +static void +gtk_source_undo_manager_free_first_n_actions (GtkSourceUndoManager *um, gint n) { gint i; @@ -904,21 +904,21 @@ gtk_source_undo_manager_free_first_n_actions (GtkSourceUndoManager *um, um->priv->actions = g_list_delete_link (um->priv->actions, um->priv->actions); - if (um->priv->actions == NULL) + if (um->priv->actions == NULL) return; } } -static void +static void gtk_source_undo_manager_check_list_size (GtkSourceUndoManager *um) { gint undo_levels; - + g_return_if_fail (GTK_SOURCE_IS_UNDO_MANAGER (um)); g_return_if_fail (um->priv != NULL); - + undo_levels = gtk_source_undo_manager_get_max_undo_levels (um); - + if (undo_levels < 1) return; @@ -926,14 +926,14 @@ gtk_source_undo_manager_check_list_size (GtkSourceUndoManager *um) { GtkSourceUndoAction *undo_action; GList *last; - + last = g_list_last (um->priv->actions); undo_action = (GtkSourceUndoAction*) last->data; - + do { GList *tmp; - + if (undo_action->order_in_group == 1) --um->priv->num_of_groups; @@ -945,32 +945,32 @@ gtk_source_undo_manager_check_list_size (GtkSourceUndoManager *um) tmp = g_list_previous (last); um->priv->actions = g_list_delete_link (um->priv->actions, last); last = tmp; - g_return_if_fail (last != NULL); + g_return_if_fail (last != NULL); undo_action = (GtkSourceUndoAction*) last->data; - } while ((undo_action->order_in_group > 1) || + } while ((undo_action->order_in_group > 1) || (um->priv->num_of_groups > undo_levels)); - } + } } /** * gtk_source_undo_manager_merge_action: - * @um: a #GtkSourceUndoManager. + * @um: a #GtkSourceUndoManager. * @undo_action: a #GtkSourceUndoAction. - * + * * This function tries to merge the undo action at the top of * the stack with a new undo action. So when we undo for example * typing, we can undo the whole word and not each letter by itself. - * - * Return Value: %TRUE is merge was sucessful, %FALSE otherwise. + * + * Return Value: %TRUE is merge was successful, %FALSE otherwise. **/ -static gboolean -gtk_source_undo_manager_merge_action (GtkSourceUndoManager *um, +static gboolean +gtk_source_undo_manager_merge_action (GtkSourceUndoManager *um, const GtkSourceUndoAction *undo_action) { GtkSourceUndoAction *last_action; - + g_return_val_if_fail (GTK_SOURCE_IS_UNDO_MANAGER (um), FALSE); g_return_val_if_fail (um->priv != NULL, FALSE); @@ -990,7 +990,7 @@ gtk_source_undo_manager_merge_action (GtkSourceUndoManager *um, } if (undo_action->action_type == GTK_SOURCE_UNDO_ACTION_DELETE) - { + { if ((last_action->action.delete.forward != undo_action->action.delete.forward) || ((last_action->action.delete.start != undo_action->action.delete.start) && (last_action->action.delete.start != undo_action->action.delete.end))) @@ -998,14 +998,14 @@ gtk_source_undo_manager_merge_action (GtkSourceUndoManager *um, last_action->mergeable = FALSE; return FALSE; } - + if (last_action->action.delete.start == undo_action->action.delete.start) { gchar *str; - + #define L (last_action->action.delete.end - last_action->action.delete.start - 1) #define g_utf8_get_char_at(p,i) g_utf8_get_char(g_utf8_offset_to_pointer((p),(i))) - + /* Deleted with the delete key */ if ((g_utf8_get_char (undo_action->action.delete.text) != ' ') && (g_utf8_get_char (undo_action->action.delete.text) != '\t') && @@ -1015,19 +1015,19 @@ gtk_source_undo_manager_merge_action (GtkSourceUndoManager *um, last_action->mergeable = FALSE; return FALSE; } - - str = g_strdup_printf ("%s%s", last_action->action.delete.text, + + str = g_strdup_printf ("%s%s", last_action->action.delete.text, undo_action->action.delete.text); - + g_free (last_action->action.delete.text); - last_action->action.delete.end += (undo_action->action.delete.end - + last_action->action.delete.end += (undo_action->action.delete.end - undo_action->action.delete.start); last_action->action.delete.text = str; } else { gchar *str; - + /* Deleted with the backspace key */ if ((g_utf8_get_char (undo_action->action.delete.text) != ' ') && (g_utf8_get_char (undo_action->action.delete.text) != '\t') && @@ -1038,9 +1038,9 @@ gtk_source_undo_manager_merge_action (GtkSourceUndoManager *um, return FALSE; } - str = g_strdup_printf ("%s%s", undo_action->action.delete.text, + str = g_strdup_printf ("%s%s", undo_action->action.delete.text, last_action->action.delete.text); - + g_free (last_action->action.delete.text); last_action->action.delete.start = undo_action->action.delete.start; last_action->action.delete.text = str; @@ -1049,10 +1049,10 @@ gtk_source_undo_manager_merge_action (GtkSourceUndoManager *um, else if (undo_action->action_type == GTK_SOURCE_UNDO_ACTION_INSERT) { gchar* str; - + #define I (last_action->action.insert.chars - 1) - - if ((undo_action->action.insert.pos != + + if ((undo_action->action.insert.pos != (last_action->action.insert.pos + last_action->action.insert.chars)) || ((g_utf8_get_char (undo_action->action.insert.text) != ' ') && (g_utf8_get_char (undo_action->action.insert.text) != '\t') && @@ -1064,9 +1064,9 @@ gtk_source_undo_manager_merge_action (GtkSourceUndoManager *um, return FALSE; } - str = g_strdup_printf ("%s%s", last_action->action.insert.text, + str = g_strdup_printf ("%s%s", last_action->action.insert.text, undo_action->action.insert.text); - + g_free (last_action->action.insert.text); last_action->action.insert.length += undo_action->action.insert.length; last_action->action.insert.text = str; @@ -1080,7 +1080,7 @@ gtk_source_undo_manager_merge_action (GtkSourceUndoManager *um, else /* Unknown action inside undo merge encountered */ g_return_val_if_reached (TRUE); - + return TRUE; } @@ -1098,7 +1098,7 @@ gtk_source_undo_manager_set_max_undo_levels (GtkSourceUndoManager *um, gint max_undo_levels) { gint old_levels; - + g_return_if_fail (um != NULL); g_return_if_fail (GTK_SOURCE_IS_UNDO_MANAGER (um)); @@ -1107,7 +1107,7 @@ gtk_source_undo_manager_set_max_undo_levels (GtkSourceUndoManager *um, if (max_undo_levels < 1) return; - + if (old_levels > max_undo_levels) { /* strip redo actions first */ @@ -1116,7 +1116,7 @@ gtk_source_undo_manager_set_max_undo_levels (GtkSourceUndoManager *um, gtk_source_undo_manager_free_first_n_actions (um, 1); um->priv->next_redo--; } - + /* now remove undo actions if necessary */ gtk_source_undo_manager_check_list_size (um); @@ -1142,7 +1142,7 @@ gtk_source_undo_manager_modified_changed_handler (GtkTextBuffer *buffer, { GtkSourceUndoAction *action; GList *list; - + g_return_if_fail (GTK_SOURCE_IS_UNDO_MANAGER (um)); g_return_if_fail (um->priv != NULL); @@ -1157,7 +1157,7 @@ gtk_source_undo_manager_modified_changed_handler (GtkTextBuffer *buffer, action = NULL; if (gtk_text_buffer_get_modified (buffer) == FALSE) - { + { if (action != NULL) action->mergeable = FALSE; @@ -1178,7 +1178,7 @@ gtk_source_undo_manager_modified_changed_handler (GtkTextBuffer *buffer, return; } - + /* gtk_text_buffer_get_modified (buffer) == TRUE */ g_return_if_fail (um->priv->modified_action == NULL); diff --git a/pidgin/gtksourceundomanager.h b/pidgin/gtksourceundomanager.h index 432312e5c0..2084dfc0e1 100644 --- a/pidgin/gtksourceundomanager.h +++ b/pidgin/gtksourceundomanager.h @@ -4,8 +4,8 @@ * This file is part of GtkSourceView * * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence - * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi - * Copyright (C) 2002, 2003 Paolo Maggi + * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi + * Copyright (C) 2002, 2003 Paolo Maggi * * 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 @@ -19,10 +19,10 @@ * * 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, + * Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02111-1301, USA. * * */ - + #ifndef __GTK_SOURCE_UNDO_MANAGER_H__ #define __GTK_SOURCE_UNDO_MANAGER_H__ @@ -44,7 +44,7 @@ typedef struct _GtkSourceUndoManagerPrivate GtkSourceUndoManagerPrivate; struct _GtkSourceUndoManager { GObject base; - + GtkSourceUndoManagerPrivate *priv; }; @@ -67,14 +67,14 @@ gboolean gtk_source_undo_manager_can_redo (const GtkSourceUndoManager *um); void gtk_source_undo_manager_undo (GtkSourceUndoManager *um); void gtk_source_undo_manager_redo (GtkSourceUndoManager *um); -void gtk_source_undo_manager_begin_not_undoable_action +void gtk_source_undo_manager_begin_not_undoable_action (GtkSourceUndoManager *um); -void gtk_source_undo_manager_end_not_undoable_action +void gtk_source_undo_manager_end_not_undoable_action (GtkSourceUndoManager *um); -gint gtk_source_undo_manager_get_max_undo_levels +gint gtk_source_undo_manager_get_max_undo_levels (GtkSourceUndoManager *um); -void gtk_source_undo_manager_set_max_undo_levels +void gtk_source_undo_manager_set_max_undo_levels (GtkSourceUndoManager *um, gint undo_levels); diff --git a/pidgin/gtkstatus-icon-theme.c b/pidgin/gtkstatus-icon-theme.c new file mode 100644 index 0000000000..590fc4c743 --- /dev/null +++ b/pidgin/gtkstatus-icon-theme.c @@ -0,0 +1,72 @@ +/* + * Status Icon Themes for Pidgin + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include "gtkstatus-icon-theme.h" + +/****************************************************************************** + * Globals + *****************************************************************************/ + +static GObjectClass *parent_class = NULL; + +/****************************************************************************** + * GObject Stuff + *****************************************************************************/ + +static void +pidgin_status_icon_theme_finalize(GObject *obj) +{ + parent_class->finalize(obj); +} + +static void +pidgin_status_icon_theme_class_init(PidginStatusIconThemeClass *klass) +{ + GObjectClass *obj_class = G_OBJECT_CLASS(klass); + + parent_class = g_type_class_peek_parent(klass); + + obj_class->finalize = pidgin_status_icon_theme_finalize; +} + +GType +pidgin_status_icon_theme_get_type(void) +{ + static GType type = 0; + if (type == 0) { + static const GTypeInfo info = { + sizeof (PidginStatusIconThemeClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc)pidgin_status_icon_theme_class_init, /* class_init */ + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (PidginStatusIconTheme), + 0, /* n_preallocs */ + NULL, + NULL, /* value table */ + }; + type = g_type_register_static(PIDGIN_TYPE_ICON_THEME, + "PidginStatusIconTheme", &info, 0); + } + return type; +} diff --git a/pidgin/gtkstatus-icon-theme.h b/pidgin/gtkstatus-icon-theme.h new file mode 100644 index 0000000000..9dbc14c02d --- /dev/null +++ b/pidgin/gtkstatus-icon-theme.h @@ -0,0 +1,71 @@ +/** + * @file status_icon-theme.h Pidgin Icon Theme Class API + */ + +/* pidgin + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#ifndef PIDGIN_STATUS_ICON_THEME_H +#define PIDGIN_STATUS_ICON_THEME_H + +#include <glib-object.h> +#include "gtkicon-theme.h" + +/** + * extends PidginIconTheme (gtkicon-theme.h) + * A pidgin status icon theme. + * This object represents a Pidgin status icon theme. + * + * PidginStatusIconTheme is a PidginIconTheme Object. + */ +typedef struct _PidginStatusIconTheme PidginStatusIconTheme; +typedef struct _PidginStatusIconThemeClass PidginStatusIconThemeClass; + +#define PIDGIN_TYPE_STATUS_ICON_THEME (pidgin_status_icon_theme_get_type ()) +#define PIDGIN_STATUS_ICON_THEME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIDGIN_TYPE_STATUS_ICON_THEME, PidginStatusIconTheme)) +#define PIDGIN_STATUS_ICON_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PIDGIN_TYPE_STATUS_ICON_THEME, PidginStatusIconThemeClass)) +#define PIDGIN_IS_STATUS_ICON_THEME(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PIDGIN_TYPE_STATUS_ICON_THEME)) +#define PIDGIN_IS_STATUS_ICON_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PIDGIN_TYPE_STATUS_ICON_THEME)) +#define PIDGIN_STATUS_ICON_THEME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PIDGIN_TYPE_STATUS_ICON_THEME, PidginStatusIconThemeClass)) + +struct _PidginStatusIconTheme +{ + PidginIconTheme parent; +}; + +struct _PidginStatusIconThemeClass +{ + PidginIconThemeClass parent_class; +}; + +/**************************************************************************/ +/** @name Pidgin Status Icon Theme API */ +/**************************************************************************/ +G_BEGIN_DECLS + +/** + * GObject foo. + * @internal. + */ +GType pidgin_status_icon_theme_get_type(void); + +G_END_DECLS +#endif /* PIDGIN_STATUS_ICON_THEME_H */ diff --git a/pidgin/gtkstatusbox.c b/pidgin/gtkstatusbox.c index 53760b468a..e7c061d931 100644 --- a/pidgin/gtkstatusbox.c +++ b/pidgin/gtkstatusbox.c @@ -1646,7 +1646,7 @@ treeview_button_release_cb(GtkWidget *widget, GdkEventButton *event, PidginStatu pidgin_status_box_popdown (status_box); return TRUE; } else if (ewidget == status_box->toggle_button) { - status_box->popup_in_progress = TRUE; + status_box->popup_in_progress = TRUE; } /* released outside treeview */ @@ -1698,7 +1698,7 @@ treeview_key_press_event(GtkWidget *widget, gtk_tree_path_free (path); return ret; } - } + } } return FALSE; } @@ -1777,9 +1777,9 @@ pidgin_status_box_init (PidginStatusBox *status_box) status_box->vsep = gtk_vseparator_new(); status_box->arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE); - status_box->store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, + status_box->store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, GDK_TYPE_PIXBUF, G_TYPE_BOOLEAN); - status_box->dropdown_store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING, + status_box->dropdown_store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_BOOLEAN); gtk_cell_view_set_model(GTK_CELL_VIEW(status_box->cell_view), GTK_TREE_MODEL(status_box->store)); @@ -2529,7 +2529,7 @@ static void update_size(PidginStatusBox *status_box) { GtkTextBuffer *buffer; GtkTextIter iter; - int wrapped_lines; + int display_lines; int lines; GdkRectangle oneline; int height; @@ -2545,28 +2545,44 @@ static void update_size(PidginStatusBox *status_box) buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(status_box->imhtml)); height = 0; - wrapped_lines = 1; + display_lines = 1; gtk_text_buffer_get_start_iter(buffer, &iter); do { gtk_text_view_get_iter_location(GTK_TEXT_VIEW(status_box->imhtml), &iter, &oneline); height += oneline.height; - wrapped_lines++; - if (wrapped_lines > 4) - break; - } while (gtk_text_view_forward_display_line(GTK_TEXT_VIEW(status_box->imhtml), &iter)); + display_lines++; + } while (display_lines <= 4 && + gtk_text_view_forward_display_line(GTK_TEXT_VIEW(status_box->imhtml), &iter)); + + /* + * This check fixes the case where the last character entered is a + * newline (shift+return). For some reason the + * gtk_text_view_forward_display_line() function doesn't treat this + * like a new line, and so we think the input box only needs to be + * two lines instead of three, for example. So we check if the + * last character was a newline and add some extra height if so. + */ + if (display_lines <= 4 + && gtk_text_iter_backward_char(&iter) + && gtk_text_iter_get_char(&iter) == '\n') + { + gtk_text_view_get_iter_location(GTK_TEXT_VIEW(status_box->imhtml), &iter, &oneline); + height += oneline.height; + display_lines++; + } lines = gtk_text_buffer_get_line_count(buffer); /* Show a maximum of 4 lines */ lines = MIN(lines, 4); - wrapped_lines = MIN(wrapped_lines, 4); + display_lines = MIN(display_lines, 4); pad_top = gtk_text_view_get_pixels_above_lines(GTK_TEXT_VIEW(status_box->imhtml)); pad_bottom = gtk_text_view_get_pixels_below_lines(GTK_TEXT_VIEW(status_box->imhtml)); pad_inside = gtk_text_view_get_pixels_inside_wrap(GTK_TEXT_VIEW(status_box->imhtml)); height += (pad_top + pad_bottom) * lines; - height += (pad_inside) * (wrapped_lines - lines); + height += (pad_inside) * (display_lines - lines); gtk_widget_set_size_request(status_box->vbox, -1, height + PIDGIN_HIG_BOX_SPACE); } diff --git a/pidgin/gtkthemes.c b/pidgin/gtkthemes.c index 22b15a30b0..c194a70ecc 100644 --- a/pidgin/gtkthemes.c +++ b/pidgin/gtkthemes.c @@ -83,7 +83,7 @@ void pidgin_themes_remove_smiley_theme(const char *file) { char *theme_dir = NULL, *last_slash = NULL; g_return_if_fail(NULL != file); - + if (!g_file_test(file, G_FILE_TEST_EXISTS)) return; if ((theme_dir = g_strdup(file)) == NULL) return ; @@ -169,12 +169,12 @@ pidgin_themes_destroy_smiley_theme_smileys(struct smiley_theme *theme) for (wer = theme->list; wer != NULL; wer = theme->list) { while (wer->smileys) { GtkIMHtmlSmiley *uio = wer->smileys->data; - + if (uio->imhtml) { g_signal_handlers_disconnect_matched(uio->imhtml, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, uio); } - + if (uio->icon) g_object_unref(uio->icon); if (g_hash_table_lookup(already_freed, uio->file) == NULL) { diff --git a/pidgin/gtkutils.c b/pidgin/gtkutils.c index 4a1ba44b51..77ff10fa18 100644 --- a/pidgin/gtkutils.c +++ b/pidgin/gtkutils.c @@ -56,6 +56,9 @@ #include "signals.h" #include "util.h" +#include "gtkaccount.h" +#include "gtkprefs.h" + #include "gtkconv.h" #include "gtkdialogs.h" #include "gtkimhtml.h" @@ -71,6 +74,7 @@ typedef struct { } AopMenu; static guint accels_save_timer = 0; +static GList *gnome_url_handlers = NULL; static gboolean url_clicked_idle_cb(gpointer data) @@ -80,10 +84,12 @@ url_clicked_idle_cb(gpointer data) return FALSE; } -static void -url_clicked_cb(GtkWidget *w, const char *uri) +static gboolean +url_clicked_cb(GtkIMHtml *unused, GtkIMHtmlLink *link) { + const char *uri = gtk_imhtml_link_get_url(link); g_idle_add(url_clicked_idle_cb, g_strdup(uri)); + return TRUE; } static GtkIMHtmlFuncs gtkimhtml_cbs = { @@ -102,9 +108,6 @@ pidgin_setup_imhtml(GtkWidget *imhtml) g_return_if_fail(imhtml != NULL); g_return_if_fail(GTK_IS_IMHTML(imhtml)); - g_signal_connect(G_OBJECT(imhtml), "url_clicked", - G_CALLBACK(url_clicked_cb), NULL); - pidgin_themes_smiley_themeize(imhtml); gtk_imhtml_set_funcs(GTK_IMHTML(imhtml), >kimhtml_cbs); @@ -567,7 +570,7 @@ aop_menu_item_new(GtkSizeGroup *sg, GdkPixbuf *pixbuf, const char *lbl, gpointer gtk_widget_show (label); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); - + gtk_container_add(GTK_CONTAINER(item), hbox); gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); @@ -1924,7 +1927,7 @@ destroy_completion_data(GtkWidget *w, PidginCompletionData *data) #endif /* !NEW_STYLE_COMPLETION */ #ifdef NEW_STYLE_COMPLETION -static gboolean screenname_completion_match_func(GtkEntryCompletion *completion, +static gboolean buddyname_completion_match_func(GtkEntryCompletion *completion, const gchar *key, GtkTreeIter *iter, gpointer user_data) { GtkTreeModel *model; @@ -1957,7 +1960,7 @@ static gboolean screenname_completion_match_func(GtkEntryCompletion *completion, return FALSE; } -static gboolean screenname_completion_match_selected_cb(GtkEntryCompletion *completion, +static gboolean buddyname_completion_match_selected_cb(GtkEntryCompletion *completion, GtkTreeModel *model, GtkTreeIter *iter, PidginCompletionData *data) { GValue val; @@ -1983,22 +1986,22 @@ static gboolean screenname_completion_match_selected_cb(GtkEntryCompletion *comp } static void -add_screenname_autocomplete_entry(GtkListStore *store, const char *buddy_alias, const char *contact_alias, - const PurpleAccount *account, const char *screenname) +add_buddyname_autocomplete_entry(GtkListStore *store, const char *buddy_alias, const char *contact_alias, + const PurpleAccount *account, const char *buddyname) { GtkTreeIter iter; gboolean completion_added = FALSE; - gchar *normalized_screenname; + gchar *normalized_buddyname; gchar *tmp; - tmp = g_utf8_normalize(screenname, -1, G_NORMALIZE_DEFAULT); - normalized_screenname = g_utf8_casefold(tmp, -1); + tmp = g_utf8_normalize(buddyname, -1, G_NORMALIZE_DEFAULT); + normalized_buddyname = g_utf8_casefold(tmp, -1); g_free(tmp); /* There's no sense listing things like: 'xxx "xxx"' - when the screenname and buddy alias match. */ - if (buddy_alias && strcmp(buddy_alias, screenname)) { - char *completion_entry = g_strdup_printf("%s \"%s\"", screenname, buddy_alias); + when the name and buddy alias match. */ + if (buddy_alias && strcmp(buddy_alias, buddyname)) { + char *completion_entry = g_strdup_printf("%s \"%s\"", buddyname, buddy_alias); char *tmp2 = g_utf8_normalize(buddy_alias, -1, G_NORMALIZE_DEFAULT); tmp = g_utf8_casefold(tmp2, -1); @@ -2007,8 +2010,8 @@ add_screenname_autocomplete_entry(GtkListStore *store, const char *buddy_alias, gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, completion_entry, - 1, screenname, - 2, normalized_screenname, + 1, buddyname, + 2, normalized_buddyname, 3, tmp, 4, account, -1); @@ -2018,12 +2021,12 @@ add_screenname_autocomplete_entry(GtkListStore *store, const char *buddy_alias, } /* There's no sense listing things like: 'xxx "xxx"' - when the screenname and contact alias match. */ - if (contact_alias && strcmp(contact_alias, screenname)) { + when the name and contact alias match. */ + if (contact_alias && strcmp(contact_alias, buddyname)) { /* We don't want duplicates when the contact and buddy alias match. */ if (!buddy_alias || strcmp(contact_alias, buddy_alias)) { char *completion_entry = g_strdup_printf("%s \"%s\"", - screenname, contact_alias); + buddyname, contact_alias); char *tmp2 = g_utf8_normalize(contact_alias, -1, G_NORMALIZE_DEFAULT); tmp = g_utf8_casefold(tmp2, -1); @@ -2032,8 +2035,8 @@ add_screenname_autocomplete_entry(GtkListStore *store, const char *buddy_alias, gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, completion_entry, - 1, screenname, - 2, normalized_screenname, + 1, buddyname, + 2, normalized_buddyname, 3, tmp, 4, account, -1); @@ -2044,18 +2047,18 @@ add_screenname_autocomplete_entry(GtkListStore *store, const char *buddy_alias, } if (completion_added == FALSE) { - /* Add the buddy's screenname. */ + /* Add the buddy's name. */ gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, - 0, screenname, - 1, screenname, - 2, normalized_screenname, + 0, buddyname, + 1, buddyname, + 2, normalized_buddyname, 3, NULL, 4, account, -1); } - g_free(normalized_screenname); + g_free(normalized_buddyname); } #endif /* NEW_STYLE_COMPLETION */ @@ -2064,8 +2067,8 @@ static void get_log_set_name(PurpleLogSet *set, gpointer value, PidginCompletion PidginFilterBuddyCompletionEntryFunc filter_func = data->filter_func; gpointer user_data = data->filter_func_user_data; - /* 1. Don't show buddies because we will have gotten them already. - * 2. The boxes that use this autocomplete code handle only IMs. */ + /* 1. Don't show buddies because we will have gotten them already. + * 2. The boxes that use this autocomplete code handle only IMs. */ if (!set->buddy && set->type == PURPLE_LOG_IM) { PidginBuddyCompletionEntry entry; entry.is_buddy = FALSE; @@ -2073,7 +2076,7 @@ static void get_log_set_name(PurpleLogSet *set, gpointer value, PidginCompletion if (filter_func(&entry, user_data)) { #ifdef NEW_STYLE_COMPLETION - add_screenname_autocomplete_entry(data->store, + add_buddyname_autocomplete_entry(data->store, NULL, NULL, set->account, set->name); #else /* Steal the name for the GCompletion. */ @@ -2119,7 +2122,7 @@ add_completion_list(PidginCompletionData *data) if (filter_func(&entry, user_data)) { #ifdef NEW_STYLE_COMPLETION - add_screenname_autocomplete_entry(data->store, + add_buddyname_autocomplete_entry(data->store, ((PurpleContact *)cnode)->alias, purple_buddy_get_contact_alias(entry.entry.buddy), entry.entry.buddy->account, @@ -2150,7 +2153,7 @@ add_completion_list(PidginCompletionData *data) } static void -screenname_autocomplete_destroyed_cb(GtkWidget *widget, gpointer data) +buddyname_autocomplete_destroyed_cb(GtkWidget *widget, gpointer data) { g_free(data); purple_signals_disconnect_by_handle(widget); @@ -2162,15 +2165,17 @@ repopulate_autocomplete(gpointer something, gpointer data) add_completion_list(data); } - void pidgin_setup_screenname_autocomplete_with_filter(GtkWidget *entry, GtkWidget *accountopt, PidginFilterBuddyCompletionEntryFunc filter_func, gpointer user_data) { PidginCompletionData *data; #ifdef NEW_STYLE_COMPLETION - /* Store the displayed completion value, the screenname, the UTF-8 normalized & casefolded screenname, - * the UTF-8 normalized & casefolded value for comparison, and the account. */ + /* + * Store the displayed completion value, the buddy name, the UTF-8 + * normalized & casefolded buddy name, the UTF-8 normalized & + * casefolded value for comparison, and the account. + */ GtkListStore *store; GtkEntryCompletion *completion; @@ -2191,15 +2196,15 @@ pidgin_setup_screenname_autocomplete_with_filter(GtkWidget *entry, GtkWidget *ac add_completion_list(data); - /* Sort the completion list by screenname. */ + /* Sort the completion list by buddy name */ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), 1, GTK_SORT_ASCENDING); completion = gtk_entry_completion_new(); - gtk_entry_completion_set_match_func(completion, screenname_completion_match_func, NULL, NULL); + gtk_entry_completion_set_match_func(completion, buddyname_completion_match_func, NULL, NULL); g_signal_connect(G_OBJECT(completion), "match-selected", - G_CALLBACK(screenname_completion_match_selected_cb), data); + G_CALLBACK(buddyname_completion_match_selected_cb), data); gtk_entry_set_completion(GTK_ENTRY(entry), completion); g_object_unref(completion); @@ -2246,7 +2251,7 @@ pidgin_setup_screenname_autocomplete_with_filter(GtkWidget *entry, GtkWidget *ac purple_signal_connect(purple_accounts_get_handle(), "account-removed", entry, PURPLE_CALLBACK(repopulate_autocomplete), data); - g_signal_connect(G_OBJECT(entry), "destroy", G_CALLBACK(screenname_autocomplete_destroyed_cb), data); + g_signal_connect(G_OBJECT(entry), "destroy", G_CALLBACK(buddyname_autocomplete_destroyed_cb), data); } gboolean @@ -3240,7 +3245,7 @@ const char *pidgin_get_dim_grey_string(GtkWidget *widget) { style = gtk_widget_get_style(widget); if (!style) return "dim grey"; - + snprintf(dim_grey_string, sizeof(dim_grey_string), "#%02x%02x%02x", style->text_aa[GTK_STATE_NORMAL].red >> 8, style->text_aa[GTK_STATE_NORMAL].green >> 8, @@ -3480,3 +3485,198 @@ GdkPixbuf * pidgin_pixbuf_from_imgstore(PurpleStoredImage *image) return pixbuf; } +static void url_copy(GtkWidget *w, gchar *url) +{ + GtkClipboard *clipboard; + + clipboard = gtk_widget_get_clipboard(w, GDK_SELECTION_PRIMARY); + gtk_clipboard_set_text(clipboard, url, -1); + + clipboard = gtk_widget_get_clipboard(w, GDK_SELECTION_CLIPBOARD); + gtk_clipboard_set_text(clipboard, url, -1); +} + +static gboolean +link_context_menu(GtkIMHtml *imhtml, GtkIMHtmlLink *link, GtkWidget *menu) +{ + GtkWidget *img, *item; + const char *url; + + url = gtk_imhtml_link_get_url(link); + + /* Open Link */ + img = gtk_image_new_from_stock(GTK_STOCK_JUMP_TO, GTK_ICON_SIZE_MENU); + item = gtk_image_menu_item_new_with_mnemonic(_("_Open Link")); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img); + g_signal_connect_swapped(G_OBJECT(item), "activate", G_CALLBACK(gtk_imhtml_link_activate), link); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + + /* Copy Link Location */ + img = gtk_image_new_from_stock(GTK_STOCK_COPY, GTK_ICON_SIZE_MENU); + item = gtk_image_menu_item_new_with_mnemonic(_("_Copy Link Location")); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img); + g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(url_copy), (gpointer)url); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + + return TRUE; +} + +static gboolean +copy_email_address(GtkIMHtml *imhtml, GtkIMHtmlLink *link, GtkWidget *menu) +{ + GtkWidget *img, *item; + const char *text; + char *address; +#define MAILTOSIZE (sizeof("mailto:") - 1) + + text = gtk_imhtml_link_get_url(link); + g_return_val_if_fail(text && strlen(text) > MAILTOSIZE, FALSE); + address = (char*)text + MAILTOSIZE; + + /* Copy Email Address */ + img = gtk_image_new_from_stock(GTK_STOCK_COPY, GTK_ICON_SIZE_MENU); + item = gtk_image_menu_item_new_with_mnemonic(_("_Copy Email Address")); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img); + g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(url_copy), address); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + + return TRUE; +} + +/* XXX: The following two functions are for demonstration purposes only! */ +static gboolean +open_dialog(GtkIMHtml *imhtml, GtkIMHtmlLink *link) +{ + const char *url; + const char *str; + + url = gtk_imhtml_link_get_url(link); + if (!url || strlen(url) < sizeof("open://")) + return FALSE; + + str = url + sizeof("open://") - 1; + + if (strcmp(str, "accounts") == 0) + pidgin_accounts_window_show(); + else if (strcmp(str, "prefs") == 0) + pidgin_prefs_show(); + else + return FALSE; + return TRUE; +} + +static gboolean +dummy(GtkIMHtml *imhtml, GtkIMHtmlLink *link, GtkWidget *menu) +{ + return TRUE; +} + +static gboolean +register_gnome_url_handlers(void) +{ + char *tmp; + char *err; + char *c; + char *start; + + tmp = g_find_program_in_path("gconftool-2"); + if (tmp == NULL) + return FALSE; + + tmp = NULL; + if (!g_spawn_command_line_sync("gconftool-2 --all-dirs /desktop/gnome/url-handlers", + &tmp, &err, NULL, NULL)) + { + g_free(tmp); + g_free(err); + g_return_val_if_reached(FALSE); + } + g_free(err); + err = NULL; + + for (c = start = tmp ; *c ; c++) + { + /* Skip leading spaces. */ + if (c == start && *c == ' ') + start = c + 1; + else if (*c == '\n') + { + *c = '\0'; + if (g_str_has_prefix(start, "/desktop/gnome/url-handlers/")) + { + char *cmd; + char *tmp2 = NULL; + char *protocol; + + /* If there is an enabled boolean, honor it. */ + cmd = g_strdup_printf("gconftool-2 -g %s/enabled", start); + if (g_spawn_command_line_sync(cmd, &tmp2, &err, NULL, NULL)) + { + g_free(err); + err = NULL; + if (!strcmp(tmp2, "false\n")) + { + g_free(tmp2); + g_free(cmd); + start = c + 1; + continue; + } + } + g_free(cmd); + g_free(tmp2); + + start += sizeof("/desktop/gnome/url-handlers/") - 1; + + protocol = g_strdup_printf("%s:", start); + gnome_url_handlers = g_list_prepend(gnome_url_handlers, protocol); + gtk_imhtml_class_register_protocol(protocol, url_clicked_cb, link_context_menu); + } + start = c + 1; + } + } + g_free(tmp); + + return (gnome_url_handlers != NULL); +} + +void pidgin_utils_init(void) +{ + gtk_imhtml_class_register_protocol("http://", url_clicked_cb, link_context_menu); + gtk_imhtml_class_register_protocol("https://", url_clicked_cb, link_context_menu); + gtk_imhtml_class_register_protocol("ftp://", url_clicked_cb, link_context_menu); + gtk_imhtml_class_register_protocol("gopher://", url_clicked_cb, link_context_menu); + gtk_imhtml_class_register_protocol("mailto:", url_clicked_cb, copy_email_address); + + /* Example custom URL handler. */ + gtk_imhtml_class_register_protocol("open://", open_dialog, dummy); + + /* If we're under GNOME, try registering the system URL handlers. */ + if (purple_running_gnome()) + register_gnome_url_handlers(); +} + +void pidgin_utils_uninit(void) +{ + gtk_imhtml_class_register_protocol("open://", NULL, NULL); + + /* If we have GNOME handlers registered, unregister them. */ + if (gnome_url_handlers) + { + GList *l; + for (l = gnome_url_handlers ; l ; l = l->next) + { + gtk_imhtml_class_register_protocol((char *)l->data, NULL, NULL); + g_free(l->data); + } + g_list_free(gnome_url_handlers); + gnome_url_handlers = NULL; + return; + } + + gtk_imhtml_class_register_protocol("http://", NULL, NULL); + gtk_imhtml_class_register_protocol("https://", NULL, NULL); + gtk_imhtml_class_register_protocol("ftp://", NULL, NULL); + gtk_imhtml_class_register_protocol("mailto:", NULL, NULL); + gtk_imhtml_class_register_protocol("gopher://", NULL, NULL); +} + diff --git a/pidgin/gtkutils.h b/pidgin/gtkutils.h index ace6bd4d2e..fb03cec1d0 100644 --- a/pidgin/gtkutils.h +++ b/pidgin/gtkutils.h @@ -136,7 +136,7 @@ GtkWidget *pidgin_create_dialog(const char *title, guint border_width, const cha * Retrieves the main content box (vbox) from a pidgin dialog window * * @param dialog The dialog window - * @param homogeneous TRUE if all children are to be given equal space allotments. + * @param homogeneous TRUE if all children are to be given equal space allotments. * @param spacing the number of pixels to place by default between children * * @since 2.4.0 @@ -184,8 +184,8 @@ GtkWidget *pidgin_dialog_get_action_area(GtkDialog *dialog); void pidgin_toggle_sensitive(GtkWidget *widget, GtkWidget *to_toggle); /** - * Checks if text has been entered into a GtkTextEntry widget. If - * so, the GTK_RESPONSE_OK on the given dialog is set to TRUE. + * Checks if text has been entered into a GtkTextEntry widget. If + * so, the GTK_RESPONSE_OK on the given dialog is set to TRUE. * Otherwise GTK_RESPONSE_OK is set to FALSE. * * @param entry The text entry widget. @@ -355,7 +355,7 @@ void pidgin_account_option_menu_set_selected(GtkWidget *optmenu, PurpleAccount * * * @param entry The GtkEntry on which to setup autocomplete. * @param optmenu A menu for accounts, returned by gaim_gtk_account_option_menu_new(). - * If @a optmenu is not @c NULL, it'll be updated when a screenname is chosen + * If @a optmenu is not @c NULL, it'll be updated when a username is chosen * from the autocomplete list. * @param filter_func A function for checking if an autocomplete entry * should be shown. This can be @c NULL. @@ -364,7 +364,7 @@ void pidgin_account_option_menu_set_selected(GtkWidget *optmenu, PurpleAccount * void pidgin_setup_screenname_autocomplete_with_filter(GtkWidget *entry, GtkWidget *optmenu, PidginFilterBuddyCompletionEntryFunc filter_func, gpointer user_data); /** - * The default filter function for screenname autocomplete. + * The default filter function for username autocomplete. * * @param completion_entry The completion entry to filter. * @param all_accounts If this is @c FALSE, only the autocompletion entries @@ -385,9 +385,9 @@ gboolean pidgin_screenname_autocomplete_default_filter(const PidginBuddyCompleti * @param entry The GtkEntry on which to setup autocomplete. * @param optmenu A menu for accounts, returned by * pidgin_account_option_menu_new(). If @a optmenu is not @c - * NULL, it'll be updated when a screenname is chosen from the + * NULL, it'll be updated when a username is chosen from the * autocomplete list. - * @param all Whether to include screennames from disconnected accounts. + * @param all Whether to include usernames from disconnected accounts. */ void pidgin_setup_screenname_autocomplete(GtkWidget *entry, GtkWidget *optmenu, gboolean all); @@ -473,7 +473,7 @@ gboolean pidgin_parse_x_im_contact(const char *msg, gboolean all_accounts, char **ret_alias); /** - * Sets an ATK name for a given widget. Also sets the labelled-by + * Sets an ATK name for a given widget. Also sets the labelled-by * and label-for ATK relationships. * * @param w The widget that we want to name. @@ -509,10 +509,10 @@ void pidgin_menu_position_func_helper(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer data); /** - * A valid GtkMenuPositionFunc. This is used to determine where - * to draw context menus when the menu is activated with the - * keyboard (shift+F10). If the menu is activated with the mouse, - * then you should just use GTK's built-in position function, + * A valid GtkMenuPositionFunc. This is used to determine where + * to draw context menus when the menu is activated with the + * keyboard (shift+F10). If the menu is activated with the mouse, + * then you should just use GTK's built-in position function, * because it does a better job of positioning the menu. * * @param menu The menu we are positioning. @@ -612,13 +612,13 @@ void pidgin_clear_cursor(GtkWidget *widget); * @param parent The parent window * @param callback The callback to call when the window is closed. If the user chose an icon, the char* argument will point to its path * @param data Data to pass to @a callback - * @return The file dialog + * @return The file dialog */ GtkWidget *pidgin_buddy_icon_chooser_new(GtkWindow *parent, void(*callback)(const char*,gpointer), gpointer data); /** * Converts a buddy icon to the required size and format - * + * * @param plugin The prpl to convert the icon * @param path The path of a file to convert * @param len If not @c NULL, the length of the returned data will be set here. @@ -706,7 +706,7 @@ gboolean pidgin_tree_view_search_equal_func(GtkTreeModel *model, gint column, const gchar *key, GtkTreeIter *iter, gpointer data); /** - * Sets or resets a window to 'urgent,' by setting the URGENT hint in X + * Sets or resets a window to 'urgent,' by setting the URGENT hint in X * or blinking in the win32 taskbar * * @param window The window to draw attention to @@ -792,7 +792,8 @@ void pidgin_text_combo_box_entry_set_text(GtkWidget *widget, const char *text); * * @param window The window to make transient. * - * @return Whether the window was made transient or not. + * @return Whether the window was made transient or not. + * * @since 2.4.0 */ gboolean pidgin_auto_parent_window(GtkWidget *window); @@ -818,9 +819,24 @@ GtkWidget *pidgin_add_widget_to_vbox(GtkBox *vbox, const char *widget_label, Gtk * @param image A PurpleStoredImage. * * @return A GdkPixbuf created from the stored image. + * * @since 2.5.0 */ -GdkPixbuf * pidgin_pixbuf_from_imgstore(PurpleStoredImage *image); +GdkPixbuf *pidgin_pixbuf_from_imgstore(PurpleStoredImage *image); + +/** + * Initialize some utility functions. + * + * @since 2.6.0 + */ +void pidgin_utils_init(void); + +/** + * Uninitialize some utility functions. + * + * @since 2.6.0 + */ +void pidgin_utils_uninit(void); #endif /* _PIDGINUTILS_H_ */ diff --git a/pidgin/gtkwhiteboard.c b/pidgin/gtkwhiteboard.c index 15bc801f0c..38c045f5de 100644 --- a/pidgin/gtkwhiteboard.c +++ b/pidgin/gtkwhiteboard.c @@ -857,7 +857,7 @@ static void color_select_dialog(GtkWidget *widget, PidginWhiteboard *gtkwb) { GdkColor color; GtkColorSelectionDialog *dialog; - + dialog = (GtkColorSelectionDialog *)gtk_color_selection_dialog_new(_("Select color")); g_signal_connect(G_OBJECT(dialog->colorsel), "color-changed", diff --git a/pidgin/pidgincombobox.c b/pidgin/pidgincombobox.c index 736021fba1..e3c5f188be 100644 --- a/pidgin/pidgincombobox.c +++ b/pidgin/pidgincombobox.c @@ -112,7 +112,7 @@ struct _GtkComboBoxPrivate /* While debugging this evil code, I have learned that * there are actually 4 modes to this widget, which can * be characterized as follows - * + * * 1) menu mode, no child added * * tree_view -> NULL @@ -127,9 +127,9 @@ struct _GtkComboBoxPrivate * popup_frame -> NULL * * 2) menu mode, child added - * + * * tree_view -> NULL - * cell_view -> NULL + * cell_view -> NULL * cell_view_frame -> NULL * button -> GtkToggleButton set_parent to combo * box -> NULL @@ -140,7 +140,7 @@ struct _GtkComboBoxPrivate * popup_frame -> NULL * * 3) list mode, no child added - * + * * tree_view -> GtkTreeView, child of popup_frame * cell_view -> GtkCellView, regular child * cell_view_frame -> GtkFrame, set parent to combo @@ -164,7 +164,7 @@ struct _GtkComboBoxPrivate * popup_widget -> tree_view * popup_window -> GtkWindow * popup_frame -> GtkFrame, child of popup_window - * + * */ enum { @@ -285,9 +285,9 @@ static void gtk_combo_box_model_row_changed (GtkTreeModel *model, gpointer data); /* list */ -static void gtk_combo_box_list_position (GtkComboBox *combo_box, - gint *x, - gint *y, +static void gtk_combo_box_list_position (GtkComboBox *combo_box, + gint *x, + gint *y, gint *width, gint *height); @@ -641,7 +641,7 @@ gtk_combo_box_state_changed (GtkWidget *widget, if (GTK_WIDGET_REALIZED (widget)) { if (combo_box->priv->tree_view && combo_box->priv->cell_view) - gtk_cell_view_set_background_color (GTK_CELL_VIEW (combo_box->priv->cell_view), + gtk_cell_view_set_background_color (GTK_CELL_VIEW (combo_box->priv->cell_view), &widget->style->base[GTK_WIDGET_STATE (widget)]); } @@ -694,7 +694,7 @@ gtk_combo_box_style_set (GtkWidget *widget, gtk_combo_box_check_appearance (combo_box); if (combo_box->priv->tree_view && combo_box->priv->cell_view) - gtk_cell_view_set_background_color (GTK_CELL_VIEW (combo_box->priv->cell_view), + gtk_cell_view_set_background_color (GTK_CELL_VIEW (combo_box->priv->cell_view), &widget->style->base[GTK_WIDGET_STATE (widget)]); } @@ -725,7 +725,7 @@ gtk_combo_box_add (GtkContainer *container, GTK_BIN (container)->child = NULL; gtk_widget_queue_resize (GTK_WIDGET (container)); } - + gtk_widget_set_parent (widget, GTK_WIDGET (container)); GTK_BIN (container)->child = widget; @@ -770,7 +770,7 @@ gtk_combo_box_remove (GtkContainer *container, appears_as_list = FALSE; else appears_as_list = TRUE; - + if (appears_as_list) gtk_combo_box_list_destroy (combo_box); else if (GTK_IS_MENU (combo_box->priv->popup_widget)) @@ -785,7 +785,7 @@ gtk_combo_box_remove (GtkContainer *container, combo_box->priv->cell_view = gtk_cell_view_new (); gtk_widget_set_parent (combo_box->priv->cell_view, GTK_WIDGET (container)); GTK_BIN (container)->child = combo_box->priv->cell_view; - + gtk_widget_show (combo_box->priv->cell_view); gtk_cell_view_set_model (GTK_CELL_VIEW (combo_box->priv->cell_view), combo_box->priv->model); @@ -856,7 +856,7 @@ gtk_combo_box_detacher (GtkWidget *widget, g_signal_handlers_disconnect_by_func (menu, gtk_combo_box_menu_hide, combo_box); - + combo_box->priv->popup_widget = NULL; } @@ -940,12 +940,12 @@ gtk_combo_box_menu_position_below (GtkMenu *menu, GdkScreen *screen; gint monitor_num; GdkRectangle monitor; - + /* FIXME: is using the size request here broken? */ child = GTK_BIN (combo_box)->child; - + gdk_window_get_origin (child->window, &sx, &sy); - + if (GTK_WIDGET_NO_WINDOW (child)) { sx += child->allocation.x; @@ -961,20 +961,20 @@ gtk_combo_box_menu_position_below (GtkMenu *menu, *y = sy; screen = gtk_widget_get_screen (GTK_WIDGET (combo_box)); - monitor_num = gdk_screen_get_monitor_at_window (screen, + monitor_num = gdk_screen_get_monitor_at_window (screen, GTK_WIDGET (combo_box)->window); gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor); - + if (*x < monitor.x) *x = monitor.x; else if (*x + req.width > monitor.x + monitor.width) *x = monitor.x + monitor.width - req.width; - + if (monitor.y + monitor.height - *y - child->allocation.height >= req.height) *y += child->allocation.height; else if (*y - monitor.y >= req.height) *y -= req.height; - else if (monitor.y + monitor.height - *y - child->allocation.height > *y - monitor.y) + else if (monitor.y + monitor.height - *y - child->allocation.height > *y - monitor.y) *y += child->allocation.height; else *y -= req.height; @@ -1001,7 +1001,7 @@ gtk_combo_box_menu_position_over (GtkMenu *menu, gint menu_width; g_return_if_fail (GTK_IS_COMBO_BOX (user_data)); - + combo_box = GTK_COMBO_BOX (user_data); widget = GTK_WIDGET (combo_box); @@ -1042,7 +1042,7 @@ gtk_combo_box_menu_position_over (GtkMenu *menu, /* Clamp the position on screen */ screen_width = gdk_screen_get_width (gtk_widget_get_screen (widget)); - + if (menu_xpos < 0) menu_xpos = 0; else if ((menu_xpos + menu_width) > screen_width) @@ -1066,13 +1066,13 @@ gtk_combo_box_menu_position (GtkMenu *menu, combo_box = GTK_COMBO_BOX (user_data); - if (combo_box->priv->wrap_width > 0 || combo_box->priv->cell_view == NULL) + if (combo_box->priv->wrap_width > 0 || combo_box->priv->cell_view == NULL) gtk_combo_box_menu_position_below (menu, x, y, push_in, user_data); else { menu_item = gtk_menu_get_active (GTK_MENU (combo_box->priv->popup_widget)); if (menu_item) - gtk_menu_shell_select_item (GTK_MENU_SHELL (combo_box->priv->popup_widget), + gtk_menu_shell_select_item (GTK_MENU_SHELL (combo_box->priv->popup_widget), menu_item); gtk_combo_box_menu_position_over (menu, x, y, push_in, user_data); @@ -1082,9 +1082,9 @@ gtk_combo_box_menu_position (GtkMenu *menu, #endif /* Gtk 2.2 */ static void -gtk_combo_box_list_position (GtkComboBox *combo_box, - gint *x, - gint *y, +gtk_combo_box_list_position (GtkComboBox *combo_box, + gint *x, + gint *y, gint *width, gint *height) { @@ -1095,7 +1095,7 @@ gtk_combo_box_list_position (GtkComboBox *combo_box, gint monitor_num; GdkRectangle monitor; #endif - + sample = GTK_BIN (combo_box)->child; *width = sample->allocation.width; @@ -1117,30 +1117,30 @@ gtk_combo_box_list_position (GtkComboBox *combo_box, *x += sample->allocation.x; *y += sample->allocation.y; } - + #if GTK_CHECK_VERSION(2,2,0) screen = gtk_widget_get_screen (GTK_WIDGET (combo_box)); - monitor_num = gdk_screen_get_monitor_at_window (screen, + monitor_num = gdk_screen_get_monitor_at_window (screen, GTK_WIDGET (combo_box)->window); gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor); - + if (*x < monitor.x) *x = monitor.x; else if (*x + *width > monitor.x + monitor.width) *x = monitor.x + monitor.width - *width; - + if (*y + sample->allocation.height + *height <= monitor.y + monitor.height) *y += sample->allocation.height; else *y -= *height; #endif /* Gtk 2.2 */ -} +} /** * gtk_combo_box_popup: * @combo_box: a #GtkComboBox - * - * Pops up the menu or dropdown list of @combo_box. + * + * Pops up the menu or dropdown list of @combo_box. * * This function is mostly intended for use by accessibility technologies; * applications should have little use for it. @@ -1151,7 +1151,7 @@ void gtk_combo_box_popup (GtkComboBox *combo_box) { gint x, y, width, height; - + g_return_if_fail (GTK_IS_COMBO_BOX (combo_box)); if (GTK_WIDGET_MAPPED (combo_box->priv->popup_widget)) @@ -1172,7 +1172,7 @@ gtk_combo_box_popup (GtkComboBox *combo_box) gtk_widget_set_size_request (combo_box->priv->popup_widget, MAX (width, requisition.width), -1); } - + gtk_menu_popup (GTK_MENU (combo_box->priv->popup_widget), NULL, NULL, #if GTK_CHECK_VERSION(2,2,0) @@ -1187,7 +1187,7 @@ gtk_combo_box_popup (GtkComboBox *combo_box) gtk_widget_show_all (combo_box->priv->popup_frame); gtk_combo_box_list_position (combo_box, &x, &y, &width, &height); - gtk_widget_set_size_request (combo_box->priv->popup_window, width, -1); + gtk_widget_set_size_request (combo_box->priv->popup_window, width, -1); gtk_window_move (GTK_WINDOW (combo_box->priv->popup_window), x, y); /* popup */ @@ -1217,7 +1217,7 @@ gtk_combo_box_popup (GtkComboBox *combo_box) /** * gtk_combo_box_popdown: * @combo_box: a #GtkComboBox - * + * * Hides the menu or dropdown list of @combo_box. * * This function is mostly intended for use by accessibility technologies; @@ -1305,7 +1305,7 @@ gtk_combo_box_remeasure (GtkComboBox *combo_box) GtkRequisition req; if (combo_box->priv->cell_view) - gtk_cell_view_get_size_of_row (GTK_CELL_VIEW (combo_box->priv->cell_view), + gtk_cell_view_get_size_of_row (GTK_CELL_VIEW (combo_box->priv->cell_view), path, &req); else req.width = 0; @@ -1335,7 +1335,7 @@ gtk_combo_box_size_request (GtkWidget *widget, bin_req.width = MAX (bin_req.width, combo_box->priv->width); gtk_combo_box_check_appearance (combo_box); - + if (!combo_box->priv->tree_view) { /* menu mode */ @@ -1454,10 +1454,10 @@ gtk_combo_box_size_allocate (GtkWidget *widget, if (is_rtl) { child.x += req.width; - child.width = MAX(1, allocation->x + allocation->width + child.width = MAX(1, allocation->x + allocation->width - (border_width + 1 + xthickness + 2) - child.x); } - else + else { child.width = child.x; child.x = allocation->x + border_width + 1 + xthickness + 2; @@ -1623,16 +1623,16 @@ gtk_combo_box_scroll_event (GtkWidget *widget, GtkComboBox *combo_box = GTK_COMBO_BOX (widget); gint index; gint items; - + index = gtk_combo_box_get_active (combo_box); if (index != -1) { items = gtk_tree_model_iter_n_children (combo_box->priv->model, NULL); - + if (event->direction == GDK_SCROLL_UP) index--; - else + else index++; gtk_combo_box_set_active (combo_box, CLAMP (index, 0, items - 1)); @@ -1694,15 +1694,15 @@ gtk_combo_box_menu_setup (GtkComboBox *combo_box, GTK_BIN (combo_box)->child->parent); combo_box->priv->box = gtk_hbox_new (FALSE, 0); - gtk_container_add (GTK_CONTAINER (combo_box->priv->button), + gtk_container_add (GTK_CONTAINER (combo_box->priv->button), combo_box->priv->box); combo_box->priv->separator = gtk_vseparator_new (); - gtk_container_add (GTK_CONTAINER (combo_box->priv->box), + gtk_container_add (GTK_CONTAINER (combo_box->priv->box), combo_box->priv->separator); combo_box->priv->arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE); - gtk_container_add (GTK_CONTAINER (combo_box->priv->box), + gtk_container_add (GTK_CONTAINER (combo_box->priv->box), combo_box->priv->arrow); gtk_widget_show_all (combo_box->priv->button); @@ -1792,7 +1792,7 @@ gtk_combo_box_menu_destroy (GtkComboBox *combo_box) /* unparent will remove our latest ref */ gtk_widget_unparent (combo_box->priv->button); - + combo_box->priv->box = NULL; combo_box->priv->button = NULL; combo_box->priv->arrow = NULL; @@ -1895,17 +1895,17 @@ gtk_combo_box_relayout_item (GtkComboBox *combo_box, item = nth->data; if (nth->prev) last = nth->prev->data; - else + else last = NULL; g_list_free (list); gtk_combo_box_item_get_size (combo_box, index, &cols, &rows); - + if (combo_box->priv->col_column == -1 && combo_box->priv->row_column == -1 && last) { - gtk_container_child_get (GTK_CONTAINER (menu), + gtk_container_child_get (GTK_CONTAINER (menu), last, "right_attach", ¤t_col, "top_attach", ¤t_row, @@ -1926,12 +1926,12 @@ gtk_combo_box_relayout_item (GtkComboBox *combo_box, current_col = 0; current_row++; } - + if (!menu_occupied (GTK_MENU (menu), current_col, current_col + cols, current_row, current_row + rows)) break; - + current_col++; } } @@ -1949,19 +1949,19 @@ gtk_combo_box_relayout (GtkComboBox *combo_box) GtkWidget *menu; menu = combo_box->priv->popup_widget; - + /* do nothing unless we are in menu style and realized */ if (combo_box->priv->tree_view || !GTK_IS_MENU_SHELL (menu)) return; - + /* get rid of all children */ list = gtk_container_get_children (GTK_CONTAINER (menu)); - + for (j = g_list_last (list); j; j = j->prev) gtk_container_remove (GTK_CONTAINER (menu), j->data); - + g_list_free (list); - + /* and relayout */ gtk_combo_box_menu_fill (combo_box); } @@ -1980,7 +1980,7 @@ gtk_combo_box_menu_button_press (GtkWidget *widget, if (event->type == GDK_BUTTON_PRESS && event->button == 1) { combo_box->priv->popup_in_progress = TRUE; - + gtk_menu_set_active (GTK_MENU (combo_box->priv->popup_widget), combo_box->priv->active_item); @@ -2053,7 +2053,7 @@ gtk_combo_box_model_row_deleted (GtkTreeModel *model, if (!combo_box->priv->tree_view) gtk_combo_box_menu_row_deleted (model, path, user_data); - + if (index == combo_box->priv->active_item) { gint items = gtk_tree_model_iter_n_children (model, NULL); @@ -2090,7 +2090,7 @@ gtk_combo_box_model_rows_reordered (GtkTreeModel *model, if (!combo_box->priv->tree_view) gtk_combo_box_menu_rows_reordered (model, path, iter, new_order, user_data); } - + static void gtk_combo_box_model_row_changed (GtkTreeModel *model, GtkTreePath *path, @@ -2103,7 +2103,7 @@ gtk_combo_box_model_row_changed (GtkTreeModel *model, if (index == combo_box->priv->active_item && combo_box->priv->cell_view) gtk_widget_queue_resize (GTK_WIDGET (combo_box->priv->cell_view)); - + if (combo_box->priv->tree_view) gtk_combo_box_list_row_changed (model, path, iter, user_data); else @@ -2174,7 +2174,7 @@ gtk_combo_box_menu_rows_reordered (GtkTreeModel *model, gtk_combo_box_relayout (combo_box); } - + static void gtk_combo_box_menu_row_changed (GtkTreeModel *model, GtkTreePath *path, @@ -2238,12 +2238,12 @@ gtk_combo_box_list_setup (GtkComboBox *combo_box) gtk_frame_set_shadow_type (GTK_FRAME (combo_box->priv->cell_view_frame), GTK_SHADOW_IN); - gtk_cell_view_set_background_color (GTK_CELL_VIEW (combo_box->priv->cell_view), + gtk_cell_view_set_background_color (GTK_CELL_VIEW (combo_box->priv->cell_view), >K_WIDGET (combo_box)->style->base[GTK_WIDGET_STATE (combo_box)]); combo_box->priv->box = gtk_event_box_new (); /* - gtk_event_box_set_visible_window (GTK_EVENT_BOX (combo_box->priv->box), + gtk_event_box_set_visible_window (GTK_EVENT_BOX (combo_box->priv->box), FALSE); */ @@ -2253,7 +2253,7 @@ gtk_combo_box_list_setup (GtkComboBox *combo_box) gtk_widget_show_all (combo_box->priv->cell_view_frame); g_signal_connect (combo_box->priv->box, "button_press_event", - G_CALLBACK (gtk_combo_box_list_button_pressed), + G_CALLBACK (gtk_combo_box_list_button_pressed), combo_box); } @@ -2269,7 +2269,7 @@ gtk_combo_box_list_setup (GtkComboBox *combo_box) if (combo_box->priv->model) gtk_tree_view_set_model (GTK_TREE_VIEW (combo_box->priv->tree_view), combo_box->priv->model); - + g_signal_connect (combo_box->priv->tree_view, "button_press_event", G_CALLBACK (gtk_combo_box_list_button_pressed), combo_box); @@ -2494,7 +2494,7 @@ gtk_combo_box_key_press (GtkWidget *widget, if (combo_box->priv->model) items = gtk_tree_model_iter_n_children (combo_box->priv->model, NULL); - if ((event->keyval == GDK_Down || event->keyval == GDK_KP_Down) && + if ((event->keyval == GDK_Down || event->keyval == GDK_KP_Down) && state == GDK_MOD1_MASK) { gtk_combo_box_popup (combo_box); @@ -2502,7 +2502,7 @@ gtk_combo_box_key_press (GtkWidget *widget, return TRUE; } - switch (event->keyval) + switch (event->keyval) { case GDK_Down: case GDK_KP_Down: @@ -2514,20 +2514,20 @@ gtk_combo_box_key_press (GtkWidget *widget, break; case GDK_Page_Up: case GDK_KP_Page_Up: - case GDK_Home: + case GDK_Home: case GDK_KP_Home: new_index = 0; break; case GDK_Page_Down: case GDK_KP_Page_Down: - case GDK_End: + case GDK_End: case GDK_KP_End: new_index = items - 1; break; default: return FALSE; } - + if (items > 0) gtk_combo_box_set_active (combo_box, CLAMP (new_index, 0, items - 1)); @@ -2542,14 +2542,14 @@ gtk_combo_box_menu_key_press (GtkWidget *widget, GtkComboBox *combo_box = GTK_COMBO_BOX (data); guint state = event->state & gtk_accelerator_get_default_mod_mask (); - if ((event->keyval == GDK_Up || event->keyval == GDK_KP_Up) && + if ((event->keyval == GDK_Up || event->keyval == GDK_KP_Up) && state == GDK_MOD1_MASK) { gtk_combo_box_popdown (combo_box); return TRUE; } - + return FALSE; } @@ -2562,35 +2562,35 @@ gtk_combo_box_list_key_press (GtkWidget *widget, guint state = event->state & gtk_accelerator_get_default_mod_mask (); if (event->keyval == GDK_Escape || - ((event->keyval == GDK_Up || event->keyval == GDK_KP_Up) && + ((event->keyval == GDK_Up || event->keyval == GDK_KP_Up) && state == GDK_MOD1_MASK)) { /* reset active item -- this is incredibly lame and ugly */ gtk_combo_box_set_active (combo_box, gtk_combo_box_get_active (combo_box)); - + gtk_combo_box_popdown (combo_box); - + return TRUE; } - + if (event->keyval == GDK_Return || event->keyval == GDK_KP_Enter || - event->keyval == GDK_space || event->keyval == GDK_KP_Space) + event->keyval == GDK_space || event->keyval == GDK_KP_Space) { gboolean ret = FALSE; GtkTreeIter iter; GtkTreeModel *model = NULL; - + if (combo_box->priv->model) { GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (combo_box->priv->tree_view)); - + ret = gtk_tree_selection_get_selected (sel, &model, &iter); } if (ret) { GtkTreePath *path; - + path = gtk_tree_model_get_path (model, &iter); if (path) { @@ -2600,7 +2600,7 @@ gtk_combo_box_list_key_press (GtkWidget *widget, } gtk_combo_box_popdown (combo_box); - + return TRUE; } @@ -2620,7 +2620,7 @@ gtk_combo_box_list_row_changed (GtkTreeModel *model, if (width > combo_box->priv->width) { - if (combo_box->priv->cell_view) + if (combo_box->priv->cell_view) { gtk_widget_set_size_request (combo_box->priv->cell_view, width, -1); gtk_widget_queue_resize (combo_box->priv->cell_view); @@ -2742,11 +2742,11 @@ gtk_combo_box_cell_layout_clear (GtkCellLayout *layout) GtkWidget *menu; GtkComboBox *combo_box; GSList *i; - + g_return_if_fail (GTK_IS_COMBO_BOX (layout)); combo_box = GTK_COMBO_BOX (layout); - + if (combo_box->priv->cell_view) gtk_cell_layout_clear (GTK_CELL_LAYOUT (combo_box->priv->cell_view)); @@ -3082,7 +3082,7 @@ gtk_combo_box_set_wrap_width (GtkComboBox *combo_box, gtk_combo_box_check_appearance (combo_box); gtk_combo_box_relayout (combo_box); - + g_object_notify (G_OBJECT (combo_box), "wrap_width"); } } @@ -3112,9 +3112,9 @@ gtk_combo_box_set_row_span_column (GtkComboBox *combo_box, if (row_span != combo_box->priv->row_column) { combo_box->priv->row_column = row_span; - + gtk_combo_box_relayout (combo_box); - + g_object_notify (G_OBJECT (combo_box), "row_span_column"); } } @@ -3144,7 +3144,7 @@ gtk_combo_box_set_column_span_column (GtkComboBox *combo_box, if (column_span != combo_box->priv->col_column) { combo_box->priv->col_column = column_span; - + gtk_combo_box_relayout (combo_box); g_object_notify (G_OBJECT (combo_box), "column_span_column"); @@ -3191,7 +3191,7 @@ gtk_combo_box_set_active (GtkComboBox *combo_box, if (combo_box->priv->active_item == index_) return; - + gtk_combo_box_set_active_internal (combo_box, index_); } @@ -3252,9 +3252,9 @@ gtk_combo_box_set_active_internal (GtkComboBox *combo_box, * gtk_combo_box_get_active_iter: * @combo_box: A #GtkComboBox * @iter: The uninitialized #GtkTreeIter. - * + * * Sets @iter to point to the current active item, if it exists. - * + * * Return value: %TRUE, if @iter was set * * Since: 2.4 @@ -3293,10 +3293,10 @@ gtk_combo_box_get_active_iter (GtkComboBox *combo_box, * gtk_combo_box_set_active_iter: * @combo_box: A #GtkComboBox * @iter: The #GtkTreeIter. - * - * Sets the current active item to be the one referenced by @iter. + * + * Sets the current active item to be the one referenced by @iter. * @iter must correspond to a path of depth one. - * + * * Since: 2.4 **/ void @@ -3310,7 +3310,7 @@ gtk_combo_box_set_active_iter (GtkComboBox *combo_box, path = gtk_tree_model_get_path (gtk_combo_box_get_model (combo_box), iter); g_return_if_fail (path != NULL); g_return_if_fail (gtk_tree_path_get_depth (path) == 1); - + gtk_combo_box_set_active (combo_box, gtk_tree_path_get_indices (path)[0]); gtk_tree_path_free (path); } @@ -3320,11 +3320,11 @@ gtk_combo_box_set_active_iter (GtkComboBox *combo_box, * @combo_box: A #GtkComboBox. * @model: A #GtkTreeModel. * - * Sets the model used by @combo_box to be @model. Will unset a previously set + * Sets the model used by @combo_box to be @model. Will unset a previously set * model (if applicable). If @model is %NULL, then it will unset the model. - * - * Note that this function does not clear the cell renderers, you have to - * call gtk_combo_box_cell_layout_clear() yourself if you need to set up + * + * Note that this function does not clear the cell renderers, you have to + * call gtk_combo_box_cell_layout_clear() yourself if you need to set up * different cell renderers for the new model. * * Since: 2.4 @@ -3345,7 +3345,7 @@ gtk_combo_box_set_model (GtkComboBox *combo_box, if (model == combo_box->priv->model) return; - + if (combo_box->priv->model) gtk_combo_box_unset_model (combo_box); @@ -3368,7 +3368,7 @@ gtk_combo_box_set_model (GtkComboBox *combo_box, g_signal_connect (combo_box->priv->model, "row_changed", G_CALLBACK (gtk_combo_box_model_row_changed), combo_box); - + if (combo_box->priv->tree_view) { /* list mode */ @@ -3574,7 +3574,7 @@ gtk_combo_box_destroy (GtkObject *object) { GtkComboBox *combo_box = GTK_COMBO_BOX (object); - gtk_combo_box_popdown (combo_box); + gtk_combo_box_popdown (combo_box); combo_box->priv->destroying = 1; @@ -3589,14 +3589,14 @@ gtk_combo_box_finalize (GObject *object) { GtkComboBox *combo_box = GTK_COMBO_BOX (object); GSList *i; - + if (GTK_IS_MENU (combo_box->priv->popup_widget)) { gtk_combo_box_menu_destroy (combo_box); gtk_menu_detach (GTK_MENU (combo_box->priv->popup_widget)); combo_box->priv->popup_widget = NULL; } - + if (GTK_IS_TREE_VIEW (combo_box->priv->tree_view)) gtk_combo_box_list_destroy (combo_box); @@ -3655,13 +3655,13 @@ get_attach_info (GtkWidget *child) { GObject *object = G_OBJECT (child); AttachInfo *ai = g_object_get_data (object, ATTACH_INFO_KEY); - + if (!ai) { ai = g_new0 (AttachInfo, 1); g_object_set_data_full (object, ATTACH_INFO_KEY, ai, g_free); } - + return ai; } @@ -3693,25 +3693,25 @@ gtk_menu_attach (GtkMenu *menu, guint bottom_attach) { GtkMenuShell *menu_shell; - + g_return_if_fail (GTK_IS_MENU (menu)); g_return_if_fail (GTK_IS_MENU_ITEM (child)); - g_return_if_fail (child->parent == NULL || + g_return_if_fail (child->parent == NULL || child->parent == GTK_WIDGET (menu)); g_return_if_fail (left_attach < right_attach); g_return_if_fail (top_attach < bottom_attach); menu_shell = GTK_MENU_SHELL (menu); - + if (!child->parent) { AttachInfo *ai = get_attach_info (child); - + ai->left_attach = left_attach; ai->right_attach = right_attach; ai->top_attach = top_attach; ai->bottom_attach = bottom_attach; - + menu_shell->children = g_list_append (menu_shell->children, child); gtk_widget_set_parent (child, GTK_WIDGET (menu)); @@ -3741,7 +3741,7 @@ gtk_combo_box_get_active_text (GtkComboBox *combo_box) /* g_return_val_if_fail (GTK_IS_LIST_STORE (combo_box->priv->model), NULL); */ if (gtk_combo_box_get_active_iter (combo_box, &iter)) - gtk_tree_model_get (gtk_combo_box_get_model(combo_box), &iter, + gtk_tree_model_get (gtk_combo_box_get_model(combo_box), &iter, 0, &text, -1); return text; } diff --git a/pidgin/pidginstock.c b/pidgin/pidginstock.c index 05d4e3700a..7d7f394571 100644 --- a/pidgin/pidginstock.c +++ b/pidgin/pidginstock.c @@ -26,17 +26,32 @@ */ #include "internal.h" #include "pidgin.h" +#include "prefs.h" + +#include "gtkicon-theme-loader.h" +#include "theme-manager.h" #include "pidginstock.h" +/************************************************************************** + * Globals + **************************************************************************/ + +static gboolean stock_initted = FALSE; +static GtkIconSize microscopic, extra_small, small, medium, large, huge; + +/************************************************************************** + * Structures + **************************************************************************/ + static struct StockIcon { const char *name; const char *dir; const char *filename; -} const stock_icons[] = -{ +} const stock_icons[] = { + { PIDGIN_STOCK_ACTION, NULL, GTK_STOCK_EXECUTE }, #if GTK_CHECK_VERSION(2,6,0) { PIDGIN_STOCK_ALIAS, NULL, GTK_STOCK_EDIT }, @@ -98,7 +113,7 @@ static const GtkStockItem stock_items[] = { PIDGIN_STOCK_EDIT, N_("_Edit"), 0, 0, NULL } }; -static struct SizedStockIcon { +typedef struct { const char *name; const char *dir; const char *filename; @@ -110,19 +125,10 @@ static struct SizedStockIcon { gboolean huge; gboolean rtl; const char *translucent_name; -} const sized_stock_icons [] = { - { PIDGIN_STOCK_STATUS_AVAILABLE, "status", "available.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AVAILABLE_I }, - { PIDGIN_STOCK_STATUS_AWAY, "status", "away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AWAY_I }, - { PIDGIN_STOCK_STATUS_BUSY, "status", "busy.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_BUSY_I }, - { PIDGIN_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_STATUS_INVISIBLE,"status", "invisible.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_STATUS_XA, "status", "extended-away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, PIDGIN_STOCK_STATUS_XA_I }, - { PIDGIN_STOCK_STATUS_LOGIN, "status", "log-in.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, - { PIDGIN_STOCK_STATUS_LOGOUT, "status", "log-out.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, - { PIDGIN_STOCK_STATUS_OFFLINE, "status", "offline.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_OFFLINE_I }, - { PIDGIN_STOCK_STATUS_PERSON, "status", "person.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_STATUS_MESSAGE, "toolbar", "message-new.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - +} SizedStockIcon; + +const SizedStockIcon sized_stock_icons [] = { + { PIDGIN_STOCK_STATUS_IGNORED, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, { PIDGIN_STOCK_STATUS_FOUNDER, "emblems", "founder.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, { PIDGIN_STOCK_STATUS_OPERATOR, "emblems", "operator.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, @@ -175,39 +181,53 @@ static struct SizedStockIcon { { PIDGIN_STOCK_ANIMATION_TYPING4, "animations", "typing4.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, { PIDGIN_STOCK_ANIMATION_TYPING5, "animations", "typing5.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_BGCOLOR, "toolbar", "change-bgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_BLOCK, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_FGCOLOR, "toolbar", "change-fgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_SMILEY, "toolbar", "emote-select.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_FONT_FACE, "toolbar", "font-face.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, "toolbar", "font-size-down.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, "toolbar", "font-size-up.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_INSERT, "toolbar", "insert.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, "toolbar", "insert-image.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_INSERT_LINK, "toolbar", "insert-link.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, "toolbar", "message-new.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_PENDING, "tray", "tray-new-im.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_PLUGINS, "toolbar", "plugins.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_UNBLOCK, "toolbar", "unblock.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR, "toolbar", "select-avatar.png", FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_SEND_FILE, "toolbar", "send-file.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_TRANSFER, "toolbar", "transfer.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - - { PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_INVISIBLE, "tray", "tray-invisible.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_AWAY, "tray", "tray-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_BUSY, "tray", "tray-busy.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_XA, "tray", "tray-extended-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_OFFLINE, "tray", "tray-offline.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-new-im.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_EMAIL, "tray", "tray-message.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL } + { PIDGIN_STOCK_TOOLBAR_BGCOLOR, "toolbar", "change-bgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_BLOCK, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_FGCOLOR, "toolbar", "change-fgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_SMILEY, "toolbar", "emote-select.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_FONT_FACE, "toolbar", "font-face.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, "toolbar", "font-size-down.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, "toolbar", "font-size-up.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_INSERT, "toolbar", "insert.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, "toolbar", "insert-image.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_INSERT_LINK, "toolbar", "insert-link.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, "toolbar", "message-new.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_PENDING, "toolbar", "message-new.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_PLUGINS, "toolbar", "plugins.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_UNBLOCK, "toolbar", "unblock.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR, "toolbar", "select-avatar.png", FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_SEND_FILE, "toolbar", "send-file.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_TRANSFER, "toolbar", "transfer.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL } }; -static void -add_sized_icon_common(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, - gboolean rtl, const char *size, const char *file, - gboolean translucent); +const SizedStockIcon sized_status_icons [] = { + + { PIDGIN_STOCK_STATUS_AVAILABLE, "status", "available.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AVAILABLE_I }, + { PIDGIN_STOCK_STATUS_AWAY, "status", "away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AWAY_I }, + { PIDGIN_STOCK_STATUS_BUSY, "status", "busy.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_BUSY_I }, + { PIDGIN_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_INVISIBLE, "status", "invisible.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_XA, "status", "extended-away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, PIDGIN_STOCK_STATUS_XA_I }, + { PIDGIN_STOCK_STATUS_LOGIN, "status", "log-in.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, + { PIDGIN_STOCK_STATUS_LOGOUT, "status", "log-out.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, + { PIDGIN_STOCK_STATUS_OFFLINE, "status", "offline.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_OFFLINE_I }, + { PIDGIN_STOCK_STATUS_PERSON, "status", "person.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_MESSAGE, "toolbar", "message-new.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + + { PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_INVISIBLE, "tray", "tray-invisible.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_AWAY, "tray", "tray-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_BUSY, "tray", "tray-busy.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_XA, "tray", "tray-extended-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_OFFLINE, "tray", "tray-offline.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-new-im.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_EMAIL, "tray", "tray-message.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL } +}; + +/***************************************************************************** + * Private functions + *****************************************************************************/ static gchar * find_file_common(const char *name) @@ -257,16 +277,10 @@ find_file(const char *dir, const char *base) return ret; } -static void -add_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, - gboolean rtl, const char *size, const char *file) -{ - add_sized_icon_common(iconset, sizeid, dir, rtl, size, file, FALSE); -} /* Altered from do_colorshift in gnome-panel */ static void -do_alphashift (GdkPixbuf *dest, GdkPixbuf *src) +do_alphashift(GdkPixbuf *dest, GdkPixbuf *src) { gint i, j; gint width, height, has_alpha, srcrowstride, destrowstride; @@ -300,28 +314,48 @@ do_alphashift (GdkPixbuf *dest, GdkPixbuf *src) } } -static void -add_translucent_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, - gboolean rtl, const char *size, const char *file) +static gchar * +find_icon_file(PidginStatusIconTheme *theme, const gchar *size, SizedStockIcon sized_icon, gboolean rtl) { - add_sized_icon_common(iconset, sizeid, dir, rtl, size, file, TRUE); + const gchar *file, *dir; + gchar *file_full = NULL; + gchar *tmp; + + if (theme != NULL) { + file = pidgin_icon_theme_get_icon(PIDGIN_ICON_THEME(theme), sized_icon.name); + dir = purple_theme_get_dir(PURPLE_THEME(theme)); + + if (rtl) + file_full = g_build_filename(dir, size, "rtl", file, NULL); + else + file_full = g_build_filename(dir, size, file, NULL); + + if (g_file_test(file_full, G_FILE_TEST_IS_REGULAR)) + return file_full; + + g_free(file_full); + } + + if (rtl) + tmp = g_build_filename("pixmaps", "pidgin", sized_icon.dir, size, "rtl", sized_icon.filename, NULL); + else + tmp = g_build_filename("pixmaps", "pidgin", sized_icon.dir, size, sized_icon.filename, NULL); + + file_full = find_file_common(tmp); + g_free(tmp); + return file_full; } static void -add_sized_icon_common(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, - gboolean rtl, const char *size, const char *file, - gboolean translucent) +add_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, PidginStatusIconTheme *theme, + const char *size, SizedStockIcon sized_icon, gboolean translucent) { - char *filename, *subpath; + char *filename; GtkIconSource *source; GdkPixbuf *pixbuf; - subpath = g_build_filename("pixmaps", "pidgin", dir, size, file, NULL); - filename = find_file_common(subpath); - g_free(subpath); - if (!filename) - return; - + filename = find_icon_file(theme, size, sized_icon, FALSE); + g_return_if_fail(filename != NULL); pixbuf = gdk_pixbuf_new_from_file(filename, NULL); if (translucent) do_alphashift(pixbuf, pixbuf); @@ -329,7 +363,7 @@ add_sized_icon_common(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, source = gtk_icon_source_new(); gtk_icon_source_set_pixbuf(source, pixbuf); gtk_icon_source_set_direction(source, GTK_TEXT_DIR_LTR); - gtk_icon_source_set_direction_wildcarded(source, !rtl); + gtk_icon_source_set_direction_wildcarded(source, !sized_icon.rtl); gtk_icon_source_set_size(source, sizeid); gtk_icon_source_set_size_wildcarded(source, FALSE); gtk_icon_source_set_state_wildcarded(source, TRUE); @@ -349,17 +383,16 @@ add_sized_icon_common(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, g_free(filename); g_object_unref(pixbuf); - if (rtl) { - subpath = g_build_filename("pixmaps", "pidgin", dir, size, "rtl", file, NULL); - filename = find_file_common(subpath); - g_free(subpath); - if (!filename) - return; + if (sized_icon.rtl) { + filename = find_icon_file(theme, size, sized_icon, TRUE); + g_return_if_fail(filename != NULL); pixbuf = gdk_pixbuf_new_from_file(filename, NULL); if (translucent) do_alphashift(pixbuf, pixbuf); + source = gtk_icon_source_new(); gtk_icon_source_set_pixbuf(source, pixbuf); + gtk_icon_source_set_filename(source, filename); gtk_icon_source_set_direction(source, GTK_TEXT_DIR_RTL); gtk_icon_source_set_size(source, sizeid); gtk_icon_source_set_size_wildcarded(source, FALSE); @@ -371,20 +404,90 @@ add_sized_icon_common(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, } } +/***************************************************************************** + * Public API functions + *****************************************************************************/ + +void +pidgin_stock_load_status_icon_theme(PidginStatusIconTheme *theme) +{ + GtkIconFactory *icon_factory; + gint i; + GtkIconSet *normal; + GtkIconSet *translucent = NULL; + GtkWidget *win; + + if (theme != NULL) { + purple_prefs_set_string(PIDGIN_PREFS_ROOT "/status/icon-theme", + purple_theme_get_name(PURPLE_THEME(theme))); + purple_prefs_set_path(PIDGIN_PREFS_ROOT "/status/icon-theme-dir", + purple_theme_get_dir(PURPLE_THEME(theme))); + } + else { + purple_prefs_set_string(PIDGIN_PREFS_ROOT "/status/icon-theme", ""); + purple_prefs_set_path(PIDGIN_PREFS_ROOT "/status/icon-theme-dir", ""); + } + + icon_factory = gtk_icon_factory_new(); + + gtk_icon_factory_add_default(icon_factory); + + win = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_realize(win); + + for (i = 0; i < G_N_ELEMENTS(sized_status_icons); i++) + { + normal = gtk_icon_set_new(); + if (sized_status_icons[i].translucent_name) + translucent = gtk_icon_set_new(); + +#define ADD_SIZED_ICON(name, size) if (sized_status_icons[i].name) { \ + add_sized_icon(normal, name, theme, size, sized_status_icons[i], FALSE); \ + if (sized_status_icons[i].translucent_name) \ + add_sized_icon(translucent, name, theme, size, sized_status_icons[i], TRUE); \ + } + ADD_SIZED_ICON(microscopic, "11"); + ADD_SIZED_ICON(extra_small, "16"); + ADD_SIZED_ICON(small, "22"); + ADD_SIZED_ICON(medium, "32"); + ADD_SIZED_ICON(large, "48"); + ADD_SIZED_ICON(huge, "64"); +#undef ADD_SIZED_ICON + + gtk_icon_factory_add(icon_factory, sized_status_icons[i].name, normal); + gtk_icon_set_unref(normal); + + if (sized_status_icons[i].translucent_name) { + gtk_icon_factory_add(icon_factory, sized_status_icons[i].translucent_name, translucent); + gtk_icon_set_unref(translucent); + } + } + + + gtk_widget_destroy(win); + g_object_unref(G_OBJECT(icon_factory)); +} + void pidgin_stock_init(void) { - static gboolean stock_initted = FALSE; GtkIconFactory *icon_factory; size_t i; GtkWidget *win; - GtkIconSize microscopic, extra_small, small, medium, large, huge; + PidginIconThemeLoader *loader; + const gchar *path = NULL; if (stock_initted) return; stock_initted = TRUE; + /* Setup the status icon theme */ + loader = g_object_new(PIDGIN_TYPE_ICON_THEME_LOADER, "type", "status-icon", NULL); + purple_theme_manager_register_type(PURPLE_THEME_LOADER(loader)); + purple_prefs_add_string(PIDGIN_PREFS_ROOT "/status/icon-theme", ""); + purple_prefs_add_path(PIDGIN_PREFS_ROOT "/status/icon-theme-dir", ""); + /* Setup the icon factory. */ icon_factory = gtk_icon_factory_new(); @@ -394,6 +497,7 @@ pidgin_stock_init(void) win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_realize(win); + /* All non-sized icons */ for (i = 0; i < G_N_ELEMENTS(stock_icons); i++) { GtkIconSource *source; @@ -432,7 +536,6 @@ pidgin_stock_init(void) } /* register custom icon sizes */ - microscopic = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC, 11, 11); extra_small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL, 16, 16); small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_SMALL, 22, 22); @@ -440,18 +543,13 @@ pidgin_stock_init(void) large = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_LARGE, 48, 48); huge = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_HUGE, 64, 64); + /* All non-status sized icons */ for (i = 0; i < G_N_ELEMENTS(sized_stock_icons); i++) { - GtkIconSet *iconset; - - iconset = gtk_icon_set_new(); + GtkIconSet *iconset = gtk_icon_set_new(); -#define ADD_SIZED_ICON(name, size) do { \ - if (sized_stock_icons[i].name) \ - add_sized_icon(iconset, name, \ - sized_stock_icons[i].dir, sized_stock_icons[i].rtl, \ - size, sized_stock_icons[i].filename); \ - } while (0) +#define ADD_SIZED_ICON(name, size) if (sized_stock_icons[i].name) \ + add_sized_icon(iconset, name, NULL, size, sized_stock_icons[i], FALSE); ADD_SIZED_ICON(microscopic, "11"); ADD_SIZED_ICON(extra_small, "16"); ADD_SIZED_ICON(small, "22"); @@ -462,32 +560,21 @@ pidgin_stock_init(void) gtk_icon_factory_add(icon_factory, sized_stock_icons[i].name, iconset); gtk_icon_set_unref(iconset); - - if (sized_stock_icons[i].translucent_name) { - iconset = gtk_icon_set_new(); - -#define ADD_TRANS_ICON(name, size) do { \ - if (sized_stock_icons[i].name) \ - add_translucent_sized_icon(iconset, name, \ - sized_stock_icons[i].dir, sized_stock_icons[i].rtl, \ - size, sized_stock_icons[i].filename); \ - } while (0) - ADD_TRANS_ICON(microscopic, "11"); - ADD_TRANS_ICON(extra_small, "16"); - ADD_TRANS_ICON(small, "22"); - ADD_TRANS_ICON(medium, "32"); - ADD_TRANS_ICON(large, "48"); - ADD_TRANS_ICON(huge, "64"); -#undef ADD_TRANS_ICON - - gtk_icon_factory_add(icon_factory, sized_stock_icons[i].translucent_name, iconset); - gtk_icon_set_unref(iconset); - } } gtk_widget_destroy(win); g_object_unref(G_OBJECT(icon_factory)); + /* Pre-load Status icon theme - this avoids a bug with displaying the correct icon in the tray, theme is destroyed after*/ + if (purple_prefs_get_string(PIDGIN_PREFS_ROOT "/icon/status/theme") && + (path = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/status/icon-theme-dir"))) { + + PidginStatusIconTheme *theme = PIDGIN_STATUS_ICON_THEME(purple_theme_loader_build(PURPLE_THEME_LOADER(loader), path)); + pidgin_stock_load_status_icon_theme(theme); + g_object_unref(G_OBJECT(theme)); + + } else pidgin_stock_load_status_icon_theme(NULL); + /* Register the stock items. */ gtk_stock_add_static(stock_items, G_N_ELEMENTS(stock_items)); } diff --git a/pidgin/pidginstock.h b/pidgin/pidginstock.h index 528f2db18e..ae0b3c34b1 100644 --- a/pidgin/pidginstock.h +++ b/pidgin/pidginstock.h @@ -8,7 +8,7 @@ * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -24,6 +24,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ #include <gtk/gtkstock.h> +#include "gtkstatus-icon-theme.h" #ifndef _PIDGIN_STOCK_H_ #define _PIDGIN_STOCK_H_ @@ -177,6 +178,14 @@ #define PIDGIN_ICON_SIZE_TANGO_MEDIUM "pidgin-icon-size-tango-medium" #define PIDGIN_ICON_SIZE_TANGO_LARGE "pidgin-icon-size-tango-large" #define PIDGIN_ICON_SIZE_TANGO_HUGE "pidgin-icon-size-tango-huge" + +/** + * Loades all of the icons from the status icon theme into Pidgin stock + * + * @param theme the theme to load, or null to load all the default icons + */ +void pidgin_stock_load_status_icon_theme(PidginStatusIconTheme *theme); + /** * Sets up the purple stock repository. */ diff --git a/pidgin/pixmaps/Makefile.am b/pidgin/pixmaps/Makefile.am index 8fc9ef5713..7408dae766 100644 --- a/pidgin/pixmaps/Makefile.am +++ b/pidgin/pixmaps/Makefile.am @@ -488,6 +488,7 @@ TRAY_32 = \ tray/32/tray-connecting.png \ tray/32/tray-extended-away.png \ tray/32/tray-invisible.png \ + tray/32/tray-message.png \ tray/32/tray-new-im.png \ tray/32/tray-offline.png \ tray/32/tray-online.png @@ -498,6 +499,7 @@ TRAY_48 = \ tray/48/tray-connecting.png \ tray/48/tray-extended-away.png \ tray/48/tray-invisible.png \ + tray/48/tray-message.png \ tray/48/tray-new-im.png \ tray/48/tray-offline.png \ tray/48/tray-online.png @@ -525,7 +527,6 @@ EXTRA_DIST = \ $(PROTOCOLS_16_SCALABLE) \ $(PROTOCOLS_22_SCALABLE) \ $(PROTOCOLS_48_SCALABLE) \ - $(TOOLBAR_11) \ $(TOOLBAR_16_SCALABLE) \ $(TOOLBAR_22_SCALABLE) @@ -553,6 +554,7 @@ nobase_dist_pidginpixmap_DATA = \ $(STATUS_32_RTL) \ $(STATUS_48) \ $(STATUS_48_RTL) \ + $(TOOLBAR_11) \ $(TOOLBAR_16) \ $(TOOLBAR_22) \ $(TRAY_16) \ diff --git a/pidgin/plugins/gevolution/gevo-util.c b/pidgin/plugins/gevolution/gevo-util.c index c0613ae8f0..54f54abf53 100644 --- a/pidgin/plugins/gevolution/gevo-util.c +++ b/pidgin/plugins/gevolution/gevo-util.c @@ -27,13 +27,13 @@ void gevo_add_buddy(PurpleAccount *account, const char *group_name, - const char *screenname, const char *alias) + const char *buddy_name, const char *alias) { PurpleConversation *conv = NULL; PurpleBuddy *buddy; PurpleGroup *group; - conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, screenname, account); + conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, buddy_name, account); if ((group = purple_find_group(group_name)) == NULL) { @@ -41,7 +41,7 @@ gevo_add_buddy(PurpleAccount *account, const char *group_name, purple_blist_add_group(group, NULL); } - buddy = purple_buddy_new(account, screenname, alias); + buddy = purple_buddy_new(account, buddy_name, alias); purple_blist_add_buddy(buddy, NULL, group, NULL); purple_account_add_buddy(account, buddy); diff --git a/pidgin/plugins/gevolution/gevolution.c b/pidgin/plugins/gevolution/gevolution.c index c7851ba036..2d807c523d 100644 --- a/pidgin/plugins/gevolution/gevolution.c +++ b/pidgin/plugins/gevolution/gevolution.c @@ -52,7 +52,7 @@ enum { COLUMN_AUTOADD, COLUMN_ICON, - COLUMN_SCREENNAME, + COLUMN_USERNAME, COLUMN_DATA, NUM_COLUMNS }; @@ -463,11 +463,11 @@ get_config_frame(PurplePlugin *plugin) gtk_tree_view_column_add_attribute(column, renderer, "pixbuf", COLUMN_ICON); - /* Screenname */ + /* Username */ renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(column, renderer, TRUE); gtk_tree_view_column_add_attribute(column, renderer, - "text", COLUMN_SCREENNAME); + "text", COLUMN_USERNAME); /* Populate */ @@ -489,7 +489,7 @@ get_config_frame(PurplePlugin *plugin) purple_account_get_bool(account, "gevo-autoadd", FALSE), COLUMN_ICON, pixbuf, - COLUMN_SCREENNAME, + COLUMN_USERNAME, purple_account_get_username(account), COLUMN_DATA, account, -1); diff --git a/pidgin/plugins/gevolution/new_person_dialog.c b/pidgin/plugins/gevolution/new_person_dialog.c index 0d62c93b67..797d4bbf77 100644 --- a/pidgin/plugins/gevolution/new_person_dialog.c +++ b/pidgin/plugins/gevolution/new_person_dialog.c @@ -67,7 +67,7 @@ cancel_cb(GtkWidget *w, GevoNewPersonDialog *dialog) } static void -screenname_changed_cb(GtkEntry *entry, GevoNewPersonDialog *dialog) +username_changed_cb(GtkEntry *entry, GevoNewPersonDialog *dialog) { gtk_widget_set_sensitive(dialog->add_button, *gtk_entry_get_text(entry) != '\0'); @@ -85,7 +85,7 @@ static void add_cb(GtkWidget *w, GevoNewPersonDialog *dialog) { EContact *contact = NULL; - const char *screenname; + const char *username; const char *firstname; const char *lastname; const char *email; @@ -96,9 +96,9 @@ add_cb(GtkWidget *w, GevoNewPersonDialog *dialog) char *full_name = NULL; if (dialog->person_only) - screenname = dialog->buddy->name; + username = dialog->buddy->name; else - screenname = gtk_entry_get_text(GTK_ENTRY(dialog->screenname)); + username = gtk_entry_get_text(GTK_ENTRY(dialog->username)); firstname = gtk_entry_get_text(GTK_ENTRY(dialog->firstname)); lastname = gtk_entry_get_text(GTK_ENTRY(dialog->lastname)); @@ -143,7 +143,7 @@ add_cb(GtkWidget *w, GevoNewPersonDialog *dialog) if (!strcmp(im_service, "prpl-oscar")) { - if (isdigit(*screenname)) + if (isdigit(*username)) field = E_CONTACT_IM_ICQ; else field = E_CONTACT_IM_AIM; @@ -163,7 +163,7 @@ add_cb(GtkWidget *w, GevoNewPersonDialog *dialog) if (field > 0) { - GList *list = g_list_append(NULL, g_strdup(screenname)); + GList *list = g_list_append(NULL, g_strdup(username)); e_contact_set(contact, field, list); @@ -203,7 +203,7 @@ add_cb(GtkWidget *w, GevoNewPersonDialog *dialog) group_name = pidgin_text_combo_box_entry_get_text(dialog->group_combo); - gevo_add_buddy(dialog->account, group_name, screenname, full_name); + gevo_add_buddy(dialog->account, group_name, username, full_name); } if (name != NULL) @@ -289,15 +289,15 @@ gevo_new_person_dialog_show(EBook *book, EContact *contact, NULL, dialog); add_pref_box(sg, vbox, _("Account type:"), dialog->accounts_menu); - /* Screen Name */ - dialog->screenname = gtk_entry_new(); - add_pref_box(sg, vbox, _("Username:"), dialog->screenname); + /* Username */ + dialog->username = gtk_entry_new(); + add_pref_box(sg, vbox, _("Username:"), dialog->username); if (username != NULL) - gtk_entry_set_text(GTK_ENTRY(dialog->screenname), username); + gtk_entry_set_text(GTK_ENTRY(dialog->username), username); - g_signal_connect(G_OBJECT(dialog->screenname), "changed", - G_CALLBACK(screenname_changed_cb), dialog); + g_signal_connect(G_OBJECT(dialog->username), "changed", + G_CALLBACK(username_changed_cb), dialog); /* Group */ dialog->group_combo = pidgin_text_combo_box_entry_new(NULL, diff --git a/pidgin/plugins/history.c b/pidgin/plugins/history.c index b2e7b8ee48..3d2507343b 100644 --- a/pidgin/plugins/history.c +++ b/pidgin/plugins/history.c @@ -62,36 +62,39 @@ static void historize(PurpleConversation *c) return; /* Find buddies for this conversation. */ - buddies = purple_find_buddies(account, name); + buddies = purple_find_buddies(account, name); /* If we found at least one buddy, save the first buddy's alias. */ if (buddies != NULL) alias = purple_buddy_get_contact_alias((PurpleBuddy *)buddies->data); - for (cur = buddies; cur != NULL; cur = cur->next) - { - PurpleBlistNode *node = cur->data; - if ((node != NULL) && ((node->prev != NULL) || (node->next != NULL))) - { + for (cur = buddies; cur != NULL; cur = cur->next) + { + PurpleBlistNode *node = cur->data; + PurpleBlistNode *prev = purple_blist_node_get_sibling_prev(node); + PurpleBlistNode *next = purple_blist_node_get_sibling_next(node); + if ((node != NULL) && ((prev != NULL) || (next != NULL))) + { PurpleBlistNode *node2; + PurpleBlistNode *parent = purple_blist_node_get_parent(node); + PurpleBlistNode *child = purple_blist_node_get_first_child(parent); alias = purple_buddy_get_contact_alias((PurpleBuddy *)node); /* We've found a buddy that matches this conversation. It's part of a * PurpleContact with more than one PurpleBuddy. Loop through the PurpleBuddies * in the contact and get all the logs. */ - for (node2 = node->parent->child ; node2 != NULL ; node2 = node2->next) + for (node2 = child ; node2 != NULL ; node2 = purple_blist_node_get_sibling_next(node2)) { - logs = g_list_concat( - purple_log_get_logs(PURPLE_LOG_IM, + logs = g_list_concat(purple_log_get_logs(PURPLE_LOG_IM, purple_buddy_get_name((PurpleBuddy *)node2), purple_buddy_get_account((PurpleBuddy *)node2)), - logs); + logs); } break; - } - } - g_slist_free(buddies); + } + } + g_slist_free(buddies); if (logs == NULL) logs = purple_log_get_logs(PURPLE_LOG_IM, name, account); @@ -118,7 +121,7 @@ static void historize(PurpleConversation *c) protocol = g_strdup(gtk_imhtml_get_protocol_name(GTK_IMHTML(gtkconv->imhtml))); gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->imhtml), - purple_account_get_protocol_name(((PurpleLog*)logs->data)->account)); + purple_account_get_protocol_name(((PurpleLog*)logs->data)->account)); if (gtk_text_buffer_get_char_count(gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->imhtml)))) gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), "<BR>", options); diff --git a/pidgin/plugins/perl/common/GtkLog.xs b/pidgin/plugins/perl/common/GtkLog.xs index 2e32fc5466..3579f1c4f8 100644 --- a/pidgin/plugins/perl/common/GtkLog.xs +++ b/pidgin/plugins/perl/common/GtkLog.xs @@ -7,9 +7,9 @@ Purple::Handle pidgin_log_get_handle() void -pidgin_log_show(type, screenname, account) +pidgin_log_show(type, buddyname, account) Purple::LogType type - const char * screenname + const char * buddyname Purple::Account account void diff --git a/pidgin/plugins/ticker/ticker.c b/pidgin/plugins/ticker/ticker.c index 284c09b417..9a0ffcc7fa 100644 --- a/pidgin/plugins/ticker/ticker.c +++ b/pidgin/plugins/ticker/ticker.c @@ -91,7 +91,9 @@ static gboolean buddy_click_cb(GtkWidget *widget, GdkEventButton *event, gpointe PurpleContact *contact = user_data; PurpleBuddy *b = purple_contact_get_priority_buddy(contact); - purple_conversation_new(PURPLE_CONV_TYPE_IM, b->account, b->name); + purple_conversation_new(PURPLE_CONV_TYPE_IM, + purple_buddy_get_account(b), + purple_buddy_get_name(b)); return TRUE; } @@ -217,20 +219,25 @@ static void buddy_ticker_remove_buddy(PurpleBuddy *b) { static void buddy_ticker_show(void) { - PurpleBuddyList *list = purple_get_blist(); PurpleBlistNode *gnode, *cnode, *bnode; PurpleBuddy *b; - if(!list) - return; - - for(gnode = list->root; gnode; gnode = gnode->next) { + for(gnode = purple_blist_get_root(); + gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) + { if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for(cnode = gnode->child; cnode; cnode = cnode->next) { + for(cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) + { if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for(bnode = cnode->child; bnode; bnode = bnode->next) { + for(bnode = purple_blist_node_get_first_child(cnode); + bnode; + bnode = purple_blist_node_get_sibling_next(bnode)) + { if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; b = (PurpleBuddy *)bnode; diff --git a/pidgin/plugins/win32/winprefs/gtkappbar.c b/pidgin/plugins/win32/winprefs/gtkappbar.c index ef8d6e1906..c98d9b40e3 100644 --- a/pidgin/plugins/win32/winprefs/gtkappbar.c +++ b/pidgin/plugins/win32/winprefs/gtkappbar.c @@ -376,7 +376,7 @@ static GdkFilterReturn wnd_poschanged(GtkAppBar *ab, GdkXEvent *xevent) { APPBARDATA abd; MSG *msg = (MSG*)xevent; - purple_debug(PURPLE_DEBUG_INFO, "gtkappbar", "wnd_poschanged\n"); + purple_debug(PURPLE_DEBUG_MISC, "gtkappbar", "wnd_poschanged\n"); abd.hWnd = msg->hwnd; abd.cbSize = sizeof(APPBARDATA); @@ -391,7 +391,7 @@ static GdkFilterReturn wnd_poschanging(GtkAppBar *ab, GdkXEvent *xevent) { MSG *msg = (MSG*)xevent; WINDOWPOS *wpos = (WINDOWPOS*)msg->lParam; - purple_debug(PURPLE_DEBUG_INFO, "gtkappbar", "wnd_poschanging\n"); + purple_debug(PURPLE_DEBUG_MISC, "gtkappbar", "wnd_poschanging\n"); if(ab->docked || ab->docking) { wpos->x = ab->docked_rect.left; @@ -526,7 +526,7 @@ static GdkFilterReturn gtk_appbar_callback(GtkAppBar *ab, GdkXEvent *xevent) { break; case ABN_FULLSCREENAPP: - purple_debug(PURPLE_DEBUG_INFO, "gtkappbar", "gtk_appbar_callback: ABN_FULLSCREENAPP: %d\n", (BOOL)msg->lParam); + purple_debug(PURPLE_DEBUG_MISC, "gtkappbar", "gtk_appbar_callback: ABN_FULLSCREENAPP: %d\n", (BOOL)msg->lParam); if (!ab->iconized && ab->docked) { if ((BOOL)msg->lParam) { SetWindowPos(msg->hwnd, HWND_BOTTOM, 0, 0, 0, 0, diff --git a/pidgin/win32/nsis/pidgin-installer.nsi b/pidgin/win32/nsis/pidgin-installer.nsi index fafe85ee48..f39078a162 100644 --- a/pidgin/win32/nsis/pidgin-installer.nsi +++ b/pidgin/win32/nsis/pidgin-installer.nsi @@ -709,6 +709,8 @@ Section Uninstall Push "ymsgr" Call un.UnregisterURIHandler + Delete "$INSTDIR\ca-certs\America_Online_Root_Certification_Authority_1.pem" + Delete "$INSTDIR\ca-certs\AOL_Member_CA.pem" Delete "$INSTDIR\ca-certs\CAcert_Class3.pem" Delete "$INSTDIR\ca-certs\CAcert_Root.pem" Delete "$INSTDIR\ca-certs\Equifax_Secure_CA.pem" diff --git a/po/ChangeLog b/po/ChangeLog index 6ff4d104a3..b7ea267d32 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,16 +1,31 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul +version 2.6.0 + version 2.5.5 + * Afrikaans translation updated (Friedel Wolff) * Bengali translation updated (Israt Jahan) + * Catalan translation updated (Josep Puigdemont) + * Chinese (Hong Kong) translation updated (Ambrose C. Li) + * Chinese (Traditional) translation updated (Ambrose C. Li) * Czech translation updated (David Vachulka) * Danish translation updated (Peter Bach) + * French translation updated (Éric Boumaour) + * German translation updated (Jochen Kemnade and Björn Voigt) + * Hungarian translation updated (Gabor Kelemen) + * Khmer translation added (Khoem Sokhem) + * Lithuanian translation updated (Laurynas Biveinis) * Norwegian Bokmål translation updated (Hans Fredrik Nordhaug) * Norwegian Nynorsk translation updated (Yngve Spjeld Landro) + * Portuguese (Brazilian) translation updated (Rodrigo Luiz + Marques Flores) + * Punjabi translation updated (Amanpreet Singh Alam) * Russian translation updated (Антон Самохвалов) * Serbian translation updated (Miloš Popović) * Serbian Latin translation updated (Miloš Popović) * Slovak translation updated (loptosko) * Slovenian translation updated (Martin Srebotnjak) + * Swedish translation updated (Peter Hjalmarsson) version 2.5.4 * Czech translation updated (David Vachulka) diff --git a/po/POTFILES.in b/po/POTFILES.in index e751a35eb6..b221f12ced 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -133,6 +133,7 @@ libpurple/protocols/oscar/oscar.c libpurple/protocols/oscar/peer.c libpurple/protocols/qq/buddy_info.c libpurple/protocols/qq/buddy_list.c +libpurple/protocols/qq/buddy_memo.c libpurple/protocols/qq/buddy_opt.c libpurple/protocols/qq/group.c libpurple/protocols/qq/group_im.c @@ -183,6 +184,7 @@ libpurple/sslconn.c libpurple/status.c libpurple/util.c libpurple/win32/libc_interface.c +libpurple/xmlnode.c pidgin.desktop.in pidgin/eggtrayicon.c pidgin/gtkaccount.c @@ -1,2 +1,2 @@ -For information on translating Pidgin, Libpurple, and Finch, please see +For information on translating Pidgin, libpurple, and Finch, please see our wiki page at http://developer.pidgin.im/wiki/TipsForTranslators. @@ -3,19 +3,21 @@ # This file is distributed under the same license as the pidgin package. # Friedel Wolff <friedel BY translate.org.za>, 2006-2008. # Samuel Murray <afrikaans BY gmail.com>, 2007 +# F Wolff <friedel@translate.org.za>, 2009 msgid "" msgstr "" "Project-Id-Version: 2.3.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-18 01:17-0800\n" -"PO-Revision-Date: 2008-12-18 00:13+0200\n" +"POT-Creation-Date: 2009-02-27 10:14-0800\n" +"PO-Revision-Date: 2009-02-23 19:54+0200\n" "Last-Translator: F Wolff <friedel@translate.org.za>\n" -"Language-Team: translate-discuss-swedish@lists.kde.org\n" +"Language-Team: translate-discuss-af@lists.sourceforge.net\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: af\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Virtaal 0.2\n" +"X-Generator: Virtaal 0.3.1\n" #. Translators may want to transliterate the name. #. It is not to be translated. @@ -32,7 +34,7 @@ msgid "" "Usage: %s [OPTION]...\n" "\n" " -c, --config=DIR use DIR for config files\n" -" -d, --debug print debugging messages to stdout\n" +" -d, --debug print debugging messages to stderr\n" " -h, --help display this help and exit\n" " -n, --nologin don't automatically login\n" " -v, --version display the current version and exit\n" @@ -41,7 +43,7 @@ msgstr "" "Gebruik: %s [OPSIE]...\n" "\n" " -c, --config=GIDS gebruik GIDS vir konfigurasielêers\n" -" -d, --debug skryf ontfoutboodskappe na stdout\n" +" -d, --debug skryf ontfoutboodskappe na stderr\n" " -h, --help wys hierdie hulp en sluit af\n" " -n, --nologin moenie outomaties aanmeld nie\n" " -v, --version wys die huidige weergawe en sluit af\n" @@ -1163,7 +1165,6 @@ msgstr "Minute voor verandering van status:" msgid "Change status to" msgstr "Verander status na:" -#. Conversations msgid "Conversations" msgstr "Gesprekke" @@ -1486,7 +1487,6 @@ msgstr "" "Wanneer 'n nuwe gesprek geopen word, sal hierdie inprop die laaste gesprek " "in die huidige een invoeg." -#, c-format msgid "Online" msgstr "Aanlyn" @@ -1922,7 +1922,6 @@ msgstr "Begin nou met oordrag van %s vanaf %s" msgid "Transfer of file %s complete" msgstr "Oordrag van lêer %s voltooi" -#, c-format msgid "File transfer complete" msgstr "Lêeroordrag voltooi" @@ -1930,7 +1929,6 @@ msgstr "Lêeroordrag voltooi" msgid "You canceled the transfer of %s" msgstr "U het die oordrag van %s gekanselleer" -#, c-format msgid "File transfer cancelled" msgstr "Lêeroordrag gekanselleer" @@ -2145,7 +2143,6 @@ msgstr "(%s) %s <AUTO-REPLY>: %s\n" msgid "You are using %s, but this plugin requires %s." msgstr "U gebruik tans %s, maar hierdie inprop vereis %s." -#, c-format msgid "This plugin has not defined an ID." msgstr "Hierdie inprop is nie as 'n ID gedefinieer nie." @@ -2838,7 +2835,6 @@ msgstr "" "Kon nie verbinding met plaaslike mDNS-bediener bewerkstellig nie. Loop dit " "tans?" -#. Creating the options for the protocol msgid "First name" msgstr "Naam" @@ -2870,6 +2866,11 @@ msgstr "Bonjour-protokolinprop" msgid "Purple Person" msgstr "Pers persoon" +#. Creating the options for the protocol +#, fuzzy +msgid "Local Port" +msgstr "Plaaslike poort" + msgid "Bonjour" msgstr "Bonjour" @@ -3033,7 +3034,6 @@ msgstr "Beskikbaar" #. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for #. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message #. Away stuff -#, c-format msgid "Away" msgstr "Weg" @@ -3917,7 +3917,6 @@ msgstr "Geselserig" msgid "Extended Away" msgstr "Vir lank weg" -#, c-format msgid "Do Not Disturb" msgstr "Moenie pla nie" @@ -4153,6 +4152,9 @@ msgstr "Stawing" msgid "Re-initializing Stream" msgstr "Herinisialiseer stroom" +msgid "Server doesn't support blocking" +msgstr "Bediener ondersteun nie blokkering nie" + msgid "Not Authorized" msgstr "Nie gemagtig nie" @@ -4663,9 +4665,6 @@ msgstr "Aksies" msgid "Select an action" msgstr "Stel 'n aksie op" -msgid "Unable to retrieve MSN Address Book" -msgstr "Kan nie MSN-adresboek haal nie" - #. 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 @@ -4907,7 +4906,6 @@ msgstr "Kinderpaspoort sonder ouertoestemming" msgid "Passport account not yet verified" msgstr "Paspoortrekening nog nie geverifieer nie" -#, c-format msgid "Passport account suspended" msgstr "Paspoortrekening opgeskort" @@ -4926,9 +4924,8 @@ msgstr "MSN-fout: %s\n" msgid "Other Contacts" msgstr "Ander kontakte" -#, fuzzy msgid "Non-IM Contacts" -msgstr "Verwyder kontak" +msgstr "" msgid "Nudge" msgstr "Stootjie" @@ -6112,7 +6109,6 @@ msgstr "" msgid "Error. SSL support is not installed." msgstr "Fout. SSL-steun nie geïnstalleer nie." -#, c-format msgid "This conference has been closed. No more messages can be sent." msgstr "" "Hierdie konferensie is gesluit. Geen verdere boodskappe kan gestuur word nie." @@ -6377,23 +6373,18 @@ msgstr "Kammera" msgid "Screen Sharing" msgstr "Skermdeling" -#, c-format msgid "Free For Chat" msgstr "Beskikbaar vir geselsies" -#, c-format msgid "Not Available" msgstr "Nie beskikbaar nie" -#, c-format msgid "Occupied" msgstr "Beset" -#, c-format msgid "Web Aware" msgstr "Web Aware" -#, c-format msgid "Invisible" msgstr "Onsigbaar" @@ -6492,13 +6483,11 @@ msgstr "Tik die 6-syfer-nommer vanaf die digitale skerm." msgid "_OK" msgstr "_Regso" -#, c-format -msgid "" -"You may be disconnected shortly. You may want to use TOC until this is " -"fixed. Check %s for updates." +#, fuzzy, c-format +msgid "You may be disconnected shortly. If so, check %s for updates." msgstr "" -"U kan dalk binnekort ontkoppel word. U moet dalk TOC gebruik tot dit " -"reggemaak is. Kontroleer %s vir bywerkings." +"U kan dalk binnekort ontkoppel word. As dit gebeur, kontroleer %s vir " +"bywerkings." msgid "Unable to get a valid AIM login hash." msgstr "Kan nie 'n geldige AIM-aanmeldhutswaarde kry nie." @@ -6960,6 +6949,7 @@ msgstr "_Verbind" msgid "Get AIM Info" msgstr "Kry AIM-inligting" +#. We only do this if the user is in our buddy list msgid "Edit Buddy Comment" msgstr "Wysig vriendkommentaar" @@ -7067,7 +7057,6 @@ msgstr "Vra tans %s om aan ons by %s:%hu te koppel vir direkte kitsboodskap." msgid "Attempting to connect to %s:%hu." msgstr "Probeer tans om aan %s:%hu te koppel." -#, c-format msgid "Attempting to connect via proxy server." msgstr "Probeer tans om via instaanbediener te koppel." @@ -7295,7 +7284,6 @@ msgstr "Verwyder van vriend %u het misluk" msgid "Failed removing me from %d's buddy list" msgstr "%s het u van sy of haar vriendelys verwyder." -#, fuzzy msgid "No reason given" msgstr "Geen rede gegee nie" @@ -7331,32 +7319,26 @@ msgstr "Tik gerus die Qun-nommer" msgid "You can only search for permanent Qun\n" msgstr "U kan net vir permanente QQ-groepe soek\n" -#, fuzzy msgid "(Invalid UTF-8 string)" -msgstr "Ongeldige instaaninstellings" +msgstr "(Ongeldige UTF-8-string)" -#, fuzzy msgid "Not member" -msgstr "Ek is nie 'n lid nie" +msgstr "Nie 'n lid nie" msgid "Member" msgstr "Lid" -#, fuzzy msgid "Requesting" -msgstr "Versoek-dialoog" +msgstr "Versoek tans" -#, fuzzy msgid "Admin" -msgstr "Adium" +msgstr "Admin" -#, fuzzy msgid "Notice" -msgstr "Kennisgewing:" +msgstr "Kennisgewing" -#, fuzzy msgid "Detail" -msgstr "Verstek" +msgstr "Detail" msgid "Creator" msgstr "Skepper" @@ -7365,17 +7347,14 @@ msgstr "Skepper" msgid "About me" msgstr "Omtrent %s" -#, fuzzy msgid "Category" -msgstr "Geselsiefout" +msgstr "Kategorie" -#, fuzzy msgid "The Qun does not allow others to join" -msgstr "Hierdie groep laat nie ander toe om aan te sluit nie" +msgstr "De Qun laat nie ander toe om aan te sluit nie" -#, fuzzy msgid "Join QQ Qun" -msgstr "Sluit by geselsie aan" +msgstr "Sluit by QQ Qun aan" msgid "Input request here" msgstr "Gee versoek hier" @@ -7401,9 +7380,8 @@ msgstr "Misluk:" msgid "Join Qun, Unknown Reply" msgstr "" -#, fuzzy msgid "Quit Qun" -msgstr "QQ-qun" +msgstr "" msgid "" "Note, if you are the creator, \n" @@ -7412,9 +7390,8 @@ msgstr "" "Let wel, as u die skepper is, \n" "sal hierdie bewerking eindelik hierdie qun verwyder." -#, fuzzy msgid "Sorry, you are not our style" -msgstr "Jammer, u's nie my tipe nie..." +msgstr "Jammer, u's nie my tipe nie" #, fuzzy msgid "Successfully changed Qun members" @@ -7494,21 +7471,20 @@ msgstr "" msgid "Invalid name" msgstr "Ongeldige naam" -#, fuzzy msgid "Select icon..." -msgstr "Kies vouer..." +msgstr "Kies ikoon..." -#, fuzzy, c-format +#, c-format msgid "<b>Login time</b>: %d-%d-%d, %d:%d:%d<br>\n" -msgstr "<b>Aanmeldtyd</b>: %s<br>\n" +msgstr "<b>Aanmeldtyd</b>: %d-%d-%d, %d:%d:%d<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Total Online Buddies</b>: %d<br>\n" -msgstr "<b>Tans aanlyn</b>: %d<br>\n" +msgstr "<b>Totale aantal vriende aanlyn</b>: %d<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Last Refresh</b>: %d-%d-%d, %d:%d:%d<br>\n" -msgstr "<b>Vorige verfrissing</b>: %s<br>\n" +msgstr "<b>Vorige verfrissing</b>: %d-%d-%d, %d:%d:%d<br>\n" #, c-format msgid "<b>Server</b>: %s<br>\n" @@ -7522,9 +7498,9 @@ msgstr "<b>Aanmeldtyd</b>: %s<br>\n" msgid "<b>Connection Mode</b>: %s<br>\n" msgstr "<b>Verbindingmodus</b>: %s<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>My Internet IP</b>: %s:%d<br>\n" -msgstr "<b>My internetadres</b>: %s<br>\n" +msgstr "<b>My internetadres</b>: %s:%d<br>\n" #, c-format msgid "<b>Sent</b>: %lu<br>\n" @@ -7546,13 +7522,13 @@ msgstr "<b>Ontvang</b>: %lu<br>\n" msgid "<b>Received Duplicate</b>: %lu<br>\n" msgstr "<b>Duplikaat ontvang</b>: %lu<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Time</b>: %d-%d-%d, %d:%d:%d<br>\n" -msgstr "<b>Aanmeldtyd</b>: %s<br>\n" +msgstr "<b>Tyd</b>: %d-%d-%d, %d:%d:%d<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>IP</b>: %s<br>\n" -msgstr "<b>Bediener</b>: %s<br>\n" +msgstr "<b>IP</b>: %s<br>\n" msgid "Login Information" msgstr "Aanmeldinligting" @@ -7571,6 +7547,10 @@ msgstr "<b>Vorige verfrissing</b>: %s<br>\n" msgid "<p><b>Acknowledgement</b>:<br>\n" msgstr "<b>Gestuur</b>: %lu<br>\n" +#, fuzzy +msgid "<p><b>Scrupulous Testers</b>:<br>\n" +msgstr "<b>Vorige verfrissing</b>: %s<br>\n" + msgid "<p><i>And, all the boys in the backroom...</i><br>\n" msgstr "" @@ -7581,9 +7561,8 @@ msgstr "" msgid "About OpenQ %s" msgstr "Omtrent %s" -#, fuzzy msgid "Change Icon" -msgstr "Stoor ikoon" +msgstr "Verander ikoon" msgid "Change Password" msgstr "Verander wagwoord" @@ -7598,6 +7577,10 @@ msgstr "" msgid "About OpenQ" msgstr "Omtrent %s" +#, fuzzy +msgid "Modify Buddy Memo" +msgstr "Wysig adres" + #. *< type #. *< ui_requirement #. *< flags @@ -7617,7 +7600,7 @@ msgstr "Outomaties" #, fuzzy msgid "Select Server" -msgstr "Kies gebruiker" +msgstr "Kies bediener" msgid "QQ2005" msgstr "" @@ -7637,6 +7620,9 @@ msgstr "Wys bedienerkennisgewing" msgid "Show server news" msgstr "Wys bedienernuus" +msgid "Show chat room when msg comes" +msgstr "" + #, fuzzy msgid "Keep alive interval (seconds)" msgstr "Wakkerhou-interval(le)" @@ -9284,6 +9270,9 @@ msgstr "Kon nie gasheernaam oplos nie" msgid "SIP usernames may not contain whitespaces or @ symbols" msgstr "SIP-gebruikername mag nie spasies of @-simbole bevat nie" +msgid "SIP connect server not specified" +msgstr "" + #. *< type #. *< ui_requirement #. *< flags @@ -11369,6 +11358,10 @@ msgstr "Litous" msgid "Macedonian" msgstr "Masedonies" +#, fuzzy +msgid "Mongolian" +msgstr "Mongools" + msgid "Bokmål Norwegian" msgstr "Bokmål-Noorweegs" @@ -11483,8 +11476,30 @@ msgstr "" "program nie.<BR><BR>" #, c-format -msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" -msgstr "<FONT SIZE=\"4\">IRC:</FONT> #pidgin op irc.freenode.net<BR><BR>" +msgid "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">Vrae:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">Hulp d.m.v. e-pos:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgstr "" +"<FONT SIZE=\"4\">IRC-kanaal:</FONT> #pidgin op irc.freenode.net<BR><BR>" + +#, c-format +msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" +msgstr "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" msgid "Current Developers" msgstr "Huidige programmeerders" @@ -12139,6 +12154,10 @@ msgstr "" msgid "Pidgin" msgstr "Pidgin" +#, c-format +msgid "Exiting because another libpurple client is already running.\n" +msgstr "Sluit af omdat 'n ander libpurple-kliënt reeds loop.\n" + msgid "Open All Messages" msgstr "Open alle boodskappe" @@ -12478,6 +12497,10 @@ msgstr "Instaanbediener" msgid "No proxy" msgstr "Geen instaanbediener" +#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings +msgid "Use remote DNS with SOCKS4 proxies" +msgstr "Gebruik afgeleë DNS met SOCKS4-instaanbedieners" + msgid "_User:" msgstr "_Gebruiker:" @@ -13918,9 +13941,6 @@ msgstr "_Hou vriendelysvenster bo:" msgid "Only when docked" msgstr "Net indien gedok" -msgid "_Flash window when chat messages are received" -msgstr "_Flits venster wanneer geselsieboodskappe ontvang word" - msgid "Windows Pidgin Options" msgstr "Windows Pidgin-opsies" @@ -13969,6 +13989,19 @@ msgstr "Stuur en ontvang rou XMPP-stanzas." msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "Hierdie inprop is nuttig om XMPP-bedieners of -kliënte te ontfout." +#~ msgid "Unable to retrieve MSN Address Book" +#~ msgstr "Kan nie MSN-adresboek haal nie" + +#~ msgid "" +#~ "You may be disconnected shortly. You may want to use TOC until this is " +#~ "fixed. Check %s for updates." +#~ msgstr "" +#~ "U kan dalk binnekort ontkoppel word. U moet dalk TOC gebruik tot dit " +#~ "reggemaak is. Kontroleer %s vir bywerkings." + +#~ msgid "_Flash window when chat messages are received" +#~ msgstr "_Flits venster wanneer geselsieboodskappe ontvang word" + #~ msgid "Connection to server lost (no data received within %d second)" #~ msgid_plural "" #~ "Connection to server lost (no data received within %d seconds)" @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Pidgin 2.5.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-01-13 09:58-0500\n" +"POT-Creation-Date: 2009-02-27 10:17-0800\n" "PO-Revision-Date: 2008-11-13 17:07+0600\n" "Last-Translator: Israt Jahan <israt@ankur.org.bd>\n" "Language-Team: Bengali <core@bengalinux.org>\n" @@ -21,24 +21,20 @@ msgstr "" #. Translators may want to transliterate the name. #. It is not to be translated. -#: ../finch/finch.c:64 ../finch/finch.c:296 ../finch/finch.c:325 -#: ../finch/finch.c:413 msgid "Finch" msgstr "Finch" -#: ../finch/finch.c:208 #, c-format msgid "%s. Try `%s -h' for more information.\n" msgstr "%s। আরও তথ্য জানাতে `%s -h' দ্বারা চেষ্টা করুন।\n" -#: ../finch/finch.c:210 -#, c-format +#, fuzzy, c-format msgid "" "%s\n" "Usage: %s [OPTION]...\n" "\n" " -c, --config=DIR use DIR for config files\n" -" -d, --debug print debugging messages to stdout\n" +" -d, --debug print debugging messages to stderr\n" " -h, --help display this help and exit\n" " -n, --nologin don't automatically login\n" " -v, --version display the current version and exit\n" @@ -53,7 +49,6 @@ msgstr "" " -v, --version বর্তমান সংস্করণ প্রদর্শন করুন এবং ত্যাগ করুন\n" # tithi -#: ../finch/finch.c:323 ../pidgin/gtkmain.c:732 #, c-format msgid "" "%s encountered errors migrating your settings from %s to %s. Please " @@ -64,263 +59,108 @@ msgstr "" "করে তদন্ত করুন এবং নিজের হাতে পরিবর্তন শেষ করুন। অনুগ্রহ করে http://developer." "pidgin.im এ এই ত্রুটিটির প্রতিবেদন পাঠান" -#: ../finch/gntaccount.c:126 ../finch/gntaccount.c:505 ../finch/gntblist.c:635 -#: ../finch/gntblist.c:798 ../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:2058 -#: ../libpurple/protocols/jabber/chat.c:704 -#: ../libpurple/protocols/jabber/chat.c:715 -#: ../libpurple/protocols/jabber/jabber.c:1779 -#: ../libpurple/protocols/qq/qq_process.c:90 -#: ../libpurple/protocols/silc/ops.c:76 ../libpurple/protocols/silc/ops.c:1473 -#: ../libpurple/protocols/silc10/ops.c:1451 msgid "Error" msgstr "ত্রুটি" -#: ../finch/gntaccount.c:126 msgid "Account was not added" msgstr "একাউন্ট যুক্ত করা হয়নি" # তিথি -#: ../finch/gntaccount.c:127 msgid "Username of an account must be non-empty." msgstr "একটি একাউন্টের ব্যবহারকারীর নাম ফাঁকা থাকতে পারবে না।" -#: ../finch/gntaccount.c:458 msgid "New mail notifications" msgstr "নতুন মেইলের প্রজ্ঞাপণ" -#: ../finch/gntaccount.c:468 msgid "Remember password" msgstr "গুপ্তসংকেত স্মরণ রাখুন" # তিথি -#: ../finch/gntaccount.c:506 msgid "There are no protocol plugins installed." msgstr "এখানে কোনো প্রটোকল প্লাগইন সংস্থাপিত করা নেই।" # তিথি -#: ../finch/gntaccount.c:507 msgid "(You probably forgot to 'make install'.)" msgstr "(আপনি সম্ভবত 'সংস্থাপন করতে' ভুলে গেছেন।)" -#: ../finch/gntaccount.c:517 ../finch/gntconn.c:138 -#: ../pidgin/gtkaccount.c:1498 ../pidgin/gtkblist.c:4796 msgid "Modify Account" msgstr "একাউন্ট পরিবর্তন করুন" -#: ../finch/gntaccount.c:517 msgid "New Account" msgstr "নতুন একাউন্ট" -#: ../finch/gntaccount.c:542 ../pidgin/gtkft.c:698 msgid "Protocol:" msgstr "প্রটোকল:" -#: ../finch/gntaccount.c:550 -#: ../pidgin/plugins/gevolution/new_person_dialog.c:294 msgid "Username:" msgstr "ব্যবহারকারীর নাম:" -#: ../finch/gntaccount.c:563 msgid "Password:" msgstr "গুপ্তসংকেত:" -#: ../finch/gntaccount.c:573 msgid "Alias:" msgstr "উপনাম:" #. Register checkbox -#: ../finch/gntaccount.c:584 msgid "Create this account on the server" msgstr "সার্ভারে এই একাউন্টটি তৈরী করুন।" #. Cancel button #. Cancel -#: ../finch/gntaccount.c:600 ../finch/gntaccount.c:664 -#: ../finch/gntaccount.c:955 ../finch/gntblist.c:681 ../finch/gntblist.c:787 -#: ../finch/gntblist.c:835 ../finch/gntblist.c:1187 ../finch/gntblist.c:1424 -#: ../finch/gntblist.c:1558 ../finch/gntblist.c:2734 ../finch/gntblist.c:2785 -#: ../finch/gntblist.c:2859 ../finch/gntblist.c:2921 ../finch/gntcertmgr.c:90 -#: ../finch/gntconv.c:596 ../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:1119 -#: ../libpurple/account.c:1451 ../libpurple/account.c:1486 -#: ../libpurple/conversation.c:1233 ../libpurple/plugins/buddynote.c:51 -#: ../libpurple/protocols/gg/gg.c:471 ../libpurple/protocols/gg/gg.c:613 -#: ../libpurple/protocols/gg/gg.c:742 ../libpurple/protocols/gg/gg.c:812 -#: ../libpurple/protocols/jabber/buddy.c:745 -#: ../libpurple/protocols/jabber/buddy.c:2452 -#: ../libpurple/protocols/jabber/buddy.c:2488 -#: ../libpurple/protocols/jabber/chat.c:813 -#: ../libpurple/protocols/jabber/jabber.c:1144 -#: ../libpurple/protocols/jabber/jabber.c:1153 -#: ../libpurple/protocols/jabber/jabber.c:1972 -#: ../libpurple/protocols/jabber/si.c:1103 -#: ../libpurple/protocols/jabber/usermood.c:199 -#: ../libpurple/protocols/jabber/usernick.c:78 -#: ../libpurple/protocols/jabber/xdata.c:401 -#: ../libpurple/protocols/msn/msn.c:320 ../libpurple/protocols/msn/msn.c:337 -#: ../libpurple/protocols/msn/msn.c:354 ../libpurple/protocols/msn/msn.c:371 -#: ../libpurple/protocols/msn/msn.c:392 ../libpurple/protocols/msnp9/msn.c:303 -#: ../libpurple/protocols/msnp9/msn.c:320 -#: ../libpurple/protocols/msnp9/msn.c:337 -#: ../libpurple/protocols/msnp9/msn.c:354 -#: ../libpurple/protocols/msnp9/msn.c:375 -#: ../libpurple/protocols/myspace/user.c:833 -#: ../libpurple/protocols/myspace/user.c:896 -#: ../libpurple/protocols/oscar/oscar.c:6320 -#: ../libpurple/protocols/oscar/peer.c:1052 -#: ../libpurple/protocols/qq/buddy_info.c:441 -#: ../libpurple/protocols/qq/buddy_opt.c:326 -#: ../libpurple/protocols/qq/buddy_opt.c:621 -#: ../libpurple/protocols/qq/buddy_opt.c:670 -#: ../libpurple/protocols/qq/buddy_opt.c:1137 -#: ../libpurple/protocols/qq/group.c:112 -#: ../libpurple/protocols/qq/group_join.c:151 -#: ../libpurple/protocols/qq/group_join.c:336 -#: ../libpurple/protocols/qq/group_opt.c:127 -#: ../libpurple/protocols/qq/group_opt.c:355 -#: ../libpurple/protocols/qq/qq_base.c:882 -#: ../libpurple/protocols/sametime/sametime.c:3445 -#: ../libpurple/protocols/sametime/sametime.c:3531 -#: ../libpurple/protocols/sametime/sametime.c:3705 -#: ../libpurple/protocols/sametime/sametime.c:5457 -#: ../libpurple/protocols/sametime/sametime.c:5547 -#: ../libpurple/protocols/sametime/sametime.c:5672 -#: ../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:1058 -#: ../libpurple/protocols/silc/silc.c:1266 -#: ../libpurple/protocols/silc10/buddy.c:468 -#: ../libpurple/protocols/silc10/buddy.c:1087 -#: ../libpurple/protocols/silc10/buddy.c:1192 -#: ../libpurple/protocols/silc10/chat.c:600 -#: ../libpurple/protocols/silc10/chat.c:730 -#: ../libpurple/protocols/silc10/ops.c:1910 -#: ../libpurple/protocols/silc10/silc.c:761 -#: ../libpurple/protocols/silc10/silc.c:967 -#: ../libpurple/protocols/yahoo/yahoo.c:1000 -#: ../libpurple/protocols/yahoo/yahoo.c:3583 -#: ../libpurple/protocols/yahoo/yahoo.c:3594 ../pidgin/gtkaccount.c:1865 -#: ../pidgin/gtkaccount.c:2417 ../pidgin/gtkblist.c:686 -#: ../pidgin/gtkblist.c:7013 ../pidgin/gtkcertmgr.c:197 -#: ../pidgin/gtkdialogs.c:738 ../pidgin/gtkdialogs.c:877 -#: ../pidgin/gtkdialogs.c:969 ../pidgin/gtkdialogs.c:989 -#: ../pidgin/gtkdialogs.c:1013 ../pidgin/gtkdialogs.c:1035 -#: ../pidgin/gtkdialogs.c:1083 ../pidgin/gtkdialogs.c:1124 -#: ../pidgin/gtkdialogs.c:1180 ../pidgin/gtkdialogs.c:1219 -#: ../pidgin/gtkdialogs.c:1246 ../pidgin/gtkimhtmltoolbar.c:439 -#: ../pidgin/gtklog.c:327 ../pidgin/gtkplugin.c:302 ../pidgin/gtkpounce.c:1139 -#: ../pidgin/gtkprivacy.c:509 ../pidgin/gtkprivacy.c:525 -#: ../pidgin/gtkprivacy.c:550 ../pidgin/gtkprivacy.c:564 -#: ../pidgin/gtkrequest.c:273 ../pidgin/gtksavedstatuses.c:348 -#: ../pidgin/gtkstatusbox.c:1628 msgid "Cancel" msgstr "বাতিল" #. Save button #. Save -#: ../finch/gntaccount.c:604 ../finch/gntcertmgr.c:310 ../finch/gntdebug.c:335 -#: ../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:1485 ../libpurple/plugins/buddynote.c:50 -#: ../libpurple/protocols/jabber/buddy.c:744 ../pidgin/gtkblist.c:686 -#: ../pidgin/gtkdebug.c:746 ../pidgin/gtkrequest.c:279 msgid "Save" msgstr "সংরক্ষণ" -#: ../finch/gntaccount.c:657 ../pidgin/gtkaccount.c:1856 -#: ../pidgin/gtksavedstatuses.c:336 ../pidgin/gtkstatusbox.c:1622 #, c-format msgid "Are you sure you want to delete %s?" msgstr "আপনি কি নিশ্চিত আপনি %s মুছে ফেলতে চান?" -#: ../finch/gntaccount.c:660 msgid "Delete Account" msgstr "একাউন্ট মুছে ফেলুন" #. Delete button -#: ../finch/gntaccount.c:663 ../finch/gntaccount.c:773 -#: ../finch/gntcertmgr.c:318 ../finch/gntpounce.c:678 ../finch/gntpounce.c:741 -#: ../finch/gntstatus.c:144 ../finch/gntstatus.c:210 -#: ../pidgin/gtkaccount.c:1864 ../pidgin/gtklog.c:326 -#: ../pidgin/gtkpounce.c:1138 ../pidgin/gtkrequest.c:276 -#: ../pidgin/gtksavedstatuses.c:347 ../pidgin/gtkstatusbox.c:1627 msgid "Delete" msgstr "মুছুন" -#: ../finch/gntaccount.c:734 ../finch/gntblist.c:2601 ../finch/gntui.c:94 -#: ../pidgin/gtkaccount.c:2278 msgid "Accounts" msgstr "একাউন্টসমূহ" -#: ../finch/gntaccount.c:740 msgid "You can enable/disable accounts from the following list." msgstr "আপনি নিম্নোক্ত তালিকা হতে একাউন্টসমূহকে সক্রিয়/নিষ্ক্রিয় করতে পারেন।" #. Add button -#: ../finch/gntaccount.c:764 ../finch/gntaccount.c:954 ../finch/gntblist.c:680 -#: ../finch/gntblist.c:787 ../finch/gntblist.c:835 ../finch/gntblist.c:3041 -#: ../finch/gntcertmgr.c:305 ../finch/gntnotify.c:443 ../finch/gntpounce.c:725 -#: ../finch/gntroomlist.c:275 ../finch/gntstatus.c:199 -#: ../libpurple/protocols/gg/gg.c:811 -#: ../libpurple/protocols/qq/buddy_opt.c:1136 -#: ../libpurple/protocols/sametime/sametime.c:5546 -#: ../libpurple/protocols/silc/chat.c:618 -#: ../libpurple/protocols/silc10/chat.c:599 ../pidgin/gtkaccount.c:2416 -#: ../pidgin/gtkblist.c:7012 ../pidgin/gtkconv.c:1745 -#: ../pidgin/gtkrequest.c:277 msgid "Add" msgstr "যুক্ত" #. Modify button -#: ../finch/gntaccount.c:769 ../finch/gntpounce.c:733 msgid "Modify" msgstr "পরিবর্তন" -#: ../finch/gntaccount.c:877 ../pidgin/gtkaccount.c:2363 #, c-format msgid "%s%s%s%s has made %s his or her buddy%s%s" msgstr "%1s%2s%3s%4s, %5s-কে তার বন্ধু করেছেন%6s%7s" -#: ../finch/gntaccount.c:950 ../pidgin/gtkaccount.c:2415 msgid "Add buddy to your list?" msgstr "আপনার তালিকায় বন্ধু যোগ করতে চান কি?" -#: ../finch/gntaccount.c:1010 ../pidgin/gtkaccount.c:2473 #, c-format msgid "%s%s%s%s wants to add %s to his or her buddy list%s%s" msgstr "%1s%2s%3s%4s তার বন্ধু তালিকা %s6%7s তে %5s কে যুক্ত করতে চায়" -#: ../finch/gntaccount.c:1035 ../finch/gntaccount.c:1038 -#: ../finch/gntaccount.c:1065 ../pidgin/gtkaccount.c:2496 -#: ../pidgin/gtkaccount.c:2503 msgid "Authorize buddy?" msgstr "বন্ধুকে কি প্রাধিকার দিতে চান?" # তিথি -#: ../finch/gntaccount.c:1042 ../finch/gntaccount.c:1069 -#: ../libpurple/protocols/qq/group_info.c:160 -#: ../libpurple/protocols/qq/group_opt.c:451 ../pidgin/gtkaccount.c:2497 -#: ../pidgin/gtkaccount.c:2504 msgid "Authorize" msgstr "অনুমোদিত" -#: ../finch/gntaccount.c:1043 ../finch/gntaccount.c:1070 -#: ../libpurple/protocols/qq/group_opt.c:450 ../pidgin/gtkaccount.c:2498 -#: ../pidgin/gtkaccount.c:2505 msgid "Deny" msgstr "প্রত্যাখ্যান করুন" -#: ../finch/gntblist.c:277 #, c-format msgid "" "Online: %d\n" @@ -329,12 +169,10 @@ msgstr "" "অনলাইন: %d\n" "মোট: %d" -#: ../finch/gntblist.c:286 #, c-format msgid "Account: %s (%s)" msgstr "একাউন্ট: %1s (%2s)" -#: ../finch/gntblist.c:298 #, c-format msgid "" "\n" @@ -343,353 +181,190 @@ msgstr "" "\n" "শেষ দেখা: %s আগে" -#: ../finch/gntblist.c:318 ../pidgin/gtkprefs.c:327 -#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:1 msgid "Default" msgstr "পূর্বনির্ধারিত" -#: ../finch/gntblist.c:624 msgid "You must provide a username for the buddy." msgstr "আপনাকে অবশ্যই বন্ধুর জন্য একটি নাম দিতে হবে।" # tithi -#: ../finch/gntblist.c:626 msgid "You must provide a group." msgstr "আপনাকে অবশ্যই একটি গ্রুপ প্রদান করতে হবে।" -#: ../finch/gntblist.c:628 msgid "You must select an account." msgstr "আপনাকে অবশ্যই একটি একাউন্ট নির্বাচন করতে হবে।" # tithi -#: ../finch/gntblist.c:630 msgid "The selected account is not online." msgstr "নির্বাচিত একাউন্টটি অনলাইনে নেই।" -#: ../finch/gntblist.c:635 msgid "Error adding buddy" msgstr "বন্ধুকে যুক্ত করতে ত্রুটি" -#: ../finch/gntblist.c:662 ../libpurple/protocols/irc/irc.c:990 -#: ../libpurple/protocols/irc/msgs.c:370 -#: ../libpurple/protocols/jabber/jabber.c:1055 -#: ../libpurple/protocols/jabber/jabber.c:1057 -#: ../libpurple/protocols/oscar/oscar.c:4103 -#: ../libpurple/protocols/silc/buddy.c:1554 -#: ../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:1240 -#: ../libpurple/protocols/silc10/buddy.c:1554 -#: ../libpurple/protocols/silc10/ops.c:1191 -#: ../libpurple/protocols/silc10/ops.c:1194 -#: ../libpurple/protocols/silc10/ops.c:1340 -#: ../libpurple/protocols/silc10/ops.c:1343 -#: ../libpurple/protocols/silc10/silc.c:941 ../pidgin/gtkaccount.c:1938 -#: ../pidgin/gtksavedstatuses.c:1013 msgid "Username" msgstr "ব্যবহারকারীর নাম" -#: ../finch/gntblist.c:665 msgid "Alias (optional)" msgstr "উপনাম (ঐচ্ছিক)" -#: ../finch/gntblist.c:668 msgid "Add in group" msgstr "গ্রুপে যোগ দিন" -#: ../finch/gntblist.c:672 ../finch/gntblist.c:766 ../finch/gntblist.c:1769 -#: ../finch/gntblist.c:2715 ../finch/gntblist.c:2771 ../finch/gntblist.c:2846 -#: ../finch/gntblist.c:2906 ../finch/gntnotify.c:186 ../finch/gntstatus.c:576 -#: ../libpurple/plugins/idle.c:153 ../libpurple/plugins/idle.c:190 -#: ../pidgin/gtkblist.c:3432 ../pidgin/gtknotify.c:532 -#: ../pidgin/gtkpounce.c:1306 ../pidgin/plugins/gevolution/gevolution.c:447 msgid "Account" msgstr "একাউন্ট" -#: ../finch/gntblist.c:678 ../finch/gntblist.c:1236 -#: ../libpurple/protocols/qq/buddy_opt.c:446 -#: ../libpurple/protocols/qq/qq.c:819 ../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:3421 ../pidgin/gtkblist.c:6561 -#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:449 msgid "Add Buddy" msgstr "বন্ধু যোগ করুন" -#: ../finch/gntblist.c:678 msgid "Please enter buddy information." msgstr "অনুগ্রহ করে বন্ধুর তথ্য প্রবেশ করান।" -#: ../finch/gntblist.c:734 ../libpurple/blist.c:1245 msgid "Chats" msgstr "আড্ডা" #. Extract their Name and put it in -#: ../finch/gntblist.c:772 ../finch/gntblist.c:2710 ../finch/gntblist.c:2766 -#: ../finch/gntblist.c:2901 ../finch/gntconv.c:584 ../finch/gntroomlist.c:299 -#: ../libpurple/protocols/jabber/jabber.c:1072 -#: ../libpurple/protocols/jabber/jabber.c:1075 -#: ../libpurple/protocols/msn/msn.c:2018 ../libpurple/protocols/msn/msn.c:2083 -#: ../libpurple/protocols/msn/msn.c:2110 -#: ../libpurple/protocols/msnp9/msn.c:1724 -#: ../libpurple/protocols/msnp9/msn.c:1789 -#: ../libpurple/protocols/msnp9/msn.c:1816 -#: ../libpurple/protocols/qq/buddy_info.c:120 ../pidgin/gtkplugin.c:770 -#: ../pidgin/gtkroomlist.c:739 -#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:132 -#: ../pidgin/plugins/gevolution/assoc-buddy.c:123 msgid "Name" msgstr "নাম" -#: ../finch/gntblist.c:775 ../finch/gntblist.c:1710 -#: ../libpurple/protocols/gg/gg.c:1636 ../libpurple/protocols/msn/msn.c:1837 -#: ../libpurple/protocols/msnp9/msn.c:1542 -#: ../libpurple/protocols/silc/chat.c:609 -#: ../libpurple/protocols/silc10/chat.c:590 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:704 -#: ../libpurple/protocols/zephyr/zephyr.c:791 -#: ../libpurple/protocols/zephyr/zephyr.c:1170 ../pidgin/gtkdialogs.c:988 -#: ../pidgin/gtkdialogs.c:1012 ../pidgin/gtkdialogs.c:1034 -#: ../pidgin/gtkrequest.c:280 msgid "Alias" msgstr "উপনাম" -#: ../finch/gntblist.c:778 ../finch/gntblist.c:3057 msgid "Group" msgstr "গ্রুপ" -#: ../finch/gntblist.c:782 ../finch/gntblist.c:1203 msgid "Auto-join" msgstr "স্বয়ং-যোগদান" -#: ../finch/gntblist.c:785 ../finch/gntblist.c:1238 ../pidgin/gtkblist.c:6926 msgid "Add Chat" msgstr "আড্ডায় যোগ দিন" # tihi -#: ../finch/gntblist.c:786 msgid "You can edit more information from the context menu later." msgstr "আপনি পরবর্তীতে প্রসঙ্গ তালিকা হতে আরও তথ্য সম্পাদনা করতে পারেন।" -#: ../finch/gntblist.c:798 msgid "Error adding group" msgstr "গ্রুপ যুক্ত করতে ত্রুটি" -#: ../finch/gntblist.c:799 msgid "You must give a name for the group to add." msgstr "আপনাকে অবশ্যই গ্রুপটি যোগ করার জন্য একটি নাম দিতে হবে।" -#: ../finch/gntblist.c:833 ../finch/gntblist.c:1240 -#: ../libpurple/protocols/sametime/sametime.c:5456 -#: ../libpurple/protocols/sametime/sametime.c:5544 ../pidgin/gtkblist.c:7009 msgid "Add Group" msgstr "গ্রুপ যুক্ত করুন" -#: ../finch/gntblist.c:833 msgid "Enter the name of the group" msgstr "গ্রুপের নাম প্রবেশ করান" -#: ../finch/gntblist.c:1186 ../pidgin/gtkblist.c:685 msgid "Edit Chat" msgstr "আড্ডা সম্পাদনা করা" # tihi -#: ../finch/gntblist.c:1186 msgid "Please Update the necessary fields." msgstr "অনুগ্রহ করে প্রয়োজনীয় ক্ষেত্রগুলো হালনাগাদ করুন।" -#: ../finch/gntblist.c:1187 ../finch/gntstatus.c:205 msgid "Edit" msgstr "সম্পাদন" -#: ../finch/gntblist.c:1212 msgid "Edit Settings" msgstr "বিন্যাসনসমূহ সম্পাদন করুন" -#: ../finch/gntblist.c:1248 ../pidgin/gtkutils.c:984 msgid "Information" msgstr "তথ্য" -#: ../finch/gntblist.c:1248 ../pidgin/gtkutils.c:984 msgid "Retrieving..." msgstr "উদ্ধার করছে..." -#: ../finch/gntblist.c:1313 ../finch/gntconv.c:633 -#: ../libpurple/protocols/qq/qq.c:845 ../libpurple/protocols/silc/chat.c:906 -#: ../libpurple/protocols/silc10/chat.c:883 msgid "Get Info" msgstr "তথ্য গ্রহণ করুন" -#: ../finch/gntblist.c:1317 msgid "Add Buddy Pounce" msgstr "বন্ধু পাউন্স যুক্ত করুন" -#: ../finch/gntblist.c:1324 ../finch/gntconv.c:645 -#: ../libpurple/protocols/jabber/si.c:1103 -#: ../libpurple/protocols/oscar/oscar.c:668 ../libpurple/protocols/qq/qq.c:831 -#: ../pidgin/gtkconv.c:1684 msgid "Send File" msgstr "ফাইল পাঠান" -#: ../finch/gntblist.c:1331 ../libpurple/protocols/gg/gg.c:1685 -#: ../libpurple/protocols/msn/msn.c:798 ../libpurple/protocols/msnp9/msn.c:581 msgid "Blocked" msgstr "আবদ্ধ" -#: ../finch/gntblist.c:1336 ../pidgin/gtkblist.c:1465 -#: ../pidgin/gtkblist.c:1594 msgid "Show when offline" msgstr "অফলাইনে থাকলে প্রদর্শন করুন" -#: ../finch/gntblist.c:1419 #, c-format msgid "Please enter the new name for %s" msgstr "অনুগ্রহ করে %s এর জন্য নতুন নাম প্রবেশ করান" -#: ../finch/gntblist.c:1421 ../finch/gntblist.c:1710 msgid "Rename" msgstr "পুনঃ নামকরণ করুন" -#: ../finch/gntblist.c:1421 msgid "Set Alias" msgstr "উপনাম নির্ধারন করুন" # tithi -#: ../finch/gntblist.c:1422 msgid "Enter empty string to reset the name." msgstr "নামটি পুনঃনির্ধারণ করতে খালি স্ট্রিং প্রবেশ করান।" # tithi -#: ../finch/gntblist.c:1536 msgid "Removing this contact will also remove all the buddies in the contact" msgstr "এই যোগাযোগটি অপসারণ করার কারণে যোগাযোগের সকল বন্ধুও অপসারিত হবে।" # tihi -#: ../finch/gntblist.c:1544 msgid "Removing this group will also remove all the buddies in the group" msgstr "এই গ্রুপটি অপসারণ করার কারণে গ্রুপের সকল বন্ধুও অপসারিত হবে।" -#: ../finch/gntblist.c:1549 #, c-format msgid "Are you sure you want to remove %s?" msgstr "আপনি কি নিশ্চিত আপনি %s অপসারণ করতে চান?" #. XXX: anything to do with the returned ui-handle? -#: ../finch/gntblist.c:1552 msgid "Confirm Remove" msgstr "অপসারণ নিশ্চিত করুন" -#: ../finch/gntblist.c:1557 ../finch/gntblist.c:1712 ../finch/gntft.c:245 -#: ../pidgin/gtkconv.c:1742 ../pidgin/gtkrequest.c:278 -#: ../pidgin/gtkstatusbox.c:269 msgid "Remove" msgstr "অপসারণ" #. Buddy List -#: ../finch/gntblist.c:1686 ../finch/gntblist.c:3098 ../finch/gntprefs.c:258 -#: ../finch/gntui.c:95 ../pidgin/gtkblist.c:5292 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:326 msgid "Buddy List" msgstr "Buddy List" -#: ../finch/gntblist.c:1717 msgid "Place tagged" msgstr "স্থান চিহ্নিত করা হয়েছে" # tithi -#: ../finch/gntblist.c:1722 msgid "Toggle Tag" msgstr "টোগল ট্যাগ" -#: ../finch/gntblist.c:1726 ../finch/gntblist.c:2915 msgid "View Log" msgstr "লগ প্রদর্শন" #. General -#: ../finch/gntblist.c:1762 ../libpurple/protocols/gg/gg.c:584 -#: ../libpurple/protocols/gg/gg.c:965 ../libpurple/protocols/gg/gg.c:1034 -#: ../libpurple/protocols/gg/gg.c:2353 -#: ../libpurple/protocols/jabber/buddy.c:314 -#: ../libpurple/protocols/jabber/buddy.c:1267 -#: ../libpurple/protocols/jabber/buddy.c:2243 -#: ../libpurple/protocols/jabber/buddy.c:2435 -#: ../libpurple/protocols/jabber/jabber.c:1083 -#: ../libpurple/protocols/jabber/jabber.c:1799 -#: ../libpurple/protocols/jabber/jabber.c:1813 -#: ../libpurple/protocols/jabber/jabber.c:1827 -#: ../libpurple/protocols/jabber/jabber.c:1841 -#: ../libpurple/protocols/jabber/jabber.c:1855 -#: ../libpurple/protocols/msn/msn.c:1845 ../libpurple/protocols/msn/msn.c:2021 -#: ../libpurple/protocols/msnp9/msn.c:1550 -#: ../libpurple/protocols/msnp9/msn.c:1727 -#: ../libpurple/protocols/qq/buddy_info.c:112 -#: ../libpurple/protocols/silc/buddy.c:1550 -#: ../libpurple/protocols/silc/ops.c:1016 -#: ../libpurple/protocols/silc/ops.c:1199 -#: ../libpurple/protocols/silc/ops.c:1337 -#: ../libpurple/protocols/silc10/buddy.c:1550 -#: ../libpurple/protocols/silc10/ops.c:1036 -#: ../libpurple/protocols/silc10/ops.c:1179 -#: ../libpurple/protocols/silc10/ops.c:1328 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1066 ../pidgin/gtkblist.c:3456 msgid "Nickname" msgstr "ডাকনাম" #. Never know what those translations might end up like... #. Idle stuff -#: ../finch/gntblist.c:1784 ../finch/gntprefs.c:261 -#: ../libpurple/protocols/bonjour/bonjour.c:365 -#: ../libpurple/protocols/jabber/buddy.c:807 -#: ../libpurple/protocols/jabber/buddy.c:977 -#: ../libpurple/protocols/msn/msn.c:740 ../libpurple/protocols/msn/msn.c:760 -#: ../libpurple/protocols/msn/msn.c:768 ../libpurple/protocols/msn/state.c:32 -#: ../libpurple/protocols/msnp9/msn.c:560 -#: ../libpurple/protocols/msnp9/state.c:32 -#: ../libpurple/protocols/novell/novell.c:2843 -#: ../libpurple/protocols/oscar/oscar.c:3152 -#: ../libpurple/protocols/yahoo/yahoo.c:3175 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:710 ../pidgin/gtkblist.c:3484 -#: ../pidgin/gtkblist.c:3958 ../pidgin/gtkprefs.c:2076 msgid "Idle" msgstr "অলস" -#: ../finch/gntblist.c:1798 msgid "On Mobile" msgstr "মোবাইলে" -#: ../finch/gntblist.c:2105 ../pidgin/gtkdocklet.c:582 msgid "New..." msgstr "নতুন..." -#: ../finch/gntblist.c:2112 ../pidgin/gtkdocklet.c:583 msgid "Saved..." msgstr "সংরক্ষিত..." -#: ../finch/gntblist.c:2569 ../finch/gntplugin.c:352 ../finch/gntui.c:100 -#: ../pidgin/gtkplugin.c:719 msgid "Plugins" msgstr "প্লাগইন" -#: ../finch/gntblist.c:2723 ../finch/gntblist.c:2728 msgid "Block/Unblock" msgstr "ব্লক/ব্লক সরান" -#: ../finch/gntblist.c:2724 ../libpurple/protocols/gg/gg.c:1719 msgid "Block" msgstr "ব্লক" -#: ../finch/gntblist.c:2725 ../libpurple/protocols/gg/gg.c:1715 msgid "Unblock" msgstr "ব্লক সরান" -#: ../finch/gntblist.c:2730 msgid "" "Please enter the username or alias of the person you would like to Block/" "Unblock." @@ -700,77 +375,29 @@ msgstr "" #. Not multiline #. Not masked? #. No hints? -#: ../finch/gntblist.c:2733 ../finch/gntblist.c:2784 ../finch/gntblist.c:2920 -#: ../finch/gntcertmgr.c:89 ../finch/gntconn.c:137 ../finch/gntconv.c:595 -#: ../finch/gntnotify.c:81 ../finch/plugins/gnthistory.c:177 -#: ../libpurple/account.c:1118 ../libpurple/account.c:1450 -#: ../libpurple/protocols/gg/gg.c:470 ../libpurple/protocols/gg/gg.c:612 -#: ../libpurple/protocols/gg/gg.c:741 -#: ../libpurple/protocols/jabber/jabber.c:1971 -#: ../libpurple/protocols/jabber/xdata.c:400 -#: ../libpurple/protocols/msn/msn.c:319 ../libpurple/protocols/msn/msn.c:336 -#: ../libpurple/protocols/msn/msn.c:353 ../libpurple/protocols/msn/msn.c:370 -#: ../libpurple/protocols/msnp9/msn.c:302 -#: ../libpurple/protocols/msnp9/msn.c:319 -#: ../libpurple/protocols/msnp9/msn.c:336 -#: ../libpurple/protocols/msnp9/msn.c:353 -#: ../libpurple/protocols/myspace/user.c:832 -#: ../libpurple/protocols/myspace/user.c:895 -#: ../libpurple/protocols/oscar/oscar.c:6319 -#: ../libpurple/protocols/qq/buddy_opt.c:620 -#: ../libpurple/protocols/qq/group_opt.c:126 -#: ../libpurple/protocols/qq/qq_base.c:881 -#: ../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:1057 -#: ../libpurple/protocols/silc10/buddy.c:467 -#: ../libpurple/protocols/silc10/buddy.c:1191 -#: ../libpurple/protocols/silc10/chat.c:425 -#: ../libpurple/protocols/silc10/chat.c:464 -#: ../libpurple/protocols/silc10/chat.c:729 -#: ../libpurple/protocols/silc10/ops.c:1297 -#: ../libpurple/protocols/silc10/ops.c:1909 -#: ../libpurple/protocols/silc10/silc.c:760 -#: ../libpurple/protocols/yahoo/yahoo.c:999 -#: ../libpurple/protocols/yahoo/yahoo.c:3582 -#: ../libpurple/protocols/yahoo/yahoo.c:3593 ../pidgin/gtkcertmgr.c:195 -#: ../pidgin/gtkdialogs.c:737 ../pidgin/gtkdialogs.c:876 -#: ../pidgin/gtkdialogs.c:968 ../pidgin/gtkrequest.c:272 msgid "OK" msgstr "ঠিক আছে" -#: ../finch/gntblist.c:2779 ../pidgin/gtkdialogs.c:732 msgid "New Instant Message" msgstr "নতুন তাৎক্ষণিক বার্তা" -#: ../finch/gntblist.c:2781 ../pidgin/gtkdialogs.c:734 msgid "Please enter the username or alias of the person you would like to IM." msgstr "" "অনুগ্রহ করে আপনি যে ব্যাক্তিকে তাৎক্ষণিক বার্তা পাঠাতে চান তার ব্যবহারকারী-নাম বা " "ডাকনাম প্রবেশ করান।" -#: ../finch/gntblist.c:2842 msgid "Channel" msgstr "চ্যানেল" -#: ../finch/gntblist.c:2854 ../pidgin/gtkblist.c:1038 msgid "Join a Chat" msgstr "আড্ডায় যোগ দিন" -#: ../finch/gntblist.c:2856 msgid "Please enter the name of the chat you want to join." msgstr "অনুগ্রহ করে আপনি যে আড্ডায় যোগ দিতে চান তার নাম প্রবেশ করান।" -#: ../finch/gntblist.c:2858 ../finch/gntnotify.c:452 msgid "Join" msgstr "যোগ দিন" -#: ../finch/gntblist.c:2917 ../pidgin/gtkdialogs.c:965 msgid "" "Please enter the username or alias of the person whose log you would like to " "view." @@ -779,91 +406,67 @@ msgstr "" "করান।" #. Create the "Options" frame. -#: ../finch/gntblist.c:2971 ../finch/gntpounce.c:459 ../pidgin/gtkpounce.c:826 msgid "Options" msgstr "পছন্দসমূহ" -#: ../finch/gntblist.c:2977 msgid "Send IM..." msgstr "তাৎক্ষনিক বার্তা প্রেরণ..." -#: ../finch/gntblist.c:2982 msgid "Block/Unblock..." msgstr "ব্লক করুন/ব্লক সরান..." -#: ../finch/gntblist.c:2987 ../pidgin/gtkdocklet.c:711 msgid "Join Chat..." msgstr "আড্ডায় যোগ দিন..." -#: ../finch/gntblist.c:2992 ../finch/gntconv.c:657 msgid "View Log..." msgstr "লগ প্রদর্শন..." -#: ../finch/gntblist.c:2997 msgid "View All Logs" msgstr "সব লগ প্রদর্শন করুন" # tithi -#: ../finch/gntblist.c:3002 msgid "Show" msgstr "প্রদর্শন করুন" -#: ../finch/gntblist.c:3007 msgid "Empty groups" msgstr "ফাঁকা গ্রুপগুলো" -#: ../finch/gntblist.c:3014 msgid "Offline buddies" msgstr "অফলাইন বন্ধুরা" -#: ../finch/gntblist.c:3021 msgid "Sort" msgstr "সাজান" -#: ../finch/gntblist.c:3026 msgid "By Status" msgstr "অবস্থা অনুসারে" -#: ../finch/gntblist.c:3031 ../pidgin/gtkblist.c:4449 msgid "Alphabetically" msgstr "বর্ণানুক্রমিকভাবে" -#: ../finch/gntblist.c:3036 msgid "By Log Size" msgstr "লগের আকার অনুসারে" -#: ../finch/gntblist.c:3047 msgid "Buddy" msgstr "বন্ধু" -#: ../finch/gntblist.c:3052 ../libpurple/protocols/oscar/oscar.c:662 -#: ../libpurple/protocols/silc/silc.c:1003 -#: ../libpurple/protocols/silc/util.c:559 -#: ../libpurple/protocols/silc10/silc.c:704 -#: ../libpurple/protocols/silc10/util.c:553 msgid "Chat" msgstr "আড্ডা" -#: ../finch/gntblist.c:3062 ../finch/plugins/grouping.c:365 msgid "Grouping" msgstr "দলগতকরণ" -#: ../finch/gntcertmgr.c:85 ../pidgin/gtkcertmgr.c:188 msgid "Certificate Import" msgstr "প্রত্যয়নপত্র আমদানি করুন" # তিথি -#: ../finch/gntcertmgr.c:86 ../pidgin/gtkcertmgr.c:189 msgid "Specify a hostname" msgstr "হোস্টনাম উল্লেখ করুন।" # tithi -#: ../finch/gntcertmgr.c:87 ../pidgin/gtkcertmgr.c:190 msgid "Type the host name this certificate is for." msgstr "এই প্রত্যয়ণপত্রের হোস্ট নাম টাইপ করুন।" # tithi -#: ../finch/gntcertmgr.c:96 ../pidgin/gtkcertmgr.c:210 #, c-format msgid "" "File %s could not be imported.\n" @@ -873,21 +476,17 @@ msgstr "" "নিশ্চিত করুন যে ফাইলটি পঠনযোগ্য এবং PEM বিন্যাসের।\n" # tithi -#: ../finch/gntcertmgr.c:98 ../pidgin/gtkcertmgr.c:212 msgid "Certificate Import Error" msgstr "প্রত্যয়ণপত্র আমদানি করার ত্রুটি" # tithi -#: ../finch/gntcertmgr.c:99 ../pidgin/gtkcertmgr.c:213 msgid "X.509 certificate import failed" msgstr "X.৫০৯ প্রত্যয়ণপত্র আমদানি করতে ব্যর্থ" -#: ../finch/gntcertmgr.c:109 ../pidgin/gtkcertmgr.c:224 msgid "Select a PEM certificate" msgstr "একটি PEM প্রত্যয়ণপত্র নির্বাচন করুন" # tithi -#: ../finch/gntcertmgr.c:126 ../pidgin/gtkcertmgr.c:245 #, c-format msgid "" "Export to file %s failed.\n" @@ -897,27 +496,22 @@ msgstr "" "পরীক্ষা করুন যে আপনার উদ্দিষ্ট পথে লিখন অনুমতি আছে\n" # tithi -#: ../finch/gntcertmgr.c:128 ../pidgin/gtkcertmgr.c:247 msgid "Certificate Export Error" msgstr "প্রত্যয়ণপত্র রপ্তানি করার ত্রুটি" # tithi -#: ../finch/gntcertmgr.c:129 ../pidgin/gtkcertmgr.c:248 msgid "X.509 certificate export failed" msgstr "X.৫০৯ প্রত্যয়ণপত্র রপ্তানি করতে ব্যর্থ" # tithi -#: ../finch/gntcertmgr.c:158 ../pidgin/gtkcertmgr.c:298 msgid "PEM X.509 Certificate Export" msgstr "PEM X.৫০৯ প্রত্যয়ণপত্র রপ্তানি করুন" -#: ../finch/gntcertmgr.c:187 #, c-format msgid "Certificate for %s" msgstr "%s-এর প্রত্যয়ণপত্র" # tithi -#: ../finch/gntcertmgr.c:194 #, c-format msgid "" "Common name: %s\n" @@ -931,60 +525,41 @@ msgstr "" "%s" # tithi -#: ../finch/gntcertmgr.c:197 msgid "SSL Host Certificate" msgstr "SSL হোস্ট প্রত্যয়ণপত্র" # tithi -#: ../finch/gntcertmgr.c:232 ../pidgin/gtkcertmgr.c:371 #, c-format msgid "Really delete certificate for %s?" msgstr "%s এর জন্য প্রত্যায়নপত্র কি সত্যিই মুছে ফেলতে চান?" # tithi -#: ../finch/gntcertmgr.c:235 ../pidgin/gtkcertmgr.c:373 msgid "Confirm certificate delete" msgstr "প্রত্যায়নপত্র মুছে ফেলা নিশ্চিত করুন" # tithi -#: ../finch/gntcertmgr.c:292 ../pidgin/gtkcertmgr.c:613 msgid "Certificate Manager" msgstr "প্রত্যায়নপত্র ব্যবস্থাপক" #. Creating the user splits -#: ../finch/gntcertmgr.c:297 ../libpurple/protocols/bonjour/bonjour.c:705 -#: ../libpurple/protocols/silc/silc.c:1242 -#: ../libpurple/protocols/silc10/silc.c:943 ../pidgin/gtkcertmgr.c:446 msgid "Hostname" msgstr "হোস্ট-নাম" -#: ../finch/gntcertmgr.c:314 ../finch/gntnotify.c:446 ../pidgin/gtkconv.c:1721 -#: ../pidgin/gtkdebug.c:832 msgid "Info" msgstr "তথ্য" #. Close button -#: ../finch/gntcertmgr.c:323 ../finch/gntft.c:255 ../finch/gntnotify.c:194 -#: ../finch/gntplugin.c:220 ../finch/gntplugin.c:413 ../finch/gntpounce.c:750 -#: ../finch/gntroomlist.c:276 ../finch/gntstatus.c:216 -#: ../libpurple/protocols/msn/msn.c:475 ../libpurple/protocols/msnp9/msn.c:419 -#: ../libpurple/protocols/silc/util.c:385 -#: ../libpurple/protocols/silc10/util.c:377 ../pidgin/gtkaccount.c:2390 -#: ../pidgin/gtkrequest.c:275 msgid "Close" msgstr "বন্ধ" -#: ../finch/gntconn.c:126 #, c-format msgid "%s (%s)" msgstr "%1s (%2s)" -#: ../finch/gntconn.c:129 #, c-format msgid "%s disconnected." msgstr "%s বিচ্ছিন্ন।" -#: ../finch/gntconn.c:130 #, c-format msgid "" "%s\n" @@ -997,12 +572,10 @@ msgstr "" "যতক্ষন পর্যন্ত না আপনি অ্যাকাউন্টটি ত্রুটিমুক্ত এবং পুনরায় সক্রিয় না করছেন ততক্ষন পর্যন্ত " "ফিঞ্চ পুনঃ সংযোগ করার চেষ্টা করবে না।" -#: ../finch/gntconn.c:139 msgid "Re-enable Account" msgstr "একাউন্ট পুনঃ সক্রিয় করুন" # tithi -#: ../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." @@ -1010,45 +583,35 @@ msgstr "" "এই একাউন্টটি বিচ্ছিন্ন হয়েছে এবং আপনি আর আড্ডায় নেই। একাউন্টটি পুনরায় সংযোজিত হলে " "আপনি স্বয়ংক্রিয় ভাবে পুনরায় আড্ডায় যুক্ত হবেন।" -#: ../finch/gntconv.c:160 msgid "No such command." msgstr "এমন কোনো নির্দেশ নেই।" -#: ../finch/gntconv.c:164 ../pidgin/gtkconv.c:496 msgid "Syntax Error: You typed the wrong number of arguments to that command." msgstr "বাক্যরীতি ত্রুটি: আপনি ঐ নির্দেশে ভূল সংখ্যক যুক্তি টাইপ করেছেন।" -#: ../finch/gntconv.c:169 ../pidgin/gtkconv.c:502 msgid "Your command failed for an unknown reason." msgstr "একটি অজানা কারণে আপনার নির্দেশ ব্যর্থ হয়েছে।" -#: ../finch/gntconv.c:174 ../pidgin/gtkconv.c:509 msgid "That command only works in chats, not IMs." msgstr "ঐ নির্দেশ শুধুমাত্র আড্ডাতেই প্রযোজ্য, তাৎক্ষণিক বার্তায় নয়।" -#: ../finch/gntconv.c:177 ../pidgin/gtkconv.c:512 msgid "That command only works in IMs, not chats." msgstr "ঐ নির্দেশটি শুধুমাত্র তাৎক্ষণিক বার্তাতেই প্রযোজ্য, আড্ডার ক্ষেত্রে নয়।" -#: ../finch/gntconv.c:181 ../pidgin/gtkconv.c:517 msgid "That command doesn't work on this protocol." msgstr "ঐ নির্দেশটি এই প্রোটোকলে কাজ করে না।" -#: ../finch/gntconv.c:189 msgid "Message was not sent, because you are not signed on." msgstr "বার্তা পাঠানো হয়নি, কারণ আপনি স্বাক্ষরিত নন।" -#: ../finch/gntconv.c:269 #, c-format msgid "%s (%s -- %s)" msgstr "%1s (%2s -- %3s)" -#: ../finch/gntconv.c:292 #, c-format msgid "%s [%s]" msgstr "%1s [%2s]" -#: ../finch/gntconv.c:297 ../finch/gntconv.c:974 ../pidgin/gtkconv.c:3647 #, c-format msgid "" "\n" @@ -1057,33 +620,25 @@ msgstr "" "\n" "%s টাইপ করছে..." -#: ../finch/gntconv.c:316 msgid "You have left this chat." msgstr "আপনি এই আড্ডা ত্যাগ করেছেন।" -#: ../finch/gntconv.c:434 ../pidgin/gtkconv.c:1407 msgid "Logging started. Future messages in this conversation will be logged." msgstr "লগ করা শুরু হয়েছে। এই কথোপকথনের ভবিষৎ বার্তাসমূহ লগ করা হবে।" -#: ../finch/gntconv.c:438 ../pidgin/gtkconv.c:1415 msgid "" "Logging stopped. Future messages in this conversation will not be logged." msgstr "লগ করা বন্ধ করা হয়েছে। এই কথোপকথনের ভবিষৎ বার্তাসমূহ লগ করা হবে।" -#: ../finch/gntconv.c:524 msgid "Send To" msgstr "এখানে প্রেরণ করুন" -#: ../finch/gntconv.c:588 msgid "Invite message" msgstr "আমন্ত্রণ বার্তা" -#: ../finch/gntconv.c:590 ../finch/gntnotify.c:455 -#: ../libpurple/protocols/sametime/sametime.c:3530 msgid "Invite" msgstr "আমন্ত্রণ" -#: ../finch/gntconv.c:592 msgid "" "Please enter the name of the user you wish to invite,\n" "along with an optional invite message." @@ -1091,54 +646,42 @@ msgstr "" "একটি ঐচ্ছিক আমন্ত্রণ বার্তার সাথে,\n" "অনুগ্রহ করে আপনি যে ব্যবহারকারীকে আমন্ত্রণ করতে চান তার নামটি প্রবেশ করান।" -#: ../finch/gntconv.c:610 msgid "Conversation" msgstr "কথোপকথন" -#: ../finch/gntconv.c:616 msgid "Clear Scrollback" msgstr "স্ক্রলবেক পরিস্কার করুন" -#: ../finch/gntconv.c:620 ../finch/gntprefs.c:191 msgid "Show Timestamps" msgstr "সময়ছাপ প্রদর্শন করুন" -#: ../finch/gntconv.c:638 msgid "Add Buddy Pounce..." msgstr "বন্ধু পাউন্স যুক্ত করুন..." -#: ../finch/gntconv.c:652 msgid "Invite..." msgstr "আমন্ত্রণ..." -#: ../finch/gntconv.c:661 msgid "Enable Logging" msgstr "লগকরণ সক্রিয় করুন" -#: ../finch/gntconv.c:667 msgid "Enable Sounds" msgstr "শব্দ সক্রিয় করুন" -#: ../finch/gntconv.c:927 msgid "<AUTO-REPLY> " msgstr "<AUTO-REPLY>" -#: ../finch/gntconv.c:1067 #, c-format msgid "List of %d user:\n" msgid_plural "List of %d users:\n" msgstr[0] "%d ব্যবহারকারীর তালিকা:...\n" msgstr[1] "%d ব্যবহারকারীগণের তালিকা:\n" -#: ../finch/gntconv.c:1227 ../pidgin/gtkconv.c:341 msgid "Supported debug options are: version" msgstr "সমর্থিত ডিবাগ পছন্দসমূহ হল: সংস্করণ" -#: ../finch/gntconv.c:1263 ../pidgin/gtkconv.c:393 msgid "No such command (in this context)." msgstr "এমন কোনো নির্দেশ নেই (এই প্রসঙ্গে)।" -#: ../finch/gntconv.c:1266 ../pidgin/gtkconv.c:396 msgid "" "Use \"/help <command>\" for help on a specific command.\n" "The following commands are available in this context:\n" @@ -1148,7 +691,6 @@ msgstr "" "এই ক্ষেত্রে নিম্নোক্ত নির্দেশসমূহ সহজলভ্য:\n" # tithi -#: ../finch/gntconv.c:1311 #, c-format msgid "" "%s is not a valid message class. See '/help msgcolor' for valid message " @@ -1156,12 +698,10 @@ msgid "" msgstr "%s বার্তার বৈধ শ্রেণী নয়। বার্তাসমূহের বৈধ শ্রেণীর '/সহায়ক বার্তা-রং' দেখুন।" # tithi -#: ../finch/gntconv.c:1318 ../finch/gntconv.c:1325 #, c-format msgid "%s is not a valid color. See '/help msgcolor' for valid colors." msgstr "%s বৈধ রং নয়। বৈধ রং এর জন্য '/সহায়ক বার্তা-রং' দেখুন।" -#: ../finch/gntconv.c:1382 ../pidgin/gtkconv.c:7877 msgid "" "say <message>: Send a message normally as if you weren't using a " "command." @@ -1169,55 +709,43 @@ msgstr "" "বলুন <বার্তা>: একটি বার্তা সাধারণত এমন ভাবে পাঠান যেন আপনি নির্দেশ ব্যবহার " "করেন নি।" -#: ../finch/gntconv.c:1385 ../pidgin/gtkconv.c:7880 msgid "me <action>: Send an IRC style action to a buddy or chat." msgstr "আমি <কার্য>: কোনো বন্ধুকে বা আড্ডায় আইআরসি শৈলীর কার্য পাঠান।" -#: ../finch/gntconv.c:1388 ../pidgin/gtkconv.c:7883 msgid "" "debug <option>: Send various debug information to the current " "conversation." msgstr "ডিবাগ <পছন্দ>: বর্তমান কথোপকথনে বিভিন্ন ডিবাগ তথ্য পাঠান।" -#: ../finch/gntconv.c:1391 ../pidgin/gtkconv.c:7886 msgid "clear: Clears the conversation scrollback." msgstr "পরিস্কার: কথোপকথনের স্ক্রলবেক পরিস্কার করে।" -#: ../finch/gntconv.c:1394 ../pidgin/gtkconv.c:7892 msgid "help <command>: Help on a specific command." msgstr "সহায়তা <নির্দেশ>: একটি সুনির্দিষ্ট নির্দেশের সহায়িকা।" # tithi -#: ../finch/gntconv.c:1397 msgid "users: Show the list of users in the chat." msgstr "ব্যবহারকারীগণ: আড্ডায় ব্যবহারকারীদের তালিকা দেখান।" -#: ../finch/gntconv.c:1402 msgid "plugins: Show the plugins window." msgstr "প্লাগইন: প্লাগইনের উইন্ডো দেখান।" -#: ../finch/gntconv.c:1405 msgid "buddylist: Show the buddylist." msgstr "বন্ধু-তালিকা: বন্ধু-তালিকা দেখান।" -#: ../finch/gntconv.c:1408 msgid "accounts: Show the accounts window." msgstr "অ্যাকাউন্ট: অ্যাকাউন্টের উইন্ডো দেখান।" -#: ../finch/gntconv.c:1411 msgid "debugwin: Show the debug window." msgstr "ত্রুটিমুক্তকরণ উইন্ডো: ডিবাগ উইন্ডো দেখান।" -#: ../finch/gntconv.c:1414 msgid "prefs: Show the preference window." msgstr "পছন্দ: পছন্দের উইন্ডো দেখান।" -#: ../finch/gntconv.c:1417 msgid "statuses: Show the savedstatuses window." msgstr "অবস্থাসমূহ: সংরক্ষিত-অবস্থাসমূহের উইন্ডো দেখান।" # fix me tithi -#: ../finch/gntconv.c:1423 msgid "" "msgcolor <class> <foreground> <background>: Set the color " "for different classes of messages in the conversation window.<br> <" @@ -1231,12 +759,9 @@ msgstr "" "প্রেক্ষাপট&10gt;: কালো, লাল, সবুজ, নীল, সাদা, ধূসর, গাঢ় ধূসর, ম্যাজেন্ডা, সায়ান, " "পূর্বনির্ধারিত<br><br>উদাহরণ:<br> বার্তা-রং পূর্বনির্ধারিতভাবে সায়ান প্রেরণ করে" -#: ../finch/gntdebug.c:269 ../pidgin/gtkconv.c:969 ../pidgin/gtkdebug.c:219 -#: ../pidgin/gtkft.c:545 msgid "Unable to open file." msgstr "ফাইল খুলতে সমর্থ নয়।" -#: ../finch/gntdebug.c:309 ../finch/gntui.c:98 ../pidgin/gtkdebug.c:689 msgid "Debug Window" msgstr "ডিবাগ উইন্ডো" @@ -1244,20 +769,16 @@ msgstr "ডিবাগ উইন্ডো" #. * 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:330 ../pidgin/gtkdebug.c:751 msgid "Clear" msgstr "মুছে ফেলো" -#: ../finch/gntdebug.c:341 msgid "Filter:" msgstr "পরিশ্রুতক:" -#: ../finch/gntdebug.c:347 ../pidgin/gtkdebug.c:760 msgid "Pause" msgstr "বিরতি" # fix me tithi -#: ../finch/gntft.c:120 ../pidgin/gtkft.c:229 #, c-format msgid "File Transfers - %d%% of %d file" msgid_plural "File Transfers - %d%% of %d files" @@ -1265,123 +786,80 @@ msgstr[0] "ফাইল স্থানান্তর করে - %d ফাই msgstr[1] "ফাইল স্থানান্তর করে - %d ফাইলসমূহের %d%%" #. Create the window. -#: ../finch/gntft.c:127 ../finch/gntft.c:214 ../finch/gntui.c:99 -#: ../pidgin/gtkft.c:236 ../pidgin/gtkft.c:763 msgid "File Transfers" msgstr "ফাইল স্থানান্তর করে" -#: ../finch/gntft.c:219 ../pidgin/gtkft.c:647 msgid "Progress" msgstr "অগ্রগতি" -#: ../finch/gntft.c:219 ../pidgin/gtkft.c:654 msgid "Filename" msgstr "ফাইল-নাম" -#: ../finch/gntft.c:219 ../pidgin/gtkft.c:661 msgid "Size" msgstr "আকার" -#: ../finch/gntft.c:219 msgid "Speed" msgstr "গতি" -#: ../finch/gntft.c:219 ../pidgin/gtkft.c:668 msgid "Remaining" msgstr "অবশিষ্ট" #. XXX: Use of ggp_str_to_uin() is an ugly hack! -#: ../finch/gntft.c:219 ../finch/gntstatus.c:547 ../finch/gntstatus.c:576 -#: ../libpurple/protocols/bonjour/bonjour.c:369 -#: ../libpurple/protocols/gg/gg.c:954 ../libpurple/protocols/gg/gg.c:1642 -#: ../libpurple/protocols/gg/gg.c:1650 -#: ../libpurple/protocols/jabber/buddy.c:822 -#: ../libpurple/protocols/jabber/buddy.c:826 -#: ../libpurple/protocols/jabber/buddy.c:991 -#: ../libpurple/protocols/jabber/jabber.c:1764 -#: ../libpurple/protocols/msn/msn.c:752 ../libpurple/protocols/msn/msn.c:762 -#: ../libpurple/protocols/msn/msn.c:767 ../libpurple/protocols/msn/msn.c:770 -#: ../libpurple/protocols/msnp9/msn.c:559 -#: ../libpurple/protocols/novell/novell.c:2853 -#: ../libpurple/protocols/oscar/oscar.c:921 -#: ../libpurple/protocols/oscar/oscar.c:2959 -#: ../libpurple/protocols/sametime/sametime.c:3320 -#: ../libpurple/protocols/sametime/sametime.c:4212 -#: ../libpurple/protocols/yahoo/yahoo.c:3326 ../pidgin/gtkblist.c:3528 -#: ../pidgin/gtkblist.c:3542 ../pidgin/gtkblist.c:3544 -#: ../pidgin/gtksavedstatuses.c:1032 ../pidgin/gtksavedstatuses.c:1183 msgid "Status" msgstr "অবস্থা" -#: ../finch/gntft.c:229 msgid "Close this window when all transfers finish" msgstr "সব স্থানান্তর শেষ হলে এই উইন্ডোটি বন্ধ করুন" -#: ../finch/gntft.c:236 msgid "Clear finished transfers" msgstr "সমাপ্তকৃত স্থানান্তরসমূহ পরিস্কার করুন" -#: ../finch/gntft.c:250 ../finch/gntroomlist.c:273 msgid "Stop" msgstr "থামুন" -#: ../finch/gntft.c:323 ../pidgin/gtkft.c:169 ../pidgin/gtkft.c:936 msgid "Waiting for transfer to begin" msgstr "স্থানান্তর শুরু করার জন্য অপেক্ষা করছে" -#: ../finch/gntft.c:390 ../pidgin/gtkft.c:163 ../pidgin/gtkft.c:1017 msgid "Canceled" msgstr "বাতিল করা হয়েছে" -#: ../finch/gntft.c:392 ../pidgin/gtkft.c:1019 msgid "Failed" msgstr "ব্যর্থ হয়েছে" -#: ../finch/gntft.c:438 ../pidgin/gtkft.c:134 #, c-format msgid "%.2f KiB/s" msgstr "%.2f কিলোবাইট/সেকেন্ডে" -#: ../finch/gntft.c:449 msgid "Sent" msgstr "প্রেরিত" -#: ../finch/gntft.c:449 msgid "Received" msgstr "গৃহীত" -#: ../finch/gntft.c:450 ../pidgin/gtkft.c:160 ../pidgin/gtkft.c:1082 msgid "Finished" msgstr "শেষ" -#: ../finch/gntft.c:452 #, c-format msgid "The file was saved as %s." msgstr "ফাইলটি %s হিসেবে সংরক্ষণ করা হয়েছিল।" -#: ../finch/gntft.c:459 msgid "Sending" msgstr "পাঠাচ্ছে" -#: ../finch/gntft.c:459 msgid "Receiving" msgstr "গ্রহণ করছে" -#: ../finch/gntlog.c:192 #, c-format msgid "Conversation in %s on %s" msgstr "%1s এ %2s এর উপর কথোপকথন" -#: ../finch/gntlog.c:195 #, c-format msgid "Conversation with %s on %s" msgstr "%2s এর উপর %1s-এর সঙ্গে কথোপকথন" -#: ../finch/gntlog.c:238 ../pidgin/gtklog.c:503 msgid "%B %Y" msgstr "%B %Y" -#: ../finch/gntlog.c:278 ../pidgin/gtklog.c:550 msgid "" "System events will only be logged if the \"Log all status changes to system " "log\" preference is enabled." @@ -1389,7 +867,6 @@ msgstr "" "\"সকল অবস্থার পরিবর্তনসমূহ সিস্টেমের লগে লগ করুন\" প্রাধিকার যদি সক্রিয় থাকে তবে " "শুধুমাত্র সিস্টেমের ইভেন্টগুলো লগ করা হবে।" -#: ../finch/gntlog.c:282 ../pidgin/gtklog.c:554 msgid "" "Instant messages will only be logged if the \"Log all instant messages\" " "preference is enabled." @@ -1397,114 +874,88 @@ msgstr "" "\"সব তাৎক্ষণিক বার্তা লগ করুন\" প্রাধিকার যদি সক্রিয় থাকে তবে শুধুমাত্র তাৎক্ষণিক " "বার্তাগুলো লগ করা হবে।" -#: ../finch/gntlog.c:285 ../pidgin/gtklog.c:557 msgid "" "Chats will only be logged if the \"Log all chats\" preference is enabled." msgstr "" "\"সব আড্ডা লগ করুন\" প্রাধিকার যদি সক্রিয় থাকে তবে শুধুমাত্র আড্ডাগুলো লগ করা হবে।" -#: ../finch/gntlog.c:291 ../pidgin/gtklog.c:566 msgid "No logs were found" msgstr "কোনো লগ খুঁজে পাওয়া যায়নি।" -#: ../finch/gntlog.c:338 ../pidgin/gtklog.c:646 msgid "Total log size:" msgstr "মোট লগ আকার:" # fix me tithi #. Search box ********* -#: ../finch/gntlog.c:346 msgid "Scroll/Search: " msgstr "স্ক্রল করুন/খুঁজুন:" -#: ../finch/gntlog.c:404 ../pidgin/gtklog.c:716 #, c-format msgid "Conversations in %s" msgstr "%s-এ কথোপকথন" -#: ../finch/gntlog.c:412 ../finch/gntlog.c:485 ../pidgin/gtklog.c:724 -#: ../pidgin/gtklog.c:799 #, c-format msgid "Conversations with %s" msgstr "%s-এর সঙ্গে কথোপকথন" -#: ../finch/gntlog.c:414 msgid "All Conversations" msgstr "সকল কথোপকথন" -#: ../finch/gntlog.c:510 ../pidgin/gtklog.c:824 msgid "System Log" msgstr "সিস্টেম লগ" -#: ../finch/gntnotify.c:177 msgid "Emails" msgstr "ই-মেইলসমূহ" -#: ../finch/gntnotify.c:183 ../finch/gntnotify.c:243 msgid "You have mail!" msgstr "আপনার মেইল আছে!" -#: ../finch/gntnotify.c:186 ../pidgin/gtknotify.c:539 msgid "Sender" msgstr "প্রেরক" -#: ../finch/gntnotify.c:186 ../pidgin/gtknotify.c:546 msgid "Subject" msgstr "বিষয়" -#: ../finch/gntnotify.c:214 #, c-format msgid "%s (%s) has %d new message." msgid_plural "%s (%s) has %d new messages." msgstr[0] "%1s (%2s) এর %3dটি নতুন বার্তা আছে।" msgstr[1] "%1s (%2s)-এর %3dগুলো নতুন বার্তা আছে।" -#: ../finch/gntnotify.c:243 ../pidgin/gtknotify.c:354 msgid "New Mail" msgstr "নতুন মেইল" -#: ../finch/gntnotify.c:349 ../pidgin/gtknotify.c:983 #, c-format msgid "Info for %s" msgstr "%s এর জন্য তথ্য" -#: ../finch/gntnotify.c:350 ../libpurple/protocols/toc/toc.c:476 -#: ../pidgin/gtknotify.c:984 msgid "Buddy Information" msgstr "বন্ধুর তথ্য" -#: ../finch/gntnotify.c:440 ../libpurple/protocols/qq/group_join.c:338 msgid "Continue" msgstr "অব্যাহত" -#: ../finch/gntnotify.c:449 ../pidgin/gtkconv.c:1671 msgid "IM" msgstr "তাৎক্ষণিক বার্তা" -#: ../finch/gntnotify.c:458 msgid "(none)" msgstr "(কোনটি না)" -#: ../finch/gntnotify.c:484 msgid "URI" msgstr "URI" # tithi -#: ../finch/gntplugin.c:84 ../finch/gntplugin.c:93 msgid "ERROR" msgstr "ত্রুটি" -#: ../finch/gntplugin.c:84 msgid "loading plugin failed" msgstr "প্লাগইন লোড করতে ব্যর্থ" # tithi -#: ../finch/gntplugin.c:93 msgid "unloading plugin failed" msgstr "প্লাগইন লোডহীন করতে ব্যর্থ।" # tithi -#: ../finch/gntplugin.c:139 #, c-format msgid "" "Name: %s\n" @@ -1522,46 +973,37 @@ msgstr "" "ফাইলের নাম: %6s\n" # tithi -#: ../finch/gntplugin.c:197 msgid "Plugin need to be loaded before you can configure it." msgstr "প্লাগইন বিন্যাস করার পূর্বে আপনার এটা লোড করা প্রয়োজন।" # tithi -#: ../finch/gntplugin.c:245 msgid "No configuration options for this plugin." msgstr "এই প্লাগইনের জন্য কোনো বিন্যাসন পছন্দ নেই।" -#: ../finch/gntplugin.c:266 msgid "Error loading plugin" msgstr "প্লাগইনটি লোডে ত্রুটি" # tithi -#: ../finch/gntplugin.c:267 msgid "The selected file is not a valid plugin." msgstr "নির্বাচিত ফাইলটি বৈধ প্লাগইন নয়।" # tithi -#: ../finch/gntplugin.c:268 msgid "" "Please open the debug window and try again to see the exact error message." msgstr "" "অনুগ্রহপূর্বক ত্রুটিমুক্তকরণ উইন্ডো খুলুন এবং সঠিক ত্রুটি বার্তাটি দেখতে পুনরায় চেষ্টা করুন।" -#: ../finch/gntplugin.c:331 msgid "Select plugin to install" msgstr "সংস্থাপনে জন্য প্লাগইন নির্বাচন করুন" # tithi -#: ../finch/gntplugin.c:357 msgid "You can (un)load plugins from the following list." msgstr "আপনি নিম্নোক্ত তালিকা হতে প্লাগইনগুলোকে লোড(মুক্ত) করতে পারেন।" # tithi -#: ../finch/gntplugin.c:408 msgid "Install Plugin..." msgstr "প্লাগইন সংস্থাপন করুন..." -#: ../finch/gntplugin.c:418 msgid "Configure Plugin" msgstr "প্লাগইন পছন্দসই বিন্যাস করুন" @@ -1570,397 +1012,296 @@ msgstr "প্লাগইন পছন্দসই বিন্যাস কর #. (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/gtkprefs.c:2200 msgid "Preferences" msgstr "প্রাধিকারসমূহ" -#: ../finch/gntpounce.c:193 ../pidgin/gtkpounce.c:270 msgid "Please enter a buddy to pounce." msgstr "অনুগ্রহ করে পাউন্স করার জন্য একজন বন্ধু প্রবেশ করান।" -#: ../finch/gntpounce.c:338 ../pidgin/gtkpounce.c:538 msgid "New Buddy Pounce" msgstr "নতুন বন্ধু পাউন্স করুন" -#: ../finch/gntpounce.c:338 ../pidgin/gtkpounce.c:538 msgid "Edit Buddy Pounce" msgstr "বন্ধু পাউন্স সম্পাদন করুন" -#: ../finch/gntpounce.c:343 msgid "Pounce Who" msgstr "কাকে পাউন্স" #. Account: -#: ../finch/gntpounce.c:346 ../finch/gntstatus.c:456 msgid "Account:" msgstr "একাউন্ট:" -#: ../finch/gntpounce.c:368 msgid "Buddy name:" msgstr "বন্ধুর নাম:" #. Create the "Pounce When Buddy..." frame. -#: ../finch/gntpounce.c:386 ../pidgin/gtkpounce.c:606 msgid "Pounce When Buddy..." msgstr "পাউন্স করুন যখন বন্ধু..." -#: ../finch/gntpounce.c:388 msgid "Signs on" msgstr "সাইন অন" -#: ../finch/gntpounce.c:389 msgid "Signs off" msgstr "সাইন অফ" -#: ../finch/gntpounce.c:390 msgid "Goes away" msgstr "অনুপস্থিত" -#: ../finch/gntpounce.c:391 msgid "Returns from away" msgstr "দূর হতে ফিরে আসে" -#: ../finch/gntpounce.c:392 msgid "Becomes idle" msgstr "অলস হয়ে যায়" -#: ../finch/gntpounce.c:393 msgid "Is no longer idle" msgstr "আর অলস থাকবে না" -#: ../finch/gntpounce.c:394 msgid "Starts typing" msgstr "টাইপ শুরু করছে" -#: ../finch/gntpounce.c:395 msgid "Pauses while typing" msgstr "টাইপ করার সময় বিরতি দিন" -#: ../finch/gntpounce.c:396 msgid "Stops typing" msgstr "টাইপ বন্ধ করে" -#: ../finch/gntpounce.c:397 msgid "Sends a message" msgstr "বার্তা পাঠায়" #. Create the "Action" frame. -#: ../finch/gntpounce.c:426 ../pidgin/gtkpounce.c:667 msgid "Action" msgstr "কার্য" -#: ../finch/gntpounce.c:428 msgid "Open an IM window" msgstr "তাৎক্ষনিক বার্তার উইন্ডো খুলুন" -#: ../finch/gntpounce.c:429 msgid "Pop up a notification" msgstr "একটি ঘোষণা পপআপ করুন" -#: ../finch/gntpounce.c:430 msgid "Send a message" msgstr "একটি বার্তা পাঠান" -#: ../finch/gntpounce.c:431 msgid "Execute a command" msgstr "একটি নির্দেশ কার্যকর করুন" -#: ../finch/gntpounce.c:432 msgid "Play a sound" msgstr "শব্দ বাজান" -#: ../finch/gntpounce.c:460 msgid "Pounce only when my status is not Available" msgstr "আমার অবস্থা সহজলভ্য না থাকলে শুধুমাত্র পাউন্স করুন" # tithi -#: ../finch/gntpounce.c:462 ../pidgin/gtkpounce.c:1319 msgid "Recurring" msgstr "পুনরাবৃত্তি" -#: ../finch/gntpounce.c:630 msgid "Cannot create pounce" msgstr "পাউন্স তৈরী করতে পারে না" -#: ../finch/gntpounce.c:631 msgid "You do not have any accounts." msgstr "আপনার কোনো একাউন্ট নেই।" # tithi -#: ../finch/gntpounce.c:632 msgid "You must create an account first before you can create a pounce." msgstr "আপনি একটি পাউন্স তৈরি করার পূর্বে আপনাকে অবশ্যই একটি একাউন্ট তৈরি করতে হবে।" -#: ../finch/gntpounce.c:674 ../pidgin/gtkpounce.c:1134 #, c-format msgid "Are you sure you want to delete the pounce on %s for %s?" msgstr "আপনি কি নিশ্চিত আপনি %2s এর জন্য %1s এর পাউন্স মুছে ফেলতে চান?" -#: ../finch/gntpounce.c:708 ../finch/gntui.c:96 ../pidgin/gtkpounce.c:1362 msgid "Buddy Pounces" msgstr "বন্ধু পাউন্স করে" -#: ../finch/gntpounce.c:817 ../pidgin/gtkpounce.c:1461 #, c-format msgid "%s has started typing to you (%s)" msgstr "%1s আপনার কাছে টাইপ করা শুরু করেছে (%2s)" -#: ../finch/gntpounce.c:818 ../pidgin/gtkpounce.c:1463 #, c-format msgid "%s has paused while typing to you (%s)" msgstr "%1s আপনার কাছে টাইপ করার সময় বিরতি নিয়েছে (%2s)" -#: ../finch/gntpounce.c:819 ../pidgin/gtkpounce.c:1465 #, c-format msgid "%s has signed on (%s)" msgstr "%1s সাইন অন করেছে (%2s)" -#: ../finch/gntpounce.c:820 ../pidgin/gtkpounce.c:1467 #, c-format msgid "%s has returned from being idle (%s)" msgstr "%1s অলস অবস্থা থেকে ফিরে এসেছে (%2s)" -#: ../finch/gntpounce.c:821 ../pidgin/gtkpounce.c:1469 #, c-format msgid "%s has returned from being away (%s)" msgstr "%1s দূর হতে ফিরে এসেছে (%2s)" -#: ../finch/gntpounce.c:822 ../pidgin/gtkpounce.c:1471 #, c-format msgid "%s has stopped typing to you (%s)" msgstr "%1s আপনার কাছে টাইপ করা বন্ধ করে দিয়েছে (%2s)" -#: ../finch/gntpounce.c:823 ../pidgin/gtkpounce.c:1473 #, c-format msgid "%s has signed off (%s)" msgstr "%1s অখলাইনে আছে (%2s)" -#: ../finch/gntpounce.c:824 ../pidgin/gtkpounce.c:1475 #, c-format msgid "%s has become idle (%s)" msgstr "%1s অলস আছে (%2s)" -#: ../finch/gntpounce.c:825 ../pidgin/gtkpounce.c:1477 #, c-format msgid "%s has gone away. (%s)" msgstr "%1s এখন অনুপস্থিত। (%2s)" -#: ../finch/gntpounce.c:826 ../pidgin/gtkpounce.c:1479 #, c-format msgid "%s has sent you a message. (%s)" msgstr "%1s আপনাকে একটি বার্তা পাঠিয়েছে। (%2s)" -#: ../finch/gntpounce.c:845 ../pidgin/gtkpounce.c:1480 +#, c-format msgid "Unknown pounce event. Please report this!" msgstr "অজানা পাউন্স ইভেন্ট। অনুগ্রহ করে এটি রিপোর্ট করুন!" # tithi -#: ../finch/gntprefs.c:92 msgid "Based on keyboard use" msgstr "কী-বোর্ডের ব্যবহারের উপর নির্ভর করে" -#: ../finch/gntprefs.c:94 ../pidgin/gtkprefs.c:2081 msgid "From last sent message" msgstr "সর্বশেষ পাঠানো বার্তা থেকে" -#: ../finch/gntprefs.c:96 ../pidgin/gtkprefs.c:945 ../pidgin/gtkprefs.c:953 -#: ../pidgin/gtkprefs.c:2080 ../pidgin/gtkprefs.c:2094 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:333 msgid "Never" msgstr "কখনো নয়" -#: ../finch/gntprefs.c:184 msgid "Show Idle Time" msgstr "অলস সময় প্রদর্শন করুন" -#: ../finch/gntprefs.c:185 msgid "Show Offline Buddies" msgstr "অফলাইন বন্ধুগণদের প্রদর্শন করুন" -#: ../finch/gntprefs.c:192 msgid "Notify buddies when you are typing" msgstr "আপনার টাইপ করার সময় বন্ধুদের অবগত করুন" -#: ../finch/gntprefs.c:198 ../finch/plugins/gnthistory.c:153 msgid "Log format" msgstr "লগ বিন্যাস" -#: ../finch/gntprefs.c:199 ../finch/plugins/gnthistory.c:143 msgid "Log IMs" msgstr "তাৎক্ষণিক বার্তাগুলো লগ করুন" -#: ../finch/gntprefs.c:200 ../finch/plugins/gnthistory.c:144 msgid "Log chats" msgstr "আড্ডাসমূহ লগ করুন" -#: ../finch/gntprefs.c:201 msgid "Log status change events" msgstr "লগ অবস্থা ইভেন্ট পরিবর্তন করে" -#: ../finch/gntprefs.c:207 msgid "Report Idle time" msgstr "অলস সময় রিপোর্ট করুন" -#: ../finch/gntprefs.c:208 msgid "Change status when idle" msgstr "অলস থাকলে অবস্থা পরিবর্তন করুন" -#: ../finch/gntprefs.c:209 msgid "Minutes before changing status" msgstr "অবস্থা পরিবর্তন করার পূর্বের মিনিট" -#: ../finch/gntprefs.c:210 msgid "Change status to" msgstr "অবস্থা পরিবর্তন করুন" -#. Conversations -#: ../finch/gntprefs.c:259 ../pidgin/gtkprefs.c:1043 ../pidgin/gtkprefs.c:2167 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:340 msgid "Conversations" msgstr "কথোপকথন" -#: ../finch/gntprefs.c:260 ../finch/plugins/gnthistory.c:151 -#: ../pidgin/gtkprefs.c:1614 ../pidgin/gtkprefs.c:2178 msgid "Logging" msgstr "লগ করছে" -#: ../finch/gntrequest.c:381 msgid "You must fill all the required fields." msgstr "আপনাকে অবশ্যই প্রয়োজনীয় ক্ষেত্রসমূহ পূরণ করতে হবে।" -#: ../finch/gntrequest.c:382 msgid "The required fields are underlined." msgstr "প্রয়োজনীয় ক্ষেত্রসমূহকে নিম্নরেখাঙ্কিত করা হয়েছে।" # tithi -#: ../finch/gntrequest.c:640 msgid "Not implemented yet." msgstr "এখনও বাস্তবায়িত হয়নি।" -#: ../finch/gntrequest.c:745 ../pidgin/gtkrequest.c:1552 -#: ../pidgin/gtkrequest.c:1598 msgid "Save File..." msgstr "ফাইল সংরক্ষণ করুন..." -#: ../finch/gntrequest.c:745 ../pidgin/gtkrequest.c:1553 -#: ../pidgin/gtkrequest.c:1599 msgid "Open File..." msgstr "ফাইল খুলুন..." -#: ../finch/gntrequest.c:762 msgid "Choose Location..." msgstr "স্থান পছন্দ করুন..." # tithi -#: ../finch/gntroomlist.c:208 msgid "Hit 'Enter' to find more rooms of this category." msgstr "এই শ্রেণীবিভাগের আরও কিছু কক্ষ খুঁজে পেতে 'Enter' চাপুন।" -#: ../finch/gntroomlist.c:274 msgid "Get" msgstr "গ্রহণ করুন" #. Create the window. -#: ../finch/gntroomlist.c:286 ../finch/gntui.c:101 ../pidgin/gtkroomlist.c:523 msgid "Room List" msgstr "কক্ষের তালিকা" -#: ../finch/gntsound.c:96 ../pidgin/gtksound.c:62 msgid "Buddy logs in" msgstr "বন্ধু লগইন করে" -#: ../finch/gntsound.c:97 ../pidgin/gtksound.c:63 msgid "Buddy logs out" msgstr "বন্ধু লগআউট করে" -#: ../finch/gntsound.c:98 ../pidgin/gtksound.c:64 msgid "Message received" msgstr "বার্তা গ্রহণ করা হয়েছে" -#: ../finch/gntsound.c:99 ../pidgin/gtksound.c:65 msgid "Message received begins conversation" msgstr "বার্তা গ্রহন করায় কথাবার্তা শুরু হয়েছে" -#: ../finch/gntsound.c:100 ../pidgin/gtksound.c:66 msgid "Message sent" msgstr "বার্তা পাঠানো হয়েছে" -#: ../finch/gntsound.c:101 ../pidgin/gtksound.c:67 msgid "Person enters chat" msgstr "ব্যক্তি আড্ডায় প্রবেশ করেছে" -#: ../finch/gntsound.c:102 ../pidgin/gtksound.c:68 msgid "Person leaves chat" msgstr "ব্যক্তি আড্ডা ত্যাগ করেছে" -#: ../finch/gntsound.c:103 ../pidgin/gtksound.c:69 msgid "You talk in chat" msgstr "আপনি আড্ডায় কথা বলছেন" -#: ../finch/gntsound.c:104 ../pidgin/gtksound.c:70 msgid "Others talk in chat" msgstr "অন্যান্যরা আড্ডায় কথা বলছে" -#: ../finch/gntsound.c:106 ../pidgin/gtksound.c:73 msgid "Someone says your username in chat" msgstr "কেউ একজন আড্ডায় আপনার ব্যবহারকারীর নাম বলছে" # tithi -#: ../finch/gntsound.c:367 ../pidgin/gtksound.c:309 msgid "GStreamer Failure" msgstr "GStreamer ব্যর্থতা" -#: ../finch/gntsound.c:368 ../pidgin/gtksound.c:310 msgid "GStreamer failed to initialize." msgstr "GStreamer আরম্ভ হতে ব্যর্থ।" # tithi -#: ../finch/gntsound.c:722 ../finch/gntsound.c:808 ../pidgin/gtkpounce.c:178 -#: ../pidgin/gtkpounce.c:189 ../pidgin/gtkpounce.c:321 -#: ../pidgin/gtkpounce.c:691 ../pidgin/gtkpounce.c:953 -#: ../pidgin/gtkprefs.c:1738 ../pidgin/gtkprefs.c:1827 -#: ../pidgin/gtkprefs.c:2023 msgid "(default)" msgstr "(পূর্বনির্ধারিত)" -#: ../finch/gntsound.c:735 msgid "Select Sound File ..." msgstr "সাউন্ড ফাইল নির্বাচন করুন..." -#: ../finch/gntsound.c:910 msgid "Sound Preferences" msgstr "সাউন্ডের অগ্রাধিকারসমুহ" -#: ../finch/gntsound.c:921 msgid "Profiles" msgstr "ব্যাক্তিগত বিবরণীসমূহ" -#: ../finch/gntsound.c:960 ../pidgin/gtkprefs.c:1884 msgid "Automatic" msgstr "স্বয়ংক্রিয়" -#: ../finch/gntsound.c:963 msgid "Console Beep" msgstr "কনসোল বীপ করছে" -#: ../finch/gntsound.c:964 ../pidgin/gtkprefs.c:1888 msgid "Command" msgstr "নির্দেশ" -#: ../finch/gntsound.c:965 msgid "No Sound" msgstr "কোনো শব্দ নাই" -#: ../finch/gntsound.c:967 ../pidgin/gtkprefs.c:1879 msgid "Sound Method" msgstr "শব্দের প্রক্রিয়া" -#: ../finch/gntsound.c:972 msgid "Method: " msgstr "প্রক্রিয়া:" -#: ../finch/gntsound.c:979 #, c-format msgid "" "Sound Command\n" @@ -1970,82 +1311,56 @@ msgstr "" "(ফাইলের নামের জন্য %s)" #. Sound options -#: ../finch/gntsound.c:987 ../pidgin/gtkprefs.c:1910 msgid "Sound Options" msgstr "শব্দের পছন্দসমূহ" -#: ../finch/gntsound.c:988 msgid "Sounds when conversation has focus" msgstr "কথোপকথন ফোকাস করলে শব্দ করে" -#: ../finch/gntsound.c:996 ../pidgin/gtkprefs.c:943 ../pidgin/gtkprefs.c:955 -#: ../pidgin/gtkprefs.c:1921 ../pidgin/plugins/timestamp_format.c:42 -#: ../pidgin/plugins/timestamp_format.c:51 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:334 msgid "Always" msgstr "সর্বদা" -#: ../finch/gntsound.c:997 ../pidgin/gtkprefs.c:1919 msgid "Only when available" msgstr "শুধুমাত্র যখন সহজলভ্য" -#: ../finch/gntsound.c:998 ../pidgin/gtkprefs.c:1920 msgid "Only when not available" msgstr "শুধুমাত্র যখন সহজলভ্য নয়" -#: ../finch/gntsound.c:1005 msgid "Volume(0-100):" msgstr "ভলিউম(০-১০০):" #. Sound events -#: ../finch/gntsound.c:1024 ../pidgin/gtkprefs.c:1949 msgid "Sound Events" msgstr "শব্দ ইভেন্টসমূহ" -#: ../finch/gntsound.c:1026 ../pidgin/gtkprefs.c:2008 msgid "Event" msgstr "ইভেন্ট" -#: ../finch/gntsound.c:1026 msgid "File" msgstr "ফাইল" -#: ../finch/gntsound.c:1045 msgid "Test" msgstr "পরীক্ষা" -#: ../finch/gntsound.c:1048 ../pidgin/gtkpounce.c:695 msgid "Reset" msgstr "পুনঃ বিন্যাস করুন" -#: ../finch/gntsound.c:1051 msgid "Choose..." msgstr "পছন্দ করুন..." -#: ../finch/gntstatus.c:138 #, c-format msgid "Are you sure you want to delete \"%s\"" msgstr "আপনি কি নিশ্চিত আপনি \"%s\" মুছে ফেলতে চান" -#: ../finch/gntstatus.c:141 msgid "Delete Status" msgstr "অবস্থা মুছুন" -#: ../finch/gntstatus.c:176 ../pidgin/gtksavedstatuses.c:631 msgid "Saved Statuses" msgstr "সংরক্ষিত অবস্থাসমূহ" -#: ../finch/gntstatus.c:183 ../finch/gntstatus.c:539 -#: ../libpurple/protocols/jabber/buddy.c:326 -#: ../libpurple/protocols/jabber/buddy.c:1375 -#: ../libpurple/protocols/msn/msn.c:871 -#: ../libpurple/protocols/myspace/myspace.c:507 -#: ../libpurple/protocols/novell/novell.c:1493 -#: ../libpurple/protocols/qq/group_info.c:141 ../pidgin/gtksavedstatuses.c:530 msgid "Title" msgstr "শিরোনাম" -#: ../finch/gntstatus.c:183 ../pidgin/gtksavedstatuses.c:545 msgid "Type" msgstr "ধরন" @@ -2057,136 +1372,76 @@ msgstr "ধরন" #. 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:281 -#: ../libpurple/protocols/bonjour/bonjour.c:288 -#: ../libpurple/protocols/bonjour/bonjour.c:371 -#: ../libpurple/protocols/gg/gg.c:992 ../libpurple/protocols/gg/gg.c:1645 -#: ../libpurple/protocols/gg/gg.c:1661 ../libpurple/protocols/gg/gg.c:1671 -#: ../libpurple/protocols/gg/gg.c:1677 ../libpurple/protocols/gg/gg.c:1686 -#: ../libpurple/protocols/gg/gg.c:1691 ../libpurple/protocols/irc/irc.c:243 -#: ../libpurple/protocols/jabber/jabber.c:1796 -#: ../libpurple/protocols/jabber/jabber.c:1810 -#: ../libpurple/protocols/jabber/jabber.c:1824 -#: ../libpurple/protocols/jabber/jabber.c:1838 -#: ../libpurple/protocols/jabber/jabber.c:1852 -#: ../libpurple/protocols/jabber/jabber.c:1868 -#: ../libpurple/protocols/msn/msn.c:823 ../libpurple/protocols/msn/msn.c:829 -#: ../libpurple/protocols/msn/msn.c:835 ../libpurple/protocols/msn/msn.c:841 -#: ../libpurple/protocols/msn/msn.c:846 ../libpurple/protocols/msn/msn.c:851 -#: ../libpurple/protocols/myspace/myspace.c:484 -#: ../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:5993 -#: ../libpurple/protocols/oscar/oscar.c:6007 -#: ../libpurple/protocols/oscar/oscar.c:6023 -#: ../libpurple/protocols/oscar/oscar.c:6030 -#: ../libpurple/protocols/oscar/oscar.c:6037 -#: ../libpurple/protocols/sametime/sametime.c:3343 -#: ../libpurple/protocols/sametime/sametime.c:3349 -#: ../libpurple/protocols/sametime/sametime.c:3355 -#: ../libpurple/protocols/sametime/sametime.c:3434 -#: ../libpurple/protocols/silc/buddy.c:1566 -#: ../libpurple/protocols/silc10/buddy.c:1566 -#: ../libpurple/protocols/simple/simple.c:247 -#: ../libpurple/protocols/yahoo/yahoo.c:3854 -#: ../libpurple/protocols/yahoo/yahoo.c:3860 -#: ../libpurple/protocols/zephyr/zephyr.c:2358 -#: ../pidgin/gtksavedstatuses.c:560 ../pidgin/gtksavedstatuses.c:1047 msgid "Message" msgstr "বার্তা" #. Use -#: ../finch/gntstatus.c:194 ../finch/gntstatus.c:593 msgid "Use" msgstr "ব্যবহার করুন" -#: ../finch/gntstatus.c:301 msgid "Invalid title" msgstr "অবৈধ শিরোনাম" # tithi -#: ../finch/gntstatus.c:302 msgid "Please enter a non-empty title for the status." msgstr "অনুগ্রহ করে অবস্থার জন্য খালি নয় এমন শিরোনাম প্রবেশ করান।" -#: ../finch/gntstatus.c:310 msgid "Duplicate title" msgstr "অনুরুপ শিরোনাম" -#: ../finch/gntstatus.c:311 msgid "Please enter a different title for the status." msgstr "অনুগ্রহ করে অবস্থাটির জন্য একটি ভিন্ন শিরোনাম প্রবেশ করান।" -#: ../finch/gntstatus.c:452 msgid "Substatus" msgstr "উপঅবস্থা" -#: ../finch/gntstatus.c:464 ../pidgin/gtkft.c:701 msgid "Status:" msgstr "অবস্থা:" -#: ../finch/gntstatus.c:479 msgid "Message:" msgstr "বার্তা:" -#: ../finch/gntstatus.c:528 msgid "Edit Status" msgstr "অবস্থা সম্পাদন করুন" -#: ../finch/gntstatus.c:570 msgid "Use different status for following accounts" msgstr "নিম্নোক্ত একাউন্টসমুহের জন্য ভিন্ন অবস্থা ব্যবহার করুন" #. Save & Use -#: ../finch/gntstatus.c:604 msgid "Save & Use" msgstr "সংরক্ষণ এবং ব্যবহার করুন" # tithi -#: ../finch/gntui.c:97 msgid "Certificates" msgstr "প্রত্যয়ন পত্র" -#: ../finch/gntui.c:102 ../pidgin/gtkprefs.c:2169 msgid "Sounds" msgstr "শব্দসমূহ" -#: ../finch/gntui.c:104 msgid "Statuses" msgstr "অবস্থাসমূহ" -#: ../finch/plugins/gntclipboard.c:115 ../finch/plugins/gntclipboard.c:121 -#: ../finch/plugins/gntclipboard.c:128 msgid "Error loading the plugin." msgstr "প্লাগইন লোড করার ত্রুটি।" -#: ../finch/plugins/gntclipboard.c:116 msgid "Couldn't find X display" msgstr "X প্রদর্শন খুঁজে পাবে না" -#: ../finch/plugins/gntclipboard.c:122 msgid "Couldn't find window" msgstr "উইন্ডো খুঁজে পাবে না" # tithi -#: ../finch/plugins/gntclipboard.c:129 msgid "This plugin cannot be loaded because it was not built with X11 support." msgstr "এই প্লাগইনটি লোড করা যায় না কারণ এটি X11 সমর্থনে তৈরী হয়নি।" # tithi -#: ../finch/plugins/gntclipboard.c:158 msgid "GntClipboard" msgstr "GntClipboard" -#: ../finch/plugins/gntclipboard.c:160 msgid "Clipboard plugin" msgstr "ক্লিপবোর্ড প্লাগইন" # tithi -#: ../finch/plugins/gntclipboard.c:161 msgid "" "When the gnt clipboard contents change, the contents are made available to " "X, if possible." @@ -2194,83 +1449,66 @@ msgstr "" "যদি সম্ভব হয় , যখন gnt ক্লিপবোর্ডের বিষয়বস্তুসমূহ পরিবর্তন হয়, তখন X এ বিষয়বস্তুসমূহ " "সহজলভ্য করুন।" -#: ../finch/plugins/gntgf.c:231 #, c-format msgid "%s just signed on" msgstr "%s অনলাইনে" -#: ../finch/plugins/gntgf.c:238 #, c-format msgid "%s just signed off" msgstr "%s অফলাইনে" -#: ../finch/plugins/gntgf.c:246 #, c-format msgid "%s sent you a message" msgstr "%s আপনাকে একটি বার্তা পাঠিয়েছে" # tithi -#: ../finch/plugins/gntgf.c:265 #, c-format msgid "%s said your nick in %s" msgstr "%1s আপনার ডাক নাম %2s এ বলছে" -#: ../finch/plugins/gntgf.c:267 #, c-format msgid "%s sent a message in %s" msgstr "%1s %2s এ একটি বার্তা পাঠিয়েছে" -#: ../finch/plugins/gntgf.c:305 msgid "Buddy signs on/off" msgstr "বন্ধু সাইন চালু/বন্ধ" -#: ../finch/plugins/gntgf.c:306 msgid "You receive an IM" msgstr "আপনার একটি তাৎক্ষনিক বার্তা গ্রহণ করেছেন" -#: ../finch/plugins/gntgf.c:307 msgid "Someone speaks in a chat" msgstr "কেউ একজন আড্ডায় কথা বলছে" -#: ../finch/plugins/gntgf.c:308 msgid "Someone says your name in a chat" msgstr "কেউ একজন আড্ডায় আপনার নাম ধরে ডাকছে" # tithi -#: ../finch/plugins/gntgf.c:336 msgid "Notify with a toaster when" msgstr "টোস্টার দ্বারা অবগতি করুন যখন" # tithi -#: ../finch/plugins/gntgf.c:351 msgid "Beep too!" msgstr "শব্দও করবে!" # tithi -#: ../finch/plugins/gntgf.c:357 msgid "Set URGENT for the terminal window." msgstr "টারমিনাল উইন্ডোর জন্য জরুরী নির্ধারণ করুন।" # tithi -#: ../finch/plugins/gntgf.c:377 msgid "GntGf" msgstr "GntGf" # tithi -#: ../finch/plugins/gntgf.c:379 ../finch/plugins/gntgf.c:380 msgid "Toaster plugin" msgstr "টোস্টার প্লাগইন" -#: ../finch/plugins/gnthistory.c:114 ../pidgin/plugins/history.c:133 #, c-format msgid "<b>Conversation with %s on %s:</b><br>" msgstr "<b>%2s এ %2s এর সাথে কথোপকথন:</b><br>" -#: ../finch/plugins/gnthistory.c:172 ../pidgin/plugins/history.c:160 msgid "History Plugin Requires Logging" msgstr "ইতিহাস প্লাগইনের লগ করা প্রয়োজন" -#: ../finch/plugins/gnthistory.c:173 ../pidgin/plugins/history.c:161 msgid "" "Logging can be enabled from Tools -> Preferences -> Logging.\n" "\n" @@ -2282,15 +1520,12 @@ msgstr "" "তাৎক্ষণিক বার্তার জন্য কার্যবিবরণীসমূহ সক্রিয় করছে এবং/বা একই ধরনের কথাবার্তার জন্য " "আড্ডা ইতিহাস সক্রিয় করবে।" -#: ../finch/plugins/gnthistory.c:217 msgid "GntHistory" msgstr "GntHistory" -#: ../finch/plugins/gnthistory.c:219 ../pidgin/plugins/history.c:204 msgid "Shows recently logged conversations in new conversations." msgstr "নতুন কথোপকথনসমূহে সাম্প্রতিক লগকৃত কথোপকথনসমূহ প্রদর্শন করে।" -#: ../finch/plugins/gnthistory.c:220 ../pidgin/plugins/history.c:205 msgid "" "When a new conversation is opened this plugin will insert the last " "conversation into the current conversation." @@ -2298,189 +1533,128 @@ msgstr "" "যখন একটি নতুন কথোপকথন খোলা হয় তখন এই প্লাগ-ইনটি নতুন কথোপকথনে সর্বশেষ কথোপকথন " "প্রবেশ করবে।" -#: ../finch/plugins/grouping.c:44 ../libpurple/protocols/oscar/oscar.c:756 -#: ../libpurple/protocols/qq/qq.c:260 msgid "Online" msgstr "অনলাইন" -#: ../finch/plugins/grouping.c:46 ../finch/plugins/grouping.c:143 -#: ../libpurple/protocols/gg/gg.c:927 -#: ../libpurple/protocols/jabber/buddy.c:2060 -#: ../libpurple/protocols/novell/novell.c:2846 -#: ../libpurple/protocols/oscar/oscar.c:915 -#: ../libpurple/protocols/oscar/oscar.c:5825 -#: ../libpurple/protocols/qq/qq.c:257 ../libpurple/protocols/qq/qq.c:264 -#: ../libpurple/protocols/qq/qq.c:425 -#: ../libpurple/protocols/yahoo/yahoo.c:3177 ../libpurple/status.c:159 -#: ../pidgin/gtkblist.c:3528 ../pidgin/gtkblist.c:3934 -#: ../pidgin/gtkdocklet.c:561 ../pidgin/gtkstatusbox.c:1099 msgid "Offline" msgstr "অফলাইন " -#: ../finch/plugins/grouping.c:115 ../pidgin/gtkblist.c:3564 msgid "Online Buddies" msgstr "অফলাইন বন্ধু" -#: ../finch/plugins/grouping.c:115 msgid "Offline Buddies" msgstr "অফলাইন বন্ধু" -#: ../finch/plugins/grouping.c:125 msgid "Online/Offline" msgstr "অনলাইন/অফলাইন" # tithi -#: ../finch/plugins/grouping.c:162 msgid "Meebo" msgstr "Meebo" -#: ../finch/plugins/grouping.c:211 msgid "No Grouping" msgstr "দলগত নয়" # tithi -#: ../finch/plugins/grouping.c:292 msgid "Nested Subgroup" msgstr "নেস্টেড উপদল" # tithi -#: ../finch/plugins/grouping.c:324 msgid "Nested Grouping (experimental)" msgstr "নেস্টেড দলগতকরণ (পরীক্ষামূলক)" -#: ../finch/plugins/grouping.c:367 ../finch/plugins/grouping.c:368 msgid "Provides alternate buddylist grouping options." msgstr "পর্যাক্রমিক বন্ধু-তালিকার দলগতকরণ পছন্দসমূহ প্রদান করে।" # tithi -#: ../finch/plugins/lastlog.c:69 msgid "Lastlog" msgstr "সর্বশেষ-লগ" # tithi #. Translator Note: The "backlog" is the conversation buffer/history. -#: ../finch/plugins/lastlog.c:100 msgid "lastlog: Searches for a substring in the backlog." msgstr "সর্বশেষ-লগ: ব্যাকলগে উপস্ট্রিং খুঁজছে।" # tithi -#: ../finch/plugins/lastlog.c:122 msgid "GntLastlog" msgstr "GntLastlog" # tithi -#: ../finch/plugins/lastlog.c:124 ../finch/plugins/lastlog.c:125 msgid "Lastlog plugin." msgstr "সর্বশেষ-লগ প্লাগইন।" -#: ../libpurple/account.c:888 msgid "accounts" msgstr "একাউন্টসমূহ" -#: ../libpurple/account.c:1064 ../libpurple/protocols/jabber/auth.c:204 -#: ../libpurple/protocols/silc/silc.c:474 msgid "Password is required to sign on." msgstr "যোগদানের জন্য গুপ্তসংকেত আবশ্যক।" -#: ../libpurple/account.c:1098 #, c-format msgid "Enter password for %s (%s)" msgstr "%1s (%2s) এর জন্য গুপ্তসংকেত প্রবেশ করান" -#: ../libpurple/account.c:1105 msgid "Enter Password" msgstr "গুপ্তসংকেত প্রবেশ করান" -#: ../libpurple/account.c:1110 msgid "Save password" msgstr "গুপ্তসংকেত সংরক্ষণ করুন" -#: ../libpurple/account.c:1145 ../libpurple/connection.c:126 -#: ../libpurple/connection.c:204 #, c-format msgid "Missing protocol plugin for %s" msgstr "%s এর জন্য নিরুদ্দিষ্ট প্রটোকল প্লাগইন" -#: ../libpurple/account.c:1147 ../libpurple/connection.c:129 msgid "Connection Error" msgstr "সংযোগ ত্রুটি" -#: ../libpurple/account.c:1371 ../libpurple/protocols/gg/gg.c:650 -#: ../libpurple/protocols/jabber/jabber.c:1924 msgid "New passwords do not match." msgstr "নতুন গুপ্তসংকেতসমূহ মিলছে না।" -#: ../libpurple/account.c:1384 msgid "Fill out all fields completely." msgstr "সব ক্ষেত্র সম্পূর্ণরুপে পূরণ করুন।" -#: ../libpurple/account.c:1416 msgid "Original password" msgstr "মূল গুপ্তসংকেত" -#: ../libpurple/account.c:1424 msgid "New password" msgstr "নতুন গুপ্তসংকেত" -#: ../libpurple/account.c:1432 msgid "New password (again)" msgstr "নতুন গুপ্তসংকেত (আবার)" -#: ../libpurple/account.c:1439 #, c-format msgid "Change password for %s" msgstr "%s এর জন্য গুপ্তসংকেত পরিবর্তন করুন" -#: ../libpurple/account.c:1447 msgid "Please enter your current password and your new password." msgstr "অনুগ্রহ করে আপনার বর্তমান গুপ্তসংকেত এবং নতুন গুপ্তসংকেত প্রবেশ করান।" -#: ../libpurple/account.c:1478 #, c-format msgid "Change user information for %s" msgstr "%s এর জন্য ব্যবহাকারীর তথ্য পরিবর্তন করুন" -#: ../libpurple/account.c:1481 ../libpurple/protocols/toc/toc.c:1670 msgid "Set User Info" msgstr "ব্যবহারকারীর তথ্য নির্ধারণ করুন" -#: ../libpurple/account.c:1952 ../libpurple/protocols/gg/gg.c:936 -#: ../libpurple/protocols/jabber/buddy.c:826 -#: ../libpurple/protocols/jabber/buddy.c:2056 -#: ../libpurple/protocols/jabber/buddy.c:2073 -#: ../libpurple/protocols/novell/novell.c:2849 -#: ../libpurple/protocols/qq/group_info.c:126 -#: ../libpurple/protocols/qq/qq.c:320 ../pidgin/gtkft.c:166 msgid "Unknown" msgstr "অজানা" -#: ../libpurple/blist.c:522 ../libpurple/blist.c:1346 -#: ../libpurple/blist.c:1558 ../libpurple/blist.c:1560 -#: ../libpurple/protocols/jabber/roster.c:68 -#: ../libpurple/protocols/myspace/myspace.c:3481 ../pidgin/gtkblist.c:6447 -#: ../pidgin/plugins/gevolution/gevo-util.c:67 -#: ../pidgin/plugins/gevolution/gevolution.c:96 msgid "Buddies" msgstr "বন্ধুগণ" -#: ../libpurple/blist.c:549 msgid "buddy list" msgstr "বন্ধু তালিকা" # tithi -#: ../libpurple/certificate.c:558 msgid "(DOES NOT MATCH)" msgstr "(মিলে না)" # tithi #. Make messages -#: ../libpurple/certificate.c:562 #, c-format msgid "%s has presented the following certificate for just-this-once use:" msgstr "শুধুমাত্র-এটি-একবার ব্যবহারের জন্য %s নিম্নলিখিত প্রত্যয়ন পত্র উপস্থাপন করেছে:" # tithi -#: ../libpurple/certificate.c:563 #, c-format msgid "" "Common name: %s %s\n" @@ -2491,54 +1665,45 @@ msgstr "" # tithi #. TODO: Find what the handle ought to be -#: ../libpurple/certificate.c:568 msgid "Single-use Certificate Verification" msgstr "একক-ব্যবহারের প্রত্যয়ন পত্রের সত্যতা যাচাই" # tithi #. Scheme name #. Pool name -#: ../libpurple/certificate.c:897 msgid "Certificate Authorities" msgstr "প্রত্যয়ন পত্রের কর্তৃপক্ষ" # tithi #. Scheme name #. Pool name -#: ../libpurple/certificate.c:1065 msgid "SSL Peers Cache" msgstr "SSL পিয়ার্স ক্যাশে" #. Make messages -#: ../libpurple/certificate.c:1196 #, c-format msgid "Accept certificate for %s?" msgstr "%s এর জন্য কি প্রত্যয়ন পত্র গ্রহণ করবেন?" # tithi #. TODO: Find what the handle ought to be -#: ../libpurple/certificate.c:1202 msgid "SSL Certificate Verification" msgstr "SSL প্রত্যয়ন পত্রের সত্যতা যাচাই" #. Number of actions -#: ../libpurple/certificate.c:1211 msgid "Accept" msgstr "গ্রহণ করুন" -#: ../libpurple/certificate.c:1212 msgid "Reject" msgstr "প্রত্যাখান করুন" # tithi -#: ../libpurple/certificate.c:1213 msgid "_View Certificate..." msgstr "প্রত্যয়ন পত্র দেখুন...(_V)" # tithi #. Prompt the user to authenticate the certificate #. vrq will be completed by user_auth -#: ../libpurple/certificate.c:1315 #, c-format msgid "" "The certificate presented by \"%s\" is self-signed. It cannot be " @@ -2548,7 +1713,6 @@ msgstr "" "যাবে না।" # tithi -#: ../libpurple/certificate.c:1333 #, c-format msgid "The certificate chain presented for %s is not valid." msgstr "%s এর জন্য উপস্থাপিত প্রত্যয়ন পত্রের শৃঙ্খল বৈধ নয়।" @@ -2558,17 +1722,14 @@ msgstr "%s এর জন্য উপস্থাপিত প্রত্যয় #. stifle it. #. TODO: Probably wrong. #. TODO: Probably wrong -#: ../libpurple/certificate.c:1341 ../libpurple/certificate.c:1411 msgid "SSL Certificate Error" msgstr "SSL প্রত্যয়ন পত্রের ত্রুটি" -#: ../libpurple/certificate.c:1342 msgid "Invalid certificate chain" msgstr "অবৈধ প্রত্যয়ন পত্রের শৃঙ্খল" # tithi #. vrq will be completed by user_auth -#: ../libpurple/certificate.c:1363 msgid "" "You have no database of root certificates, so this certificate cannot be " "validated." @@ -2578,13 +1739,11 @@ msgstr "" # tithi #. vrq will be completed by user_auth -#: ../libpurple/certificate.c:1386 msgid "" "The root certificate this one claims to be issued by is unknown to Pidgin." msgstr "মূল প্রত্যয়ন পত্রটি যার দ্বারা প্রদান করা হয়েছে তা পিজিনের কাছে অপরিচিত।" # tithi -#: ../libpurple/certificate.c:1403 #, c-format msgid "" "The certificate chain presented by %s does not have a valid digital " @@ -2594,7 +1753,6 @@ msgstr "" "%s দ্বারা উপস্থাপিত প্রত্যয়ন পত্র শৃঙ্খলের প্রত্যয়ন পত্রের কর্তৃপক্ষ হতে প্রাপ্ত বৈধ " "ডিজিটাল স্বাক্ষর নেই যা দ্বারা এটি দাবী করে যে এর স্বাক্ষর আছে।" -#: ../libpurple/certificate.c:1412 msgid "Invalid certificate authority signature" msgstr "অবৈধ প্রত্যয়ন পত্র কতৃপক্ষের স্বাক্ষর" @@ -2603,7 +1761,6 @@ msgstr "অবৈধ প্রত্যয়ন পত্র কতৃপক্ষ #. TODO: Provide the user with more guidance about why he is #. being prompted #. vrq will be completed by user_auth -#: ../libpurple/certificate.c:1438 #, c-format msgid "" "The certificate presented by \"%s\" claims to be from \"%s\" instead. This " @@ -2615,7 +1772,6 @@ msgstr "" # tithi #. Make messages -#: ../libpurple/certificate.c:1900 #, c-format msgid "" "Common name: %s\n" @@ -2633,128 +1789,94 @@ msgstr "" "মেয়াদ উত্তীর্ণের তারিখ: %s\n" #. TODO: Find what the handle ought to be -#: ../libpurple/certificate.c:1912 msgid "Certificate Information" msgstr "প্রত্যদন পত্রের তথ্য" -#: ../libpurple/connection.c:128 msgid "Registration Error" msgstr "নিবন্ধন ত্রুটি" -#: ../libpurple/connection.c:206 msgid "Unregistration Error" msgstr "নিবন্ধনহীন ত্রুটি" -#: ../libpurple/connection.c:366 #, c-format msgid "+++ %s signed on" msgstr "+++ %s এখন অনলাইন " -#: ../libpurple/connection.c:396 #, c-format msgid "+++ %s signed off" msgstr "+++ %s এখন অফলাইন" -#: ../libpurple/connection.c:549 ../libpurple/plugin.c:279 -#: ../libpurple/protocols/jabber/buddy.c:2376 -#: ../libpurple/protocols/msn/servconn.c:140 -#: ../libpurple/protocols/msn/session.c:381 -#: ../libpurple/protocols/msnp9/servconn.c:139 -#: ../libpurple/protocols/msnp9/session.c:343 -#: ../libpurple/protocols/oscar/family_chatnav.c:63 msgid "Unknown error" msgstr "অজানা ত্রুটি" -#: ../libpurple/conversation.c:168 msgid "Unable to send message: The message is too large." msgstr "বার্তা পাঠাতে সমর্থ নয়: বার্তাটি খুবই বড়।" -#: ../libpurple/conversation.c:171 ../libpurple/conversation.c:184 #, c-format msgid "Unable to send message to %s." msgstr "%s-এ বার্তাটি পাঠাতে সমর্থ নয়।" -#: ../libpurple/conversation.c:172 msgid "The message is too large." msgstr "বার্তাটি খুবই বড়।" -#: ../libpurple/conversation.c:181 ../libpurple/protocols/bonjour/jabber.c:297 -#: ../libpurple/protocols/bonjour/jabber.c:340 -#: ../libpurple/protocols/qq/qq_process.c:90 msgid "Unable to send message." msgstr "বার্তা পাঠাতে সমর্থ নয়।" -#: ../libpurple/conversation.c:1229 msgid "Send Message" msgstr "বার্তা প্রেরণ করুন" -#: ../libpurple/conversation.c:1232 msgid "_Send Message" msgstr "বার্তা প্রেরণ করুন (_S)" -#: ../libpurple/conversation.c:1638 #, c-format msgid "%s entered the room." msgstr "%s এই কক্ষে প্রবেশ করেছে।" -#: ../libpurple/conversation.c:1641 #, c-format msgid "%s [<I>%s</I>] entered the room." msgstr "%1s [<I>%2s</I>] এই কক্ষে প্রবেশ করেছে।" -#: ../libpurple/conversation.c:1751 #, c-format msgid "You are now known as %s" msgstr "আপনি এখন %s নামে পরিচিত" -#: ../libpurple/conversation.c:1771 #, c-format msgid "%s is now known as %s" msgstr "%1s এখন %2s নামে পরিচিত" -#: ../libpurple/conversation.c:1846 #, c-format msgid "%s left the room." msgstr "%s এই কক্ষে ত্যাগ করেছে।" -#: ../libpurple/conversation.c:1849 #, c-format msgid "%s left the room (%s)." msgstr "%1s (%2s) এই কক্ষে ত্যাগ করেছে।" -#: ../libpurple/dbus-server.c:591 #, c-format msgid "Failed to get connection: %s" msgstr "সংযোগ পেতে ব্যর্থ: %s" -#: ../libpurple/dbus-server.c:603 #, c-format msgid "Failed to get name: %s" msgstr "নাম পেতে ব্যর্থ: %s" -#: ../libpurple/dbus-server.c:617 #, c-format msgid "Failed to get serv name: %s" msgstr "সার্ভার নাম পেতে ব্যর্থ: %s" # tithi -#: ../libpurple/dbus-server.h:86 msgid "Purple's D-BUS server is not running for the reason listed below" msgstr "Purple-এর D-BUS সার্ভার নিচের তালিকাভুক্ত কারণের জন্য চলছে না" -#: ../libpurple/desktopitem.c:287 ../libpurple/desktopitem.c:878 msgid "No name" msgstr "কোনো নাম নেই" -#: ../libpurple/dnsquery.c:527 msgid "Unable to create new resolver process\n" msgstr "নতুন সমাধান পদ্ধতি তৈরী করতে অক্ষম\n" -#: ../libpurple/dnsquery.c:532 msgid "Unable to send request to resolver process\n" msgstr "সমাধানকারীর পদ্ধতিতে অনুরোধ পাঠাতে অক্ষম\n" -#: ../libpurple/dnsquery.c:565 ../libpurple/dnsquery.c:720 #, c-format msgid "" "Error resolving %s:\n" @@ -2763,13 +1885,10 @@ msgstr "" "%1s সমাধানে ত্রুটি: \n" "%2s" -#: ../libpurple/dnsquery.c:568 ../libpurple/dnsquery.c:734 -#: ../libpurple/dnsquery.c:852 #, c-format msgid "Error resolving %s: %d" msgstr "%1s সমাধানে ত্রুটি: %2d" -#: ../libpurple/dnsquery.c:590 #, c-format msgid "" "Error reading from resolver process:\n" @@ -2779,22 +1898,18 @@ msgstr "" "%s" # tithi -#: ../libpurple/dnsquery.c:594 +#, c-format msgid "Resolver process exited without answering our request" msgstr "সমাধানকারী পদ্ধতি আমাদের অনুরোধের উত্তর না দিয়ে প্রস্থান করেছে" # tithi -#: ../libpurple/dnsquery.c:784 #, c-format msgid "Thread creation failure: %s" msgstr "থ্রেড সৃষ্টি ব্যর্থ: %s" -#: ../libpurple/dnsquery.c:785 ../libpurple/protocols/qq/buddy_opt.c:988 -#: ../libpurple/protocols/qq/buddy_opt.c:1241 msgid "Unknown reason" msgstr "অজানা কারণ" -#: ../libpurple/ft.c:210 #, c-format msgid "" "Error reading %s: \n" @@ -2803,7 +1918,6 @@ msgstr "" "%1s পড়ায় ত্রুটি: \n" "%2s।\n" -#: ../libpurple/ft.c:214 #, c-format msgid "" "Error writing %s: \n" @@ -2812,7 +1926,6 @@ msgstr "" "%1s লেখায় ত্রুটি: \n" "%2s।\n" -#: ../libpurple/ft.c:218 #, c-format msgid "" "Error accessing %s: \n" @@ -2822,39 +1935,31 @@ msgstr "" "%s।\n" # tithi -#: ../libpurple/ft.c:254 msgid "Directory is not writable." msgstr "নির্দেশিকা লিখনযোগ্য নয়।" -#: ../libpurple/ft.c:269 msgid "Cannot send a file of 0 bytes." msgstr "০ বাইটের কোনো ফাইল পাঠাতে পারে না।" -#: ../libpurple/ft.c:279 msgid "Cannot send a directory." msgstr "নির্দেশিকা পাঠাতে পারে না।" -#: ../libpurple/ft.c:288 #, c-format msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n" msgstr "%s নিয়মিত কোনো ফাইল নয়। কাপুরুষোচিত ভাবে উপরিলেখ করতে প্রত্যাখ্যান করছে।\n" -#: ../libpurple/ft.c:348 #, c-format msgid "%s wants to send you %s (%s)" msgstr "%1s আপনাকে %2s (%3s) পাঠাতে চায়" -#: ../libpurple/ft.c:355 #, c-format msgid "%s wants to send you a file" msgstr "%s আপনাকে একটি ফাইল পাঠাতে চায়" -#: ../libpurple/ft.c:398 #, c-format msgid "Accept file transfer request from %s?" msgstr "%s এর ফাইল স্থানান্তর করার অনুরোধ গ্রহন করবেন কি?" -#: ../libpurple/ft.c:402 #, c-format msgid "" "A file is available for download from:\n" @@ -2865,181 +1970,147 @@ msgstr "" "দূরবর্তী হোস্ট: %s\n" "দূরবর্তী পোর্ট: %d" -#: ../libpurple/ft.c:437 #, c-format msgid "%s is offering to send file %s" msgstr "%1s %2s ফাইলটি পাঠানোর প্রস্তাব দিচ্ছে" -#: ../libpurple/ft.c:490 #, c-format msgid "%s is not a valid filename.\n" msgstr "%s বৈধ ফাইল নাম নয়।\n" -#: ../libpurple/ft.c:511 #, c-format msgid "Offering to send %s to %s" msgstr "%2s এ %1s পাঠানোর প্রস্তাব দিচ্ছে" -#: ../libpurple/ft.c:523 #, c-format msgid "Starting transfer of %s from %s" msgstr "%2s হতে %1s-এর স্থানান্তর শুরু হচ্ছে" -#: ../libpurple/ft.c:700 #, c-format msgid "Transfer of file %s complete" msgstr "%s ফাইলের স্থানান্তর সম্পূর্ণ" -#: ../libpurple/ft.c:703 msgid "File transfer complete" msgstr "ফাইল স্থানান্তর সম্পূর্ণ" -#: ../libpurple/ft.c:1138 #, c-format msgid "You canceled the transfer of %s" msgstr "আপনি %s এর স্থানান্তর বাতিল করেছেন" -#: ../libpurple/ft.c:1143 msgid "File transfer cancelled" msgstr "ফাইল স্থানান্তর বাতিল করা হয়েছে" -#: ../libpurple/ft.c:1201 #, c-format msgid "%s canceled the transfer of %s" msgstr "%1s %2s-এর স্থানান্তর বাতিল করেছে" -#: ../libpurple/ft.c:1206 #, c-format msgid "%s canceled the file transfer" msgstr "%s ফাইল স্থানান্তর বাতিল করেছে" -#: ../libpurple/ft.c:1263 #, c-format msgid "File transfer to %s failed." msgstr "%s এ ফাইলের স্থানান্তর ব্যর্থ হয়েছে।" -#: ../libpurple/ft.c:1265 #, c-format msgid "File transfer from %s failed." msgstr "%s থেকে ফাইলের স্থানান্তর ব্যর্থ হয়েছে।" -#: ../libpurple/gconf/purple.schemas.in.h:1 msgid "Run the command in a terminal" msgstr "নির্দেশটি টার্মিনালে চালান" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:2 msgid "The command used to handle \"aim\" URLs, if enabled." msgstr "যদি সক্রিয় থাকে, এই নির্দেশটি \"aim\" এর URL নিয়ন্ত্রণ করতে ব্যবহার করা হয়।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:3 msgid "The command used to handle \"gg\" URLs, if enabled." msgstr "যদি সক্রিয় থাকে, এই নির্দেশটি \"gg\" এর URL নিয়ন্ত্রণ করতে ব্যবহার করা হয়।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:4 msgid "The command used to handle \"icq\" URLs, if enabled." msgstr "যদি সক্রিয় থাকে, এই নির্দেশটি \"icq\" এর URL নিয়ন্ত্রণ করতে ব্যবহার করা হয়।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:5 msgid "The command used to handle \"irc\" URLs, if enabled." msgstr "যদি সক্রিয় থাকে, এই নির্দেশটি \"irc\" এর URL নিয়ন্ত্রণ করতে ব্যবহার করা হয়।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:6 msgid "The command used to handle \"msnim\" URLs, if enabled." msgstr "" "যদি সক্রিয় থাকে, এই নির্দেশটি \"msnim\" এর URL নিয়ন্ত্রণ করতে ব্যবহার করা হয়।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:7 msgid "The command used to handle \"sip\" URLs, if enabled." msgstr "যদি সক্রিয় থাকে, এই নির্দেশটি \"sip\" এর URL নিয়ন্ত্রণ করতে ব্যবহার করা হয়।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:8 msgid "The command used to handle \"xmpp\" URLs, if enabled." msgstr "" "যদি সক্রিয় থাকে, এই নির্দেশটি \"xmpp\" এর URL নিয়ন্ত্রণ করতে ব্যবহার করা হয়।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:9 msgid "The command used to handle \"ymsgr\" URLs, if enabled." msgstr "" "যদি সক্রিয় থাকে, এই নির্দেশটি \"ymsgr\" এর URL নিয়ন্ত্রণ করতে ব্যবহার করা হয়।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:10 msgid "The handler for \"aim\" URLs" msgstr "\"aim\" এর URL-এর জন্য নিয়ন্ত্রণকারী" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:11 msgid "The handler for \"gg\" URLs" msgstr "\"gg\" এর URL-এর জন্য নিয়ন্ত্রণকারী" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:12 msgid "The handler for \"icq\" URLs" msgstr "\"icq\" এর URL-এর জন্য নিয়ন্ত্রণকারী" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:13 msgid "The handler for \"irc\" URLs" msgstr "\"irc\" এর URL-এর জন্য নিয়ন্ত্রণকারী" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:14 msgid "The handler for \"msnim\" URLs" msgstr "\"msnim\" এর URL-এর জন্য নিয়ন্ত্রণকারী" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:15 msgid "The handler for \"sip\" URLs" msgstr "\"sip\" এর URL-এর জন্য নিয়ন্ত্রণকারী" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:16 msgid "The handler for \"xmpp\" URLs" msgstr "\"xmpp\" এর URL-এর জন্য নিয়ন্ত্রণকারী" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:17 msgid "The handler for \"ymsgr\" URLs" msgstr "\"ymsgr\" এর URL-এর জন্য নিয়ন্ত্রণকারী" # fix me tithi -#: ../libpurple/gconf/purple.schemas.in.h:18 msgid "" "True if the command specified in the \"command\" key should handle \"aim\" " "URLs." msgstr "সত্য যদি \"নির্দেশ\" কী-তে উল্লেখিত নির্দেশটি \"aim\" এর URL নিয়ন্ত্রণ করে।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:19 msgid "" "True if the command specified in the \"command\" key should handle \"gg\" " "URLs." msgstr "সত্য যদি \"নির্দেশ\" কী-তে উল্লেখিত নির্দেশটি \"gg\" এর URL নিয়ন্ত্রণ করে।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:20 msgid "" "True if the command specified in the \"command\" key should handle \"icq\" " "URLs." msgstr "সত্য যদি \"নির্দেশ\" কী-তে উল্লেখিত নির্দেশটি \"icq\" এর URL নিয়ন্ত্রণ করে।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:21 msgid "" "True if the command specified in the \"command\" key should handle \"irc\" " "URLs." msgstr "সত্য যদি \"নির্দেশ\" কী-তে উল্লেখিত নির্দেশটি \"irc\" এর URL নিয়ন্ত্রণ করে।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:22 msgid "" "True if the command specified in the \"command\" key should handle \"msnim\" " "URLs." @@ -3047,21 +2118,18 @@ msgstr "" "সত্য যদি \"নির্দেশ\" কী-তে উল্লেখিত নির্দেশটি \"msnim\" এর URL নিয়ন্ত্রণ করে।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:23 msgid "" "True if the command specified in the \"command\" key should handle \"sip\" " "URLs." msgstr "সত্য যদি \"নির্দেশ\" কী-তে উল্লেখিত নির্দেশটি \"sip\" এর URL নিয়ন্ত্রণ করে।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:24 msgid "" "True if the command specified in the \"command\" key should handle \"xmpp\" " "URLs." msgstr "সত্য যদি \"নির্দেশ\" কী-তে উল্লেখিত নির্দেশটি \"xmpp\" এর URL নিয়ন্ত্রণ করে।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:25 msgid "" "True if the command specified in the \"command\" key should handle \"ymsgr\" " "URLs." @@ -3069,78 +2137,62 @@ msgstr "" "সত্য যদি \"নির্দেশ\" কী-তে উল্লেখিত নির্দেশটি \"ymsgr\" এর URL নিয়ন্ত্রণ করে।" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:26 msgid "" "True if the command used to handle this type of URL should be run in a " "terminal." msgstr "সত্য হবে যদি এই ধরনের URL নিয়ন্ত্রণ করতে ব্যবহৃত নির্দেশটি টার্মিনালে চলে। " # tithi -#: ../libpurple/gconf/purple.schemas.in.h:27 msgid "Whether the specified command should handle \"aim\" URLs" msgstr "উল্লেখিত নির্দেশটি \"aim\" এর URL নিয়ন্ত্রণ করবে কিনা" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:28 msgid "Whether the specified command should handle \"gg\" URLs" msgstr "উল্লেখিত নির্দেশটি \"gg\" এর URL নিয়ন্ত্রণ করবে কিনা" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:29 msgid "Whether the specified command should handle \"icq\" URLs" msgstr "উল্লেখিত নির্দেশটি \"icq\" এর URL নিয়ন্ত্রণ করবে কিনা" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:30 msgid "Whether the specified command should handle \"irc\" URLs" msgstr "উল্লেখিত নির্দেশটি \"irc\" এর URL নিয়ন্ত্রণ করবে কিনা" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:31 msgid "Whether the specified command should handle \"msnim\" URLs" msgstr "উল্লেখিত নির্দেশটি \"msnim\" এর URL নিয়ন্ত্রণ করবে কিনা" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:32 msgid "Whether the specified command should handle \"sip\" URLs" msgstr "উল্লেখিত নির্দেশটি \"sip\" এর URL নিয়ন্ত্রণ করবে কিনা" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:33 msgid "Whether the specified command should handle \"xmpp\" URLs" msgstr "উল্লেখিত নির্দেশটি \"xmpp\" এর URL নিয়ন্ত্রণ করবে কিনা" # tithi -#: ../libpurple/gconf/purple.schemas.in.h:34 msgid "Whether the specified command should handle \"ymsgr\" URLs" msgstr "উল্লেখিত নির্দেশটি \"ymsgr\" এর URL নিয়ন্ত্রণ করবে কিনা" -#: ../libpurple/log.c:183 msgid "<b><font color=\"red\">The logger has no read function</font></b>" msgstr "<b><font color=\"red\">এই লগাকারীর পাঠ করার কোনো ফাংশন নেই</font></b>" -#: ../libpurple/log.c:597 msgid "HTML" msgstr "এইচটিএমএল" -#: ../libpurple/log.c:611 msgid "Plain text" msgstr "সরল পাঠ" # tithi -#: ../libpurple/log.c:625 msgid "Old flat format" msgstr "পুরাতন সম্পূর্ণ বিন্যাস" -#: ../libpurple/log.c:850 msgid "Logging of this conversation failed." msgstr "এই কথোপকথোনে সংযুক্তকরণ ব্যর্থ।" -#: ../libpurple/log.c:1292 msgid "XML" msgstr "এক্সএমএল" -#: ../libpurple/log.c:1376 #, c-format msgid "" "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" @@ -3149,7 +2201,6 @@ msgstr "" "<font color=\"#16569E\"><font size=\"2\">(%1s)</font> <b>%2s &3lt;স্বয়ংক্রিয়-" "উত্তর&4gt;:</b></font> %5s<br/>\n" -#: ../libpurple/log.c:1378 #, c-format msgid "" "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" @@ -3158,51 +2209,42 @@ msgstr "" "<font color=\"#A82F2F\"><font size=\"2\">(%1s)</font> <b>%2s &3lt;স্বয়ংক্রিয়-" "উত্তর&4gt;:</b></font> %5s<br/>\n" -#: ../libpurple/log.c:1436 ../libpurple/log.c:1569 msgid "<font color=\"red\"><b>Unable to find log path!</b></font>" msgstr "<font color=\"red\"><b>লগ পথ খুঁজতে অক্ষম</b></font>" -#: ../libpurple/log.c:1448 ../libpurple/log.c:1578 #, c-format msgid "<font color=\"red\"><b>Could not read file: %s</b></font>" msgstr "<font color=\"red\"><b>ফাইল পড়তে পারেনি: %s</b></font>" -#: ../libpurple/log.c:1510 #, c-format msgid "(%s) %s <AUTO-REPLY>: %s\n" msgstr "(%1s) %2s <AUTO-REPLY>: %3s\n" # tithi -#: ../libpurple/plugin.c:362 #, c-format msgid "You are using %s, but this plugin requires %s." msgstr "আপনি %1s ব্যবহার করছেন, কিন্তু এই প্লাগইনের %2s প্রয়োজন।" # tithi -#: ../libpurple/plugin.c:377 msgid "This plugin has not defined an ID." msgstr "এই প্লাগইন একটি আইডি নির্ধারণ করেনি।" # tithi -#: ../libpurple/plugin.c:445 #, c-format msgid "Plugin magic mismatch %d (need %d)" msgstr "প্লাগইন ম্যাজিক %1d এর সাথে মিলে না (%2d প্রয়োজন)" # tithi -#: ../libpurple/plugin.c:462 #, c-format msgid "ABI version mismatch %d.%d.x (need %d.%d.x)" msgstr "ABI সংস্করণ %1d এর সাথে মিলে না।%2d.x (%3d.%4d.x প্রয়োজন)" # tithi -#: ../libpurple/plugin.c:479 msgid "" "Plugin does not implement all required functions (list_icon, login and close)" msgstr "" "প্লাগইন সকল প্রয়োজনীয় ফাংশন বাস্তবায়ন করে না (লিস্ট-আইকন (_i), লগইন এবং বন্ধ করুন)" -#: ../libpurple/plugin.c:544 #, c-format msgid "" "The required plugin %s was not found. Please install this plugin and try " @@ -3211,88 +2253,62 @@ msgstr "" "প্রয়োজনীয় প্লাগইন %s খুঁজে পাওয়া যায়নি। অনুগ্রহ করে এই প্লাগইনটি সংস্থাপন করুন এবং " "পুনরায় চেষ্টা করুন।" -#: ../libpurple/plugin.c:549 msgid "Unable to load the plugin" msgstr "প্লাগইনটি লোড করতে অক্ষম" -#: ../libpurple/plugin.c:571 #, c-format msgid "The required plugin %s was unable to load." msgstr "প্রয়োজনীয় প্লাগইন %s লোড করতে অক্ষম।" -#: ../libpurple/plugin.c:575 msgid "Unable to load your plugin." msgstr "আপনার প্লাগইনটি লোড করতে অক্ষম।" -#: ../libpurple/plugin.c:665 #, c-format msgid "%s requires %s, but it failed to unload." msgstr "%1s এর %2s প্রয়োজন, কিন্তু এটি লোডহীন করতে ব্যর্থ।" -#: ../libpurple/plugins/autoaccept.c:23 msgid "Autoaccept" msgstr "স্বয়ংক্রিয়-গ্রহণ" -#: ../libpurple/plugins/autoaccept.c:25 ../libpurple/plugins/autoaccept.c:26 msgid "Auto-accept file transfer requests from selected users." msgstr "নির্বাচিত ব্যবহারকারীর কাছ থেকে স্বয়ং-গ্রহণ ফাইলের স্থানান্তর অনুরোধ করছে।" -#: ../libpurple/plugins/autoaccept.c:81 #, c-format msgid "Autoaccepted file transfer of \"%s\" from \"%s\" completed." msgstr "\"%1s\" হতে \"%2s\" স্বয়ং-গৃহীত ফাইল স্থানান্তর সম্পূর্ণ হয়েছে।" -#: ../libpurple/plugins/autoaccept.c:83 msgid "Autoaccept complete" msgstr "স্বয়ং-গ্রহণ সম্পন্ন" -#: ../libpurple/plugins/autoaccept.c:196 #, c-format msgid "When a file-transfer request arrives from %s" msgstr "যখন %s থেকে ফাইল-স্থানান্তর অনুরোধ পৌছায়" # tithi -#: ../libpurple/plugins/autoaccept.c:198 msgid "Set Autoaccept Setting" msgstr "স্বয়ং-গ্রহণ বিন্যাসন নির্ধারণ করুন" -#: ../libpurple/plugins/autoaccept.c:200 msgid "_Save" msgstr "সংরক্ষণ (_S)" -#: ../libpurple/plugins/autoaccept.c:201 ../libpurple/plugins/idle.c:170 -#: ../libpurple/plugins/idle.c:204 ../libpurple/plugins/idle.c:230 -#: ../libpurple/protocols/oscar/oscar.c:1617 -#: ../libpurple/protocols/oscar/oscar.c:2493 -#: ../libpurple/protocols/oscar/oscar.c:2541 -#: ../libpurple/protocols/oscar/oscar.c:6108 -#: ../libpurple/protocols/oscar/oscar.c:6163 -#: ../libpurple/protocols/oscar/oscar.c:6394 -#: ../libpurple/protocols/oscar/oscar.c:6464 ../libpurple/request.h:1401 -#: ../libpurple/request.h:1411 msgid "_Cancel" msgstr "বাতিল (_C)" # tithi -#: ../libpurple/plugins/autoaccept.c:204 msgid "Ask" msgstr "জিজ্ঞাসা করুন" -#: ../libpurple/plugins/autoaccept.c:205 msgid "Auto Accept" msgstr "স্বয়ং গ্রহণ করুন" -#: ../libpurple/plugins/autoaccept.c:206 msgid "Auto Reject" msgstr "স্বয়ং প্রত্যাখ্যান করুন" -#: ../libpurple/plugins/autoaccept.c:221 msgid "Autoaccept File Transfers..." msgstr "স্বয়ংক্রিয়-গ্রহণ ফাইল স্থানান্তর করে..." # tithi #. XXX: Is there a better way than this? There really should be. -#: ../libpurple/plugins/autoaccept.c:251 msgid "" "Path to save the files in\n" "(Please provide the full path)" @@ -3300,12 +2316,10 @@ msgstr "" "ফাইলটি সংরক্ষণ করার পথ\n" "(অনুগ্রহ করে সম্পূর্ণ পথ প্রদান করুন)" -#: ../libpurple/plugins/autoaccept.c:256 msgid "Automatically reject from users not in buddy list" msgstr "বন্ধু তালিকার বহির্ভুত ব্যবহারকারীগণ হতে স্বয়ংক্রিয় ভাবে বাতিল করুন" # tithi -#: ../libpurple/plugins/autoaccept.c:260 msgid "" "Notify with a popup when an autoaccepted file transfer is complete\n" "(only when there's no conversation with the sender)" @@ -3313,22 +2327,15 @@ msgstr "" "একটি স্বয়ং-গৃহীত ফাইল স্থানান্তর সম্পূর্ণ হলে পপ-আপ দ্বারা অবগত করুন\n" "(শুধুমাত্র যখন প্রেরকের সঙ্গে কোনো কথোপকথন হয় না)" -#: ../libpurple/plugins/autoaccept.c:265 msgid "Create a new directory for each user" msgstr "প্রত্যেক ব্যবহারকারীর জন্য একটি নির্দেশিকা তৈরী করুন" -#: ../libpurple/plugins/buddynote.c:46 ../libpurple/protocols/msn/msn.c:2094 -#: ../libpurple/protocols/msn/msn.c:2124 -#: ../libpurple/protocols/msnp9/msn.c:1800 -#: ../libpurple/protocols/msnp9/msn.c:1830 msgid "Notes" msgstr "নোট" -#: ../libpurple/plugins/buddynote.c:47 msgid "Enter your notes below..." msgstr "আপনার নোটগুলো নীচে প্রবেশ করান..." -#: ../libpurple/plugins/buddynote.c:65 msgid "Edit Notes..." msgstr "নোট সম্পাদন করুন..." @@ -3340,20 +2347,17 @@ msgstr "নোট সম্পাদন করুন..." #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/buddynote.c:90 ../pidgin/plugins/gtkbuddynote.c:74 msgid "Buddy Notes" msgstr "বন্ধু নোট" # tithi #. *< name #. *< version -#: ../libpurple/plugins/buddynote.c:92 ../pidgin/plugins/gtkbuddynote.c:76 msgid "Store notes on particular buddies." msgstr "নির্দিষ্ট বন্ধুদের কাছে নোট সলরক্ষণ করুন" # tithi #. *< 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 "আপনার বন্ধু তালিকায় বন্ধুদের জন্য নোট সংরক্ষণ করতে পছন্দ যোগ করে।" @@ -3363,7 +2367,6 @@ msgstr "আপনার বন্ধু তালিকায় বন্ধুদ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/ciphertest.c:264 msgid "Cipher Test" msgstr "সাইফার পরীক্ষা" @@ -3372,7 +2375,6 @@ msgstr "সাইফার পরীক্ষা" #. *< version #. * summary #. * description -#: ../libpurple/plugins/ciphertest.c:267 ../libpurple/plugins/ciphertest.c:269 msgid "Tests the ciphers that ship with libpurple." msgstr "লিবপার্পল সহ সিপ করে এমন সাইফারগুলো পরীক্ষা করে।" @@ -3382,7 +2384,6 @@ msgstr "লিবপার্পল সহ সিপ করে এমন সা #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/dbus-example.c:155 msgid "DBus Example" msgstr "DBus উদাহরণ" @@ -3390,8 +2391,6 @@ msgstr "DBus উদাহরণ" #. *< version #. * summary #. * description -#: ../libpurple/plugins/dbus-example.c:158 -#: ../libpurple/plugins/dbus-example.c:160 msgid "DBus Plugin Example" msgstr "DBus প্লাগইন এর উদাহরণ" @@ -3401,7 +2400,6 @@ msgstr "DBus প্লাগইন এর উদাহরণ" #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/filectl.c:248 msgid "File Control" msgstr "ফাইল নিয়ন্ত্রণ করুন" @@ -3409,50 +2407,38 @@ msgstr "ফাইল নিয়ন্ত্রণ করুন" #. *< version #. * summary #. * description -#: ../libpurple/plugins/filectl.c:251 ../libpurple/plugins/filectl.c:253 msgid "Allows control by entering commands in a file." msgstr "ফাইলে নির্দেশসমূহ প্রবেশ করার মাধ্যমে নিয়ন্ত্রণ অনুমোদন করুন।" -#: ../libpurple/plugins/idle.c:158 ../libpurple/plugins/idle.c:218 msgid "Minutes" msgstr "মিনিট" #. This is a cultural reference. Dy'er Mak'er is a song by Led Zeppelin. #. If that doesn't translate well into your language, drop the 's before translating. -#: ../libpurple/plugins/idle.c:165 ../libpurple/plugins/idle.c:199 -#: ../libpurple/plugins/idle.c:225 ../libpurple/plugins/idle.c:318 msgid "I'dle Mak'er" msgstr "অ'লস তৈরীকার'ক" -#: ../libpurple/plugins/idle.c:166 ../libpurple/plugins/idle.c:258 msgid "Set Account Idle Time" msgstr "একাউন্টের অলস সময় নির্ধারণ করুন" -#: ../libpurple/plugins/idle.c:169 ../libpurple/plugins/idle.c:229 msgid "_Set" msgstr "নির্ধারণ (_S)" -#: ../libpurple/plugins/idle.c:184 msgid "None of your accounts are idle." msgstr "আপনার কোনো একাউন্ট অলস নেই।" -#: ../libpurple/plugins/idle.c:200 ../libpurple/plugins/idle.c:262 msgid "Unset Account Idle Time" msgstr "একাউন্টের অলস সময় অপসারণ করুন" -#: ../libpurple/plugins/idle.c:203 msgid "_Unset" msgstr "অনির্ধারণ করুন (_U)" -#: ../libpurple/plugins/idle.c:226 ../libpurple/plugins/idle.c:266 msgid "Set Idle Time for All Accounts" msgstr "সব একাউন্টের জন্য অলস সময় নির্ধারণ করুন" -#: ../libpurple/plugins/idle.c:271 msgid "Unset Idle Time for All Idled Accounts" msgstr "সব অলস একাউন্টের জন্য অলস সময় অপসারণ করুন" -#: ../libpurple/plugins/idle.c:320 ../libpurple/plugins/idle.c:321 msgid "Allows you to hand-configure how long you've been idle" msgstr "আপনি কতক্ষণ অলস থাকবেন তা আপনাকে নিজ হাতে-বিন্যাস করতে অনুমোদন করে" @@ -3462,19 +2448,16 @@ msgstr "আপনি কতক্ষণ অলস থাকবেন তা আ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/ipc-test-client.c:87 msgid "IPC Test Client" msgstr "IPC পরীক্ষণ ক্লায়েন্ট" #. *< name #. *< version #. * summary -#: ../libpurple/plugins/ipc-test-client.c:90 msgid "Test plugin IPC support, as a client." msgstr "ক্লায়েন্ট হিসেবে, প্লাগইনের IPC সমর্থন পরীক্ষা করুন।" #. * 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." @@ -3488,39 +2471,32 @@ msgstr "" #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/ipc-test-server.c:74 msgid "IPC Test Server" msgstr "IPC পরীক্ষণ সার্ভার" #. *< name #. *< version #. * summary -#: ../libpurple/plugins/ipc-test-server.c:77 msgid "Test plugin IPC support, as a server." msgstr "সার্ভার হিসেবে, প্লাগইনের IPC সমর্থন পরীক্ষা করুন।" #. * description -#: ../libpurple/plugins/ipc-test-server.c:79 msgid "Test plugin IPC support, as a server. This registers the IPC commands." msgstr "" "সার্ভার হিসেবে, প্লাগইনের IPC সমর্থন পরীক্ষা করুন। এটি IPC নির্দেশগুলো নিবন্ধন করে।" -#: ../libpurple/plugins/joinpart.c:232 msgid "Join/Part Hiding Configuration" msgstr "লুকানো বিন্যাসকরণ যুক্ত/বিভক্ত করুন" # tithi -#: ../libpurple/plugins/joinpart.c:236 msgid "Minimum Room Size" msgstr "নূন্যতম কক্ষের আকার" # tithi -#: ../libpurple/plugins/joinpart.c:241 msgid "User Inactivity Timeout (in minutes)" msgstr "ব্যবহারকারীর নিষ্ক্রয়তার সময়সীমা উত্তীর্ণ (মিনিটে)" # tithi -#: ../libpurple/plugins/joinpart.c:246 msgid "Apply hiding rules to buddies" msgstr "বন্ধুদের উপর লুকানোর নিয়ম প্রয়োগ করুন" @@ -3531,7 +2507,6 @@ msgstr "বন্ধুদের উপর লুকানোর নিয়ম #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/joinpart.c:276 msgid "Join/Part Hiding" msgstr "যুক্ত/বিভক্ত গোপনকরণ" @@ -3539,13 +2514,11 @@ msgstr "যুক্ত/বিভক্ত গোপনকরণ" #. *< name #. *< version #. * summary -#: ../libpurple/plugins/joinpart.c:279 msgid "Hides extraneous join/part messages." msgstr "অসংশ্লিষ্ট যুক্ত/বিভক্ত বার্তাগুলো গোপন করে।" # tithi #. * description -#: ../libpurple/plugins/joinpart.c:281 msgid "" "This plugin hides join/part messages in large rooms, except for those users " "actively taking part in a conversation." @@ -3557,69 +2530,52 @@ msgstr "" #. * 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:1558 msgid "User is offline." msgstr "ব্যবহারকারী অফলাইনে।" -#: ../libpurple/plugins/log_reader.c:1564 msgid "Auto-response sent:" msgstr "স্বয়ং-জবাব পাঠানো হয়েছে:" -#: ../libpurple/plugins/log_reader.c:1579 -#: ../libpurple/plugins/log_reader.c:1582 -#: ../libpurple/plugins/statenotify.c:93 #, c-format msgid "%s has signed off." msgstr "%s অফলাইনে।" -#: ../libpurple/plugins/log_reader.c:1603 msgid "One or more messages may have been undeliverable." msgstr "এক বা একাধিক বার্তা পাঠানো যাচ্ছে না।" -#: ../libpurple/plugins/log_reader.c:1613 msgid "You were disconnected from the server." msgstr "আপনি সার্ভার থেকে বিচ্ছিন্ন ছিলেন।" -#: ../libpurple/plugins/log_reader.c:1621 msgid "" "You are currently disconnected. Messages will not be received unless you are " "logged in." msgstr "" "আপনি বর্তমানে বিচ্ছিন্ন। আপনি লগ ইন না করা পর্যন্ত বার্তাসমূহ গ্রহণ করা হবে না।" -#: ../libpurple/plugins/log_reader.c:1636 msgid "Message could not be sent because the maximum length was exceeded." msgstr "সর্বোচ্চ সীমা অতিক্রান্ত হওয়ায় বার্তা পাঠানো যাচ্ছে না।" -#: ../libpurple/plugins/log_reader.c:1641 msgid "Message could not be sent." msgstr "বার্তা পাঠানো সম্ভব হয়নি।" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2723 -#: ../libpurple/plugins/log_reader.c:2879 msgid "Adium" msgstr "অডিয়াম" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2736 -#: ../libpurple/plugins/log_reader.c:2884 msgid "Fire" msgstr "আগুন" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2748 -#: ../libpurple/plugins/log_reader.c:2888 msgid "Messenger Plus!" msgstr "বার্তাবাহক প্লাস!" @@ -3627,24 +2583,18 @@ msgstr "বার্তাবাহক প্লাস!" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2762 -#: ../libpurple/plugins/log_reader.c:2893 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:2774 -#: ../libpurple/plugins/log_reader.c:2897 msgid "MSN Messenger" msgstr "এমএসএন বার্তাবাহক" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2786 -#: ../libpurple/plugins/log_reader.c:2901 msgid "Trillian" msgstr "ট্রিলিয়ান" @@ -3652,27 +2602,21 @@ msgstr "ট্রিলিয়ান" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2798 -#: ../libpurple/plugins/log_reader.c:2905 msgid "aMSN" msgstr "aMSN" #. Add general preferences. -#: ../libpurple/plugins/log_reader.c:2861 msgid "General Log Reading Configuration" msgstr "সাধারণ লগ পড়ার বিন্যাসন" -#: ../libpurple/plugins/log_reader.c:2865 msgid "Fast size calculations" msgstr "দ্রুত আকার গণনাসমূহ" # fix me- tithi -#: ../libpurple/plugins/log_reader.c:2869 msgid "Use name heuristics" msgstr "নাম হিউরিস্টিক ব্যবহার করুন" #. Add Log Directory preferences. -#: ../libpurple/plugins/log_reader.c:2875 msgid "Log Directory" msgstr "লগ নির্দেশিকা" @@ -3682,19 +2626,16 @@ msgstr "লগ নির্দেশিকা" #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/log_reader.c:2934 msgid "Log Reader" msgstr "লগ পাঠক" #. *< name #. *< version #. * summary -#: ../libpurple/plugins/log_reader.c:2938 msgid "Includes other IM clients' logs in the log viewer." msgstr "লগ প্রদর্শকে অন্যান্য আইএম ক্লায়েন্টদের লগসমূহ অন্তর্ভুক্ত করে।" #. * description -#: ../libpurple/plugins/log_reader.c:2942 msgid "" "When viewing logs, this plugin will include logs from other IM clients. " "Currently, this includes Adium, MSN Messenger, and Trillian.\n" @@ -3708,22 +2649,17 @@ msgstr "" "সতর্কতা: এই প্লাগইনটি এখনও আলফা কোড এবং প্রায়সই নষ্ট হতে পারে। আপনার নিজ " "দ্বায়িত্বে ব্যবহার করুন!" -#: ../libpurple/plugins/mono/loader/mono.c:217 msgid "Mono Plugin Loader" msgstr "মোনো প্লাগইন লোডকারী" # sam: mono? -#: ../libpurple/plugins/mono/loader/mono.c:219 -#: ../libpurple/plugins/mono/loader/mono.c:220 msgid "Loads .NET plugins with Mono." msgstr "মোনো এর সাথে .NET প্লাগইন লোড করে" # tithi -#: ../libpurple/plugins/newline.c:57 msgid "Add new line in IMs" msgstr "আইএম এ নতুন লাইন যোগ করুন" -#: ../libpurple/plugins/newline.c:61 msgid "Add new line in Chats" msgstr "আড্ডায় নতুন লাইন যোগ করুন" @@ -3736,19 +2672,16 @@ msgstr "আড্ডায় নতুন লাইন যোগ করুন" #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/newline.c:104 msgid "New Line" msgstr "নতুন লাইন" #. *< name #. *< version -#: ../libpurple/plugins/newline.c:106 msgid "Prepends a newline to displayed message." msgstr "প্রদর্শিত বার্তায় নতুন-লাইন যোগ করে।" # tithi #. *< 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." @@ -3757,17 +2690,14 @@ msgstr "" "অবশিষ্ট বার্তাসমূহ উপস্থিত হয়।" # tithi -#: ../libpurple/plugins/offlinemsg.c:23 msgid "Offline Message Emulation" msgstr "অফলাইন বার্তা অনুকরন করুন" # tithi -#: ../libpurple/plugins/offlinemsg.c:25 ../libpurple/plugins/offlinemsg.c:26 msgid "Save messages sent to an offline user as pounce." msgstr "অফলাইন ব্যবহারকারীকে পাঠানো বার্তা পাউন্স হিসেবে সংরক্ষণ করুন।" # tithi -#: ../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." @@ -3775,7 +2705,6 @@ msgstr "" "অবশিষ্ট বার্তাগুলো পাউন্স হিসেবে সংরক্ষিত হবে। আপনি 'বন্ধু পাউন্স' সংলাপ হতে পাউন্স " "সম্পাদনা/মুছে ফেলতে পারেন।" -#: ../libpurple/plugins/offlinemsg.c:156 #, c-format msgid "" "\"%s\" is currently offline. Do you want to save the rest of the messages in " @@ -3784,52 +2713,24 @@ msgstr "" "\"%s\" বর্তমানে অফলাইনে আছেন। আপনি কি অবশিষ্ট বার্তাগুলো পাউন্সে সংরক্ষণ করতে চান " "এবং \"%s\" যখন পুনরায় লগইন করে তখন তাদেরকে স্বয়ংক্রিয় ভাবে পাঠাতে চান?" -#: ../libpurple/plugins/offlinemsg.c:160 msgid "Offline Message" msgstr "অফলাইন বার্তা" # tithi -#: ../libpurple/plugins/offlinemsg.c:161 msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog" msgstr "আপনি 'বন্ধু পাউন্স' সংলাপ হতে পাউন্স সম্পাদনা/মুছে ফেলতে পারেন।" -#: ../libpurple/plugins/offlinemsg.c:165 -#: ../libpurple/protocols/msn/dialog.c:141 -#: ../libpurple/protocols/msn/msn.c:796 ../libpurple/protocols/msn/msn.c:799 -#: ../libpurple/protocols/msnp9/dialog.c:133 -#: ../libpurple/protocols/msnp9/msn.c:566 -#: ../libpurple/protocols/msnp9/msn.c:582 -#: ../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 "হ্যাঁ" -#: ../libpurple/plugins/offlinemsg.c:166 -#: ../libpurple/protocols/msn/dialog.c:142 -#: ../libpurple/protocols/msn/msn.c:796 ../libpurple/protocols/msn/msn.c:799 -#: ../libpurple/protocols/msnp9/dialog.c:134 -#: ../libpurple/protocols/msnp9/msn.c:566 -#: ../libpurple/protocols/msnp9/msn.c:582 -#: ../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 "না" # tithi -#: ../libpurple/plugins/offlinemsg.c:193 msgid "Save offline messages in pounce" msgstr "অফলাইন বার্তা পাউন্সে সংরক্ষণ করুন" # tithi -#: ../libpurple/plugins/offlinemsg.c:197 msgid "Do not ask. Always save in pounce." msgstr "জিজ্ঞাসা করবেন না। সবসময় পাউন্সে সংরক্ষণ করুন।" @@ -3839,28 +2740,23 @@ msgstr "জিজ্ঞাসা করবেন না। সবসময় #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/perl/perl.c:656 msgid "Perl Plugin Loader" msgstr "পার্ল প্লাগইন লোডকারী" #. *< name #. *< version #. *< summary -#: ../libpurple/plugins/perl/perl.c:658 ../libpurple/plugins/perl/perl.c:659 msgid "Provides support for loading perl plugins." msgstr "পার্ল প্লাগইন লোড করার জন্য সমর্থন করে।" # tithi -#: ../libpurple/plugins/psychic.c:20 msgid "Psychic Mode" msgstr "সাইকিক পরিমন্ডল" # fix me tithi -#: ../libpurple/plugins/psychic.c:21 msgid "Psychic mode for incoming conversation" msgstr "আগত কথোপকথোনের জন্য সাইকিক পরিমন্ডল" -#: ../libpurple/plugins/psychic.c:22 msgid "" "Causes conversation windows to appear as other users begin to message you. " "This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" @@ -3869,24 +2765,19 @@ msgstr "" "হয়। এটি AIM, ICQ, XMPP, Sametime, এবং Yahoo এর জন্য কাজ করে!" # tithi -#: ../libpurple/plugins/psychic.c:72 msgid "You feel a disturbance in the force..." msgstr "আপনি গতিতে একটি অসুবিধা অনুভব করছেন..." -#: ../libpurple/plugins/psychic.c:91 msgid "Only enable for users on the buddy list" msgstr "শুধুমাত্র বন্ধু তালিকার ব্যবহারকারীর জন্য সক্রিয় করুন" -#: ../libpurple/plugins/psychic.c:96 msgid "Disable when away" msgstr "দূরে থাকার সময় নিষ্ক্রিয় করুন" # tithi -#: ../libpurple/plugins/psychic.c:100 msgid "Display notification message in conversations" msgstr "কথোপকথনে বিজ্ঞপ্তি বার্তা প্রদর্শন করুন" -#: ../libpurple/plugins/psychic.c:105 msgid "Raise psychic conversations" msgstr "সাইকিক কথাবার্তা হচ্ছে" @@ -3896,7 +2787,6 @@ msgstr "সাইকিক কথাবার্তা হচ্ছে" #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/signals-test.c:778 msgid "Signals Test" msgstr "সংকেতসমূহের পরীক্ষা" @@ -3904,8 +2794,6 @@ msgstr "সংকেতসমূহের পরীক্ষা" #. *< version #. * summary #. * description -#: ../libpurple/plugins/signals-test.c:781 -#: ../libpurple/plugins/signals-test.c:783 msgid "Test to see that all signals are working properly." msgstr "সকল সংকেত সঠিকভাবে কাজ করছে কিনা তা দেখতে পরীক্ষা করুন।" @@ -3915,7 +2803,6 @@ msgstr "সকল সংকেত সঠিকভাবে কাজ করছ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/simple.c:37 msgid "Simple Plugin" msgstr "সহজ প্লাগইন" @@ -3923,14 +2810,11 @@ msgstr "সহজ প্লাগইন" #. *< version #. * summary #. * description -#: ../libpurple/plugins/simple.c:40 ../libpurple/plugins/simple.c:42 msgid "Tests to see that most things are working." msgstr "অধিকাংশ জিনিস সঠিকভাবে কাজ করছে কিনা তা দেখতে পরীক্ষা করুন।" # tithi #. Scheme name -#: ../libpurple/plugins/ssl/ssl-gnutls.c:908 -#: ../libpurple/plugins/ssl/ssl-nss.c:857 msgid "X.509 Certificates" msgstr "X.৫০৯ প্রত্যয়ন পত্র" @@ -3940,7 +2824,6 @@ msgstr "X.৫০৯ প্রত্যয়ন পত্র" #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/ssl/ssl-gnutls.c:984 msgid "GNUTLS" msgstr "GNUTLS" @@ -3948,8 +2831,6 @@ msgstr "GNUTLS" #. *< version #. * summary #. * description -#: ../libpurple/plugins/ssl/ssl-gnutls.c:987 -#: ../libpurple/plugins/ssl/ssl-gnutls.c:989 msgid "Provides SSL support through GNUTLS." msgstr "GNUTLS এর মাধ্যমে এসএসএল সমর্থন প্রদান করে।" @@ -3959,7 +2840,6 @@ msgstr "GNUTLS এর মাধ্যমে এসএসএল সমর্থ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/ssl/ssl-nss.c:934 msgid "NSS" msgstr "NSS" @@ -3967,8 +2847,6 @@ msgstr "NSS" #. *< version #. * summary #. * description -#: ../libpurple/plugins/ssl/ssl-nss.c:937 -#: ../libpurple/plugins/ssl/ssl-nss.c:939 msgid "Provides SSL support through Mozilla NSS." msgstr "মজিলা NSS এর মাধ্যমে SSL সমর্থন প্রদান করে।" @@ -3978,7 +2856,6 @@ msgstr "মজিলা NSS এর মাধ্যমে SSL সমর্থন #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/ssl/ssl.c:94 msgid "SSL" msgstr "SSL" @@ -3986,48 +2863,38 @@ msgstr "SSL" #. *< version #. * summary #. * description -#: ../libpurple/plugins/ssl/ssl.c:97 ../libpurple/plugins/ssl/ssl.c:99 msgid "Provides a wrapper around SSL support libraries." msgstr "এসএসএল সমর্থন লাইব্রেরিসমূহের চারদিকে মোড়ক প্রদান করে।" -#: ../libpurple/plugins/statenotify.c:63 #, c-format msgid "%s is no longer away." msgstr "%s আর দূরে থাকবে না।" -#: ../libpurple/plugins/statenotify.c:65 #, c-format msgid "%s has gone away." msgstr "%s দূরে চলে গেছে।" -#: ../libpurple/plugins/statenotify.c:75 #, c-format msgid "%s has become idle." msgstr "%s এখন অলস।" -#: ../libpurple/plugins/statenotify.c:77 #, c-format msgid "%s is no longer idle." msgstr "%s আর অলস থাকবে না।" -#: ../libpurple/plugins/statenotify.c:86 #, c-format msgid "%s has signed on." msgstr "%s এখন অনলাইন।" -#: ../libpurple/plugins/statenotify.c:104 msgid "Notify When" msgstr "জানাবে যখন" -#: ../libpurple/plugins/statenotify.c:107 msgid "Buddy Goes _Away" msgstr "বন্ধু অনুপস্থিত (_A)" -#: ../libpurple/plugins/statenotify.c:110 msgid "Buddy Goes _Idle" msgstr "বন্ধু অলস (_I)" -#: ../libpurple/plugins/statenotify.c:113 msgid "Buddy _Signs On/Off" msgstr "বন্ধু সাইন অন/অফ (_S)" @@ -4037,7 +2904,6 @@ msgstr "বন্ধু সাইন অন/অফ (_S)" #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/statenotify.c:161 msgid "Buddy State Notification" msgstr "বন্ধুর অবস্থার প্রজ্ঞাপন" @@ -4045,8 +2911,6 @@ msgstr "বন্ধুর অবস্থার প্রজ্ঞাপন" #. *< version #. * summary #. * description -#: ../libpurple/plugins/statenotify.c:164 -#: ../libpurple/plugins/statenotify.c:167 msgid "" "Notifies in a conversation window when a buddy goes or returns from away or " "idle." @@ -4054,16 +2918,13 @@ msgstr "" "যখন বন্ধু অনুপস্থিত বা অলস থাকে বা এইসব থেকে ফিরে আসে তখন কথোপকথন উইন্ডোতে " "প্রজ্ঞাপন পাঠায়।" -#: ../libpurple/plugins/tcl/tcl.c:423 msgid "Tcl Plugin Loader" msgstr "টিসিএল প্লাগইন লোডকারী" -#: ../libpurple/plugins/tcl/tcl.c:425 ../libpurple/plugins/tcl/tcl.c:426 msgid "Provides support for loading Tcl plugins" msgstr "টিসিএল প্লাগইন লোড করার জন্য সমর্থন প্রদান করে" # tithi -#: ../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" @@ -4072,7 +2933,6 @@ msgstr "" "http://www.activestate.com থেকে সক্রিয় TCL সংস্থাপন করুন\n" # tithi -#: ../libpurple/protocols/bonjour/bonjour.c:93 msgid "" "The Apple Bonjour For Windows toolkit wasn't found, see the FAQ at: http://d." "pidgin.im/BonjourWindows for more information." @@ -4080,58 +2940,25 @@ msgstr "" "উইন্ডোজ টুলকিটের জন্য অ্যাপল বোনজুর খুঁজে পাওয়া যায়নি, আরও তথ্যের জন্য http://d." "pidgin.im/BonjourWindows এর FAQ দেখুন।" -#: ../libpurple/protocols/bonjour/bonjour.c:112 msgid "Unable to listen for incoming IM connections\n" msgstr "আগত আইএম সংযোগসূমহের জন্য শুনতে অক্ষম\n" -#: ../libpurple/protocols/bonjour/bonjour.c:139 msgid "" "Unable to establish connection with the local mDNS server. Is it running?" msgstr "স্থানীয় এমডিএনএস সার্ভারের সাথে সংযোগ স্থাপনে ব্যর্থ। এটা কি চলছে?" -#. Creating the options for the protocol -#: ../libpurple/protocols/bonjour/bonjour.c:381 -#: ../libpurple/protocols/bonjour/bonjour.c:709 -#: ../libpurple/protocols/gg/gg.c:579 -#: ../libpurple/protocols/jabber/jabber.c:1087 msgid "First name" msgstr "প্রথম নাম" -#: ../libpurple/protocols/bonjour/bonjour.c:383 -#: ../libpurple/protocols/bonjour/bonjour.c:712 -#: ../libpurple/protocols/gg/gg.c:574 -#: ../libpurple/protocols/jabber/jabber.c:1091 msgid "Last name" msgstr "শেষ নাম" -#: ../libpurple/protocols/bonjour/bonjour.c:387 -#: ../libpurple/protocols/bonjour/bonjour.c:715 -#: ../libpurple/protocols/gg/gg.c:441 -#: ../libpurple/protocols/jabber/buddy.c:323 -#: ../libpurple/protocols/jabber/buddy.c:1339 -#: ../libpurple/protocols/jabber/buddy.c:1352 -#: ../libpurple/protocols/jabber/buddy.c:2245 -#: ../libpurple/protocols/jabber/jabber.c:1079 -#: ../libpurple/protocols/qq/buddy_info.c:121 -#: ../libpurple/protocols/silc/ops.c:1055 -#: ../libpurple/protocols/silc/silc.c:1005 -#: ../libpurple/protocols/silc/silc.c:1246 -#: ../libpurple/protocols/silc/util.c:561 -#: ../libpurple/protocols/silc10/ops.c:1075 -#: ../libpurple/protocols/silc10/silc.c:706 -#: ../libpurple/protocols/silc10/silc.c:947 -#: ../libpurple/protocols/silc10/util.c:555 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1061 msgid "Email" msgstr "ই-মেইল" -#: ../libpurple/protocols/bonjour/bonjour.c:390 -#: ../libpurple/protocols/bonjour/bonjour.c:718 msgid "AIM Account" msgstr "এআইএম একাউন্ট" -#: ../libpurple/protocols/bonjour/bonjour.c:393 -#: ../libpurple/protocols/bonjour/bonjour.c:721 msgid "XMPP Account" msgstr "XMPP একাউন্ট" @@ -4145,389 +2972,256 @@ msgstr "XMPP একাউন্ট" #. *< version #. * summary #. * description -#: ../libpurple/protocols/bonjour/bonjour.c:526 -#: ../libpurple/protocols/bonjour/bonjour.c:528 msgid "Bonjour Protocol Plugin" msgstr "Bonjour প্রটোকল প্লাগইন" -#: ../libpurple/protocols/bonjour/bonjour.c:668 msgid "Purple Person" msgstr "পার্পেল ব্যক্তি" -#: ../libpurple/protocols/bonjour/bonjour.h:33 +#. Creating the options for the protocol +#, fuzzy +msgid "Local Port" +msgstr "এলাকা" + msgid "Bonjour" msgstr "Bonjour" -#: ../libpurple/protocols/bonjour/jabber.c:386 #, c-format msgid "%s has closed the conversation." msgstr "%s কথোপকথন বন্ধ করে দিয়েছে।" -#: ../libpurple/protocols/bonjour/jabber.c:478 -#: ../libpurple/protocols/bonjour/jabber.c:543 -#: ../libpurple/protocols/bonjour/jabber.c:588 -#: ../libpurple/protocols/bonjour/jabber.c:759 -#: ../libpurple/protocols/bonjour/jabber.c:777 msgid "Unable to send the message, the conversation couldn't be started." msgstr "বার্তা পাঠাতে অক্ষম, কথোপকথন শুরু হতে পারে নি।" -#: ../libpurple/protocols/bonjour/jabber.c:684 msgid "Cannot open socket" msgstr "সকেট খোলা যাচ্ছে না" -#: ../libpurple/protocols/bonjour/jabber.c:712 msgid "Could not bind socket to port" msgstr "পোর্টের সাথে সকেটকে সংযুক্ত করা যায়নি" -#: ../libpurple/protocols/bonjour/jabber.c:722 msgid "Could not listen on socket" msgstr "সকেট এ শোনা যাচ্ছে না" # tithi -#: ../libpurple/protocols/bonjour/mdns_win32.c:110 msgid "Error communicating with local mDNSResponder." msgstr "স্থানীয় mDNSResponder এর সঙ্গে যোগাযোগে ত্রুটি।" -#: ../libpurple/protocols/gg/gg.c:75 ../libpurple/proxy.c:2139 msgid "Invalid proxy settings" msgstr "অবৈধ প্রক্সি বিন্যাসনসমূহ" -#: ../libpurple/protocols/gg/gg.c:76 ../libpurple/proxy.c:2139 msgid "" "Either the host name or port number specified for your given proxy type is " "invalid." msgstr "আপনার প্রদত্ত প্রক্সির ধরনের জন্য উল্লেখিত হোস্ট নাম বা পোর্ট নম্বর অবৈধ।" -#: ../libpurple/protocols/gg/gg.c:110 ../libpurple/protocols/gg/gg.c:132 -#: ../libpurple/protocols/gg/gg.c:171 msgid "Token Error" msgstr "টোকেন ত্রুটি" -#: ../libpurple/protocols/gg/gg.c:111 ../libpurple/protocols/gg/gg.c:133 -#: ../libpurple/protocols/gg/gg.c:172 msgid "Unable to fetch the token.\n" msgstr "টোকেন আনতে অক্ষম।\n" -#: ../libpurple/protocols/gg/gg.c:249 ../libpurple/protocols/gg/gg.c:256 -#: ../libpurple/protocols/gg/gg.c:262 msgid "Save Buddylist..." msgstr "বন্ধুর তালিকা সংরক্ষণ করুন..." -#: ../libpurple/protocols/gg/gg.c:250 msgid "Your buddylist is empty, nothing was written to the file." msgstr "আপনার বন্ধু তালিকাটি ফাঁকা, ফাইলে কিছুই লেখা ছিল না।" -#: ../libpurple/protocols/gg/gg.c:257 msgid "Buddylist saved successfully!" msgstr "বন্ধু তালিকা সফলভাবে সংরক্ষিত হয়েছে!" -#: ../libpurple/protocols/gg/gg.c:260 #, c-format msgid "Couldn't write buddy list for %s to %s" msgstr "%1s এর জন্য %2s এ বন্ধুর তালিকা লিখতে পারেনি।" -#: ../libpurple/protocols/gg/gg.c:281 ../libpurple/protocols/gg/gg.c:282 msgid "Couldn't load buddylist" msgstr "বন্ধু-তালিকা লোড করা যায়নি।" -#: ../libpurple/protocols/gg/gg.c:298 msgid "Load Buddylist..." msgstr "বন্ধুর-তালিকা লোড করুন..." -#: ../libpurple/protocols/gg/gg.c:299 msgid "Buddylist loaded successfully!" msgstr "বন্ধু-তালিকা সফলভাবে লোড করা হয়েছে।" -#: ../libpurple/protocols/gg/gg.c:310 msgid "Save buddylist..." msgstr "বন্ধু-তালিকা সংরক্ষণ করুন..." -#: ../libpurple/protocols/gg/gg.c:320 ../libpurple/protocols/gg/gg.c:2206 msgid "Load buddylist from file..." msgstr "ফাইল থেকে বন্ধু-তালিকা লোড করুন..." -#: ../libpurple/protocols/gg/gg.c:353 msgid "Fill in the registration fields." msgstr "নিবন্ধন ক্ষেত্রে পূরণ করুন।" -#: ../libpurple/protocols/gg/gg.c:360 msgid "Passwords do not match." msgstr "গুপ্তসংকেত মিলে না।" -#: ../libpurple/protocols/gg/gg.c:370 msgid "Unable to register new account. Error occurred.\n" msgstr "নতুন একাউন্ট নিবন্ধন করতে ব্যর্থ। ত্রুটি দেখা দিয়েছে।\n" -#: ../libpurple/protocols/gg/gg.c:383 msgid "New Gadu-Gadu Account Registered" msgstr "নতুন গাদু-গাদু একাউন্ট নিবন্ধন করা হয়েছে" -#: ../libpurple/protocols/gg/gg.c:384 msgid "Registration completed successfully!" msgstr "নিবন্ধন সফলভাবে শেষ হয়েছে!" -#: ../libpurple/protocols/gg/gg.c:446 ../libpurple/protocols/gg/gg.c:714 -#: ../libpurple/protocols/jabber/jabber.c:1062 -#: ../libpurple/protocols/jabber/jabber.c:1065 -#: ../libpurple/protocols/jabber/jabber.c:1957 msgid "Password" msgstr "গুপ্তসংকেত" -#: ../libpurple/protocols/gg/gg.c:451 ../libpurple/protocols/gg/gg.c:719 msgid "Password (retype)" msgstr "গুপ্তসংকেত (পুনরায় টাইপ করুন)" -#: ../libpurple/protocols/gg/gg.c:456 ../libpurple/protocols/gg/gg.c:724 msgid "Enter current token" msgstr "বর্তমান টোকেন প্রবেশ করান" -#: ../libpurple/protocols/gg/gg.c:462 ../libpurple/protocols/gg/gg.c:730 msgid "Current token" msgstr "বর্তমান টোকেন" -#: ../libpurple/protocols/gg/gg.c:466 ../libpurple/protocols/gg/gg.c:467 msgid "Register New Gadu-Gadu Account" msgstr "নতুন গাদু-গাদু একাউন্ট নিবন্ধন করুন" -#: ../libpurple/protocols/gg/gg.c:468 msgid "Please, fill in the following fields" msgstr "অনুগ্রহ করে, নিচের ক্ষেত্রসমূহে পূরণ করুন" -#: ../libpurple/protocols/gg/gg.c:589 ../libpurple/protocols/gg/gg.c:969 -#: ../libpurple/protocols/gg/gg.c:1037 -#: ../libpurple/protocols/jabber/jabber.c:1099 -#: ../libpurple/protocols/oscar/oscar.c:3979 -#: ../libpurple/protocols/oscar/oscar.c:3987 msgid "City" msgstr "শহর" -#: ../libpurple/protocols/gg/gg.c:594 msgid "Year of birth" msgstr "জন্ম সন" -#: ../libpurple/protocols/gg/gg.c:597 ../libpurple/protocols/msn/msn.c:2023 -#: ../libpurple/protocols/msnp9/msn.c:1729 -#: ../libpurple/protocols/myspace/user.c:130 -#: ../libpurple/protocols/oscar/oscar.c:3938 -#: ../libpurple/protocols/qq/buddy_info.c:119 -#: ../libpurple/protocols/qq/qq.c:314 ../libpurple/protocols/qq/qq.c:317 -#: ../libpurple/protocols/qq/qq.c:320 ../libpurple/protocols/qq/qq.c:324 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1091 msgid "Gender" msgstr "লিঙ্গ" -#: ../libpurple/protocols/gg/gg.c:598 msgid "Male or female" msgstr "পুরুষ অথবা মহিলা" -#: ../libpurple/protocols/gg/gg.c:599 -#: ../libpurple/protocols/oscar/oscar.c:3938 -#: ../libpurple/protocols/qq/buddy_info.c:67 -#: ../libpurple/protocols/qq/qq.c:314 msgid "Male" msgstr "পুরুষ" -#: ../libpurple/protocols/gg/gg.c:600 -#: ../libpurple/protocols/oscar/oscar.c:3938 -#: ../libpurple/protocols/qq/buddy_info.c:68 -#: ../libpurple/protocols/qq/qq.c:317 msgid "Female" msgstr "মহিলা" -#: ../libpurple/protocols/gg/gg.c:604 msgid "Only online" msgstr "শুধুমাত্র অনলাইন" -#: ../libpurple/protocols/gg/gg.c:608 ../libpurple/protocols/gg/gg.c:609 msgid "Find buddies" msgstr "বন্ধু খোঁজ করুন" -#: ../libpurple/protocols/gg/gg.c:610 msgid "Please, enter your search criteria below" msgstr "অনুগ্রহ করে, আপনার অনুসন্ধান শর্তাবলী নীচে প্রবেশ করান" -#: ../libpurple/protocols/gg/gg.c:644 msgid "Fill in the fields." msgstr "ক্ষেত্রসমূহে পূরণ করুন।" -#: ../libpurple/protocols/gg/gg.c:656 msgid "Your current password is different from the one that you specified." msgstr "আপনার বর্তমান গুপ্তসংকেতটি আপনার উল্লেখিত একটি গুপ্তসংকেত থেকে পৃথক" -#: ../libpurple/protocols/gg/gg.c:670 msgid "Unable to change password. Error occurred.\n" msgstr "গুপ্তসংকেত পরিবর্তনে অক্ষম। ত্রুটি দেখা দিয়েছে।\n" -#: ../libpurple/protocols/gg/gg.c:679 msgid "Change password for the Gadu-Gadu account" msgstr "গাদু-গাদু একাউন্টের জন্য গুপ্তসংকেত পরিবর্তন করুন" -#: ../libpurple/protocols/gg/gg.c:680 msgid "Password was changed successfully!" msgstr "গুপ্তসংকেত সফলভাবে পরিবর্তিত হয়েছিল!" -#: ../libpurple/protocols/gg/gg.c:709 msgid "Current password" msgstr "বর্তমান গুপ্তসংকেত" -#: ../libpurple/protocols/gg/gg.c:734 msgid "Please, enter your current password and your new password for UIN: " msgstr "" "অনুগ্রহ করে, UIN-এর জন্য আপনার বর্তমান গুপ্তসংকেত এবং আপনার নতুন গুপ্তসংকেত প্রবেশ " "করান:" -#: ../libpurple/protocols/gg/gg.c:738 ../libpurple/protocols/gg/gg.c:739 msgid "Change Gadu-Gadu Password" msgstr "গাদু-গাদু গুপ্তসংকেত পরিবর্তন করুন" -#: ../libpurple/protocols/gg/gg.c:804 #, c-format msgid "Select a chat for buddy: %s" msgstr "বন্ধুর জন্য আড্ডা নির্বাচন করুন: %s" -#: ../libpurple/protocols/gg/gg.c:807 ../libpurple/protocols/gg/gg.c:808 msgid "Add to chat..." msgstr "আড্ডায় যোগ দিন..." -#: ../libpurple/protocols/gg/gg.c:930 -#: ../libpurple/protocols/jabber/buddy.c:2062 -#: ../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:409 -#: ../libpurple/protocols/yahoo/yahoo.c:3179 ../libpurple/status.c:160 -#: ../pidgin/gtkdocklet.c:545 ../pidgin/gtkstatusbox.c:1095 msgid "Available" msgstr "সহজলভ্য" #. 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:933 ../libpurple/protocols/irc/irc.c:556 -#: ../libpurple/protocols/irc/msgs.c:364 -#: ../libpurple/protocols/jabber/buddy.c:2066 -#: ../libpurple/protocols/novell/novell.c:2837 -#: ../libpurple/protocols/oscar/oscar.c:750 -#: ../libpurple/protocols/oscar/oscar.c:5853 -#: ../libpurple/protocols/qq/qq.c:267 ../libpurple/protocols/qq/qq.c:413 -#: ../libpurple/protocols/silc/buddy.c:1491 -#: ../libpurple/protocols/silc10/buddy.c:1491 -#: ../libpurple/protocols/yahoo/yahoo.c:3756 -#: ../libpurple/protocols/yahoo/yahoo.c:3830 ../libpurple/status.c:163 -#: ../pidgin/gtkdocklet.c:549 ../pidgin/gtkprefs.c:2090 -#: ../pidgin/gtkstatusbox.c:1096 msgid "Away" msgstr "এখানে নেই" -#: ../libpurple/protocols/gg/gg.c:958 ../libpurple/protocols/gg/gg.c:1028 -#: ../libpurple/protocols/oscar/oscar.c:2958 -#: ../libpurple/protocols/oscar/oscar.c:3905 msgid "UIN" msgstr "UIN" -#: ../libpurple/protocols/gg/gg.c:961 ../libpurple/protocols/gg/gg.c:1031 -#: ../libpurple/protocols/jabber/buddy.c:2239 -#: ../libpurple/protocols/jabber/buddy.c:2425 -#: ../libpurple/protocols/oscar/oscar.c:3916 -#: ../libpurple/protocols/silc/ops.c:1004 -#: ../libpurple/protocols/silc10/ops.c:1024 msgid "First Name" msgstr "প্রথম নাম" -#: ../libpurple/protocols/gg/gg.c:974 ../libpurple/protocols/gg/gg.c:1040 msgid "Birth Year" msgstr "জন্ম সাল" -#: ../libpurple/protocols/gg/gg.c:1022 ../libpurple/protocols/gg/gg.c:1091 -#: ../libpurple/protocols/oscar/oscar.c:4092 msgid "Unable to display the search results." msgstr "অনুসন্ধান ফলাফল প্রদর্শন করতে অক্ষম।" -#: ../libpurple/protocols/gg/gg.c:1082 msgid "Gadu-Gadu Public Directory" msgstr "গাদু-গাদু জনসাধারণ নির্দেশিকা" -#: ../libpurple/protocols/gg/gg.c:1083 msgid "Search results" msgstr "অনুসন্ধান ফলাফল" -#: ../libpurple/protocols/gg/gg.c:1122 msgid "No matching users found" msgstr "কোনো সমন্বয়কারী ব্যবহারকারী পাওয়া যায়নি।" -#: ../libpurple/protocols/gg/gg.c:1123 msgid "There are no users matching your search criteria." msgstr "আপনার অনুসন্ধানের শর্তাবলী সাথে মেলে এমন কোনো ব্যবহারকারী নেই।" -#: ../libpurple/protocols/gg/gg.c:1383 ../libpurple/protocols/gg/gg.c:1541 msgid "Unable to read socket" msgstr "সকেট পড়তে ব্যর্থ" -#: ../libpurple/protocols/gg/gg.c:1475 msgid "Buddy list downloaded" msgstr "বন্ধু তালিকা ডাউনলোড করা হয়েছে" -#: ../libpurple/protocols/gg/gg.c:1476 msgid "Your buddy list was downloaded from the server." msgstr "আপনার বন্ধু তালিকা সার্ভার থেকে ডাউনলোড করা হয়েছে।" -#: ../libpurple/protocols/gg/gg.c:1483 msgid "Buddy list uploaded" msgstr "বন্ধু তালিকা আপলোড করা হয়েছে" -#: ../libpurple/protocols/gg/gg.c:1484 msgid "Your buddy list was stored on the server." msgstr "আপনার বন্ধু তালিকাটি সার্ভারে সংরক্ষণ করা হয়েছিল।" -#: ../libpurple/protocols/gg/gg.c:1578 ../libpurple/protocols/gg/gg.c:1783 msgid "Connection failed." msgstr "সংযোগ ব্যর্থ।" -#: ../libpurple/protocols/gg/gg.c:1706 msgid "Add to chat" msgstr "আড্ডার যোগ দিন" -#: ../libpurple/protocols/gg/gg.c:1734 msgid "Chat _name:" msgstr "আড্ডার নাম (_n):" -#: ../libpurple/protocols/gg/gg.c:2079 msgid "Chat error" msgstr "আড্ডা ত্রুটি" -#: ../libpurple/protocols/gg/gg.c:2080 msgid "This chat name is already in use" msgstr "এই আড্ডা নামটি ইতোমধ্যে ব্যবহৃত হচ্ছে" -#: ../libpurple/protocols/gg/gg.c:2159 msgid "Not connected to the server." msgstr "সার্ভারের সাথে সংযুক্ত নয়।" -#: ../libpurple/protocols/gg/gg.c:2178 msgid "Find buddies..." msgstr "বন্ধু খুঁজুন..." -#: ../libpurple/protocols/gg/gg.c:2184 msgid "Change password..." msgstr "গুপ্তসঙ্কেত পরিবর্তন করুন..." -#: ../libpurple/protocols/gg/gg.c:2190 msgid "Upload buddylist to Server" msgstr "সার্ভারে বন্ধু তালিকা আপলোড করুন" -#: ../libpurple/protocols/gg/gg.c:2194 msgid "Download buddylist from Server" msgstr "সার্ভার থেকে বন্ধু তালিকা ডাউনলোড করুন" -#: ../libpurple/protocols/gg/gg.c:2198 msgid "Delete buddylist from Server" msgstr "সার্ভার থেকে বন্ধু তালিকা মুছে ফেলুন" -#: ../libpurple/protocols/gg/gg.c:2202 msgid "Save buddylist to file..." msgstr "ফাইলে বন্ধুর তালিকা সংরক্ষণ করুন..." @@ -4542,152 +3236,82 @@ msgstr "ফাইলে বন্ধুর তালিকা সংরক্ষ #. id #. name #. version -#: ../libpurple/protocols/gg/gg.c:2305 msgid "Gadu-Gadu Protocol Plugin" msgstr "Gadu-Gadu প্রটোকল প্লাগইন" #. summary -#: ../libpurple/protocols/gg/gg.c:2306 msgid "Polish popular IM" msgstr "জনপ্রিয় আইএম পরিমার্জন করুন" -#: ../libpurple/protocols/gg/gg.c:2354 msgid "Gadu-Gadu User" msgstr "গাদু-গাদু ব্যবহারকারী" -#: ../libpurple/protocols/irc/cmds.c:43 -#: ../libpurple/protocols/silc/silc.c:1890 -#: ../libpurple/protocols/silc10/silc.c:1609 #, c-format msgid "Unknown command: %s" msgstr "অজানা নির্দেশ: %s" -#: ../libpurple/protocols/irc/cmds.c:536 -#: ../libpurple/protocols/jabber/chat.c:617 -#: ../libpurple/protocols/silc/silc.c:1580 -#: ../libpurple/protocols/silc10/silc.c:1299 #, c-format msgid "current topic is: %s" msgstr "বর্তমান বিষয় হচ্ছে: %s" -#: ../libpurple/protocols/irc/cmds.c:540 -#: ../libpurple/protocols/jabber/chat.c:621 -#: ../libpurple/protocols/silc/silc.c:1584 -#: ../libpurple/protocols/silc10/silc.c:1303 msgid "No topic is set" msgstr "কোনো বিষয় নির্ধারণ করা হয়নি" -#: ../libpurple/protocols/irc/dcc_send.c:304 -#: ../libpurple/protocols/irc/dcc_send.c:345 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c: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 "ফাইল বিনিময় ব্যর্থ" -#: ../libpurple/protocols/irc/dcc_send.c:305 -#: ../libpurple/protocols/irc/dcc_send.c:346 msgid "Could not open a listening port." msgstr "শোনার কোনো পোর্ট খুলতে পারছে না।" -#: ../libpurple/protocols/irc/irc.c:77 msgid "Error displaying MOTD" msgstr "MOTD দেখানোর সময় ত্রুটি দেখা দিয়েছে" -#: ../libpurple/protocols/irc/irc.c:77 msgid "No MOTD available" msgstr "কোনো MOTD সহজলভ্য নয়" -#: ../libpurple/protocols/irc/irc.c:78 msgid "There is no MOTD associated with this connection." msgstr "এই সংযোগের সাথে সম্পর্কিত কোনো MOTD নেই।" -#: ../libpurple/protocols/irc/irc.c:81 #, c-format msgid "MOTD for %s" msgstr "%s এর জন্য MOTD" -#: ../libpurple/protocols/irc/irc.c:127 ../libpurple/protocols/irc/irc.c:167 -#: ../libpurple/protocols/irc/irc.c:645 ../libpurple/protocols/irc/irc.c:674 -#: ../libpurple/protocols/myspace/myspace.c:2060 msgid "Server has disconnected" msgstr "সার্ভার বিচ্ছিন্ন হয়েছে" -#: ../libpurple/protocols/irc/irc.c:258 msgid "View MOTD" msgstr "MOTD প্রদর্শন করুন" -#: ../libpurple/protocols/irc/irc.c:270 ../libpurple/protocols/silc/chat.c:33 -#: ../libpurple/protocols/silc10/chat.c:33 msgid "_Channel:" msgstr "চ্যানেল (_C):" -#: ../libpurple/protocols/irc/irc.c:276 -#: ../libpurple/protocols/jabber/chat.c:60 ../pidgin/gtkaccount.c:553 msgid "_Password:" msgstr "গুপ্তসংকেত (_P):" # tithi -#: ../libpurple/protocols/irc/irc.c:309 msgid "IRC nicks may not contain whitespace" msgstr "IRC এর ডাকনামসমূহ ফাঁকা স্থান ধারণ নাও করতে পারে" #. 1. connect to server #. connect to the server -#: ../libpurple/protocols/irc/irc.c:330 -#: ../libpurple/protocols/jabber/jabber.c:1423 -#: ../libpurple/protocols/msn/session.c:406 -#: ../libpurple/protocols/msnp9/session.c:368 -#: ../libpurple/protocols/myspace/myspace.c:2196 -#: ../libpurple/protocols/novell/novell.c:2199 -#: ../libpurple/protocols/oscar/oscar.c:1449 -#: ../libpurple/protocols/sametime/sametime.c:3784 -#: ../libpurple/protocols/simple/simple.c:1957 -#: ../libpurple/protocols/yahoo/yahoo.c:3004 -#: ../libpurple/protocols/zephyr/zephyr.c:1588 ../pidgin/gtkstatusbox.c:693 msgid "Connecting" msgstr "সংযোগ করছে" -#: ../libpurple/protocols/irc/irc.c:340 -#: ../libpurple/protocols/jabber/jabber.c:755 -#: ../libpurple/protocols/jabber/jabber.c:1223 msgid "SSL support unavailable" msgstr "এসএসএল সমর্থন অপ্রাপ্য" -#: ../libpurple/protocols/irc/irc.c:353 -#: ../libpurple/protocols/myspace/myspace.c:2214 -#: ../libpurple/protocols/simple/simple.c:485 -#: ../libpurple/protocols/simple/simple.c:1860 msgid "Couldn't create socket" msgstr "সকেট তৈরী করা যাচ্ছে না" -#: ../libpurple/protocols/irc/irc.c:451 -#: ../libpurple/protocols/oscar/oscar.c:1445 msgid "Couldn't connect to host" msgstr "হোস্টের সাথে সংযুক্ত করা যাচ্ছে না" -#: ../libpurple/protocols/irc/irc.c:640 ../libpurple/protocols/irc/irc.c:669 -#: ../libpurple/protocols/myspace/myspace.c:2054 msgid "Read error" msgstr "পড়ায় ত্রুটি" -#: ../libpurple/protocols/irc/irc.c:810 -#: ../libpurple/protocols/silc/chat.c:1401 -#: ../libpurple/protocols/silc10/chat.c:1426 -#: ../libpurple/protocols/yahoo/yahoochat.c:1508 msgid "Users" msgstr "ব্যবহারকারীরা" -#: ../libpurple/protocols/irc/irc.c:813 -#: ../libpurple/protocols/sametime/sametime.c:3431 -#: ../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 "বিষয়" @@ -4699,54 +3323,29 @@ msgstr "বিষয়" #. *< id #. *< name #. *< version -#: ../libpurple/protocols/irc/irc.c:952 msgid "IRC Protocol Plugin" msgstr "আইআরসি প্রটোকল প্লাগইন" # tithi #. * summary -#: ../libpurple/protocols/irc/irc.c:953 msgid "The IRC Protocol Plugin that Sucks Less" msgstr "IRC প্রটোকল প্লাগইন যা কম সমস্য়া তৈরি করে" #. host to connect to -#: ../libpurple/protocols/irc/irc.c:978 ../libpurple/protocols/irc/msgs.c:377 -#: ../libpurple/protocols/msn/msn.c:2622 -#: ../libpurple/protocols/msnp9/msn.c:2326 -#: ../libpurple/protocols/oscar/oscar.c:6857 -#: ../libpurple/protocols/sametime/sametime.c:5787 -#: ../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:2141 -#: ../libpurple/protocols/toc/toc.c:2327 msgid "Server" msgstr "সার্ভার" #. port to connect to -#: ../libpurple/protocols/irc/irc.c:981 ../libpurple/protocols/msn/msn.c:2627 -#: ../libpurple/protocols/msnp9/msn.c:2331 -#: ../libpurple/protocols/oscar/oscar.c:6860 -#: ../libpurple/protocols/sametime/sametime.c:5792 -#: ../libpurple/protocols/silc/silc.c:2181 -#: ../libpurple/protocols/silc10/silc.c:1904 -#: ../libpurple/protocols/toc/toc.c:2331 msgid "Port" msgstr "পোর্ট" -#: ../libpurple/protocols/irc/irc.c:984 msgid "Encodings" msgstr "সঙ্কেতায়নসমূহ" # tithi -#: ../libpurple/protocols/irc/irc.c:987 msgid "Auto-detect incoming UTF-8" msgstr "আসন্ন UTF-8 স্বয়ং-শনাক্ত করে" -#: ../libpurple/protocols/irc/irc.c:993 ../libpurple/protocols/irc/msgs.c:371 -#: ../libpurple/protocols/silc/silc.c:1244 -#: ../libpurple/protocols/silc10/silc.c:945 msgid "Real name" msgstr "আসল নাম" @@ -4754,175 +3353,132 @@ msgstr "আসল নাম" #. option = purple_account_option_string_new(_("Quit message"), "quitmsg", IRC_DEFAULT_QUIT); #. prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); #. -#: ../libpurple/protocols/irc/irc.c:1001 msgid "Use SSL" msgstr "SSL ব্যবহার করুন" -#: ../libpurple/protocols/irc/msgs.c:196 msgid "Bad mode" msgstr "খারাপ মেজাজ" # tithi -#: ../libpurple/protocols/irc/msgs.c:219 #, c-format msgid "Ban on %s by %s, set %s ago" msgstr "%2s দ্বারা %1s এ বাধা, %3s আগে নির্ধারণ করুন" -#: ../libpurple/protocols/irc/msgs.c:223 #, c-format msgid "Ban on %s" msgstr "%s এ বাধা দিচ্ছে" -#: ../libpurple/protocols/irc/msgs.c:238 msgid "End of ban list" msgstr "নিষিদ্ধ তালিকার শেষে" -#: ../libpurple/protocols/irc/msgs.c:252 #, c-format msgid "You are banned from %s." msgstr "আপনি %s থেকে নিষিদ্ধ।" -#: ../libpurple/protocols/irc/msgs.c:253 msgid "Banned" msgstr "নিষিদ্ধ করা হয়েছে" -#: ../libpurple/protocols/irc/msgs.c:270 #, c-format msgid "Cannot ban %s: banlist is full" msgstr "%s নিষিদ্ধ করা যাচ্ছে না: নিষিদ্ধ তালিকা পূর্ণ" -#: ../libpurple/protocols/irc/msgs.c:355 msgid " <i>(ircop)</i>" msgstr "<i>(ircop)</i>" -#: ../libpurple/protocols/irc/msgs.c:356 msgid " <i>(identified)</i>" msgstr "<i>(শনাক্তকৃত)</i>" -#: ../libpurple/protocols/irc/msgs.c:357 -#: ../libpurple/protocols/oscar/oscar.c:3906 -#: ../libpurple/protocols/silc/ops.c:1435 -#: ../libpurple/protocols/silc10/ops.c:1414 msgid "Nick" msgstr "ডাকনাম" # tithi -#: ../libpurple/protocols/irc/msgs.c:383 -#: ../libpurple/protocols/silc/ops.c:1281 -#: ../libpurple/protocols/silc10/ops.c:1272 msgid "Currently on" msgstr "বর্তমানে" -#: ../libpurple/protocols/irc/msgs.c:388 msgid "Idle for" msgstr "এর জন্য অলস" -#: ../libpurple/protocols/irc/msgs.c:391 msgid "Online since" msgstr "যখন থেকে অনলাইন " -#: ../libpurple/protocols/irc/msgs.c:395 msgid "<b>Defining adjective:</b>" msgstr "<b>বিশেষন নির্ধারন করছে:</b>" # tithi -#: ../libpurple/protocols/irc/msgs.c:395 msgid "Glorious" msgstr "চমৎকার" -#: ../libpurple/protocols/irc/msgs.c:479 #, c-format msgid "%s has changed the topic to: %s" msgstr "%1s বিষয় পরিবর্তন করছে: %2s" -#: ../libpurple/protocols/irc/msgs.c:481 #, c-format msgid "%s has cleared the topic." msgstr "%s বিষয়টি পরিস্কার করেছে।" -#: ../libpurple/protocols/irc/msgs.c:489 #, c-format msgid "The topic for %s is: %s" msgstr "%1s এর জন্য বিষয় হলো: %2s" -#: ../libpurple/protocols/irc/msgs.c:507 #, c-format msgid "Unknown message '%s'" msgstr "অজানা বার্তা '%s'" -#: ../libpurple/protocols/irc/msgs.c:508 msgid "Unknown message" msgstr "অজানা বার্তা" -#: ../libpurple/protocols/irc/msgs.c:508 msgid "The IRC server received a message it did not understand." msgstr "IRC সার্ভার এমন একটি বার্তা পেয়েছে যা এটা বুঝতে পারেনি।" -#: ../libpurple/protocols/irc/msgs.c:529 #, c-format msgid "Users on %s: %s" msgstr "%1s এর ব্যবহারকারী: %2s" -#: ../libpurple/protocols/irc/msgs.c:636 msgid "Time Response" msgstr "সাড়া দেওয়ার সময়" -#: ../libpurple/protocols/irc/msgs.c:637 msgid "The IRC server's local time is:" msgstr "আইআরসি সার্ভারের স্থানীয় সময় হলো:" -#: ../libpurple/protocols/irc/msgs.c:648 msgid "No such channel" msgstr "এমন কোনো চ্যানেল নেই" #. does this happen? -#: ../libpurple/protocols/irc/msgs.c:659 msgid "no such channel" msgstr "এমন কোনো চ্যানেল নেই" -#: ../libpurple/protocols/irc/msgs.c:662 msgid "User is not logged in" msgstr "ব্যবহারকারী লগইন অবস্থায় নেই" -#: ../libpurple/protocols/irc/msgs.c:667 msgid "No such nick or channel" msgstr "এমন কোনো ডাকনাম বা চ্যানেল নেই" -#: ../libpurple/protocols/irc/msgs.c:687 msgid "Could not send" msgstr "পাঠানো সম্ভব হয়নি" -#: ../libpurple/protocols/irc/msgs.c:743 #, c-format msgid "Joining %s requires an invitation." msgstr "%s এর অংশগ্রহনের জন্যে আমন্ত্রণ প্রয়োজন" -#: ../libpurple/protocols/irc/msgs.c:744 msgid "Invitation only" msgstr "শুধুমাত্র আমন্ত্রণ" -#: ../libpurple/protocols/irc/msgs.c:860 #, c-format msgid "You have been kicked by %s: (%s)" msgstr "%1s দ্বারা আপনাকে বের করে দেয়া হয়েছে: (%2s)" #. Remove user from channel -#: ../libpurple/protocols/irc/msgs.c:865 ../libpurple/protocols/silc/ops.c:714 -#: ../libpurple/protocols/silc10/ops.c:720 #, c-format msgid "Kicked by %s (%s)" msgstr "%1s (%2s) দ্বারা বহিষ্কৃত" -#: ../libpurple/protocols/irc/msgs.c:888 #, c-format msgid "mode (%s %s) by %s" msgstr "%s দ্বারা (%s %s) পরিমন্ডল" -#: ../libpurple/protocols/irc/msgs.c:978 ../libpurple/protocols/irc/msgs.c:979 msgid "Invalid nickname" msgstr "অবৈধ ডাকনাম" -#: ../libpurple/protocols/irc/msgs.c:980 msgid "" "Your selected nickname was rejected by the server. It probably contains " "invalid characters." @@ -4930,7 +3486,6 @@ msgstr "" "আপনার নির্বাচিত ডাকনামটি সার্ভার দ্বারা বাতিল করা হয়েছে। এটি সম্ভবত অবৈধ বর্ণচিহ্ন " "ধারণ করে।" -#: ../libpurple/protocols/irc/msgs.c:985 msgid "" "Your selected account name was rejected by the server. It probably contains " "invalid characters." @@ -4938,54 +3493,41 @@ msgstr "" "আপনার নির্বাচিত একাউন্ট নাম সার্ভার থেকে বাতিল করা হয়েছে। এটি সম্ভবত অবৈধ " "বর্ণচিহ্ন ধারণ করে।" -#: ../libpurple/protocols/irc/msgs.c:1033 msgid "Cannot change nick" msgstr "ডাকনাম পরিবর্তন করতে পারে না" -#: ../libpurple/protocols/irc/msgs.c:1033 msgid "Could not change nick" msgstr "ডাকনাম পরিবর্তন করতে পারেনি" -#: ../libpurple/protocols/irc/msgs.c:1058 #, c-format msgid "You have parted the channel%s%s" msgstr "আপনি চ্যানেল%s%s বিভক্ত করেছেন" -#: ../libpurple/protocols/irc/msgs.c:1102 msgid "Error: invalid PONG from server" msgstr "ত্রুটি: সার্ভার থেকে অবৈধ PONG" -#: ../libpurple/protocols/irc/msgs.c:1104 #, c-format msgid "PING reply -- Lag: %lu seconds" msgstr "PING উত্তর -- পরে: %lu সেকেন্ড" -#: ../libpurple/protocols/irc/msgs.c:1195 #, c-format msgid "Cannot join %s: Registration is required." msgstr "%s যুক্ত করতে পারে না: নিবন্ধন আবশ্যক।" -#: ../libpurple/protocols/irc/msgs.c:1196 -#: ../libpurple/protocols/silc/ops.c:1106 -#: ../libpurple/protocols/silc10/ops.c:1128 msgid "Cannot join channel" msgstr "চ্যানেলে অংশগ্রহণ করতে পারে না" -#: ../libpurple/protocols/irc/msgs.c:1230 msgid "Nick or channel is temporarily unavailable." msgstr "ডাকনাম বা চ্যানেল সাময়িকভাবে অপ্রাপ্য" -#: ../libpurple/protocols/irc/msgs.c:1242 #, c-format msgid "Wallops from %s" msgstr "%s থেকে Wallop" # tithi -#: ../libpurple/protocols/irc/parse.c:124 msgid "action <action to perform>: Perform an action." msgstr "কর্ম &1lt;&2gt সম্পন্ন করার কাজ;: একটি কাজ সম্পন্ন করেন।" -#: ../libpurple/protocols/irc/parse.c:125 msgid "" "away [message]: Set an away message, or use no message to return from being " "away." @@ -4994,15 +3536,12 @@ msgstr "" "অনুপস্থিত আবস্থা থেকে ফিরে আসুন।" # tithi -#: ../libpurple/protocols/irc/parse.c:126 msgid "ctcp <nick> <msg>: sends ctcp msg to nick." msgstr "ctcp <nick> <msg>: ডাকনামকে ctcp বার্তা পাঠায়।" -#: ../libpurple/protocols/irc/parse.c:127 msgid "chanserv: Send a command to chanserv" msgstr "chanserv: chanserv এ নির্দেশ পাঠান" -#: ../libpurple/protocols/irc/parse.c:128 msgid "" "deop <nick1> [nick2] ...: Remove channel operator status from " "someone. You must be a channel operator to do this." @@ -5010,7 +3549,6 @@ msgstr "" "deop &1lt;ডাকনাম১&2gt; [ডাকনাম২] ...: কারও কাছ থেকে চ্যনেল অপারেটর অবস্থা মুছে " "ফেলুন। এটি করতে আপনাকে অবশ্যই চ্যানেল পরিচালক হতে হবে।" -#: ../libpurple/protocols/irc/parse.c:129 msgid "" "devoice <nick1> [nick2] ...: Remove channel voice status from " "someone, preventing them from speaking if the channel is moderated (+m). You " @@ -5021,7 +3559,6 @@ msgstr "" "আপনাকে অবশ্যই চ্যানেল অপারেটর হতে হবে।" # tithi -#: ../libpurple/protocols/irc/parse.c:130 msgid "" "invite <nick> [room]: Invite someone to join you in the specified " "channel, or the current channel." @@ -5030,7 +3567,6 @@ msgstr "" "চ্যানেলে যুক্ত করাতে কাউকে আমন্ত্রন জানান।" # tithi -#: ../libpurple/protocols/irc/parse.c:131 msgid "" "j <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " "channels, optionally providing a channel key for each if needed." @@ -5039,7 +3575,6 @@ msgstr "" "ঐচ্ছিকভাবে একটি চ্যানেল কী প্রদান করে এক বা একাধিক চ্যানেল প্রবেশ করান।" # tithi -#: ../libpurple/protocols/irc/parse.c:132 msgid "" "join <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " "channels, optionally providing a channel key for each if needed." @@ -5048,7 +3583,6 @@ msgstr "" "প্রত্যেককে ঐচ্ছিকভাবে একটি চ্যানেল কী প্রদান করে এক বা একাধিক চ্যানেল প্রবেশ করান।" # tithi -#: ../libpurple/protocols/irc/parse.c:133 msgid "" "kick <nick> [message]: Remove someone from a channel. You must be a " "channel operator to do this." @@ -5056,7 +3590,6 @@ msgstr "" "মুছে ফেলা &1lt;ডাকনাম&2gt; [বার্তা]: একটি চ্যানেল থেকে কাউকে অপসারণ করুন। এটা " "করতে আপনাকে অবশ্যই চ্যানেলে অপারেটর হতে হবে।" -#: ../libpurple/protocols/irc/parse.c:134 msgid "" "list: Display a list of chat rooms on the network. <i>Warning, some servers " "may disconnect you upon doing this.</i>" @@ -5065,17 +3598,14 @@ msgstr "" "disconnect you upon doing this</i>" # tithi -#: ../libpurple/protocols/irc/parse.c:135 msgid "me <action to perform>: Perform an action." msgstr "আমাকে &1lt;সম্পাদনার কাজ&2gt;: একটি কাজ সম্পাদন করুন।" # tithi -#: ../libpurple/protocols/irc/parse.c:136 msgid "memoserv: Send a command to memoserv" msgstr "স্মৃতি সার্ভার: স্মৃতি সার্ভারে একটি নির্দেশ পাঠান" # tithi -#: ../libpurple/protocols/irc/parse.c:137 msgid "" "mode <+|-><A-Za-z> <nick|channel>: Set or unset a channel " "or user mode." @@ -5084,7 +3614,6 @@ msgstr "" "ব্যবহারকারীর মোড নির্ধারন বা অনির্ধারণ করুন।" # tithi -#: ../libpurple/protocols/irc/parse.c:138 msgid "" "msg <nick> <message>: Send a private message to a user (as " "opposed to a channel)." @@ -5092,26 +3621,20 @@ msgstr "" "বার্তা &1lt;ডাকনাম&2gt; &3lt;বার্তা&4gt;: একজন ব্যবহারকারীকে একটি ব্যক্তিগত " "বার্তা পাঠান (একটি চ্যানেলের বিপরীতে)।" -#: ../libpurple/protocols/irc/parse.c:139 msgid "names [channel]: List the users currently in a channel." msgstr "নামসমূহ [চ্যানেল১]: চ্যানেলে বর্তমান ব্যবহারকারীদের তালিকা করুন।" -#: ../libpurple/protocols/irc/parse.c:140 -#: ../libpurple/protocols/jabber/jabber.c:2543 msgid "nick <new nickname>: Change your nickname." msgstr "ডাকনাম &1lt;নতুন ডাকনাম&2gt;: আপনার ডাকনাম পরিবর্তন করুন।" # tithi -#: ../libpurple/protocols/irc/parse.c:141 msgid "nickserv: Send a command to nickserv" msgstr "ডাকনাম-সার্ভার: ডাকনাম-সার্ভারে একটি নির্দেশ পাঠান" -#: ../libpurple/protocols/irc/parse.c:142 msgid "notice <target<: Send a notice to a user or channel." msgstr "ঘোষণা &1lt;লক্ষ্য&2lt;: ব্যবহারকারীর কাছে বা চ্যানেলে একটি ঘোষণা পাঠান।" # tithi -#: ../libpurple/protocols/irc/parse.c:143 msgid "" "op <nick1> [nick2] ...: Grant channel operator status to someone. You " "must be a channel operator to do this." @@ -5120,7 +3643,6 @@ msgstr "" "মেমে নিন। এটা করতে আপনাকে অবশ্যই একজন চ্যানেল অপারেটর হতে হবে।" # tithi -#: ../libpurple/protocols/irc/parse.c:144 msgid "" "operwall <message>: If you don't know what this is, you probably " "can't use it." @@ -5129,12 +3651,10 @@ msgstr "" "ব্যবহার করতে পারবেন না।" # tithi -#: ../libpurple/protocols/irc/parse.c:145 msgid "operserv: Send a command to operserv" msgstr "অপারেটর-সার্ভার: অপারেটর-সার্ভারে একটি নির্দেশ পাঠান" # tithi -#: ../libpurple/protocols/irc/parse.c:146 msgid "" "part [room] [message]: Leave the current channel, or a specified channel, " "with an optional message." @@ -5143,7 +3663,6 @@ msgstr "" "ত্যাগ করুন।" # tithi -#: ../libpurple/protocols/irc/parse.c:147 msgid "" "ping [nick]: Asks how much lag a user (or the server if no user specified) " "has." @@ -5152,7 +3671,6 @@ msgstr "" "ব্যবহারকারী উল্লেখিত না থাকে) করুন।" # tithi -#: ../libpurple/protocols/irc/parse.c:148 msgid "" "query <nick> <message>: Send a private message to a user (as " "opposed to a channel)." @@ -5160,16 +3678,13 @@ msgstr "" "জিজ্ঞাসা &1lt;ডাকনাম&2gt; &3lt;বার্তা&4gt;: একজন ব্যবহারকারীকে একটি ব্যক্তিগত " "বার্তা পাঠান (একটি চ্যানেলের বিপরীত হিসেবে)।" -#: ../libpurple/protocols/irc/parse.c:149 msgid "quit [message]: Disconnect from the server, with an optional message." msgstr "প্রস্থান করুন [বার্তা]: একটি ঐচ্ছিক বার্তাসহ, সার্ভারের থেকে বিচ্ছিন্ন করুন।" -#: ../libpurple/protocols/irc/parse.c:150 msgid "quote [...]: Send a raw command to the server." msgstr "উক্তি [...]: সার্ভারে একটি অরুপান্তরিত বার্তা পাঠান" # tithi -#: ../libpurple/protocols/irc/parse.c:151 msgid "" "remove <nick> [message]: Remove someone from a room. You must be a " "channel operator to do this." @@ -5177,28 +3692,23 @@ msgstr "" "অপসারণ করুন &1lt;ডাকনাম&2gt; [বার্তা]: একটি রুম থেকে কোনও একজন অপসারণ করুন। এটা " "করতে আপনাকে অবশ্যই একজন চ্যানেল অপারেটর হতে হবে।" -#: ../libpurple/protocols/irc/parse.c:152 msgid "time: Displays the current local time at the IRC server." msgstr "সময়: আইআরসি সার্ভারে বর্তমান স্থানীয় সময় প্রদর্শন করে।" -#: ../libpurple/protocols/irc/parse.c:153 msgid "topic [new topic]: View or change the channel topic." msgstr "বিষয়বস্তু [নতুন বিষয়বস্তু]: চ্যানেলের বিষয়বস্তু প্রদর্শন বা পরিবর্তন করুন।" # tithi -#: ../libpurple/protocols/irc/parse.c:154 msgid "umode <+|-><A-Za-z>: Set or unset a user mode." msgstr "" "ব্যবহারকারী মোড &1lt;+|-&2gt;&3lt;A-Za-z&4gt;: ব্যবহারকারীr মোড নির্ধারণ বা " "অনির্ধারণ করুন।" # tithi -#: ../libpurple/protocols/irc/parse.c:155 msgid "version [nick]: send CTCP VERSION request to a user" msgstr "সংস্করণ [ডাকনাম]: একজন ব্যবহারকারীকে CTCP সংস্করণ অনুরোধ পাঠান" # tithi -#: ../libpurple/protocols/irc/parse.c:156 msgid "" "voice <nick1> [nick2] ...: Grant channel voice status to someone. You " "must be a channel operator to do this." @@ -5207,7 +3717,6 @@ msgstr "" "মেনে নিন। এটা করতে আপনাকে অবশ্যই চ্যানেল অপারেটর হতে হবে।" # tithi -#: ../libpurple/protocols/irc/parse.c:157 msgid "" "wallops <message>: If you don't know what this is, you probably can't " "use it." @@ -5216,69 +3725,47 @@ msgstr "" "করতে পারবেন না।" # tithi -#: ../libpurple/protocols/irc/parse.c:158 msgid "whois [server] <nick>: Get information on a user." msgstr "কে [সার্ভার] &1lt;ডাকনাম&2gt;: একজন ব্যবহারকারীর তথ্য গ্রহণ করুন।" # tithi -#: ../libpurple/protocols/irc/parse.c:159 msgid "whowas <nick>: Get information on a user that has logged off." msgstr "কে ছিল&1lt;ডাকনাম&2gt;: বন্ধ রয়েছে এমন একজন ব্যবহারকারীর তথ্য গ্রহণ করুন।" -#: ../libpurple/protocols/irc/parse.c:544 #, c-format msgid "Reply time from %s: %lu seconds" msgstr "%1s হতে উত্তর দেয়ার সময়: %2lu সেকেন্ড" -#: ../libpurple/protocols/irc/parse.c:545 msgid "PONG" msgstr "PONG" -#: ../libpurple/protocols/irc/parse.c:545 msgid "CTCP PING reply" msgstr "CTCP PING উত্তর" -#: ../libpurple/protocols/irc/parse.c:657 -#: ../libpurple/protocols/irc/parse.c:664 ../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 "বিচ্ছিন্ন।" -#: ../libpurple/protocols/jabber/adhoccommands.c:143 -#: ../libpurple/protocols/jabber/jabber.c:816 -#: ../libpurple/protocols/jabber/jabber.c:846 -#: ../libpurple/protocols/jabber/jabber.c:2127 msgid "Unknown Error" msgstr "অজানা ত্রুটি" -#: ../libpurple/protocols/jabber/adhoccommands.c:145 -#: ../libpurple/protocols/jabber/adhoccommands.c:146 msgid "Ad-Hoc Command Failed" msgstr "এড-হক নির্দেশ ব্যর্থ" -#: ../libpurple/protocols/jabber/adhoccommands.c:182 msgid "execute" msgstr "কার্যকর করুন" # tithi -#: ../libpurple/protocols/jabber/auth.c:55 msgid "Server requires TLS/SSL for login. No TLS/SSL support found." msgstr "" "সার্ভারের লগইন করার জন্য TSL/SSL আবশ্যক, কোনো TLS/SSL সমর্থন খুঁজে পাওয়া যায়নি।" # tithi -#: ../libpurple/protocols/jabber/auth.c:60 msgid "You require encryption, but no TLS/SSL support found." msgstr "আপনার এনক্রিপশন প্রয়োজন, কিন্তু কোনো TLS/SSL সমর্থন খুঁজে পাওয়া যায়নি।" -#: ../libpurple/protocols/jabber/auth.c:125 msgid "Server requires plaintext authentication over an unencrypted stream" msgstr "একটি এনক্রিপশনবিহীন স্ট্রীমে সার্ভারের সরল-পাঠ প্রমাণীকরণ প্রয়োজন" -#: ../libpurple/protocols/jabber/auth.c:328 -#: ../libpurple/protocols/jabber/auth.c:548 -#: ../libpurple/protocols/jabber/auth.c:667 #, c-format msgid "" "%s requires plaintext authentication over an unencrypted connection. Allow " @@ -5287,141 +3774,74 @@ msgstr "" "একটি এনক্রিপশনবিহীন সংযোগে %s এর সরল-পাঠ প্রমাণীকরণ প্রয়োজন। এটি অনুমোদন করুন এবং " "প্রমাণীকরণ কি অব্যাহত রাখতে চান?" -#: ../libpurple/protocols/jabber/auth.c:330 -#: ../libpurple/protocols/jabber/auth.c:331 -#: ../libpurple/protocols/jabber/auth.c:550 -#: ../libpurple/protocols/jabber/auth.c:551 -#: ../libpurple/protocols/jabber/auth.c:669 -#: ../libpurple/protocols/jabber/auth.c:670 msgid "Plaintext Authentication" msgstr "সরল-পাঠ প্রমাণীকরণ" -#: ../libpurple/protocols/jabber/auth.c:493 -#: ../libpurple/protocols/jabber/auth.c:606 -#: ../libpurple/protocols/jabber/auth.c:851 -#: ../libpurple/protocols/jabber/auth.c:1003 -#: ../libpurple/protocols/jabber/auth.c:1030 -#: ../libpurple/protocols/jabber/auth.c:1076 -#: ../libpurple/protocols/jabber/jabber.c:131 msgid "Invalid response from server." msgstr "সার্ভার থেকে অবৈধ সাড়া।" -#: ../libpurple/protocols/jabber/auth.c:564 -#: ../libpurple/protocols/jabber/auth.c:683 msgid "Server does not use any supported authentication method" msgstr "সার্ভার কোনো সমর্থিত প্রমাণীকরণ প্রক্রিয়া ব্যবহার করে না।" -#: ../libpurple/protocols/jabber/auth.c:874 -#: ../libpurple/protocols/jabber/auth.c:900 msgid "Invalid challenge from server" msgstr "সার্ভার থেকে অবৈধ চ্যালেঞ্জ" -#: ../libpurple/protocols/jabber/auth.c:976 msgid "SASL error" msgstr "SASL ত্রুটি" -#: ../libpurple/protocols/jabber/buddy.c:311 -#: ../libpurple/protocols/jabber/buddy.c:1241 -#: ../libpurple/protocols/sametime/sametime.c:4190 -#: ../libpurple/protocols/silc/ops.c:1000 -#: ../libpurple/protocols/silc10/ops.c:1020 msgid "Full Name" msgstr "পুরো নাম" -#: ../libpurple/protocols/jabber/buddy.c:312 -#: ../libpurple/protocols/jabber/buddy.c:1252 -#: ../libpurple/protocols/silc/ops.c:1012 -#: ../libpurple/protocols/silc10/ops.c:1032 msgid "Family Name" msgstr "পারিবারিক নাম" -#: ../libpurple/protocols/jabber/buddy.c:313 -#: ../libpurple/protocols/jabber/buddy.c:1254 msgid "Given Name" msgstr "প্রদত্ত নাম" -#: ../libpurple/protocols/jabber/buddy.c:315 -#: ../libpurple/protocols/jabber/jabber.c:1115 msgid "URL" msgstr "URL" -#: ../libpurple/protocols/jabber/buddy.c:316 -#: ../libpurple/protocols/jabber/buddy.c:1298 msgid "Street Address" msgstr "রাস্তার ঠিকানা" -#: ../libpurple/protocols/jabber/buddy.c:317 -#: ../libpurple/protocols/jabber/buddy.c:1296 msgid "Extended Address" msgstr "বর্ধিত ঠিকানা" -#: ../libpurple/protocols/jabber/buddy.c:318 -#: ../libpurple/protocols/jabber/buddy.c:1300 msgid "Locality" msgstr "এলাকা" -#: ../libpurple/protocols/jabber/buddy.c:319 -#: ../libpurple/protocols/jabber/buddy.c:1302 msgid "Region" msgstr "এলাকা" -#: ../libpurple/protocols/jabber/buddy.c:320 -#: ../libpurple/protocols/jabber/buddy.c:1304 msgid "Postal Code" msgstr "পোষ্টাল কোড" -#: ../libpurple/protocols/jabber/buddy.c:321 -#: ../libpurple/protocols/jabber/buddy.c:1307 -#: ../libpurple/protocols/silc/silc.c:1250 -#: ../libpurple/protocols/silc10/silc.c:951 msgid "Country" msgstr "দেশ" #. lots of clients (including purple) do this, but it's #. * out of spec -#: ../libpurple/protocols/jabber/buddy.c:322 -#: ../libpurple/protocols/jabber/buddy.c:1321 -#: ../libpurple/protocols/jabber/buddy.c:1327 msgid "Telephone" msgstr "টেলিফোন" -#: ../libpurple/protocols/jabber/buddy.c:324 -#: ../libpurple/protocols/jabber/buddy.c:1368 msgid "Organization Name" msgstr "সংগঠনের নাম" -#: ../libpurple/protocols/jabber/buddy.c:325 -#: ../libpurple/protocols/jabber/buddy.c:1370 msgid "Organization Unit" msgstr "সংগঠন একক" -#: ../libpurple/protocols/jabber/buddy.c:327 -#: ../libpurple/protocols/jabber/buddy.c:1377 msgid "Role" msgstr "ভূমিকা" -#: ../libpurple/protocols/jabber/buddy.c:328 -#: ../libpurple/protocols/jabber/buddy.c:1270 -#: ../libpurple/protocols/msn/msn.c:2092 -#: ../libpurple/protocols/msnp9/msn.c:1798 -#: ../libpurple/protocols/oscar/oscar.c:3955 msgid "Birthday" msgstr "জন্মদিন" -#: ../libpurple/protocols/jabber/buddy.c:329 -#: ../libpurple/protocols/jabber/buddy.c:1379 -#: ../libpurple/protocols/jabber/chat.c:802 -#: ../libpurple/protocols/jabber/usermood.c:190 ../pidgin/gtkblist.c:3540 -#: ../pidgin/gtkplugin.c:584 ../pidgin/gtkprefs.c:688 msgid "Description" msgstr "বিবরণ" -#: ../libpurple/protocols/jabber/buddy.c:739 -#: ../libpurple/protocols/jabber/buddy.c:740 msgid "Edit XMPP vCard" msgstr "XMPP vCard সম্পাদনা করুন" -#: ../libpurple/protocols/jabber/buddy.c:741 msgid "" "All items below are optional. Enter only the information with which you feel " "comfortable." @@ -5429,364 +3849,226 @@ msgstr "" "নিচের সব বিষয়গুলো ঐচ্ছিক। আপনি যে তথ্য প্রবেশ করাতে স্বাচ্ছন্দবোধ করেন শুধুমাত্র তা " "প্রবেশ করান।" -#: ../libpurple/protocols/jabber/buddy.c:797 -#: ../libpurple/protocols/jabber/buddy.c:966 msgid "Client" msgstr "ক্লায়েন্ট" # tithi -#: ../libpurple/protocols/jabber/buddy.c:801 -#: ../libpurple/protocols/jabber/buddy.c:970 msgid "Operating System" msgstr "অপারেটিং সিস্টেম" # tithi -#: ../libpurple/protocols/jabber/buddy.c:841 -#: ../libpurple/protocols/jabber/buddy.c:1011 msgid "Last Activity" msgstr "শেষ সক্রিয়তা" -#: ../libpurple/protocols/jabber/buddy.c:843 -#: ../libpurple/protocols/jabber/buddy.c:1013 msgid "Service Discovery Info" msgstr "সেবা আবিষ্কারের তথ্য" # tithi -#: ../libpurple/protocols/jabber/buddy.c:845 -#: ../libpurple/protocols/jabber/buddy.c:1015 msgid "Service Discovery Items" msgstr "সেবা আবিষ্কারের বিষয়োপকরনসমূহ" -#: ../libpurple/protocols/jabber/buddy.c:847 -#: ../libpurple/protocols/jabber/buddy.c:1017 msgid "Extended Stanza Addressing" msgstr "বর্ধিত স্ট্যানজা উদ্দেশ করছে" -#: ../libpurple/protocols/jabber/buddy.c:849 -#: ../libpurple/protocols/jabber/buddy.c:1019 msgid "Multi-User Chat" msgstr "একাধিক-ব্যবহারকারী সম্বলিত আড্ডা" -#: ../libpurple/protocols/jabber/buddy.c:851 -#: ../libpurple/protocols/jabber/buddy.c:1021 msgid "Multi-User Chat Extended Presence Information" msgstr "একাধিক-ব্যবহারকারীর বর্ধিত উপস্থিতি তথ্য" # tithi -#: ../libpurple/protocols/jabber/buddy.c:853 -#: ../libpurple/protocols/jabber/buddy.c:1023 msgid "In-Band Bytestreams" msgstr "In-Band বাইট-প্রবাহ" -#: ../libpurple/protocols/jabber/buddy.c:855 -#: ../libpurple/protocols/jabber/buddy.c:1025 msgid "Ad-Hoc Commands" msgstr "Ad-Hoc নির্দেশসমূহ" # tithi -#: ../libpurple/protocols/jabber/buddy.c:857 -#: ../libpurple/protocols/jabber/buddy.c:1027 msgid "PubSub Service" msgstr "PubSub সেবা" # tithi -#: ../libpurple/protocols/jabber/buddy.c:859 -#: ../libpurple/protocols/jabber/buddy.c:1029 msgid "SOCKS5 Bytestreams" msgstr "SOCKS5 বাইট-প্রবাহ" # tithi -#: ../libpurple/protocols/jabber/buddy.c:861 -#: ../libpurple/protocols/jabber/buddy.c:1031 msgid "Out of Band Data" msgstr "ব্যান্ড তথ্যের বাইরে" -#: ../libpurple/protocols/jabber/buddy.c:863 -#: ../libpurple/protocols/jabber/buddy.c:1033 msgid "XHTML-IM" msgstr "XHTML-IM" -#: ../libpurple/protocols/jabber/buddy.c:865 -#: ../libpurple/protocols/jabber/buddy.c:1035 msgid "In-Band Registration" msgstr "ইন ব্যান্ড নিবন্ধন" -#: ../libpurple/protocols/jabber/buddy.c:867 -#: ../libpurple/protocols/jabber/buddy.c:1037 msgid "User Location" msgstr "ব্যবহারকারীর অবস্থান" # fix me tithi -#: ../libpurple/protocols/jabber/buddy.c:869 -#: ../libpurple/protocols/jabber/buddy.c:1039 msgid "User Avatar" msgstr "ব্যবহারকারী অ্যাভাটার" -#: ../libpurple/protocols/jabber/buddy.c:871 -#: ../libpurple/protocols/jabber/buddy.c:1041 msgid "Chat State Notifications" msgstr "আড্ডার অবস্থার প্রজ্ঞাপন" -#: ../libpurple/protocols/jabber/buddy.c:873 -#: ../libpurple/protocols/jabber/buddy.c:1043 msgid "Software Version" msgstr "সফটওয়্যায় সংস্করণ" # fix me tithi -#: ../libpurple/protocols/jabber/buddy.c:875 -#: ../libpurple/protocols/jabber/buddy.c:1045 msgid "Stream Initiation" msgstr "প্রবাহ শুরু করুন" -#: ../libpurple/protocols/jabber/buddy.c:877 -#: ../libpurple/protocols/jabber/buddy.c:1047 -#: ../libpurple/protocols/sametime/sametime.c:3292 msgid "File Transfer" msgstr "ফাইল স্থানান্তর করুন" -#: ../libpurple/protocols/jabber/buddy.c:879 -#: ../libpurple/protocols/jabber/buddy.c:1049 msgid "User Mood" msgstr "ব্যবহাকারীরর পরিমন্ডল" -#: ../libpurple/protocols/jabber/buddy.c:881 -#: ../libpurple/protocols/jabber/buddy.c:1051 msgid "User Activity" msgstr "ব্যবহারকারীর কাজকর্ম" # tithi -#: ../libpurple/protocols/jabber/buddy.c:883 -#: ../libpurple/protocols/jabber/buddy.c:1053 msgid "Entity Capabilities" msgstr "সত্তার সক্ষমতা" # tithi -#: ../libpurple/protocols/jabber/buddy.c:885 -#: ../libpurple/protocols/jabber/buddy.c:1055 msgid "Encrypted Session Negotiations" msgstr "সঙ্কেতায়িত অধিবেশনের আলোচনা" -#: ../libpurple/protocols/jabber/buddy.c:887 -#: ../libpurple/protocols/jabber/buddy.c:1057 msgid "User Tune" msgstr "ব্যবহারকারীর সুর" # tithi -#: ../libpurple/protocols/jabber/buddy.c:889 -#: ../libpurple/protocols/jabber/buddy.c:1059 msgid "Roster Item Exchange" msgstr "রোস্টার বিষয়োপকরণ পরিবর্তন করুন" -#: ../libpurple/protocols/jabber/buddy.c:891 -#: ../libpurple/protocols/jabber/buddy.c:1061 msgid "Reachability Address" msgstr "পৌঁছানোর মতো ঠিকানা" -#: ../libpurple/protocols/jabber/buddy.c:893 -#: ../libpurple/protocols/jabber/buddy.c:1063 msgid "User Profile" msgstr "ব্যবহারকারীর প্রোফাইল" -#: ../libpurple/protocols/jabber/buddy.c:895 -#: ../libpurple/protocols/jabber/buddy.c:1065 msgid "Jingle" msgstr "ছন্দ" # tithi -#: ../libpurple/protocols/jabber/buddy.c:897 -#: ../libpurple/protocols/jabber/buddy.c:1067 msgid "Jingle Audio" msgstr "ছন্দময় অডিও" -#: ../libpurple/protocols/jabber/buddy.c:899 -#: ../libpurple/protocols/jabber/buddy.c:1069 msgid "User Nickname" msgstr "ব্যবহারকারীর ডাকনাম" # tithi -#: ../libpurple/protocols/jabber/buddy.c:901 -#: ../libpurple/protocols/jabber/buddy.c:1071 msgid "Jingle ICE UDP" msgstr "ছন্দময় ICE UDP" # tithi -#: ../libpurple/protocols/jabber/buddy.c:903 -#: ../libpurple/protocols/jabber/buddy.c:1073 msgid "Jingle ICE TCP" msgstr "ছন্দময় ICE TCP" # tithi -#: ../libpurple/protocols/jabber/buddy.c:905 -#: ../libpurple/protocols/jabber/buddy.c:1075 msgid "Jingle Raw UDP" msgstr "ছন্দময় Raw UDP" # tithi -#: ../libpurple/protocols/jabber/buddy.c:907 -#: ../libpurple/protocols/jabber/buddy.c:1077 msgid "Jingle Video" msgstr "ছন্দময় ভিডিও" # tithi -#: ../libpurple/protocols/jabber/buddy.c:909 -#: ../libpurple/protocols/jabber/buddy.c:1079 msgid "Jingle DTMF" msgstr "ছন্দময় DTMF" -#: ../libpurple/protocols/jabber/buddy.c:911 -#: ../libpurple/protocols/jabber/buddy.c:1081 msgid "Message Receipts" msgstr "বার্তা গ্রহণ করা হয়েছে" -#: ../libpurple/protocols/jabber/buddy.c:913 -#: ../libpurple/protocols/jabber/buddy.c:1083 msgid "Public Key Publishing" msgstr "সর্বসাধারণের কী প্রকাশ করা হচ্ছে" -#: ../libpurple/protocols/jabber/buddy.c:915 -#: ../libpurple/protocols/jabber/buddy.c:1085 msgid "User Chatting" msgstr "ব্যবহারকারী আড্ডা দিচ্ছে" -#: ../libpurple/protocols/jabber/buddy.c:917 -#: ../libpurple/protocols/jabber/buddy.c:1087 msgid "User Browsing" msgstr "ব্যবহাকারী ব্রাউজ করছে" -#: ../libpurple/protocols/jabber/buddy.c:919 -#: ../libpurple/protocols/jabber/buddy.c:1089 msgid "User Gaming" msgstr "ব্যবহারকারীরা খেলছে" -#: ../libpurple/protocols/jabber/buddy.c:921 -#: ../libpurple/protocols/jabber/buddy.c:1091 msgid "User Viewing" msgstr "ব্যবহারকারীরা দেখছে" -#: ../libpurple/protocols/jabber/buddy.c:923 -#: ../libpurple/protocols/jabber/buddy.c:1093 -#: ../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 "পিঙ্গ করুন" # tithi -#: ../libpurple/protocols/jabber/buddy.c:925 -#: ../libpurple/protocols/jabber/buddy.c:1095 msgid "Stanza Encryption" msgstr "স্ট্যানজা সঙ্কেতায়ন" # tithi -#: ../libpurple/protocols/jabber/buddy.c:927 -#: ../libpurple/protocols/jabber/buddy.c:1097 msgid "Entity Time" msgstr "সত্ত্বার সময়" # tithi -#: ../libpurple/protocols/jabber/buddy.c:929 -#: ../libpurple/protocols/jabber/buddy.c:1099 msgid "Delayed Delivery" msgstr "বিলম্বিত সরবরাহ" # tithi -#: ../libpurple/protocols/jabber/buddy.c:931 -#: ../libpurple/protocols/jabber/buddy.c:1101 msgid "Collaborative Data Objects" msgstr "সহযোগি উপাত্ত অবজেক্ট" # tithi -#: ../libpurple/protocols/jabber/buddy.c:933 -#: ../libpurple/protocols/jabber/buddy.c:1103 msgid "File Repository and Sharing" msgstr "ফাইল ভান্ডার এবং শেয়ার করছে" # tithi -#: ../libpurple/protocols/jabber/buddy.c:935 -#: ../libpurple/protocols/jabber/buddy.c:1105 msgid "STUN Service Discovery for Jingle" msgstr "ছন্দময়তার জন্য STUN সেবা আবিষ্কার" # tithi -#: ../libpurple/protocols/jabber/buddy.c:937 -#: ../libpurple/protocols/jabber/buddy.c:1107 msgid "Simplified Encrypted Session Negotiation" msgstr "সহজবোধ্য সঙ্কেতায়িত অধিবেশনের আলোচনা" # tithi -#: ../libpurple/protocols/jabber/buddy.c:939 -#: ../libpurple/protocols/jabber/buddy.c:1109 msgid "Hop Check" msgstr "হপ পরীক্ষা করুন" # tithi -#: ../libpurple/protocols/jabber/buddy.c:947 -#: ../libpurple/protocols/jabber/buddy.c:1117 -#: ../libpurple/protocols/oscar/oscar.c:3171 msgid "Capabilities" msgstr "সক্ষমতা" -#: ../libpurple/protocols/jabber/buddy.c:997 -#: ../libpurple/protocols/jabber/jabber.c:1795 -#: ../libpurple/protocols/jabber/jabber.c:1809 -#: ../libpurple/protocols/jabber/jabber.c:1823 -#: ../libpurple/protocols/jabber/jabber.c:1837 -#: ../libpurple/protocols/jabber/jabber.c:1851 msgid "Priority" msgstr "অগ্রাধিকার" -#: ../libpurple/protocols/jabber/buddy.c:1002 -#: ../libpurple/protocols/jabber/libxmpp.c:212 -#: ../libpurple/protocols/jabber/si.c:1088 msgid "Resource" msgstr "সম্পদ" -#: ../libpurple/protocols/jabber/buddy.c:1256 -#: ../libpurple/protocols/silc/ops.c:1008 -#: ../libpurple/protocols/silc10/ops.c:1028 msgid "Middle Name" msgstr "মধ্য নাম" -#: ../libpurple/protocols/jabber/buddy.c:1289 -#: ../libpurple/protocols/jabber/jabber.c:1095 -#: ../libpurple/protocols/oscar/oscar.c:3978 -#: ../libpurple/protocols/oscar/oscar.c:3986 -#: ../libpurple/protocols/qq/buddy_info.c:116 -#: ../libpurple/protocols/silc/ops.c:1044 -#: ../libpurple/protocols/silc10/ops.c:1064 msgid "Address" msgstr "ঠিকানা" -#: ../libpurple/protocols/jabber/buddy.c:1294 msgid "P.O. Box" msgstr "পি.ও. বক্স" -#: ../libpurple/protocols/jabber/buddy.c:1400 msgid "Photo" msgstr "ছবি" -#: ../libpurple/protocols/jabber/buddy.c:1400 msgid "Logo" msgstr "লোগো" # tithi -#: ../libpurple/protocols/jabber/buddy.c:1971 msgid "Un-hide From" msgstr "এর হতে উন্মোচিত" # tithi -#: ../libpurple/protocols/jabber/buddy.c:1975 msgid "Temporarily Hide From" msgstr "এর হতে সাময়িকভাবে লুকান" #. && NOT ME -#: ../libpurple/protocols/jabber/buddy.c:1983 msgid "Cancel Presence Notification" msgstr "উপস্থিতির প্রজ্ঞাপন বাতিল করুন" # tithi -#: ../libpurple/protocols/jabber/buddy.c:1990 msgid "(Re-)Request authorization" msgstr "(পুনরায়-)অনুরোধের প্রাপ্তাধিকার" @@ -5794,54 +4076,37 @@ msgstr "(পুনরায়-)অনুরোধের প্রাপ্ত #. if(NOT ME) #. shouldn't this just happen automatically when the buddy is #. removed? -#: ../libpurple/protocols/jabber/buddy.c:1999 msgid "Unsubscribe" msgstr "অংশীদারী ত্যাগ করুন" -#: ../libpurple/protocols/jabber/buddy.c:2014 msgid "Log In" msgstr "লগইন করুন" -#: ../libpurple/protocols/jabber/buddy.c:2018 msgid "Log Out" msgstr "লগ আউট করুন" -#: ../libpurple/protocols/jabber/buddy.c:2064 -#: ../libpurple/protocols/jabber/jabber.c:1808 msgid "Chatty" msgstr "আড্ডাবাজ" # tithi -#: ../libpurple/protocols/jabber/buddy.c:2068 msgid "Extended Away" msgstr "আরও বর্ধিত করুন" -#: ../libpurple/protocols/jabber/buddy.c:2070 -#: ../libpurple/protocols/jabber/jabber.c:1850 -#: ../libpurple/protocols/oscar/oscar.c:744 -#: ../libpurple/protocols/oscar/oscar.c:6029 -#: ../libpurple/protocols/sametime/sametime.c:3354 msgid "Do Not Disturb" msgstr "বিরক্ত করবেন না" # tithi -#: ../libpurple/protocols/jabber/buddy.c:2237 msgid "JID" msgstr "JID" -#: ../libpurple/protocols/jabber/buddy.c:2241 -#: ../libpurple/protocols/jabber/buddy.c:2430 -#: ../libpurple/protocols/oscar/oscar.c:3917 msgid "Last Name" msgstr "শেষ নাম" -#: ../libpurple/protocols/jabber/buddy.c:2273 msgid "The following are the results of your search" msgstr "নিম্নোক্ত আপনার অনুসন্ধানের ফলাফল" # fix-me tithi #. current comment from Jabber User Directory users.jabber.org -#: ../libpurple/protocols/jabber/buddy.c:2358 msgid "" "Find a contact by entering the search criteria in the given fields. Note: " "Each field supports wild card searches (%)" @@ -5849,179 +4114,121 @@ msgstr "" "প্রদত্ত ক্ষেত্রে সন্ধান বৈশিষ্ট্য প্রবেশ করার মাধ্যমে একটি যোগাযোগ খুঁজুন। নোট: প্রত্যেক " "ক্ষেত্র ওয়াইল্ড কার্ড অনুসন্ধানসমূহ সমর্থন করে (%)" -#: ../libpurple/protocols/jabber/buddy.c:2378 msgid "Directory Query Failed" msgstr "নির্দেশিকা জিজ্ঞাসা ব্যর্থ হয়েছে" -#: ../libpurple/protocols/jabber/buddy.c:2379 msgid "Could not query the directory server." msgstr "নির্দেশক সার্ভার সম্পর্কে প্রশ্ন করেনি" #. Try to translate the message (see static message #. list in jabber_user_dir_comments[]) -#: ../libpurple/protocols/jabber/buddy.c:2413 #, c-format msgid "Server Instructions: %s" msgstr "সার্ভার নিয়মাবলী: %s" -#: ../libpurple/protocols/jabber/buddy.c:2420 msgid "Fill in one or more fields to search for any matching XMPP users." msgstr "যেকোনো সমন্বয়করণ XMPP ব্যবহারকারীর জন্য খুঁজতে এক বা একাধিক ক্ষেত্র পূরন করুন।" -#: ../libpurple/protocols/jabber/buddy.c:2440 -#: ../libpurple/protocols/novell/novell.c:1497 -#: ../libpurple/protocols/oscar/oscar.c:3920 -#: ../libpurple/protocols/oscar/oscar.c:3929 msgid "Email Address" msgstr "ই-মেইল ঠিকানা" -#: ../libpurple/protocols/jabber/buddy.c:2449 -#: ../libpurple/protocols/jabber/buddy.c:2450 msgid "Search for XMPP users" msgstr "XMPP ব্যবহারকারীর জন্য অনুসন্ধান করুন" #. "Search" -#: ../libpurple/protocols/jabber/buddy.c:2451 -#: ../libpurple/protocols/qq/group.c:111 -#: ../libpurple/protocols/sametime/sametime.c:5671 -#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:474 -#: ../pidgin/plugins/gevolution/assoc-buddy.c:356 msgid "Search" msgstr "খুঁজুন" -#: ../libpurple/protocols/jabber/buddy.c:2466 msgid "Invalid Directory" msgstr "অবৈধ নির্দেশিকা" -#: ../libpurple/protocols/jabber/buddy.c:2483 msgid "Enter a User Directory" msgstr "একটি ব্যবহারকারীর নির্দেশিকা প্রবেশ করান" -#: ../libpurple/protocols/jabber/buddy.c:2484 msgid "Select a user directory to search" msgstr "খোঁজার জন্য একটি ব্যবহারকারী নির্দেশিকা নির্বাচন করুন" -#: ../libpurple/protocols/jabber/buddy.c:2487 msgid "Search Directory" msgstr "অনুসন্ধান নির্দেশিকা" -#: ../libpurple/protocols/jabber/chat.c:42 -#: ../libpurple/protocols/oscar/oscar.c:5540 -#: ../libpurple/protocols/yahoo/yahoochat.c:1057 msgid "_Room:" msgstr "কক্ষ: (_R)" -#: ../libpurple/protocols/jabber/chat.c:48 msgid "_Server:" msgstr "সার্ভার: (_S)" -#: ../libpurple/protocols/jabber/chat.c:54 msgid "_Handle:" msgstr "হ্যান্ডেল: (_H)" -#: ../libpurple/protocols/jabber/chat.c:232 #, c-format msgid "%s is not a valid room name" msgstr "%s বৈধ কক্ষের নাম নয়" -#: ../libpurple/protocols/jabber/chat.c:233 msgid "Invalid Room Name" msgstr "অবৈধ কক্ষের নাম" -#: ../libpurple/protocols/jabber/chat.c:239 #, c-format msgid "%s is not a valid server name" msgstr "%s বৈধ সার্ভার নাম নয়" -#: ../libpurple/protocols/jabber/chat.c:240 -#: ../libpurple/protocols/jabber/chat.c:241 msgid "Invalid Server Name" msgstr "অবৈধ সার্ভার নাম" -#: ../libpurple/protocols/jabber/chat.c:246 #, c-format msgid "%s is not a valid room handle" msgstr "%s বৈধ কক্ষ নিয়ন্ত্রণ নয়" -#: ../libpurple/protocols/jabber/chat.c:247 -#: ../libpurple/protocols/jabber/chat.c:248 msgid "Invalid Room Handle" msgstr "অবৈধ কক্ষ নিয়ন্ত্রণ" -#: ../libpurple/protocols/jabber/chat.c:422 msgid "Configuration error" msgstr "বিন্যাসন ত্রুটি" -#: ../libpurple/protocols/jabber/chat.c:431 -#: ../libpurple/protocols/jabber/chat.c:574 msgid "Unable to configure" msgstr "বিন্যাস করতে অক্ষম" -#: ../libpurple/protocols/jabber/chat.c:446 msgid "Room Configuration Error" msgstr "কক্ষ বিন্যাসন ত্রুটি" # tithi -#: ../libpurple/protocols/jabber/chat.c:447 msgid "This room is not capable of being configured" msgstr "এই কক্ষটি বিন্যাসিত হতে সক্ষম নয়" -#: ../libpurple/protocols/jabber/chat.c:496 -#: ../libpurple/protocols/jabber/chat.c:565 msgid "Registration error" msgstr "নিবন্ধণ ত্রুটি" # tithi -#: ../libpurple/protocols/jabber/chat.c:653 msgid "Nick changing not supported in non-MUC chatrooms" msgstr "ডাকনাম পরিবর্তন MUC-বহিঃস্থ আড্ডারুমে সমর্থিত নয়" -#: ../libpurple/protocols/jabber/chat.c:705 -#: ../libpurple/protocols/jabber/chat.c:716 -#: ../libpurple/protocols/silc/ops.c:1473 -#: ../libpurple/protocols/silc10/ops.c:1451 msgid "Error retrieving room list" msgstr "রুম তালিকা উদ্ধার করার ত্রুটি" -#: ../libpurple/protocols/jabber/chat.c:764 msgid "Invalid Server" msgstr "অবৈধ সার্ভার" -#: ../libpurple/protocols/jabber/chat.c:808 msgid "Enter a Conference Server" msgstr "একটি কনফারেন্স সার্ভার প্রবেশ করান" -#: ../libpurple/protocols/jabber/chat.c:809 msgid "Select a conference server to query" msgstr "অনুসন্ধানের জন্য একটি কনফারেন্স সার্ভার প্রবেশ করান" -#: ../libpurple/protocols/jabber/chat.c:812 msgid "Find Rooms" msgstr "কক্ষ খুঁজুন" # tithi -#: ../libpurple/protocols/jabber/jabber.c:185 msgid "You require encryption, but it is not available on this server." msgstr "আপনার সঙ্কেতায়ন প্রয়োজন, কিন্তু এটি এই সার্ভারটিতে সহজলভ্য নয়।" -#: ../libpurple/protocols/jabber/jabber.c:309 -#: ../libpurple/protocols/jabber/jabber.c:334 msgid "Write error" msgstr "লিখন ত্রুটি" -#: ../libpurple/protocols/jabber/jabber.c:452 msgid "Ping timeout" msgstr "পিঙ্গ সময়-উত্তীর্ণ হয়েছে" -#: ../libpurple/protocols/jabber/jabber.c:506 -#: ../libpurple/protocols/jabber/jabber.c:551 msgid "Read Error" msgstr "পাঠ ত্রুটি" -#: ../libpurple/protocols/jabber/jabber.c:592 -#: ../libpurple/protocols/oscar/flap_connection.c:450 -#: ../libpurple/protocols/yahoo/yahoo.c:2613 -#: ../libpurple/protocols/yahoo/yahoo.c:2645 #, c-format msgid "" "Could not establish a connection with the server:\n" @@ -6030,655 +4237,463 @@ msgstr "" "সার্ভারের সাথে সংযোগ স্থাপন করতে পারে না:\n" "%s" -#: ../libpurple/protocols/jabber/jabber.c:656 msgid "Unable to create socket" msgstr "সকেট তৈরী করতে অক্ষম" -#: ../libpurple/protocols/jabber/jabber.c:729 -#: ../libpurple/protocols/jabber/jabber.c:1201 msgid "Invalid XMPP ID" msgstr "অবৈধ XMPP ID" # tithi -#: ../libpurple/protocols/jabber/jabber.c:736 msgid "Invalid XMPP ID. Domain must be set." msgstr "অবৈধ XMPP ID। ডোমেইন অবশ্যই নির্ধারণ করতে হবে।" # tithi -#: ../libpurple/protocols/jabber/jabber.c:801 #, c-format msgid "Registration of %s@%s successful" msgstr "%1s@%2s এর নিবন্ধন সফল" -#: ../libpurple/protocols/jabber/jabber.c:807 #, c-format msgid "Registration to %s successful" msgstr "%s এ নিবন্ধন সফল হয়েছে" -#: ../libpurple/protocols/jabber/jabber.c:809 -#: ../libpurple/protocols/jabber/jabber.c:810 msgid "Registration Successful" msgstr "নিবন্ধন সফল হয়েছে" -#: ../libpurple/protocols/jabber/jabber.c:818 -#: ../libpurple/protocols/jabber/jabber.c:819 msgid "Registration Failed" msgstr "নিবন্ধন ব্যর্থ হয়েছে" -#: ../libpurple/protocols/jabber/jabber.c:837 #, c-format msgid "Registration from %s successfully removed" msgstr "%s হতে নিবন্ধন সফলভাবে অপসারণ করা হয়েছে" -#: ../libpurple/protocols/jabber/jabber.c:839 -#: ../libpurple/protocols/jabber/jabber.c:840 msgid "Unregistration Successful" msgstr "অনিবন্ধন সফল হয়েছে" -#: ../libpurple/protocols/jabber/jabber.c:848 -#: ../libpurple/protocols/jabber/jabber.c:849 msgid "Unregistration Failed" msgstr "অনিবন্ধন ব্যর্থ হয়েছে" -#: ../libpurple/protocols/jabber/jabber.c:1015 -#: ../libpurple/protocols/jabber/jabber.c:1016 msgid "Already Registered" msgstr "ইতোমধ্যে নিবন্ধিত" -#: ../libpurple/protocols/jabber/jabber.c:1103 -#: ../libpurple/protocols/oscar/oscar.c:3980 -#: ../libpurple/protocols/oscar/oscar.c:3988 msgid "State" msgstr "রাজ্য" -#: ../libpurple/protocols/jabber/jabber.c:1107 msgid "Postal code" msgstr "ডাক সংকেত" -#: ../libpurple/protocols/jabber/jabber.c:1111 -#: ../libpurple/protocols/silc/ops.c:1049 -#: ../libpurple/protocols/silc/silc.c:1007 -#: ../libpurple/protocols/silc/util.c:563 -#: ../libpurple/protocols/silc10/ops.c:1069 -#: ../libpurple/protocols/silc10/silc.c:708 -#: ../libpurple/protocols/silc10/util.c:557 msgid "Phone" msgstr "ফোন" -#: ../libpurple/protocols/jabber/jabber.c:1119 msgid "Date" msgstr "তারিখ" -#: ../libpurple/protocols/jabber/jabber.c:1123 msgid "Unregister" msgstr "অনিবন্ধন" -#: ../libpurple/protocols/jabber/jabber.c:1130 msgid "" "Please fill out the information below to change your account registration." msgstr "আপনার একাউন্ট নিবন্ধন পরিবর্তন করতে অনুগ্রহ করে নিচের তথ্য পূরণ করুন।" -#: ../libpurple/protocols/jabber/jabber.c:1133 msgid "Please fill out the information below to register your new account." msgstr "আপনার নতুন একাউন্ট নিবন্ধন পরিবর্তন করতে অনুগ্রহ করে নিচের তথ্য পূরণ করুন।" -#: ../libpurple/protocols/jabber/jabber.c:1141 -#: ../libpurple/protocols/jabber/jabber.c:1142 msgid "Register New XMPP Account" msgstr "নতুন XMPP একাউন্ট নিবন্ধন করুন" -#: ../libpurple/protocols/jabber/jabber.c:1143 -#: ../libpurple/protocols/jabber/jabber.c:1152 msgid "Register" msgstr "নিবন্ধন করুন" -#: ../libpurple/protocols/jabber/jabber.c:1148 #, c-format msgid "Change Account Registration at %s" msgstr "%s এ একাউন্ট নিবন্ধন পরিবর্তন করুন" -#: ../libpurple/protocols/jabber/jabber.c:1149 #, c-format msgid "Register New Account at %s" msgstr "%s এ নতুন একাউন্ট নিবন্ধন করুন" -#: ../libpurple/protocols/jabber/jabber.c:1152 msgid "Change Registration" msgstr "নিবন্ধন পরিবর্তন করুন" -#: ../libpurple/protocols/jabber/jabber.c:1248 -#: ../libpurple/protocols/jabber/jabber.c:1249 msgid "Error unregistering account" msgstr "একাউন্ট নিবন্ধনহীন করার ত্রুটি" # tithi -#: ../libpurple/protocols/jabber/jabber.c:1254 -#: ../libpurple/protocols/jabber/jabber.c:1255 msgid "Account successfully unregistered" msgstr "একাউন্ট সফলভাবে অনিবন্ধীত করা হয়েছে" -#: ../libpurple/protocols/jabber/jabber.c:1427 msgid "Initializing Stream" msgstr "স্ট্রীম প্রস্তুত করছে" -#: ../libpurple/protocols/jabber/jabber.c:1432 msgid "Initializing SSL/TLS" msgstr "SSL/TLS প্রস্তুত করছে" # tithi -#: ../libpurple/protocols/jabber/jabber.c:1436 -#: ../libpurple/protocols/msn/session.c:412 -#: ../libpurple/protocols/msnp9/session.c:374 msgid "Authenticating" msgstr "প্রমাণীকরণ" # tithi -#: ../libpurple/protocols/jabber/jabber.c:1454 msgid "Re-initializing Stream" msgstr "স্ট্রীম পুনরায় প্রস্তুত করছে" -#: ../libpurple/protocols/jabber/jabber.c:1536 -#: ../libpurple/protocols/jabber/jabber.c:1537 msgid "Server doesn't support blocking" msgstr "সার্ভার আবদ্ধকরণ সমর্থন করে না" # tithi -#: ../libpurple/protocols/jabber/jabber.c:1648 -#: ../libpurple/protocols/jabber/jabber.c:2105 -#: ../libpurple/protocols/jabber/jabber.c:2148 -#: ../libpurple/protocols/jabber/jabber.c:2186 -#: ../libpurple/protocols/oscar/oscar.c:908 -#: ../libpurple/protocols/oscar/oscar.c:5823 msgid "Not Authorized" msgstr "অনুমোদিত নয়" -#: ../libpurple/protocols/jabber/jabber.c:1695 msgid "Both" msgstr "উভয়" # tithi -#: ../libpurple/protocols/jabber/jabber.c:1697 msgid "From (To pending)" msgstr "হতে (অমীমাংসিত)" -#: ../libpurple/protocols/jabber/jabber.c:1699 msgid "From" msgstr "হতে" -#: ../libpurple/protocols/jabber/jabber.c:1702 msgid "To" msgstr "প্রতি" # tithi -#: ../libpurple/protocols/jabber/jabber.c:1704 msgid "None (To pending)" msgstr "কোনটি নয় (অমীমাংসিত)" -#: ../libpurple/protocols/jabber/jabber.c:1706 -#: ../pidgin/plugins/gevolution/eds-utils.c:73 -#: ../pidgin/plugins/gevolution/eds-utils.c:86 msgid "None" msgstr "কোনটি না" -#: ../libpurple/protocols/jabber/jabber.c:1709 msgid "Subscription" msgstr "শেয়ারকরণ" -#: ../libpurple/protocols/jabber/jabber.c:1719 -#: ../libpurple/protocols/jabber/jabber.c:1722 -#: ../libpurple/protocols/jabber/jabber.c:1797 -#: ../libpurple/protocols/jabber/jabber.c:1811 -#: ../libpurple/protocols/jabber/jabber.c:1825 -#: ../libpurple/protocols/jabber/jabber.c:1839 -#: ../libpurple/protocols/jabber/jabber.c:1853 -#: ../libpurple/protocols/jabber/usermood.c:181 -#: ../libpurple/protocols/silc/buddy.c:1572 -#: ../libpurple/protocols/silc/ops.c:1225 -#: ../libpurple/protocols/silc10/buddy.c:1572 -#: ../libpurple/protocols/silc10/ops.c:1207 msgid "Mood" msgstr "অবস্থা" # tithi -#: ../libpurple/protocols/jabber/jabber.c:1731 -#: ../libpurple/protocols/msn/msn.c:715 msgid "Now Listening" msgstr "এখন শুনছে" -#: ../libpurple/protocols/jabber/jabber.c:1798 -#: ../libpurple/protocols/jabber/jabber.c:1812 -#: ../libpurple/protocols/jabber/jabber.c:1826 -#: ../libpurple/protocols/jabber/jabber.c:1840 -#: ../libpurple/protocols/jabber/jabber.c:1854 msgid "Mood Text" msgstr "মোড পাঠ" -#: ../libpurple/protocols/jabber/jabber.c:1800 -#: ../libpurple/protocols/jabber/jabber.c:1814 -#: ../libpurple/protocols/jabber/jabber.c:1828 -#: ../libpurple/protocols/jabber/jabber.c:1842 -#: ../libpurple/protocols/jabber/jabber.c:1856 msgid "Allow Buzz" msgstr "বাজ অনুমোদন করুন" # tithi -#: ../libpurple/protocols/jabber/jabber.c:1874 msgid "Tune Artist" msgstr "টিউন শিল্পী" -#: ../libpurple/protocols/jabber/jabber.c:1875 msgid "Tune Title" msgstr "টিউন শিরোনাম" # tithi -#: ../libpurple/protocols/jabber/jabber.c:1876 msgid "Tune Album" msgstr "টিউন অ্যালবাম" # tithi -#: ../libpurple/protocols/jabber/jabber.c:1877 msgid "Tune Genre" msgstr "টিউনের ধরন" -#: ../libpurple/protocols/jabber/jabber.c:1878 msgid "Tune Comment" msgstr "টিউনের মন্তব্য" # tithi -#: ../libpurple/protocols/jabber/jabber.c:1879 msgid "Tune Track" msgstr "টিউন গতিপথ" # tithi -#: ../libpurple/protocols/jabber/jabber.c:1880 msgid "Tune Time" msgstr "টিউন সময়" # tithi -#: ../libpurple/protocols/jabber/jabber.c:1881 msgid "Tune Year" msgstr "টিউন সন" # tithi -#: ../libpurple/protocols/jabber/jabber.c:1882 msgid "Tune URL" msgstr "টিউন URL" -#: ../libpurple/protocols/jabber/jabber.c:1898 msgid "Password Changed" msgstr "গুপ্তসংকেত পরিবর্তিত হয়েছে" -#: ../libpurple/protocols/jabber/jabber.c:1899 msgid "Your password has been changed." msgstr "আপনার গুপ্তসংকেত পরিবর্তিত হয়েছে।" -#: ../libpurple/protocols/jabber/jabber.c:1905 -#: ../libpurple/protocols/jabber/jabber.c:1906 msgid "Error changing password" msgstr "গুপ্তসংকেত পরিবর্তনে ত্রুটি" -#: ../libpurple/protocols/jabber/jabber.c:1963 msgid "Password (again)" msgstr "গুপ্তসংকেত (আবার)" -#: ../libpurple/protocols/jabber/jabber.c:1969 -#: ../libpurple/protocols/jabber/jabber.c:1970 msgid "Change XMPP Password" msgstr "XMPP গুপ্তসংকেত পরিবর্তন করুন" -#: ../libpurple/protocols/jabber/jabber.c:1970 msgid "Please enter your new password" msgstr "আপনার নতুন গুপ্তসংকেতটি প্রবেশ করান" -#: ../libpurple/protocols/jabber/jabber.c:1984 -#: ../libpurple/protocols/oscar/oscar.c:6612 -#: ../libpurple/protocols/silc/silc.c:1328 -#: ../libpurple/protocols/silc10/silc.c:1029 msgid "Set User Info..." msgstr "ব্যবহারকারীর তথ্য নির্ধারণ করুন..." #. if (js->protocol_options & CHANGE_PASSWORD) { -#: ../libpurple/protocols/jabber/jabber.c:1989 -#: ../libpurple/protocols/oscar/oscar.c:6623 -#: ../libpurple/protocols/silc/silc.c:1324 -#: ../libpurple/protocols/silc10/silc.c:1025 msgid "Change Password..." msgstr "গুপ্তসংকেত পরিবর্তন করুন..." #. } -#: ../libpurple/protocols/jabber/jabber.c:1994 msgid "Search for Users..." msgstr "ব্যবহারকারীর জন্য খুঁজুন..." # tithi -#: ../libpurple/protocols/jabber/jabber.c:2085 msgid "Bad Request" msgstr "খারাপ অনুরোধ" -#: ../libpurple/protocols/jabber/jabber.c:2087 msgid "Conflict" msgstr "দ্বন্দ্ব" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2089 msgid "Feature Not Implemented" msgstr "বৈশিষ্ট্য এখনও বাস্তবায়িত হয়নি" -#: ../libpurple/protocols/jabber/jabber.c:2091 msgid "Forbidden" msgstr "নিষিদ্ধ" -#: ../libpurple/protocols/jabber/jabber.c:2093 msgid "Gone" msgstr "চলে গেছে" -#: ../libpurple/protocols/jabber/jabber.c:2095 -#: ../libpurple/protocols/jabber/jabber.c:2176 msgid "Internal Server Error" msgstr "অভ্যন্তরীণ সার্ভার ত্রুটি" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2097 msgid "Item Not Found" msgstr "বিষয়োপকরণ খুঁজে পাওয়া যায়নি" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2099 msgid "Malformed XMPP ID" msgstr "বিকৃত XMPP ID" -#: ../libpurple/protocols/jabber/jabber.c:2101 msgid "Not Acceptable" msgstr "গ্রহণযোগ্য নয়" -#: ../libpurple/protocols/jabber/jabber.c:2103 msgid "Not Allowed" msgstr "অনুমোদিত নয়" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2107 msgid "Payment Required" msgstr "অর্থপ্রদান প্রয়োজন" -#: ../libpurple/protocols/jabber/jabber.c:2109 msgid "Recipient Unavailable" msgstr "প্রাপক অপ্রাপ্য" -#: ../libpurple/protocols/jabber/jabber.c:2113 msgid "Registration Required" msgstr "নিবন্ধন প্রয়োজন" -#: ../libpurple/protocols/jabber/jabber.c:2115 msgid "Remote Server Not Found" msgstr "দূরবর্তী সার্ভার খুঁজে পাওয়া যায়নি" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2117 msgid "Remote Server Timeout" msgstr "দূরবর্তী সার্ভারের সময় উত্তীর্ণ হয়েছে" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2119 msgid "Server Overloaded" msgstr "সার্ভার অতিরিক্ত বোঝাইকৃত" -#: ../libpurple/protocols/jabber/jabber.c:2121 msgid "Service Unavailable" msgstr "পরিসেবা অপ্রাপ্য" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2123 msgid "Subscription Required" msgstr "শেয়ারকরণ প্রয়োজন" -#: ../libpurple/protocols/jabber/jabber.c:2125 msgid "Unexpected Request" msgstr "অপ্রত্যাশিত অনুরোধ" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2133 msgid "Authorization Aborted" msgstr "প্রাপ্তাধিকার বাতিলকৃত" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2135 msgid "Incorrect encoding in authorization" msgstr "প্রাপ্তাধিকারে ত্রুটিপূর্ণ সঙ্কেতায়ন" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2137 msgid "Invalid authzid" msgstr "অবৈধ প্রাপ্তাধিকার" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2139 msgid "Invalid Authorization Mechanism" msgstr "অবৈধ প্রাপ্তাধিকার কৌশল" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2142 msgid "Authorization mechanism too weak" msgstr "প্রাপ্তাধিকার কৌশল খুব দূর্বল" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2150 msgid "Temporary Authentication Failure" msgstr "সাময়িক প্রমাণীকরণ ব্যর্থ" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2153 msgid "Authentication Failure" msgstr "প্রমাণীকরণ ব্যর্থ" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2161 msgid "Bad Format" msgstr "খারাপ বিন্যাস" -#: ../libpurple/protocols/jabber/jabber.c:2163 msgid "Bad Namespace Prefix" msgstr "খারাপ নাম-পরিসরের উপপদ" -#: ../libpurple/protocols/jabber/jabber.c:2166 msgid "Resource Conflict" msgstr "সম্পদ দ্বন্দ্ব তৈরি করে" -#: ../libpurple/protocols/jabber/jabber.c:2168 -#: ../libpurple/protocols/silc/silc.c:351 -#: ../libpurple/protocols/silc10/ops.c:1725 msgid "Connection Timeout" msgstr "সংযোগ সময় উত্তীর্ণ হয়েছে" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2170 msgid "Host Gone" msgstr "হোস্ট চলে গেছে" -#: ../libpurple/protocols/jabber/jabber.c:2172 msgid "Host Unknown" msgstr "অজানা হোস্ট" -#: ../libpurple/protocols/jabber/jabber.c:2174 msgid "Improper Addressing" msgstr "অনুপযুক্ত নির্দেশকরণ" -#: ../libpurple/protocols/jabber/jabber.c:2178 msgid "Invalid ID" msgstr "অবৈধ আইডি" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2180 msgid "Invalid Namespace" msgstr "অবৈধ নামপরিসর" -#: ../libpurple/protocols/jabber/jabber.c:2182 msgid "Invalid XML" msgstr "অবৈধ এক্সএমএল" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2184 msgid "Non-matching Hosts" msgstr "সমন্বয়হীন হোস্ট" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2188 msgid "Policy Violation" msgstr "নীতিমালা লঙ্ঘন" -#: ../libpurple/protocols/jabber/jabber.c:2190 msgid "Remote Connection Failed" msgstr "দূরবর্তী সংযোগ ব্যর্থ হয়েছে" -#: ../libpurple/protocols/jabber/jabber.c:2192 msgid "Resource Constraint" msgstr "সম্পদের সীমাবদ্ধতা" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2194 msgid "Restricted XML" msgstr "নিয়ন্ত্রিত XML" -#: ../libpurple/protocols/jabber/jabber.c:2196 msgid "See Other Host" msgstr "অন্যান্য হোষ্ট দেখুন" -#: ../libpurple/protocols/jabber/jabber.c:2198 msgid "System Shutdown" msgstr "সিস্টেম বন্ধ করুন" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2200 msgid "Undefined Condition" msgstr "অনির্ধারিত শর্ত" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2202 msgid "Unsupported Encoding" msgstr "অসমর্থিত সঙ্কেতায়ন" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2204 msgid "Unsupported Stanza Type" msgstr "অসমর্থিত স্ট্যানজা ধরন" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2206 msgid "Unsupported Version" msgstr "অসমর্থিত সংস্করণ" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2208 msgid "XML Not Well Formed" msgstr "XMLসঠিক ভাবে গঠিত নয়" -#: ../libpurple/protocols/jabber/jabber.c:2210 msgid "Stream Error" msgstr "স্ট্রীম ত্রুটি" -#: ../libpurple/protocols/jabber/jabber.c:2295 #, c-format msgid "Unable to ban user %s" msgstr "%s ব্যবহারকারীকে নিষিদ্ধ করতে অক্ষম" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2315 #, c-format msgid "Unknown affiliation: \"%s\"" msgstr "অজানা সম্পর্ক: \"%s\"" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2320 #, c-format msgid "Unable to affiliate user %s as \"%s\"" msgstr "%1s ব্যবহারকারীকে \"%2s\" হিসেবে সম্পর্কিত করতে অসমর্থ" -#: ../libpurple/protocols/jabber/jabber.c:2339 #, c-format msgid "Unknown role: \"%s\"" msgstr "অজানা ভূমিকা: \"%s\"" -#: ../libpurple/protocols/jabber/jabber.c:2344 #, c-format msgid "Unable to set role \"%s\" for user: %s" msgstr "ব্যবহারকারীর জন্য \"%1s\" ভূমিকা নির্ধারণ করতে ব্যর্থ: %2s" -#: ../libpurple/protocols/jabber/jabber.c:2397 #, c-format msgid "Unable to kick user %s" msgstr "%s ব্যবহারকারীকে বের করে দিতে অক্ষম" -#: ../libpurple/protocols/jabber/jabber.c:2428 #, c-format msgid "Unable to ping user %s" msgstr "%s ব্যবহারকারীকে পিঙ্গ করতে অক্ষম" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2446 -#: ../libpurple/protocols/jabber/jabber.c:2457 #, c-format msgid "Unable to buzz, because there is nothing known about user %s." msgstr "বাজ দিতে ব্যর্থ, কারণ %s ব্যবহারকারীর সম্পর্কে কোনো কিছু জানা নেই।" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2452 #, c-format msgid "Unable to buzz, because user %s might be offline." msgstr "বাজ দিতে ব্যর্থ, কারণ %s ব্যবহারকারীরা সম্ভবত অফলাইনে।" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2483 #, c-format msgid "Unable to buzz, because the user %s does not support it." msgstr "বাজ দিতে ব্যর্থ, কারণ %s ব্যবহারকারী এটি সমর্থন করে না।" #. Yahoo only supports one attention command: the 'buzz'. #. This is index number YAHOO_BUZZ. -#: ../libpurple/protocols/jabber/jabber.c:2503 -#: ../libpurple/protocols/yahoo/yahoo.c:4218 msgid "Buzz" msgstr "বাজ" -#: ../libpurple/protocols/jabber/jabber.c:2504 -#: ../libpurple/protocols/yahoo/yahoo.c:4219 #, c-format msgid "%s has buzzed you!" msgstr "%s আপনাকে বাজ দিয়েছে!" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2504 -#: ../libpurple/protocols/yahoo/yahoo.c:4219 #, c-format msgid "Buzzing %s..." msgstr "%s বাজ দিচ্ছে..." -#: ../libpurple/protocols/jabber/jabber.c:2535 msgid "config: Configure a chat room." msgstr "বিন্যাস: একটি আড্ডার কক্ষ পছন্দসই বিন্যাস করুন।" -#: ../libpurple/protocols/jabber/jabber.c:2539 msgid "configure: Configure a chat room." msgstr "বিন্যাসন: একটি আড্ডার কক্ষ পছন্দসই বিন্যাস করুন।" -#: ../libpurple/protocols/jabber/jabber.c:2548 msgid "part [room]: Leave the room." msgstr "অংশ [কক্ষ]: কক্ষ ত্যাগ করুন।" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2553 msgid "register: Register with a chat room." msgstr "নিবন্ধন করুন: আড্ডা রুমের সাথে নিবন্ধন করুন।" -#: ../libpurple/protocols/jabber/jabber.c:2559 msgid "topic [new topic]: View or change the topic." msgstr "বিষয়বস্তু [নতুন বিষয়বস্তু]: বিষয়বস্তু প্রদর্শন অথবা পরিবর্তন করুন।" -#: ../libpurple/protocols/jabber/jabber.c:2565 msgid "ban <user> [reason]: Ban a user from the room." msgstr "" "নিষিদ্ধ <ব্যবহারকারী&2gt; [কারণ]: একজন ব্যবহারকারীকে কক্ষ থেকে নিষিদ্ধ করুন।" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2571 msgid "" "affiliate <user> <owner|admin|member|outcast|none>: Set a user's " "affiliation with the room." @@ -6687,7 +4702,6 @@ msgstr "" "সঙ্গে একটি ব্যবহারকারীর সম্পর্ক নির্ধারণ করুন।" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2577 msgid "" "role <user> <moderator|participant|visitor|none>: Set a user's " "role in the room." @@ -6695,23 +4709,19 @@ msgstr "" "ভূমিকা &1lt;ব্যবহারকারী&2gt; &3lt;সমন্বয়জ্ঞ|অংশগ্রহনকারী|পরিদর্শক|কেউনা&4gt;: কক্ষে " "ব্যবহারকারীর ভূমিকা নির্ধারণ করুন।" -#: ../libpurple/protocols/jabber/jabber.c:2583 msgid "invite <user> [message]: Invite a user to the room." msgstr "" "আমন্ত্রণ &1lt;ব্যবহাকারী&2gt; [বার্তা]: একজন ব্যবহারকারীকে কক্ষে আমন্ত্রণ জানান" -#: ../libpurple/protocols/jabber/jabber.c:2589 msgid "join: <room> [password]: Join a chat on this server." msgstr "যোগ দিন: &1lt;কক্ষ&2gt; [গুপ্তসঙ্কেত]: এই সার্ভারের একটি আড্ডায় অংশ নিন।" -#: ../libpurple/protocols/jabber/jabber.c:2595 msgid "kick <user> [reason]: Kick a user from the room." msgstr "" "বের করে দিন &1lt;ব্যবহারকারী&2gt; [কারণ]: কক্ষ থেকে একজন ব্যবহারকারীকে বের করে " "দিন।" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2600 msgid "" "msg <user> <message>: Send a private message to another user." msgstr "" @@ -6719,14 +4729,11 @@ msgstr "" "বার্তা পাঠান।" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2606 msgid "ping <jid>:\tPing a user/component/server." msgstr "" "ping <jid>: একজন ব্যবহারকারী/উপকরণ/সার্ভারকে পিঙ্গ করুন।" # tithi -#: ../libpurple/protocols/jabber/jabber.c:2611 -#: ../libpurple/protocols/yahoo/yahoo.c:4242 msgid "buzz: Buzz a user to get their attention" msgstr "বাজ: ব্যবহারকারীকে তার মনযোগ পেতে বাজ দিন" @@ -6740,110 +4747,83 @@ msgstr "বাজ: ব্যবহারকারীকে তার মনয #. *< version #. * summary #. * description -#: ../libpurple/protocols/jabber/libxmpp.c:172 -#: ../libpurple/protocols/jabber/libxmpp.c:174 msgid "XMPP Protocol Plugin" msgstr "XMPP প্রটোকল প্লাগইন" #. Translators: 'domain' is used here in the context of Internet domains, e.g. pidgin.im -#: ../libpurple/protocols/jabber/libxmpp.c:208 ../pidgin/gtkaccount.c:535 msgid "Domain" msgstr "ডোমেইন" # tithi -#: ../libpurple/protocols/jabber/libxmpp.c:216 msgid "Require SSL/TLS" msgstr "SSL/TSL প্রয়োজন" # tithi -#: ../libpurple/protocols/jabber/libxmpp.c:220 msgid "Force old (port 5223) SSL" msgstr "পুরাতন (পোর্ট ৫২২৩) SSL কে চাপ দিন" # tithi -#: ../libpurple/protocols/jabber/libxmpp.c:225 msgid "Allow plaintext auth over unencrypted streams" msgstr "অসঙ্কেতায়িত স্ট্রীমে সরল-পাঠ অধিকার অনুমোদন করুন" -#: ../libpurple/protocols/jabber/libxmpp.c:230 -#: ../libpurple/protocols/myspace/myspace.c:3630 -#: ../libpurple/protocols/simple/simple.c:2147 msgid "Connect port" msgstr "সংযোগ পোর্ট" #. TODO: default to automatically try different ports. Make the user be #. * able to set the first port to try (like LastConnectedPort in Windows client). #. Account options -#: ../libpurple/protocols/jabber/libxmpp.c:234 -#: ../libpurple/protocols/myspace/myspace.c:3627 -#: ../libpurple/protocols/silc/silc.c:2177 -#: ../libpurple/protocols/silc10/silc.c:1900 msgid "Connect server" msgstr "সংযোগ সার্ভার" -#: ../libpurple/protocols/jabber/libxmpp.c:239 msgid "File transfer proxies" msgstr "ফাইল স্থানান্তরণ প্রক্সি" # tithi #. this should probably be part of global smiley theme settings later on, #. shared with MSN -#: ../libpurple/protocols/jabber/libxmpp.c:248 msgid "Show Custom Smileys" msgstr "স্বনির্বাচিত স্মাইলিগুলো প্রদর্শন করুন" -#: ../libpurple/protocols/jabber/message.c:110 #, c-format msgid "%s has left the conversation." msgstr "%s কথোপকথন ত্যাগ করেছে।" -#: ../libpurple/protocols/jabber/message.c:166 #, c-format msgid "Message from %s" msgstr "%s হতে বার্তা" -#: ../libpurple/protocols/jabber/message.c:230 #, c-format msgid "%s has set the topic to: %s" msgstr "%1s বিষয়বস্তু নির্ধারণ করেছেন: %2s" -#: ../libpurple/protocols/jabber/message.c:232 #, c-format msgid "The topic is: %s" msgstr "বিষয়বস্তু হলো: %s" -#: ../libpurple/protocols/jabber/message.c:280 #, c-format msgid "Message delivery to %s failed: %s" msgstr "%1s এ বার্তা পাঠানো ব্যর্থ হয়েছে: %2s" -#: ../libpurple/protocols/jabber/message.c:283 msgid "XMPP Message Error" msgstr "XMPP বার্তা ত্রুটি" # tithi -#: ../libpurple/protocols/jabber/message.c:589 #, c-format msgid "(Code %s)" msgstr "(কোড %s)" # tithi -#: ../libpurple/protocols/jabber/parser.c:251 msgid "XML Parse error" msgstr "XML পার্স ত্রুটি" # tithi -#: ../libpurple/protocols/jabber/presence.c:445 msgid "Unknown Error in presence" msgstr "বর্তমানে অজানা ত্রুটি" -#: ../libpurple/protocols/jabber/presence.c:528 -#: ../libpurple/protocols/jabber/presence.c:529 msgid "Create New Room" msgstr "নতুন কক্ষ তৈরী করুন" # tithi -#: ../libpurple/protocols/jabber/presence.c:530 msgid "" "You are creating a new room. Would you like to configure it, or accept the " "default settings?" @@ -6851,144 +4831,103 @@ msgstr "" "আপনি একটি নতুন কক্ষ তৈরি করছেন। আপনি কি এটি বিন্যাস করতে আগ্রহী, বা পূর্বনির্ধারিত " "বিন্যাসনসমূহ গ্রহণ করবেন?" -#: ../libpurple/protocols/jabber/presence.c:536 msgid "_Configure Room" msgstr "কক্ষ বিন্যাস করুন (_C)" -#: ../libpurple/protocols/jabber/presence.c:537 msgid "_Accept Defaults" msgstr "পূর্বনির্ধারিত গ্রহণ (_A)" -#: ../libpurple/protocols/jabber/presence.c:579 #, c-format msgid "Error joining chat %s" msgstr "%s আড্ডায় অংশগ্রহনের ত্রুটি" -#: ../libpurple/protocols/jabber/presence.c:582 #, c-format msgid "Error in chat %s" msgstr "%s আড্ডায় ত্রুটি" # tithi -#: ../libpurple/protocols/jabber/si.c:1003 #, c-format msgid "Unable to send file to %s, user does not support file transfers" msgstr "%s এ ফাইল পাঠাতে অক্ষম, ব্যবহাকারীরা ফাইল স্থানান্তর সমর্থন করে না" -#: ../libpurple/protocols/jabber/si.c:1004 -#: ../libpurple/protocols/jabber/si.c:1005 -#: ../libpurple/protocols/jabber/si.c:1074 msgid "File Send Failed" msgstr "ফাইল পাঠানো ব্যর্থ হয়েছে" -#: ../libpurple/protocols/jabber/si.c:1067 #, c-format msgid "Unable to send file to %s, invalid JID" msgstr "%s এ ফাইল পাঠাতে সমর্থ ছিল না, অবৈধ JID" -#: ../libpurple/protocols/jabber/si.c:1069 #, c-format msgid "Unable to send file to %s, user is not online" msgstr "%s এ ফাইল পাঠাতে সমর্থ ছিল না, ব্যবহারকারী অনলাইনে নেই" -#: ../libpurple/protocols/jabber/si.c:1071 #, c-format msgid "Unable to send file to %s, not subscribed to user presence" msgstr "%s এ ফাইল পাঠাতে সমর্থ ছিল না, ব্যবহারকারী উপস্থিতিতে সম্মত নয়" # fix me tithi -#: ../libpurple/protocols/jabber/si.c:1086 #, c-format msgid "Please select the resource of %s to which you would like to send a file" msgstr "" "অনুগ্রহ করে আপনি %s এর এমন একটি সম্পদ নির্বাচন করুন যাতে আপনি একটি ফাইল পাঠাতে চান" -#: ../libpurple/protocols/jabber/si.c:1102 msgid "Select a Resource" msgstr "একটি সম্পদ নির্বাচন করুন" -#: ../libpurple/protocols/jabber/usermood.c:194 -#: ../libpurple/protocols/jabber/usermood.c:195 msgid "Edit User Mood" msgstr "ব্যবহাকারীরর মোড সম্পাদন করুন" # tithi -#: ../libpurple/protocols/jabber/usermood.c:196 msgid "Please select your mood from the list." msgstr "অনুগ্রহ করে তালিকা থেকে আপনার মোড নির্বাচন করুন।" -#: ../libpurple/protocols/jabber/usermood.c:198 -#: ../libpurple/protocols/jabber/usernick.c:78 msgid "Set" msgstr "নির্ধারন করুন" -#: ../libpurple/protocols/jabber/usermood.c:206 msgid "Set Mood..." msgstr "মোড নির্ধারন করুন..." -#: ../libpurple/protocols/jabber/usernick.c:76 msgid "Set User Nickname" msgstr "ব্যবহারকারীর ডাকনাম নির্ধারন করুন" -#: ../libpurple/protocols/jabber/usernick.c:76 msgid "Please specify a new nickname for you." msgstr "অনুগ্রহ করে আপনার জন্য নতুন ডাকনাম নির্দিষ্ট করুন।" # tithi -#: ../libpurple/protocols/jabber/usernick.c:77 msgid "" "This information is visible to all contacts on your contact list, so choose " "something appropriate." msgstr "" "এই তথ্যটি আপনার যোগাযোগ তালিকার সকল যোগাযোগে দৃশ্যমান, সুতরাং উপযুক্ত কিছু পছন্দ করুন।" -#: ../libpurple/protocols/jabber/usernick.c:100 msgid "Set Nickname..." msgstr "ডাকনাম নির্ধারণ করুন..." -#: ../libpurple/protocols/jabber/xdata.c:379 msgid "Actions" msgstr "কার্যসমূহ" -#: ../libpurple/protocols/jabber/xdata.c:381 msgid "Select an action" msgstr "একটি কার্য নির্বাচন করুন" -#: ../libpurple/protocols/msn/contact.c:801 -msgid "Unable to retrieve MSN Address Book" -msgstr "MSN ঠিকানা বই পুনরূদ্ধারে ব্যর্থ হয়েছে" - #. only notify the user about problems adding to the friends list #. * maybe we should do something else for other lists, but it probably #. * won't cause too many problems if we just ignore it -#: ../libpurple/protocols/msn/contact.c:968 -#: ../libpurple/protocols/msn/contact.c:1076 -#: ../libpurple/protocols/msn/userlist.c:695 -#: ../libpurple/protocols/msnp9/userlist.c:653 #, c-format msgid "Unable to add \"%s\"." msgstr "\"%s\" যোগ করতে সমর্থ নয়।" -#: ../libpurple/protocols/msn/contact.c:969 -#: ../libpurple/protocols/msn/contact.c:1077 msgid "Buddy Add error" msgstr "বন্ধু যোগ করতে ত্রুটি" -#: ../libpurple/protocols/msn/contact.c:970 -#: ../libpurple/protocols/msn/contact.c:1078 msgid "The username specified does not exist." msgstr "উল্লেখিত ব্য়বহারকারীর নামটি বিদ্যমান নয়।" # fix me tithi -#: ../libpurple/protocols/msn/dialog.c:118 -#: ../libpurple/protocols/msnp9/dialog.c:110 #, c-format msgid "Buddy list synchronization issue in %s (%s)" msgstr "%1s (%2s) এ বন্ধু তালিকার এককালবর্তীকরণ বিষয়" # tithi -#: ../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. " @@ -7000,8 +4939,6 @@ msgstr "" # msgstr "" # "স্থানীয় তালিকার %s গ্রুপ এ আছেন কিন্তু সার্ভার তালিকায় নেই।আপনি কি এই বন্ধুটিকে যোগ " # "করতে চান?" -#: ../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 " @@ -7010,387 +4947,304 @@ msgstr "" "%s স্থানীয় তালিকায় আছে কিন্তু সার্ভার তালিকায় নেই। আপনি কি এই বন্ধুটিকে যোগ করতে " "চান?" -#: ../libpurple/protocols/msn/error.c:36 -#: ../libpurple/protocols/msnp9/error.c:36 +#, c-format msgid "Unable to parse message" msgstr "বার্তা পার্স করা সম্ভব হয়নি" -#: ../libpurple/protocols/msn/error.c:40 -#: ../libpurple/protocols/msnp9/error.c:41 +#, c-format msgid "Syntax Error (probably a client bug)" msgstr "বাক্যরীতি ত্রুটি (সম্ভবত ক্লায়েন্টের ভূল)" -#: ../libpurple/protocols/msn/error.c:44 -#: ../libpurple/protocols/msnp9/error.c:46 +#, c-format msgid "Invalid email address" msgstr "অবৈধ ই-মেইল ঠিকানা" -#: ../libpurple/protocols/msn/error.c:47 -#: ../libpurple/protocols/msnp9/error.c:49 +#, c-format msgid "User does not exist" msgstr "ব্যবহারকারী বিদ্যমান নয়" # tithi -#: ../libpurple/protocols/msn/error.c:50 -#: ../libpurple/protocols/msnp9/error.c:53 +#, c-format msgid "Fully qualified domain name missing" msgstr "সম্পূর্ণভাবে যোগ্য ডোমেইন নাম নিরুদ্দিষ্ট" -#: ../libpurple/protocols/msn/error.c:53 -#: ../libpurple/protocols/msnp9/error.c:56 +#, c-format msgid "Already logged in" msgstr "ইতোমধ্যে লগইন করেছে" -#: ../libpurple/protocols/msn/error.c:56 -#: ../libpurple/protocols/msnp9/error.c:59 +#, c-format msgid "Invalid username" msgstr "অবৈধ ব্যবহারকারীর নাম" -#: ../libpurple/protocols/msn/error.c:59 -#: ../libpurple/protocols/msnp9/error.c:62 +#, c-format msgid "Invalid friendly name" msgstr "অবৈধ বন্ধুসুলভ নাম" -#: ../libpurple/protocols/msn/error.c:62 -#: ../libpurple/protocols/msnp9/error.c:65 +#, c-format msgid "List full" msgstr "তালিকা পূর্ণ" -#: ../libpurple/protocols/msn/error.c:65 -#: ../libpurple/protocols/msnp9/error.c:68 +#, c-format msgid "Already there" msgstr "ইতোমধ্যে সেখানে আছে" -#: ../libpurple/protocols/msn/error.c:69 -#: ../libpurple/protocols/msnp9/error.c:72 +#, c-format msgid "Not on list" msgstr "তালিকায় নেই" -#: ../libpurple/protocols/msn/error.c:72 -#: ../libpurple/protocols/msnp9/error.c:75 -#: ../libpurple/protocols/zephyr/zephyr.c:759 +#, c-format msgid "User is offline" msgstr "ব্যবহারকারী অফলাইনে" -#: ../libpurple/protocols/msn/error.c:75 -#: ../libpurple/protocols/msnp9/error.c:78 +#, c-format msgid "Already in the mode" msgstr "ইতোমধ্যে পরিমন্ডলে আছে" -#: ../libpurple/protocols/msn/error.c:79 -#: ../libpurple/protocols/msnp9/error.c:82 +#, c-format msgid "Already in opposite list" msgstr "ইতোমধ্যে বিপরীত তালিকায় আছে" -#: ../libpurple/protocols/msn/error.c:83 -#: ../libpurple/protocols/msnp9/error.c:86 +#, c-format msgid "Too many groups" msgstr "অতিরিক্ত গ্রুপ" -#: ../libpurple/protocols/msn/error.c:86 -#: ../libpurple/protocols/msnp9/error.c:89 +#, c-format msgid "Invalid group" msgstr "অবৈধ গ্রুপ" -#: ../libpurple/protocols/msn/error.c:89 -#: ../libpurple/protocols/msnp9/error.c:92 +#, c-format msgid "User not in group" msgstr "ব্যবহারকারী গ্রুপে নেই" -#: ../libpurple/protocols/msn/error.c:92 -#: ../libpurple/protocols/msnp9/error.c:95 +#, c-format msgid "Group name too long" msgstr "গ্রুপ নামটি অত্যন্ত দীর্ঘ" -#: ../libpurple/protocols/msn/error.c:95 -#: ../libpurple/protocols/msnp9/error.c:98 +#, c-format msgid "Cannot remove group zero" msgstr "গ্রুপ জিরো মুছে ফেলতে পারে না" -#: ../libpurple/protocols/msn/error.c:99 -#: ../libpurple/protocols/msnp9/error.c:103 +#, c-format msgid "Tried to add a user to a group that doesn't exist" msgstr "ব্যবহারকারীকে এমন একটি গ্রুপে যোগদানের চেষ্টা করা হয়েছে যা বিদ্যমান নেই" -#: ../libpurple/protocols/msn/error.c:102 -#: ../libpurple/protocols/msnp9/error.c:107 +#, c-format msgid "Switchboard failed" msgstr "সুইচবোর্ড ব্যর্থ" -#: ../libpurple/protocols/msn/error.c:106 -#: ../libpurple/protocols/msnp9/error.c:111 +#, c-format msgid "Notify transfer failed" msgstr "প্রজ্ঞাপন স্থানান্তর ব্যর্থ" # tithi -#: ../libpurple/protocols/msn/error.c:111 -#: ../libpurple/protocols/msnp9/error.c:116 +#, c-format msgid "Required fields missing" msgstr "প্রয়োজনীয় ক্ষেত্র নিরুদ্দিষ্ট" # tithi -#: ../libpurple/protocols/msn/error.c:115 -#: ../libpurple/protocols/msnp9/error.c:120 +#, c-format msgid "Too many hits to a FND" msgstr "একটি FND এ খুব বেশি আঘাত করা হয়েছে" -#: ../libpurple/protocols/msn/error.c:119 -#: ../libpurple/protocols/msnp9/error.c:124 -#: ../libpurple/protocols/oscar/oscar.c:123 +#, c-format msgid "Not logged in" msgstr "লগইন করা হয়নি" -#: ../libpurple/protocols/msn/error.c:123 -#: ../libpurple/protocols/msnp9/error.c:128 +#, c-format msgid "Service temporarily unavailable" msgstr "সাময়িকভাবে সেবা পাওয়া যাচ্ছে না" -#: ../libpurple/protocols/msn/error.c:126 -#: ../libpurple/protocols/msnp9/error.c:131 +#, c-format msgid "Database server error" msgstr "উপাত্তধার সার্ভারের ত্রুটি" -#: ../libpurple/protocols/msn/error.c:130 -#: ../libpurple/protocols/msnp9/error.c:135 +#, c-format msgid "Command disabled" msgstr "নির্দেশ নিষ্ক্রিয়" -#: ../libpurple/protocols/msn/error.c:134 -#: ../libpurple/protocols/msnp9/error.c:139 +#, c-format msgid "File operation error" msgstr "ফাইল পরিচালনের ত্রুটি" # tithi -#: ../libpurple/protocols/msn/error.c:138 -#: ../libpurple/protocols/msnp9/error.c:143 +#, c-format msgid "Memory allocation error" msgstr "মেমোরি বরাদ্দে ত্রুটি" # tithi -#: ../libpurple/protocols/msn/error.c:142 -#: ../libpurple/protocols/msnp9/error.c:147 +#, c-format msgid "Wrong CHL value sent to server" msgstr "ভূল CHL মান সার্ভারে পাঠিয়েছিল" -#: ../libpurple/protocols/msn/error.c:147 -#: ../libpurple/protocols/msnp9/error.c:152 +#, c-format msgid "Server busy" msgstr "সার্ভার ব্যস্ত" -#: ../libpurple/protocols/msn/error.c:150 -#: ../libpurple/protocols/msn/error.c:164 -#: ../libpurple/protocols/msn/error.c:222 -#: ../libpurple/protocols/msnp9/error.c:155 -#: ../libpurple/protocols/msnp9/error.c:170 -#: ../libpurple/protocols/msnp9/error.c:230 +#, c-format msgid "Server unavailable" msgstr "সার্ভার অপ্রাপ্য " # fix me tithi -#: ../libpurple/protocols/msn/error.c:153 -#: ../libpurple/protocols/msnp9/error.c:158 +#, c-format msgid "Peer notification server down" msgstr "পিয়ার প্রজ্ঞাপন সার্ভার নিস্ক্রিয়" -#: ../libpurple/protocols/msn/error.c:157 -#: ../libpurple/protocols/msnp9/error.c:162 +#, c-format msgid "Database connect error" msgstr "উপাত্তধার সংযোগে ত্রুটি" # tithi -#: ../libpurple/protocols/msn/error.c:161 -#: ../libpurple/protocols/msnp9/error.c:167 +#, c-format msgid "Server is going down (abandon ship)" msgstr "সার্ভার নিস্ক্রিয় হয়ে যাচ্ছে (ত্যাগ করুন)" # tithi -#: ../libpurple/protocols/msn/error.c:168 -#: ../libpurple/protocols/msnp9/error.c:174 +#, c-format msgid "Error creating connection" msgstr "সংযোগ তৈরিতে ত্রুটি" # tithi -#: ../libpurple/protocols/msn/error.c:172 -#: ../libpurple/protocols/msnp9/error.c:179 +#, c-format msgid "CVR parameters are either unknown or not allowed" msgstr "CVR প্যারামিটারসমূহ হয় অজানা বা অনুমোদিত নয়" -#: ../libpurple/protocols/msn/error.c:176 -#: ../libpurple/protocols/msnp9/error.c:183 +#, c-format msgid "Unable to write" msgstr "লিখতে সমর্থ নয়" # tithi -#: ../libpurple/protocols/msn/error.c:179 -#: ../libpurple/protocols/msnp9/error.c:186 +#, c-format msgid "Session overload" msgstr "অধিবেশন অতিরিক্ত" # tithi -#: ../libpurple/protocols/msn/error.c:183 -#: ../libpurple/protocols/msnp9/error.c:190 +#, c-format msgid "User is too active" msgstr "ব্যবহারকারী অনেক বেশি সক্রিয়" # tithi -#: ../libpurple/protocols/msn/error.c:186 -#: ../libpurple/protocols/msnp9/error.c:193 +#, c-format msgid "Too many sessions" msgstr "অনেক বেশি অধিবেশন" # tithi -#: ../libpurple/protocols/msn/error.c:189 -#: ../libpurple/protocols/msnp9/error.c:196 +#, c-format msgid "Passport not verified" msgstr "পাসপোর্ট পরীক্ষা করা হয়নি" # tithi -#: ../libpurple/protocols/msn/error.c:192 -#: ../libpurple/protocols/msnp9/error.c:199 +#, c-format msgid "Bad friend file" msgstr "খারাপ বন্ধু ফাইল" # tithi -#: ../libpurple/protocols/msn/error.c:196 -#: ../libpurple/protocols/msnp9/error.c:203 +#, c-format msgid "Not expected" msgstr "প্রত্যাশিত ছিল না" # tithi -#: ../libpurple/protocols/msn/error.c:201 -#: ../libpurple/protocols/msnp9/error.c:209 +#, c-format msgid "Friendly name changes too rapidly" msgstr "বন্ধুভাবাপন্ন নাম খুব দ্রুত পরিবর্তন হয়" -#: ../libpurple/protocols/msn/error.c:210 -#: ../libpurple/protocols/msnp9/error.c:218 +#, c-format msgid "Server too busy" msgstr "সার্ভার অত্যন্ত ব্যস্ত" # tithi -#: ../libpurple/protocols/msn/error.c:214 -#: ../libpurple/protocols/msnp9/error.c:222 -#: ../libpurple/protocols/oscar/oscar.c:1541 -#: ../libpurple/protocols/silc/silc.c:339 -#: ../libpurple/protocols/silc10/ops.c:1713 -#: ../libpurple/protocols/toc/toc.c:728 ../libpurple/proxy.c:1589 +#, c-format msgid "Authentication failed" msgstr "প্রমাণীকরণ ব্যর্থ" # tithi -#: ../libpurple/protocols/msn/error.c:217 -#: ../libpurple/protocols/msnp9/error.c:225 +#, c-format msgid "Not allowed when offline" msgstr "অফলাইনে অনুমোদিত নয়" # tithi -#: ../libpurple/protocols/msn/error.c:225 -#: ../libpurple/protocols/msnp9/error.c:233 +#, c-format msgid "Not accepting new users" msgstr "নতুন ব্যবহারকারী গ্রহণ করছে না" # tithi -#: ../libpurple/protocols/msn/error.c:228 -#: ../libpurple/protocols/msnp9/error.c:237 +#, c-format msgid "Kids Passport without parental consent" msgstr "অভিভাবক অনুমোদন ব্যতীত শিশুদের পাসপোর্ট" # tithi -#: ../libpurple/protocols/msn/error.c:231 -#: ../libpurple/protocols/msnp9/error.c:241 +#, c-format msgid "Passport account not yet verified" msgstr "এখনও পাসপোর্ট একাউন্ট পরীক্ষা করা হয়নি" # tithi -#: ../libpurple/protocols/msn/error.c:234 msgid "Passport account suspended" msgstr "পাসপোর্ট একাউন্ট স্থগিত" -#: ../libpurple/protocols/msn/error.c:237 -#: ../libpurple/protocols/msnp9/error.c:244 +#, c-format msgid "Bad ticket" msgstr "ত্রুটিযুক্ত টিকেট" # tithi -#: ../libpurple/protocols/msn/error.c:243 -#: ../libpurple/protocols/msnp9/error.c:249 #, c-format msgid "Unknown Error Code %d" msgstr "অজানা ত্রুটি কোড %d" # tithi -#: ../libpurple/protocols/msn/error.c:258 -#: ../libpurple/protocols/msnp9/error.c:263 #, c-format msgid "MSN Error: %s\n" msgstr "MSN ত্রুটি: %s\n" -#: ../libpurple/protocols/msn/group.h:36 msgid "Other Contacts" msgstr "অন্যান্য যোগাযোগসমূহ" -#: ../libpurple/protocols/msn/group.h:39 msgid "Non-IM Contacts" msgstr "IM নয় এমন যোগাযোগসমূহ" # tithi -#: ../libpurple/protocols/msn/msn.c:136 ../libpurple/protocols/msnp9/msn.c:137 msgid "Nudge" msgstr "একান্তে" -#: ../libpurple/protocols/msn/msn.c:137 ../libpurple/protocols/msnp9/msn.c:138 #, c-format msgid "%s has nudged you!" msgstr "%s আপনাকে একান্তে যোগ করেছেন!" # fix-me tithi -#: ../libpurple/protocols/msn/msn.c:137 ../libpurple/protocols/msnp9/msn.c:138 #, c-format msgid "Nudging %s..." msgstr "%s মনোযোগ আকর্ষন করছে..." -#: ../libpurple/protocols/msn/msn.c:150 ../libpurple/protocols/msnp9/msn.c:151 -#: ../libpurple/protocols/myspace/myspace.c:3002 msgid "Email Address..." msgstr "ই-মেইল ঠিকানা..." # tithi -#: ../libpurple/protocols/msn/msn.c:189 ../libpurple/protocols/msnp9/msn.c:190 msgid "Your new MSN friendly name is too long." msgstr "আপনার নতুন MSN বন্ধুভাবাপন্ন নাম খুব দীর্ঘ।" # tithi -#: ../libpurple/protocols/msn/msn.c:315 ../libpurple/protocols/msnp9/msn.c:298 msgid "Set your friendly name." msgstr "আপনার বন্ধুভাবাপন্ন নাম নির্ধারণ করুন।" # tithi -#: ../libpurple/protocols/msn/msn.c:316 ../libpurple/protocols/msnp9/msn.c:299 msgid "This is the name that other MSN buddies will see you as." msgstr "এটি এমন নাম যা দ্বারা অন্যান্য MSN বন্ধুরা আপনাকে দেখবে।" # tithi -#: ../libpurple/protocols/msn/msn.c:334 ../libpurple/protocols/msnp9/msn.c:317 msgid "Set your home phone number." msgstr "আপনার বাসার ফোন নাম্বার দিন।" # tithi -#: ../libpurple/protocols/msn/msn.c:351 ../libpurple/protocols/msnp9/msn.c:334 msgid "Set your work phone number." msgstr "আপনার কাজের ফোন নাম্বার দিন।" # tithi -#: ../libpurple/protocols/msn/msn.c:368 ../libpurple/protocols/msnp9/msn.c:351 msgid "Set your mobile phone number." msgstr "আপনার মোবাইল ফোন নাম্বার দিন।" # tithi -#: ../libpurple/protocols/msn/msn.c:383 ../libpurple/protocols/msnp9/msn.c:366 msgid "Allow MSN Mobile pages?" msgstr "MSN মোবাইল পেজগুলো কি অনুমোদন করবেন?" # tithi -#: ../libpurple/protocols/msn/msn.c:384 ../libpurple/protocols/msnp9/msn.c:367 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?" @@ -7398,102 +5252,65 @@ msgstr "" "আপনি কি আপনার বন্ধু তালিকার জনগণকে আপনার সেল ফোন বা অন্যান্য মোবাইল ডিভাইসে MSN " "মোবাইল পৃষ্ঠাসমূহ পাঠাতে অনুমোদন দিতে চান বা চান না?" -#: ../libpurple/protocols/msn/msn.c:390 ../libpurple/protocols/msnp9/msn.c:373 msgid "Allow" msgstr "অনুমোদন করুন" -#: ../libpurple/protocols/msn/msn.c:391 ../libpurple/protocols/msnp9/msn.c:374 msgid "Disallow" msgstr "অনুমোদন করবিন না" -#: ../libpurple/protocols/msn/msn.c:406 #, c-format msgid "Blocked Text for %s" msgstr "%s এর জন্য ব্লককৃত পাঠ" # tithi -#: ../libpurple/protocols/msn/msn.c:408 msgid "No text is blocked for this account." msgstr "এই একাউন্টটির জন্য কোনো পাঠ আবদ্ধ নয়।" # tithi -#: ../libpurple/protocols/msn/msn.c:411 #, c-format msgid "" "MSN servers are currently blocking the following regular expressions:<br/>%s" msgstr "MSN সার্ভার বর্তমানে নিম্নলিখিত নিয়মিত রাশিসমূহ আবদ্ধ করছে:<br/>%s" # tithi -#: ../libpurple/protocols/msn/msn.c:432 msgid "This account does not have email enabled." msgstr "এই একাউন্টটি ই-মেইল সক্রিয় নেই।" -#: ../libpurple/protocols/msn/msn.c:472 ../libpurple/protocols/msnp9/msn.c:416 msgid "Send a mobile message." msgstr "মোবাইল বার্তা পাঠান।" -#: ../libpurple/protocols/msn/msn.c:474 ../libpurple/protocols/msnp9/msn.c:418 msgid "Page" msgstr "পৃষ্ঠা" -#: ../libpurple/protocols/msn/msn.c:718 msgid "Playing a game" msgstr "একটি খেলা খেলছে" -#: ../libpurple/protocols/msn/msn.c:721 msgid "Working" msgstr "কাজ করছে" # tithi -#: ../libpurple/protocols/msn/msn.c:795 ../libpurple/protocols/msnp9/msn.c:565 msgid "Has you" msgstr "আপনার কি" -#: ../libpurple/protocols/msn/msn.c:803 ../libpurple/protocols/msnp9/msn.c:586 msgid "Home Phone Number" msgstr "বাসার ফোন নম্বর" -#: ../libpurple/protocols/msn/msn.c:807 ../libpurple/protocols/msnp9/msn.c:590 msgid "Work Phone Number" msgstr "অফিসের ফোন নম্বর " -#: ../libpurple/protocols/msn/msn.c:811 ../libpurple/protocols/msnp9/msn.c:594 msgid "Mobile Phone Number" msgstr "মোবাইল ফোন নম্বর" -#: ../libpurple/protocols/msn/msn.c:834 ../libpurple/protocols/msn/state.c:33 -#: ../libpurple/protocols/msnp9/msn.c:613 -#: ../libpurple/protocols/msnp9/state.c:33 -#: ../libpurple/protocols/yahoo/yahoo.c:3155 -#: ../libpurple/protocols/yahoo/yahoo.c:3864 msgid "Be Right Back" msgstr "এক্ষুনি আসছি" -#: ../libpurple/protocols/msn/msn.c:840 ../libpurple/protocols/msn/state.c:31 -#: ../libpurple/protocols/msnp9/msn.c:617 -#: ../libpurple/protocols/msnp9/state.c:31 -#: ../libpurple/protocols/novell/novell.c:2840 -#: ../libpurple/protocols/novell/novell.c:2970 -#: ../libpurple/protocols/qq/qq.c:273 ../libpurple/protocols/qq/qq.c:421 -#: ../libpurple/protocols/silc/buddy.c:1495 -#: ../libpurple/protocols/silc/silc.c:57 -#: ../libpurple/protocols/silc10/buddy.c:1495 -#: ../libpurple/protocols/silc10/silc.c:48 -#: ../libpurple/protocols/yahoo/yahoo.c:3157 -#: ../libpurple/protocols/yahoo/yahoo.c:3867 msgid "Busy" msgstr "ব্যস্ত" -#: ../libpurple/protocols/msn/msn.c:845 ../libpurple/protocols/msnp9/msn.c:621 -#: ../libpurple/protocols/yahoo/yahoo.c:3165 -#: ../libpurple/protocols/yahoo/yahoo.c:3879 msgid "On the Phone" msgstr "ফোন এ কথা বলছি" # tithi -#: ../libpurple/protocols/msn/msn.c:850 ../libpurple/protocols/msnp9/msn.c:625 -#: ../libpurple/protocols/yahoo/yahoo.c:3169 -#: ../libpurple/protocols/yahoo/yahoo.c:3885 msgid "Out to Lunch" msgstr "দুপুরে খাবার জন্য বাইরে" @@ -7503,361 +5320,203 @@ msgstr "দুপুরে খাবার জন্য বাইরে" #. saveable #. should be user_settable some day #. independent -#: ../libpurple/protocols/msn/msn.c:869 -#: ../libpurple/protocols/myspace/myspace.c:506 msgid "Artist" msgstr "শিল্পী" -#: ../libpurple/protocols/msn/msn.c:870 msgid "Album" msgstr "এ্যালবাম" -#: ../libpurple/protocols/msn/msn.c:872 msgid "Game Title" msgstr "খেলার শিরোনাম" -#: ../libpurple/protocols/msn/msn.c:873 msgid "Office Title" msgstr "অফিসের শিরোনাম" -#: ../libpurple/protocols/msn/msn.c:886 ../libpurple/protocols/msnp9/msn.c:653 msgid "Set Friendly Name..." msgstr "বন্ধুসুলভ নাম নির্ধারন করুন..." -#: ../libpurple/protocols/msn/msn.c:891 ../libpurple/protocols/msnp9/msn.c:658 msgid "Set Home Phone Number..." msgstr "বাসার ফোন নম্বর নির্ধারন করুন..." -#: ../libpurple/protocols/msn/msn.c:895 ../libpurple/protocols/msnp9/msn.c:662 msgid "Set Work Phone Number..." msgstr "অফিসের ফোন নম্বর নির্ধারন করুন..." -#: ../libpurple/protocols/msn/msn.c:899 ../libpurple/protocols/msnp9/msn.c:666 msgid "Set Mobile Phone Number..." msgstr "মোবাইল ফোন নম্বর নির্ধারন করুন..." -#: ../libpurple/protocols/msn/msn.c:905 ../libpurple/protocols/msnp9/msn.c:672 msgid "Enable/Disable Mobile Devices..." msgstr "মোবাইল ডিভাইসসমূহ সক্রিয়/নিষ্ক্রিয় করুন..." # tithi -#: ../libpurple/protocols/msn/msn.c:910 ../libpurple/protocols/msnp9/msn.c:677 msgid "Allow/Disallow Mobile Pages..." msgstr "মোবাইল পৃষ্ঠাগুলোকে অনুমোদন করুন/করবেন না..." # tithi -#: ../libpurple/protocols/msn/msn.c:917 msgid "View Blocked Text..." msgstr "ব্লককৃত পাঠ দেখান..." -#: ../libpurple/protocols/msn/msn.c:923 ../libpurple/protocols/msnp9/msn.c:688 msgid "Open Hotmail Inbox" msgstr "হটমেইল ইনবক্স খুলুন" -#: ../libpurple/protocols/msn/msn.c:946 ../libpurple/protocols/msnp9/msn.c:712 msgid "Send to Mobile" msgstr "মোবাইলে পাঠান" # tithi -#: ../libpurple/protocols/msn/msn.c:956 ../libpurple/protocols/msnp9/msn.c:722 -#: ../libpurple/protocols/novell/novell.c:3426 msgid "Initiate _Chat" msgstr "আড্ডা প্রস্তুত করুন (_C)" -#: ../libpurple/protocols/msn/msn.c:994 ../libpurple/protocols/msnp9/msn.c:761 msgid "SSL support is needed for MSN. Please install a supported SSL library." msgstr "" "MSN এর জন্য SSL সমর্থন প্রয়োজন। অনুগ্রহ করে একটি সমর্থিত SSL লাইব্রেরী সংস্থাপন করুন।" -#: ../libpurple/protocols/msn/msn.c:1025 -#: ../libpurple/protocols/msnp9/msn.c:792 msgid "Failed to connect to server." msgstr "সার্ভারে সংযোগ দিতে ব্যর্থ হয়েছে।" # tithi -#: ../libpurple/protocols/msn/msn.c:1951 ../libpurple/protocols/msn/msn.c:2293 -#: ../libpurple/protocols/msnp9/msn.c:1655 -#: ../libpurple/protocols/msnp9/msn.c:1998 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:809 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1200 msgid "Error retrieving profile" msgstr "বৃত্তান্ত উদ্ধারে ত্রুটি" -#: ../libpurple/protocols/msn/msn.c:2015 -#: ../libpurple/protocols/msnp9/msn.c:1721 ../pidgin/plugins/convcolors.c:371 -#: ../pidgin/plugins/pidginrc.c:375 msgid "General" msgstr "সাধারন" -#: ../libpurple/protocols/msn/msn.c:2022 -#: ../libpurple/protocols/msnp9/msn.c:1728 -#: ../libpurple/protocols/myspace/user.c:126 -#: ../libpurple/protocols/oscar/oscar.c:3960 -#: ../libpurple/protocols/qq/buddy_info.c:118 -#: ../libpurple/protocols/qq/qq.c:309 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1081 msgid "Age" msgstr "বয়স" -#: ../libpurple/protocols/msn/msn.c:2024 -#: ../libpurple/protocols/msnp9/msn.c:1730 -#: ../libpurple/protocols/qq/buddy_info.c:127 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1096 msgid "Occupation" msgstr "পেশা" -#: ../libpurple/protocols/msn/msn.c:2025 -#: ../libpurple/protocols/msnp9/msn.c:1731 -#: ../libpurple/protocols/myspace/user.c:134 -#: ../libpurple/protocols/novell/novell.c:1487 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1076 -#: ../libpurple/protocols/zephyr/zephyr.c:801 -#: ../libpurple/protocols/zephyr/zephyr.c:1178 msgid "Location" msgstr "স্থান" -#: ../libpurple/protocols/msn/msn.c:2030 ../libpurple/protocols/msn/msn.c:2222 -#: ../libpurple/protocols/msn/msn.c:2228 ../libpurple/protocols/msn/msn.c:2235 -#: ../libpurple/protocols/msnp9/msn.c:1736 -#: ../libpurple/protocols/msnp9/msn.c:1928 -#: ../libpurple/protocols/msnp9/msn.c:1934 -#: ../libpurple/protocols/msnp9/msn.c:1941 msgid "Hobbies and Interests" msgstr "শখ এবং আগ্রহ" -#: ../libpurple/protocols/msn/msn.c:2036 ../libpurple/protocols/msn/msn.c:2156 -#: ../libpurple/protocols/msn/msn.c:2162 ../libpurple/protocols/msn/msn.c:2169 -#: ../libpurple/protocols/msn/msn.c:2177 ../libpurple/protocols/msn/msn.c:2184 -#: ../libpurple/protocols/msnp9/msn.c:1742 -#: ../libpurple/protocols/msnp9/msn.c:1862 -#: ../libpurple/protocols/msnp9/msn.c:1868 -#: ../libpurple/protocols/msnp9/msn.c:1875 -#: ../libpurple/protocols/msnp9/msn.c:1883 -#: ../libpurple/protocols/msnp9/msn.c:1890 msgid "A Little About Me" msgstr "আমার সম্পর্কে অল্প কিছু" -#: ../libpurple/protocols/msn/msn.c:2053 -#: ../libpurple/protocols/msnp9/msn.c:1759 msgid "Social" msgstr "সামাজিক" -#: ../libpurple/protocols/msn/msn.c:2055 -#: ../libpurple/protocols/msnp9/msn.c:1761 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1086 msgid "Marital Status" msgstr "বৈবাহিক অবস্থা" -#: ../libpurple/protocols/msn/msn.c:2056 -#: ../libpurple/protocols/msnp9/msn.c:1762 msgid "Interests" msgstr "আগ্রহসমূহ" -#: ../libpurple/protocols/msn/msn.c:2057 -#: ../libpurple/protocols/msnp9/msn.c:1763 msgid "Pets" msgstr "পোষা প্রাণীসমূহ" -#: ../libpurple/protocols/msn/msn.c:2058 -#: ../libpurple/protocols/msnp9/msn.c:1764 msgid "Hometown" msgstr "শহুরে-বাড়ি" -#: ../libpurple/protocols/msn/msn.c:2059 -#: ../libpurple/protocols/msnp9/msn.c:1765 msgid "Places Lived" msgstr "বসবাসরত অবস্থান" -#: ../libpurple/protocols/msn/msn.c:2060 -#: ../libpurple/protocols/msnp9/msn.c:1766 msgid "Fashion" msgstr "ফ্যাশন" # tithi -#: ../libpurple/protocols/msn/msn.c:2061 -#: ../libpurple/protocols/msnp9/msn.c:1767 msgid "Humor" msgstr "হাস্যরস" -#: ../libpurple/protocols/msn/msn.c:2062 -#: ../libpurple/protocols/msnp9/msn.c:1768 msgid "Music" msgstr "সংগীত" -#: ../libpurple/protocols/msn/msn.c:2063 ../libpurple/protocols/msn/msn.c:2244 -#: ../libpurple/protocols/msn/msn.c:2250 -#: ../libpurple/protocols/msnp9/msn.c:1769 -#: ../libpurple/protocols/msnp9/msn.c:1950 -#: ../libpurple/protocols/msnp9/msn.c:1956 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1138 msgid "Favorite Quote" msgstr "প্রিয় উক্তি" -#: ../libpurple/protocols/msn/msn.c:2080 -#: ../libpurple/protocols/msnp9/msn.c:1786 msgid "Contact Info" msgstr "যোগাযোগের তথ্য" -#: ../libpurple/protocols/msn/msn.c:2081 -#: ../libpurple/protocols/msnp9/msn.c:1787 msgid "Personal" msgstr "ব্যক্তিগত" # tithi -#: ../libpurple/protocols/msn/msn.c:2084 -#: ../libpurple/protocols/msnp9/msn.c:1790 msgid "Significant Other" msgstr "গুরুত্বপূর্ণ অন্যান্য" -#: ../libpurple/protocols/msn/msn.c:2085 -#: ../libpurple/protocols/msnp9/msn.c:1791 msgid "Home Phone" msgstr "বাসার ফোন" -#: ../libpurple/protocols/msn/msn.c:2086 -#: ../libpurple/protocols/msnp9/msn.c:1792 msgid "Home Phone 2" msgstr "বাসার ফোন ২" -#: ../libpurple/protocols/msn/msn.c:2087 -#: ../libpurple/protocols/msnp9/msn.c:1793 -#: ../libpurple/protocols/oscar/oscar.c:3976 msgid "Home Address" msgstr "বাসার ঠিকানা" -#: ../libpurple/protocols/msn/msn.c:2088 -#: ../libpurple/protocols/msnp9/msn.c:1794 msgid "Personal Mobile" msgstr "ব্যক্তিগত মোবাইল" -#: ../libpurple/protocols/msn/msn.c:2089 -#: ../libpurple/protocols/msnp9/msn.c:1795 msgid "Home Fax" msgstr "বাসার ফ্যাক্স" -#: ../libpurple/protocols/msn/msn.c:2090 -#: ../libpurple/protocols/msnp9/msn.c:1796 msgid "Personal Email" msgstr "ব্যক্তিগত ই-মেইল" -#: ../libpurple/protocols/msn/msn.c:2091 -#: ../libpurple/protocols/msnp9/msn.c:1797 msgid "Personal IM" msgstr "ব্যক্তিগত আইএম" # tithi -#: ../libpurple/protocols/msn/msn.c:2093 -#: ../libpurple/protocols/msnp9/msn.c:1799 msgid "Anniversary" msgstr "বার্ষিকী" #. Business -#: ../libpurple/protocols/msn/msn.c:2109 -#: ../libpurple/protocols/msnp9/msn.c:1815 msgid "Work" msgstr "অফিস" # tithi -#: ../libpurple/protocols/msn/msn.c:2111 -#: ../libpurple/protocols/msnp9/msn.c:1817 -#: ../libpurple/protocols/silc/ops.c:1024 -#: ../libpurple/protocols/silc10/ops.c:1044 msgid "Job Title" msgstr "কাজের শিরোনাম" -#: ../libpurple/protocols/msn/msn.c:2112 -#: ../libpurple/protocols/msnp9/msn.c:1818 -#: ../libpurple/protocols/oscar/oscar.c:3994 msgid "Company" msgstr "কোম্পানী" -#: ../libpurple/protocols/msn/msn.c:2113 -#: ../libpurple/protocols/msnp9/msn.c:1819 -#: ../libpurple/protocols/novell/novell.c:1489 msgid "Department" msgstr "বিভাগ" -#: ../libpurple/protocols/msn/msn.c:2114 -#: ../libpurple/protocols/msnp9/msn.c:1820 msgid "Profession" msgstr "পেশা" -#: ../libpurple/protocols/msn/msn.c:2115 -#: ../libpurple/protocols/msnp9/msn.c:1821 msgid "Work Phone" msgstr "অফিস ফোন" -#: ../libpurple/protocols/msn/msn.c:2116 -#: ../libpurple/protocols/msnp9/msn.c:1822 msgid "Work Phone 2" msgstr "অফিস ফোন ২" -#: ../libpurple/protocols/msn/msn.c:2117 -#: ../libpurple/protocols/msnp9/msn.c:1823 -#: ../libpurple/protocols/oscar/oscar.c:3984 msgid "Work Address" msgstr "অফিস ঠিকানা" -#: ../libpurple/protocols/msn/msn.c:2118 -#: ../libpurple/protocols/msnp9/msn.c:1824 msgid "Work Mobile" msgstr "অফিস মোবাইল" -#: ../libpurple/protocols/msn/msn.c:2119 -#: ../libpurple/protocols/msnp9/msn.c:1825 msgid "Work Pager" msgstr "অফিস পেইজার" -#: ../libpurple/protocols/msn/msn.c:2120 -#: ../libpurple/protocols/msnp9/msn.c:1826 msgid "Work Fax" msgstr "অফিস ফ্যাক্স" -#: ../libpurple/protocols/msn/msn.c:2121 -#: ../libpurple/protocols/msnp9/msn.c:1827 msgid "Work Email" msgstr "অফিস ই-মেইল" -#: ../libpurple/protocols/msn/msn.c:2122 -#: ../libpurple/protocols/msnp9/msn.c:1828 msgid "Work IM" msgstr "অফিস আইএম" -#: ../libpurple/protocols/msn/msn.c:2123 -#: ../libpurple/protocols/msnp9/msn.c:1829 msgid "Start Date" msgstr "শুরুর তারিখ" -#: ../libpurple/protocols/msn/msn.c:2193 ../libpurple/protocols/msn/msn.c:2199 -#: ../libpurple/protocols/msn/msn.c:2206 ../libpurple/protocols/msn/msn.c:2213 -#: ../libpurple/protocols/msnp9/msn.c:1899 -#: ../libpurple/protocols/msnp9/msn.c:1905 -#: ../libpurple/protocols/msnp9/msn.c:1912 -#: ../libpurple/protocols/msnp9/msn.c:1919 msgid "Favorite Things" msgstr "প্রিয় জিনিসসমূহ" -#: ../libpurple/protocols/msn/msn.c:2258 -#: ../libpurple/protocols/msnp9/msn.c:1964 msgid "Last Updated" msgstr "সর্বশেষ হালনাগাদকৃত" -#: ../libpurple/protocols/msn/msn.c:2269 -#: ../libpurple/protocols/msnp9/msn.c:1975 -#: ../libpurple/protocols/qq/buddy_info.c:128 -#: ../libpurple/protocols/silc/ops.c:1040 -#: ../libpurple/protocols/silc10/ops.c:1060 msgid "Homepage" msgstr "হোমপেজ" -#: ../libpurple/protocols/msn/msn.c:2295 -#: ../libpurple/protocols/msnp9/msn.c:1999 msgid "The user has not created a public profile." msgstr "ব্যবহারকারী কোনো জনসাধারণের প্রোফাইল তৈরী করেনি।" # tithi -#: ../libpurple/protocols/msn/msn.c:2296 -#: ../libpurple/protocols/msnp9/msn.c:2000 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 " @@ -7868,19 +5527,12 @@ msgstr "" "বৃত্তান্ত তৈরি করেনি।" # tithi -#: ../libpurple/protocols/msn/msn.c:2300 -#: ../libpurple/protocols/msnp9/msn.c:2004 msgid "" "Could not find any information in the user's profile. The user most likely " "does not exist." msgstr "" "ব্যবহারকারীর বৃত্তান্তে কোনো তথ্য খুঁজে পায়নি। ব্যবহারকারী সম্ভবত বিদ্যমান থাকবে না।" -#: ../libpurple/protocols/msn/msn.c:2308 -#: ../libpurple/protocols/myspace/user.c:193 -#: ../libpurple/protocols/myspace/user.c:196 -#: ../libpurple/protocols/oscar/oscar.c:3192 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1236 msgid "View web profile" msgstr "ওয়েব প্রোফাইল দেখুন" @@ -7893,139 +5545,91 @@ msgstr "ওয়েব প্রোফাইল দেখুন" #. *< name #. *< version #. *< summary -#: ../libpurple/protocols/msn/msn.c:2596 ../libpurple/protocols/msn/msn.c:2597 msgid "Windows Live Messenger Protocol Plugin" msgstr "উইন্ডোজের সরাসরি মেসেনজার প্রোটোকল প্লাগইন" # tithi -#: ../libpurple/protocols/msn/msn.c:2631 -#: ../libpurple/protocols/msnp9/msn.c:2335 msgid "Use HTTP Method" msgstr "HTTP পদ্ধতি ব্যবহার করুন" -#: ../libpurple/protocols/msn/msn.c:2636 -#: ../libpurple/protocols/msnp9/msn.c:2340 msgid "HTTP Method Server" msgstr "HTTP পদ্ধতির সার্ভার" # tithi -#: ../libpurple/protocols/msn/msn.c:2641 -#: ../libpurple/protocols/msnp9/msn.c:2345 msgid "Show custom smileys" msgstr "স্বনির্বাচিত স্মাইলীগুলো দেখান" # fix -me tithi -#: ../libpurple/protocols/msn/msn.c:2649 -#: ../libpurple/protocols/msnp9/msn.c:2353 msgid "nudge: nudge a user to get their attention" msgstr "নাজ: ব্যবহারকারীদের মনোযোগ পেতে তাদেরকে নাজ দিন" # tithi -#: ../libpurple/protocols/msn/nexus.c:359 msgid "Windows Live ID authentication:Unable to connect" msgstr "উইন্ডোজ সরাসরি আইডি প্রমাণীকরণ:সংযোগ করতে অক্ষম" # tithi -#: ../libpurple/protocols/msn/nexus.c:366 msgid "Windows Live ID authentication:Invalid response" msgstr "উইন্ডোজ সরাসরি আইডি প্রমাণীকরণ:অবৈধ সাড়া" -#: ../libpurple/protocols/msn/notification.c:176 -#: ../libpurple/protocols/msnp9/notification.c:178 #, c-format msgid "%s is not a valid group." msgstr "%s কোনো বৈধ গ্রুপ নয়।" -#: ../libpurple/protocols/msn/notification.c:182 -#: ../libpurple/protocols/msn/notification.c:961 -#: ../libpurple/protocols/msn/session.c:391 -#: ../libpurple/protocols/msnp9/notification.c:184 -#: ../libpurple/protocols/msnp9/notification.c:534 -#: ../libpurple/protocols/msnp9/session.c:353 -#: ../libpurple/protocols/yahoo/yahoo.c:2140 msgid "Unknown error." msgstr "অজানা ত্রুটি।" -#: ../libpurple/protocols/msn/notification.c:185 -#: ../libpurple/protocols/msnp9/notification.c:187 #, c-format msgid "%s on %s (%s)" msgstr "%2s (%3s) এ %1s" -#: ../libpurple/protocols/msn/notification.c:475 #, c-format msgid "%s just sent you a Nudge!" msgstr "%s আপনার দৃষ্টি আকর্ষন করছে!" #. char *adl = g_strndup(payload, len); -#: ../libpurple/protocols/msn/notification.c:765 -#: ../libpurple/protocols/msn/notification.c:795 #, c-format msgid "Unknown error (%d)" msgstr "অজানা ত্রুটি (%d)" -#: ../libpurple/protocols/msn/notification.c:773 -#: ../libpurple/protocols/msn/notification.c:796 -#: ../libpurple/protocols/sametime/sametime.c:4487 msgid "Unable to add user" msgstr "ব্যবহারকারী যোগ করতে সমর্থ নয়" -#: ../libpurple/protocols/msn/notification.c:836 msgid "The following users are missing from your addressbook" msgstr "আপনার ঠিকানা বই থেকে নিম্নোক্ত ব্যবহারকারীরা হারিয়ে গেছে" -#: ../libpurple/protocols/msn/notification.c:927 -#: ../libpurple/protocols/msnp9/notification.c:500 #, c-format msgid "Unable to add user on %s (%s)" msgstr "%1s (%2s) এ ব্যবহারকারী যোগ করতে সমর্থ নয়" -#: ../libpurple/protocols/msn/notification.c:931 -#: ../libpurple/protocols/msnp9/notification.c:504 #, c-format msgid "Unable to block user on %s (%s)" msgstr "%1s (%2s) এ ব্যবহারকারী আবদ্ধ করতে সমর্থ নয়" -#: ../libpurple/protocols/msn/notification.c:935 -#: ../libpurple/protocols/msnp9/notification.c:508 #, c-format msgid "Unable to permit user on %s (%s)" msgstr "%1s (%2s) ব্যবহারকারীকে অনুমতি প্রদান করতে সমর্থ নয়" -#: ../libpurple/protocols/msn/notification.c:943 -#: ../libpurple/protocols/msnp9/notification.c:516 #, c-format msgid "%s could not be added because your buddy list is full." msgstr "আপনার বন্ধু তালিকা পূর্ণ থাকার কারণে %s কে যোগ করা যাচ্ছে না।" -#: ../libpurple/protocols/msn/notification.c:952 -#: ../libpurple/protocols/msnp9/notification.c:525 #, c-format msgid "%s is not a valid passport account." msgstr "%s বৈধ পাসপোর্ট একাউন্ট নয়।" -#: ../libpurple/protocols/msn/notification.c:957 -#: ../libpurple/protocols/msnp9/notification.c:530 msgid "Service Temporarily Unavailable." msgstr "সাময়িকভাবে সেবা পাওয়া যাচ্ছে না।" -#: ../libpurple/protocols/msn/notification.c:1196 msgid "Mobile message was not sent because it was too long." msgstr "মোবাইল বার্তাটি অনেক বড় বিধায় পাঠানো হয়নি।" -#: ../libpurple/protocols/msn/notification.c:1375 -#: ../libpurple/protocols/msnp9/notification.c:899 msgid "Unable to rename group" msgstr "গ্রুপ পুনরায় নামকরণ করতে সমর্থ নয়" -#: ../libpurple/protocols/msn/notification.c:1402 -#: ../libpurple/protocols/msnp9/notification.c:954 msgid "Unable to delete group" msgstr "গ্রুপ মুছে ফেলতে অক্ষম" # tithi -#: ../libpurple/protocols/msn/notification.c:1935 -#: ../libpurple/protocols/msnp9/notification.c:1373 #, c-format msgid "" "The MSN server will shut down for maintenance in %d minute. You will " @@ -8053,7 +5657,6 @@ msgstr[1] "" "রক্ষনাবেক্ষন সম্পূর্ন হবার পর, আপনি সফলভাবে সাইন ইন করতে পারবেন।" # tithi -#: ../libpurple/protocols/msn/oim.c:400 msgid "" "Message was not sent because the system is unavailable. This normally " "happens when the user is blocked or does not exist." @@ -8061,42 +5664,26 @@ msgstr "" "বার্তা পাঠানো হয়নি কারণ সিস্টেম সহজলভ্য নয়। এইটি সাধারণত ঘটে যখন ব্যবহারকারী " "আবদ্ধ বা ব্যবহারকারী বিদ্যমান থাকে না।" -#: ../libpurple/protocols/msn/oim.c:405 msgid "Message was not sent because messages are being sent too quickly." msgstr "বার্তা পাঠানো যায়নি কারণ বার্তাগুলো খুব তাড়াতাড়ি পাঠানো হচ্ছিল।" -#: ../libpurple/protocols/msn/oim.c:409 msgid "Message was not sent because an unknown encoding error occurred." msgstr "অজানা সঙ্কেতায়ন ত্রুটি সংঘটিত হওয়ার কারণে বার্তা পাঠানো যায়নি।" -#: ../libpurple/protocols/msn/oim.c:413 msgid "Message was not sent because an unknown error occurred." msgstr "অজানা ত্রুটি সংঘটিত হওয়ার কারণে বার্তা পাঠানো যায়নি।" -#: ../libpurple/protocols/msn/servconn.c:134 -#: ../libpurple/protocols/msnp9/nexus.c:146 -#: ../libpurple/protocols/msnp9/servconn.c:133 -#: ../libpurple/protocols/qq/qq_network.c:840 -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1565 -#: ../libpurple/protocols/yahoo/yahoochat.c:1425 -#: ../libpurple/protocols/yahoo/yahoochat.c:1451 msgid "Unable to connect" msgstr "সংযোগ করতে সমর্থ নয়" # tithi -#: ../libpurple/protocols/msn/servconn.c:136 -#: ../libpurple/protocols/msnp9/servconn.c:135 msgid "Writing error" msgstr "লিখন ত্রুটি" -#: ../libpurple/protocols/msn/servconn.c:138 -#: ../libpurple/protocols/msnp9/servconn.c:137 msgid "Reading error" msgstr "পাঠ ত্রুটি" # tithi -#: ../libpurple/protocols/msn/servconn.c:145 -#: ../libpurple/protocols/msnp9/servconn.c:144 #, c-format msgid "" "Connection error from %s server:\n" @@ -8105,44 +5692,28 @@ msgstr "" "%1s সার্ভার হতে সংযোগের ত্রুটি:\n" "%2s" -#: ../libpurple/protocols/msn/session.c:353 -#: ../libpurple/protocols/msnp9/session.c:315 msgid "Our protocol is not supported by the server." msgstr "আমাদের প্রটোকল সার্ভার সমর্থন করে না।" -#: ../libpurple/protocols/msn/session.c:358 -#: ../libpurple/protocols/msnp9/session.c:320 msgid "Error parsing HTTP." msgstr "HTTP পার্স করতে ত্রুটি।" -#: ../libpurple/protocols/msn/session.c:362 -#: ../libpurple/protocols/msnp9/session.c:324 -#: ../libpurple/protocols/oscar/flap_connection.c:439 -#: ../libpurple/protocols/yahoo/yahoo.c:161 msgid "You have signed on from another location." msgstr "আপনি অন্য স্থান থেকে সাইন অন করেছেন।" -#: ../libpurple/protocols/msn/session.c:368 -#: ../libpurple/protocols/msnp9/session.c:330 msgid "The MSN servers are temporarily unavailable. Please wait and try again." msgstr "" "সাময়িকভাবে এমএসএন সার্ভার পাওয়া যাচ্ছে না। অনুগ্রহ করে অপেক্ষা করুন এবং পুনরায় " "চেষ্টা করুন" # tithi -#: ../libpurple/protocols/msn/session.c:374 -#: ../libpurple/protocols/msnp9/session.c:336 msgid "The MSN servers are going down temporarily." msgstr "MSN সার্ভার সাময়িকভাবে নিস্ক্রিয় হচ্ছে।" -#: ../libpurple/protocols/msn/session.c:379 -#: ../libpurple/protocols/msnp9/session.c:341 #, c-format msgid "Unable to authenticate: %s" msgstr "প্রমাণীকরণ করতে অক্ষম: %s" -#: ../libpurple/protocols/msn/session.c:385 -#: ../libpurple/protocols/msnp9/session.c:347 msgid "" "Your MSN buddy list is temporarily unavailable. Please wait and try again." msgstr "" @@ -8150,84 +5721,52 @@ msgstr "" "পুনরায় চেষ্টা করুন।" # tithi -#: ../libpurple/protocols/msn/session.c:407 -#: ../libpurple/protocols/msn/session.c:409 -#: ../libpurple/protocols/msnp9/session.c:369 -#: ../libpurple/protocols/msnp9/session.c:371 msgid "Handshaking" msgstr "হ্যান্ডসেকিং" -#: ../libpurple/protocols/msn/session.c:408 -#: ../libpurple/protocols/msnp9/session.c:370 msgid "Transferring" msgstr "স্থানান্তর করছে" # tithi -#: ../libpurple/protocols/msn/session.c:410 -#: ../libpurple/protocols/msnp9/session.c:372 msgid "Starting authentication" msgstr "প্রমাণীকরণ শুরু করছে" # tithi -#: ../libpurple/protocols/msn/session.c:411 -#: ../libpurple/protocols/msnp9/session.c:373 msgid "Getting cookie" msgstr "কুকি গ্রহণ করছে" -#: ../libpurple/protocols/msn/session.c:413 -#: ../libpurple/protocols/msnp9/session.c:375 msgid "Sending cookie" msgstr "কুকি পাঠাচ্ছে" -#: ../libpurple/protocols/msn/session.c:414 -#: ../libpurple/protocols/msnp9/session.c:376 msgid "Retrieving buddy list" msgstr "বন্ধু তালিকা উদ্ধার করছে" -#: ../libpurple/protocols/msn/state.c:34 -#: ../libpurple/protocols/msnp9/state.c:34 msgid "Away From Computer" msgstr "কম্পিউটার থেকে দূরে" -#: ../libpurple/protocols/msn/state.c:35 -#: ../libpurple/protocols/msnp9/state.c:35 msgid "On The Phone" msgstr "ফোন এ কথা বলছে" -#: ../libpurple/protocols/msn/state.c:36 -#: ../libpurple/protocols/msnp9/state.c:36 msgid "Out To Lunch" msgstr "লাঞ্চ এর জন্য বাইরে" -#: ../libpurple/protocols/msn/switchboard.c:427 -#: ../libpurple/protocols/msnp9/switchboard.c:411 msgid "Message may have not been sent because a timeout occurred:" msgstr "সময় শেষ হয়ে যাওযার কারণে বার্তা সম্ভবত পাঠানো হয়নি:" # tithi -#: ../libpurple/protocols/msn/switchboard.c:463 -#: ../libpurple/protocols/msnp9/switchboard.c:419 msgid "Message could not be sent, not allowed while invisible:" msgstr "বার্তা পাঠানো যাবে না, অদৃশ্য অবস্থায় অনুমোদিত নয়:" -#: ../libpurple/protocols/msn/switchboard.c:467 -#: ../libpurple/protocols/msnp9/switchboard.c:423 msgid "Message could not be sent because the user is offline:" msgstr "বার্তা পাঠানো যাচ্ছে না কারণ ব্যবহারকারী অফলাইনে:" -#: ../libpurple/protocols/msn/switchboard.c:471 -#: ../libpurple/protocols/msnp9/switchboard.c:427 msgid "Message could not be sent because a connection error occurred:" msgstr "বার্তা পাঠানো যাচ্ছে না কারণ সংযোগে ত্রুটি সংঘটিত হয়েছে:" -#: ../libpurple/protocols/msn/switchboard.c:475 -#: ../libpurple/protocols/msnp9/switchboard.c:431 msgid "Message could not be sent because we are sending too quickly:" msgstr "বার্তা পাঠানো যাচ্ছে না কারন আমরা খুব তাড়াতাড়ি পাঠাচ্ছি:" # tithi -#: ../libpurple/protocols/msn/switchboard.c:479 -#: ../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:" @@ -8235,49 +5774,35 @@ msgstr "" "বার্তা পাঠানো যাচ্ছে না কারণ আমরা সার্ভারের সাথে একটি অধিবেশন প্রতিষ্ঠিত করতে " "অক্ষম ছিলাম। এটি সম্ভবত সার্ভার সমস্যা, কয়েক মিনিটের মধ্যে পুনরায় একটি চেষ্টা করুন:" -#: ../libpurple/protocols/msn/switchboard.c:486 -#: ../libpurple/protocols/msnp9/switchboard.c:442 msgid "" "Message could not be sent because an error with the switchboard occurred:" msgstr "সুইচবোর্ডে ত্রুটি থাকার কারনে বার্তা পাঠানো যায়নি:" -#: ../libpurple/protocols/msn/switchboard.c:494 -#: ../libpurple/protocols/msnp9/switchboard.c:450 msgid "Message may have not been sent because an unknown error occurred:" msgstr "একটি অজানা ত্রুটির সংঘটিত হওয়ার কারণে বার্তা হয়ত পাঠানো যায়নি:" -#: ../libpurple/protocols/msn/userlist.c:211 -#: ../libpurple/protocols/msnp9/userlist.c:262 #, c-format msgid "%s has added you to his or her buddy list." msgstr "%s আপনাকে তার বন্ধু তালিকায় যোগ করেছেন।" -#: ../libpurple/protocols/msn/userlist.c:276 -#: ../libpurple/protocols/msnp9/userlist.c:331 #, c-format msgid "%s has removed you from his or her buddy list." msgstr "%s আপনাকে তার বন্ধু তালিকা থেকে অপসারণ করেছে।" -#: ../libpurple/protocols/msn/userlist.c:641 msgid "Delete Buddy from Address Book?" msgstr "ঠিকানার বই থেকে কি বন্ধু মুছে ফেলতে চান?" -#: ../libpurple/protocols/msn/userlist.c:642 msgid "Do you want to delete this buddy from your address book as well?" msgstr "আপনি কি এই বন্ধুটিকেও আপনার ঠিকানা বই থেকে মুছে ফেলতে চান?" -#: ../libpurple/protocols/msn/userlist.c:698 -#: ../libpurple/protocols/msnp9/userlist.c:655 msgid "The username specified is invalid." msgstr "উল্লেখিত ব্য়বহারকারীর নামটি অবৈধ।" # tithi -#: ../libpurple/protocols/msnp9/msn.c:390 msgid "This Hotmail account may not be active." msgstr "এই হটমেইল একাউন্টটি সক্রিয় নাও থাকতে পারে।" # tithi -#: ../libpurple/protocols/msnp9/msn.c:2012 msgid "Profile URL" msgstr "প্রোফাইল URL" @@ -8291,92 +5816,69 @@ msgstr "প্রোফাইল URL" #. *< version #. * summary #. * description -#: ../libpurple/protocols/msnp9/msn.c:2299 -#: ../libpurple/protocols/msnp9/msn.c:2301 msgid "MSN Protocol Plugin" msgstr "MSN প্রোটোকল প্লাগইন" # tithi -#: ../libpurple/protocols/myspace/myspace.c:136 #, c-format msgid "No such user: %s" msgstr "এমন কোনো ব্যবহারকারী নেই: %s" -#: ../libpurple/protocols/myspace/myspace.c:138 msgid "User lookup" msgstr "ব্যবহারকারী দেখছে" -#: ../libpurple/protocols/myspace/myspace.c:675 msgid "Reading challenge" msgstr "পড়তে সমস্যা হচ্ছে" # fix me tithi -#: ../libpurple/protocols/myspace/myspace.c:685 msgid "Unexpected challenge length from server" msgstr "সার্ভারের অপ্রত্যাশিত চ্যালেঞ্জ সীমা" -#: ../libpurple/protocols/myspace/myspace.c:689 -#: ../libpurple/protocols/qq/qq_process.c:1010 msgid "Logging in" msgstr "সংযুক্ত হচ্ছে" -#: ../libpurple/protocols/myspace/myspace.c:786 msgid "MySpaceIM - No Username Set" msgstr "MySpaceIM - কোনো ব্যবহারকারীর নাম বিন্যাস করা হয়নি" # tithi -#: ../libpurple/protocols/myspace/myspace.c:787 msgid "You appear to have no MySpace username." msgstr "আপনি MySpace ব্যবহারকারীর-নাম ব্যতিত উপস্থিত হয়েছেন।" # tithi -#: ../libpurple/protocols/myspace/myspace.c:788 msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)" msgstr "আপনি কি এখন একটি নির্ধারণ করতে আগ্রহী? (নোট: এটি পরিবর্তন করা যায় না!)" -#: ../libpurple/protocols/myspace/myspace.c:825 -#: ../libpurple/protocols/qq/qq_base.c:484 -#: ../libpurple/protocols/qq/qq_base.c:533 -#: ../libpurple/protocols/qq/qq_base.c:577 msgid "Lost connection with server" msgstr "সার্ভারের সাথে সংযোগ বিচ্ছিন্ন হয়েছে" #. Can't write _()'d strings in array initializers. Workaround. -#: ../libpurple/protocols/myspace/myspace.c:861 msgid "New mail messages" msgstr "নতুন মেইল বার্তাসমূহ" # tithi -#: ../libpurple/protocols/myspace/myspace.c:862 msgid "New blog comments" msgstr "নতুন ব্লগ মন্তব্য" # tithi -#: ../libpurple/protocols/myspace/myspace.c:863 msgid "New profile comments" msgstr "নতুন প্রোফাইল মন্তব্য" # tithi -#: ../libpurple/protocols/myspace/myspace.c:864 msgid "New friend requests!" msgstr "নতুন বন্ধু অনুরোধ!" # tithi -#: ../libpurple/protocols/myspace/myspace.c:865 msgid "New picture comments" msgstr "নতুন ছবি মন্তব্য" # tithi -#: ../libpurple/protocols/myspace/myspace.c:893 msgid "MySpace" msgstr "MySpace" -#: ../libpurple/protocols/myspace/myspace.c:1000 msgid "IM Friends" msgstr "IM বন্ধুসমূহ" # tithi -#: ../libpurple/protocols/myspace/myspace.c:1136 #, c-format msgid "" "%d buddy was added or updated from the server (including buddies already on " @@ -8391,25 +5893,20 @@ msgstr[1] "" "সার্ভার থেকে %d বন্ধুসমূহ যোগ বা হালনাগাদ করা হয়েছিল ( সার্ভার-পার্শ্বের তালিকায় " "বিদ্যমান বন্ধুরা সহ)" -#: ../libpurple/protocols/myspace/myspace.c:1140 msgid "Add contacts from server" msgstr "সার্ভার থেকে যোগাযোগগুলো যোগ করুন" #. The session is now set up, ready to be connected. This emits the #. * signedOn signal, so clients can now do anything with msimprpl, and #. * we're ready for it (session key, userid, username all setup). -#: ../libpurple/protocols/myspace/myspace.c:1191 -#: ../libpurple/protocols/sametime/sametime.c:1553 msgid "Connected" msgstr "সংযুক্ত" -#: ../libpurple/protocols/myspace/myspace.c:1804 #, c-format msgid "Protocol error, code %d: %s" msgstr "প্রোটকল ত্রুটি, কোড %1d: %2s" # tithi -#: ../libpurple/protocols/myspace/myspace.c:1826 #, c-format msgid "" "%s Your password is %d characters, greater than the expected maximum length " @@ -8422,68 +5919,50 @@ msgstr "" "cfm?fuseaction=accountSettings। গুপ্তসংকেত সংক্ষিপ্ত করুন এবং পুনরায় চেষ্টা করুন।" # tithi -#: ../libpurple/protocols/myspace/myspace.c:1849 msgid "MySpaceIM Error" msgstr "MySpaceIM ত্রুটি" -#: ../libpurple/protocols/myspace/myspace.c:2014 msgid "Invalid input condition" msgstr "অবৈধ ইনপুট শর্ত" # tithi -#: ../libpurple/protocols/myspace/myspace.c:2069 msgid "Read buffer full (2)" msgstr "পাঠ বাফার পূর্ণ (২)" -#: ../libpurple/protocols/myspace/myspace.c:2112 msgid "Unparseable message" msgstr "পার্স অযোগ্য বার্তা" -#: ../libpurple/protocols/myspace/myspace.c:2155 #, c-format msgid "Couldn't connect to host: %s (%d)" msgstr "হোস্টের সাথে সংযুক্ত করা যায়নি: %1s (%2d)" -#: ../libpurple/protocols/myspace/myspace.c:2646 -#: ../libpurple/protocols/myspace/myspace.c:2680 msgid "Failed to add buddy" msgstr "বন্ধু যোগ করতে ব্যর্থ" -#: ../libpurple/protocols/myspace/myspace.c:2646 msgid "'addbuddy' command failed." msgstr "\"বন্ধু যোগ করুন\" নির্দেশটি ব্যর্থ হয়েছে।" -#: ../libpurple/protocols/myspace/myspace.c:2680 -#: ../libpurple/protocols/myspace/myspace.c:2728 msgid "persist command failed" msgstr "যুক্তির নির্দেশ ব্যর্থ হয়েছে" -#: ../libpurple/protocols/myspace/myspace.c:2709 -#: ../libpurple/protocols/myspace/myspace.c:2728 -#: ../libpurple/protocols/myspace/myspace.c:2741 msgid "Failed to remove buddy" msgstr "বন্ধু অপসারণ করতে ব্যর্থ হয়েছে" # tithi -#: ../libpurple/protocols/myspace/myspace.c:2709 msgid "'delbuddy' command failed" msgstr "'বন্ধু মুছে ফেলুন' নির্দেশ ব্যর্থ হয়েছে" -#: ../libpurple/protocols/myspace/myspace.c:2741 msgid "blocklist command failed" msgstr "ব্লক-লিস্ট নির্দেশ ব্যর্থ হয়েছে" -#: ../libpurple/protocols/myspace/myspace.c:3094 msgid "Missing Cipher" msgstr "হারিয়ে যাওয়া সাইফার" # tithi -#: ../libpurple/protocols/myspace/myspace.c:3095 msgid "The RC4 cipher could not be found" msgstr "RC4 ছাইফারকে খুঁজে পাওয়া যায়নি" # tithi -#: ../libpurple/protocols/myspace/myspace.c:3096 msgid "" "Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will " "not be loaded." @@ -8492,123 +5971,93 @@ msgstr "" "না।" # tithi -#: ../libpurple/protocols/myspace/myspace.c:3123 -#: ../libpurple/protocols/myspace/myspace.c:3189 msgid "Add friends from MySpace.com" msgstr "MySpace.com থেকে বন্ধু যোগ করুন" -#: ../libpurple/protocols/myspace/myspace.c:3124 msgid "Importing friends failed" msgstr "বন্ধুদের আনতে ব্যর্থ হয়েছে" #. TODO: find out how -#: ../libpurple/protocols/myspace/myspace.c:3182 msgid "Find people..." msgstr "জনগণ খুঁজুন..." -#: ../libpurple/protocols/myspace/myspace.c:3185 msgid "Change IM name..." msgstr "IM নাম পরিবর্তন করুন..." # tithi -#: ../libpurple/protocols/myspace/myspace.c:3571 msgid "myim URL handler" msgstr "myim URL নিয়ন্ত্রক" # tithi -#: ../libpurple/protocols/myspace/myspace.c:3572 msgid "No suitable MySpaceIM account could be found to open this myim URL." msgstr "এই myim URL খুলতে কোনো উপযুক্ত MySpaceIM একাউন্ট খুঁজে পাওয়া যাবে না।" # tithi -#: ../libpurple/protocols/myspace/myspace.c:3573 msgid "Enable the proper MySpaceIM account and try again." msgstr "উপযুক্ত MySpaceIM একাউন্ট সক্রিয় করুন এবং পুনরায় চেষ্টা করুন।" # tithi -#: ../libpurple/protocols/myspace/myspace.c:3634 msgid "Show display name in status text" msgstr "অবস্থা পাঠে প্রদর্শন নাম দেখান" # tithi -#: ../libpurple/protocols/myspace/myspace.c:3637 msgid "Show headline in status text" msgstr "অবস্থা পাঠে শিরোনাম দেখান" # fix me tithi -#: ../libpurple/protocols/myspace/myspace.c:3642 msgid "Send emoticons" msgstr "আবেগীয় প্রতীকগুলো পাঠান" # tithi -#: ../libpurple/protocols/myspace/myspace.c:3647 msgid "Screen resolution (dots per inch)" msgstr "পর্দার রিসোলিউশন (প্রতি ইঞ্চির ডট)" # fix me tithi -#: ../libpurple/protocols/myspace/myspace.c:3650 msgid "Base font size (points)" msgstr "ভিত্তির ফন্ট আকার (বিন্দু)" -#: ../libpurple/protocols/myspace/user.c:119 -#: ../libpurple/protocols/zephyr/zephyr.c:789 -#: ../libpurple/protocols/zephyr/zephyr.c:1167 msgid "User" msgstr "ব্যবহারকারী" -#: ../libpurple/protocols/myspace/user.c:139 msgid "Headline" msgstr "শিরোনাম" -#: ../libpurple/protocols/myspace/user.c:155 msgid "Song" msgstr "গান" # tithi -#: ../libpurple/protocols/myspace/user.c:165 msgid "Total Friends" msgstr "সব বন্ধু" -#: ../libpurple/protocols/myspace/user.c:183 -#: ../libpurple/protocols/qq/qq.c:1086 msgid "Client Version" msgstr "ক্লায়েন্ট সংস্করণ" -#: ../libpurple/protocols/myspace/user.c:815 msgid "MySpaceIM - Username Available" msgstr "MySpaceIM -ব্যবহারকারীর নাম সহজলভ্য" # tithi -#: ../libpurple/protocols/myspace/user.c:816 msgid "This username is available. Would you like to set it?" msgstr "এই ব্যবহারকারীর-নামটি সহজলভ্য। আপনি কি এটি নির্ধারন করতে আগ্রহী?" # tithi -#: ../libpurple/protocols/myspace/user.c:817 msgid "ONCE SET, THIS CANNOT BE CHANGED!" msgstr "একবার নির্ধারণ করলে, এটি আর পরিবর্তন করা যাবে না!" # tithi -#: ../libpurple/protocols/myspace/user.c:828 -#: ../libpurple/protocols/myspace/user.c:891 msgid "MySpaceIM - Please Set a Username" msgstr "MySpaceIM- অনুগ্রহ করে একটি ব্যবহারকারীর নাম নির্ধারন করুন" -#: ../libpurple/protocols/myspace/user.c:829 msgid "This username is unavailable." msgstr "এই ব্যহারকারীর নামটি অপ্রাপ্য।" -#: ../libpurple/protocols/myspace/user.c:830 msgid "Please try another username:" msgstr "অনুগ্রহ করে অন্য একটি ব্যবহারকারীর নাম চেষ্টা করুন:" #. Protocol won't log in now without a username set.. Disconnect -#: ../libpurple/protocols/myspace/user.c:881 msgid "No username set" msgstr "কোনো ব্যবহারকারীর নাম নির্ধারণ করা নেই" # tithi -#: ../libpurple/protocols/myspace/user.c:892 msgid "Please enter a username to check its availability:" msgstr "অনুগ্রহ করে এর সহজলভ্যতা পরীক্ষা করতে একটি ব্যবহারকারীর নাম প্রবেশ করান:" @@ -8619,35 +6068,28 @@ msgstr "অনুগ্রহ করে এর সহজলভ্যতা প #. * projectile or weapon." This term often has an electrical #. * connotation, for example, "he was zapped by electricity when #. * he put a fork in the toaster." -#: ../libpurple/protocols/myspace/zap.c:44 -#: ../libpurple/protocols/myspace/zap.c:217 msgid "Zap" msgstr "আক্রমণ করুন" -#: ../libpurple/protocols/myspace/zap.c:44 #, c-format msgid "%s has zapped you!" msgstr "%s আপনাকে আক্রমণ করেছে! " # tithi -#: ../libpurple/protocols/myspace/zap.c:45 #, c-format msgid "Zapping %s..." msgstr "%s আক্রমণ করছে ..." # tithi #. Whack means "to hit or strike someone with a sharp blow" -#: ../libpurple/protocols/myspace/zap.c:48 msgid "Whack" msgstr "সজোরে আঘাত করুন" -#: ../libpurple/protocols/myspace/zap.c:49 #, c-format msgid "%s has whacked you!" msgstr "%s আপনাকে আঘাত করেছে!" # tithi -#: ../libpurple/protocols/myspace/zap.c:49 #, c-format msgid "Whacking %s..." msgstr "%s সজোরে আঘাত করছে..." @@ -8655,83 +6097,68 @@ msgstr "%s সজোরে আঘাত করছে..." #. Torch means "to set on fire." Don't worry, this doesn't #. * make a whole lot of sense in English, either. Feel free #. * to translate it literally. -#: ../libpurple/protocols/myspace/zap.c:54 msgid "Torch" msgstr "আলোকপাত করুন" -#: ../libpurple/protocols/myspace/zap.c:55 #, c-format msgid "%s has torched you!" msgstr "%s আপনার উপর আলোকপাত করেছে!" # tithi -#: ../libpurple/protocols/myspace/zap.c:55 #, c-format msgid "Torching %s..." msgstr "%s আলোকপাত করছে..." # fix me tithi #. Smooch means "to kiss someone, often enthusiastically" -#: ../libpurple/protocols/myspace/zap.c:58 msgid "Smooch" msgstr "অন্তরঙ্গতা" -#: ../libpurple/protocols/myspace/zap.c:59 #, c-format msgid "%s has smooched you!" msgstr "%s আপনার সাথে অন্তরঙ্গ হয়েছে!" # fix me tithi -#: ../libpurple/protocols/myspace/zap.c:59 #, c-format msgid "Smooching %s..." msgstr "%s অন্তরঙ্গ করছে..." # tithi #. A hug is a display of affection; wrapping your arms around someone -#: ../libpurple/protocols/myspace/zap.c:62 msgid "Hug" msgstr "জড়িয়ে ধরুন" -#: ../libpurple/protocols/myspace/zap.c:62 #, c-format msgid "%s has hugged you!" msgstr "%s আপনাকে জড়িয়ে ধরেছে!" # tithi -#: ../libpurple/protocols/myspace/zap.c:63 #, c-format msgid "Hugging %s..." msgstr "%s জড়িয়ে ধরছে..." #. Slap means "to hit someone with an open/flat hand" -#: ../libpurple/protocols/myspace/zap.c:66 msgid "Slap" msgstr "চড় মারুন" -#: ../libpurple/protocols/myspace/zap.c:67 #, c-format msgid "%s has slapped you!" msgstr "%s আপনাকে চড় মেরেছে!" # tithi -#: ../libpurple/protocols/myspace/zap.c:67 #, c-format msgid "Slapping %s..." msgstr "%s চড় মারছে..." # fix me tithi #. Goose means "to pinch someone on their butt" -#: ../libpurple/protocols/myspace/zap.c:70 msgid "Goose" msgstr "আঘাত করুন" -#: ../libpurple/protocols/myspace/zap.c:71 #, c-format msgid "%s has goosed you!" msgstr "%s আপনাকে আঘাত করেছে!" -#: ../libpurple/protocols/myspace/zap.c:71 #, c-format msgid "Goosing %s..." msgstr "%s আঘাত করছে..." @@ -8740,17 +6167,14 @@ msgstr "%s আঘাত করছে..." #. A high-five is when two people's hands slap each other #. * in the air above their heads. It is done to celebrate #. * something, often a victory, or to congratulate someone. -#: ../libpurple/protocols/myspace/zap.c:76 msgid "High-five" msgstr "হাই-ফাইভ" -#: ../libpurple/protocols/myspace/zap.c:77 #, c-format msgid "%s has high-fived you!" msgstr "%s আপনার সাথে হাই-ফাইভ করেছে!" # tithi -#: ../libpurple/protocols/myspace/zap.c:77 #, c-format msgid "High-fiving %s..." msgstr "%s হাই-ফাইভ করেছে..." @@ -8759,17 +6183,14 @@ msgstr "%s হাই-ফাইভ করেছে..." #. We're not entirely sure what the MySpace people mean by #. * this... but we think it's the equivalent of "prank." Or, for #. * someone to perform a mischievous trick or practical joke. -#: ../libpurple/protocols/myspace/zap.c:82 msgid "Punk" msgstr "মজা" -#: ../libpurple/protocols/myspace/zap.c:83 #, c-format msgid "%s has punk'd you!" msgstr "%s আপনার সাথে মজা করেছে!" # tithi -#: ../libpurple/protocols/myspace/zap.c:83 #, c-format msgid "Punking %s..." msgstr "%s মজা করছে..." @@ -8782,199 +6203,157 @@ msgstr "%s মজা করছে..." #. * gesture, so it does not carry a harsh negative #. * connotation. It is generally used in a playful tone #. * with friends. -#: ../libpurple/protocols/myspace/zap.c:92 msgid "Raspberry" msgstr "অঙ্গভঙ্গি" # fix me tithi -#: ../libpurple/protocols/myspace/zap.c:93 #, c-format msgid "%s has raspberried you!" msgstr "%s আপনাকে অঙ্গভঙ্গি দিয়েছে!" # tithi -#: ../libpurple/protocols/myspace/zap.c:93 #, c-format msgid "Raspberrying %s..." msgstr "%s অঙ্গভঙ্গি করছে..." # tithi -#: ../libpurple/protocols/novell/nmuser.c:1864 msgid "Required parameters not passed in" msgstr "প্রয়োজনীয় মানসমূহ প্রবেশ করা হয়নি" -#: ../libpurple/protocols/novell/nmuser.c:1867 msgid "Unable to write to network" msgstr "নেটওয়ার্কে লিখতে ব্যর্থ" -#: ../libpurple/protocols/novell/nmuser.c:1870 msgid "Unable to read from network" msgstr "নেটওয়ার্ক থেকে পড়তে ব্যর্থ" # tithi -#: ../libpurple/protocols/novell/nmuser.c:1873 msgid "Error communicating with server" msgstr "সার্ভারের সাথে যোগাযোগের ত্রুটি" # tithi -#: ../libpurple/protocols/novell/nmuser.c:1877 msgid "Conference not found" msgstr "অধিবেশন পাওয়া যাচ্ছে না" # tithi -#: ../libpurple/protocols/novell/nmuser.c:1880 msgid "Conference does not exist" msgstr "অধিবেশন বিদ্যমান নয়" -#: ../libpurple/protocols/novell/nmuser.c:1884 msgid "A folder with that name already exists" msgstr "ইতোমধ্যে ঐ নামের একটি ফোল্ডার বিদ্যমান" -#: ../libpurple/protocols/novell/nmuser.c:1887 msgid "Not supported" msgstr "সমর্থিত নয়" -#: ../libpurple/protocols/novell/nmuser.c:1891 msgid "Password has expired" msgstr "গুপ্তসঙ্কেতের মেয়াদ শেষ" -#: ../libpurple/protocols/novell/nmuser.c:1894 msgid "Incorrect password" msgstr "ভুল গুপ্তসঙ্কেতে" -#: ../libpurple/protocols/novell/nmuser.c:1897 msgid "User not found" msgstr "ব্যবহারকারী খুঁজে পাওয়া যায়নি" -#: ../libpurple/protocols/novell/nmuser.c:1900 msgid "Account has been disabled" msgstr "একাউন্টটি নিষ্ক্রিয় করা হয়েছে" -#: ../libpurple/protocols/novell/nmuser.c:1903 msgid "The server could not access the directory" msgstr "সার্ভার নির্দেশিকায় প্রবেশ করতে পারে না" # tithi -#: ../libpurple/protocols/novell/nmuser.c:1906 msgid "Your system administrator has disabled this operation" msgstr "আপনার সিস্টেম প্রশাসক এই অপারেশনটি নিষ্ক্রিয় করেছে" # tithi -#: ../libpurple/protocols/novell/nmuser.c:1909 msgid "The server is unavailable; try again later" msgstr "সার্ভার অপ্রাপ্য; পরবর্তীতে আবার চেষ্টা করুন" -#: ../libpurple/protocols/novell/nmuser.c:1912 msgid "Cannot add a contact to the same folder twice" msgstr "একই ফোল্ডারে একটি যোগাযোগ দুইবার যোগ করা যাবে না" -#: ../libpurple/protocols/novell/nmuser.c:1915 msgid "Cannot add yourself" msgstr "আপনি নিজেকে যোগ করতে পারবেন না" # tithi -#: ../libpurple/protocols/novell/nmuser.c:1918 msgid "Master archive is misconfigured" msgstr "মাস্টার আর্কাইভ ভূলভাবে-বিন্যাসিত" -#: ../libpurple/protocols/novell/nmuser.c:1922 msgid "Incorrect username or password" msgstr "ভুল ব্যবহারকারীর নাম বা গুপ্তসংকেত" # tithi -#: ../libpurple/protocols/novell/nmuser.c:1925 msgid "Could not recognize the host of the username you entered" msgstr "আপনার প্রবেশকৃত ব্যবহারকারীর-নামের হোস্ট শনাক্ত করতে পারে না" -#: ../libpurple/protocols/novell/nmuser.c:1928 msgid "" "Your account has been disabled because too many incorrect passwords were " "entered" msgstr "" "আপনার একাউন্টটি নিষ্ক্রিয় করা হয়েছে কারণ অনেকগুলো ভুল গুপ্তসংকেত প্রবেশ করা হয়েছিল" -#: ../libpurple/protocols/novell/nmuser.c:1931 msgid "You cannot add the same person twice to a conversation" msgstr "আপনি একটি কথোপকথনে একই ব্যক্তিকে দুইবার যোগ করতে পারেন না" # tithi -#: ../libpurple/protocols/novell/nmuser.c:1935 msgid "You have reached your limit for the number of contacts allowed" msgstr "আপনি আপনার অনুমোদিত যোগাযোগ সংখ্যার সীমায় পৌঁছেছেন" -#: ../libpurple/protocols/novell/nmuser.c:1938 msgid "You have entered an incorrect username" msgstr "আপনি একটি ভুল ব্যবহারকারীর নাম প্রবেশ করেছেন" -#: ../libpurple/protocols/novell/nmuser.c:1941 msgid "An error occurred while updating the directory" msgstr "নির্দেশিকাটি হালনাগাদ করার সময় একটি ত্রুটি দেখা দিয়েছে" # tithi -#: ../libpurple/protocols/novell/nmuser.c:1944 msgid "Incompatible protocol version" msgstr "অসঙ্গতিপূর্ণ প্রোটোকল সংস্করণ" -#: ../libpurple/protocols/novell/nmuser.c:1947 msgid "The user has blocked you" msgstr "এই ব্যবহারকারী আপনাকে ব্লক করে রেখেছে" # tithi -#: ../libpurple/protocols/novell/nmuser.c:1950 msgid "" "This evaluation version does not allow more than ten users to log in at one " "time" msgstr "" "এই মূল্যায়ন সংস্করণটি একই সময়ে দশজন ব্যবহারকারীর অধিক লগইন করতে অনুমোদন করে না" -#: ../libpurple/protocols/novell/nmuser.c:1953 msgid "The user is either offline or you are blocked" msgstr "এই ব্যবহারকারী হয় অফলাইনে বা আপনাকে ব্লক করে রেখেছে" -#: ../libpurple/protocols/novell/nmuser.c:1956 #, c-format msgid "Unknown error: 0x%X" msgstr "অজানা ত্রুটি: 0x%X" -#: ../libpurple/protocols/novell/novell.c:124 #, c-format msgid "Login failed (%s)." msgstr "লগইন ব্যর্থ হয়েছে (%s)।" -#: ../libpurple/protocols/novell/novell.c:255 #, c-format msgid "Unable to send message. Could not get details for user (%s)." msgstr "" "বার্তা পাঠানো সম্ভব হয়নি। ব্যবহারকারী (%s) সম্পর্কে বিস্তারিত তথ্য পাওয়া যায়নি।" -#: ../libpurple/protocols/novell/novell.c:404 #, c-format msgid "Unable to add %s to your buddy list (%s)." msgstr "%s কে আপনার বন্ধুতালিকায় (%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 "বার্তা (%s) পাঠাতে সমর্থ নয়।" -#: ../libpurple/protocols/novell/novell.c:501 -#: ../libpurple/protocols/novell/novell.c:993 #, c-format msgid "Unable to invite user (%s)." msgstr "ব্যবহারকারীকে (%s) আমন্ত্রন জানাতে সমর্থ নয়।" -#: ../libpurple/protocols/novell/novell.c:540 #, c-format msgid "Unable to send message to %s. Could not create the conference (%s)." msgstr "%s এ বার্তা পাঠাতে সমর্থ নয়। অধিবেশন (%s) তৈরি করতে পারে না। " -#: ../libpurple/protocols/novell/novell.c:545 #, c-format msgid "Unable to send message. Could not create the conference (%s)." msgstr "বার্তা পাঠাতে সমর্থ নয়। অধিবেশন (%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 " @@ -8983,7 +6362,6 @@ msgstr "" "ব্যবহারকারী %s কে সার্ভারের পার্শ্বের তালিকার %s ফোল্ডারে সরিয়ে নিতে সমর্থ নয়। " "ফোল্ডার (%s) তৈরীর সময় ত্রুটি দেখা দিয়েছে।" -#: ../libpurple/protocols/novell/novell.c:640 #, c-format msgid "" "Unable to add %s to your buddy list. Error creating folder in server side " @@ -8993,65 +6371,49 @@ msgstr "" "তৈরীর সময় ত্রুটি দেখা দিয়েছে।" # tithi -#: ../libpurple/protocols/novell/novell.c:713 #, c-format msgid "Could not get details for user %s (%s)." msgstr "%1s (%2s) ব্যবহারকারীর জন্য বিস্তারিত বর্ণনা পাবে না।" # msgstr "ব্যবহারকারী %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 "ব্যক্তিগত তালিকায় (%s) ব্যবহারকারী যোগ করা সম্ভব হয়নি।" -#: ../libpurple/protocols/novell/novell.c:806 #, c-format msgid "Unable to add %s to deny list (%s)." msgstr "নিষিদ্ধ তালিকায় (%s) %s যোগ করা সম্ভব হয়নি।" -#: ../libpurple/protocols/novell/novell.c:859 #, c-format msgid "Unable to add %s to permit list (%s)." msgstr "অনুমোদিত তালিকায় (%s) %s যোগ করা সম্ভব হয়নি।" -#: ../libpurple/protocols/novell/novell.c:927 #, c-format msgid "Unable to remove %s from privacy list (%s)." msgstr "%s কে ব্যক্তিগত তালিকা (%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 "সার্ভার পার্শ্বের ব্যাক্তিগত বিন্যাসনসমূহ (%s) পরিবর্তন করতে সমর্থ হয়নি।" -#: ../libpurple/protocols/novell/novell.c:1020 #, c-format msgid "Unable to create conference (%s)." msgstr "অধিবেশন (%s) শুরু করতে সমর্থ হয়নি।" # tithi -#: ../libpurple/protocols/novell/novell.c:1131 -#: ../libpurple/protocols/novell/novell.c:1702 msgid "Error communicating with server. Closing connection." msgstr "সার্ভারের সঙ্গে যোগাযোগে ত্রুটি। সংযোগ বন্ধ করছে।" -#: ../libpurple/protocols/novell/novell.c:1485 msgid "Telephone Number" msgstr "টেলিফোন নম্বর" -#: ../libpurple/protocols/novell/novell.c:1491 msgid "Personal Title" msgstr "ব্যক্তিগত শিরোনাম" # tithi -#: ../libpurple/protocols/novell/novell.c:1495 msgid "Mailstop" msgstr "মেইল-বন্ধ" -#: ../libpurple/protocols/novell/novell.c:1511 -#: ../libpurple/protocols/sametime/sametime.c:4184 msgid "User ID" msgstr "ব্যবহারকারী আইডি" @@ -9061,39 +6423,31 @@ msgstr "ব্যবহারকারী আইডি" #. purple_notify_user_info_add_pair(user_info, tag, value); #. } #. -#: ../libpurple/protocols/novell/novell.c:1524 msgid "Full name" msgstr "সম্পূর্ন নাম" -#: ../libpurple/protocols/novell/novell.c:1646 #, c-format msgid "GroupWise Conference %d" msgstr "GroupWise অধিবেশন %d" # tithi -#: ../libpurple/protocols/novell/novell.c:1729 msgid "Authenticating..." msgstr "প্রমাণীকরণ..." -#: ../libpurple/protocols/novell/novell.c:1743 msgid "Unable to connect to server." msgstr "সার্ভারের সাথে সংযোগ স্থাপনে অসমর্থ।" -#: ../libpurple/protocols/novell/novell.c:1746 msgid "Waiting for response..." msgstr "উত্তরের জন্য অপেক্ষা করছে..." -#: ../libpurple/protocols/novell/novell.c:1881 #, c-format msgid "%s has been invited to this conversation." msgstr "%s এই কথোপকথনে আমন্ত্রিত হয়েছে।" -#: ../libpurple/protocols/novell/novell.c:1909 msgid "Invitation to Conversation" msgstr "কথোপকথনে আমন্ত্রণ" # tithi -#: ../libpurple/protocols/novell/novell.c:1910 #, c-format msgid "" "Invitation from: %s\n" @@ -9104,23 +6458,19 @@ msgstr "" "\n" "প্রেরিত: %2s" -#: ../libpurple/protocols/novell/novell.c:1912 msgid "Would you like to join the conversation?" msgstr "আপনি কি কথোপকথনে অংশগ্রহন করতে ইচ্ছুক?" # tithi -#: ../libpurple/protocols/novell/novell.c:2028 msgid "You have been logged out because you logged in at another workstation." msgstr "আপনাকে প্রস্থান করছেন কারণ আপনি অন্য একটি ওয়ার্ক-ষ্টেশনে সংযুক্ত হয়েছেন।" # tithi -#: ../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 অফলাইনে উপস্থিত এবং আপনার প্রেরিত বার্তাটি গ্রহণ করেনি।" -#: ../libpurple/protocols/novell/novell.c:2185 msgid "" "Unable to connect to server. Please enter the address of the server you wish " "to connect to." @@ -9129,12 +6479,10 @@ msgstr "" "ঠিকানা প্রবেশ করান।" # tithi -#: ../libpurple/protocols/novell/novell.c:2214 msgid "Error. SSL support is not installed." msgstr "ত্রুটি। SSL সমর্থন সংস্থাপিত নয়।" # tithi -#: ../libpurple/protocols/novell/novell.c:2522 msgid "This conference has been closed. No more messages can be sent." msgstr "এই অধিবেশনটি বন্ধ করা হয়েছে। আর কোনো বার্তা পাঠানো যাবে না।" @@ -9149,43 +6497,24 @@ msgstr "এই অধিবেশনটি বন্ধ করা হয়ে #. *< version #. * summary #. * description -#: ../libpurple/protocols/novell/novell.c:3537 -#: ../libpurple/protocols/novell/novell.c:3539 msgid "Novell GroupWise Messenger Protocol Plugin" msgstr "নোভেল GroupWise বার্তাবাহক প্রোটোকল প্লাগইন" -#: ../libpurple/protocols/novell/novell.c:3564 msgid "Server address" msgstr "সার্ভারের ঠিকানা" -#: ../libpurple/protocols/novell/novell.c:3568 msgid "Server port" msgstr "সার্ভারের পোর্ট" -#: ../libpurple/protocols/oscar/family_chatnav.c:62 msgid "Could not join chat room" msgstr "আড্ডার রুমে যুক্ত হতে পারেনি" -#: ../libpurple/protocols/oscar/family_chatnav.c:63 msgid "Invalid chat room name" msgstr "অবৈধ আড্ডার রুমের নাম" -#: ../libpurple/protocols/oscar/flap_connection.c:443 -#: ../libpurple/protocols/qq/qq_network.c:400 -#: ../libpurple/protocols/yahoo/yahoo.c:2524 -#: ../libpurple/protocols/yahoo/yahoo.c:2692 -#: ../libpurple/protocols/yahoo/ycht.c:482 ../libpurple/proxy.c:801 -#: ../libpurple/proxy.c:1325 ../libpurple/proxy.c:1439 -#: ../libpurple/proxy.c:1675 ../libpurple/proxy.c:1750 msgid "Server closed the connection." msgstr "সার্ভার সংযোগটি বন্ধ করে দিয়েছে।" -#: ../libpurple/protocols/oscar/flap_connection.c:445 -#: ../libpurple/protocols/qq/qq_network.c:392 -#: ../libpurple/protocols/yahoo/yahoo.c:2517 -#: ../libpurple/protocols/yahoo/yahoo.c:2685 ../libpurple/proxy.c:812 -#: ../libpurple/proxy.c:1337 ../libpurple/proxy.c:1451 -#: ../libpurple/proxy.c:1686 ../libpurple/proxy.c:1762 #, c-format msgid "" "Lost connection with server:\n" @@ -9194,10 +6523,6 @@ msgstr "" "সার্ভারের সাথে সংযুক্ত হারিয়েছে:\n" "%s" -#: ../libpurple/protocols/oscar/flap_connection.c:448 -#: ../libpurple/proxy.c:1354 ../libpurple/proxy.c:1384 -#: ../libpurple/proxy.c:1464 ../libpurple/proxy.c:1535 -#: ../libpurple/proxy.c:1636 ../libpurple/proxy.c:1775 msgid "Received invalid data on connection with server." msgstr "সার্ভারের সাথে সংযুক্ত অবস্থায় অবৈধ উপাত্ত গ্রহণ করেছে।" @@ -9211,13 +6536,10 @@ msgstr "সার্ভারের সাথে সংযুক্ত অবস #. *< version #. * summary #. * description -#: ../libpurple/protocols/oscar/libaim.c:118 -#: ../libpurple/protocols/oscar/libaim.c:120 msgid "AIM Protocol Plugin" msgstr "এআইএম প্রোটোকল প্লাগইন" # tithi -#: ../libpurple/protocols/oscar/libicq.c:35 msgid "ICQ UIN..." msgstr "ICQ UIN..." @@ -9231,47 +6553,35 @@ msgstr "ICQ UIN..." #. *< version #. * summary #. * description -#: ../libpurple/protocols/oscar/libicq.c:127 -#: ../libpurple/protocols/oscar/libicq.c:129 msgid "ICQ Protocol Plugin" msgstr "আইসিকিউ প্রোটোকল প্লাগইন" # tithi -#: ../libpurple/protocols/oscar/libicq.c:156 -#: ../libpurple/protocols/yahoo/yahoo.c:4516 -#: ../libpurple/protocols/zephyr/zephyr.c:2988 msgid "Encoding" msgstr "সঙ্কেতায়ন" -#: ../libpurple/protocols/oscar/odc.c:42 msgid "The remote user has closed the connection." msgstr "দূরবর্তী ব্যবহারকারী যোগাযোগটি বন্ধ করে দিয়েছে।" -#: ../libpurple/protocols/oscar/odc.c:44 msgid "The remote user has declined your request." msgstr "দূরবর্তী ব্যবহারকারী আপনার অনুরোধ অস্বীকার করেছে।" # tithi -#: ../libpurple/protocols/oscar/odc.c:46 #, c-format msgid "Lost connection with the remote user:<br>%s" msgstr "দূরবর্তী ব্যবহারকারীর সঙ্গে সংযোগ হারিয়েছে:<br>%s" # tithi -#: ../libpurple/protocols/oscar/odc.c:49 msgid "Received invalid data on connection with remote user." msgstr "দূরবর্তী ব্যবহারকারীর সাথে সংযুক্ত অবস্থায় অবৈধ উপাত্ত গ্রহণ করেছে।" -#: ../libpurple/protocols/oscar/odc.c:51 msgid "Could not establish a connection with the remote user." msgstr "দূরবর্তী ব্য়বহারকারীর সাথে সংযোগ স্থাপন করতে পারেনি।" -#: ../libpurple/protocols/oscar/odc.c:562 msgid "Direct IM established" msgstr "সরাসরি IM স্থাপন করা হয়েছে" # tithi -#: ../libpurple/protocols/oscar/odc.c:601 #, c-format msgid "" "%s tried to send you a %s file, but we only allow files up to %s over Direct " @@ -9282,128 +6592,102 @@ msgstr "" "চেষ্টা করুন।\n" # tithi -#: ../libpurple/protocols/oscar/oft.c:656 #, c-format msgid "File %s is %s, which is larger than the maximum size of %s." msgstr "ফাইল %1s হলো %2s, যা %3s এর সর্বোচ্চ আকার অপেক্ষা বৃহত্তর।" -#: ../libpurple/protocols/oscar/oscar.c:119 msgid "Invalid error" msgstr "অবৈধ ত্রুটি" -#: ../libpurple/protocols/oscar/oscar.c:120 msgid "Invalid SNAC" msgstr "অবৈধ SNAC" # tithi -#: ../libpurple/protocols/oscar/oscar.c:121 msgid "Rate to host" msgstr "হোস্টের হার" # tithi -#: ../libpurple/protocols/oscar/oscar.c:122 msgid "Rate to client" msgstr "গ্রাহকের হার" -#: ../libpurple/protocols/oscar/oscar.c:124 msgid "Service unavailable" msgstr "সেবা অপ্রাপ্য" # tithi -#: ../libpurple/protocols/oscar/oscar.c:125 msgid "Service not defined" msgstr "সেবা নির্ধারিত নয়" # tithi -#: ../libpurple/protocols/oscar/oscar.c:126 msgid "Obsolete SNAC" msgstr "অপ্রচলিত SNAC" # tithi -#: ../libpurple/protocols/oscar/oscar.c:127 msgid "Not supported by host" msgstr "হোস্ট দ্বারা সমর্থিত নয়" # tithi -#: ../libpurple/protocols/oscar/oscar.c:128 msgid "Not supported by client" msgstr "গ্রাহক দ্বারা সমর্থিত নয়" # tithi -#: ../libpurple/protocols/oscar/oscar.c:129 msgid "Refused by client" msgstr "গ্রাহক দ্বারা অস্বীকৃত" # tithi -#: ../libpurple/protocols/oscar/oscar.c:130 msgid "Reply too big" msgstr "উত্তর অনেক বেশি বড়" # tithi -#: ../libpurple/protocols/oscar/oscar.c:131 msgid "Responses lost" msgstr "সাড়াসমূহ হারিয়েছে" -#: ../libpurple/protocols/oscar/oscar.c:132 msgid "Request denied" msgstr "অনুরোধ প্রত্যাখ্যান করা হয়েছে" # tithi -#: ../libpurple/protocols/oscar/oscar.c:133 msgid "Busted SNAC payload" msgstr "বাস্টেড SNAC পেলোড" # tithi -#: ../libpurple/protocols/oscar/oscar.c:134 msgid "Insufficient rights" msgstr "অপর্যাপ্ত অধিকার" # tithi -#: ../libpurple/protocols/oscar/oscar.c:135 msgid "In local permit/deny" msgstr "স্থানীয় অনুমতি/অস্বীকার এ" # tithi -#: ../libpurple/protocols/oscar/oscar.c:136 msgid "Warning level too high (sender)" msgstr "সতর্কতা স্তর খুব উচ্চ (প্রেরক)" # tithi -#: ../libpurple/protocols/oscar/oscar.c:137 msgid "Warning level too high (receiver)" msgstr "সতর্কতা স্তর খুব উচ্চ (গ্রাহক)" # tithi -#: ../libpurple/protocols/oscar/oscar.c:138 msgid "User temporarily unavailable" msgstr "ব্যবহারকারী সাময়িকভাবে অপ্রাপ্য" # tithi -#: ../libpurple/protocols/oscar/oscar.c:139 msgid "No match" msgstr "কোনো মিল নেই" # tithi -#: ../libpurple/protocols/oscar/oscar.c:140 msgid "List overflow" msgstr "তালিকা অতিরিক্ত" -#: ../libpurple/protocols/oscar/oscar.c:141 msgid "Request ambiguous" msgstr "অনুরোধ অস্পষ্ট" # tithi -#: ../libpurple/protocols/oscar/oscar.c:142 msgid "Queue full" msgstr "সারি পূর্ণ" # tithi -#: ../libpurple/protocols/oscar/oscar.c:143 msgid "Not while on AOL" msgstr "এই সময়ে AOL এ নেই" # tithi -#: ../libpurple/protocols/oscar/oscar.c:351 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 " @@ -9416,7 +6700,6 @@ msgstr "" "পছন্দসমূহে উল্লেখ করতে পারেন।)" # tithi -#: ../libpurple/protocols/oscar/oscar.c:460 #, c-format msgid "" "(There was an error receiving this message. Either you and %s have " @@ -9426,152 +6709,110 @@ msgstr "" "আছে, বা %s এর একটি ত্রুটিপূর্ণ গ্রাহক রয়েছে।)" #. Label -#: ../libpurple/protocols/oscar/oscar.c:653 ../pidgin/gtkutils.c:2457 -#: ../pidgin/gtkutils.c:2487 -#: ../pidgin/plugins/gevolution/new_person_dialog.c:336 msgid "Buddy Icon" msgstr "বন্ধু আইকন" # tithi -#: ../libpurple/protocols/oscar/oscar.c:656 msgid "Voice" msgstr "কন্ঠ" # tithi -#: ../libpurple/protocols/oscar/oscar.c:659 msgid "AIM Direct IM" msgstr "AIM সরাসরি IM" -#: ../libpurple/protocols/oscar/oscar.c:665 -#: ../libpurple/protocols/oscar/oscar.c:6236 msgid "Get File" msgstr "ফাইল গ্রহণ করুন" -#: ../libpurple/protocols/oscar/oscar.c:672 msgid "Games" msgstr "খেলা" -#: ../libpurple/protocols/oscar/oscar.c:675 msgid "Add-Ins" msgstr "অন্তর্যোগসমূহ" -#: ../libpurple/protocols/oscar/oscar.c:678 msgid "Send Buddy List" msgstr "বন্ধু তালিকা পাঠান" -#: ../libpurple/protocols/oscar/oscar.c:681 msgid "ICQ Direct Connect" msgstr "ICQ সরাসরি সংযোগ" -#: ../libpurple/protocols/oscar/oscar.c:684 msgid "AP User" msgstr "AP ব্যবহারকারী" # tithi -#: ../libpurple/protocols/oscar/oscar.c:687 msgid "ICQ RTF" msgstr "ICQ RTF" # tithi -#: ../libpurple/protocols/oscar/oscar.c:690 msgid "Nihilist" msgstr "নাস্তিবাদী" # tithi -#: ../libpurple/protocols/oscar/oscar.c:693 msgid "ICQ Server Relay" msgstr "ICQ সার্ভার সম্প্রচার" # tithi -#: ../libpurple/protocols/oscar/oscar.c:696 msgid "Old ICQ UTF8" msgstr "পুরাতন ICQ UTF8" # tithi -#: ../libpurple/protocols/oscar/oscar.c:699 msgid "Trillian Encryption" msgstr "ট্রিলিয়ন সঙ্কেতায়ন" # tithi -#: ../libpurple/protocols/oscar/oscar.c:702 msgid "ICQ UTF8" msgstr "ICQ UTF8" -#: ../libpurple/protocols/oscar/oscar.c:705 msgid "Hiptop" msgstr "হিপটপ" -#: ../libpurple/protocols/oscar/oscar.c:708 msgid "Security Enabled" msgstr "নিরাপত্তা সক্রিয়কৃত" -#: ../libpurple/protocols/oscar/oscar.c:711 msgid "Video Chat" msgstr "ভিডিও আড্ডা" -#: ../libpurple/protocols/oscar/oscar.c:715 msgid "iChat AV" msgstr "আইআড্ডা AV" # tithi -#: ../libpurple/protocols/oscar/oscar.c:718 msgid "Live Video" msgstr "সরাসরি ভিডিও" -#: ../libpurple/protocols/oscar/oscar.c:721 msgid "Camera" msgstr "ক্যামেরা" -#: ../libpurple/protocols/oscar/oscar.c:724 msgid "Screen Sharing" msgstr "স্ক্রীন শেয়ারকরণ" # tithi -#: ../libpurple/protocols/oscar/oscar.c:742 -#: ../libpurple/protocols/oscar/oscar.c:6001 msgid "Free For Chat" msgstr "আড্ডার জন্য মুক্ত" -#: ../libpurple/protocols/oscar/oscar.c:746 -#: ../libpurple/protocols/oscar/oscar.c:6036 msgid "Not Available" msgstr "বিদ্যমান নেই " # tithi -#: ../libpurple/protocols/oscar/oscar.c:748 -#: ../libpurple/protocols/oscar/oscar.c:6022 msgid "Occupied" msgstr "অধিষ্টিত" # tithi -#: ../libpurple/protocols/oscar/oscar.c:752 msgid "Web Aware" msgstr "ওয়েব সচেতন" -#: ../libpurple/protocols/oscar/oscar.c:754 ../libpurple/protocols/qq/qq.c:270 -#: ../libpurple/protocols/qq/qq.c:417 -#: ../libpurple/protocols/yahoo/yahoo.c:3173 ../libpurple/status.c:162 -#: ../pidgin/gtkdocklet.c:557 ../pidgin/gtkstatusbox.c:1098 msgid "Invisible" msgstr "অদৃশ্য" -#: ../libpurple/protocols/oscar/oscar.c:962 -#: ../libpurple/protocols/oscar/oscar.c:3913 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:721 ../pidgin/gtkprefs.c:1207 msgid "IP Address" msgstr "আইপি ঠিকানা" # tithi -#: ../libpurple/protocols/oscar/oscar.c:968 msgid "Warning Level" msgstr "সতর্কতা স্তর" -#: ../libpurple/protocols/oscar/oscar.c:978 msgid "Buddy Comment" msgstr "বন্ধুর মন্তব্য" # fix me tithi -#: ../libpurple/protocols/oscar/oscar.c:1118 #, c-format msgid "" "Could not connect to authentication server:\n" @@ -9580,7 +6821,6 @@ msgstr "" "প্রমাণীকরণ সাথে সংযুক্ত করা যায়নি:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:1126 #, c-format msgid "" "Could not connect to BOS server:\n" @@ -9589,23 +6829,19 @@ msgstr "" "BOS সার্ভারের সাথে সংযুক্ত করা যায়নি:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:1158 msgid "Username sent" msgstr "ব্যবহারকারীর-নাম পাঠানো হয়েছে" # tithi -#: ../libpurple/protocols/oscar/oscar.c:1163 msgid "Connection established, cookie sent" msgstr "সংযোগ প্রতিষ্ঠিত, কুকি পাঠানো হয়েছে " # tithi #. TODO: Don't call this with ssi -#: ../libpurple/protocols/oscar/oscar.c:1192 msgid "Finalizing connection" msgstr "সংযোগ চূড়ান্ত করা হচ্ছে" # tithi -#: ../libpurple/protocols/oscar/oscar.c:1420 #, c-format msgid "" "Unable to login: Could not sign on as %s because the username is invalid. " @@ -9618,37 +6854,25 @@ msgstr "" #. Unregistered screen name #. uid is not exist -#: ../libpurple/protocols/oscar/oscar.c:1506 -#: ../libpurple/protocols/qq/qq_base.c:1109 -#: ../libpurple/protocols/yahoo/yahoo.c:2144 msgid "Invalid username." msgstr "অবৈধ ব্যবহারকারীর নাম।" -#: ../libpurple/protocols/oscar/oscar.c:1512 -#: ../libpurple/protocols/qq/qq_base.c:415 -#: ../libpurple/protocols/qq/qq_base.c:1100 -#: ../libpurple/protocols/simple/simple.c:1130 -#: ../libpurple/protocols/yahoo/yahoo.c:2166 msgid "Incorrect password." msgstr "ভুল গুপ্তসংকেত।" # tithi #. Suspended account -#: ../libpurple/protocols/oscar/oscar.c:1516 msgid "Your account is currently suspended." msgstr "আপনার একাউন্টটি বর্তমানে স্থগিত।" # tithi #. service temporarily unavailable -#: ../libpurple/protocols/oscar/oscar.c:1521 msgid "The AOL Instant Messenger service is temporarily unavailable." msgstr "AOL তাৎক্ষণিক বার্তাবাহক সার্ভিস সাময়িকভাবে অপ্রাপ্য।" # tithi #. screen name connecting too frequently #. IP address connecting too frequently -#: ../libpurple/protocols/oscar/oscar.c:1525 -#: ../libpurple/protocols/oscar/oscar.c:1538 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." @@ -9658,105 +6882,76 @@ msgstr "" "করতে হবে।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:1531 #, c-format msgid "The client version you are using is too old. Please upgrade at %s" msgstr "আপনার ব্যবহৃত গ্রাহক সংস্করণ খুব পুরনো। অনুগ্রহ করে %s এ উন্নততর করুন" -#: ../libpurple/protocols/oscar/oscar.c:1573 msgid "Could Not Connect" msgstr "সংযোগ দিতে পারে না" # tithi -#: ../libpurple/protocols/oscar/oscar.c:1577 msgid "Received authorization" msgstr "গৃহীত অনুমোদন প্রাপ্ত" # tithi -#: ../libpurple/protocols/oscar/oscar.c:1600 msgid "The SecurID key entered is invalid." msgstr "অবৈধ নিরাপদ-আইডি কী প্রবেশ করা হয়েছে।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:1613 msgid "Enter SecurID" msgstr "নিরাপদ-আইডি প্রবেশ করান" # tithi -#: ../libpurple/protocols/oscar/oscar.c:1614 msgid "Enter the 6 digit number from the digital display." msgstr "ডিজিটাল প্রদর্শন থেকে ৬ ডিজিটের সংখ্যা প্রবেশ করান।" #. * #. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons. #. -#: ../libpurple/protocols/oscar/oscar.c:1616 -#: ../libpurple/protocols/oscar/oscar.c:2492 -#: ../libpurple/protocols/oscar/oscar.c:2540 -#: ../libpurple/protocols/oscar/oscar.c:6107 -#: ../libpurple/protocols/oscar/oscar.c:6393 ../libpurple/request.h:1401 msgid "_OK" msgstr "ঠিক আছে (_O)" -#: ../libpurple/protocols/oscar/oscar.c:1657 #, c-format msgid "You may be disconnected shortly. If so, check %s for updates." msgstr "আপনি সাময়িকভাবে বিচ্ছিন্ন থাকতে পারেন। হালনাগাদের জন্য %s পরীক্ষা করুন." -#: ../libpurple/protocols/oscar/oscar.c:1661 -#: ../libpurple/protocols/oscar/oscar.c:1710 msgid "Unable to get a valid AIM login hash." msgstr "একটি বৈধ AIM লগইন হ্যাশ পেতে ব্যর্থ।" -#: ../libpurple/protocols/oscar/oscar.c:1706 -#: ../libpurple/protocols/oscar/oscar.c:1808 #, c-format msgid "You may be disconnected shortly. Check %s for updates." msgstr "আপনি সাময়িকভাবে বিচ্ছিন্ন থাকতে পারেন। হালনাগাদের জন্য %s পরীক্ষা করুন।" -#: ../libpurple/protocols/oscar/oscar.c:1812 msgid "Unable to get a valid login hash." msgstr "একটি বৈধ লগইন হ্যাশ পেতে ব্যর্থ।" -#: ../libpurple/protocols/oscar/oscar.c:1843 msgid "Password sent" msgstr "গুপ্তসঙ্কেত পাঠানো হয়েছে" -#: ../libpurple/protocols/oscar/oscar.c:1899 msgid "Unable to initialize connection" msgstr "সংযোগ প্রস্তুত করতে ব্যর্থ" # tithi -#: ../libpurple/protocols/oscar/oscar.c:2461 msgid "Please authorize me so I can add you to my buddy list." msgstr "" "অনুগ্রহ করে আমাকে অনুমোদন দিন যেন আমি আপনাকে আমার বন্ধু তালিকায় যুক্ত করতে পারি।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:2490 msgid "Authorization Request Message:" msgstr "প্রাপ্তাধিকার অনুরোধ বার্তা:" # tithi -#: ../libpurple/protocols/oscar/oscar.c:2491 msgid "Please authorize me!" msgstr "অনুগ্রহ করে আমাকে অনুমোদন দিন!" -#: ../libpurple/protocols/oscar/oscar.c:2531 -#: ../libpurple/protocols/oscar/oscar.c:2539 -#: ../libpurple/protocols/oscar/oscar.c:2666 -#: ../libpurple/protocols/oscar/oscar.c:5509 -#: ../libpurple/protocols/yahoo/yahoo.c:998 msgid "No reason given." msgstr "কোনো কারন দর্শানো হয়নি।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:2538 msgid "Authorization Denied Message:" msgstr "প্রাপ্তাধিকার অগ্রাহ্য বার্তা:" # tithi -#: ../libpurple/protocols/oscar/oscar.c:2666 #, c-format msgid "" "The user %u has denied your request to add them to your buddy list for the " @@ -9768,20 +6963,17 @@ msgstr "" "%2s" # tithi -#: ../libpurple/protocols/oscar/oscar.c:2667 msgid "ICQ authorization denied." msgstr "ICQ প্রাপ্তাধিকার অগ্রাহ্য।" # tithi #. Someone has granted you authorization -#: ../libpurple/protocols/oscar/oscar.c:2674 #, c-format msgid "The user %u has granted your request to add them to your buddy list." msgstr "" "%u ব্যবহারকারী আপনার বন্ধু তালিকাতে তাদেরকে যোগ করতে আপনার অনুরোধ গ্রহণ করেছে।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:2682 #, c-format msgid "" "You have received a special message\n" @@ -9795,7 +6987,6 @@ msgstr "" "%3s " # tithi -#: ../libpurple/protocols/oscar/oscar.c:2690 #, c-format msgid "" "You have received an ICQ page\n" @@ -9809,7 +7000,6 @@ msgstr "" "%3s" # tithi -#: ../libpurple/protocols/oscar/oscar.c:2698 #, c-format msgid "" "You have received an ICQ email from %s [%s]\n" @@ -9823,32 +7013,26 @@ msgstr "" "%3s" # tithi -#: ../libpurple/protocols/oscar/oscar.c:2719 #, c-format msgid "ICQ user %u has sent you a buddy: %s (%s)" msgstr "ICQ %1u ব্যবহারকারী আপনাকে একটি বন্ধু পাঠিয়েছে: %2s (%3s)" -#: ../libpurple/protocols/oscar/oscar.c:2725 msgid "Do you want to add this buddy to your buddy list?" msgstr "আপনি কি এই বন্ধুকে আপনার বন্ধু তালিকায় যোগ করতে চান?" -#: ../libpurple/protocols/oscar/oscar.c:2730 ../pidgin/gtkroomlist.c:315 msgid "_Add" msgstr "যোগ করুন (_A)" -#: ../libpurple/protocols/oscar/oscar.c:2731 msgid "_Decline" msgstr "প্রত্যাখান করুন (_D)" # tithi -#: ../libpurple/protocols/oscar/oscar.c:2855 #, c-format msgid "You missed %hu message from %s because it was invalid." msgid_plural "You missed %hu messages from %s because they were invalid." msgstr[0] "আপনি %2$s এর %1$hu বার্তাটি হারিয়েছেন কারণ এটি অবৈধ ছিল।" msgstr[1] "আপনি %2$s এর %1$hu বার্তাসমূহ হারিয়েছেন কারণ এটি অবৈধ ছিল।" -#: ../libpurple/protocols/oscar/oscar.c:2864 #, 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." @@ -9856,7 +7040,6 @@ msgstr[0] "আপনি %1hu বার্তাটি %2s হতে হার msgstr[1] "আপনি %1hu বার্তাসমূহ %2s হতে হারিয়েছেন কারণ তারা অনেক বড় ছিল।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:2873 #, c-format msgid "" "You missed %hu message from %s because the rate limit has been exceeded." @@ -9868,7 +7051,6 @@ msgstr[1] "" "আপনি %1hu বার্তাসমূহ %2s হতে হারিয়েছেন কারণ হারের সীমা অতিক্রম করা হয়েছিল।" # fix me tithi -#: ../libpurple/protocols/oscar/oscar.c:2882 #, c-format msgid "" "You missed %hu message from %s because his/her warning level is too high." @@ -9878,7 +7060,6 @@ msgstr[0] "আপনি %1hu বার্তাটি %2s হতে হারি msgstr[1] "আপনি %1hu বার্তাসমূহ %2s হতে হারিয়েছেন কারণ তার সতর্কতা স্তর খুব উচ্চ।" # fix me tithi -#: ../libpurple/protocols/oscar/oscar.c:2891 #, c-format msgid "You missed %hu message from %s because your warning level is too high." msgid_plural "" @@ -9886,7 +7067,6 @@ msgid_plural "" msgstr[0] "আপনি %1hu বার্তাটি %2s হতে হারিয়েছেন কারণ আপনার সতর্কতা স্তর খুব উচ্চ।" msgstr[1] "আপনি %1hu বার্তাসমূহ %2s হতে হারিয়েছেন কারণ আপনার সতর্কতা স্তর খুব উচ্চ।" -#: ../libpurple/protocols/oscar/oscar.c:2900 #, 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." @@ -9894,50 +7074,37 @@ msgstr[0] "আপনি অজ্ঞাত কারণে %1hu বার্ত msgstr[1] "আপনি অজ্ঞাত কারণে %1hu বার্তাসমূহ %2s হতে হারিয়েছেন।" #. Data is assumed to be the destination sn -#: ../libpurple/protocols/oscar/oscar.c:3055 #, c-format msgid "Unable to send message: %s" msgstr "বার্তা পাঠানো অসমর্থ: %s।" -#: ../libpurple/protocols/oscar/oscar.c:3055 -#: ../libpurple/protocols/oscar/oscar.c:3060 -#: ../libpurple/protocols/oscar/oscar.c:3124 msgid "Unknown reason." msgstr "অজ্ঞাত কারণ।" -#: ../libpurple/protocols/oscar/oscar.c:3058 -#: ../libpurple/protocols/sametime/sametime.c:2466 #, c-format msgid "Unable to send message to %s:" msgstr "%s এ বার্তা পাঠাতে সমর্থ নয়:" -#: ../libpurple/protocols/oscar/oscar.c:3124 #, c-format msgid "User information not available: %s" msgstr "ব্যবহারকারীর তথ্য সহজলভ্য় নয়: %s" -#: ../libpurple/protocols/oscar/oscar.c:3161 msgid "Online Since" msgstr "যখন থেকে অনলাইনে" # tithi -#: ../libpurple/protocols/oscar/oscar.c:3166 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1185 msgid "Member Since" msgstr "যখন থেকে সদস্য" -#: ../libpurple/protocols/oscar/oscar.c:3184 msgid "Profile" msgstr "প্রোফাইল" # tithi -#: ../libpurple/protocols/oscar/oscar.c:3266 msgid "Your AIM connection may be lost." msgstr "আপনার AIM সংযোগ হয়ত নষ্ট হয়ে গেছে।" # tithi #. The conversion failed! -#: ../libpurple/protocols/oscar/oscar.c:3454 msgid "" "[Unable to display a message from this user because it contained invalid " "characters.]" @@ -9946,7 +7113,6 @@ msgstr "" "করেছিল।]" # tithi -#: ../libpurple/protocols/oscar/oscar.c:3618 msgid "" "The last action you attempted could not be performed because you are over " "the rate limit. Please wait 10 seconds and try again." @@ -9954,59 +7120,44 @@ msgstr "" "আপনি সর্বশেষ যে কার্যটে চেষ্টা করেছেন তা সম্পাদন করা যায়নি কারণ আপনি হারের সীমা " "অতিক্রম করেছেন। অনুগ্রহ করে ১০ সেকেন্ড অপেক্ষা করুন এবং পুনরায় চেষ্টা করুন।" -#: ../libpurple/protocols/oscar/oscar.c:3703 -#: ../libpurple/protocols/toc/toc.c:977 #, c-format msgid "You have been disconnected from chat room %s." msgstr "আপনাকে %s আড্ডার রুম থেকে বিচ্ছিন্ন করা হয়েছে।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:3935 -#: ../libpurple/protocols/silc/util.c:591 -#: ../libpurple/protocols/silc10/util.c:586 msgid "Mobile Phone" msgstr "মোবাইল ফোন" # tithi -#: ../libpurple/protocols/oscar/oscar.c:3964 msgid "Personal Web Page" msgstr "ব্যক্তিগত ওয়েব পেজ" #. aim_userinfo_t #. strip_html_tags -#: ../libpurple/protocols/oscar/oscar.c:3972 msgid "Additional Information" msgstr "অতিরিক্ত তথ্য" # tithi -#: ../libpurple/protocols/oscar/oscar.c:3981 -#: ../libpurple/protocols/oscar/oscar.c:3989 msgid "Zip Code" msgstr "জিপ কোড" -#: ../libpurple/protocols/oscar/oscar.c:3992 msgid "Work Information" msgstr "কাজের তথ্য" # tithi -#: ../libpurple/protocols/oscar/oscar.c:3995 msgid "Division" msgstr "বিভাগ" -#: ../libpurple/protocols/oscar/oscar.c:3996 msgid "Position" msgstr "অবস্থান" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4000 msgid "Web Page" msgstr "ওয়েব পেজ" -#: ../libpurple/protocols/oscar/oscar.c:4058 msgid "Pop-Up Message" msgstr "পপ-আপ বার্তা" -#: ../libpurple/protocols/oscar/oscar.c:4098 #, c-format msgid "The following username is associated with %s" msgid_plural "The following usernames are associated with %s" @@ -10014,24 +7165,20 @@ msgstr[0] "নিম্নবর্ণিত ব্যবহারকারী msgstr[1] "নিম্নবর্ণিত ব্যবহারকারীর-নামসমূহ %s এর সাথে সম্পর্কিত" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4129 #, c-format msgid "No results found for email address %s" msgstr "%s ই-মেইল ঠিকানার জন্য কোনো ফলাফল খুঁজে পায়নি" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4150 #, c-format msgid "You should receive an email asking to confirm %s." msgstr "আপনি %s নিশ্চিত করতে একটি ই-মেইল গ্রহণ করবেন।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4152 msgid "Account Confirmation Requested" msgstr "একাউন্ট নিশ্চিতকরণ অনুরোধ করা হয়েছে" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4185 #, c-format msgid "" "Error 0x%04x: Unable to format username because the requested name differs " @@ -10041,13 +7188,11 @@ msgstr "" "ভিন্ন।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4187 #, c-format msgid "Error 0x%04x: Unable to format username because it is invalid." msgstr "ত্রুটি 0x%04x: ব্যবহারকারীর নাম বিন্যাস করতে অক্ষম কারণ এটি অবৈধ।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4189 #, c-format msgid "" "Error 0x%04x: Unable to format username because the requested name is too " @@ -10056,7 +7201,6 @@ msgstr "" "ত্রুটি 0x%04x: ব্যবহারকারীর নাম বিন্যাস করতে অক্ষম কারণ অনুরোধকৃত নাম খুব দীর্ঘ।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4191 #, c-format msgid "" "Error 0x%04x: Unable to change email address because there is already a " @@ -10066,7 +7210,6 @@ msgstr "" "ইতোমধ্যে একটি অনুরোধ অমীমাংসিত রয়েছে।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4193 #, c-format msgid "" "Error 0x%04x: Unable to change email address because the given address has " @@ -10076,7 +7219,6 @@ msgstr "" "অনেক বেশি ব্যবহারকারী নাম রয়েছে।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4195 #, c-format msgid "" "Error 0x%04x: Unable to change email address because the given address is " @@ -10084,39 +7226,32 @@ msgid "" msgstr "ত্রুটি 0x%04x: ই-মেইল ঠিকানা পরিবর্তন করতে অক্ষম কারণ প্রদত্ত ঠিকানা অবৈধ।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4197 #, c-format msgid "Error 0x%04x: Unknown error." msgstr "ত্রুটি 0x%04x: অজানা ত্রুটি।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4199 msgid "Error Changing Account Info" msgstr "একাউন্ট তথ্য পরিবর্তনের ত্রুটি" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4205 #, c-format msgid "The email address for %s is %s" msgstr "%1s এর ই-মেইল ঠিকানা %2s" -#: ../libpurple/protocols/oscar/oscar.c:4207 msgid "Account Info" msgstr "একাউন্ট তথ্য" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4393 msgid "" "Your IM Image was not sent. You must be Direct Connected to send IM Images." msgstr "" "আপনার IM চিত্র পাঠানো হয়নি। আপনাকে IM চিত্র পাঠাতে সরাসরি সংযুক্ত থাকতে হবে।" -#: ../libpurple/protocols/oscar/oscar.c:4664 msgid "Unable to set AIM profile." msgstr "AIM প্রোফাইল নির্ধারণ করতে ব্যর্থ।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4665 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 " @@ -10127,7 +7262,6 @@ msgstr "" "আপনাকে সম্পূর্ণভাবে সংযুক্ত।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4679 #, c-format msgid "" "The maximum profile length of %d byte has been exceeded. It has been " @@ -10143,12 +7277,10 @@ msgstr[1] "" "হয়েছে।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4684 msgid "Profile too long." msgstr "প্রোফাইল বেশ বড়।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4728 #, c-format msgid "" "The maximum away message length of %d byte has been exceeded. It has been " @@ -10161,12 +7293,10 @@ msgstr[0] "" msgstr[1] "" "সর্বোচ্চ %d বাইট দৈর্ঘ্যের বার্তা অতিক্রম করা হয়েছে। আপনার জন্য এটা হ্রাস করা হয়েছে।" -#: ../libpurple/protocols/oscar/oscar.c:4733 msgid "Away message too long." msgstr "দূরের বার্তাটি খুব দীর্ঘ।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4806 #, c-format msgid "" "Could not add the buddy %s because the username is invalid. Usernames must " @@ -10177,18 +7307,13 @@ msgstr "" "বৈধ ই-মেইল ঠিকানা থাকতে হবে, বা একটি বর্ণ দ্বারা শুরু হবে এবং শুধুমাত্র বর্ণ, সংখ্যা " "এবং স্পেস ধারণ করবে, বা শুধুমাত্র সংখ্যা ধারণ করবে।" -#: ../libpurple/protocols/oscar/oscar.c:4808 -#: ../libpurple/protocols/oscar/oscar.c:5278 -#: ../libpurple/protocols/oscar/oscar.c:5293 msgid "Unable to Add" msgstr "যোগ করতে সমর্থ নয়" -#: ../libpurple/protocols/oscar/oscar.c:4927 msgid "Unable to Retrieve Buddy List" msgstr "বন্ধু তালিকা উদ্ধার করতে সমর্থ নয়" # tithi -#: ../libpurple/protocols/oscar/oscar.c:4928 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." @@ -10197,16 +7322,10 @@ msgstr "" "নষ্ট হয়নি, এবং সম্ভবত কয়েক মিনিটের মধ্যে সহজলভ্য হবে।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:5119 -#: ../libpurple/protocols/oscar/oscar.c:5121 -#: ../libpurple/protocols/oscar/oscar.c:5360 -#: ../libpurple/protocols/oscar/oscar.c:5361 -#: ../libpurple/protocols/oscar/oscar.c:5366 msgid "Orphans" msgstr "অনাথ" # tithi -#: ../libpurple/protocols/oscar/oscar.c:5276 #, c-format msgid "" "Could not add the buddy %s because you have too many buddies in your buddy " @@ -10216,17 +7335,13 @@ msgstr "" "করে একজনকে অপসারণ করুন এবং পুনরায় চেষ্টা করুন।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:5276 -#: ../libpurple/protocols/oscar/oscar.c:5291 msgid "(no name)" msgstr "(কোনো নাম নেই)" -#: ../libpurple/protocols/oscar/oscar.c:5290 #, c-format msgid "Could not add the buddy %s for an unknown reason." msgstr "একটি অজানা কারণে %s বন্ধুকে যুক্ত করা যায়নি।" -#: ../libpurple/protocols/oscar/oscar.c:5424 #, c-format msgid "" "The user %s has given you permission to add him or her to your buddy list. " @@ -10236,26 +7351,22 @@ msgstr "" "ব্যবহারকারীকে যুক্ত করতে চান?" # tithi -#: ../libpurple/protocols/oscar/oscar.c:5432 msgid "Authorization Given" msgstr "প্রাপ্তাধিকার দেওয়া হয়েছে" # tithi #. Granted -#: ../libpurple/protocols/oscar/oscar.c:5505 #, c-format msgid "The user %s has granted your request to add them to your buddy list." msgstr "" "%s ব্যবহারকারী আপনার বন্ধু তালিকায় তাদেরকে যোগ করতে আপনার অনুরোধ গ্রহণ করেছে।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:5506 msgid "Authorization Granted" msgstr "প্রাপ্তাধিকার গ্রহণ করা হয়েছে" # tithi #. Denied -#: ../libpurple/protocols/oscar/oscar.c:5509 #, c-format msgid "" "The user %s has denied your request to add them to your buddy list for the " @@ -10267,43 +7378,34 @@ msgstr "" "%2s" # tithi -#: ../libpurple/protocols/oscar/oscar.c:5510 msgid "Authorization Denied" msgstr "প্রাপ্তাধিকার বাতিল করেছে" # tithi -#: ../libpurple/protocols/oscar/oscar.c:5546 -#: ../libpurple/protocols/toc/toc.c:1371 msgid "_Exchange:" msgstr "বিনিময় করুন: (_E)" # tithi -#: ../libpurple/protocols/oscar/oscar.c:5659 msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats." msgstr "" "আপনার আইএম চিত্র পাঠানো হয়নি। আপনি AIM আড্ডাতে আইএম চিত্র পাঠাতে পারেন না।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:5995 msgid "iTunes Music Store Link" msgstr "আই-টিউন সঙ্গীত সংরক্ষণ লিংক" -#: ../libpurple/protocols/oscar/oscar.c:6104 #, c-format msgid "Buddy Comment for %s" msgstr "%s-এর জন্য বন্ধুর মন্তব্য" -#: ../libpurple/protocols/oscar/oscar.c:6105 msgid "Buddy Comment:" msgstr "বন্ধুর মন্তব্য:" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6152 #, c-format msgid "You have selected to open a Direct IM connection with %s." msgstr "আপনি %s এর সঙ্গে একটি সরাসরি IM সংযোগ খুলতে নির্বাচন করেছেন।" -#: ../libpurple/protocols/oscar/oscar.c:6156 msgid "" "Because this reveals your IP address, it may be considered a security risk. " "Do you wish to continue?" @@ -10311,76 +7413,60 @@ msgstr "" "এটি আপনার IP ঠিকানা প্রকাশ করার কারণে, এতে গোপনীয়তার ঝুঁকি থাকতে পারে। আপনি কি " "অব্যাহত রাখতে চান? " -#: ../libpurple/protocols/oscar/oscar.c:6162 -#: ../libpurple/protocols/oscar/peer.c:1051 msgid "C_onnect" msgstr "সংযোগ দিন (_o)" -#: ../libpurple/protocols/oscar/oscar.c:6197 msgid "Get AIM Info" msgstr "এআইএম তথ্য গ্রহণ করুন" #. We only do this if the user is in our buddy list -#: ../libpurple/protocols/oscar/oscar.c:6206 msgid "Edit Buddy Comment" msgstr "বন্ধুর মন্তব্য সম্পাদন করুন" -#: ../libpurple/protocols/oscar/oscar.c:6215 msgid "Get Status Msg" msgstr "অবস্থার বার্তা গ্রহণ করুন" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6228 msgid "Direct IM" msgstr "সরাসরি IM" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6250 msgid "Re-request Authorization" msgstr "পুনঃ-অনুরোধ প্রাপ্তাধিকার" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6309 msgid "Require authorization" msgstr "প্রাপ্তাধিকার প্রয়োজন" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6312 msgid "Web aware (enabling this will cause you to receive SPAM!)" msgstr "ওয়েব সচেতন (এইটি সক্রিয় করার কারণে আপনি SPAM গ্রহণ করবেন!)" -#: ../libpurple/protocols/oscar/oscar.c:6317 msgid "ICQ Privacy Options" msgstr "ICQ ব্যক্তিগত পছন্দসমূহ" -#: ../libpurple/protocols/oscar/oscar.c:6337 msgid "The new formatting is invalid." msgstr "নতুন বিন্যাসকরণটি অবৈধ।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6338 msgid "Username formatting can change only capitalization and whitespace." msgstr "" "ব্যবহারকারীর-নাম বিন্যাসকরণ শুধুমাত্র ঊর্ধ্ববর্ণানুক্রমিক এবং ফাঁকা জায়গা পরিবর্তন করতে " "পারে।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6391 msgid "Change Address To:" msgstr "ঠিকানা পরিবর্তন করুন:" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6437 msgid "<i>you are not waiting for authorization</i>" msgstr "<i>আপনি প্রাপ্তাধিকারের জন্য অপেক্ষা করছেন না</i>" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6440 msgid "You are awaiting authorization from the following buddies" msgstr "আপনি নিম্নোক্ত বন্ধু থেকে প্রাপ্তাধিকারের জন্য অপেক্ষা করছেন" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6441 msgid "" "You can re-request authorization from these buddies by right-clicking on " "them and selecting \"Re-request Authorization.\"" @@ -10389,74 +7475,59 @@ msgstr "" "তাদের থেকে প্রাপ্তাধিকার পুনরায় অনুরোধ করতে পারেন।" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6458 msgid "Find Buddy by Email" msgstr "ই-মেইলের মাধ্যমে বন্ধু খুঁজুন" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6459 msgid "Search for a buddy by email address" msgstr "ই-মেইল ঠিকানার মাধ্যমে বন্ধু খুঁজুন" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6460 msgid "Type the email address of the buddy you are searching for." msgstr "আপনি যে বন্ধু খুঁজছেন তার ই-মেইল ঠিকানা টাইপ করুন।" -#: ../libpurple/protocols/oscar/oscar.c:6463 msgid "_Search" msgstr "খুঁজুন (_S)" -#: ../libpurple/protocols/oscar/oscar.c:6618 msgid "Set User Info (web)..." msgstr "ব্যবহারকারী তথ্য নির্ধারণ করুন (ওয়েব)..." -#: ../libpurple/protocols/oscar/oscar.c:6629 msgid "Change Password (web)" msgstr "গুপ্তসংকেত পরিবর্তন করুন (ওয়েব)" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6633 msgid "Configure IM Forwarding (web)" msgstr "IM অগ্রবর্তীকরণ বিন্যাসন করুন (ওয়েব)" #. ICQ actions -#: ../libpurple/protocols/oscar/oscar.c:6643 msgid "Set Privacy Options..." msgstr "ব্যক্তিগত পছন্দসমূহ নির্ধারণ করুন..." #. AIM actions -#: ../libpurple/protocols/oscar/oscar.c:6650 msgid "Confirm Account" msgstr "একাউন্ট নিশ্চিত করুন" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6654 msgid "Display Currently Registered Email Address" msgstr "বর্তমানে নিবন্ধণকৃত ই-মেইল ঠিকানা প্রদর্শন করুন" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6658 msgid "Change Currently Registered Email Address..." msgstr "বর্তমানে নিবন্ধণকৃত ই-মেইল ঠিকানা পরিবর্তন করুন..." # tithi -#: ../libpurple/protocols/oscar/oscar.c:6665 msgid "Show Buddies Awaiting Authorization" msgstr "বন্ধুদের অপেক্ষমান প্রাপ্তাধিকার প্রদর্শন করুন" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6671 msgid "Search for Buddy by Email Address..." msgstr "ই-মেইল ঠিকানার মাধ্যমে বন্ধুদের খুঁজুন..." # tithi -#: ../libpurple/protocols/oscar/oscar.c:6676 msgid "Search for Buddy by Information" msgstr "তথ্য দ্বারা বন্ধুদের খুঁজুন" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6864 msgid "" "Always use AIM/ICQ proxy server for\n" "file transfers and direct IM (slower,\n" @@ -10467,33 +7538,27 @@ msgstr "" "(অপেক্ষাকৃত ধীর, কিন্তু আপনার আইপি ঠিকানা প্রকাশ করে না)" # tithi -#: ../libpurple/protocols/oscar/oscar.c:6868 msgid "Allow multiple simultaneous logins" msgstr "একাধিক যুগপৎ লগইন অনুমোদন করুন" # tithi -#: ../libpurple/protocols/oscar/peer.c:703 #, c-format msgid "Asking %s to connect to us at %s:%hu for Direct IM." msgstr "" "%2s এ আমাদের সাথে সংযোগ করতে %1s কে জিজ্ঞাসা করছে: সরাসরি আইএম এর জন্য %3hu।" -#: ../libpurple/protocols/oscar/peer.c:788 #, c-format msgid "Attempting to connect to %s:%hu." msgstr "%1s এর সাথে সংযোগ স্থাপনের চেষ্টা করছে:%2hu।" -#: ../libpurple/protocols/oscar/peer.c:862 msgid "Attempting to connect via proxy server." msgstr "প্রক্সি সার্ভারের মাধ্যমে সংযোগ স্থাপনের চেষ্টা করছে।" # tithi -#: ../libpurple/protocols/oscar/peer.c:1039 #, c-format msgid "%s has just asked to directly connect to %s" msgstr "%1s এইমাত্র %2s এর সাথে সরাসরি সংযোগ করতে জিজ্ঞাসা করেছে" -#: ../libpurple/protocols/oscar/peer.c:1043 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 " @@ -10504,476 +7569,344 @@ msgstr "" "পারে।" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:42 msgid "Aquarius" msgstr "কুম্ভ রাশি" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:42 msgid "Pisces" msgstr "মীন রাশি" -#: ../libpurple/protocols/qq/buddy_info.c:42 msgid "Aries" msgstr "মেষ রাশি" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:42 msgid "Taurus" msgstr "বৃষ রাশি" -#: ../libpurple/protocols/qq/buddy_info.c:43 msgid "Gemini" msgstr "মিথুন রাশি" -#: ../libpurple/protocols/qq/buddy_info.c:43 msgid "Cancer" msgstr "কর্কট রাশি" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:43 msgid "Leo" msgstr "সিংহ রাশি" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:43 msgid "Virgo" msgstr "কন্যা রাশি" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:43 msgid "Libra" msgstr "তুলা রাশি" -#: ../libpurple/protocols/qq/buddy_info.c:44 msgid "Scorpio" msgstr "বৃশ্চিক রাশি" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:44 msgid "Sagittarius" msgstr "ধনু রাশি" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:44 msgid "Capricorn" msgstr "মকর রাশি" -#: ../libpurple/protocols/qq/buddy_info.c:49 msgid "Rat" msgstr "ইদুর" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:49 msgid "Ox" msgstr "ষাঁড়" -#: ../libpurple/protocols/qq/buddy_info.c:49 msgid "Tiger" msgstr "বাঘ" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:49 msgid "Rabbit" msgstr "খরগোশ" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:50 msgid "Dragon" msgstr "ড্রাগন" -#: ../libpurple/protocols/qq/buddy_info.c:50 msgid "Snake" msgstr "সাপ" -#: ../libpurple/protocols/qq/buddy_info.c:50 msgid "Horse" msgstr "ঘোড়া" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:50 msgid "Goat" msgstr "ছাগল" -#: ../libpurple/protocols/qq/buddy_info.c:50 msgid "Monkey" msgstr "বানর" -#: ../libpurple/protocols/qq/buddy_info.c:51 msgid "Rooster" msgstr "মোরগ" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:51 msgid "Dog" msgstr "কুকুর" -#: ../libpurple/protocols/qq/buddy_info.c:51 msgid "Pig" msgstr "শূকর" -#: ../libpurple/protocols/qq/buddy_info.c:56 msgid "Other" msgstr "অন্যান্য" -#: ../libpurple/protocols/qq/buddy_info.c:61 msgid "Visible" msgstr "দৃশ্যমান" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:61 msgid "Friend Only" msgstr "শুধুমাত্র বন্ধু" -#: ../libpurple/protocols/qq/buddy_info.c:61 -#: ../libpurple/protocols/qq/buddy_info.c:66 msgid "Private" msgstr "ব্যক্তিগত" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:111 msgid "QQ Number" msgstr "QQ নম্বর" -#: ../libpurple/protocols/qq/buddy_info.c:113 msgid "Country/Region" msgstr "দেশ/এলাকা" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:114 msgid "Province/State" msgstr "প্রদেশ/রাজ্য" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:115 msgid "Zipcode" msgstr "জিপকোড" -#: ../libpurple/protocols/qq/buddy_info.c:117 msgid "Phone Number" msgstr "টেলিফোন নম্বর" -#: ../libpurple/protocols/qq/buddy_info.c:129 msgid "Authorize adding" msgstr "অনুমোদিত সংযুক্তকরণ" -#: ../libpurple/protocols/qq/buddy_info.c:133 msgid "Cellphone Number" msgstr "সেলফোন নম্বর" -#: ../libpurple/protocols/qq/buddy_info.c:135 msgid "Personal Introduction" msgstr "ব্যক্তিগত ভূমিকা" -#: ../libpurple/protocols/qq/buddy_info.c:136 msgid "City/Area" msgstr "শহর/এলাকা" -#: ../libpurple/protocols/qq/buddy_info.c:140 msgid "Publish Mobile" msgstr "মোবাইল প্রকাশ করুন" -#: ../libpurple/protocols/qq/buddy_info.c:141 msgid "Publish Contact" msgstr "যোগাযোগ প্রকাশ করুন" -#: ../libpurple/protocols/qq/buddy_info.c:142 msgid "College" msgstr "কলেজ" -#: ../libpurple/protocols/qq/buddy_info.c:143 msgid "Horoscope" msgstr "রাশি চক্র" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:144 msgid "Zodiac" msgstr "জোডিয়াক" -#: ../libpurple/protocols/qq/buddy_info.c:145 msgid "Blood" msgstr "রক্ত" # tithi -#: ../libpurple/protocols/qq/buddy_info.c:195 msgid "True" msgstr "সত্য" -#: ../libpurple/protocols/qq/buddy_info.c:195 msgid "False" msgstr "মিথ্যা" -#: ../libpurple/protocols/qq/buddy_info.c:415 -#: ../libpurple/protocols/qq/buddy_info.c:416 -#: ../libpurple/protocols/qq/qq.c:770 msgid "Modify Contact" msgstr "যোগাযোগ পরিবর্তন করুন" -#: ../libpurple/protocols/qq/buddy_info.c:418 -#: ../libpurple/protocols/qq/buddy_info.c:419 -#: ../libpurple/protocols/qq/qq.c:767 msgid "Modify Address" msgstr "ঠিকানা পরিবর্তন করুন" -#: ../libpurple/protocols/qq/buddy_info.c:421 -#: ../libpurple/protocols/qq/buddy_info.c:422 -#: ../libpurple/protocols/qq/qq.c:764 msgid "Modify Extended Information" msgstr "বর্ধিত তথ্য পরিবর্তন করুন" -#: ../libpurple/protocols/qq/buddy_info.c:426 -#: ../libpurple/protocols/qq/buddy_info.c:427 -#: ../libpurple/protocols/qq/qq.c:761 msgid "Modify Information" msgstr "তথ্য পরিবর্তন করুন" -#: ../libpurple/protocols/qq/buddy_info.c:440 msgid "Update" msgstr "হালনাগাদ করুন" -#: ../libpurple/protocols/qq/buddy_info.c:460 msgid "Could not change buddy information." msgstr "বন্ধুর তথ্য পরিবর্তন করতে পারে না।" # tithi -#: ../libpurple/protocols/qq/buddy_opt.c:320 #, c-format msgid "%u requires verification" msgstr "%u এর সত্যতা যাচাই করা প্রয়োজন" -#: ../libpurple/protocols/qq/buddy_opt.c:321 msgid "Add buddy question" msgstr "বন্ধুর প্রশ্ন যোগ করুন" # tithi -#: ../libpurple/protocols/qq/buddy_opt.c:322 msgid "Enter answer here" msgstr "এখানে উত্তর প্রবেশ করান" -#: ../libpurple/protocols/qq/buddy_opt.c:325 -#: ../libpurple/protocols/qq/buddy_opt.c:669 -#: ../libpurple/protocols/qq/group_join.c:149 msgid "Send" msgstr "প্রেরণ করুন" -#: ../libpurple/protocols/qq/buddy_opt.c:446 msgid "Invalid answer." msgstr "অবৈধ উত্তর।" -#: ../libpurple/protocols/qq/buddy_opt.c:618 -#: ../libpurple/protocols/qq/group_opt.c:124 -#: ../libpurple/protocols/yahoo/yahoo.c:997 msgid "Authorization denied message:" msgstr "প্রাপ্তাধিকার বার্তা অস্বীকার করেছে:" # tithi -#: ../libpurple/protocols/qq/buddy_opt.c:619 msgid "Sorry, you're not my style." msgstr "দুঃখিত,আপনি আমার শৈলী নয়।" -#: ../libpurple/protocols/qq/buddy_opt.c:664 #, c-format msgid "%u needs authorization" msgstr "%u এর প্রাপ্তাধিকার প্রয়োজন" -#: ../libpurple/protocols/qq/buddy_opt.c:665 msgid "Add buddy authorize" msgstr "বন্ধুর অনুমোদন যোগ করুন" # tithi -#: ../libpurple/protocols/qq/buddy_opt.c:666 msgid "Enter request here" msgstr "এখানে অনুরোধ প্রবেশ করান" -#: ../libpurple/protocols/qq/buddy_opt.c:667 -#: ../libpurple/protocols/qq/group_join.c:148 msgid "Would you be my friend?" msgstr "আপনি কি আমার বন্ধু হবেন?" -#: ../libpurple/protocols/qq/buddy_opt.c:704 -#: ../libpurple/protocols/qq/buddy_opt.c:729 -#: ../libpurple/protocols/qq/buddy_opt.c:733 -#: ../libpurple/protocols/qq/buddy_opt.c:749 -#: ../libpurple/protocols/qq/buddy_opt.c:774 -#: ../libpurple/protocols/qq/buddy_opt.c:1248 msgid "QQ Buddy" msgstr "QQ বন্ধু" -#: ../libpurple/protocols/qq/buddy_opt.c:704 msgid "Add buddy" msgstr "বন্ধু যোগ করুন" -#: ../libpurple/protocols/qq/buddy_opt.c:704 msgid "Invalid QQ Number" msgstr "অবৈধ QQ নম্বর" -#: ../libpurple/protocols/qq/buddy_opt.c:729 -#: ../libpurple/protocols/qq/buddy_opt.c:733 msgid "Failed sending authorize" msgstr "অনুমোদন পাঠাতে ব্যর্থ হয়েছে" -#: ../libpurple/protocols/qq/buddy_opt.c:748 #, c-format msgid "Failed removing buddy %u" msgstr "%u বন্ধুকে অপসারণ করতে ব্যর্থ হয়েছে" -#: ../libpurple/protocols/qq/buddy_opt.c:773 #, c-format msgid "Failed removing me from %d's buddy list" msgstr "%d এর বন্ধু তালিকা থেকে আমাকে অপসারণ করতে ব্যর্থ হয়েছে" -#: ../libpurple/protocols/qq/buddy_opt.c:984 -#: ../libpurple/protocols/qq/buddy_opt.c:1100 -#: ../libpurple/protocols/qq/buddy_opt.c:1225 -#: ../libpurple/protocols/qq/buddy_opt.c:1236 msgid "No reason given" msgstr "কোনো কারন দর্শানো হয়নি" #. only need to get value -#: ../libpurple/protocols/qq/buddy_opt.c:1130 #, c-format msgid "You have been added by %s" msgstr "আপনি %s দ্বারা সংযুক্ত হয়েছেন" -#: ../libpurple/protocols/qq/buddy_opt.c:1132 msgid "Would you like to add him?" msgstr "আপনি কি তাকে যোগ করতে চান?" -#: ../libpurple/protocols/qq/buddy_opt.c:1245 #, c-format msgid "Rejected by %s" msgstr "%s দ্বারা বাতিল করা হয়েছে" -#: ../libpurple/protocols/qq/buddy_opt.c:1246 #, c-format msgid "Message: %s" msgstr "বার্তা: %s" # tithi -#: ../libpurple/protocols/qq/group.c:65 msgid "ID: " msgstr "আইডি:" -#: ../libpurple/protocols/qq/group.c:98 msgid "Group ID" msgstr "দলের আইডি" # tithi -#: ../libpurple/protocols/qq/group.c:107 msgid "QQ Qun" msgstr "QQ Qun" -#: ../libpurple/protocols/qq/group.c:108 msgid "Please enter Qun number" msgstr "অনুগ্রহ করে Qun নম্বর প্রবেশ করান" # tithi -#: ../libpurple/protocols/qq/group.c:109 msgid "You can only search for permanent Qun\n" msgstr "আপনি শুধুমাত্র স্থায়ী Qun খুঁজতে পারেন\n" -#: ../libpurple/protocols/qq/group_im.c:398 -#: ../libpurple/protocols/qq/group_im.c:402 -#: ../libpurple/protocols/qq/im.c:1287 ../libpurple/protocols/qq/im.c:1291 msgid "(Invalid UTF-8 string)" msgstr "(অবৈধ UTF-8 স্ট্রিং)" # tithi -#: ../libpurple/protocols/qq/group_info.c:114 msgid "Not member" msgstr "সদস্য নয়" # tithi -#: ../libpurple/protocols/qq/group_info.c:117 -#: ../libpurple/protocols/qq/qq.c:336 msgid "Member" msgstr "সদস্য" -#: ../libpurple/protocols/qq/group_info.c:120 msgid "Requesting" msgstr "অনুরোধ করছে" -#: ../libpurple/protocols/qq/group_info.c:123 msgid "Admin" msgstr "প্রশাসন" -#: ../libpurple/protocols/qq/group_info.c:142 msgid "Notice" msgstr "বিজ্ঞপ্তি" -#: ../libpurple/protocols/qq/group_info.c:143 msgid "Detail" msgstr "বিস্তারিত" # tithi -#: ../libpurple/protocols/qq/group_info.c:148 msgid "Creator" msgstr "তৈরীকারক" -#: ../libpurple/protocols/qq/group_info.c:152 msgid "About me" msgstr "আমার সম্পর্কে" -#: ../libpurple/protocols/qq/group_info.c:156 msgid "Category" msgstr "শ্রেণী" # tithi -#: ../libpurple/protocols/qq/group_join.c:95 msgid "The Qun does not allow others to join" msgstr "Qun অন্যদের যুক্ত করতে অনুমতি দেয় না" -#: ../libpurple/protocols/qq/group_join.c:146 msgid "Join QQ Qun" msgstr "QQ Qun যুক্ত করুন" # tithi -#: ../libpurple/protocols/qq/group_join.c:147 msgid "Input request here" msgstr "এখানে অনুরোধ ইনপুট দিন" # tithi -#: ../libpurple/protocols/qq/group_join.c:222 #, c-format msgid "Successfully joined Qun %s (%u)" msgstr "%s (%u) Qun সফলভাবে যুক্ত করেছে" -#: ../libpurple/protocols/qq/group_join.c:226 msgid "Successfully joined Qun" msgstr "Qun সফলভাবে যুক্ত করেছে" # tithi -#: ../libpurple/protocols/qq/group_join.c:270 #, c-format msgid "Qun %u denied from joining" msgstr "%u Qun যুক্তকরণ বাতিল করেছে" -#: ../libpurple/protocols/qq/group_join.c:271 -#: ../libpurple/protocols/qq/group_join.c:279 -#: ../libpurple/protocols/qq/group_join.c:331 -#: ../libpurple/protocols/qq/group_opt.c:348 -#: ../libpurple/protocols/qq/group_opt.c:445 -#: ../libpurple/protocols/qq/group_opt.c:482 msgid "QQ Qun Operation" msgstr "QQ Qun অপারেশন" -#: ../libpurple/protocols/qq/group_join.c:271 -#: ../libpurple/protocols/qq/group_join.c:279 msgid "Failed:" msgstr "ব্যর্থ:" # tithi -#: ../libpurple/protocols/qq/group_join.c:279 msgid "Join Qun, Unknown Reply" msgstr "Qun যুক্ত করুন, অজানা উত্তর" -#: ../libpurple/protocols/qq/group_join.c:332 -#: ../libpurple/protocols/qq/qq.c:848 msgid "Quit Qun" msgstr "Qun ত্যাগ করুন" # tithi -#: ../libpurple/protocols/qq/group_join.c:333 msgid "" "Note, if you are the creator, \n" "this operation will eventually remove this Qun." @@ -10982,245 +7915,203 @@ msgstr "" "এই অপারেশনটি সবশেষে এই Qunটি অপসারণ করবে।" # tithi -#: ../libpurple/protocols/qq/group_opt.c:125 msgid "Sorry, you are not our style" msgstr "দুঃখিত,আপনি আমাদের শৈলী নন" -#: ../libpurple/protocols/qq/group_opt.c:207 msgid "Successfully changed Qun members" msgstr "Qun সদস্যদের সফলভাবে পরিবর্তন করা হয়েছে" -#: ../libpurple/protocols/qq/group_opt.c:251 msgid "Successfully changed Qun information" msgstr "Qun তথ্য সফলভাবে পরিবর্তন করা হয়েছে" # tithi -#: ../libpurple/protocols/qq/group_opt.c:349 msgid "You have successfully created a Qun" msgstr "আপনি Qun সফলভাবে তৈরি করেছেন" -#: ../libpurple/protocols/qq/group_opt.c:350 msgid "Would you like to set up detailed information now?" msgstr "আপনি কি এখন বিস্তারিত তথ্য সংস্থাপন করতে চান?" -#: ../libpurple/protocols/qq/group_opt.c:354 msgid "Setup" msgstr "সংস্থাপন করুন" -#: ../libpurple/protocols/qq/group_opt.c:425 #, c-format msgid "%u requested to join Qun %u for %s" msgstr "%1$u %3$s এর জন্য %2$u Qun যোগ করতে অনুরোধ করছে" -#: ../libpurple/protocols/qq/group_opt.c:438 #, c-format msgid "%u request to join Qun %u" msgstr "%1u %2u Qun যোগ করতে অনুরোধ করছে" -#: ../libpurple/protocols/qq/group_opt.c:480 #, c-format msgid "Failed to join Qun %u, operated by admin %u" msgstr "%u প্রশাসন দ্বারা পরিচালিত, Qun %u যোগ করতে ব্যর্থ হয়েছে" # tithi -#: ../libpurple/protocols/qq/group_opt.c:522 #, c-format msgid "<b>Joining Qun %u is approved by admin %u for %s</b>" msgstr "<b>%3$s এর জন্য %2$u প্রশাসন দ্বারা %1$u Qun যুক্ত করার অনুমোদন দিয়েছে</b>" -#: ../libpurple/protocols/qq/group_opt.c:557 #, c-format msgid "<b>Removed buddy %u.</b>" msgstr "<b>%u বন্ধু অপসারণ করা হয়েছে।</b>" # tithi -#: ../libpurple/protocols/qq/group_opt.c:590 #, c-format msgid "<b>New buddy %u joined.</b>" msgstr "<b>নতুন %u বন্ধু যোগদান করেছে।</b>" -#: ../libpurple/protocols/qq/qq.c:276 #, c-format msgid "Unknown-%d" msgstr "অজানা-%d" -#: ../libpurple/protocols/qq/qq.c:330 msgid "Level" msgstr "স্তর" # tithi -#: ../libpurple/protocols/qq/qq.c:339 msgid " VIP" msgstr " VIP" # tithi -#: ../libpurple/protocols/qq/qq.c:342 msgid " TCP" msgstr " TCP" -#: ../libpurple/protocols/qq/qq.c:345 msgid " FromMobile" msgstr " FromMobile" -#: ../libpurple/protocols/qq/qq.c:348 msgid " BindMobile" msgstr " BindMobile" -#: ../libpurple/protocols/qq/qq.c:351 msgid " Video" msgstr "ভিডিও" -#: ../libpurple/protocols/qq/qq.c:355 msgid " Zone" msgstr "এলাকা" # tithi -#: ../libpurple/protocols/qq/qq.c:357 ../libpurple/protocols/qq/qq.c:370 msgid "Flag" msgstr "পতাকা" # tithi -#: ../libpurple/protocols/qq/qq.c:365 msgid "Ver" msgstr "Ver" -#: ../libpurple/protocols/qq/qq.c:454 ../libpurple/protocols/qq/qq.c:907 msgid "Invalid name" msgstr "অবৈধ নাম" -#: ../libpurple/protocols/qq/qq.c:500 msgid "Select icon..." msgstr "আইকন নির্বাচন করুন..." -#: ../libpurple/protocols/qq/qq.c:570 #, c-format msgid "<b>Login time</b>: %d-%d-%d, %d:%d:%d<br>\n" msgstr "<b>লগইন সময়</b>: %1d-%2d-%3d, %4d:%5d:%6d<br>\n" -#: ../libpurple/protocols/qq/qq.c:573 #, c-format msgid "<b>Total Online Buddies</b>: %d<br>\n" msgstr "<b>সর্বমোট অনলাইন বন্ধু</b>: %d<br>\n" # fix me tithi -#: ../libpurple/protocols/qq/qq.c:575 #, c-format msgid "<b>Last Refresh</b>: %d-%d-%d, %d:%d:%d<br>\n" msgstr "<b>সর্বশেষ রিফ্রেশ</b>: %1d-%2d-%3d, %4d:%5d:%6d<br>\n" -#: ../libpurple/protocols/qq/qq.c:581 #, c-format msgid "<b>Server</b>: %s<br>\n" msgstr "<b>সার্ভার</b>: %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:582 #, c-format msgid "<b>Client Tag</b>: %s<br>\n" msgstr "<b>ক্লায়েন্ট ট্যাগ</b>: %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:583 #, c-format msgid "<b>Connection Mode</b>: %s<br>\n" msgstr "<b>সংযোগ মোড</b>: %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:584 #, c-format msgid "<b>My Internet IP</b>: %s:%d<br>\n" msgstr "<b>আমার ইন্টারনেট IP</b>: %1s:%2d<br>\n" -#: ../libpurple/protocols/qq/qq.c:588 #, c-format msgid "<b>Sent</b>: %lu<br>\n" msgstr "<b>পাঠানো হয়েছে</b>: %lu<br>\n" -#: ../libpurple/protocols/qq/qq.c:589 #, c-format msgid "<b>Resend</b>: %lu<br>\n" msgstr "<b>পুনরায় পাঠানো হয়েছে</b>: %lu<br>\n" -#: ../libpurple/protocols/qq/qq.c:590 #, c-format msgid "<b>Lost</b>: %lu<br>\n" msgstr "<b>হারিয়ে গেছে</b>: %lu<br>\n" -#: ../libpurple/protocols/qq/qq.c:591 #, c-format msgid "<b>Received</b>: %lu<br>\n" msgstr "<b>গৃহীত</b>: %lu<br>\n" -#: ../libpurple/protocols/qq/qq.c:592 #, c-format msgid "<b>Received Duplicate</b>: %lu<br>\n" msgstr "<b>অনুরুপ গৃহীত হয়েছে</b>: %lu<br>\n" -#: ../libpurple/protocols/qq/qq.c:599 #, c-format msgid "<b>Time</b>: %d-%d-%d, %d:%d:%d<br>\n" msgstr "<b>সময়</b>: %1d-%2d-%3d, %4d:%5d:%6d<br>\n" -#: ../libpurple/protocols/qq/qq.c:604 #, c-format msgid "<b>IP</b>: %s<br>\n" msgstr "<b>আইপি</b>: %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:609 msgid "Login Information" msgstr "লগইন তথ্য" # tithi -#: ../libpurple/protocols/qq/qq.c:625 msgid "<p><b>Original Author</b>:<br>\n" msgstr "<p><b> মূল লেখক</b>:<br>\n" # tithi -#: ../libpurple/protocols/qq/qq.c:628 msgid "<p><b>Code Contributors</b>:<br>\n" msgstr "<p><b> কোড অংশগ্রহণকারীগণ</b>:<br>\n" -#: ../libpurple/protocols/qq/qq.c:643 msgid "<p><b>Lovely Patch Writers</b>:<br>\n" msgstr "<p><b>প্রিয় প্যাচ লেখকগণ </b>:<br>\n" -#: ../libpurple/protocols/qq/qq.c:650 msgid "<p><b>Acknowledgement</b>:<br>\n" msgstr "<p><b>প্রাপ্তিস্বীকার</b>:<br>\n" +# tithi +#, fuzzy +msgid "<p><b>Scrupulous Testers</b>:<br>\n" +msgstr "<p><b> মূল লেখক</b>:<br>\n" + # fix me tithi -#: ../libpurple/protocols/qq/qq.c:663 msgid "<p><i>And, all the boys in the backroom...</i><br>\n" msgstr "<p><i>এবং, সমস্ত ছেলে পিছন-কামরায়...</i><br>\n" # tithi -#: ../libpurple/protocols/qq/qq.c:664 msgid "<i>Feel free to join us!</i> :)" msgstr "<i>আমাদের সাথে উন্মুক্তভাবে যোগদান করুন!</i> :)" -#: ../libpurple/protocols/qq/qq.c:667 #, c-format msgid "About OpenQ %s" msgstr "%s ওপেনQ সম্পর্কে" -#: ../libpurple/protocols/qq/qq.c:758 msgid "Change Icon" msgstr "আইকন পরিবর্তন করুন" -#: ../libpurple/protocols/qq/qq.c:773 ../libpurple/protocols/toc/toc.c:1680 msgid "Change Password" msgstr "গুপ্তসংকেত পরিবর্তন করুন" -#: ../libpurple/protocols/qq/qq.c:776 msgid "Account Information" msgstr "একাউন্ট তথ্য" # tithi -#: ../libpurple/protocols/qq/qq.c:779 msgid "Update all QQ Quns" msgstr "সব QQ Quns হালনাগাদ করুন" -#: ../libpurple/protocols/qq/qq.c:782 msgid "About OpenQ" msgstr "ওপেনQ সম্বন্ধে" +#, fuzzy +msgid "Modify Buddy Memo" +msgstr "ঠিকানা পরিবর্তন করুন" + #. *< type #. *< ui_requirement #. *< flags @@ -11231,140 +8122,112 @@ msgstr "ওপেনQ সম্বন্ধে" #. *< version #. * summary #. * description -#: ../libpurple/protocols/qq/qq.c:1011 ../libpurple/protocols/qq/qq.c:1013 msgid "QQ Protocol Plugin" msgstr "QQ প্রটোকল প্লাগইন" -#: ../libpurple/protocols/qq/qq.c:1051 msgid "Auto" msgstr "স্বয়ংক্রিয়" -#: ../libpurple/protocols/qq/qq.c:1068 msgid "Select Server" msgstr "সার্ভার নির্বাচন করুন" # tithi -#: ../libpurple/protocols/qq/qq.c:1072 msgid "QQ2005" msgstr "QQ২০০৫" # tithi -#: ../libpurple/protocols/qq/qq.c:1077 msgid "QQ2007" msgstr "QQ২০০৭" # tithi -#: ../libpurple/protocols/qq/qq.c:1082 msgid "QQ2008" msgstr "QQ২০০৮" -#: ../libpurple/protocols/qq/qq.c:1089 msgid "Connect by TCP" msgstr "TCP দ্বারা সংযোগ করুন" -#: ../libpurple/protocols/qq/qq.c:1092 msgid "Show server notice" msgstr "সার্ভারের নোটিশ প্রদর্শন করুন" -#: ../libpurple/protocols/qq/qq.c:1095 msgid "Show server news" msgstr "সার্ভারের খবর প্রদর্শন করুন" +msgid "Show chat room when msg comes" +msgstr "" + # fix me tithi -#: ../libpurple/protocols/qq/qq.c:1098 msgid "Keep alive interval (seconds)" msgstr "বিরতি সক্রিয় রাখুন (সেকেন্ড)" # tithi -#: ../libpurple/protocols/qq/qq.c:1101 msgid "Update interval (seconds)" msgstr "বিরতি হালনাগাদ করুন (সেকেন্ড)" # fix me tithi -#: ../libpurple/protocols/qq/qq_base.c:75 -#: ../libpurple/protocols/qq/qq_base.c:163 msgid "Cannot decrypt server reply" msgstr "সার্ভার জবাব অসঙ্কেতায়ন করে না" # tithi -#: ../libpurple/protocols/qq/qq_base.c:314 #, c-format msgid "Failed requesting token, 0x%02X" msgstr "টোকেন চাইতে ব্যর্থ, 0x%02X" -#: ../libpurple/protocols/qq/qq_base.c:323 #, c-format msgid "Invalid token len, %d" msgstr "অবৈধ টোকেন দৈর্ঘ্য, %d" # Fix me tithi #. extend redirect used in QQ2006 -#: ../libpurple/protocols/qq/qq_base.c:408 msgid "Redirect_EX is not currently supported" msgstr "পুনঃনির্দেশিতEX বর্তমানে সমর্থিত নয় (_E)" #. need activation #. need activation #. need activation -#: ../libpurple/protocols/qq/qq_base.c:419 -#: ../libpurple/protocols/qq/qq_base.c:1105 msgid "Activation required" msgstr "সক্রিয়করণ আবশ্যক" # tithi -#: ../libpurple/protocols/qq/qq_base.c:427 #, c-format msgid "Unknown reply code when logging in (0x%02X)" msgstr "(0x%02X) এ লগইন করার সময় অজানা উত্তর কোড" # fix me tithi -#: ../libpurple/protocols/qq/qq_base.c:658 msgid "Could not decrypt server reply" msgstr "সার্ভার জবাব অসঙ্কেতায়ন করতে পারেনি" # tithi -#: ../libpurple/protocols/qq/qq_base.c:750 msgid "Requesting captcha" msgstr "captcha অনুরোধ করছে" # tithi -#: ../libpurple/protocols/qq/qq_base.c:795 msgid "Checking captcha" msgstr "captcha পরীক্ষা করছে" # tithi -#: ../libpurple/protocols/qq/qq_base.c:818 msgid "Failed captcha verification" msgstr "captcha যাচাইকরণ ব্যর্থ হয়েছে" # fix me tithi -#: ../libpurple/protocols/qq/qq_base.c:868 msgid "Captcha Image" msgstr "Captcha চিত্র" -#: ../libpurple/protocols/qq/qq_base.c:872 msgid "Enter code" msgstr "কোড প্রবেশ করান" # tithi -#: ../libpurple/protocols/qq/qq_base.c:877 -#: ../libpurple/protocols/qq/qq_base.c:878 msgid "QQ Captcha Verification" msgstr "QQ Captcha যাচাইকরণ" -#: ../libpurple/protocols/qq/qq_base.c:879 msgid "Enter the text from the image" msgstr "চিত্র হতে পাঠ প্রবেশ করান" # tithi -#: ../libpurple/protocols/qq/qq_base.c:1116 #, c-format msgid "Unknown reply when checking password (0x%02X)" msgstr "গুপ্তসঙ্কেত পরীক্ষণ করার সময় অজানা উত্তর (0x%02X)" # tithi -#: ../libpurple/protocols/qq/qq_base.c:1262 -#: ../libpurple/protocols/qq/qq_base.c:1451 #, c-format msgid "" "Unknown reply code when logging in (0x%02X):\n" @@ -11374,61 +8237,40 @@ msgstr "" "%s" #. we didn't successfully connect. tdt->toc_fd is valid here -#: ../libpurple/protocols/qq/qq_network.c:211 -#: ../libpurple/protocols/qq/qq_network.c:236 -#: ../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 "সংযুক্ত করতে ব্যর্থ।" -#: ../libpurple/protocols/qq/qq_network.c:370 -#: ../libpurple/protocols/qq/qq_network.c:496 msgid "Socket error" msgstr "সকেট ত্রুটি" -#: ../libpurple/protocols/qq/qq_network.c:507 msgid "Unable to read from socket" msgstr "সকেট থেকে পাঠ করতে ব্যর্থ" -#: ../libpurple/protocols/qq/qq_network.c:590 -#: ../libpurple/protocols/yahoo/yahoo_packet.c:307 msgid "Write Error" msgstr "লিখন ত্রুটি" -#: ../libpurple/protocols/qq/qq_network.c:666 msgid "Connection lost" msgstr "সংযোগ হারিয়ে গেছে" -#: ../libpurple/protocols/qq/qq_network.c:789 msgid "Getting server" msgstr "সার্ভার পাচ্ছে" -#: ../libpurple/protocols/qq/qq_network.c:794 msgid "Requesting token" msgstr "টোকেন অনুরোধ করছে" -#: ../libpurple/protocols/qq/qq_network.c:867 -#: ../libpurple/protocols/simple/simple.c:1809 msgid "Couldn't resolve host" msgstr "হোস্ট সমাধান করা সম্ভব হয়নি" -#: ../libpurple/protocols/qq/qq_network.c:947 msgid "Invalid server or port" msgstr "অবৈধ সার্ভার বা পোর্ট" # tithi -#: ../libpurple/protocols/qq/qq_network.c:951 msgid "Connecting to server" msgstr "সার্ভারে সংযোজিত হচ্ছে" -#: ../libpurple/protocols/qq/qq_process.c:75 msgid "QQ Error" msgstr "QQ ত্রুটি" -#: ../libpurple/protocols/qq/qq_process.c:114 #, c-format msgid "" "Server News:\n" @@ -11441,17 +8283,14 @@ msgstr "" "%2s\n" "%3s" -#: ../libpurple/protocols/qq/qq_process.c:152 #, c-format msgid "%s:%s" msgstr "%1s:%2s" -#: ../libpurple/protocols/qq/qq_process.c:422 #, c-format msgid "From %s:" msgstr "%s থেকে:" -#: ../libpurple/protocols/qq/qq_process.c:423 #, c-format msgid "" "Server notice From %s: \n" @@ -11461,12 +8300,10 @@ msgstr "" "%2s" # tithi -#: ../libpurple/protocols/qq/qq_process.c:543 msgid "Unknown SERVER CMD" msgstr "অজানা সার্ভার CMD" # tithi -#: ../libpurple/protocols/qq/qq_process.c:559 #, c-format msgid "" "Error reply of %s(0x%02X)\n" @@ -11475,191 +8312,149 @@ msgstr "" "%1s(0x%02X) এর ত্রুটিপূর্ণ উত্তর\n" "রুম %2u, উত্তর 0x%02X" -#: ../libpurple/protocols/qq/qq_process.c:562 msgid "QQ Qun Command" msgstr "QQ Qun নির্দেশ" # tithi -#: ../libpurple/protocols/qq/qq_process.c:953 msgid "Could not decrypt login reply" msgstr "লগইন উত্তর অসঙ্কেতায়ন করতে পারে না" # fix me tithi -#: ../libpurple/protocols/qq/qq_process.c:1024 msgid "Unknown LOGIN CMD" msgstr "অজানা লগইন CMD" -#: ../libpurple/protocols/qq/qq_process.c:1146 msgid "Unknown CLIENT CMD" msgstr "অজানা ক্লায়েন্ট CMD" -#: ../libpurple/protocols/qq/send_file.c:702 #, c-format msgid "%d has declined the file %s" msgstr "%1d %2s ফাইলটি প্রত্যাখ্যান করেছে" -#: ../libpurple/protocols/qq/send_file.c:705 -#: ../libpurple/protocols/qq/send_file.c:736 msgid "File Send" msgstr "ফাইল প্রেরণ করা হয়েছে" -#: ../libpurple/protocols/qq/send_file.c:733 #, c-format msgid "%d canceled the transfer of %s" msgstr "%1d %2s-এর স্থানান্তর বাতিল করেছেন" -#: ../libpurple/protocols/sametime/sametime.c:420 msgid "Connection closed (writing)" msgstr "সংযোগ বন্ধ করা হয়েছে (লিখছে)" -#: ../libpurple/protocols/sametime/sametime.c:1299 #, c-format msgid "<b>Group Title:</b> %s<br>" msgstr "<b>দলের শিরোনাম:</b> %s<br>" -#: ../libpurple/protocols/sametime/sametime.c:1300 #, c-format msgid "<b>Notes Group ID:</b> %s<br>" msgstr "<b>নোটের দল আইডি:</b> %s<br>" # tithi -#: ../libpurple/protocols/sametime/sametime.c:1302 #, c-format msgid "Info for Group %s" msgstr "%s দলের জন্য তথ্য" # tithi -#: ../libpurple/protocols/sametime/sametime.c:1304 msgid "Notes Address Book Information" msgstr "নোটের ঠিকানা বইয়ের তথ্য" # tithi -#: ../libpurple/protocols/sametime/sametime.c:1336 msgid "Invite Group to Conference..." msgstr "অধিবেশনে গ্রুপকে আমন্ত্রণ জানান..." -#: ../libpurple/protocols/sametime/sametime.c:1346 msgid "Get Notes Address Book Info" msgstr "নোটের ঠিকানা বইয়ের তথ্য গ্রহণ করুন" # tithi -#: ../libpurple/protocols/sametime/sametime.c:1513 msgid "Sending Handshake" msgstr "হ্যান্ডসেক পাঠাচ্ছে" -#: ../libpurple/protocols/sametime/sametime.c:1518 msgid "Waiting for Handshake Acknowledgement" msgstr "হ্যান্ডশেকের সাড়া পাওয়ার জন্য অপেক্ষা করছে" # tithi -#: ../libpurple/protocols/sametime/sametime.c:1523 msgid "Handshake Acknowledged, Sending Login" msgstr "হ্যান্ডসেক সাড়া দিয়েছে, লগইন পাঠাচ্ছে" # tithi -#: ../libpurple/protocols/sametime/sametime.c:1528 msgid "Waiting for Login Acknowledgement" msgstr "লগইন সাড়ার জন্য অপেক্ষা করছে" # tithi -#: ../libpurple/protocols/sametime/sametime.c:1533 msgid "Login Redirected" msgstr "লগইন পুনঃ নির্দেশিত" # tithi -#: ../libpurple/protocols/sametime/sametime.c:1539 msgid "Forcing Login" msgstr "লগইন বাধ্য করছে" # tithi -#: ../libpurple/protocols/sametime/sametime.c:1543 msgid "Login Acknowledged" msgstr "লগইন সাড়া দিয়েছে" # tithi -#: ../libpurple/protocols/sametime/sametime.c:1548 msgid "Starting Services" msgstr "সেবা শুরু করছে" # tithi -#: ../libpurple/protocols/sametime/sametime.c:1685 #, c-format msgid "" "A Sametime administrator has issued the following announcement on server %s" msgstr "একটি এককালীন প্রশাসক %s সার্ভারে নিম্নলিখিত ঘোষণা প্রচার করেছে" # tithi -#: ../libpurple/protocols/sametime/sametime.c:1690 msgid "Sametime Administrator Announcement" msgstr "এককালীন প্রশাসকের ঘোষণা" -#: ../libpurple/protocols/sametime/sametime.c:1743 msgid "Connection reset" msgstr "সংযোগ পুনরায় বিন্যাস করুন" -#: ../libpurple/protocols/sametime/sametime.c:1755 #, c-format msgid "Error reading from socket: %s" msgstr "সকেট থেকে পড়ায় ত্রুটি: %s" #. this is a regular connect, error out -#: ../libpurple/protocols/sametime/sametime.c:1780 -#: ../libpurple/protocols/sametime/sametime.c:3788 msgid "Unable to connect to host" msgstr "হোস্টের সাথে সংযোগে ব্যর্থ" # tithi -#: ../libpurple/protocols/sametime/sametime.c:1821 #, c-format msgid "Announcement from %s" msgstr "%s হতে ঘোষণা" # tithi -#: ../libpurple/protocols/sametime/sametime.c:1995 msgid "Conference Closed" msgstr "অধিবেশন বন্ধ" -#: ../libpurple/protocols/sametime/sametime.c:2460 msgid "Unable to send message: " msgstr "বার্তা পাঠাতে অসমর্থ:" -#: ../libpurple/protocols/sametime/sametime.c:3016 msgid "Place Closed" msgstr "স্থান বন্ধ" # tithi -#: ../libpurple/protocols/sametime/sametime.c:3286 msgid "Microphone" msgstr "মাইক্রোফোন" # tithi -#: ../libpurple/protocols/sametime/sametime.c:3287 msgid "Speakers" msgstr "স্পিকারসমূহ" # tithi -#: ../libpurple/protocols/sametime/sametime.c:3288 msgid "Video Camera" msgstr "ভিডিও ক্যামেরা" -#: ../libpurple/protocols/sametime/sametime.c:3326 -#: ../libpurple/protocols/sametime/sametime.c:4207 msgid "Supports" msgstr "সমর্থনসমূহ" # tithi -#: ../libpurple/protocols/sametime/sametime.c:3331 -#: ../libpurple/protocols/sametime/sametime.c:4181 msgid "External User" msgstr "বাহ্যিক ব্যবহারকারী" # tithi -#: ../libpurple/protocols/sametime/sametime.c:3437 msgid "Create conference with user" msgstr "ব্যবহারকারীর সাথে অধিবেশন তৈরি করুন" # tithi -#: ../libpurple/protocols/sametime/sametime.c:3438 #, c-format msgid "" "Please enter a topic for the new conference, and an invitation message to be " @@ -11668,32 +8463,26 @@ msgstr "" "অনুগ্রহ করে নতুন অধিবেশনের জন্য একটি বিষয় প্রবেশ করান, এবং %s এ একটি আমন্ত্রণ বার্তা " "পাঠাতে হবে" -#: ../libpurple/protocols/sametime/sametime.c:3442 msgid "New Conference" msgstr "নতুন অধিবেশন" # tithi -#: ../libpurple/protocols/sametime/sametime.c:3444 msgid "Create" msgstr "তৈরি করুন " # tithi -#: ../libpurple/protocols/sametime/sametime.c:3509 msgid "Available Conferences" msgstr "সহজলভ্য অধিবেশনসমূহ" # tithi -#: ../libpurple/protocols/sametime/sametime.c:3515 msgid "Create New Conference..." msgstr "নতুন অধিবেশন তৈরি করুন..." # tithi -#: ../libpurple/protocols/sametime/sametime.c:3522 msgid "Invite user to a conference" msgstr "ব্যবহারকারীকে অধিবেশনে আমন্ত্রন জানান" # tithi -#: ../libpurple/protocols/sametime/sametime.c:3523 #, c-format msgid "" "Select a conference from the list below to send an invite to user %s. Select " @@ -11705,31 +8494,25 @@ msgstr "" "তবে \"নতুন অধিবেশন তৈরি করুন\" নির্বাচন করুন।" # tithi -#: ../libpurple/protocols/sametime/sametime.c:3528 msgid "Invite to Conference" msgstr "অধিবেশনে আমন্ত্রন জানান" # tithi -#: ../libpurple/protocols/sametime/sametime.c:3619 msgid "Invite to Conference..." msgstr "অধিবেশনে আমন্ত্রন জানান..." # tithi -#: ../libpurple/protocols/sametime/sametime.c:3624 msgid "Send TEST Announcement" msgstr "পরীক্ষণ ঘোষণা পাঠান" -#: ../libpurple/protocols/sametime/sametime.c:3643 ../pidgin/gtkconv.c:4591 msgid "Topic:" msgstr "বিষয়:" # tithi -#: ../libpurple/protocols/sametime/sametime.c:3671 msgid "No Sametime Community Server specified" msgstr "কোনো এককালীন সম্প্রদায় সার্ভার উল্লেখ করা হয়নি" # tithi -#: ../libpurple/protocols/sametime/sametime.c:3696 #, c-format msgid "" "No host or IP address has been configured for the Meanwhile account %s. " @@ -11739,47 +8522,36 @@ msgstr "" "লগইন অব্যাহত রাখতে নিচে একটি প্রবেশ করান।" # tithi -#: ../libpurple/protocols/sametime/sametime.c:3701 msgid "Meanwhile Connection Setup" msgstr "ইতোমধ্যে সংযোগ সংস্থাপন করুন" # tithi -#: ../libpurple/protocols/sametime/sametime.c:3702 msgid "No Sametime Community Server Specified" msgstr "কোনো এককালীন সম্প্রদায় সার্ভার উল্লেখিত নয়" -#: ../libpurple/protocols/sametime/sametime.c:3704 msgid "Connect" msgstr "সংযোগ দিন" # tithi -#: ../libpurple/protocols/sametime/sametime.c:4197 #, c-format msgid "Unknown (0x%04x)<br>" msgstr "অজানা (0x%04x)<br>" -#: ../libpurple/protocols/sametime/sametime.c:4199 msgid "Last Known Client" msgstr "সর্বশেষ পরিচিত গ্রাহক" -#: ../libpurple/protocols/sametime/sametime.c:4363 -#: ../libpurple/protocols/sametime/sametime.c:5566 msgid "User Name" msgstr "ব্যবহারকারীর নাম" # tithi -#: ../libpurple/protocols/sametime/sametime.c:4366 -#: ../libpurple/protocols/sametime/sametime.c:5569 msgid "Sametime ID" msgstr "এককালীন আইডি" # tithi -#: ../libpurple/protocols/sametime/sametime.c:4390 msgid "An ambiguous user ID was entered" msgstr "একটি অনিশ্চিত ব্যবহারকারী আইডি প্রবেশ করা হয়েছিল" # tithi -#: ../libpurple/protocols/sametime/sametime.c:4391 #, c-format msgid "" "The identifier '%s' may possibly refer to any of the following users. Please " @@ -11789,17 +8561,14 @@ msgstr "" "করে নিচের তালিকা থেকে সঠিক ব্যবহারকারী নির্বাচন করে আপনার বন্ধু তালিকাতে তাদেরকে " "যোগ করুন।" -#: ../libpurple/protocols/sametime/sametime.c:4396 msgid "Select User" msgstr "ব্যবহারকারী নির্বাচন করুন" # tithi -#: ../libpurple/protocols/sametime/sametime.c:4480 msgid "Unable to add user: user not found" msgstr "ব্যবহারকারী যোগ করতে অক্ষম: ব্যবহারকারী খুঁজে পায়নি" # tithi -#: ../libpurple/protocols/sametime/sametime.c:4482 #, c-format msgid "" "The identifier '%s' did not match any users in your Sametime community. This " @@ -11808,7 +8577,6 @@ msgstr "" "'%s' শনাক্তকারী আপনার এককালীন সম্প্রদায়ের কোনো ব্যবহারকারীর সাথে সমন্বয় করে না। " "এই এন্ট্রিটি আপনার বন্ধু তালিকা থেকে অপসারণ করা হয়েছে।" -#: ../libpurple/protocols/sametime/sametime.c:5071 #, c-format msgid "" "Error reading file %s: \n" @@ -11817,72 +8585,57 @@ msgstr "" "%1s ফাইল পড়ায় ত্রুটি: \n" "%2s\n" -#: ../libpurple/protocols/sametime/sametime.c:5206 msgid "Remotely Stored Buddy List" msgstr "দূর হতে সংরক্ষিত বন্ধু তালিকা" -#: ../libpurple/protocols/sametime/sametime.c:5211 msgid "Buddy List Storage Mode" msgstr "বন্ধু তালিকার সংরক্ষন পদ্ধতি" -#: ../libpurple/protocols/sametime/sametime.c:5214 msgid "Local Buddy List Only" msgstr "শুধুমাত্র স্থানীয় বন্ধু তালিকা" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5216 msgid "Merge List from Server" msgstr "সার্ভারের তালিকা একত্রিত করুন" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5218 msgid "Merge and Save List to Server" msgstr "সার্ভারে তালিকা একত্রিত এবং সংরক্ষণ করুন" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5220 msgid "Synchronize List with Server" msgstr "সার্ভারের সঙ্গে সমকালীন তালিকা" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5275 #, c-format msgid "Import Sametime List for Account %s" msgstr "%s একাউন্টের জন্য এককালীন তালিকা আমদানি করুন" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5315 #, c-format msgid "Export Sametime List for Account %s" msgstr "%s একাউন্টের জন্য এককালীন তালিকা রপ্তানি করুন" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5369 msgid "Unable to add group: group exists" msgstr "দল যোগ করতে অক্ষম: দল বিদ্যমান" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5370 #, c-format msgid "A group named '%s' already exists in your buddy list." msgstr "'%s' নামের একটি দল আপনার বন্ধু তালিকায় ইতোমধ্যে বিদ্যমান রয়েছে।" -#: ../libpurple/protocols/sametime/sametime.c:5373 -#: ../libpurple/protocols/sametime/sametime.c:5503 msgid "Unable to add group" msgstr "দল যোগ করতে ব্যর্থ" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5432 msgid "Possible Matches" msgstr "সম্ভাব্য মিলসমূহ" -#: ../libpurple/protocols/sametime/sametime.c:5448 msgid "Notes Address Book group results" msgstr "নোটের ঠিকানা বইয়ের দলগত ফলাফল" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5449 #, c-format msgid "" "The identifier '%s' may possibly refer to any of the following Notes Address " @@ -11893,17 +8646,14 @@ msgstr "" "পারে। অনুগ্রহ করে নিচের তালিকা থেকে সঠিক গ্রুপ নির্বাচন করে আপনার বন্ধু তালিকায় এটি " "যোগ করুন।" -#: ../libpurple/protocols/sametime/sametime.c:5454 msgid "Select Notes Address Book" msgstr "নোটের ঠিকানা বই নির্বাচন করুন" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5497 msgid "Unable to add group: group not found" msgstr "দল যোগ করতে অক্ষম: দল খুঁজে পায়নি" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5499 #, c-format msgid "" "The identifier '%s' did not match any Notes Address Book groups in your " @@ -11912,12 +8662,10 @@ msgstr "" "'%s' শনাক্তকারী আপনার এককালীন সম্প্রদায়ের কোনো নোট ঠিকানা বইয়ের দলের সাথে সমন্বয় " "করেনি।" -#: ../libpurple/protocols/sametime/sametime.c:5540 msgid "Notes Address Book Group" msgstr "নোটের ঠিকানা বইয়ের দল" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5541 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." @@ -11925,13 +8673,11 @@ msgstr "" "নিচের ক্ষেত্রে নোটের ঠিকানা বইয়ের গ্রুপের নাম প্রবেশ করে আপনার বন্ধু তালিকায় শ্রেণী " "এবং এর সদসদের যোগ করুন।" -#: ../libpurple/protocols/sametime/sametime.c:5590 #, c-format msgid "Search results for '%s'" msgstr "'%s' এর সন্ধান ফলাফল" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5591 #, c-format msgid "" "The identifier '%s' may possibly refer to any of the following users. You " @@ -11942,30 +8688,24 @@ msgstr "" "সম্ভবত নিচের কার্য বোতাম দ্বারা আপনার বন্ধু তালিকাতে এই ব্যবহারকারীসমূহ যোগ করতে " "পারেন বা তাদেরকে বার্তা পাঠাতে পারেন।" -#: ../libpurple/protocols/sametime/sametime.c:5598 ../pidgin/gtknotify.c:793 msgid "Search Results" msgstr "অনুসন্ধানের ফলাফল" -#: ../libpurple/protocols/sametime/sametime.c:5623 msgid "No matches" msgstr "কোনে মিল নেই" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5624 #, c-format msgid "The identifier '%s' did not match any users in your Sametime community." msgstr "'%s' শনাক্তকারী আপনার এককালীন সম্প্রদায়ের কোনো ব্যবহারকারীর সাথে মিলেনি।" -#: ../libpurple/protocols/sametime/sametime.c:5628 msgid "No Matches" msgstr "কোনো মিল নেই" -#: ../libpurple/protocols/sametime/sametime.c:5665 msgid "Search for a user" msgstr "একজন ব্যবহারকারীর জন্য অনুসন্ধান করুন" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5666 msgid "" "Enter a name or partial ID in the field below to search for matching users " "in your Sametime community." @@ -11973,137 +8713,79 @@ msgstr "" "আপনার এককালীন সম্প্রদায়ের সমন্বয়করণ ব্যবহারকারীর জন্য অনুসন্ধান করতে নিচের ক্ষেত্রে " "একটি নাম বা আংশিক আইডি প্রবেশ করান।" -#: ../libpurple/protocols/sametime/sametime.c:5669 msgid "User Search" msgstr "ব্যবহারকারী অনুসন্ধান করুন" # tithi -#: ../libpurple/protocols/sametime/sametime.c:5682 msgid "Import Sametime List..." msgstr "এককালীন তালিকা আমদানি করুন..." # tithi -#: ../libpurple/protocols/sametime/sametime.c:5686 msgid "Export Sametime List..." msgstr "এককালীন তালিকা রপ্তানি করুন..." -#: ../libpurple/protocols/sametime/sametime.c:5690 msgid "Add Notes Address Book Group..." msgstr "নোটের ঠিকানা বইয়ের দল যোগ করুন..." -#: ../libpurple/protocols/sametime/sametime.c:5694 msgid "User Search..." msgstr "ব্যবহারকারী অনুসন্ধান করুন..." # tithi -#: ../libpurple/protocols/sametime/sametime.c:5800 msgid "Force login (ignore server redirects)" msgstr "লগইন বাধ্য করুন (সার্ভারের পুনঃ নির্দেশনাগুলো উপেক্ষা করুন)" # tithi #. pretend to be Sametime Connect -#: ../libpurple/protocols/sametime/sametime.c:5810 msgid "Hide client identity" msgstr "গ্রাহক পরিচয় গোপন করুন" # tithi -#: ../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 "%s ব্যবহারকারী নেটওয়ার্কে উপস্থিত নেই" -#: ../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 "মূল চুক্তি" # tithi -#: ../libpurple/protocols/silc/buddy.c:54 -#: ../libpurple/protocols/silc10/buddy.c:54 msgid "Cannot perform the key agreement" msgstr "মূল চুক্তি সম্পাদন করতে পারে না" # tithi -#: ../libpurple/protocols/silc/buddy.c:111 -#: ../libpurple/protocols/silc10/buddy.c:116 msgid "Error occurred during key agreement" msgstr "মূল চুক্তির সময় ত্রুটি ঘটেছিল" # tithi -#: ../libpurple/protocols/silc/buddy.c:115 -#: ../libpurple/protocols/silc10/buddy.c:120 msgid "Key Agreement failed" msgstr "মূং চুক্তি ব্যর্থ হয়েছে" # tithi -#: ../libpurple/protocols/silc/buddy.c:120 -#: ../libpurple/protocols/silc10/buddy.c:125 msgid "Timeout during key agreement" msgstr "মূল চুক্তির সময় মেয়াদ উত্তীর্ণ হয়েছে" # tithi -#: ../libpurple/protocols/silc/buddy.c:125 -#: ../libpurple/protocols/silc10/buddy.c:130 msgid "Key agreement was aborted" msgstr "মূল চুক্তি বাতিল করা হয়েছিল" # tithi -#: ../libpurple/protocols/silc/buddy.c:130 -#: ../libpurple/protocols/silc10/buddy.c:135 msgid "Key agreement is already started" msgstr "মূল চুক্তি ইতোমধ্যে শুরু হয়েছে" # tithi -#: ../libpurple/protocols/silc/buddy.c:135 -#: ../libpurple/protocols/silc10/buddy.c:140 msgid "Key agreement cannot be started with yourself" msgstr "মূল চুক্তি আপনার সঙ্গে শুরু করা যায় না" # tithi -#: ../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 "দূরবর্তী ব্যবহারকারী আর নেটওয়ার্কে উপস্থিত থাকবে না" # tithi -#: ../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 " "agreement?" msgstr "মূল চুক্তির অনুরোধ %s থেকে গ্রহণ করেছে। আপনি কি মূল চুক্তি সম্পাদন করতে আগ্রহী?" -#: ../libpurple/protocols/silc/buddy.c:302 -#: ../libpurple/protocols/silc10/buddy.c:299 #, c-format msgid "" "The remote user is waiting key agreement on:\n" @@ -12115,105 +8797,46 @@ msgstr "" "দূরবর্তী পোর্ট: %d" # tithi -#: ../libpurple/protocols/silc/buddy.c:315 -#: ../libpurple/protocols/silc10/buddy.c:312 msgid "Key Agreement Request" msgstr "মূল চুক্তির অনুরোধ" -#: ../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 "গুপ্তসঙ্কেত যুক্ত আইএম" -#: ../libpurple/protocols/silc/buddy.c:413 -#: ../libpurple/protocols/silc10/buddy.c:424 msgid "Cannot set IM key" msgstr "আইএম কী বিন্যাস করতে পারে না" -#: ../libpurple/protocols/silc/buddy.c:453 -#: ../libpurple/protocols/silc10/buddy.c:466 msgid "Set IM Password" msgstr "আইএম গুপ্তসঙ্কেত বিন্যাস করুন" # tithi -#: ../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 "সর্বসাধারণ কী গ্রহণ করুন" # tithi -#: ../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 "সর্বসাধারণ কী পুনরুদ্ধার করতে পারে না" # tithi -#: ../libpurple/protocols/silc/buddy.c:622 -#: ../libpurple/protocols/silc/buddy.c:1670 -#: ../libpurple/protocols/silc10/buddy.c:635 -#: ../libpurple/protocols/silc10/buddy.c:1669 msgid "Show Public Key" msgstr "সর্বসাধারণ কী দেখান" # tithi -#: ../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 "সর্বসাধারণ কী লোড করতে পারেনি" -#: ../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 "ব্যবহারকারী তথ্য" -#: ../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 "ব্যবহারকারীর তথ্য গ্রহণ করতে পারে না" # fix me tithi -#: ../libpurple/protocols/silc/buddy.c:723 -#: ../libpurple/protocols/silc10/buddy.c:735 #, c-format msgid "The %s buddy is not trusted" msgstr "%s বন্ধু বিশ্বাসযোগ্য নয়" # tithi -#: ../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." @@ -12223,21 +8846,15 @@ msgstr "" "ব্যবহার করতে পারেন না।" #. Open file selector to select the public key. -#: ../libpurple/protocols/silc/buddy.c:1062 -#: ../libpurple/protocols/silc10/buddy.c:1070 msgid "Open..." msgstr "খুলুন..." # tithi -#: ../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 "%s বন্ধু নেটওয়ার্কে উপস্থিত নেই" # tithi -#: ../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." @@ -12246,19 +8863,13 @@ msgstr "" "আমদানি করতে 'আমদানি করুন' চাপুন।" # tithi -#: ../libpurple/protocols/silc/buddy.c:1080 -#: ../libpurple/protocols/silc10/buddy.c:1088 msgid "_Import..." msgstr "আমদানি করুন... (_I)" -#: ../libpurple/protocols/silc/buddy.c:1186 -#: ../libpurple/protocols/silc10/buddy.c:1184 msgid "Select correct user" msgstr "সঠিক ব্যবহারকারী নির্বাচন করুন" # tithi -#: ../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." @@ -12267,8 +8878,6 @@ msgstr "" "তালিকা থেকে সঠিক ব্যবহারকারী নির্বাচন করুন।" # tithi -#: ../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." @@ -12277,335 +8886,177 @@ msgstr "" "সঠিক ব্যবহারকারী নির্বাচন করুন।" # tithi -#: ../libpurple/protocols/silc/buddy.c:1489 -#: ../libpurple/protocols/silc10/buddy.c:1489 msgid "Detached" msgstr "আলাদা" # tithi -#: ../libpurple/protocols/silc/buddy.c:1493 -#: ../libpurple/protocols/silc/silc.c:59 -#: ../libpurple/protocols/silc10/buddy.c:1493 -#: ../libpurple/protocols/silc10/silc.c:50 msgid "Indisposed" msgstr "অক্ষম" # tithi -#: ../libpurple/protocols/silc/buddy.c:1497 -#: ../libpurple/protocols/silc/silc.c:61 -#: ../libpurple/protocols/silc10/buddy.c:1497 -#: ../libpurple/protocols/silc10/silc.c:52 msgid "Wake Me Up" msgstr "আমাকে জাগান" # tithi -#: ../libpurple/protocols/silc/buddy.c:1499 -#: ../libpurple/protocols/silc/silc.c:53 -#: ../libpurple/protocols/silc10/buddy.c:1499 -#: ../libpurple/protocols/silc10/silc.c:44 msgid "Hyper Active" msgstr "অতিমাত্রায় সক্রিয়" -#: ../libpurple/protocols/silc/buddy.c:1501 -#: ../libpurple/protocols/silc10/buddy.c:1501 msgid "Robot" msgstr "যন্ত্রমানব" -#: ../libpurple/protocols/silc/buddy.c:1508 -#: ../libpurple/protocols/silc/silc.c:978 -#: ../libpurple/protocols/silc/util.c:522 -#: ../libpurple/protocols/silc10/buddy.c:1508 -#: ../libpurple/protocols/silc10/silc.c:679 -#: ../libpurple/protocols/silc10/util.c:515 msgid "Happy" msgstr "সুখী" -#: ../libpurple/protocols/silc/buddy.c:1510 -#: ../libpurple/protocols/silc/silc.c:980 -#: ../libpurple/protocols/silc/util.c:524 -#: ../libpurple/protocols/silc10/buddy.c:1510 -#: ../libpurple/protocols/silc10/silc.c:681 -#: ../libpurple/protocols/silc10/util.c:517 msgid "Sad" msgstr "দু:খী" -#: ../libpurple/protocols/silc/buddy.c:1512 -#: ../libpurple/protocols/silc/silc.c:982 -#: ../libpurple/protocols/silc/util.c:526 -#: ../libpurple/protocols/silc10/buddy.c:1512 -#: ../libpurple/protocols/silc10/silc.c:683 -#: ../libpurple/protocols/silc10/util.c:519 msgid "Angry" msgstr "রাগী" -#: ../libpurple/protocols/silc/buddy.c:1514 -#: ../libpurple/protocols/silc/silc.c:984 -#: ../libpurple/protocols/silc/util.c:528 -#: ../libpurple/protocols/silc10/buddy.c:1514 -#: ../libpurple/protocols/silc10/silc.c:685 -#: ../libpurple/protocols/silc10/util.c:521 msgid "Jealous" msgstr "ঈর্ষান্বিত" -#: ../libpurple/protocols/silc/buddy.c:1516 -#: ../libpurple/protocols/silc/silc.c:986 -#: ../libpurple/protocols/silc/util.c:530 -#: ../libpurple/protocols/silc10/buddy.c:1516 -#: ../libpurple/protocols/silc10/silc.c:687 -#: ../libpurple/protocols/silc10/util.c:523 msgid "Ashamed" msgstr "লজ্জিত" # tithi -#: ../libpurple/protocols/silc/buddy.c:1518 -#: ../libpurple/protocols/silc/silc.c:988 -#: ../libpurple/protocols/silc/util.c:532 -#: ../libpurple/protocols/silc10/buddy.c:1518 -#: ../libpurple/protocols/silc10/silc.c:689 -#: ../libpurple/protocols/silc10/util.c:525 msgid "Invincible" msgstr "অজেয়" # tithi -#: ../libpurple/protocols/silc/buddy.c:1520 -#: ../libpurple/protocols/silc/util.c:534 -#: ../libpurple/protocols/silc10/buddy.c:1520 -#: ../libpurple/protocols/silc10/util.c:527 msgid "In Love" msgstr "ভালবাসাতে" -#: ../libpurple/protocols/silc/buddy.c:1522 -#: ../libpurple/protocols/silc/silc.c:992 -#: ../libpurple/protocols/silc/util.c:536 -#: ../libpurple/protocols/silc10/buddy.c:1522 -#: ../libpurple/protocols/silc10/silc.c:693 -#: ../libpurple/protocols/silc10/util.c:529 msgid "Sleepy" msgstr "ঘুমন্ত" -#: ../libpurple/protocols/silc/buddy.c:1524 -#: ../libpurple/protocols/silc/silc.c:994 -#: ../libpurple/protocols/silc/util.c:538 -#: ../libpurple/protocols/silc10/buddy.c:1524 -#: ../libpurple/protocols/silc10/silc.c:695 -#: ../libpurple/protocols/silc10/util.c:531 msgid "Bored" msgstr "বিরক্ত" -#: ../libpurple/protocols/silc/buddy.c:1526 -#: ../libpurple/protocols/silc/silc.c:996 -#: ../libpurple/protocols/silc/util.c:540 -#: ../libpurple/protocols/silc10/buddy.c:1526 -#: ../libpurple/protocols/silc10/silc.c:697 -#: ../libpurple/protocols/silc10/util.c:533 msgid "Excited" msgstr "উত্তেজিত" -#: ../libpurple/protocols/silc/buddy.c:1528 -#: ../libpurple/protocols/silc/silc.c:998 -#: ../libpurple/protocols/silc/util.c:542 -#: ../libpurple/protocols/silc10/buddy.c:1528 -#: ../libpurple/protocols/silc10/silc.c:699 -#: ../libpurple/protocols/silc10/util.c:535 msgid "Anxious" msgstr "উদ্বিগ্ন" -#: ../libpurple/protocols/silc/buddy.c:1560 -#: ../libpurple/protocols/silc/ops.c:1220 -#: ../libpurple/protocols/silc10/buddy.c:1560 -#: ../libpurple/protocols/silc10/ops.c:1202 msgid "User Modes" msgstr "ব্যবহাকারীর পরিমন্ডলসমূহ" -#: ../libpurple/protocols/silc/buddy.c:1577 -#: ../libpurple/protocols/silc/ops.c:1237 -#: ../libpurple/protocols/silc10/buddy.c:1577 -#: ../libpurple/protocols/silc10/ops.c:1219 msgid "Preferred Contact" msgstr "পছন্দের যোগাযোগ" -#: ../libpurple/protocols/silc/buddy.c:1582 -#: ../libpurple/protocols/silc/ops.c:1242 -#: ../libpurple/protocols/silc10/buddy.c:1582 -#: ../libpurple/protocols/silc10/ops.c:1224 msgid "Preferred Language" msgstr "পছন্দের ভাষা" # tithi -#: ../libpurple/protocols/silc/buddy.c:1587 -#: ../libpurple/protocols/silc/ops.c:1247 -#: ../libpurple/protocols/silc10/buddy.c:1587 -#: ../libpurple/protocols/silc10/ops.c:1229 msgid "Device" msgstr "ডিভাইস" -#: ../libpurple/protocols/silc/buddy.c:1592 -#: ../libpurple/protocols/silc/ops.c:1252 -#: ../libpurple/protocols/silc10/buddy.c:1592 -#: ../libpurple/protocols/silc10/ops.c:1234 -#: ../libpurple/protocols/silc10/silc.c:747 -#: ../libpurple/protocols/silc10/silc.c:749 msgid "Timezone" msgstr "সময়-এলাকা" # tithi -#: ../libpurple/protocols/silc/buddy.c:1597 -#: ../libpurple/protocols/silc/ops.c:1257 -#: ../libpurple/protocols/silc10/buddy.c:1597 -#: ../libpurple/protocols/silc10/ops.c:1239 msgid "Geolocation" msgstr "ভৌগলিক-অবস্থান" # tithi -#: ../libpurple/protocols/silc/buddy.c:1653 -#: ../libpurple/protocols/silc10/buddy.c:1651 msgid "Reset IM Key" msgstr "IM কী পুনঃ বিন্যাস করুন" # tithi -#: ../libpurple/protocols/silc/buddy.c:1658 -#: ../libpurple/protocols/silc10/buddy.c:1657 msgid "IM with Key Exchange" msgstr "কী বিনিময় সহ IM" -#: ../libpurple/protocols/silc/buddy.c:1663 -#: ../libpurple/protocols/silc10/buddy.c:1662 msgid "IM with Password" msgstr "গুপ্তসঙ্কেত যুক্ত আইএম" # tithi -#: ../libpurple/protocols/silc/buddy.c:1676 -#: ../libpurple/protocols/silc10/buddy.c:1675 msgid "Get Public Key..." msgstr "সর্বসাধারণ কী গ্রহণ করুন..." # tithi -#: ../libpurple/protocols/silc/buddy.c:1683 -#: ../libpurple/protocols/silc/ops.c:1625 -#: ../libpurple/protocols/silc10/buddy.c:1682 -#: ../libpurple/protocols/silc10/ops.c:1624 msgid "Kill User" msgstr "ব্যবহারকারীকে মুছে ফেলুন" # tithi -#: ../libpurple/protocols/silc/buddy.c:1693 -#: ../libpurple/protocols/silc/chat.c:1000 -#: ../libpurple/protocols/silc10/buddy.c:1692 -#: ../libpurple/protocols/silc10/chat.c:977 msgid "Draw On Whiteboard" msgstr "সাদা-বোর্ডে অংকন করুন" # tithi -#: ../libpurple/protocols/silc/chat.c:39 -#: ../libpurple/protocols/silc10/chat.c:39 msgid "_Passphrase:" msgstr "প্যাস-ফ্রেজ (_P):" # tithi -#: ../libpurple/protocols/silc/chat.c:80 -#: ../libpurple/protocols/silc10/chat.c:80 #, c-format msgid "Channel %s does not exist in the network" msgstr "নেটওয়ার্কে %s চ্যানেল বিদ্যমান নেই" -#: ../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 "চ্যানেল তথ্য" -#: ../libpurple/protocols/silc/chat.c:82 -#: ../libpurple/protocols/silc10/chat.c:82 msgid "Cannot get channel information" msgstr "চ্যানেলের তথ্য পায় না" -#: ../libpurple/protocols/silc/chat.c:119 -#: ../libpurple/protocols/silc10/chat.c:119 #, c-format msgid "<b>Channel Name:</b> %s" msgstr "<b>চ্যানেলের নাম:</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>ব্যবহারকারী গণনা করুন:</b> %d" # tithi -#: ../libpurple/protocols/silc/chat.c:129 -#: ../libpurple/protocols/silc10/chat.c:129 #, c-format msgid "<br><b>Channel Founder:</b> %s" msgstr "<br><b>চ্যানেল প্রতিষ্ঠাতা:</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>চ্যানেল সাইফার:</b> %s" # tithi #. 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>চ্যানেল 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>চ্যানেলের বিষয়:</b><br>%s" # tithi -#: ../libpurple/protocols/silc/chat.c:153 -#: ../libpurple/protocols/silc10/chat.c:152 +#, c-format msgid "<br><b>Channel Modes:</b> " msgstr "<br><b>চ্যানেল মোড:</b>" # tithi -#: ../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> প্রতিষ্ঠাতার মূল হস্তাঙ্গুলির-ছাপ:</b><br>%s" # tithi -#: ../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>প্রতিষ্ঠাতার মূল ব্যাবলপ্রিন্ট:</b><br>%s" # tithi -#: ../libpurple/protocols/silc/chat.c:237 -#: ../libpurple/protocols/silc10/chat.c:236 msgid "Add Channel Public Key" msgstr "চ্যানেলের সর্বসাধারণ কী যুক্ত করুন" # tithi #. Add new public key -#: ../libpurple/protocols/silc/chat.c:305 -#: ../libpurple/protocols/silc10/chat.c:291 msgid "Open Public Key..." msgstr "সর্বসাধারণ কী খুলুন..." # tithi -#: ../libpurple/protocols/silc/chat.c:424 -#: ../libpurple/protocols/silc10/chat.c:401 msgid "Channel Passphrase" msgstr "চ্যানেলের প্যাস-ফ্রেজ" -#: ../libpurple/protocols/silc/chat.c:431 -#: ../libpurple/protocols/silc10/chat.c:408 msgid "Channel Public Keys List" msgstr "চ্যানেলের সর্বসাধারণ কী এর তালিকা" # tithi -#: ../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 " "access. The authentication may be based on passphrase and digital " @@ -12620,136 +9071,80 @@ msgstr "" "করতে সক্ষম হবে।" # tithi -#: ../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 "চ্যানেলের প্রমাণীকরণ" -#: ../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 "যোগ / অপসরণ করুন" -#: ../libpurple/protocols/silc/chat.c:600 -#: ../libpurple/protocols/silc10/chat.c:581 msgid "Group Name" msgstr "গ্রুপের নাম" # tithi -#: ../libpurple/protocols/silc/chat.c:604 -#: ../libpurple/protocols/silc/ops.c:1830 -#: ../libpurple/protocols/silc/silc.c:1255 -#: ../libpurple/protocols/silc10/chat.c:585 -#: ../libpurple/protocols/silc10/ops.c:1907 -#: ../libpurple/protocols/silc10/silc.c:956 msgid "Passphrase" msgstr "প্যাস-ফ্রেজ" -#: ../libpurple/protocols/silc/chat.c:615 -#: ../libpurple/protocols/silc10/chat.c:596 #, c-format msgid "Please enter the %s channel private group name and passphrase." msgstr "অনুগ্রহ করে %s চ্যানেলের ব্যক্তিগত গ্রুপের নাম ও প্যাস-ফ্রেজ প্রবেশ করান।" # tithi -#: ../libpurple/protocols/silc/chat.c:617 -#: ../libpurple/protocols/silc10/chat.c:598 msgid "Add Channel Private Group" msgstr "চ্যানেলের ব্যক্তিগত গ্রুপ যোগ করুন" -#: ../libpurple/protocols/silc/chat.c:749 -#: ../libpurple/protocols/silc10/chat.c:726 msgid "User Limit" msgstr "ব্যবহারকারীর সীমা" # tithi -#: ../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 "" "চ্যানেলে ব্যবহারকারীর সীমা নির্ধারণ করুন। ব্যবহারকারী সীমা পুনঃ বিন্যাস করতে শূন্যে " "নির্ধরণ করুন।" -#: ../libpurple/protocols/silc/chat.c:914 -#: ../libpurple/protocols/silc10/chat.c:891 msgid "Invite List" msgstr "আমন্ত্রন তালিকা" -#: ../libpurple/protocols/silc/chat.c:919 -#: ../libpurple/protocols/silc10/chat.c:896 msgid "Ban List" msgstr "নিষিদ্ধ তালিকা" -#: ../libpurple/protocols/silc/chat.c:927 -#: ../libpurple/protocols/silc10/chat.c:904 msgid "Add Private Group" msgstr "ব্যক্তিগত দল যোগ করুন" # tithi -#: ../libpurple/protocols/silc/chat.c:940 -#: ../libpurple/protocols/silc10/chat.c:917 msgid "Reset Permanent" msgstr "স্থায়ীভাবে পুনরায় বিন্যাস করুন" # tithi -#: ../libpurple/protocols/silc/chat.c:945 -#: ../libpurple/protocols/silc10/chat.c:922 msgid "Set Permanent" msgstr "স্থায়ীভাবে বিন্যাস করুন" -#: ../libpurple/protocols/silc/chat.c:953 -#: ../libpurple/protocols/silc10/chat.c:930 msgid "Set User Limit" msgstr "ব্যবহারকারীর সীমা নির্ধারন করুন" -#: ../libpurple/protocols/silc/chat.c:959 -#: ../libpurple/protocols/silc10/chat.c:936 msgid "Reset Topic Restriction" msgstr "বিষয়বস্তুর নিষেধাজ্ঞা পুনরায় নির্ধারণ করুন" # tithi -#: ../libpurple/protocols/silc/chat.c:964 -#: ../libpurple/protocols/silc10/chat.c:941 msgid "Set Topic Restriction" msgstr "বিষয়বস্তুর নিষেধাজ্ঞা নির্ধারণ করুন" # tithi -#: ../libpurple/protocols/silc/chat.c:971 -#: ../libpurple/protocols/silc10/chat.c:948 msgid "Reset Private Channel" msgstr "ব্যক্তিগত চ্যানেল পুনরায় নির্ধারণ করুন" # tithi -#: ../libpurple/protocols/silc/chat.c:976 -#: ../libpurple/protocols/silc10/chat.c:953 msgid "Set Private Channel" msgstr "ব্যক্তিগত চ্যানেল নির্ধারণ করুন" # tithi -#: ../libpurple/protocols/silc/chat.c:983 -#: ../libpurple/protocols/silc10/chat.c:960 msgid "Reset Secret Channel" msgstr "গোপন চ্যানেল পুনরায় নির্ধারণ করুন" # tithi -#: ../libpurple/protocols/silc/chat.c:988 -#: ../libpurple/protocols/silc10/chat.c:965 msgid "Set Secret Channel" msgstr "গোপন চ্যানেল নির্ধারণ করুন" # tithi -#: ../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" @@ -12757,343 +9152,199 @@ msgstr "" "আপনি ব্যক্তিগত গ্রুপে যোগদানে সমর্থ হওয়ার পূর্বে আপনাকে অবশ্যই %s চ্যানেলে যোগ দিতে " "হবে" -#: ../libpurple/protocols/silc/chat.c:1051 -#: ../libpurple/protocols/silc10/chat.c:1104 msgid "Join Private Group" msgstr "ব্যক্তিগত গ্রুপে যোগ দিন" # tithi -#: ../libpurple/protocols/silc/chat.c:1052 -#: ../libpurple/protocols/silc10/chat.c:1105 msgid "Cannot join private group" msgstr "ব্যক্তিগত চ্যানেলে যোগ দিতে পারে না" -#: ../libpurple/protocols/silc/chat.c:1248 -#: ../libpurple/protocols/silc/silc.c:1452 -#: ../libpurple/protocols/silc10/chat.c:1299 -#: ../libpurple/protocols/silc10/silc.c:1162 msgid "Call Command" msgstr "নির্দেশ কল করুন" -#: ../libpurple/protocols/silc/chat.c:1248 -#: ../libpurple/protocols/silc/silc.c:1453 -#: ../libpurple/protocols/silc10/chat.c:1299 -#: ../libpurple/protocols/silc10/silc.c:1162 msgid "Cannot call command" msgstr "নির্দেশ কল করতে পারে না" -#: ../libpurple/protocols/silc/chat.c:1249 -#: ../libpurple/protocols/silc/silc.c:1454 -#: ../libpurple/protocols/silc10/chat.c:1300 -#: ../libpurple/protocols/silc10/silc.c:1163 msgid "Unknown command" msgstr "অজানা নির্দেশ" -#: ../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 "নিরাপদ ফাইল স্থানান্তর" -#: ../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 "ফাইল স্থানান্তরের ত্রুটি" -#: ../libpurple/protocols/silc/ft.c:87 msgid "Remote disconnected" msgstr "দূরবর্তী সংযোগ বিচ্ছিন্ন" # tithi -#: ../libpurple/protocols/silc/ft.c:106 ../libpurple/protocols/silc10/ft.c:94 msgid "Permission denied" msgstr "অনুমতি অস্বীকৃত" # tithi -#: ../libpurple/protocols/silc/ft.c:110 ../libpurple/protocols/silc10/ft.c:98 msgid "Key agreement failed" msgstr "মূল চুক্তি ব্যর্থ" # fix me tithi -#: ../libpurple/protocols/silc/ft.c:114 msgid "Connection timed out" msgstr "সংযোগ সময় শেষ" -#: ../libpurple/protocols/silc/ft.c:118 msgid "Creating connection failed" msgstr "সংযোগ তৈরীতে ব্যর্থ" -#: ../libpurple/protocols/silc/ft.c:122 ../libpurple/protocols/silc10/ft.c:102 msgid "File transfer session does not exist" msgstr "ফাইল স্থানান্তর অধিবেশন বিদ্যমান নয়" -#: ../libpurple/protocols/silc/ft.c:273 ../libpurple/protocols/silc10/ft.c:206 msgid "No file transfer session active" msgstr "কোনো ফাইল স্থানান্তর অধিবেশন সক্রিয় নয়" -#: ../libpurple/protocols/silc/ft.c:278 ../libpurple/protocols/silc10/ft.c:211 msgid "File transfer already started" msgstr "ফাইল স্থানান্তর ইতোমধ্যে শুরু হয়েছে" # tithi -#: ../libpurple/protocols/silc/ft.c:283 ../libpurple/protocols/silc10/ft.c:216 msgid "Could not perform key agreement for file transfer" msgstr "ফাইল স্থানান্তরের জন্য মূল চুক্তি সম্পাদন করতে পারে না" -#: ../libpurple/protocols/silc/ft.c:289 ../libpurple/protocols/silc10/ft.c:222 msgid "Could not start the file transfer" msgstr "ফাইল স্থানান্তর শুরু করেনি" -#: ../libpurple/protocols/silc/ft.c:426 ../libpurple/protocols/silc10/ft.c:341 msgid "Cannot send file" msgstr "ফাইল পাঠাতে পারে না" -#: ../libpurple/protocols/silc/ops.c:76 msgid "Error occurred" msgstr "ত্রুটি সংঘটিত হয়েছে" # tithi -#: ../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 "%1s <I>%2s</I> এর বিষয়বস্তু পরিবর্তন করেছে: %3s" # tithi -#: ../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> চ্যানেল <I>%s</I> মোডসমূহ নির্ধারণ করে: %s" # tithi -#: ../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> সমস্ত চ্যানেল <I>%s</I> মোডসমূহ অপসারণ করেছে" # tithi -#: ../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> মোড <I> %s</I> নির্ধারণ করে: %s-এ" # tithi -#: ../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's</I> সব <I>%s</I> মোডসমূহ অপসারণ করেছে" # tithi -#: ../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 "আপনি <I>%s</I> (%s) দ্বারা <I>%s</I> প্রত্যাখাতি হয়েছন" # tithi -#: ../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 "আপনাকে %1s (%2s) দ্বারা অপসারণ করা হয়েছে" # tithi -#: ../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 "%1s (%2s) দ্বারা অপসারণ করা হয়েছে" -#: ../libpurple/protocols/silc/ops.c:811 -#: ../libpurple/protocols/silc10/ops.c:829 msgid "Server signoff" msgstr "সার্ভার সাইন-অফ" -#: ../libpurple/protocols/silc/ops.c:997 -#: ../libpurple/protocols/silc10/ops.c:1017 msgid "Personal Information" msgstr "ব্যক্তিগত তথ্য" -#: ../libpurple/protocols/silc/ops.c:1020 -#: ../libpurple/protocols/silc10/ops.c:1040 msgid "Birth Day" msgstr "জন্মদিন" # tithi -#: ../libpurple/protocols/silc/ops.c:1028 -#: ../libpurple/protocols/silc10/ops.c:1048 msgid "Job Role" msgstr "কর্ম ভূমিকা" -#: ../libpurple/protocols/silc/ops.c:1032 -#: ../libpurple/protocols/silc/silc.c:1248 -#: ../libpurple/protocols/silc10/ops.c:1052 -#: ../libpurple/protocols/silc10/silc.c:949 msgid "Organization" msgstr "সংঘঠন" -#: ../libpurple/protocols/silc/ops.c:1036 -#: ../libpurple/protocols/silc10/ops.c:1056 msgid "Unit" msgstr "একক" -#: ../libpurple/protocols/silc/ops.c:1060 -#: ../libpurple/protocols/silc10/ops.c:1080 msgid "Note" msgstr "নোট" -#: ../libpurple/protocols/silc/ops.c:1106 -#: ../libpurple/protocols/silc10/ops.c:1128 msgid "Join Chat" msgstr "আড্ডায় যোগ দিন" # tithi -#: ../libpurple/protocols/silc/ops.c:1140 -#: ../libpurple/protocols/silc10/chat.c:1039 #, c-format msgid "You are channel founder on <I>%s</I>" msgstr "আপনি <I>%s</I> এ চ্যানেল প্রতিষ্ঠাতা" # tithi -#: ../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 "<I>%s</I> এর চ্যানেল প্রতিষ্ঠাতা হলো <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:1071 msgid "Real Name" msgstr "আসল নাম" -#: ../libpurple/protocols/silc/ops.c:1231 -#: ../libpurple/protocols/silc10/ops.c:1213 msgid "Status Text" msgstr "অবস্থা পাঠ" # tithi -#: ../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 "সর্বসাধারণ কী-এর হস্তাঙ্গুলির-ছাপ" # tithi -#: ../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 "সর্বসাধারণ কী-এর ব্যাবলপ্রিন্ট" -#: ../libpurple/protocols/silc/ops.c:1307 -#: ../libpurple/protocols/silc10/ops.c:1298 msgid "_More..." msgstr "আরও... (_M)" # tithi -#: ../libpurple/protocols/silc/ops.c:1386 -#: ../libpurple/protocols/silc/silc.c:1312 -#: ../libpurple/protocols/silc10/ops.c:1371 -#: ../libpurple/protocols/silc10/silc.c:1013 msgid "Detach From Server" msgstr "সার্ভার থেকে বিচ্ছিন্ন" # tithi -#: ../libpurple/protocols/silc/ops.c:1386 -#: ../libpurple/protocols/silc10/ops.c:1371 msgid "Cannot detach" msgstr "বিচ্ছিন্ন হতে পারে না" -#: ../libpurple/protocols/silc/ops.c:1406 -#: ../libpurple/protocols/silc10/ops.c:1382 msgid "Cannot set topic" msgstr "বিষয়বস্তু ঠিক করতে পারে না" -#: ../libpurple/protocols/silc/ops.c:1435 -#: ../libpurple/protocols/silc10/ops.c:1414 msgid "Failed to change nickname" msgstr "ডাকনাম পরিবর্তন করতে ব্যর্থ" -#: ../libpurple/protocols/silc/ops.c:1484 -#: ../libpurple/protocols/silc10/ops.c:1462 msgid "Roomlist" msgstr "রুম-তালিকা" -#: ../libpurple/protocols/silc/ops.c:1484 -#: ../libpurple/protocols/silc10/ops.c:1462 msgid "Cannot get room list" msgstr "রুম-তালিকা পাওয়া যাচ্ছে না" -#: ../libpurple/protocols/silc/ops.c:1485 msgid "Network is empty" msgstr "নেটওয়ার্ক খালি" # tithi -#: ../libpurple/protocols/silc/ops.c:1529 -#: ../libpurple/protocols/silc10/ops.c:1507 msgid "No public key was received" msgstr "কোনো সর্বসাধারণ কী খুঁজে পায়নি" -#: ../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 "সার্ভারের তথ্য" -#: ../libpurple/protocols/silc/ops.c:1542 -#: ../libpurple/protocols/silc10/ops.c:1520 msgid "Cannot get server information" msgstr "সার্ভারের তথ্য গ্রহণ করতে পারে না" -#: ../libpurple/protocols/silc/ops.c:1565 -#: ../libpurple/protocols/silc10/ops.c:1549 -#: ../libpurple/protocols/silc10/ops.c:1558 msgid "Server Statistics" msgstr "সার্ভারের পরিসংখ্যান" -#: ../libpurple/protocols/silc/ops.c:1566 -#: ../libpurple/protocols/silc10/ops.c:1550 msgid "Cannot get server statistics" msgstr "সার্ভার পরিসংখ্যান পাওয়া যাচ্ছে না" -#: ../libpurple/protocols/silc/ops.c:1573 -#: ../libpurple/protocols/silc10/ops.c:1581 #, c-format msgid "" "Local server start time: %s\n" @@ -13128,65 +9379,42 @@ msgstr "" "মোট সার্ভারের পরিচালকগণ: %14d\n" "মোট রাউটারের পরিচালকগণ: %15d\n" -#: ../libpurple/protocols/silc/ops.c:1605 -#: ../libpurple/protocols/silc10/ops.c:1604 msgid "Network Statistics" msgstr "নেটওয়ার্ক পরিসংখ্যান" -#: ../libpurple/protocols/silc/ops.c:1613 -#: ../libpurple/protocols/silc10/ops.c:1612 msgid "Ping failed" msgstr "পিঙ্গ ব্যর্থ" -#: ../libpurple/protocols/silc/ops.c:1618 -#: ../libpurple/protocols/silc10/ops.c:1617 msgid "Ping reply received from server" msgstr "সার্ভার থেকে পিঙ্গ এর উত্তর গ্রহন করা হয়েছে" # tithi -#: ../libpurple/protocols/silc/ops.c:1626 -#: ../libpurple/protocols/silc10/ops.c:1625 msgid "Could not kill user" msgstr "ব্যবহারকারীকে বিচ্ছিন্ন করা সম্ভব হচ্ছে না" # tithi -#: ../libpurple/protocols/silc/ops.c:1665 msgid "WATCH" msgstr "পর্যবেক্ষণ করুন" -#: ../libpurple/protocols/silc/ops.c:1665 msgid "Cannot watch user" msgstr "ব্যবহারকারীকে পর্যবেক্ষণ করতে পারছে না" # tithi -#: ../libpurple/protocols/silc/ops.c:1741 -#: ../libpurple/protocols/silc/ops.c:1792 -#: ../libpurple/protocols/silc/silc.c:395 -#: ../libpurple/protocols/silc10/ops.c:1817 -#: ../libpurple/protocols/silc10/ops.c:1864 -#: ../libpurple/protocols/silc10/silc.c:194 msgid "Resuming session" msgstr "অধিবেশন পুনরায় শুরু করছে" # tithi -#: ../libpurple/protocols/silc/ops.c:1743 -#: ../libpurple/protocols/silc10/ops.c:1819 msgid "Authenticating connection" msgstr "সংযোগ প্রমাণ করছে" -#: ../libpurple/protocols/silc/ops.c:1794 -#: ../libpurple/protocols/silc10/ops.c:1866 msgid "Verifying server public key" msgstr "সার্ভারের সর্বসাধারণ কী পরীক্ষা করছে" # tithi -#: ../libpurple/protocols/silc/ops.c:1831 -#: ../libpurple/protocols/silc10/ops.c:1908 msgid "Passphrase required" msgstr "প্যাস-ফ্রেজ প্রয়োজন" # tithi -#: ../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 " @@ -13196,14 +9424,12 @@ msgstr "" "আপনি কি তারপরও এই সর্বসাধারণ কী গ্রহণে আগ্রহী?" # tithi -#: ../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 "" "%s এর সর্বসাধারণ কী গ্রহণ করেছে। আপনি কি তারপরও এই সর্বসাধারণ কী গ্রহণে আগ্রহী?" # tithi -#: ../libpurple/protocols/silc/pk.c:107 ../libpurple/protocols/silc10/pk.c:113 #, c-format msgid "" "Fingerprint and babbleprint for the %s key are:\n" @@ -13216,122 +9442,79 @@ msgstr "" "%2s\n" "%3s\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 "সর্বসাধারণ কী যাচাই করুন" -#: ../libpurple/protocols/silc/pk.c:115 ../libpurple/protocols/silc10/pk.c:121 msgid "_View..." msgstr "প্রদর্শন করুন... (_V)" # tithi -#: ../libpurple/protocols/silc/pk.c:140 ../libpurple/protocols/silc10/pk.c:143 msgid "Unsupported public key type" msgstr "অসমর্থিত সর্বসাধারণ কী এর ধরন" -#: ../libpurple/protocols/silc/silc.c:320 -#: ../libpurple/protocols/silc10/ops.c:1755 msgid "Disconnected by server" msgstr "সার্ভার দ্বারা বিচ্ছিন্ন" # tithi -#: ../libpurple/protocols/silc/silc.c:328 -#: ../libpurple/protocols/silc10/ops.c:1701 msgid "Error during connecting to SILC Server" msgstr "SILC সার্ভারে সংযোগের সময় ত্রুটি" # tithi -#: ../libpurple/protocols/silc/silc.c:334 -#: ../libpurple/protocols/silc10/ops.c:1707 msgid "Key Exchange failed" msgstr "কী বিনিময় ব্যর্থ হয়েছে" # tithi -#: ../libpurple/protocols/silc/silc.c:344 -#: ../libpurple/protocols/silc10/ops.c:1718 msgid "" "Resuming detached session failed. Press Reconnect to create new connection." msgstr "" "বিচ্ছিন্ন অধিবেশনটি পুনরায় শুরু করতে ব্যর্থ হয়েছে। অনুগ্রহ করে নতুন সংযোগ তৈরী করতে " "'পুনরায় সংযোগ' চাপুন।" -#: ../libpurple/protocols/silc/silc.c:374 -#: ../libpurple/protocols/silc/silc.c:421 -#: ../libpurple/protocols/silc10/silc.c:164 msgid "Connection failed" msgstr "সংযোগ ব্যর্থ হয়েছে" # tithi -#: ../libpurple/protocols/silc/silc.c:398 -#: ../libpurple/protocols/silc10/silc.c:197 msgid "Performing key exchange" msgstr "কী বিনিময় সম্পাদন করছে" -#: ../libpurple/protocols/silc/silc.c:450 -#: ../libpurple/protocols/silc10/silc.c:362 msgid "Unable to create connection" msgstr "সংযোগ তৈরী করতে ব্যর্থ হয়েছে" # tithi -#: ../libpurple/protocols/silc/silc.c:493 -#: ../libpurple/protocols/silc/silc.c:509 -#: ../libpurple/protocols/silc/silc.c:538 -#: ../libpurple/protocols/silc10/silc.c:341 msgid "Could not load SILC key pair" msgstr "SILC কী যুগল লোড করতে পারেনি" # tithi #. Progress -#: ../libpurple/protocols/silc/silc.c:523 -#: ../libpurple/protocols/silc10/silc.c:330 msgid "Connecting to SILC Server" msgstr "SILC সার্ভারে সংযোগ করছে" -#: ../libpurple/protocols/silc/silc.c:569 -#: ../libpurple/protocols/silc10/silc.c:272 msgid "Out of memory" msgstr "মেমোরীর বাইরে" # tithi -#: ../libpurple/protocols/silc/silc.c:620 -#: ../libpurple/protocols/silc10/silc.c:318 msgid "Cannot initialize SILC protocol" msgstr "SILC প্রটোকল চালু করতে পারে না" # tithi -#: ../libpurple/protocols/silc/silc.c:633 -#: ../libpurple/protocols/silc10/silc.c:325 msgid "Error loading SILC key pair" msgstr "SILC কী যুগল লোডে ত্রুটি" -#: ../libpurple/protocols/silc/silc.c:690 -#: ../libpurple/protocols/silc/silc.c:1863 -#: ../libpurple/protocols/silc10/silc.c:405 -#: ../libpurple/protocols/silc10/silc.c:1582 #, c-format msgid "Download %s: %s" msgstr "%1s ডাউনলোড করুন: %2s" -#: ../libpurple/protocols/silc/silc.c:974 -#: ../libpurple/protocols/silc10/silc.c:675 msgid "Your Current Mood" msgstr "আপনার বর্তমান অবস্থা" -#: ../libpurple/protocols/silc/silc.c:976 -#: ../libpurple/protocols/silc10/silc.c:677 ../pidgin/gtkprefs.c:1792 +#, c-format msgid "Normal" msgstr "স্বাভাবিক" -#: ../libpurple/protocols/silc/silc.c:990 -#: ../libpurple/protocols/silc10/silc.c:691 msgid "In love" msgstr "ভালবাসায়" # tithi -#: ../libpurple/protocols/silc/silc.c:1001 -#: ../libpurple/protocols/silc10/silc.c:702 msgid "" "\n" "Your Preferred Contact Methods" @@ -13339,67 +9522,40 @@ msgstr "" "\n" "আপনাকে পছন্দের যোগাযোগ পদ্ধতি সমূহ" -#: ../libpurple/protocols/silc/silc.c:1009 -#: ../libpurple/protocols/silc/util.c:567 -#: ../libpurple/protocols/silc10/silc.c:710 -#: ../libpurple/protocols/silc10/util.c:561 msgid "SMS" msgstr "এসএমএস" -#: ../libpurple/protocols/silc/silc.c:1011 -#: ../libpurple/protocols/silc/util.c:569 -#: ../libpurple/protocols/silc10/silc.c:712 -#: ../libpurple/protocols/silc10/util.c:563 msgid "MMS" msgstr "এমএমএস" -#: ../libpurple/protocols/silc/silc.c:1013 -#: ../libpurple/protocols/silc10/silc.c:714 msgid "Video conferencing" msgstr "ভিডিও অধিবেশন চলছে" -#: ../libpurple/protocols/silc/silc.c:1018 -#: ../libpurple/protocols/silc10/silc.c:719 msgid "Your Current Status" msgstr "আপনার বর্তমান অবস্থা" -#: ../libpurple/protocols/silc/silc.c:1025 -#: ../libpurple/protocols/silc10/silc.c:726 msgid "Online Services" msgstr "অনলাইন সেবাসমূহ" # tithi -#: ../libpurple/protocols/silc/silc.c:1028 -#: ../libpurple/protocols/silc10/silc.c:729 msgid "Let others see what services you are using" msgstr "আপনি কি সেবাসমূহ ব্যবহার করছেন তা অন্যদের দেখতে দিন" # tithi -#: ../libpurple/protocols/silc/silc.c:1034 -#: ../libpurple/protocols/silc10/silc.c:735 msgid "Let others see what computer you are using" msgstr "আপনি কি কম্পিউটার ব্যবহার করছেন তা অন্যদের দেখতে দিন" -#: ../libpurple/protocols/silc/silc.c:1041 -#: ../libpurple/protocols/silc10/silc.c:742 msgid "Your VCard File" msgstr "আপনার ভি-কার্ড ফাইল" -#: ../libpurple/protocols/silc/silc.c:1047 msgid "Timezone (UTC)" msgstr "সময়-এলাকা (ইউটিসি)" # tithi -#: ../libpurple/protocols/silc/silc.c:1051 -#: ../libpurple/protocols/silc/silc.c:1052 -#: ../libpurple/protocols/silc10/silc.c:754 -#: ../libpurple/protocols/silc10/silc.c:755 msgid "User Online Status Attributes" msgstr "ব্যবহারকারীর অনলাইন অবস্থার বৈশিষ্ট্যাবলী" # tithi -#: ../libpurple/protocols/silc/silc.c:1053 -#: ../libpurple/protocols/silc10/silc.c:756 msgid "" "You can let other users see your online status information and your personal " "information. Please fill the information you would like other users to see " @@ -13409,237 +9565,148 @@ msgstr "" "পারেন। অনুগ্রহ করে আপনি নিজের সম্বন্ধে যে তথ্য অন্যান্য ব্যবহারকারীকে দেখতে দিতে চান " "তা পূরণ করুন।" -#: ../libpurple/protocols/silc/silc.c:1094 -#: ../libpurple/protocols/silc/silc.c:1100 -#: ../libpurple/protocols/silc/silc.c:1721 -#: ../libpurple/protocols/silc10/silc.c:797 -#: ../libpurple/protocols/silc10/silc.c:803 -#: ../libpurple/protocols/silc10/silc.c:1440 msgid "Message of the Day" msgstr "দিনের বার্তা" -#: ../libpurple/protocols/silc/silc.c:1094 -#: ../libpurple/protocols/silc10/silc.c:797 msgid "No Message of the Day available" msgstr "আজকের দিনের কোনো বার্তা সহজলভ্য নয়" # tithi -#: ../libpurple/protocols/silc/silc.c:1095 -#: ../libpurple/protocols/silc/silc.c:1716 -#: ../libpurple/protocols/silc10/silc.c:798 -#: ../libpurple/protocols/silc10/silc.c:1435 msgid "There is no Message of the Day associated with this connection" msgstr "এই সংযোগের সাথে সম্পর্কিত আজকের দিনের কোনো বার্তা নেই" # tithi -#: ../libpurple/protocols/silc/silc.c:1146 -#: ../libpurple/protocols/silc/silc.c:1192 -#: ../libpurple/protocols/silc/silc.c:1263 -#: ../libpurple/protocols/silc/silc.c:1264 -#: ../libpurple/protocols/silc10/silc.c:849 -#: ../libpurple/protocols/silc10/silc.c:893 -#: ../libpurple/protocols/silc10/silc.c:964 -#: ../libpurple/protocols/silc10/silc.c:965 msgid "Create New SILC Key Pair" msgstr "নতুন SILC কী যুগল তৈরি করুন" -#: ../libpurple/protocols/silc/silc.c:1146 -#: ../libpurple/protocols/silc10/silc.c:849 msgid "Passphrases do not match" msgstr "প্যাস-ফ্রেজ মিলে না" -#: ../libpurple/protocols/silc/silc.c:1192 -#: ../libpurple/protocols/silc10/silc.c:893 msgid "Key Pair Generation failed" msgstr "কী জোড়া তৈরী করতে ব্যর্থ হয়েছে" -#: ../libpurple/protocols/silc/silc.c:1231 -#: ../libpurple/protocols/silc10/silc.c:932 msgid "Key length" msgstr "কী-এর দৈর্ঘ্য" -#: ../libpurple/protocols/silc/silc.c:1233 -#: ../libpurple/protocols/silc10/silc.c:934 msgid "Public key file" msgstr "সর্বসাধারণ কী ফাইল" -#: ../libpurple/protocols/silc/silc.c:1235 -#: ../libpurple/protocols/silc10/silc.c:936 msgid "Private key file" msgstr "বযক্তিগত কী ফাইল" -#: ../libpurple/protocols/silc/silc.c:1258 -#: ../libpurple/protocols/silc10/silc.c:959 msgid "Passphrase (retype)" msgstr "প্যাস-ফ্রেজ (পুনরায় টাইপ করুন)" # tithi -#: ../libpurple/protocols/silc/silc.c:1265 -#: ../libpurple/protocols/silc10/silc.c:966 msgid "Generate Key Pair" msgstr "কী যুগল তৈরি করুন" -#: ../libpurple/protocols/silc/silc.c:1308 -#: ../libpurple/protocols/silc10/silc.c:1009 msgid "Online Status" msgstr "অনলাইন অবস্থা" -#: ../libpurple/protocols/silc/silc.c:1316 -#: ../libpurple/protocols/silc10/silc.c:1017 msgid "View Message of the Day" msgstr "দিনের বার্তাটি প্রদর্শন করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1320 -#: ../libpurple/protocols/silc10/silc.c:1021 msgid "Create SILC Key Pair..." msgstr "SILC কী যুগল তৈরি করুন..." -#: ../libpurple/protocols/silc/silc.c:1412 -#: ../libpurple/protocols/silc10/silc.c:1120 #, c-format msgid "User <I>%s</I> is not present in the network" msgstr "<I>%s</I> ব্যবহারকারী নেটওয়ার্কে উপস্থিত নেই" -#: ../libpurple/protocols/silc/silc.c:1592 -#: ../libpurple/protocols/silc10/silc.c:1311 msgid "Topic too long" msgstr "বিষয়বস্তু অত্যন্ত দীর্ঘ" -#: ../libpurple/protocols/silc/silc.c:1673 -#: ../libpurple/protocols/silc10/silc.c:1392 msgid "You must specify a nick" msgstr "আপনাকে একটি ডাকনাম উল্লেখ করতে হবে" -#: ../libpurple/protocols/silc/silc.c:1775 -#: ../libpurple/protocols/silc10/silc.c:1494 #, c-format msgid "channel %s not found" msgstr "%s চ্যানেলটি খুঁজে পাওয়া যায়নি" -#: ../libpurple/protocols/silc/silc.c:1780 -#: ../libpurple/protocols/silc10/silc.c:1499 #, c-format msgid "channel modes for %s: %s" msgstr "%1s-এর চ্যানেল মোড: %2s" # tithi -#: ../libpurple/protocols/silc/silc.c:1782 -#: ../libpurple/protocols/silc10/silc.c:1501 #, c-format msgid "no channel modes are set on %s" msgstr "%s এ কোনো চ্যানেল মোড নির্ধারণ করা হয়নি" -#: ../libpurple/protocols/silc/silc.c:1795 -#: ../libpurple/protocols/silc10/silc.c:1514 #, c-format msgid "Failed to set cmodes for %s" msgstr "%s-এর জন্য সি-মোড নির্ধারণ করতে ব্যর্থ" -#: ../libpurple/protocols/silc/silc.c:1825 -#: ../libpurple/protocols/silc10/silc.c:1544 #, c-format msgid "Unknown command: %s, (may be a client bug)" msgstr "অজানা নির্দেশ: %s, (সম্ভবত এটি একটি ক্লায়েন্ট ত্রুটি)" -#: ../libpurple/protocols/silc/silc.c:1906 -#: ../libpurple/protocols/silc10/silc.c:1625 msgid "part [channel]: Leave the chat" msgstr "অংশ [চ্যানেল]: আড্ডা ত্যাগ করুন" -#: ../libpurple/protocols/silc/silc.c:1910 -#: ../libpurple/protocols/silc10/silc.c:1629 msgid "leave [channel]: Leave the chat" msgstr "ত্যাগ করুন [চ্যানেল]: আড্ডা ত্যাগ করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1914 -#: ../libpurple/protocols/silc10/silc.c:1633 msgid "topic [<new topic>]: View or change the topic" msgstr "বিষয়বস্তু [&1lt;নতুন বিষয়বস্তু &2gt;]: বিষয়বস্তু দেখুন বা পরিবর্তন করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1919 -#: ../libpurple/protocols/silc10/silc.c:1638 msgid "join <channel> [<password>]: Join a chat on this network" msgstr "" "যুক্ত হোন &1lt;চ্যানেল&2gt; [&3lt;গুপ্তসঙ্কেত&4gt;]: এই নেটওয়ার্কের একটি আড্ডায় যোগ " "দিন" -#: ../libpurple/protocols/silc/silc.c:1923 -#: ../libpurple/protocols/silc10/silc.c:1642 msgid "list: List channels on this network" msgstr "তালিকা: এই নেটওয়ার্কের চ্যানেলসমূহের তালিকা তৈরী করুন" # fix -me tithi -#: ../libpurple/protocols/silc/silc.c:1927 -#: ../libpurple/protocols/silc10/silc.c:1646 msgid "whois <nick>: View nick's information" msgstr "কে &1lt;ডাকনাম&2gt;: ডাকনামের তথ্য দেখুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1931 -#: ../libpurple/protocols/silc10/silc.c:1650 -#: ../libpurple/protocols/zephyr/zephyr.c:2706 msgid "msg <nick> <message>: Send a private message to a user" msgstr "" "বার্তা &1lt;ডাকনাম&2gt; &3lt;বার্তা&4gt;: ব্যবহারকারীকে একটি ব্যক্তিগত বার্তা " "পাঠান" # tithi -#: ../libpurple/protocols/silc/silc.c:1935 -#: ../libpurple/protocols/silc10/silc.c:1654 msgid "query <nick> [<message>]: Send a private message to a user" msgstr "" "জিজ্ঞাসা &1lt;ডাকনাম&2gt; [&3lt;বার্তা&4gt;]: ব্যবহারকারীকে একটি ব্যক্তিগত বার্তা " "পাঠান" # tithi -#: ../libpurple/protocols/silc/silc.c:1939 -#: ../libpurple/protocols/silc10/silc.c:1658 msgid "motd: View the server's Message Of The Day" msgstr "দিনের সেরা বার্তা: সার্ভারের 'দিনের সেরা বার্তা' দেখুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1943 -#: ../libpurple/protocols/silc10/silc.c:1662 msgid "detach: Detach this session" msgstr "বিচ্ছিন্ন: অধিবেশনটিকে বিচ্ছিন্ন করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1947 -#: ../libpurple/protocols/silc10/silc.c:1666 msgid "quit [message]: Disconnect from the server, with an optional message" msgstr "ত্যাগ করুন [বার্তা]: একটি ঐচ্ছিক বার্তার সহ, সার্ভার হতে বিচ্ছিন্ন করুন" -#: ../libpurple/protocols/silc/silc.c:1951 -#: ../libpurple/protocols/silc10/silc.c:1670 msgid "call <command>: Call any silc client command" msgstr "কল করুন &1lt;নির্দেশ&2gt;: যেকোনো silc ক্লায়েন্টের নির্দেশ কল করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1957 -#: ../libpurple/protocols/silc10/silc.c:1676 msgid "kill <nick> [-pubkey|<reason>]: Kill nick" msgstr "" "মুছে ফেলুন &1lt;ডাকনাম&2gt; [-সর্বসাধারণ-কী|&3lt;কারণ&4gt;]: ডাকনাম মুছে ফেলুন" # ডাকনাম # tithi -#: ../libpurple/protocols/silc/silc.c:1961 -#: ../libpurple/protocols/silc10/silc.c:1680 msgid "nick <newnick>: Change your nickname" msgstr "ডাকনাম &1lt;নতুন ডাকনাম&2gt;: আপনার ডাকনাম পরিবর্তন করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1965 -#: ../libpurple/protocols/silc10/silc.c:1684 msgid "whowas <nick>: View nick's information" msgstr "কে ছিল &1lt;ডাকনাম&2gt;: ডাকনামের তথ্য দেখুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1969 -#: ../libpurple/protocols/silc10/silc.c:1688 msgid "" "cmode <channel> [+|-<modes>] [arguments]: Change or display " "channel modes" @@ -13648,8 +9715,6 @@ msgstr "" "পরিবর্তন করুন বা প্রদর্শন করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1973 -#: ../libpurple/protocols/silc10/silc.c:1692 msgid "" "cumode <channel> +|-<modes> <nick>: Change nick's modes " "on channel" @@ -13658,23 +9723,17 @@ msgstr "" "ডাকনামের মোডসমূহ পরিবর্তন করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1977 -#: ../libpurple/protocols/silc10/silc.c:1696 msgid "umode <usermodes>: Set your modes in the network" msgstr "" "ইউ-মোড &1lt;ব্যবহারকারীর-মোডসমূহ&2gt;: নেটওয়ার্কে আপনার মোডসমূহ নির্ধারণ করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1981 -#: ../libpurple/protocols/silc10/silc.c:1700 msgid "oper <nick> [-pubkey]: Get server operator privileges" msgstr "" "অপারেটর &1lt;ডাকনাম&2gt; [-সর্বসাধারণ-কী]: সার্ভার অপারেটরের প্রাধিকারগুলো গ্রহণ " "করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1985 -#: ../libpurple/protocols/silc10/silc.c:1704 msgid "" "invite <channel> [-|+]<nick>: invite nick or add/remove from " "channel invite list" @@ -13683,54 +9742,38 @@ msgstr "" "চ্যানেলের আমন্ত্রন তালিকা থেকে যোগ করুন/মুছে ফেলুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1989 -#: ../libpurple/protocols/silc10/silc.c:1708 msgid "kick <channel> <nick> [comment]: Kick client from channel" msgstr "" "অপসারণ করুন &1lt;চ্যানেল&2gt; &3lt;ডাকনাম&4gt; [মন্তব্য]: চ্যানেল থেকে গ্রাহককে " "অপসারণ করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1993 -#: ../libpurple/protocols/silc10/silc.c:1712 msgid "info [server]: View server administrative details" msgstr "তথ্য [সার্ভার]: সার্ভারের প্রশাসনিক বিবরণ দেখুন" # tithi -#: ../libpurple/protocols/silc/silc.c:1997 -#: ../libpurple/protocols/silc10/silc.c:1716 msgid "ban [<channel> +|-<nick>]: Ban client from channel" msgstr "" "নিষিদ্ধ [&1lt;চ্যানেল&2gt; +|-&3lt;ডাকনাম&4gt;]: চ্যানেল হতে গ্রাহককে নিষিদ্ধ করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:2001 -#: ../libpurple/protocols/silc10/silc.c:1720 msgid "getkey <nick|server>: Retrieve client's or server's public key" msgstr "" "কী-গ্রহণ করুন &1lt;ডাকনাম সার্ভার&2gt;: গ্রাহক বা সার্ভারের সর্বসাধারণ কী পুনরুদ্ধার " "করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:2005 -#: ../libpurple/protocols/silc10/silc.c:1724 msgid "stats: View server and network statistics" msgstr "পরিসংখ্যান: সার্ভার এবং নেটওয়ার্কের পরিসংখ্যান দেখুন" -#: ../libpurple/protocols/silc/silc.c:2009 -#: ../libpurple/protocols/silc10/silc.c:1728 msgid "ping: Send PING to the connected server" msgstr "পিঙ্গ: সংযুক্ত সার্ভারে একটি পিঙ্গ পাঠান" # tithi -#: ../libpurple/protocols/silc/silc.c:2014 -#: ../libpurple/protocols/silc10/silc.c:1733 msgid "users <channel>: List users in channel" msgstr "ব্যবহারকারীগণ &1lt;চ্যানেল&2gt;: চ্যানেল ব্যবহারকারীর তালিকা করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:2018 -#: ../libpurple/protocols/silc10/silc.c:1737 msgid "" "names [-count|-ops|-halfops|-voices|-normal] <channel(s)>: List " "specific users in channel(s)" @@ -13747,152 +9790,102 @@ msgstr "" #. *< name #. *< version #. * summary -#: ../libpurple/protocols/silc/silc.c:2130 -#: ../libpurple/protocols/silc10/silc.c:1862 msgid "SILC Protocol Plugin" msgstr "SILC প্রটোকল প্লাগইন" # tithi #. * description -#: ../libpurple/protocols/silc/silc.c:2132 -#: ../libpurple/protocols/silc10/silc.c:1864 msgid "Secure Internet Live Conferencing (SILC) Protocol" msgstr "ইন্টারনেটে সরাসরি মতবিনিময় করার নিরাপদ (SILC) প্রটোকল" -#: ../libpurple/protocols/silc/silc.c:2173 -#: ../libpurple/protocols/silc10/silc.c:1896 ../pidgin/gtkprefs.c:2170 msgid "Network" msgstr "নেটওয়ার্ক" -#: ../libpurple/protocols/silc/silc.c:2184 -#: ../libpurple/protocols/silc10/silc.c:1907 msgid "Public Key file" msgstr "সর্বসাধারণ কী ফাইল" -#: ../libpurple/protocols/silc/silc.c:2188 -#: ../libpurple/protocols/silc10/silc.c:1911 msgid "Private Key file" msgstr "ব্যক্তিগত কী ফাইল" -#: ../libpurple/protocols/silc/silc.c:2198 -#: ../libpurple/protocols/silc10/silc.c:1921 msgid "Cipher" msgstr "সাইফার" -#: ../libpurple/protocols/silc/silc.c:2208 -#: ../libpurple/protocols/silc10/silc.c:1931 msgid "HMAC" msgstr "HMAC" # tithi -#: ../libpurple/protocols/silc/silc.c:2211 msgid "Use Perfect Forward Secrecy" msgstr "যথার্থ অগ্রগামী গোপনীয়তা ব্যবহার করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:2215 -#: ../libpurple/protocols/silc10/silc.c:1934 msgid "Public key authentication" msgstr "সর্বসাধারণ কী প্রমাণীকরণ" # tithi -#: ../libpurple/protocols/silc/silc.c:2218 -#: ../libpurple/protocols/silc10/silc.c:1937 msgid "Block IMs without Key Exchange" msgstr "কী বিনিময় ব্যতিত IM গুলোকে ব্লক করুন" # Fixme # block = বন্ধ? - tithi -#: ../libpurple/protocols/silc/silc.c:2221 -#: ../libpurple/protocols/silc10/silc.c:1940 msgid "Block messages to whiteboard" msgstr "হোয়াটবোর্ডে বার্তাগুলো ব্লক করুন" # tithi -#: ../libpurple/protocols/silc/silc.c:2224 -#: ../libpurple/protocols/silc10/silc.c:1943 msgid "Automatically open whiteboard" msgstr "স্বয়ংক্রিয়ভাবে হোয়াটবোর্ড খুলুন" # tithi -#: ../libpurple/protocols/silc/silc.c:2227 -#: ../libpurple/protocols/silc10/silc.c:1946 msgid "Digitally sign and verify all messages" msgstr "সকল বার্তা ডিজিটাল স্বাক্ষর করুন এবং যাচাই করুন" # tithi -#: ../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 "SILC কী যুগল তৈরি করছে..." -#: ../libpurple/protocols/silc/util.c:216 -#: ../libpurple/protocols/silc/util.c:259 msgid "Cannot create SILC key pair\n" msgstr "SILC কী যুগল তৈরী করতে পারে না\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 "আসল নাম: \t%s\n" -#: ../libpurple/protocols/silc/util.c:365 -#: ../libpurple/protocols/silc10/util.c:357 #, c-format msgid "User Name: \t%s\n" msgstr "ব্যবহারকারীর নাম: \t%s\n" -#: ../libpurple/protocols/silc/util.c:367 -#: ../libpurple/protocols/silc10/util.c:359 #, c-format msgid "Email: \t\t%s\n" msgstr "ই-মেইল: \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 "হোস্ট নাম: \t%s\n" -#: ../libpurple/protocols/silc/util.c:371 -#: ../libpurple/protocols/silc10/util.c:363 #, c-format msgid "Organization: \t%s\n" msgstr "সংগঠন: \t%s\n" -#: ../libpurple/protocols/silc/util.c:373 -#: ../libpurple/protocols/silc10/util.c:365 #, c-format msgid "Country: \t%s\n" msgstr "দেশ: \t%s\n" -#: ../libpurple/protocols/silc/util.c:374 -#: ../libpurple/protocols/silc10/util.c:366 #, c-format msgid "Algorithm: \t%s\n" msgstr "এলগোরিদম: \t%s\n" # tithi -#: ../libpurple/protocols/silc/util.c:375 -#: ../libpurple/protocols/silc10/util.c:367 #, c-format msgid "Key Length: \t%d bits\n" msgstr "কী দৈর্ঘ্য: \t%d বিট\n" -#: ../libpurple/protocols/silc/util.c:377 #, c-format msgid "Version: \t%s\n" msgstr "সংস্করণ: \t%s\n" # tithi -#: ../libpurple/protocols/silc/util.c:379 -#: ../libpurple/protocols/silc10/util.c:369 #, c-format msgid "" "Public Key Fingerprint:\n" @@ -13904,8 +9897,6 @@ msgstr "" "\n" # tithi -#: ../libpurple/protocols/silc/util.c:380 -#: ../libpurple/protocols/silc10/util.c:370 #, c-format msgid "" "Public Key Babbleprint:\n" @@ -13914,46 +9905,30 @@ msgstr "" "সর্বসাধারণ কী এর ব্যাবল-প্রিন্ট:\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 "সর্বসাধারণ কী এর তথ্য" -#: ../libpurple/protocols/silc/util.c:565 -#: ../libpurple/protocols/silc10/util.c:559 msgid "Paging" msgstr "পেজিং" -#: ../libpurple/protocols/silc/util.c:571 -#: ../libpurple/protocols/silc10/util.c:565 msgid "Video Conferencing" msgstr "ভিডিও আলোচনা সভা চলছে" -#: ../libpurple/protocols/silc/util.c:589 -#: ../libpurple/protocols/silc10/util.c:584 msgid "Computer" msgstr "কম্পিউটার" -#: ../libpurple/protocols/silc/util.c:593 -#: ../libpurple/protocols/silc10/util.c:588 msgid "PDA" msgstr "পিডিএ" -#: ../libpurple/protocols/silc/util.c:595 -#: ../libpurple/protocols/silc10/util.c:590 msgid "Terminal" msgstr "টার্মিনাল" # tithi -#: ../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 হোয়াটবোর্ডে বার্তা পাঠিয়েছিল। আপনি কি হোয়াটবোর্ডটি খুলতে আগ্রহী?" # tithi -#: ../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 " @@ -13961,110 +9936,94 @@ msgid "" msgstr "" "%2s চ্যানেলের হোয়াটবোর্ডে %1s বার্তা পাঠিয়েছিল। আপনি কি হোয়াটবোর্ডটি খুলতে আগ্রহী?" -#: ../libpurple/protocols/silc/wb.c:306 ../libpurple/protocols/silc10/wb.c:305 msgid "Whiteboard" msgstr "হোয়াইট-বোর্ড" -#: ../libpurple/protocols/silc10/ops.c:1559 msgid "No server statistics available" msgstr "কোনো সার্ভার পরিসংখ্যান সহজলভ্য নয়" # tithi -#: ../libpurple/protocols/silc10/ops.c:1937 +#, c-format msgid "Failure: Version mismatch, upgrade your client" msgstr "ব্যর্থতা: সংস্করণ অমিল, আপনার ক্লায়েন্ট উন্নততর করুন" -#: ../libpurple/protocols/silc10/ops.c:1940 +#, c-format msgid "Failure: Remote does not trust/support your public key" msgstr "ব্যর্থতা: রিমোট আপনার সর্বাসাধারণ কী বিশ্বাস/সমর্থন করে না" # tithi -#: ../libpurple/protocols/silc10/ops.c:1943 +#, c-format msgid "Failure: Remote does not support proposed KE group" msgstr "ব্যর্থ: রিমোট প্রস্তাবিত কেই গ্রুপ সমর্থন করে না" # tithi -#: ../libpurple/protocols/silc10/ops.c:1946 +#, c-format msgid "Failure: Remote does not support proposed cipher" msgstr "ব্যর্থ: রিমোট প্রস্তাবিত ছাইফার সমর্থন করে না" # tithi -#: ../libpurple/protocols/silc10/ops.c:1949 +#, c-format msgid "Failure: Remote does not support proposed PKCS" msgstr "ব্যর্থ: রিমোট প্রস্তাবিত পিকেসিএস সমর্থন করে না" # tithi -#: ../libpurple/protocols/silc10/ops.c:1952 +#, c-format msgid "Failure: Remote does not support proposed hash function" msgstr "ব্যর্থ: রিমোট প্রস্তাবিত হ্যাস ফাংশন সমর্থন করে না" # tithi -#: ../libpurple/protocols/silc10/ops.c:1955 +#, c-format msgid "Failure: Remote does not support proposed HMAC" msgstr "ব্যর্থ: রিমোট প্রস্তাবিত এইচএমএসি সমর্থন করে না" # tithi -#: ../libpurple/protocols/silc10/ops.c:1957 +#, c-format msgid "Failure: Incorrect signature" msgstr "ব্যর্থতা: ভূল স্বাক্ষর" # tithi -#: ../libpurple/protocols/silc10/ops.c:1959 +#, c-format msgid "Failure: Invalid cookie" msgstr "ব্যর্থতা: অবৈধ কুকি" # tithi -#: ../libpurple/protocols/silc10/ops.c:1970 +#, c-format msgid "Failure: Authentication failed" msgstr "ব্যর্থতা: প্রমাণীকরণ ব্যর্থ হয়েছে" # tithi -#: ../libpurple/protocols/silc10/silc.c:186 msgid "Cannot initialize SILC Client connection" msgstr "SILC ক্লায়েন্ট সংযোগ প্রাথমিকভাবে প্রস্তুত করতে পারে না" # fix me tithi -#: ../libpurple/protocols/silc10/silc.c:295 msgid "John Noname" msgstr "জন নোনেম" # tithi -#: ../libpurple/protocols/silc10/silc.c:339 #, c-format msgid "Could not load SILC key pair: %s" msgstr "SILC কী যুগল লোড করতে পারেনি: %s" -#: ../libpurple/protocols/simple/simple.c:435 msgid "Could not write" msgstr "লিখতে পারেনি" -#: ../libpurple/protocols/simple/simple.c:459 -#: ../libpurple/protocols/simple/simple.c:1748 msgid "Could not connect" msgstr "সংযোগ দিতে পারেনি" -#: ../libpurple/protocols/simple/simple.c:1145 msgid "Unknown server response." msgstr "অজানা সার্ভার উত্তর।" # tithi -#: ../libpurple/protocols/simple/simple.c:1784 -#: ../libpurple/protocols/simple/simple.c:1830 -#: ../libpurple/protocols/simple/simple.c:1845 -#: ../libpurple/protocols/simple/simple.c:1900 msgid "Could not create listen socket" msgstr "শ্রবণ সকেট তৈরি করতে পারেনি" -#: ../libpurple/protocols/simple/simple.c:1910 msgid "Could not resolve hostname" msgstr "হোস্ট-নাম স্থির করা হয়নি" # tihi -#: ../libpurple/protocols/simple/simple.c:1928 msgid "SIP usernames may not contain whitespaces or @ symbols" msgstr "SIP এর ব্যবহারকারী-নামগুলো ফাঁকা-জায়গা বা @ চিহ্ন ধারণ করতে পারে না" -#: ../libpurple/protocols/simple/simple.c:1945 msgid "SIP connect server not specified" msgstr "SIP সংযোগ সার্ভার সুনির্দিষ্ট নয়" @@ -14077,172 +10036,151 @@ msgstr "SIP সংযোগ সার্ভার সুনির্দিষ্ #. *< id #. *< name #. *< version -#: ../libpurple/protocols/simple/simple.c:2115 msgid "SIP/SIMPLE Protocol Plugin" msgstr "SIP/সাধারণ প্রটোকল প্লাগইন" # tithi #. * summary -#: ../libpurple/protocols/simple/simple.c:2116 msgid "The SIP/SIMPLE Protocol Plugin" msgstr "SIP/সাধারণ প্রটোকল প্লাগইন" # tithi -#: ../libpurple/protocols/simple/simple.c:2144 msgid "Publish status (note: everyone may watch you)" msgstr "প্রকাশ অবস্থা (নোট: আপনাকে সবাই পর্যবেক্ষণ করতে পারে)" -#: ../libpurple/protocols/simple/simple.c:2150 msgid "Use UDP" msgstr "UDP ব্যবহার করুন" -#: ../libpurple/protocols/simple/simple.c:2152 msgid "Use proxy" msgstr "প্রক্সি ব্যবহার করুন" -#: ../libpurple/protocols/simple/simple.c:2154 msgid "Proxy" msgstr "প্রক্সি" -#: ../libpurple/protocols/simple/simple.c:2156 msgid "Auth User" msgstr "স্বীকৃত ব্যবহারকারী" -#: ../libpurple/protocols/simple/simple.c:2158 msgid "Auth Domain" msgstr "স্বীকৃত ডোমেইন" -#: ../libpurple/protocols/toc/toc.c:139 #, c-format msgid "Looking up %s" msgstr "%s খোঁজা হচ্ছে" -#: ../libpurple/protocols/toc/toc.c:148 #, c-format msgid "Connect to %s failed" msgstr "%s-এর সাথে সংযোগ দিতে ব্যর্থ হয়েছে" -#: ../libpurple/protocols/toc/toc.c:201 #, c-format msgid "Signon: %s" msgstr "সাইনঅন: %s" -#: ../libpurple/protocols/toc/toc.c:488 #, c-format msgid "Unable to write file %s." msgstr "%s ফাইলে লিখতে ব্যর্থ হয়েছে।" -#: ../libpurple/protocols/toc/toc.c:491 #, c-format msgid "Unable to read file %s." msgstr "%s ফাইলে পড়তে ব্যর্থ হয়েছে।" # tithi -#: ../libpurple/protocols/toc/toc.c:494 #, c-format msgid "Message too long, last %s bytes truncated." msgstr "বার্তাটি খুব দীর্ঘ, শেষ %s বাইট বাদ দেয়া হয়েছে।" # tithi -#: ../libpurple/protocols/toc/toc.c:497 #, c-format msgid "%s not currently logged in." msgstr "%s বর্তমানে লগইন নেই।" # tithi -#: ../libpurple/protocols/toc/toc.c:500 #, c-format msgid "Warning of %s not allowed." msgstr "%s এর সতর্কতা অনুমোদিত নয়।" # tithi -#: ../libpurple/protocols/toc/toc.c:503 +#, c-format msgid "A message has been dropped, you are exceeding the server speed limit." msgstr "একটি বার্তা বাদ দেয়া হয়েছে, আপনি সার্ভারের গতি সীমা অতিক্রম করছেন।" -#: ../libpurple/protocols/toc/toc.c:506 #, c-format msgid "Chat in %s is not available." msgstr "%s-এ আড্ডা সহজলভ্য নয়।" -#: ../libpurple/protocols/toc/toc.c:509 #, c-format msgid "You are sending messages too fast to %s." msgstr "আপনি %s এ খুব দ্রুত বার্তা পাঠাচ্ছেন।" # tithi -#: ../libpurple/protocols/toc/toc.c:512 #, c-format msgid "You missed an IM from %s because it was too big." msgstr "আপনি %s থেকে একটি তাৎক্ষণিক বার্তা পাননি কারণ এটি খুব বড় ছিল।" # tithi -#: ../libpurple/protocols/toc/toc.c:515 #, c-format msgid "You missed an IM from %s because it was sent too fast." msgstr "আপনি %s থেকে একটি তাৎক্ষণিক বার্তা পাননি কারণ এটি খুব দ্রুত পাঠানো হয়েছিল।" -#: ../libpurple/protocols/toc/toc.c:518 +#, c-format msgid "Failure." msgstr "ব্যর্থতা।" # tithi -#: ../libpurple/protocols/toc/toc.c:521 +#, c-format msgid "Too many matches." msgstr "অনেক বেশি মিল।" # tithi -#: ../libpurple/protocols/toc/toc.c:524 +#, c-format msgid "Need more qualifiers." msgstr "আরও নিয়ন্ত্রণকারী প্রয়োজন।" -#: ../libpurple/protocols/toc/toc.c:527 +#, c-format msgid "Dir service temporarily unavailable." msgstr "নির্দেশিকা সেবা সাময়িকভাবে অপ্রাপ্য" # tithi -#: ../libpurple/protocols/toc/toc.c:530 +#, c-format msgid "Email lookup restricted." msgstr "ই-মেইল অনুসন্ধান নিষিদ্ধ।" # tithi -#: ../libpurple/protocols/toc/toc.c:533 +#, c-format msgid "Keyword ignored." msgstr "মূল-শব্দ অগ্রাহ্য করা হয়েছে।" -#: ../libpurple/protocols/toc/toc.c:536 +#, c-format msgid "No keywords." msgstr "কোনো মূল-শব্দ নেই।" -#: ../libpurple/protocols/toc/toc.c:539 +#, c-format msgid "User has no directory information." msgstr "ব্যবহারকারীর কোনো নির্দেশিকা তথ্য নেই।" -#: ../libpurple/protocols/toc/toc.c:543 +#, c-format msgid "Country not supported." msgstr "দেশটি সমর্থিত নয়।" -#: ../libpurple/protocols/toc/toc.c:546 #, c-format msgid "Failure unknown: %s." msgstr "ব্যর্থতা অজানা: %s।" -#: ../libpurple/protocols/toc/toc.c:549 +#, c-format msgid "Incorrect username or password." msgstr "ভুল ব্যবহারকারীর-নাম বা গুপ্তসংকেত।" # tithi -#: ../libpurple/protocols/toc/toc.c:552 +#, c-format msgid "The service is temporarily unavailable." msgstr "সেবাটি সাময়িকভাবে অপ্রাপ্য।" # tithi -#: ../libpurple/protocols/toc/toc.c:555 +#, c-format msgid "Your warning level is currently too high to log in." msgstr "আপনার সতর্কতা স্তর লগইন করার জন্য বর্তমানে খুব উচ্চ।" # tithi -#: ../libpurple/protocols/toc/toc.c:558 +#, c-format 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." @@ -14251,86 +10189,68 @@ msgstr "" "করুন। আপনি যদি চেষ্টা অব্যাহত রাখেন, আপনাকে দীর্ঘ সময় অপেক্ষা করতে হতে পারে।" # tithi -#: ../libpurple/protocols/toc/toc.c:560 #, c-format msgid "An unknown signon error has occurred: %s." msgstr "একটি অজানা সাইনঅন ত্রুটি সংঘটিত হয়েছে: %s।" # tithi -#: ../libpurple/protocols/toc/toc.c:563 #, c-format msgid "An unknown error, %d, has occurred. Info: %s" msgstr "একটি অজানা ত্রুটি, %d, সংঘটিত হয়েছে। তথ্য: %s" # tithi -#: ../libpurple/protocols/toc/toc.c:590 msgid "Invalid Groupname" msgstr "অবৈধ গ্রুপনাম" -#: ../libpurple/protocols/toc/toc.c:674 msgid "Connection Closed" msgstr "সংযোগ বন্ধ করা হয়েছে " -#: ../libpurple/protocols/toc/toc.c:714 msgid "Waiting for reply..." msgstr "উত্তরের অপেক্ষায়..." # tithi -#: ../libpurple/protocols/toc/toc.c:792 msgid "TOC has come back from its pause. You may now send messages again." msgstr "TOC পুনরায় সচল হয়েছে। আপনি এখন পুনরায় বার্তা পাঠাতে পারেন।" -#: ../libpurple/protocols/toc/toc.c:995 msgid "Password Change Successful" msgstr "গুপ্তসংকেত পরিবর্তন সফল হয়েছে" -#: ../libpurple/protocols/toc/toc.c:1366 ../pidgin/gtkblist.c:6981 msgid "_Group:" msgstr "গ্রুপ: (_G)" -#: ../libpurple/protocols/toc/toc.c:1535 msgid "Get Dir Info" msgstr "নির্দেশিকা তথ্য গ্রহণ করুন" -#: ../libpurple/protocols/toc/toc.c:1675 msgid "Set Dir Info" msgstr "নির্দেশিকা তথ্য নির্ধারণ করুন" # tithi -#: ../libpurple/protocols/toc/toc.c:1797 #, c-format msgid "Could not open %s for writing!" msgstr "লেখার জন্য %s খুলতে পারেনি!" # tithi -#: ../libpurple/protocols/toc/toc.c:1833 msgid "File transfer failed; other side probably canceled." msgstr "ফাইল স্থানান্তর ব্যর্থ হয়েছে; অন্য দিক সম্ভবত বাতিল হয়েছে।" # tithi -#: ../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 "স্থানান্তরের জন্য সংযোগ করতে পারেনি।" # tithi -#: ../libpurple/protocols/toc/toc.c:2075 msgid "Could not write file header. The file will not be transferred." msgstr "ফাইল শিরোনাম লিখতে পারেনি। ফাইল স্থানান্তর করা হবে না।" -#: ../libpurple/protocols/toc/toc.c:2175 msgid "Save As..." msgstr "এভাবে সংরক্ষণ করুন..." # tithi -#: ../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] " %1s %2s-কে %3d ফাইলটি গ্রহণ করতে অনুরোধ করে: %4s (%.2f %5s)%6s%7s" msgstr[1] "%1s %2s-কে %3d ফাইলসমূহ গ্রহণ করতে অনুরোধ করে: %4s (%.2f %5s)%6s%7s" -#: ../libpurple/protocols/toc/toc.c:2216 #, c-format msgid "%s requests you to send them a file" msgstr "%s আপনাকে একটি ফাইল পাঠাতে অনুরোধ করেছেন" @@ -14345,28 +10265,23 @@ msgstr "%s আপনাকে একটি ফাইল পাঠাতে অ #. *< version #. * summary #. * description -#: ../libpurple/protocols/toc/toc.c:2306 ../libpurple/protocols/toc/toc.c:2308 msgid "TOC Protocol Plugin" msgstr "TOC প্রটোকল প্লাগইন" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:751 #, c-format msgid "%s has sent you a webcam invite, which is not yet supported." msgstr "%s আপনাকে ওয়েবক্যাম আমন্ত্রন পাঠিয়েছেন, যা এখনও সমর্থিত নয়।" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:810 msgid "Your Yahoo! message did not get sent." msgstr "আপনার ইয়াহু! বার্তাটি পৌঁছায়নি।" -#: ../libpurple/protocols/yahoo/yahoo.c:923 #, c-format msgid "Yahoo! system message for %s:" msgstr "%s-এর জন্য ইয়াহু! সিস্টেম বার্তা:" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:1015 #, c-format msgid "" "%s has (retroactively) denied your request to add them to your list for the " @@ -14376,17 +10291,14 @@ msgstr "" "অনুরোধ বাতিল করেছে: %s।" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:1018 #, c-format msgid "%s has (retroactively) denied your request to add them to your list." msgstr "%s (আইনগতভাবে) আপনার তালিকাতে তাদের যোগ করতে আপনার অনুরোধ বাতিল করেছে।" -#: ../libpurple/protocols/yahoo/yahoo.c:1020 msgid "Add buddy rejected" msgstr "বন্ধু যোগ প্রত্যাখ্যান করেছে" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:2007 #, c-format msgid "" "The Yahoo server has requested the use of an unrecognized authentication " @@ -14397,11 +10309,9 @@ msgstr "" "ইয়াহুতে সফলভাবে যুক্ত হতে পারবেন না। হালনাগাদসমূহের জন্য %s পরীক্ষা করুন।" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:2011 msgid "Failed Yahoo! Authentication" msgstr "ইয়াহু! প্রমাণীকরণ ব্যর্থ হয়েছে" -#: ../libpurple/protocols/yahoo/yahoo.c:2091 #, c-format msgid "" "You have tried to ignore %s, but the user is on your buddy list. Clicking " @@ -14410,53 +10320,38 @@ msgstr "" "আপনি %s কে অগ্রাহ্য করতে চাচ্ছেন, কিন্তু ব্যবহারকারী আপনার বন্ধু তালিকায় রয়েছেন। " "\"হ্যাঁ\" ক্লিক করলে আপনার বন্ধু অপসারিত হবে এবং অগ্রাহ্য করা হবে।" -#: ../libpurple/protocols/yahoo/yahoo.c:2094 msgid "Ignore buddy?" msgstr "বন্ধু কি অগ্রাহ্য করবেন?" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:2170 msgid "Your account is locked, please log in to the Yahoo! website." msgstr "আপনার একাউন্ট বন্ধ, অনুগ্রহ করে ইয়াহু! ওয়েবসাইটে লগইন করুন।" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:2174 #, c-format msgid "Unknown error number %d. Logging into the Yahoo! website may fix this." msgstr "অজানা ত্রুটি নাম্বার %d। ইয়াহু! ওয়েব সাইটে লগইন করলে হয়ত এটি ঠিক হতে পারে।" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:2227 #, c-format msgid "Could not add buddy %s to group %s to the server list on account %s." msgstr "%3s একাউন্টের সার্ভার তালিকায় %2s গ্রুপে %1s বন্ধুকে যোগ করতে পারেনি।" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:2230 msgid "Could not add buddy to server list" msgstr "সার্ভার তালিকায় বন্ধু যোগ করতে পারেনি।" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:2352 #, c-format msgid "[ Audible %s/%s/%s.swf ] %s" msgstr "[ শ্রবণযোগ্য %1s/%2s/%3s.swf ] %4s" -#: ../libpurple/protocols/yahoo/yahoo.c:2708 msgid "Received unexpected HTTP response from server." msgstr "সার্ভার থেকে অপ্রত্যাশিত এইচটিটিপি সাড়া পেয়েছে।" -#: ../libpurple/protocols/yahoo/yahoo.c:2738 -#: ../libpurple/protocols/yahoo/yahoo.c:2926 -#: ../libpurple/protocols/yahoo/yahoo.c:3032 -#: ../libpurple/protocols/yahoo/yahoo.c:3043 -#: ../libpurple/protocols/yahoo/yahoochat.c:1525 -#: ../libpurple/protocols/yahoo/yahoochat.c:1595 -#: ../libpurple/protocols/yahoo/ycht.c:586 msgid "Connection problem" msgstr "সংযোগ সমস্যা" -#: ../libpurple/protocols/yahoo/yahoo.c:2764 #, c-format msgid "" "Lost connection with %s:\n" @@ -14465,7 +10360,6 @@ msgstr "" "%1s এর সাথে সংযোগ হারিয়েছে:\n" "%2s" -#: ../libpurple/protocols/yahoo/yahoo.c:2789 #, c-format msgid "" "Could not establish a connection with %s:\n" @@ -14474,112 +10368,80 @@ msgstr "" "%1s এর সাথে সংযোগ স্থাপন করতে পারেনি:\n" "%2s" -#: ../libpurple/protocols/yahoo/yahoo.c:3159 -#: ../libpurple/protocols/yahoo/yahoo.c:3870 msgid "Not at Home" msgstr "বাসায় নেই" -#: ../libpurple/protocols/yahoo/yahoo.c:3161 -#: ../libpurple/protocols/yahoo/yahoo.c:3873 msgid "Not at Desk" msgstr "ডেস্কে নেই" -#: ../libpurple/protocols/yahoo/yahoo.c:3163 -#: ../libpurple/protocols/yahoo/yahoo.c:3876 msgid "Not in Office" msgstr "অফিসে নেই" -#: ../libpurple/protocols/yahoo/yahoo.c:3167 -#: ../libpurple/protocols/yahoo/yahoo.c:3882 msgid "On Vacation" msgstr "ছুটিতে" # fix me tithi -#: ../libpurple/protocols/yahoo/yahoo.c:3171 -#: ../libpurple/protocols/yahoo/yahoo.c:3888 msgid "Stepped Out" msgstr "চলে গেছে" -#: ../libpurple/protocols/yahoo/yahoo.c:3264 -#: ../libpurple/protocols/yahoo/yahoo.c:3294 msgid "Not on server list" msgstr "সার্ভার তালিকায় নেই" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:3311 -#: ../libpurple/protocols/yahoo/yahoo.c:3369 msgid "Appear Online" msgstr "অনলাইনে আছেন" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:3314 -#: ../libpurple/protocols/yahoo/yahoo.c:3390 msgid "Appear Permanently Offline" msgstr "স্থায়ীভাবে অফলাইনে আছেন" -#: ../libpurple/protocols/yahoo/yahoo.c:3332 msgid "Presence" msgstr "উপস্থিতি" -#: ../libpurple/protocols/yahoo/yahoo.c:3375 msgid "Appear Offline" msgstr "অফলাইনে উপস্থিত" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:3384 msgid "Don't Appear Permanently Offline" msgstr "অফলাইনে স্থায়ীভাবে থাকছে না" -#: ../libpurple/protocols/yahoo/yahoo.c:3432 msgid "Join in Chat" msgstr "আড্ডায় যোগ দিন" -#: ../libpurple/protocols/yahoo/yahoo.c:3438 msgid "Initiate Conference" msgstr "আলোচনা সভা শুরু করুন" -#: ../libpurple/protocols/yahoo/yahoo.c:3466 msgid "Presence Settings" msgstr "উপস্থিতির বিন্যাসনসমূহ" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:3472 msgid "Start Doodling" msgstr "হিজিবিজি কাজ শুরু করুন" -#: ../libpurple/protocols/yahoo/yahoo.c:3580 msgid "Activate which ID?" msgstr "কোন আইডি সক্রিয় করা হবে?" -#: ../libpurple/protocols/yahoo/yahoo.c:3591 msgid "Join whom in chat?" msgstr "কার সাথে আড্ডায় যোগ দিতে চান?" -#: ../libpurple/protocols/yahoo/yahoo.c:3603 msgid "Activate ID..." msgstr "আইডি সক্রিয় করুন..." -#: ../libpurple/protocols/yahoo/yahoo.c:3607 msgid "Join User in Chat..." msgstr "ব্যবহারকারীকে আড্ডায় যোগ করুন..." -#: ../libpurple/protocols/yahoo/yahoo.c:3612 msgid "Open Inbox" msgstr "ইনবক্স খুলুন" -#: ../libpurple/protocols/yahoo/yahoo.c:4233 msgid "join <room>: Join a chat room on the Yahoo network" msgstr "যোগ দিন &1lt;রুম&2gt;: ইয়াহু নেটওয়ার্কের একটি আড্ডার রুমে যোগ দিন" -#: ../libpurple/protocols/yahoo/yahoo.c:4238 msgid "list: List rooms on the Yahoo network" msgstr "তালিকা: ইয়াহু নেটওয়ার্কে রুমের তালিকা করুন" -#: ../libpurple/protocols/yahoo/yahoo.c:4246 msgid "doodle: Request user to start a Doodle session" msgstr "হিজিবিজি: ব্যবহারকারীকে একটি হিজিবিজি অধিবেশন শুরু করতে অনুরোধ করুন" -#: ../libpurple/protocols/yahoo/yahoo.c:4355 msgid "Yahoo ID..." msgstr "ইয়াহু আইডি..." @@ -14593,90 +10455,66 @@ msgstr "ইয়াহু আইডি..." #. *< version #. * summary #. * description -#: ../libpurple/protocols/yahoo/yahoo.c:4464 -#: ../libpurple/protocols/yahoo/yahoo.c:4466 msgid "Yahoo Protocol Plugin" msgstr "ইয়াহু প্রটোকল প্লাগইন" -#: ../libpurple/protocols/yahoo/yahoo.c:4489 msgid "Yahoo Japan" msgstr "ইয়াহু জাপান" -#: ../libpurple/protocols/yahoo/yahoo.c:4492 msgid "Pager server" msgstr "পেজার সার্ভার" -#: ../libpurple/protocols/yahoo/yahoo.c:4495 msgid "Japan Pager server" msgstr "জাপানী পেজার সার্ভার" -#: ../libpurple/protocols/yahoo/yahoo.c:4498 msgid "Pager port" msgstr "পেজার পোর্ট" -#: ../libpurple/protocols/yahoo/yahoo.c:4501 msgid "File transfer server" msgstr "ফাইল স্থানান্তর সার্ভার" -#: ../libpurple/protocols/yahoo/yahoo.c:4504 msgid "Japan file transfer server" msgstr "জাপান ফাইল স্থানান্তর সার্ভার" -#: ../libpurple/protocols/yahoo/yahoo.c:4507 msgid "File transfer port" msgstr "ফাইল স্থানান্তর পোর্ট" -#: ../libpurple/protocols/yahoo/yahoo.c:4510 msgid "Chat room locale" msgstr "আড্ডা রুমের অবস্থা" # tithi -#: ../libpurple/protocols/yahoo/yahoo.c:4513 msgid "Ignore conference and chatroom invitations" msgstr "আলোচনা সভা এবং আড্ডার-রুমের আমন্ত্রন অগ্রাহ্য করুন" -#: ../libpurple/protocols/yahoo/yahoo.c:4521 msgid "Chat room list URL" msgstr "আড্ডার রুম তালিকার ইউআরএল" -#: ../libpurple/protocols/yahoo/yahoo.c:4524 msgid "Yahoo Chat server" msgstr "ইয়াহু আড্ডা সার্ভার" -#: ../libpurple/protocols/yahoo/yahoo.c:4527 msgid "Yahoo Chat port" msgstr "ইয়াহু আড্ডার পোর্ট" #. Write a local message to this conversation showing that a request for a #. * Doodle session has been made #. -#: ../libpurple/protocols/yahoo/yahoo_doodle.c:98 msgid "Sent Doodle request." msgstr "হিজিবিজি অনুরোধ পাঠানো হয়েছে" -#: ../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 "ফাইল বর্ণনাকারী স্থাপন করতে অক্ষম।" -#: ../libpurple/protocols/yahoo/yahoo_filexfer.c:1410 #, c-format msgid "%s is trying to send you a group of %d files.\n" msgstr "%s আপনাকে %d ফাইলের একটি গ্রুপ পাঠানোর চেষ্টা করছে।\n" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:798 msgid "Yahoo! Japan Profile" msgstr "ইয়াহু! জাপান প্রোফাইল" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:799 msgid "Yahoo! Profile" msgstr "ইয়াহু! প্রোফাইল" # tithi -#: ../libpurple/protocols/yahoo/yahoo_profile.c:839 msgid "" "Sorry, profiles marked as containing adult content are not supported at this " "time." @@ -14685,7 +10523,6 @@ msgstr "" "এখন সমর্থিত নয়।" # tithi -#: ../libpurple/protocols/yahoo/yahoo_profile.c:841 msgid "" "If you wish to view this profile, you will need to visit this link in your " "web browser:" @@ -14693,49 +10530,36 @@ msgstr "" "আপনি যদি এই বৃত্তান্তটি দেখতে চান, আপনাকে আপনার ওয়েব ব্রাউজারের এই লিংকটি " "পরিদর্শন করতে হবে:" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1033 msgid "Yahoo! ID" msgstr "ইয়াহু! আইডি" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1109 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1113 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1117 msgid "Hobbies" msgstr "শখ" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1127 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1131 msgid "Latest News" msgstr "সাম্প্রতিক খবর" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1152 msgid "Home Page" msgstr "হোম পেজ" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1167 msgid "Cool Link 1" msgstr "কুল লিংক ১" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1172 msgid "Cool Link 2" msgstr "কুল লিংক ২" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1176 msgid "Cool Link 3" msgstr "কুল লিংক ৩" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1190 msgid "Last Update" msgstr "সর্বশেষ পরিবর্ধন" # tithi -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1203 msgid "" "This profile is in a language or format that is not supported at this time." msgstr "এই বৃত্তান্তটি এমন একটি ভাষায় বা বিন্যাসে যা এখন সমর্থিত নয়।" # tithi -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1218 msgid "" "Could not retrieve the user's profile. This most likely is a temporary " "server-side problem. Please try again later." @@ -14743,7 +10567,6 @@ msgstr "" "ব্যবহারকারীর বৃত্তান্ত উদ্ধার করতে পারনি। এটি সম্ভাবত একটি অস্থায়ী সার্ভার-পার্শ্বের " "সমস্যা। অনুগ্রহ করে পরবর্তীতে আবার চেষ্টা করুন।" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1221 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 " @@ -14753,42 +10576,34 @@ msgstr "" "নেই; যাই হোক, ইয়্যাহু! কখনোও ব্যবহারকারীর বৃত্তান্ত খুঁজে পেতে ব্যর্থ হয়। আপনি যদি " "জানেন যে ব্যবহারকারী বিদ্যমান, অনুগ্রহ করে পরবর্তীতে আবার চেষ্টা করুন।" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1227 msgid "The user's profile is empty." msgstr "ব্যবহারকারীর প্রোফাইল ফাঁকা।" # tithi -#: ../libpurple/protocols/yahoo/yahoochat.c:222 #, c-format msgid "%s declined your conference invitation to room \"%s\" because \"%s\"." msgstr "" "\"%3s\" এর কারণে %1s \"%2s\" রুমে আপনার আলোচনা সভার আমন্ত্রণ অস্বীকার করেছেন।" -#: ../libpurple/protocols/yahoo/yahoochat.c:224 msgid "Invitation Rejected" msgstr "আমন্ত্রন প্রত্যাখ্যান করা হয়েছে" -#: ../libpurple/protocols/yahoo/yahoochat.c:443 msgid "Failed to join chat" msgstr "আড্ডায় যোগ দিতে ব্যর্থ" #. -6 -#: ../libpurple/protocols/yahoo/yahoochat.c:446 msgid "Unknown room" msgstr "অজানা রুম" #. -15 -#: ../libpurple/protocols/yahoo/yahoochat.c:449 msgid "Maybe the room is full" msgstr "সম্ভবত রুমটি পূর্ণ" #. -35 -#: ../libpurple/protocols/yahoo/yahoochat.c:452 msgid "Not available" msgstr "বিদ্যমান নেই" # tithi -#: ../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" @@ -14796,47 +10611,35 @@ msgstr "" "অজানা ত্রুটি। একটি আড্ডা-রুমে পুনরায় যোগদানের পূর্বে আপনাকে সম্ভবত লগ আউট করতে হবে " "এবং পাঁচ মিনিট অপেক্ষা করতে হবে।" -#: ../libpurple/protocols/yahoo/yahoochat.c:539 #, c-format msgid "You are now chatting in %s." msgstr "আপনি এখন %s-এ আড্ডা দিচ্ছেন।" -#: ../libpurple/protocols/yahoo/yahoochat.c:728 msgid "Failed to join buddy in chat" msgstr "বন্ধুকে আড্ডায় অংশগ্রহন করাতে ব্যর্থ হয়েছে" -#: ../libpurple/protocols/yahoo/yahoochat.c:729 msgid "Maybe they're not in a chat?" msgstr "সম্ভবত তারা আড্ডায় নেই?" -#: ../libpurple/protocols/yahoo/yahoochat.c:1425 -#: ../libpurple/protocols/yahoo/yahoochat.c:1451 msgid "Fetching the room list failed." msgstr "রুমের তালিকা খুঁজতে ব্যর্থ হয়েছে।" -#: ../libpurple/protocols/yahoo/yahoochat.c:1511 msgid "Voices" msgstr "কন্ঠস্বরসমূহ" -#: ../libpurple/protocols/yahoo/yahoochat.c:1514 msgid "Webcams" msgstr "ওয়েবক্যামসমূহ" -#: ../libpurple/protocols/yahoo/yahoochat.c:1525 -#: ../libpurple/protocols/yahoo/yahoochat.c:1595 msgid "Unable to fetch room list." msgstr "রুমের তালিকা খুঁজতে অক্ষম।" -#: ../libpurple/protocols/yahoo/yahoochat.c:1588 msgid "User Rooms" msgstr "ব্যবহারকারীর রুম" # tithi -#: ../libpurple/protocols/yahoo/ycht.c:457 msgid "Connection problem with the YCHT server." msgstr "YCHT সার্ভারের সাথে সংযোগে সমস্যা।" -#: ../libpurple/protocols/yahoo/ycht.c:476 #, c-format msgid "" "Lost connection with server\n" @@ -14845,7 +10648,6 @@ msgstr "" "সার্ভারের সাথে সংযোগ হারিয়েছে\n" "%s" -#: ../libpurple/protocols/zephyr/zephyr.c:357 msgid "" "(There was an error converting this message.\t Check the 'Encoding' option " "in the Account Editor)" @@ -14853,87 +10655,68 @@ msgstr "" "(এই বার্তাটি রুপান্তরে একটি ত্রুটি ছিল। একাউন্ট সম্পাদকে " "'সঙ্কেতায়ন' পছন্দ পরীক্ষা করুন)" -#: ../libpurple/protocols/zephyr/zephyr.c:755 #, c-format msgid "Unable to send to chat %s,%s,%s" msgstr "%1s,%2s,%3s আড্ডায় পাঠাতে সমর্থ নয়।" -#: ../libpurple/protocols/zephyr/zephyr.c:794 -#: ../libpurple/protocols/zephyr/zephyr.c:1173 msgid "Hidden or not logged-in" msgstr "লুকানো বা লগইন অবস্থায় নেই" # tithi -#: ../libpurple/protocols/zephyr/zephyr.c:800 -#: ../libpurple/protocols/zephyr/zephyr.c:1175 #, c-format msgid "<br>At %s since %s" msgstr "<br>%s হতে %s এ" -#: ../libpurple/protocols/zephyr/zephyr.c:1513 -#: ../libpurple/protocols/zephyr/zephyr.c:1514 msgid "Anyone" msgstr "যে কেউ" -#: ../libpurple/protocols/zephyr/zephyr.c:2375 msgid "_Class:" msgstr "শ্রেণী: (_C)" # tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2381 msgid "_Instance:" msgstr "ঘটনা: (_I)" -#: ../libpurple/protocols/zephyr/zephyr.c:2387 msgid "_Recipient:" msgstr "প্রাপক: (_R)" # tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2398 #, c-format msgid "Attempt to subscribe to %s,%s,%s failed" msgstr "%1s,%2s,%3s এর গ্রাহক হবার চেষ্টা ব্যর্থ হয়েছে" # tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2711 msgid "zlocate <nick>: Locate user" msgstr "z-নির্দেশ করুন &1lt;ডাকনাম&2gt;: ব্যবহারকারী নির্দেশ করুন" # tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2716 msgid "zl <nick>: Locate user" msgstr "zl <ডাকনাম>: ব্যবহারকারী নির্দেশ করুন" # tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2721 msgid "instance <instance>: Set the instance to be used on this class" msgstr "দৃষ্টান্ত &1lt;দৃষ্টান্ত&2gt;: এই শ্রেনীতে ব্যবহারের জন্য দৃষ্টান্ত নির্ধারণ করুন" # tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2726 msgid "inst <instance>: Set the instance to be used on this class" msgstr "দৃষ্টান্ত &1lt;দৃষ্টান্ত&2gt;: এই শ্রেণীতে ব্যবহারের জন্য দৃষ্টান্ত নির্ধারণ করুন" # tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2731 msgid "topic <instance>: Set the instance to be used on this class" msgstr "বিষয়বস্তু &1lt;দৃষ্টান্ত&2gt;: এই শ্রেণীতে ব্যবহারের জন্য দৃষ্টান্ত নির্ধারণ করুন" # tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2737 msgid "sub <class> <instance> <recipient>: Join a new chat" msgstr "" "বিষয় &1lt;শ্রেণী&2gt; &3lt;দৃষ্টান্ত&4gt; &5lt;প্রাপক&6gt;: একটি নতুন আড্ডায় " "অংশগ্রহন করুন" # tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2742 msgid "" "zi <instance>: Send a message to <message,<i>instance</i>,*>" msgstr "zi &1lt;দৃষ্টান্ত&2gt;; একটি বার্তা পাঠান &3It;বার্তা,<i>দৃষ্টান্ত</i>,*&4gt;" # fix-me tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2748 msgid "" "zci <class> <instance>: Send a message to <<i>class</i>," "<i>instance</i>,*>" @@ -14942,7 +10725,6 @@ msgstr "" "<i>দৃষ্টান্ত</i>,*&6gt;" # fix-me tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2754 msgid "" "zcir <class> <instance> <recipient>: Send a message to <" "<i>class</i>,<i>instance</i>,<i>recipient</i>>" @@ -14951,7 +10733,6 @@ msgstr "" "<i>শ্রেণী</i>,<i>দৃষ্টান্ত</i>,<i>প্রাপক</i>&8gt;" # fix-me tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2760 msgid "" "zir <instance> <recipient>: Send a message to <MESSAGE," "<i>instance</i>,<i>recipient</i>>" @@ -14960,16 +10741,13 @@ msgstr "" "i>,<i>প্রাপক</i>&6gt;" # fix-me tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2765 msgid "zc <class>: Send a message to <<i>class</i>,PERSONAL,*>" msgstr "zc &1lt;শ্রেণী&2gt;: একটি বার্তা পাঠান &3lt;<i>শ্রেণী</i>,ব্যক্তিগত,*&4gt;" -#: ../libpurple/protocols/zephyr/zephyr.c:2841 msgid "Resubscribe" msgstr "পুনরায় গ্রাহক হোন" # fix me tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2844 msgid "Retrieve subscriptions from server" msgstr "সার্ভার থেকে শেয়ারসমূহ উদ্ধার করুন" @@ -14984,49 +10762,37 @@ msgstr "সার্ভার থেকে শেয়ারসমূহ উদ্ #. *< version #. * summary #. * description -#: ../libpurple/protocols/zephyr/zephyr.c:2937 -#: ../libpurple/protocols/zephyr/zephyr.c:2939 msgid "Zephyr Protocol Plugin" msgstr "Zephyr প্রটোকল প্লাগইন" -#: ../libpurple/protocols/zephyr/zephyr.c:2964 msgid "Use tzc" msgstr "tzc ব্যবহার করুন" -#: ../libpurple/protocols/zephyr/zephyr.c:2967 msgid "tzc command" msgstr "tzc নির্দেশ" # tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2970 msgid "Export to .anyone" msgstr ".যেকারও কাছে রপ্তানি করুন" -#: ../libpurple/protocols/zephyr/zephyr.c:2973 msgid "Export to .zephyr.subs" msgstr ".zephyr.subs এ রপ্তানি করুন" # tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2976 msgid "Import from .anyone" msgstr ".যেকারও কাছ থেকে আমদানি করুন" # fix me tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2979 msgid "Import from .zephyr.subs" msgstr ".zephyr.subs থেকে আমদানি করুন" -#: ../libpurple/protocols/zephyr/zephyr.c:2982 msgid "Realm" msgstr "এলাকা" # tithi -#: ../libpurple/protocols/zephyr/zephyr.c:2985 msgid "Exposure" msgstr "অনাবৃতকরণ" -#: ../libpurple/proxy.c:680 ../libpurple/proxy.c:1121 -#: ../libpurple/proxy.c:1256 ../libpurple/proxy.c:1916 #, c-format msgid "" "Unable to create socket:\n" @@ -15035,39 +10801,32 @@ msgstr "" "সকেট তৈরী করতে ব্যর্থ:\n" "%s" -#: ../libpurple/proxy.c:875 #, c-format msgid "Unable to parse response from HTTP proxy: %s\n" msgstr "HTTP প্রক্সি থেকে সাড়া গ্রহণ করতে অক্ষম: %s\n" -#: ../libpurple/proxy.c:908 ../libpurple/proxy.c:970 ../libpurple/proxy.c:999 #, c-format msgid "HTTP proxy connection error %d" msgstr "এইচটিটিপি প্রক্সি সংযোগের %d ত্রুটি" # tithi -#: ../libpurple/proxy.c:995 #, c-format msgid "Access denied: HTTP proxy server forbids port %d tunneling." msgstr "অনুমতি বাতিল: HTTP প্রক্সি সার্ভার %d পোর্ট টানেলকরণে বাধা দেয়।" -#: ../libpurple/proxy.c:1217 #, c-format msgid "Error resolving %s" msgstr "%s স্থিরকরণে ত্রুটি" -#: ../libpurple/proxy.c:2022 msgid "Could not resolve host name" msgstr "হোস্টের নাম স্থির করা হয়নি" # tithi -#: ../libpurple/prpl.c:426 #, c-format msgid "Requesting %s's attention..." msgstr "%s এর মনোযোগ কামনা করছে..." # tithi -#: ../libpurple/prpl.c:471 #, c-format msgid "%s has requested your attention!" msgstr "%s আপনার মনযোগ কামনা করেছে!" @@ -15075,38 +10834,31 @@ msgstr "%s আপনার মনযোগ কামনা করেছে!" #. * #. * A wrapper for purple_request_action() that uses @c Yes and @c No buttons. #. -#: ../libpurple/request.h:1391 ../pidgin/gtkblist.c:554 msgid "_Yes" msgstr "হ্যাঁ (_Y)" -#: ../libpurple/request.h:1391 ../pidgin/gtkblist.c:554 msgid "_No" msgstr "না (_N)" #. * #. * A wrapper for purple_request_action() that uses Accept and Cancel buttons. #. -#: ../libpurple/request.h:1411 msgid "_Accept" msgstr "গ্রহণ করুন (_A)" #. * #. * The default message to use when the user becomes auto-away. #. -#: ../libpurple/savedstatuses.c:48 msgid "I'm not here right now" msgstr "এই মুহুর্তে আমি এখানে নেই" -#: ../libpurple/savedstatuses.c:537 msgid "saved statuses" msgstr "সংরক্ষিত অবস্থাসমূহ" -#: ../libpurple/server.c:267 #, c-format msgid "%s is now known as %s.\n" msgstr "%1s এখন %2s নামে পরিচিত।\n" -#: ../libpurple/server.c:834 #, c-format msgid "" "%s has invited %s to the chat room %s:\n" @@ -15115,105 +10867,82 @@ msgstr "" "%1s %2s কে %3s আড্ডার রুমে আমন্ত্রন জানিয়েছেন:\n" "%4s" -#: ../libpurple/server.c:839 #, c-format msgid "%s has invited %s to the chat room %s\n" msgstr "%1s %2s কে %3s আড্ডার রুমে আমন্ত্রন জানিয়েছেন\n" -#: ../libpurple/server.c:843 msgid "Accept chat invitation?" msgstr "আড্ডার আমন্ত্রন কি গ্রহণ করবেন?" #. Shortcut -#: ../libpurple/smiley.c:411 ../pidgin/gtksmiley.c:525 msgid "Shortcut" msgstr "শর্টকাট" -#: ../libpurple/smiley.c:412 msgid "The text-shortcut for the smiley" msgstr "স্মাইলির জন্য পাঠ-শর্টকাট" #. Stored Image -#: ../libpurple/smiley.c:418 msgid "Stored Image" msgstr "সংরক্ষিত ছবি" # tithi -#: ../libpurple/smiley.c:419 msgid "Stored Image. (that'll have to do for now)" msgstr "সংরক্ষিত ছবি। (ঐটি এই সময়ের জন্য করতে হবে)" -#: ../libpurple/sslconn.c:167 msgid "SSL Connection Failed" msgstr "SSL সংযোগ ব্যর্থ হয়েছে" -#: ../libpurple/sslconn.c:169 msgid "SSL Handshake Failed" msgstr "SSL হ্যান্ডশেক ব্যর্থ হয়েছে" # tithi -#: ../libpurple/sslconn.c:171 msgid "SSL peer presented an invalid certificate" msgstr "SSL যুগল একটি অবৈধ প্রত্যয়নপত্র উপস্থাপন করেছিল" -#: ../libpurple/sslconn.c:174 msgid "Unknown SSL error" msgstr "অজানা SSL ত্রুটি" -#: ../libpurple/status.c:158 msgid "Unset" msgstr "অনির্ধারণ করুন" -#: ../libpurple/status.c:161 ../pidgin/gtkdocklet.c:553 -#: ../pidgin/gtkstatusbox.c:1097 msgid "Do not disturb" msgstr "বিরক্ত করবেন না" # fix me tithi -#: ../libpurple/status.c:164 msgid "Extended away" msgstr "অনেক বর্ধিত" -#: ../libpurple/status.c:165 msgid "Mobile" msgstr "মোবাইল" # tithi -#: ../libpurple/status.c:166 msgid "Listening to music" msgstr "গান শুনছে" -#: ../libpurple/status.c:615 #, c-format msgid "%s (%s) changed status from %s to %s" msgstr "%1s (%2s) অবস্থা %4s থেকে %3s তে পরিবর্তন করেছে" -#: ../libpurple/status.c:626 #, c-format msgid "%s (%s) is now %s" msgstr "%1s (%2s) এখন %3s" -#: ../libpurple/status.c:632 #, c-format msgid "%s (%s) is no longer %s" msgstr "%1s (%2s) আর %3s থাকবে না" -#: ../libpurple/status.c:1247 #, c-format msgid "%s became idle" msgstr "%s এখন অলস" -#: ../libpurple/status.c:1267 #, c-format msgid "%s became unidle" msgstr "%s এখন অলস নয়" -#: ../libpurple/status.c:1333 #, c-format msgid "+++ %s became idle" msgstr "+++ %s অলস হয়েছে" -#: ../libpurple/status.c:1335 #, c-format msgid "+++ %s became unidle" msgstr "+++ %s অলস হয়নি" @@ -15224,18 +10953,15 @@ msgstr "+++ %s অলস হয়নি" #. * change this to "%X %x" if they want the time to be shown first, #. * followed by the date. #. -#: ../libpurple/util.c:730 #, c-format msgid "%x %X" msgstr "%x %X" -#: ../libpurple/util.c:2829 #, c-format msgid "Error Reading %s" msgstr "%s পড়ায় ত্রুটি" # tithi -#: ../libpurple/util.c:2830 #, c-format msgid "" "An error was encountered reading your %s. They have not been loaded, and " @@ -15244,50 +10970,42 @@ msgstr "" "আপনার %s পড়ার সময় একটি ত্রুটির বাধা দেয়েছিল। তাদেরকে লোড করা হয়নি, এবং পুরনো " "ফাইলটি %s~ এ নামান্তর করা হয়েছে।" -#: ../libpurple/util.c:3338 msgid "Calculating..." msgstr "গননা করা হচ্ছে..." -#: ../libpurple/util.c:3341 msgid "Unknown." msgstr "অজানা।" -#: ../libpurple/util.c:3367 #, c-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d সেকেন্ড" msgstr[1] "%d সেকেন্ড" -#: ../libpurple/util.c:3379 #, c-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d দিন" msgstr[1] "%d গুলো দিন" -#: ../libpurple/util.c:3387 #, c-format msgid "%s, %d hour" msgid_plural "%s, %d hours" msgstr[0] "%s, %d ঘন্টা" msgstr[1] "%s, %d গুলো ঘন্টা" -#: ../libpurple/util.c:3393 #, c-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d ঘন্টা" msgstr[1] "%d গুলো ঘন্টা" -#: ../libpurple/util.c:3401 #, c-format msgid "%s, %d minute" msgid_plural "%s, %d minutes" msgstr[0] "%s, %d মিনিট" msgstr[1] "%s, %d গুলো মিনিট" -#: ../libpurple/util.c:3407 #, c-format msgid "%d minute" msgid_plural "%d minutes" @@ -15295,23 +11013,19 @@ msgstr[0] "%d মিনিট" msgstr[1] "%d গুলো মিনিট" # tithi -#: ../libpurple/util.c:3678 #, c-format msgid "Could not open %s: Redirected too many times" msgstr "%s খুলতে পারেনি: অনেকবার পুনঃনির্দেশ করা হয়েছে" -#: ../libpurple/util.c:3728 ../libpurple/util.c:4105 #, c-format msgid "Unable to connect to %s" msgstr "%s এ সংযোগ দিতে ব্যর্থ হয়েছে" -#: ../libpurple/util.c:3796 #, c-format msgid "Error reading from %s: response too long (%d bytes limit)" msgstr "%s থেকে পড়ায় ত্রুটি: প্রতিউত্তর অনেক দীর্ঘ্য (%d বাইটের সীমা)" # fix-me tithi -#: ../libpurple/util.c:3864 #, c-format msgid "" "Unable to allocate enough memory to hold the contents from %s. The web " @@ -15320,147 +11034,121 @@ msgstr "" "%s এর উপাদানসমূহ ধারণ করার মতো যথেষ্ট মেমোরি বরাদ্দ করতে অক্ষম। ওয়েব সার্ভার " "বিদ্বেষপরায়ণ কিছু করার চেষ্টা করতে পারে।" -#: ../libpurple/util.c:3899 #, c-format msgid "Error reading from %s: %s" msgstr "%1s থেকে পড়ায় ত্রুটি: %2s" -#: ../libpurple/util.c:3983 #, c-format msgid "Error writing to %s: %s" msgstr "%1s এ লেখায় ত্রুটি: %2s" -#: ../libpurple/util.c:4014 ../libpurple/util.c:4044 #, c-format msgid "Unable to connect to %s: %s" msgstr "%1s এর সাথে সংযোগে ব্যর্থ: %2s" # tithi -#: ../libpurple/util.c:4860 #, c-format msgid " - %s" msgstr " - %s" -#: ../libpurple/util.c:4866 #, c-format msgid " (%s)" msgstr " (%s)" # tithi #. 10053 -#: ../libpurple/win32/libc_interface.c:319 +#, c-format msgid "Connection interrupted by other software on your computer." msgstr "আপনার কম্পিউটারের অন্য সফটওয়্য়ার দ্বারা সংয়োগ বাধাগ্রস্থ হয়েছে। " #. 10054 -#: ../libpurple/win32/libc_interface.c:322 +#, c-format msgid "Remote host closed connection." msgstr "দূরবর্তী হোস্ট সংযোগ বন্ধ করেছে।" # fix me tithi #. 10060 -#: ../libpurple/win32/libc_interface.c:325 +#, c-format msgid "Connection timed out." msgstr "সংযোগ সময় উত্তীর্ণ হয়েছে।" #. 10061 -#: ../libpurple/win32/libc_interface.c:328 +#, c-format msgid "Connection refused." msgstr "সংযোগে প্রত্যাখান করা হয়েছে" #. 10048 -#: ../libpurple/win32/libc_interface.c:331 +#, c-format msgid "Address already in use." msgstr "ঠিকানাটি ইতোমধ্যে ব্যবহৃত হচ্ছে।" -#: ../pidgin.desktop.in.h:1 msgid "Internet Messenger" msgstr "ইন্টারনেট বার্তাবাহক" -#: ../pidgin.desktop.in.h:2 msgid "Pidgin Internet Messenger" msgstr "পিজিন ইন্টারনেট বার্তাবাহক" # tithi -#: ../pidgin.desktop.in.h:3 msgid "Send instant messages over multiple protocols" msgstr "বহুবিধ প্রটোকল দিয়ে তাৎক্ষনিক বার্তাসমূহ প্রেরণ করুন" -#: ../pidgin/eggtrayicon.c:128 msgid "Orientation" msgstr "পরিচিতি পর্ব" -#: ../pidgin/eggtrayicon.c:129 msgid "The orientation of the tray." msgstr "ট্রে প্রদর্শনের ধরন" #. Build the login options frame. -#: ../pidgin/gtkaccount.c:419 msgid "Login Options" msgstr "লগইনের পছন্দসমূহ" -#: ../pidgin/gtkaccount.c:440 msgid "Pro_tocol:" msgstr "প্রটোকল (_t):" -#: ../pidgin/gtkaccount.c:451 ../pidgin/gtkaccount.c:1090 msgid "_Username:" msgstr "ব্যবহারকারীরনাম (_U):" -#: ../pidgin/gtkaccount.c:558 msgid "Remember pass_word" msgstr "গুপ্তসংকেত স্মরণ রাখুন (_w)" #. Build the user options frame. -#: ../pidgin/gtkaccount.c:613 msgid "User Options" msgstr "ব্যবহারকারীর পছন্দসমূহ" -#: ../pidgin/gtkaccount.c:626 msgid "_Local alias:" msgstr "স্থানীয় ডাকনাম (_L):" -#: ../pidgin/gtkaccount.c:630 msgid "New _mail notifications" msgstr "নতুন মেইলের প্রজ্ঞাপন (_m)" # tithi #. Buddy icon -#: ../pidgin/gtkaccount.c:635 msgid "Use this buddy _icon for this account:" msgstr "এই একাউন্টের জন্য এই বন্ধু আইকন ব্যবহার করুন (_i):" #. Build the protocol options frame. -#: ../pidgin/gtkaccount.c:763 #, c-format msgid "%s Options" msgstr "%s পছন্দসমূহ" -#: ../pidgin/gtkaccount.c:961 msgid "Use GNOME Proxy Settings" msgstr "GNOME প্রক্সি বিন্যাসনসমূহ ব্যবহার করুন" -#: ../pidgin/gtkaccount.c:962 msgid "Use Global Proxy Settings" msgstr "সর্বজনীন প্রক্সি বিন্যাসনসমূহ ব্যবহার করুন" -#: ../pidgin/gtkaccount.c:968 msgid "No Proxy" msgstr "প্রক্সি নেই" -#: ../pidgin/gtkaccount.c:974 msgid "HTTP" msgstr "HTTP" -#: ../pidgin/gtkaccount.c:980 msgid "SOCKS 4" msgstr "SOCKS ৪" -#: ../pidgin/gtkaccount.c:986 msgid "SOCKS 5" msgstr "SOCKS ৫" -#: ../pidgin/gtkaccount.c:992 ../pidgin/gtkprefs.c:1337 msgid "Use Environmental Settings" msgstr "পারিপার্শ্বিক বিন্যাসনসমূহ ব্যবহার করুন" @@ -15469,72 +11157,55 @@ msgstr "পারিপার্শ্বিক বিন্যাসনসম #. 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:1031 msgid "If you look real closely" msgstr "আপনি যদি খুব ভালভাবে দেখেন" #. This is an easter egg. See the comment on the previous line in the source. -#: ../pidgin/gtkaccount.c:1034 msgid "you can see the butterflies mating" msgstr "আপনি প্রজাপতিদের সঙ্গী দেখতে পাবেন" -#: ../pidgin/gtkaccount.c:1055 msgid "Proxy Options" msgstr "প্রক্সির পছন্দসমূহ" -#: ../pidgin/gtkaccount.c:1069 ../pidgin/gtkprefs.c:1331 msgid "Proxy _type:" msgstr "প্রক্সির ধরন (_t):" -#: ../pidgin/gtkaccount.c:1078 ../pidgin/gtkprefs.c:1352 msgid "_Host:" msgstr "হোস্ট (_H):" -#: ../pidgin/gtkaccount.c:1082 ../pidgin/gtkprefs.c:1370 msgid "_Port:" msgstr "পোর্ট (_P):" -#: ../pidgin/gtkaccount.c:1097 ../pidgin/gtkprefs.c:1407 msgid "Pa_ssword:" msgstr "গুপ্তসংকেত (_s):" -#: ../pidgin/gtkaccount.c:1221 msgid "Unable to save new account" msgstr "নতুন একাউন্ট সংরক্ষণে অক্ষম" # tithi -#: ../pidgin/gtkaccount.c:1222 msgid "An account already exists with the specified criteria." msgstr "উল্লেখিত বৈশিষ্ট্যের একটি একাউন্ট ইতিমধ্যে বিদ্যমান।" -#: ../pidgin/gtkaccount.c:1498 msgid "Add Account" msgstr "একাউন্ট যোগ করুন" -#: ../pidgin/gtkaccount.c:1515 msgid "_Basic" msgstr "মৌলিক (_B)" # tithi -#: ../pidgin/gtkaccount.c:1523 msgid "Create _this new account on the server" msgstr "সার্ভারে এই নতুন একাউন্টটি তৈরী করুন (_t)" -#: ../pidgin/gtkaccount.c:1537 msgid "_Advanced" msgstr "অগ্রগামী (_A)" -#: ../pidgin/gtkaccount.c:1930 ../pidgin/gtkplugin.c:757 -#: ../pidgin/plugins/convcolors.c:327 msgid "Enabled" msgstr "সক্রিয়" -#: ../pidgin/gtkaccount.c:1958 msgid "Protocol" msgstr "প্রটোকল" # tithi -#: ../pidgin/gtkaccount.c:2154 #, c-format msgid "" "<span size='larger' weight='bold'>Welcome to %s!</span>\n" @@ -15559,7 +11230,6 @@ msgstr "" "মুছে ফেলতে পারেন" # tithi -#: ../pidgin/gtkblist.c:551 #, c-format msgid "You have %d contact named %s. Would you like to merge them?" msgid_plural "" @@ -15568,7 +11238,6 @@ msgstr[0] "আপনার %1d-টি %2s নামের যোগাযোগ msgstr[1] "" "আপনার বর্তমানে %1dগুলো %2s নামের যোগাযোগ আছে। আপনি কি তাদের একত্রিত করতে চান?" -#: ../pidgin/gtkblist.c:552 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 " @@ -15579,132 +11248,95 @@ msgstr "" "'প্রসারন' পছন্দ করার মাধ্যমে তাদেরকে পুনরায় আলাদা করতে পারেন" # tithi -#: ../pidgin/gtkblist.c:685 msgid "Please update the necessary fields." msgstr "অনুগ্রহ করে প্রয়োজনীয় ক্ষেত্রগুলো হালনাগাদ করুন।" -#: ../pidgin/gtkblist.c:1040 ../pidgin/gtkblist.c:6928 msgid "Room _List" msgstr "রুমের তালিকা (_L)" -#: ../pidgin/gtkblist.c:1060 msgid "" "Please enter the appropriate information about the chat you would like to " "join.\n" msgstr "" "অনুগ্রহ করে আপনি যে আড্ডায় যোগ দিতে চান তার সম্পর্কে যথাযথ তথ্য প্রবেশ করান।\n" -#: ../pidgin/gtkblist.c:1072 ../pidgin/gtkblist.c:6963 -#: ../pidgin/gtkpounce.c:560 ../pidgin/gtkroomlist.c:540 msgid "_Account:" msgstr "একাউন্ট (_A):" -#: ../pidgin/gtkblist.c:1351 ../pidgin/gtkprivacy.c:549 -#: ../pidgin/gtkprivacy.c:563 msgid "_Block" msgstr "ব্লক করুন (_B)" -#: ../pidgin/gtkblist.c:1351 msgid "Un_block" msgstr "ব্লক সরান (_b)" # tithi -#: ../pidgin/gtkblist.c:1394 msgid "Move to" msgstr "সরান" -#: ../pidgin/gtkblist.c:1434 msgid "Get _Info" msgstr "তথ্য সংগ্রহ করুন (_I)" -#: ../pidgin/gtkblist.c:1437 ../pidgin/pidginstock.c:91 msgid "I_M" msgstr "আইএম (_M)" -#: ../pidgin/gtkblist.c:1443 msgid "_Send File..." msgstr "ফাইল পাঠান... (_S)" -#: ../pidgin/gtkblist.c:1450 msgid "Add Buddy _Pounce..." msgstr "বন্ধু পাউন্স যোগ করুন... (_P)" -#: ../pidgin/gtkblist.c:1455 ../pidgin/gtkblist.c:1459 -#: ../pidgin/gtkblist.c:1622 ../pidgin/gtkblist.c:1649 msgid "View _Log" msgstr "লগ প্রদর্শন করুন (_L)" -#: ../pidgin/gtkblist.c:1465 ../pidgin/gtkblist.c:1594 msgid "Hide when offline" msgstr "অফলাইনে থাকলে লুকিয়ে রাখুন" -#: ../pidgin/gtkblist.c:1479 ../pidgin/gtkblist.c:1488 -#: ../pidgin/gtkblist.c:1632 ../pidgin/gtkblist.c:1655 msgid "_Alias..." msgstr "উপনাম... (_A)" -#: ../pidgin/gtkblist.c:1482 ../pidgin/gtkblist.c:1490 -#: ../pidgin/gtkblist.c:1634 ../pidgin/gtkblist.c:1657 msgid "_Remove" msgstr "অপসারণ করুন (_R)" -#: ../pidgin/gtkblist.c:1564 msgid "Set Custom Icon" msgstr "পছন্দসই আইকন নির্ধারণ করুন" -#: ../pidgin/gtkblist.c:1568 ../pidgin/gtkconv.c:2952 msgid "Remove Custom Icon" msgstr "পছন্দসই আইকন অপসারণ করুন" -#: ../pidgin/gtkblist.c:1582 msgid "Add _Buddy..." msgstr "বন্ধু যোগ করুন... (_B)" -#: ../pidgin/gtkblist.c:1585 msgid "Add C_hat..." msgstr "আড্ডা যোগ করুন...(_h)" -#: ../pidgin/gtkblist.c:1588 msgid "_Delete Group" msgstr "গ্রুপ মুছে ফেলুন (_D)" -#: ../pidgin/gtkblist.c:1590 msgid "_Rename" msgstr "পুনরায় নামকরণ করুন (_R)" #. join button -#: ../pidgin/gtkblist.c:1616 ../pidgin/gtkroomlist.c:313 -#: ../pidgin/gtkroomlist.c:587 ../pidgin/pidginstock.c:89 msgid "_Join" msgstr "যোগ দিন (_J)" -#: ../pidgin/gtkblist.c:1618 msgid "Auto-Join" msgstr "স্বয়ং-যোগ দিন" -#: ../pidgin/gtkblist.c:1620 msgid "Persistent" msgstr "পুনঃপুন ঘটনশীল" -#: ../pidgin/gtkblist.c:1630 msgid "_Edit Settings..." msgstr "বিন্যাসনসমূহ সম্পাদনা করুন... (_E)" -#: ../pidgin/gtkblist.c:1664 ../pidgin/gtkblist.c:1689 msgid "_Collapse" msgstr "গুটিয়ে ফেলুন (_C)" -#: ../pidgin/gtkblist.c:1694 msgid "_Expand" msgstr "বর্ধিত করুন (_E)" -#: ../pidgin/gtkblist.c:1947 ../pidgin/gtkblist.c:1959 -#: ../pidgin/gtkblist.c:5614 ../pidgin/gtkblist.c:5627 msgid "/Tools/Mute Sounds" msgstr "/টুলসমূহ/সাউন্ড বন্ধ রাখুন" -#: ../pidgin/gtkblist.c:2419 ../pidgin/gtkconv.c:4996 -#: ../pidgin/gtkpounce.c:451 msgid "" "You are not currently signed on with an account that can add that buddy." msgstr "আপনি বর্তমানে এমন কোনো একাউন্টে যুক্ত নন যা এই বন্ধুকে যোগ করতে পারে।" @@ -15713,152 +11345,116 @@ msgstr "আপনি বর্তমানে এমন কোনো একা #. I don't believe this can happen currently, I think #. * everything that calls this function checks for one of the #. * above node types first. -#: ../pidgin/gtkblist.c:2805 msgid "Unknown node type" msgstr "অজানা নোডের ধরন" #. Buddies menu -#: ../pidgin/gtkblist.c:3260 msgid "/_Buddies" msgstr "/বন্ধুগণ (_B)" -#: ../pidgin/gtkblist.c:3261 msgid "/Buddies/New Instant _Message..." msgstr "/বন্ধুগণ/নতুন তাৎক্ষণিক বার্তা... (_M)" -#: ../pidgin/gtkblist.c:3262 msgid "/Buddies/Join a _Chat..." msgstr "/বন্ধুগণ/আড্ডায় যোগদান করুন... (_C)" -#: ../pidgin/gtkblist.c:3263 msgid "/Buddies/Get User _Info..." msgstr "/বন্ধুগণ/ব্যবহারকারীর তথ্য সংগ্রহ করুন... (_I)" -#: ../pidgin/gtkblist.c:3264 msgid "/Buddies/View User _Log..." msgstr "/বন্ধুগণ/ব্যবহারকারী লগ প্রদর্শন করুন... (_L)" -#: ../pidgin/gtkblist.c:3266 msgid "/Buddies/Sh_ow" msgstr "/বন্ধুগণ/দেখান (_o)" -#: ../pidgin/gtkblist.c:3267 msgid "/Buddies/Show/_Offline Buddies" msgstr "/বন্ধুগণ/দেখান/অফলাইন বন্ধুগণ (_O)" -#: ../pidgin/gtkblist.c:3268 msgid "/Buddies/Show/_Empty Groups" msgstr "/বন্ধুগণ/দেখান/ফাঁকা গ্রুপসমূহ (_E)" -#: ../pidgin/gtkblist.c:3269 msgid "/Buddies/Show/Buddy _Details" msgstr "/বন্ধুগণ/দেখান/বন্ধুর বিবরণ (_D)" -#: ../pidgin/gtkblist.c:3270 msgid "/Buddies/Show/Idle _Times" msgstr "/বন্ধুগণ/দেখান/অলস সময় (_T)" -#: ../pidgin/gtkblist.c:3271 msgid "/Buddies/Show/_Protocol Icons" msgstr "/বন্ধুগণ/দেখান/প্রটোকল আইকনগুলো (_P)" -#: ../pidgin/gtkblist.c:3272 msgid "/Buddies/_Sort Buddies" msgstr "/বন্ধুগণ/বন্ধুদের ক্রমানুসারে সাজান (_S)" -#: ../pidgin/gtkblist.c:3274 msgid "/Buddies/_Add Buddy..." msgstr "/বন্ধুগণ/বন্ধু যোগ করুন... (_A)" -#: ../pidgin/gtkblist.c:3275 msgid "/Buddies/Add C_hat..." msgstr "/বন্ধুগণ/আড্ডা যোগ করুন... (_h)" -#: ../pidgin/gtkblist.c:3276 msgid "/Buddies/Add _Group..." msgstr "/বন্ধুগণ/গ্রুপ যোগ করুন... (_G)" -#: ../pidgin/gtkblist.c:3278 msgid "/Buddies/_Quit" msgstr "/বন্ধুগণ/প্রস্থান করুন (_Q)" #. Accounts menu -#: ../pidgin/gtkblist.c:3281 msgid "/_Accounts" msgstr "/একাউন্টসমূহ (_A)" -#: ../pidgin/gtkblist.c:3282 ../pidgin/gtkblist.c:7659 msgid "/Accounts/Manage Accounts" msgstr "/একাউন্টসমূহ/একাউন্টসমূহ নিয়ন্ত্রণ করুন" #. Tools -#: ../pidgin/gtkblist.c:3285 msgid "/_Tools" msgstr "/টুলসমূহ (_T)" -#: ../pidgin/gtkblist.c:3286 msgid "/Tools/Buddy _Pounces" msgstr "/টুলসমূহ/বন্ধু পাউন্সসমূহ (_P)" -#: ../pidgin/gtkblist.c:3287 msgid "/Tools/_Certificates" msgstr "/টুলসমূহ/প্রত্যয়নপত্রসমূহ (_C)" -#: ../pidgin/gtkblist.c:3288 msgid "/Tools/Plu_gins" msgstr "/টুলসমূহ/প্লাগ-ইনসমূহ (_g)" -#: ../pidgin/gtkblist.c:3289 msgid "/Tools/Pr_eferences" msgstr "/টুলসমূহ/প্রাধিকারসমূহ (_e)" -#: ../pidgin/gtkblist.c:3290 msgid "/Tools/Pr_ivacy" msgstr "/টুলসমূহ/গোপনীয়তা (_i)" -#: ../pidgin/gtkblist.c:3291 msgid "/Tools/Smile_y" msgstr "/টুলসমূহ/স্মাইলী (_y)" -#: ../pidgin/gtkblist.c:3293 msgid "/Tools/_File Transfers" msgstr "/টুলসমূহ/ফাইল স্থানান্তর করে (_F)" -#: ../pidgin/gtkblist.c:3294 msgid "/Tools/R_oom List" msgstr "/টুলসমূহ/রুমের তালিকা (_o)" -#: ../pidgin/gtkblist.c:3295 msgid "/Tools/System _Log" msgstr "/টুলসমূহ/সিস্টেমের কার্যবিবরণী (_L)" -#: ../pidgin/gtkblist.c:3297 msgid "/Tools/Mute _Sounds" msgstr "/টুলসমূহ/সাউন্ড বন্ধ রাখুন (_S)" #. Help -#: ../pidgin/gtkblist.c:3299 msgid "/_Help" msgstr "/সহায়িকা (_H)" -#: ../pidgin/gtkblist.c:3300 msgid "/Help/Online _Help" msgstr "/সহায়িকা/অনলাইন সহায়িকা (_H)" -#: ../pidgin/gtkblist.c:3301 msgid "/Help/_Debug Window" msgstr "/সহায়িকা/ডিবাগ উইন্ডো (_D)" -#: ../pidgin/gtkblist.c:3303 ../pidgin/gtkblist.c:3305 msgid "/Help/_About" msgstr "/সহায়িকা/পরিচিতি (_A)" -#: ../pidgin/gtkblist.c:3338 #, c-format msgid "<b>Account:</b> %s" msgstr "<b>একাউন্ট:</b> %s" -#: ../pidgin/gtkblist.c:3357 #, c-format msgid "" "\n" @@ -15867,7 +11463,6 @@ msgstr "" "\n" "<b>পেশা:</b> %d" -#: ../pidgin/gtkblist.c:3363 #, c-format msgid "" "\n" @@ -15876,132 +11471,102 @@ msgstr "" "\n" "<b>বিষয়বস্তু:</b> %s" -#: ../pidgin/gtkblist.c:3363 msgid "(no topic set)" msgstr "(কোনো বিষয়বস্তু নির্ধারণ করা হয়নি)" -#: ../pidgin/gtkblist.c:3444 msgid "Buddy Alias" msgstr "বন্ধুর উপনাম" -#: ../pidgin/gtkblist.c:3473 msgid "Logged In" msgstr "লগইন করেছে" -#: ../pidgin/gtkblist.c:3519 msgid "Last Seen" msgstr "শেষ দেখেছিলাম" # fix me tithi -#: ../pidgin/gtkblist.c:3540 msgid "Spooky" msgstr "ভূতুরে" -#: ../pidgin/gtkblist.c:3542 msgid "Awesome" msgstr "দারুণ" # fix- me tithi -#: ../pidgin/gtkblist.c:3544 msgid "Rockin'" msgstr "Rockin'" -#: ../pidgin/gtkblist.c:3575 msgid "Total Buddies" msgstr "মোট বন্ধু" # fix me tithi -#: ../pidgin/gtkblist.c:3951 #, c-format msgid "Idle %dd %dh %02dm" msgstr "%dd %dh %02dm অলস" -#: ../pidgin/gtkblist.c:3953 #, c-format msgid "Idle %dh %02dm" msgstr "%dh %02dm অলস" -#: ../pidgin/gtkblist.c:3955 #, c-format msgid "Idle %dm" msgstr "%dm অলস" -#: ../pidgin/gtkblist.c:4109 msgid "/Buddies/New Instant Message..." msgstr "/বন্ধুগণ/নতুন তাৎক্ষণিক বার্তা..." -#: ../pidgin/gtkblist.c:4110 ../pidgin/gtkblist.c:4143 msgid "/Buddies/Join a Chat..." msgstr "/বন্ধুগণ/আড্ডায় যোগদান করুন..." -#: ../pidgin/gtkblist.c:4111 msgid "/Buddies/Get User Info..." msgstr "/বন্ধুগণ/ব্যবহারকারীর তথ্য গ্রহন করুন..." -#: ../pidgin/gtkblist.c:4112 msgid "/Buddies/Add Buddy..." msgstr "/বন্ধুগণ/বন্ধু যোগ করুন..." -#: ../pidgin/gtkblist.c:4113 ../pidgin/gtkblist.c:4146 msgid "/Buddies/Add Chat..." msgstr "/বন্ধুগণ/আড্ডা যোগ করুন..." -#: ../pidgin/gtkblist.c:4114 msgid "/Buddies/Add Group..." msgstr "/বন্ধুগণ/গ্রুপ যোগ করুন..." -#: ../pidgin/gtkblist.c:4149 msgid "/Tools/Privacy" msgstr "/টুলসমূহ/গোপনীয়তা" -#: ../pidgin/gtkblist.c:4152 msgid "/Tools/Room List" msgstr "/টুলসমূহ/রুমের তালিকা" -#: ../pidgin/gtkblist.c:4284 ../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] "%1dটি অপঠিত বার্তা %2s হতে\n" msgstr[1] "%1dগুলো অপঠিত বার্তা %2s হতে\n" -#: ../pidgin/gtkblist.c:4447 msgid "Manually" msgstr "হস্তচালিতভাবে" -#: ../pidgin/gtkblist.c:4450 msgid "By status" msgstr "অবস্থা অনুসারে" -#: ../pidgin/gtkblist.c:4451 msgid "By log size" msgstr "লগের আকার অনুসারে" -#: ../pidgin/gtkblist.c:4787 #, c-format msgid "%s disconnected" msgstr "%s বিচ্ছিন্ন" -#: ../pidgin/gtkblist.c:4789 #, c-format msgid "%s disabled" msgstr "%s নিষ্ক্রিয়" -#: ../pidgin/gtkblist.c:4793 msgid "Reconnect" msgstr "পুনরায় সংযোগ দিন" -#: ../pidgin/gtkblist.c:4793 ../pidgin/gtkblist.c:4911 msgid "Re-enable" msgstr "পুনরায় সক্রিয় করুন" # tithi -#: ../pidgin/gtkblist.c:4909 msgid "Welcome back!" msgstr "পুনরায় স্বাগতম!" -#: ../pidgin/gtkblist.c:4945 #, c-format msgid "%d account was disabled because you signed on from another location:" msgid_plural "" @@ -16010,24 +11575,19 @@ msgstr[0] "আপনি অন্য একটি স্থান থেকে msgstr[1] "" "আপনি অন্য একটি স্থান থেকে সাইন অন করার কারণে %d একাউন্টগুলো নিষ্ক্রিয় ছিল:" -#: ../pidgin/gtkblist.c:5226 msgid "<b>Username:</b>" msgstr "<b>ব্যবহারকারীর-নাম:</b>" -#: ../pidgin/gtkblist.c:5233 msgid "<b>Password:</b>" msgstr "<b>গুপ্তসংকেত:</b>" -#: ../pidgin/gtkblist.c:5244 msgid "_Login" msgstr "লগইন (_L)" -#: ../pidgin/gtkblist.c:5330 msgid "/Accounts" msgstr "/একাউন্টগুলো" #. Translators: Please maintain the use of -> and <- to refer to menu heirarchy -#: ../pidgin/gtkblist.c:5344 #, c-format msgid "" "<span weight='bold' size='larger'>Welcome to %s!</span>\n" @@ -16046,54 +11606,42 @@ msgstr "" #. set the Show Offline Buddies option. must be done #. * after the treeview or faceprint gets mad. -Robot101 #. -#: ../pidgin/gtkblist.c:5608 msgid "/Buddies/Show/Offline Buddies" msgstr "/বন্ধুগণ/দেখান/অফলাইন বন্ধুগণ" -#: ../pidgin/gtkblist.c:5611 msgid "/Buddies/Show/Empty Groups" msgstr "/বন্ধুগণ/দেখান/ফাঁকা গ্রুপগুলো" -#: ../pidgin/gtkblist.c:5617 msgid "/Buddies/Show/Buddy Details" msgstr "/বন্ধুগণ/দেখান/বন্ধুদের বিস্তারিত" -#: ../pidgin/gtkblist.c:5620 msgid "/Buddies/Show/Idle Times" msgstr "/বন্ধুগণ/দোখান/অলস সময়" -#: ../pidgin/gtkblist.c:5623 msgid "/Buddies/Show/Protocol Icons" msgstr "/বন্ধুগণ/দেখান/প্রটোকল আইকনগুলো" -#: ../pidgin/gtkblist.c:6589 msgid "Add a buddy.\n" msgstr "বন্ধু যোগ করুন।\n" -#: ../pidgin/gtkblist.c:6604 msgid "Buddy's _username:" msgstr "বন্ধুর ব্যবহারকারীর-নাম (_u):" # and this -#: ../pidgin/gtkblist.c:6626 msgid "(Optional) A_lias:" msgstr "উপনাম (ঐচ্ছিক) (_l):" -#: ../pidgin/gtkblist.c:6644 msgid "Add buddy to _group:" msgstr "গ্রুপে বন্ধু যোগ করুন (_g):" -#: ../pidgin/gtkblist.c:6893 msgid "This protocol does not support chat rooms." msgstr "এই প্রটোকলটি আড্ডার রুমসমূহ সমর্থন করে না।" -#: ../pidgin/gtkblist.c:6909 msgid "" "You are not currently signed on with any protocols that have the ability to " "chat." msgstr "আপনি বর্তমানে আড্ডার যোগ্য এমন কোনো প্রটোকলে যুক্ত হননি।" -#: ../pidgin/gtkblist.c:6953 msgid "" "Please enter an alias, and the appropriate information about the chat you " "would like to add to your buddy list.\n" @@ -16101,80 +11649,62 @@ msgstr "" "অনুগ্রহ করে আপনি আপনার বন্ধু তালিকায় যুক্ত করতে চান এমন আড্ডার একটি ডাকনাম,এবং " "যথাযথ তথ্য প্রবেশ করান।\n" -#: ../pidgin/gtkblist.c:6976 msgid "A_lias:" msgstr "উপনাম (_l):" # tithi -#: ../pidgin/gtkblist.c:6983 msgid "Auto_join when account becomes online." msgstr "একাউন্ট অনলাইনে থাকলে স্বয়ংক্রিয় ভাবে যোগদান করুন।" # tithi -#: ../pidgin/gtkblist.c:6984 msgid "_Remain in chat after window is closed." msgstr "উইন্ডো বন্ধ হবার পরেও আড্ডায় থাকুন (_R)।" -#: ../pidgin/gtkblist.c:7010 msgid "Please enter the name of the group to be added." msgstr "অনুগ্রহ করে যুক্ত করতে হবে এমন গ্রুপের নাম প্রবেশ করান।" -#: ../pidgin/gtkblist.c:7673 msgid "Enable Account" msgstr "একাউন্ট সক্রিয় করুন" -#: ../pidgin/gtkblist.c:7679 msgid "<PurpleMain>/Accounts/Enable Account" msgstr "<PurpleMain>/একাউন্টসমূহ/একাউন্ট সক্রিয় করুন" -#: ../pidgin/gtkblist.c:7732 msgid "<PurpleMain>/Accounts/" msgstr "<PurpleMain>/একাউন্টসমূহ/" -#: ../pidgin/gtkblist.c:7755 msgid "_Edit Account" msgstr "একাউন্ট সম্পাদন করুন (_E)" -#: ../pidgin/gtkblist.c:7768 ../pidgin/gtkconv.c:3301 msgid "No actions available" msgstr "কোনো কাজ সহজলভ্য নয়" -#: ../pidgin/gtkblist.c:7776 msgid "_Disable" msgstr "নিষ্ক্রিয় (_D)" -#: ../pidgin/gtkblist.c:7794 msgid "/Tools" msgstr "/টুলসমূহ" -#: ../pidgin/gtkblist.c:7864 msgid "/Buddies/Sort Buddies" msgstr "/বন্ধুগণ/বন্ধুদের ক্রমানুসারে সাজান" #. Widget creation function -#: ../pidgin/gtkcertmgr.c:541 msgid "SSL Servers" msgstr "SSL সার্ভারসমূহ" -#: ../pidgin/gtkconv.c:489 msgid "Unknown command." msgstr "অজানা নির্দেশ।" -#: ../pidgin/gtkconv.c:773 ../pidgin/gtkconv.c:800 msgid "That buddy is not on the same protocol as this chat." msgstr "ঐ বন্ধুটি এই আড্ডার মতো একই প্রটোকলে নেই।" -#: ../pidgin/gtkconv.c:794 msgid "" "You are not currently signed on with an account that can invite that buddy." msgstr "আপনি বর্তমানে এমন কোনো একাউন্টে যুক্ত নন যা ঐ বন্ধুকে আমন্ত্রণ জানাতে পারে।" -#: ../pidgin/gtkconv.c:848 msgid "Invite Buddy Into Chat Room" msgstr "বন্ধুকে আড্ডার রুমে আমন্ত্রণ জানান" #. Put our happy label in it. -#: ../pidgin/gtkconv.c:878 msgid "" "Please enter the name of the user you wish to invite, along with an optional " "invite message." @@ -16182,185 +11712,140 @@ msgstr "" "একটি ঐচ্ছিক আমন্ত্রণ বার্তা সহ, অনুগ্রহ করে আপনি যে ব্যবহারকারীকে আমন্ত্রণ জানাতে চান " "তার নামটি প্রবেশ করান।" -#: ../pidgin/gtkconv.c:899 msgid "_Buddy:" msgstr "বন্ধু (_B):" -#: ../pidgin/gtkconv.c:912 ../pidgin/gtksavedstatuses.c:1215 -#: ../pidgin/gtksavedstatuses.c:1529 msgid "_Message:" msgstr "বার্তা (_M):" -#: ../pidgin/gtkconv.c:977 #, c-format msgid "<h1>Conversation with %s</h1>\n" msgstr "<h1>%s-এর সঙ্গে কথোপকথন</h1>\n" -#: ../pidgin/gtkconv.c:1015 msgid "Save Conversation" msgstr "কথোপকথন সংরক্ষণ করুন" -#: ../pidgin/gtkconv.c:1161 ../pidgin/gtkdebug.c:167 ../pidgin/gtkdebug.c:740 msgid "Find" msgstr "খুঁজুন" -#: ../pidgin/gtkconv.c:1187 ../pidgin/gtkdebug.c:195 msgid "_Search for:" msgstr "খুঁজছে (_S):" -#: ../pidgin/gtkconv.c:1708 msgid "Un-Ignore" msgstr "অগ্রাহ্য করবেন না" -#: ../pidgin/gtkconv.c:1711 msgid "Ignore" msgstr "অগ্রাহ্য করুন" -#: ../pidgin/gtkconv.c:1731 msgid "Get Away Message" msgstr "অনুপস্থিতি বার্তা গ্রহণ করুন" -#: ../pidgin/gtkconv.c:1754 msgid "Last said" msgstr "সর্বশেষ বলা হয়েছে" -#: ../pidgin/gtkconv.c:2770 msgid "Unable to save icon file to disk." msgstr "ডিস্কে আইকন ফাইল সংরক্ষণ করতে অক্ষম।" -#: ../pidgin/gtkconv.c:2865 msgid "Save Icon" msgstr "আইকন সংরক্ষণ করুন" -#: ../pidgin/gtkconv.c:2923 msgid "Animate" msgstr "অ্যানিমেট" -#: ../pidgin/gtkconv.c:2928 msgid "Hide Icon" msgstr "আইকন লুকিয়ে রাখুন" -#: ../pidgin/gtkconv.c:2931 msgid "Save Icon As..." msgstr "এভাবে আইকন সংরক্ষণ করুন..." -#: ../pidgin/gtkconv.c:2935 msgid "Set Custom Icon..." msgstr "পছন্দসই আইকন নির্ধারণ করুন..." -#: ../pidgin/gtkconv.c:2939 msgid "Change Size" msgstr "আকার পরিবর্তন করুন" # tithi -#: ../pidgin/gtkconv.c:3077 msgid "Show All" msgstr "সব প্রদর্শন করুন" #. Conversation menu -#: ../pidgin/gtkconv.c:3096 msgid "/_Conversation" msgstr "/কথোপকথন (_C)" -#: ../pidgin/gtkconv.c:3098 msgid "/Conversation/New Instant _Message..." msgstr "/কথোপকথন/নতুন তাৎক্ষণিক বার্তা... (_M)" -#: ../pidgin/gtkconv.c:3103 msgid "/Conversation/_Find..." msgstr "/কথোপকথন/খুঁজুন... (_F)" -#: ../pidgin/gtkconv.c:3105 msgid "/Conversation/View _Log" msgstr "/কথোপকথন/কার্যবিবরণী প্রদর্শন করুন (_L)" -#: ../pidgin/gtkconv.c:3106 msgid "/Conversation/_Save As..." msgstr "/কথোপকথন/এভাবে সংরক্ষণ করুন... (_S)" # fix me tithi -#: ../pidgin/gtkconv.c:3108 msgid "/Conversation/Clea_r Scrollback" msgstr "/কথোপকথন/স্ক্রলবেক মুছুন (_r)" -#: ../pidgin/gtkconv.c:3112 msgid "/Conversation/Se_nd File..." msgstr "/কথোপকথন/ফাইল প্রেরণ করুন... (_n)" -#: ../pidgin/gtkconv.c:3113 msgid "/Conversation/Add Buddy _Pounce..." msgstr "/কথোপকথন/বন্ধু পাউন্স যোগ করুন... (_P)" -#: ../pidgin/gtkconv.c:3115 msgid "/Conversation/_Get Info" msgstr "/কথোপকথন/তথ্য সংগ্রহ করুন (_G)" -#: ../pidgin/gtkconv.c:3117 msgid "/Conversation/In_vite..." msgstr "/কথোপকথন/আমন্ত্রণ করুন... (_v)" -#: ../pidgin/gtkconv.c:3119 msgid "/Conversation/M_ore" msgstr "/কথোপকথন/আরও (_o)" -#: ../pidgin/gtkconv.c:3123 msgid "/Conversation/Al_ias..." msgstr "/কথোপকথন/উপনাম... (_i)" -#: ../pidgin/gtkconv.c:3125 msgid "/Conversation/_Block..." msgstr "/কথোপকথন/ব্লক করুন... (_B)" -#: ../pidgin/gtkconv.c:3127 msgid "/Conversation/_Unblock..." msgstr "/কথোপকথন/ব্লক মুক্ত করুন... (_U)" -#: ../pidgin/gtkconv.c:3129 msgid "/Conversation/_Add..." msgstr "/কথোপকথন/যোগ করুন... (_A)" -#: ../pidgin/gtkconv.c:3131 msgid "/Conversation/_Remove..." msgstr "/কথোপকথন/অপসারণ করুন... (_R)" -#: ../pidgin/gtkconv.c:3136 msgid "/Conversation/Insert Lin_k..." msgstr "/কথোপকথন/লিঙ্ক প্রবেশ করান... (_k)" -#: ../pidgin/gtkconv.c:3138 msgid "/Conversation/Insert Imag_e..." msgstr "/কথোপকথন/চিত্র প্রবেশ করান... (_e)" -#: ../pidgin/gtkconv.c:3144 msgid "/Conversation/_Close" msgstr "/কথোপকথন/বন্ধ করুন (_C)" #. Options -#: ../pidgin/gtkconv.c:3148 msgid "/_Options" msgstr "/পছন্দসমূহ (_O)" -#: ../pidgin/gtkconv.c:3149 msgid "/Options/Enable _Logging" msgstr "/পছন্দসমূহ/লগ সক্রিয় করুন (_L)" -#: ../pidgin/gtkconv.c:3150 msgid "/Options/Enable _Sounds" msgstr "/পছন্দসমূহ/শব্দ সক্রিয় করুন (_S)" -#: ../pidgin/gtkconv.c:3152 msgid "/Options/Show Formatting _Toolbars" msgstr "/পছন্দসমূহ/বিন্যাসকরণ টুলবারসমূহ প্রদর্শন করুন (_T)" -#: ../pidgin/gtkconv.c:3153 msgid "/Options/Show Ti_mestamps" msgstr "/পছন্দসমূহ/সময়-স্ট্যাম্প প্রদর্শন করুন (_m)" -#: ../pidgin/gtkconv.c:3289 msgid "/Conversation/More" msgstr "/কথোপকথন/আরও" -#: ../pidgin/gtkconv.c:3345 msgid "/Options" msgstr "/পছন্দসমূহ" @@ -16369,79 +11854,60 @@ msgstr "/পছন্দসমূহ" #. 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:3380 ../pidgin/gtkconv.c:3412 msgid "/Conversation" msgstr "/কথোপকথন" -#: ../pidgin/gtkconv.c:3420 msgid "/Conversation/View Log" msgstr "/কথোপকথন/কার্যবিবরণী প্রদর্শন করুন" -#: ../pidgin/gtkconv.c:3426 msgid "/Conversation/Send File..." msgstr "/কথোপকথন/ফাইল প্রেরণ করুন..." -#: ../pidgin/gtkconv.c:3430 msgid "/Conversation/Add Buddy Pounce..." msgstr "/কথোপকথন/বন্ধু পাউন্স যোগ করুন..." -#: ../pidgin/gtkconv.c:3436 msgid "/Conversation/Get Info" msgstr "/কথোপকথন/তথ্য গ্রহণ করুন" -#: ../pidgin/gtkconv.c:3440 msgid "/Conversation/Invite..." msgstr "/কথোপকথন/আমন্ত্রণ করুন..." -#: ../pidgin/gtkconv.c:3446 msgid "/Conversation/Alias..." msgstr "/কথোপকথন/উপনাম..." -#: ../pidgin/gtkconv.c:3450 msgid "/Conversation/Block..." msgstr "/কথোপকথন/ব্লক করুন..." -#: ../pidgin/gtkconv.c:3454 msgid "/Conversation/Unblock..." msgstr "/কথোপকথন/ব্লক মুক্ত করুন..." -#: ../pidgin/gtkconv.c:3458 msgid "/Conversation/Add..." msgstr "/কথোপকথন/যোগ করুন..." -#: ../pidgin/gtkconv.c:3462 msgid "/Conversation/Remove..." msgstr "/কথোপকথন/অপসারণ করুন..." -#: ../pidgin/gtkconv.c:3468 msgid "/Conversation/Insert Link..." msgstr "/কথোপকথন/লিঙ্ক প্রবেশ করান..." -#: ../pidgin/gtkconv.c:3472 msgid "/Conversation/Insert Image..." msgstr "/কথোপকথন/চিত্র প্রবেশ করান..." -#: ../pidgin/gtkconv.c:3478 msgid "/Options/Enable Logging" msgstr "/পছন্দসমূহ/লগ সক্রিয় করুন" -#: ../pidgin/gtkconv.c:3481 msgid "/Options/Enable Sounds" msgstr "/পছন্দসমূহ/শব্দ সক্রিয় করুন" -#: ../pidgin/gtkconv.c:3494 msgid "/Options/Show Formatting Toolbars" msgstr "/পছন্দসমূহ/বিন্যাসকরণ টুলবারসমূহ প্রদর্শন করুন" -#: ../pidgin/gtkconv.c:3497 msgid "/Options/Show Timestamps" msgstr "/পছন্দসমূহ/সময়-স্ট্যাম্প প্রদর্শন করুন" -#: ../pidgin/gtkconv.c:3575 msgid "User is typing..." msgstr "ব্যবহারকারী টাইপ করছে..." -#: ../pidgin/gtkconv.c:3649 #, c-format msgid "" "\n" @@ -16451,559 +11917,410 @@ msgstr "" "%s টাইপ করা বন্ধ করে দিয়েছে" #. Build the Send To menu -#: ../pidgin/gtkconv.c:3829 ../pidgin/gtkconv.c:8417 msgid "S_end To" msgstr "প্রেরণ করুন (_S)" -#: ../pidgin/gtkconv.c:4498 ../pidgin/plugins/sendbutton.c:61 msgid "_Send" msgstr "প্রেরণ করুন (_S)" #. Setup the label telling how many people are in the room. -#: ../pidgin/gtkconv.c:4657 msgid "0 people in room" msgstr "রুমে ০ জন ব্যক্তি উপস্থিত" -#: ../pidgin/gtkconv.c:5958 ../pidgin/gtkconv.c:6079 #, c-format msgid "%d person in room" msgid_plural "%d people in room" msgstr[0] "রুমে %d জন ব্যক্তি উপস্থিত" msgstr[1] "রুমে %d জন ব্যক্তি উপস্থিত" -#: ../pidgin/gtkconv.c:6623 ../pidgin/gtkstatusbox.c:691 msgid "Typing" msgstr "টাইপ করছে" -#: ../pidgin/gtkconv.c:6627 msgid "Stopped Typing" msgstr "টাইপ করা বন্ধ করেছে" -#: ../pidgin/gtkconv.c:6630 msgid "Nick Said" msgstr "নিক বলেছে" -#: ../pidgin/gtkconv.c:6633 msgid "Unread Messages" msgstr "অপঠিত বার্তাসমূহ" -#: ../pidgin/gtkconv.c:6639 msgid "New Event" msgstr "নতুন ঘটনা" # fix me tithi -#: ../pidgin/gtkconv.c:7889 msgid "clear: Clears all conversation scrollbacks." msgstr "মুছে ফেলুন: সব কথোপকথনের স্ক্রলবেক মুছে ফেলুন।" -#: ../pidgin/gtkconv.c:8093 msgid "Confirm close" msgstr "বন্ধ নিশ্চিত করুন" -#: ../pidgin/gtkconv.c:8125 msgid "You have unread messages. Are you sure you want to close the window?" msgstr "আপনার অপঠিত বার্তা আছে। আপনি কি নিশ্চিত আপনি উইন্ডোটি বন্ধ করতে চান?" -#: ../pidgin/gtkconv.c:8758 msgid "Close other tabs" msgstr "অন্যান্য ট্যাবগুলো বন্ধ করুন" -#: ../pidgin/gtkconv.c:8764 msgid "Close all tabs" msgstr "সকল ট্যাব বন্ধ করুন" -#: ../pidgin/gtkconv.c:8772 msgid "Detach this tab" msgstr "এই ট্যাবটি আলাদা করুন" -#: ../pidgin/gtkconv.c:8778 msgid "Close this tab" msgstr "এই ট্যাবটি বন্ধ করুন" -#: ../pidgin/gtkconv.c:9300 msgid "Close conversation" msgstr "কথোপকথন বন্ধ করুন" -#: ../pidgin/gtkconv.c:9904 msgid "Last created window" msgstr "সর্বশেষ তৈরিকৃত উইন্ডো" -#: ../pidgin/gtkconv.c:9906 msgid "Separate IM and Chat windows" msgstr "তাৎক্ষণিক বার্তা ও আড্ডার উইন্ডো পৃথক করুন" -#: ../pidgin/gtkconv.c:9908 ../pidgin/gtkprefs.c:1573 msgid "New window" msgstr "নতুন উইন্ডো" -#: ../pidgin/gtkconv.c:9910 msgid "By group" msgstr "গ্রুপ অনুসারে" -#: ../pidgin/gtkconv.c:9912 msgid "By account" msgstr "একাউন্ট অনুসারে" -#: ../pidgin/gtkdebug.c:234 msgid "Save Debug Log" msgstr "ডিবাগ কার্যবিবরণী সংরক্ষণ করুন" -#: ../pidgin/gtkdebug.c:582 msgid "Invert" msgstr "উল্টান" -#: ../pidgin/gtkdebug.c:585 msgid "Highlight matches" msgstr "প্রনির্দেশ মিলসমূহ" -#: ../pidgin/gtkdebug.c:652 msgid "_Icon Only" msgstr "শুধুমাত্র আইকন (_I)" -#: ../pidgin/gtkdebug.c:653 msgid "_Text Only" msgstr "শুধুমাত্র পাঠ (_T)" -#: ../pidgin/gtkdebug.c:654 msgid "_Both Icon & Text" msgstr "আইকন ও পাঠ উভয়ই (_B)" -#: ../pidgin/gtkdebug.c:772 msgid "Filter" msgstr "পরিশ্রুতক" -#: ../pidgin/gtkdebug.c:791 msgid "Right click for more options." msgstr "আরও পছন্দের জন্য ডান ক্লিক করুন।" -#: ../pidgin/gtkdebug.c:821 msgid "Level " msgstr "স্তর" # tithi -#: ../pidgin/gtkdebug.c:822 ../pidgin/gtkdebug.c:828 msgid "Select the debug filter level." msgstr "ডিবাগ পরিশ্রুতক স্তর নির্বাচন করুন।" -#: ../pidgin/gtkdebug.c:830 msgid "All" msgstr "সকল" -#: ../pidgin/gtkdebug.c:831 msgid "Misc" msgstr "অন্যান্য" -#: ../pidgin/gtkdebug.c:833 msgid "Warning" msgstr "সতর্কতা" -#: ../pidgin/gtkdebug.c:834 msgid "Error " msgstr "ত্রুটি" -#: ../pidgin/gtkdebug.c:835 msgid "Fatal Error" msgstr "মারাত্মক ত্রুটি" # tithi -#: ../pidgin/gtkdialogs.c:75 msgid "bug master" msgstr "বাগ মাস্টার" -#: ../pidgin/gtkdialogs.c:77 msgid "artist" msgstr "শিল্পী" # tithi #. feel free to not translate this -#: ../pidgin/gtkdialogs.c:80 msgid "Ka-Hing Cheung" msgstr "কা-হিং চিউং" -#: ../pidgin/gtkdialogs.c:93 msgid "support" msgstr "সমর্থন করুন" -#: ../pidgin/gtkdialogs.c:95 ../pidgin/gtkdialogs.c:118 msgid "webmaster" msgstr "ওয়েবমাস্টার" # tithi -#: ../pidgin/gtkdialogs.c:105 msgid "Senior Contributor/QA" msgstr "সিনিয়র অংশগ্রহণকারী/QA" -#: ../pidgin/gtkdialogs.c:114 msgid "win32 port" msgstr "উইন৩২ পোর্ট" -#: ../pidgin/gtkdialogs.c:115 ../pidgin/gtkdialogs.c:116 msgid "maintainer" msgstr "রক্ষণাবেক্ষক" -#: ../pidgin/gtkdialogs.c:117 msgid "libfaim maintainer" msgstr "libfaim রক্ষণাবেক্ষক" #. If "lazy bum" translates literally into a serious insult, use something else or omit it. -#: ../pidgin/gtkdialogs.c:120 msgid "hacker and designated driver [lazy bum]" msgstr "হ্যাকার ও নির্দেশিত ড্রাইভার [অকর্মা]" -#: ../pidgin/gtkdialogs.c:121 msgid "support/QA" msgstr "সমর্থন/QA" # tithi -#: ../pidgin/gtkdialogs.c:122 msgid "XMPP" msgstr "XMPP" -#: ../pidgin/gtkdialogs.c:123 msgid "original author" msgstr "মূল লেখক" -#: ../pidgin/gtkdialogs.c:125 msgid "lead developer" msgstr "প্রধান ডেভেলপার" # tithi -#: ../pidgin/gtkdialogs.c:141 ../pidgin/gtkdialogs.c:142 msgid "Afrikaans" msgstr "আফ্রিকানরা" -#: ../pidgin/gtkdialogs.c:143 ../pidgin/gtkdialogs.c:241 msgid "Arabic" msgstr "এরাবিক" # tithi -#: ../pidgin/gtkdialogs.c:144 msgid "Belarusian Latin" msgstr "বেলারুশিয়ান ল্যাটিন" -#: ../pidgin/gtkdialogs.c:145 ../pidgin/gtkdialogs.c:146 -#: ../pidgin/gtkdialogs.c:242 msgid "Bulgarian" msgstr "বুলগেরীয়" -#: ../pidgin/gtkdialogs.c:147 ../pidgin/gtkdialogs.c:148 -#: ../pidgin/gtkdialogs.c:149 ../pidgin/gtkdialogs.c:150 -#: ../pidgin/gtkdialogs.c:151 msgid "Bengali" msgstr "বাংলা" -#: ../pidgin/gtkdialogs.c:152 msgid "Bosnian" msgstr "বসনীয়" -#: ../pidgin/gtkdialogs.c:153 ../pidgin/gtkdialogs.c:243 -#: ../pidgin/gtkdialogs.c:244 msgid "Catalan" msgstr "ক্যাটালান" # tithi -#: ../pidgin/gtkdialogs.c:154 ../pidgin/gtkdialogs.c:155 msgid "Valencian-Catalan" msgstr "ভ্যালেনসিয়-ক্যাটালান" -#: ../pidgin/gtkdialogs.c:156 ../pidgin/gtkdialogs.c:245 -#: ../pidgin/gtkdialogs.c:246 msgid "Czech" msgstr "চেক" -#: ../pidgin/gtkdialogs.c:157 ../pidgin/gtkdialogs.c:158 msgid "Danish" msgstr "ড্যানিশ" -#: ../pidgin/gtkdialogs.c:159 ../pidgin/gtkdialogs.c:160 -#: ../pidgin/gtkdialogs.c:247 msgid "German" msgstr "জার্মান" # tithi -#: ../pidgin/gtkdialogs.c:161 ../pidgin/gtkdialogs.c:162 -#: ../pidgin/gtkdialogs.c:163 msgid "Dzongkha" msgstr "জংখা" -#: ../pidgin/gtkdialogs.c:164 ../pidgin/gtkdialogs.c:165 msgid "Greek" msgstr "গ্রীক" -#: ../pidgin/gtkdialogs.c:166 msgid "Australian English" msgstr "অষ্ট্রেলীয় ইংরেজী" -#: ../pidgin/gtkdialogs.c:167 msgid "Canadian English" msgstr "কানাডীয় ইংরেজী" -#: ../pidgin/gtkdialogs.c:168 msgid "British English" msgstr "ব্রিটিশ ইংরেজী" # tithi -#: ../pidgin/gtkdialogs.c:169 msgid "Esperanto" msgstr "এসপারেনটো" -#: ../pidgin/gtkdialogs.c:170 ../pidgin/gtkdialogs.c:248 -#: ../pidgin/gtkdialogs.c:249 ../pidgin/gtkdialogs.c:250 -#: ../pidgin/gtkdialogs.c:251 msgid "Spanish" msgstr "স্পেনিশ" -#: ../pidgin/gtkdialogs.c:171 msgid "Estonian" msgstr "এসতোনীয়" # tithi -#: ../pidgin/gtkdialogs.c:172 ../pidgin/gtkdialogs.c:173 msgid "Euskera(Basque)" msgstr "ইউসকেরা(বাসকু)" -#: ../pidgin/gtkdialogs.c:174 ../pidgin/gtkdialogs.c:175 -#: ../pidgin/gtkdialogs.c:176 msgid "Persian" msgstr "পার্সিয" -#: ../pidgin/gtkdialogs.c:177 ../pidgin/gtkdialogs.c:252 -#: ../pidgin/gtkdialogs.c:253 msgid "Finnish" msgstr "ফীনিশ" -#: ../pidgin/gtkdialogs.c:178 ../pidgin/gtkdialogs.c:254 -#: ../pidgin/gtkdialogs.c:255 ../pidgin/gtkdialogs.c:256 -#: ../pidgin/gtkdialogs.c:257 msgid "French" msgstr "ফরাসী" -#: ../pidgin/gtkdialogs.c:179 msgid "Irish" msgstr "আইরিশ" # fix me tithi -#: ../pidgin/gtkdialogs.c:180 ../pidgin/gtkdialogs.c:181 -#: ../pidgin/gtkdialogs.c:258 msgid "Galician" msgstr "গ্যালিশিয়" -#: ../pidgin/gtkdialogs.c:182 ../pidgin/gtkdialogs.c:183 msgid "Gujarati" msgstr "গুজরাটি" # tithi -#: ../pidgin/gtkdialogs.c:183 msgid "Gujarati Language Team" msgstr "গুজরাটি ভাষার দল" -#: ../pidgin/gtkdialogs.c:184 ../pidgin/gtkdialogs.c:259 msgid "Hebrew" msgstr "হিব্রু" -#: ../pidgin/gtkdialogs.c:185 msgid "Hindi" msgstr "হিন্দি" -#: ../pidgin/gtkdialogs.c:186 ../pidgin/gtkdialogs.c:260 msgid "Hungarian" msgstr "হাঙ্গেরীয়" -#: ../pidgin/gtkdialogs.c:187 msgid "Indonesian" msgstr "ইন্ডোনেশিয়" -#: ../pidgin/gtkdialogs.c:188 ../pidgin/gtkdialogs.c:261 msgid "Italian" msgstr "ইটালিয়" -#: ../pidgin/gtkdialogs.c:189 ../pidgin/gtkdialogs.c:262 -#: ../pidgin/gtkdialogs.c:263 ../pidgin/gtkdialogs.c:264 msgid "Japanese" msgstr "জাপানী" -#: ../pidgin/gtkdialogs.c:190 ../pidgin/gtkdialogs.c:265 msgid "Georgian" msgstr "জর্জীয়" -#: ../pidgin/gtkdialogs.c:190 msgid "Ubuntu Georgian Translators" msgstr "উবান্টুর জর্জিয়ান অনুবাদকবৃন্দ" # fix me tithi -#: ../pidgin/gtkdialogs.c:191 msgid "Kannada" msgstr "কান্নাডা" # tithi -#: ../pidgin/gtkdialogs.c:191 msgid "Kannada Translation team" msgstr "কান্নাডা ভাষান্তর দল" -#: ../pidgin/gtkdialogs.c:192 ../pidgin/gtkdialogs.c:266 -#: ../pidgin/gtkdialogs.c:267 msgid "Korean" msgstr "কোরিয়" -#: ../pidgin/gtkdialogs.c:193 ../pidgin/gtkdialogs.c:194 -#: ../pidgin/gtkdialogs.c:195 msgid "Kurdish" msgstr "কুর্দিশ" # tithi -#: ../pidgin/gtkdialogs.c:196 msgid "Lao" msgstr "লাও" -#: ../pidgin/gtkdialogs.c:197 ../pidgin/gtkdialogs.c:268 -#: ../pidgin/gtkdialogs.c:269 msgid "Lithuanian" msgstr "লিথুনীয়" -#: ../pidgin/gtkdialogs.c:198 ../pidgin/gtkdialogs.c:199 -#: ../pidgin/gtkdialogs.c:200 ../pidgin/gtkdialogs.c:270 msgid "Macedonian" msgstr "ম্যাসেডনিয়" +#, fuzzy +msgid "Mongolian" +msgstr "ম্যাসেডনিয়" + # fix me tithi -#: ../pidgin/gtkdialogs.c:202 ../pidgin/gtkdialogs.c:271 -#: ../pidgin/gtkdialogs.c:272 ../pidgin/gtkdialogs.c:273 msgid "Bokmål Norwegian" msgstr "বোকমাল নরওয়েয়ান" -#: ../pidgin/gtkdialogs.c:203 msgid "Nepali" msgstr "নেপালি" -#: ../pidgin/gtkdialogs.c:204 msgid "Dutch, Flemish" msgstr "ওলন্দাজ, ফ্লেমিশ" # fix me tithi -#: ../pidgin/gtkdialogs.c:205 msgid "Norwegian Nynorsk" msgstr "নরওয়েয়ান নাইনোরকস" # fix-me tithi -#: ../pidgin/gtkdialogs.c:206 msgid "Occitan" msgstr "অকেশান" # tithi -#: ../pidgin/gtkdialogs.c:207 msgid "Punjabi" msgstr "পাঞ্জাবী" -#: ../pidgin/gtkdialogs.c:208 ../pidgin/gtkdialogs.c:274 -#: ../pidgin/gtkdialogs.c:275 ../pidgin/gtkdialogs.c:276 -#: ../pidgin/gtkdialogs.c:277 msgid "Polish" msgstr "পোলিশ" -#: ../pidgin/gtkdialogs.c:209 msgid "Portuguese" msgstr "পর্তুগীজ" -#: ../pidgin/gtkdialogs.c:210 ../pidgin/gtkdialogs.c:278 msgid "Portuguese-Brazil" msgstr "পর্তুগীজ-ব্রাজিল" -#: ../pidgin/gtkdialogs.c:211 msgid "Pashto" msgstr "পাশতু" -#: ../pidgin/gtkdialogs.c:212 msgid "Romanian" msgstr "রুমানীয়" -#: ../pidgin/gtkdialogs.c:213 ../pidgin/gtkdialogs.c:279 -#: ../pidgin/gtkdialogs.c:280 ../pidgin/gtkdialogs.c:281 msgid "Russian" msgstr "রুশ" -#: ../pidgin/gtkdialogs.c:214 ../pidgin/gtkdialogs.c:215 -#: ../pidgin/gtkdialogs.c:282 ../pidgin/gtkdialogs.c:283 -#: ../pidgin/gtkdialogs.c:284 msgid "Slovak" msgstr "স্লোভাক" -#: ../pidgin/gtkdialogs.c:216 ../pidgin/gtkdialogs.c:285 msgid "Slovenian" msgstr "স্লোভেনিয়" -#: ../pidgin/gtkdialogs.c:217 msgid "Albanian" msgstr "আলবেনীয়" -#: ../pidgin/gtkdialogs.c:218 ../pidgin/gtkdialogs.c:219 -#: ../pidgin/gtkdialogs.c:286 ../pidgin/gtkdialogs.c:287 msgid "Serbian" msgstr "সার্বিয়" -#: ../pidgin/gtkdialogs.c:220 ../pidgin/gtkdialogs.c:221 msgid "Sinhala" msgstr "সিনহালা" -#: ../pidgin/gtkdialogs.c:222 ../pidgin/gtkdialogs.c:288 -#: ../pidgin/gtkdialogs.c:289 msgid "Swedish" msgstr "সুইডিশ" -#: ../pidgin/gtkdialogs.c:223 msgid "Tamil" msgstr "তামিল" -#: ../pidgin/gtkdialogs.c:224 msgid "Telugu" msgstr "তেলেগু" -#: ../pidgin/gtkdialogs.c:225 msgid "Thai" msgstr "থাই" -#: ../pidgin/gtkdialogs.c:226 ../pidgin/gtkdialogs.c:290 msgid "Turkish" msgstr "টার্কিশ" # tithi -#: ../pidgin/gtkdialogs.c:227 msgid "Urdu" msgstr "ঊর্দূ" -#: ../pidgin/gtkdialogs.c:228 msgid "Vietnamese" msgstr "ভিয়েতনামি" -#: ../pidgin/gtkdialogs.c:228 msgid "T.M.Thanh and the Gnome-Vi Team" msgstr "টি.এম.থানহ এবং নৌম-ভিআইর দল" -#: ../pidgin/gtkdialogs.c:229 ../pidgin/gtkdialogs.c:291 msgid "Simplified Chinese" msgstr "সহজবোধ্য চীনা" # tithi -#: ../pidgin/gtkdialogs.c:230 ../pidgin/gtkdialogs.c:231 -#: ../pidgin/gtkdialogs.c:232 msgid "Hong Kong Chinese" msgstr "হংকং চীনা" -#: ../pidgin/gtkdialogs.c:233 ../pidgin/gtkdialogs.c:234 -#: ../pidgin/gtkdialogs.c:292 msgid "Traditional Chinese" msgstr "ঐতিহ্যবাহী চীনা" -#: ../pidgin/gtkdialogs.c:240 msgid "Amharic" msgstr "আমহারিক" -#: ../pidgin/gtkdialogs.c:410 #, c-format msgid "About %s" msgstr "%s সম্পর্কে" # fix me tithi -#: ../pidgin/gtkdialogs.c:446 #, c-format msgid "" "%s is a graphical modular messaging client based on libpurple which is " @@ -17025,54 +12342,59 @@ msgstr "" "দ্বারা স্বত্তাধিকার সংরক্ষিত। প্রদায়কগনের সম্পূর্ণ তালিকার জন্য 'স্বত্তাধিকার সংরক্ষিত' " "ফাইল দেখুন। এই প্রোগ্রামটির জন্য আমরা কোনো নিশ্চয়তা প্রদান করি না।<BR><BR>" +#, c-format +msgid "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" +msgstr "" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" +msgstr "" + # fix me -#: ../pidgin/gtkdialogs.c:464 -msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" +#, fuzzy, c-format +msgid "" +"<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgstr "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" + +# fix me +#, fuzzy, c-format +msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" msgstr "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" -#: ../pidgin/gtkdialogs.c:469 msgid "Current Developers" msgstr "বর্তমান ডেভেলপারগণ" -#: ../pidgin/gtkdialogs.c:475 msgid "Crazy Patch Writers" msgstr "ক্ষিপ্ত প্যাচ লেখকগণ" -#: ../pidgin/gtkdialogs.c:481 msgid "Retired Developers" msgstr "অবসরপ্রাপ্ত ডেভেলপার" -#: ../pidgin/gtkdialogs.c:487 msgid "Retired Crazy Patch Writers" msgstr "অবসরপ্রাপ্ত ক্ষিপ্ত প্যাচ লেখকগণ" -#: ../pidgin/gtkdialogs.c:493 msgid "Current Translators" msgstr "বর্তমান অনুবাদকবৃন্দ" -#: ../pidgin/gtkdialogs.c:499 msgid "Past Translators" msgstr "পুরনো অনুবাদকবৃন্দ" -#: ../pidgin/gtkdialogs.c:503 msgid "Debugging Information" msgstr "ডিবাগকরণ তথ্য" -#: ../pidgin/gtkdialogs.c:719 ../pidgin/gtkdialogs.c:858 -#: ../pidgin/gtkdialogs.c:939 msgid "_Name" msgstr "নাম (_N)" -#: ../pidgin/gtkdialogs.c:724 ../pidgin/gtkdialogs.c:863 -#: ../pidgin/gtkdialogs.c:944 msgid "_Account" msgstr "একাউন্ট (_A)" -#: ../pidgin/gtkdialogs.c:871 msgid "Get User Info" msgstr "ব্যবহারকারীর তথ্য গ্রহণ করুন" -#: ../pidgin/gtkdialogs.c:873 msgid "" "Please enter the username or alias of the person whose info you would like " "to view." @@ -17080,36 +12402,28 @@ msgstr "" "অনুগ্রহ করে আপনি যে ব্যক্তির তথ্য প্রদর্শন করতে চান তার ব্যবহারকারী-নাম বা উপনাম " "প্রবেশ করান।" -#: ../pidgin/gtkdialogs.c:963 msgid "View User Log" msgstr "ব্যবহারকারীর কার্যবিবরণী প্রদর্শন করুন" -#: ../pidgin/gtkdialogs.c:985 msgid "Alias Contact" msgstr "উপনামের যোগাযোগ" -#: ../pidgin/gtkdialogs.c:986 msgid "Enter an alias for this contact." msgstr "এই যোগাযোগের জন্য উপনাম প্রবেশ করান।" -#: ../pidgin/gtkdialogs.c:1008 #, c-format msgid "Enter an alias for %s." msgstr "%s-এর জন্য উপনাম প্রবেশ করান।" -#: ../pidgin/gtkdialogs.c:1010 msgid "Alias Buddy" msgstr "উপনাম বন্ধু" -#: ../pidgin/gtkdialogs.c:1031 msgid "Alias Chat" msgstr "উপনামের আড্ডা" -#: ../pidgin/gtkdialogs.c:1032 msgid "Enter an alias for this chat." msgstr "এই আড্ডার জন্য একটি উপনাম প্রবেশ করান।" -#: ../pidgin/gtkdialogs.c:1071 #, c-format msgid "" "You are about to remove the contact containing %s and %d other buddy from " @@ -17124,30 +12438,24 @@ msgstr[1] "" "আপনি আপনার বন্ধু তালিকা থেকে অন্য %s এবং %d বন্ধুগণের ধারনকারী যোগাযোগ অপসারণ " "করতে পারেন। আপনি কি অব্যাহত রাখতে চান?" -#: ../pidgin/gtkdialogs.c:1079 msgid "Remove Contact" msgstr "যোগাযোগ অপসারণ করুন" -#: ../pidgin/gtkdialogs.c:1082 msgid "_Remove Contact" msgstr "যোগাযোগ অপসারণ করুন (_R)" -#: ../pidgin/gtkdialogs.c:1113 #, c-format msgid "" "You are about to merge the group called %s into the group called %s. Do you " "want to continue?" msgstr "আপনি %1s নামের গ্রুপকে %2s গ্রুপে একত্রিত করছেন। আপনি কি অব্যাহত রাখতে চান?" -#: ../pidgin/gtkdialogs.c:1120 msgid "Merge Groups" msgstr "গ্রুপসমুহ একত্রিত করুন" -#: ../pidgin/gtkdialogs.c:1123 msgid "_Merge Groups" msgstr "গ্রুপসমুহ একত্রিত করুন (_M)" -#: ../pidgin/gtkdialogs.c:1173 #, c-format msgid "" "You are about to remove the group %s and all its members from your buddy " @@ -17156,15 +12464,12 @@ msgstr "" "আপনি %s গ্রুপ ও এর সকল সদস্যকে আপনার বন্ধু তালিকা থেকে অপসারণ করতে পারেন। আপনি কি " "অব্যাহত রাখতে চান?" -#: ../pidgin/gtkdialogs.c:1176 msgid "Remove Group" msgstr "গ্রুপ অপসারণ করুন" -#: ../pidgin/gtkdialogs.c:1179 msgid "_Remove Group" msgstr "গ্রুপ অপসারণ করুন (_R)" -#: ../pidgin/gtkdialogs.c:1212 #, c-format msgid "" "You are about to remove %s from your buddy list. Do you want to continue?" @@ -17172,15 +12477,12 @@ msgstr "" "আপনি %s-কে আপনার বন্ধু তালিকা থেকে অপসারণ করতে পারেন। আপনি কি অব্যাহত রাখতে " "চান?" -#: ../pidgin/gtkdialogs.c:1215 msgid "Remove Buddy" msgstr "বন্ধু অপসারণ করুন" -#: ../pidgin/gtkdialogs.c:1218 msgid "_Remove Buddy" msgstr "বন্ধু অপসাণ করুন (_R)" -#: ../pidgin/gtkdialogs.c:1239 #, c-format msgid "" "You are about to remove the chat %s from your buddy list. Do you want to " @@ -17188,266 +12490,204 @@ msgid "" msgstr "" "আপনি আপনার বন্ধু তালিকা হতে %s অপসারণ করতে পারেন। আপনি কি অব্যাহত রাখতে চান?" -#: ../pidgin/gtkdialogs.c:1242 msgid "Remove Chat" msgstr "আড্ডা অপসারণ করুন" -#: ../pidgin/gtkdialogs.c:1245 msgid "_Remove Chat" msgstr "আড্ডা অপসারণ করুন (_R)" -#: ../pidgin/gtkdocklet.c:152 msgid "Right-click for more unread messages...\n" msgstr "আরও অপঠিত বার্তার জন্য ডান ক্লিক করুন...\n" -#: ../pidgin/gtkdocklet.c:533 msgid "_Change Status" msgstr "অবস্থা পরিবর্তন করুন (_C)" -#: ../pidgin/gtkdocklet.c:681 msgid "Show Buddy _List" msgstr "বন্ধু তালিকা প্রদর্শন করুন (_L)" -#: ../pidgin/gtkdocklet.c:686 msgid "_Unread Messages" msgstr "অপঠিত বার্তাসমূহ (_U)" -#: ../pidgin/gtkdocklet.c:707 msgid "New _Message..." msgstr "নতুন বার্তা...(_M)" -#: ../pidgin/gtkdocklet.c:721 msgid "_Accounts" msgstr "একাউন্টগুলো (_A)" -#: ../pidgin/gtkdocklet.c:722 msgid "Plu_gins" msgstr "প্লাগইন (_g)" -#: ../pidgin/gtkdocklet.c:723 msgid "Pr_eferences" msgstr "প্রাধিকারসমূহ (_e)" -#: ../pidgin/gtkdocklet.c:727 msgid "Mute _Sounds" msgstr "শব্দ বন্ধ রাখুন (_S)" -#: ../pidgin/gtkdocklet.c:734 msgid "_Blink on New Message" msgstr "নতুন বার্তায় পিট পিট করুন (_B)" -#: ../pidgin/gtkdocklet.c:744 msgid "_Quit" msgstr "প্রস্থান করুন (_Q)" -#: ../pidgin/gtkft.c:154 msgid "Not started" msgstr "আরম্ভ হয়নি" -#: ../pidgin/gtkft.c:276 msgid "<b>Receiving As:</b>" msgstr "<b>যেভাবে গ্রহণ করছে:</b>" -#: ../pidgin/gtkft.c:278 msgid "<b>Receiving From:</b>" msgstr "<b>যার থেকে গ্রহণ করছে:</b>" -#: ../pidgin/gtkft.c:282 msgid "<b>Sending To:</b>" msgstr "<b>যাকে পাঠানো হচ্ছে:</b>" -#: ../pidgin/gtkft.c:284 msgid "<b>Sending As:</b>" msgstr "<b>যেভাবে পাঠানো হচ্ছে:</b>" -#: ../pidgin/gtkft.c:500 msgid "There is no application configured to open this type of file." msgstr "এই ধরনের ফাইল খোলার জন্য কোনো প্রয়োগন বিন্যাসিত নেই।" -#: ../pidgin/gtkft.c:505 msgid "An error occurred while opening the file." msgstr "ফাইলটি খোলার সময়ে একটি ত্রুটি ঘটেছে।" -#: ../pidgin/gtkft.c:542 #, c-format msgid "Error launching %s: %s" msgstr "%s শুরুকরণে ত্রুটি: %s" -#: ../pidgin/gtkft.c:551 #, c-format msgid "Error running %s" msgstr "%s চালুকরণে ত্রুটি" -#: ../pidgin/gtkft.c:552 #, c-format msgid "Process returned error code %d" msgstr "প্রক্রিয়াটি %d ত্রুটি কোড ফেরত পাঠিয়েছে" -#: ../pidgin/gtkft.c:699 msgid "Filename:" msgstr "ফাইলের-নাম:" -#: ../pidgin/gtkft.c:700 msgid "Local File:" msgstr "স্থানীয় ফাইল:" -#: ../pidgin/gtkft.c:702 msgid "Speed:" msgstr "গতি:" -#: ../pidgin/gtkft.c:703 msgid "Time Elapsed:" msgstr "অতিবাহিত সময়:" -#: ../pidgin/gtkft.c:704 msgid "Time Remaining:" msgstr "অবশিষ্ট সময়:" -#: ../pidgin/gtkft.c:783 msgid "Close this window when all transfers _finish" msgstr "সকল স্থানান্তর শেষ হলে এই উইন্ডোটি বন্ধ করুন (_f)" -#: ../pidgin/gtkft.c:793 msgid "C_lear finished transfers" msgstr "সমাপ্ত স্থানান্তর পরিস্কার করুন (_l)" #. "Download Details" arrow -#: ../pidgin/gtkft.c:802 msgid "File transfer _details" msgstr "ফাইল স্থানান্তরের বিবরণ (_d)" #. Pause button -#: ../pidgin/gtkft.c:820 ../pidgin/pidginstock.c:97 msgid "_Pause" msgstr "বিরতি (_P)" #. Resume button -#: ../pidgin/gtkft.c:825 msgid "_Resume" msgstr "পুনরায় শুরু করুন (_R)" -#: ../pidgin/gtkimhtml.c:905 msgid "Paste as Plain _Text" msgstr "সরল পাঠ হিসেবে প্রতিলেপন করুন (_T)" -#: ../pidgin/gtkimhtml.c:922 ../pidgin/gtkimhtmltoolbar.c:1325 msgid "_Reset formatting" msgstr "বিন্যাসকরণ পুনঃবিন্যাস করুন (_R)" # tithi -#: ../pidgin/gtkimhtml.c:930 msgid "Disable _smileys in selected text" msgstr "নির্বাচিত পাঠে স্মাইলীগুলো নিষ্ক্রিয় করুন (_s)" -#: ../pidgin/gtkimhtml.c:1490 msgid "Hyperlink color" msgstr "হাইপারলিঙ্কের রং" -#: ../pidgin/gtkimhtml.c:1491 msgid "Color to draw hyperlinks." msgstr "হাইপারলিঙ্ক আঁকার রং।" # fix me -#: ../pidgin/gtkimhtml.c:1494 msgid "Hyperlink visited color" msgstr "হাইপারলিঙ্কের পরিদর্শিত রং" -#: ../pidgin/gtkimhtml.c:1495 msgid "Color to draw hyperlinks after it has been visited (or activated)." msgstr "হাইপারলিঙ্ক পরিদর্শন (বা সক্রিয়) করার পর এটা আকাঁর রং।" -#: ../pidgin/gtkimhtml.c:1498 msgid "Hyperlink prelight color" msgstr "হাইপারলিঙ্ক প্রাক-হালকা রং" -#: ../pidgin/gtkimhtml.c:1499 msgid "Color to draw hyperlinks when mouse is over them." msgstr "হাইপারলিঙ্কের ওপর মাউস থাকাকালীন এটা আকার রং" -#: ../pidgin/gtkimhtml.c:1502 ../pidgin/plugins/pidginrc.c:55 msgid "Sent Message Name Color" msgstr "প্রেরিত বার্তার নামের রং" # tithi -#: ../pidgin/gtkimhtml.c:1503 msgid "Color to draw the name of a message you sent." msgstr "আপনার প্রেরিত বার্তাসমূহের নাম আকার রং।" -#: ../pidgin/gtkimhtml.c:1506 ../pidgin/plugins/pidginrc.c:56 msgid "Received Message Name Color" msgstr "বার্তার নামের রং গ্রহণ করা হয়েছে" # tithi -#: ../pidgin/gtkimhtml.c:1507 msgid "Color to draw the name of a message you received." msgstr "আপনার গৃহীত বার্তাসমূহের নাম আকার রং।" # tithi -#: ../pidgin/gtkimhtml.c:1510 msgid "\"Attention\" Name Color" msgstr "\"মনোযোগ\" রং এর নাম" # tithi -#: ../pidgin/gtkimhtml.c:1511 msgid "Color to draw the name of a message you received containing your name." msgstr "আপনার নাম ধারণকারী যে বার্তাটি আপনি গ্রহণ করেছেন তার নাম আকার রং।" # tithi -#: ../pidgin/gtkimhtml.c:1514 ../pidgin/plugins/pidginrc.c:58 msgid "Action Message Name Color" msgstr "কার্য বার্তা নামের রং" # tithi -#: ../pidgin/gtkimhtml.c:1515 ../pidgin/gtkimhtml.c:1519 -#: ../pidgin/gtkimhtml.c:1523 msgid "Color to draw the name of an action message." msgstr "একটি কর্ম বার্তার নাম আকার রং।" # fix me tithi -#: ../pidgin/gtkimhtml.c:1518 msgid "Action Message Name Color for Whispered Message" msgstr "গোপনীয় বার্তার জন্য কার্য বার্তার নামের রং" # fix- me tithi -#: ../pidgin/gtkimhtml.c:1522 msgid "Whisper Message Name Color" msgstr "গোপনীয় বার্তার নামের রং" -#: ../pidgin/gtkimhtml.c:1532 msgid "Typing notification color" msgstr "প্রজ্ঞাপন রং টাইপ করছে" # tithi -#: ../pidgin/gtkimhtml.c:1533 msgid "The color to use for the typing notification font" msgstr "টাইপকরণ প্রজ্ঞাপন ফন্টের জন্য ব্যবহারের রং" -#: ../pidgin/gtkimhtml.c:1536 msgid "Typing notification font" msgstr "টাইপকরণ প্রজ্ঞাপন ফন্ট" # tithi -#: ../pidgin/gtkimhtml.c:1537 msgid "The font to use for the typing notification" msgstr "টাইপকরণ প্রজ্ঞাপনের জন্য ব্যবহারের ফন্ট4" -#: ../pidgin/gtkimhtml.c:1540 ../pidgin/gtkimhtml.c:1541 msgid "Enable typing notification" msgstr "টাইপকরণ প্রজ্ঞাপন সক্রিয় করুন" -#: ../pidgin/gtkimhtml.c:1777 msgid "_Copy Email Address" msgstr "ই-মেইল ঠিকানা অনুলিপি করুন (_C)" -#: ../pidgin/gtkimhtml.c:1789 msgid "_Open Link in Browser" msgstr "ব্রাউজারে লিঙ্ক খুলুন (_O)" -#: ../pidgin/gtkimhtml.c:1799 msgid "_Copy Link Location" msgstr "লিঙ্ক অবস্থান অনুলিপি করুন (_C)" -#: ../pidgin/gtkimhtml.c:3686 msgid "" "<span size='larger' weight='bold'>Unrecognized file type</span>\n" "\n" @@ -17457,7 +12697,6 @@ msgstr "" "\n" "PNG তে পূর্বনির্ধারিত।" -#: ../pidgin/gtkimhtml.c:3689 msgid "" "Unrecognized file type\n" "\n" @@ -17467,7 +12706,6 @@ msgstr "" "\n" "PNG তে পূর্বনির্ধারিত।।" -#: ../pidgin/gtkimhtml.c:3718 #, c-format msgid "" "<span size='larger' weight='bold'>Error saving image</span>\n" @@ -17478,7 +12716,6 @@ msgstr "" "\n" "%s" -#: ../pidgin/gtkimhtml.c:3721 #, c-format msgid "" "Error saving image\n" @@ -17489,40 +12726,33 @@ msgstr "" "\n" "%s" -#: ../pidgin/gtkimhtml.c:3802 ../pidgin/gtkimhtml.c:3814 msgid "Save Image" msgstr "চিত্র সংরক্ষণ করুন" -#: ../pidgin/gtkimhtml.c:3851 +#, c-format msgid "_Save Image..." msgstr "চিত্র সংরক্ষণ করুন... (_S)" # tithi -#: ../pidgin/gtkimhtml.c:3865 +#, c-format msgid "_Add Custom Smiley..." msgstr "পছন্দসই স্মাইলী যোগ করুন... (_A)" -#: ../pidgin/gtkimhtmltoolbar.c:165 msgid "Select Font" msgstr "ফন্ট নির্বাচন করুন" -#: ../pidgin/gtkimhtmltoolbar.c:245 msgid "Select Text Color" msgstr "পাঠ রং নির্বাচন করুন" -#: ../pidgin/gtkimhtmltoolbar.c:325 msgid "Select Background Color" msgstr "প্রেক্ষাপট রং নির্বাচন করুন" -#: ../pidgin/gtkimhtmltoolbar.c:414 msgid "_URL" msgstr "ইউআরএল (_U)" -#: ../pidgin/gtkimhtmltoolbar.c:422 msgid "_Description" msgstr "বিবরণ (_D)" -#: ../pidgin/gtkimhtmltoolbar.c:425 msgid "" "Please enter the URL and description of the link that you want to insert. " "The description is optional." @@ -17530,29 +12760,23 @@ msgstr "" "অনুগ্রহ করে আপনি যে লিঙ্ক প্রবেশ করাতে চান তার ইউআরএল ও বিবরণ প্রবেশ করান। বিবরণ " "ঐচ্ছিক।" -#: ../pidgin/gtkimhtmltoolbar.c:429 msgid "Please enter the URL of the link that you want to insert." msgstr "অনুগ্রহ করে আপনি যে লিঙ্ক প্রবেশ করাতে চান তার ইউআরএল প্রবেশ করান।" -#: ../pidgin/gtkimhtmltoolbar.c:434 ../pidgin/gtkimhtmltoolbar.c:1232 msgid "Insert Link" msgstr "লিঙ্ক প্রবেশ করান" -#: ../pidgin/gtkimhtmltoolbar.c:438 ../pidgin/gtkimhtmltoolbar.c:1393 msgid "_Insert" msgstr "প্রবেশ করান (_I)" -#: ../pidgin/gtkimhtmltoolbar.c:519 #, c-format msgid "Failed to store image: %s\n" msgstr "চিত্র সংরক্ষণে ব্যর্থ: %s\n" -#: ../pidgin/gtkimhtmltoolbar.c:545 ../pidgin/gtkimhtmltoolbar.c:555 msgid "Insert Image" msgstr "চিত্র প্রবেশ করান" # tithi -#: ../pidgin/gtkimhtmltoolbar.c:684 #, c-format msgid "" "This smiley is disabled because a custom smiley exists for this shortcut:\n" @@ -17561,156 +12785,121 @@ msgstr "" "এই স্মাইলীটি নিষ্ক্রিয় কারণ এই শর্টকাটটির জন্য একটি পছন্দসই স্মাইলী বিদ্যমান:\n" "%s" -#: ../pidgin/gtkimhtmltoolbar.c:815 msgid "Smile!" msgstr "হাসি!" # fix-me tithi -#: ../pidgin/gtkimhtmltoolbar.c:830 msgid "_Manage custom smileys" msgstr "পছন্দসই স্মাইলীগুলো নিয়ন্ত্রণ করুন (_M)" -#: ../pidgin/gtkimhtmltoolbar.c:867 msgid "This theme has no available smileys." msgstr "এই থীমের কোনো স্মাইলি সহজলভ্য নেই।" -#: ../pidgin/gtkimhtmltoolbar.c:973 ../pidgin/gtkimhtmltoolbar.c:1350 msgid "_Font" msgstr "ফন্ট (_F)" -#: ../pidgin/gtkimhtmltoolbar.c:1184 msgid "Group Items" msgstr "গ্রুপের বিষয়োপকরণসমূহ" # tithi -#: ../pidgin/gtkimhtmltoolbar.c:1184 msgid "Ungroup Items" msgstr "গ্রুপহীন বিষয়োপকরণসমূহ" -#: ../pidgin/gtkimhtmltoolbar.c:1218 ../pidgin/plugins/convcolors.c:342 msgid "Bold" msgstr "মোটা" -#: ../pidgin/gtkimhtmltoolbar.c:1219 ../pidgin/plugins/convcolors.c:351 msgid "Italic" msgstr "তীর্যক" -#: ../pidgin/gtkimhtmltoolbar.c:1220 ../pidgin/plugins/convcolors.c:360 msgid "Underline" msgstr "নিম্নরেখা" # tithi -#: ../pidgin/gtkimhtmltoolbar.c:1221 msgid "Strikethrough" msgstr "অবচ্ছেদন রেখা" # tithi -#: ../pidgin/gtkimhtmltoolbar.c:1223 msgid "Increase Font Size" msgstr "ফন্টের আকার বৃদ্ধি করুন" # tithi -#: ../pidgin/gtkimhtmltoolbar.c:1224 msgid "Decrease Font Size" msgstr "ফন্টের আকার হ্রাস করুন" -#: ../pidgin/gtkimhtmltoolbar.c:1226 msgid "Font Face" msgstr "ফন্টের রুপ" -#: ../pidgin/gtkimhtmltoolbar.c:1227 msgid "Background Color" msgstr "প্রেক্ষাপট রং" -#: ../pidgin/gtkimhtmltoolbar.c:1228 msgid "Foreground Color" msgstr "সম্মুখভাগের রং" # tithi -#: ../pidgin/gtkimhtmltoolbar.c:1230 msgid "Reset Formatting" msgstr "বিন্যাসকরণ পুনঃবিন্যাস করুন" -#: ../pidgin/gtkimhtmltoolbar.c:1233 msgid "Insert IM Image" msgstr "আইএম চিত্র প্রবেশ করান" -#: ../pidgin/gtkimhtmltoolbar.c:1234 msgid "Insert Smiley" msgstr "স্মাইলি প্রবেশ করান" -#: ../pidgin/gtkimhtmltoolbar.c:1310 msgid "<b>_Bold</b>" msgstr "<b>মোটা (_B)</b>" -#: ../pidgin/gtkimhtmltoolbar.c:1311 msgid "<i>_Italic</i>" msgstr "<i>তীর্যক (_I)</i>" -#: ../pidgin/gtkimhtmltoolbar.c:1312 msgid "<u>_Underline</u>" msgstr "<u>নিম্নরেখা (_U)</u>" # tithi -#: ../pidgin/gtkimhtmltoolbar.c:1313 msgid "<span strikethrough='true'>Strikethrough</span>" msgstr "<span strikethrough='true'>অবচ্ছেদন রেখা</span>" # fix me -#: ../pidgin/gtkimhtmltoolbar.c:1314 msgid "<span size='larger'>_Larger</span>" msgstr "<span size='larger'>অপেক্ষাকৃত বড় (_L)</span>" -#: ../pidgin/gtkimhtmltoolbar.c:1316 msgid "_Normal" msgstr "স্বাভাবিক (_N)" # tithi -#: ../pidgin/gtkimhtmltoolbar.c:1318 msgid "<span size='smaller'>_Smaller</span>" msgstr "<span size='smaller'>অপেক্ষাকৃত ছোট (_S)</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:1322 msgid "_Font face" msgstr "ফন্টের রুপ (_F)" -#: ../pidgin/gtkimhtmltoolbar.c:1323 msgid "Foreground _color" msgstr "সম্মুখভাগের রং (_c)" -#: ../pidgin/gtkimhtmltoolbar.c:1324 msgid "Bac_kground color" msgstr "প্রেক্ষাপটের রং (_k)" -#: ../pidgin/gtkimhtmltoolbar.c:1401 msgid "_Image" msgstr "চিত্র (_I)" -#: ../pidgin/gtkimhtmltoolbar.c:1407 msgid "_Link" msgstr "লিঙ্ক (_L)" -#: ../pidgin/gtkimhtmltoolbar.c:1413 msgid "_Horizontal rule" msgstr "অনুভূমিক নিয়ম (_H)" -#: ../pidgin/gtkimhtmltoolbar.c:1435 msgid "_Smile!" msgstr "হাসি! (_S)" -#: ../pidgin/gtklog.c:245 msgid "Log Deletion Failed" msgstr "কার্যবিবরণী শনাক্তকরণ ব্যর্থ হয়েছে" # tithi -#: ../pidgin/gtklog.c:246 msgid "Check permissions and try again." msgstr "অনুমতি যাচাই করুন এবং আবার চেষ্টা করুন।" -#: ../pidgin/gtklog.c:292 #, c-format msgid "" "Are you sure you want to permanently delete the log of the conversation with " @@ -17719,7 +12908,6 @@ msgstr "" "আপনি কি নিশ্চিত আপনি স্থায়ীভাবে %2s তে শুরু হওয়া কথোপকথনের কার্যবিবরণী %1s সহ মুছে " "ফেলতে চান?" -#: ../pidgin/gtklog.c:303 #, c-format msgid "" "Are you sure you want to permanently delete the log of the conversation in %" @@ -17728,7 +12916,6 @@ msgstr "" "আপনি কি নিশ্চিত আপনি স্থায়ীভাবে %2s তে শুরু হওয়া কথোপকথনের কার্যবিবরণী %1s এ মুছে " "ফেলতে চান?" -#: ../pidgin/gtklog.c:308 #, c-format msgid "" "Are you sure you want to permanently delete the system log which started at %" @@ -17736,38 +12923,31 @@ msgid "" msgstr "" "আপনি কি নিশ্চিত আপনি স্থায়ীভাবে %1s তে শুরু হওয়া সিস্টেম কার্যবিবরণী মুছে ফেলতে চান?" -#: ../pidgin/gtklog.c:323 msgid "Delete Log?" msgstr "কার্যবিবরণী কি মুছতে চান?" -#: ../pidgin/gtklog.c:334 msgid "Delete Log..." msgstr "কার্যবিবরণী মুছুন..." # fix me -#: ../pidgin/gtklog.c:453 #, c-format msgid "<span size='larger' weight='bold'>Conversation in %s on %s</span>" msgstr "<span size='larger' weight='bold'>%s এর উপর %s এ কথোপকথন</span>" # fix me -#: ../pidgin/gtklog.c:456 #, c-format msgid "<span size='larger' weight='bold'>Conversation with %s on %s</span>" msgstr "<span size='larger' weight='bold'>%s এর উপর %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 "কার্যবিবরণীর ফোল্ডার ব্রাউজ করুন (_B)" -#: ../pidgin/gtkmain.c:384 #, c-format msgid "%s %s. Try `%s -h' for more information.\n" msgstr "%1s %2s। আরও তথ্যের জন্য `%3s -h' এ চেষ্টা করুন।\n" # fix me -#: ../pidgin/gtkmain.c:387 #, c-format msgid "" "%s %s\n" @@ -17800,7 +12980,6 @@ msgstr "" " -v, --version বর্তমান সংস্করণ প্রদর্শন করুন এবং ত্যাগ করুন\n" # fix me -#: ../pidgin/gtkmain.c:400 #, c-format msgid "" "%s %s\n" @@ -17830,7 +13009,6 @@ msgstr "" " এটা ব্যতিত শুধুমাত্র প্রথম একাউন্ট সক্রিয় হবে)। \n" " -v, --version বর্তমান সংস্করণ প্রদর্শন করুন এবং ত্যাগ করুন\n" -#: ../pidgin/gtkmain.c:530 #, c-format msgid "" "%s %s has segfaulted and attempted to dump a core file.\n" @@ -17859,48 +13037,42 @@ msgstr "" #. Translators may want to transliterate the name. #. It is not to be translated. -#: ../pidgin/gtkmain.c:720 ../pidgin/pidgin.h:51 msgid "Pidgin" msgstr "পিজিন" -#: ../pidgin/gtknotify.c:362 +#, c-format +msgid "Exiting because another libpurple client is already running.\n" +msgstr "" + msgid "Open All Messages" msgstr "সকল বার্তা খুলুন" -#: ../pidgin/gtknotify.c:420 msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>" msgstr "<span weight=\"bold\" size=\"larger\">আপনার মেইল আছে!</span>" -#: ../pidgin/gtknotify.c:572 #, c-format msgid "%s has %d new message." msgid_plural "%s has %d new messages." msgstr[0] "%s-এর %dটি নতুন বার্তা আছে।" msgstr[1] "%s-এর %dগুলো নতুন বার্তা আছে।" -#: ../pidgin/gtknotify.c:601 #, c-format msgid "<b>%d new email.</b>" msgid_plural "<b>%d new emails.</b>" msgstr[0] " <b>%d টি নতুন ই-মেইল।</b>" msgstr[1] "<b>%dগুলো নতুন ই-মেইল।</b>" -#: ../pidgin/gtknotify.c:1032 #, c-format msgid "The browser command \"%s\" is invalid." msgstr "ব্রাউজার নির্দেশ \"%s\" অবৈধ।" -#: ../pidgin/gtknotify.c:1034 ../pidgin/gtknotify.c:1046 -#: ../pidgin/gtknotify.c:1059 ../pidgin/gtknotify.c:1196 msgid "Unable to open URL" msgstr "ইউআরএল খুলতে সমর্থ নয়" -#: ../pidgin/gtknotify.c:1044 ../pidgin/gtknotify.c:1057 #, c-format msgid "Error launching \"%s\": %s" msgstr "\"%1s\" শুরুকরণে ত্রুটি: %2s" -#: ../pidgin/gtknotify.c:1197 msgid "" "The 'Manual' browser command has been chosen, but no command has been set." msgstr "" @@ -17908,25 +13080,20 @@ msgstr "" "হয়নি।" # tithi -#: ../pidgin/gtkplugin.c:278 msgid "The following plugins will be unloaded." msgstr "নিম্নোক্ত প্লাগইনগুলো লোড মুক্ত করা হবে।" # tithi -#: ../pidgin/gtkplugin.c:297 msgid "Multiple plugins will be unloaded." msgstr "বহুবিধ প্লাগইনগুলো লোড মুক্ত করা হবে।" -#: ../pidgin/gtkplugin.c:301 msgid "Unload Plugins" msgstr "প্লাগইন লোড মুক্ত করুন" -#: ../pidgin/gtkplugin.c:318 msgid "Could not unload plugin" msgstr "প্লাগইন লোড মুক্ত করা যায়নি" # tithi -#: ../pidgin/gtkplugin.c:319 msgid "" "The plugin could not be unloaded now, but will be disabled at the next " "startup." @@ -17934,7 +13101,6 @@ msgstr "" "এই প্লাগইনটি এখন লোড মুক্ত করা যাচ্ছে না, কিন্তু পরবর্তী শুরুতে নিষ্ক্রিয় করা হবে।" # tithi -#: ../pidgin/gtkplugin.c:456 #, c-format msgid "" "<span foreground=\"red\" weight=\"bold\">Error: %s\n" @@ -17943,139 +13109,106 @@ msgstr "" "<span foreground=\"red\" weight=\"bold\">ত্রুটি: %s\n" "হালনাগাদের জন্য প্লাগইন ওয়েবসাইট পরীক্ষা করুন।</span>" -#: ../pidgin/gtkplugin.c:585 msgid "Author" msgstr "লেখক" -#: ../pidgin/gtkplugin.c:663 msgid "<b>Written by:</b>" msgstr "<b>লেখক:</b>" -#: ../pidgin/gtkplugin.c:687 msgid "<b>Web site:</b>" msgstr "<b>ওয়েব সাইট:</b>" -#: ../pidgin/gtkplugin.c:696 msgid "<b>Filename:</b>" msgstr "<b>ফাইলনাম:</b>" -#: ../pidgin/gtkplugin.c:724 msgid "Configure Pl_ugin" msgstr "প্লাগইন পছন্দসই বিন্যাস করুন (_u)" -#: ../pidgin/gtkplugin.c:792 msgid "<b>Plugin Details</b>" msgstr "<b>প্লাগইনের বর্ণনা</b>" -#: ../pidgin/gtkpounce.c:158 msgid "Select a file" msgstr "একটি ফাইল নির্বাচন করুন" #. Create the "Pounce on Whom" frame. -#: ../pidgin/gtkpounce.c:553 msgid "Pounce on Whom" msgstr "কাকে পাউন্স করেন" -#: ../pidgin/gtkpounce.c:580 msgid "_Buddy name:" msgstr "বন্ধুর নাম (_B):" -#: ../pidgin/gtkpounce.c:614 msgid "Si_gns on" msgstr "সাইন অন (_g)" -#: ../pidgin/gtkpounce.c:616 msgid "Signs o_ff" msgstr "সাইন অফ (_f)" -#: ../pidgin/gtkpounce.c:618 msgid "Goes a_way" msgstr "অনুপস্থিত (_w)" -#: ../pidgin/gtkpounce.c:620 msgid "Ret_urns from away" msgstr "অনুপস্থিত অবস্থা থেকে ফিরে এসেছে (_u)" -#: ../pidgin/gtkpounce.c:622 msgid "Becomes _idle" msgstr "এখন অলস (_i)" -#: ../pidgin/gtkpounce.c:624 msgid "Is no longer i_dle" msgstr "আর অলস থাকবে না (_d)" -#: ../pidgin/gtkpounce.c:626 msgid "Starts _typing" msgstr "টাইপ শুরু করেছে (_t)" # tithi -#: ../pidgin/gtkpounce.c:628 msgid "P_auses while typing" msgstr "টাইপের সময় বন্ধ রাখুন (_a)" -#: ../pidgin/gtkpounce.c:630 msgid "Stops t_yping" msgstr "টাইপ বন্ধ করছে (_y)" -#: ../pidgin/gtkpounce.c:632 msgid "Sends a _message" msgstr "বার্তা পাঠায় (_m)" -#: ../pidgin/gtkpounce.c:675 msgid "Ope_n an IM window" msgstr "একটি আইএম উইন্ডো খুলুন (_n)" -#: ../pidgin/gtkpounce.c:677 msgid "_Pop up a notification" msgstr "একটি প্রজ্ঞাপন পপআপ করুন (_P)" -#: ../pidgin/gtkpounce.c:679 msgid "Send a _message" msgstr "একটি বার্তা পাঠান (_m)" -#: ../pidgin/gtkpounce.c:681 msgid "E_xecute a command" msgstr "একটি নির্দেশ কার্যকর করুন (_x)" -#: ../pidgin/gtkpounce.c:683 msgid "P_lay a sound" msgstr "শব্দ বাজান (_l)" -#: ../pidgin/gtkpounce.c:689 msgid "Brows_e..." msgstr "ব্রাউজ করুন... (_e)" -#: ../pidgin/gtkpounce.c:693 msgid "Br_owse..." msgstr "ব্রাউজ করুন... (_o)" -#: ../pidgin/gtkpounce.c:694 ../pidgin/gtkprefs.c:2031 msgid "Pre_view" msgstr "প্রাকদর্শন (_v)" -#: ../pidgin/gtkpounce.c:834 msgid "P_ounce only when my status is not Available" msgstr "আমার অবস্থা যখন সহজলভ্য নয় তখন পাউন্স করুন (_o)" # tithi -#: ../pidgin/gtkpounce.c:839 msgid "_Recurring" msgstr "পুনরাবৃত্ত করছে (_R)" -#: ../pidgin/gtkpounce.c:1284 msgid "Pounce Target" msgstr "পাউন্সের লক্ষ্য" -#: ../pidgin/gtkprefs.c:458 msgid "Smiley theme failed to unpack." msgstr "স্মাইলী থীম প্যাকহীন করতে ব্যর্থ হয়েছে" # tithi -#: ../pidgin/gtkprefs.c:593 msgid "Install Theme" msgstr "থীম সংস্থাপন করুন" -#: ../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." @@ -18083,154 +13216,118 @@ msgstr "" "আপনি যে স্মাইলি থীম ব্যবহার করতে চান তা নিম্নবর্তী তালিকা থেকে বাছাই করুন। নতুন " "থীম থীমের তালিকায় টানা ও ছাড়ার মাধ্যমে তাদের সংস্থাপন করতে পারেন।" -#: ../pidgin/gtkprefs.c:681 msgid "Icon" msgstr "আইকন" # tithi -#: ../pidgin/gtkprefs.c:891 msgid "Keyboard Shortcuts" msgstr "কীবোর্ড শর্টকাট" -#: ../pidgin/gtkprefs.c:911 msgid "Cl_ose conversations with the Escape key" msgstr "Escape কী দ্বারা কথোপকথনসমূহ বন্ধ করুন (_o)" -#: ../pidgin/gtkprefs.c:940 msgid "System Tray Icon" msgstr "সিস্টেম ট্রে এর আইকন" -#: ../pidgin/gtkprefs.c:941 msgid "_Show system tray icon:" msgstr "সিস্টেম ট্রে এর আইকন প্রদর্শন করুন (_S):" -#: ../pidgin/gtkprefs.c:944 msgid "On unread messages" msgstr "অপঠিত বার্তাসমূহে" -#: ../pidgin/gtkprefs.c:950 msgid "Conversation Window Hiding" msgstr "কথোপকথন উইন্ডো লুকিয়ে ফেলছে" -#: ../pidgin/gtkprefs.c:951 msgid "_Hide new IM conversations:" msgstr "নতুন কথোপকথন IM লুকিয়ে রাখুন (_H):" -#: ../pidgin/gtkprefs.c:954 ../pidgin/gtkprefs.c:2095 msgid "When away" msgstr "যখন অনুপস্থিত" #. All the tab options! -#: ../pidgin/gtkprefs.c:962 msgid "Tabs" msgstr "ট্যাবসমূহ" -#: ../pidgin/gtkprefs.c:964 msgid "Show IMs and chats in _tabbed windows" msgstr "আইএম ও আড্ডাসমূহ ট্যাবকৃত উইন্ডোতে প্রদর্শন করুন (_t)" -#: ../pidgin/gtkprefs.c:978 msgid "Show close b_utton on tabs" msgstr "ট্যাবে বন্ধ বোতাম প্রদর্শন করুন (_u)" -#: ../pidgin/gtkprefs.c:981 msgid "_Placement:" msgstr "অবস্থান (_P):" -#: ../pidgin/gtkprefs.c:983 msgid "Top" msgstr "উপর" -#: ../pidgin/gtkprefs.c:984 msgid "Bottom" msgstr "নীচ" -#: ../pidgin/gtkprefs.c:985 msgid "Left" msgstr "বাম" -#: ../pidgin/gtkprefs.c:986 msgid "Right" msgstr "ডান" -#: ../pidgin/gtkprefs.c:988 msgid "Left Vertical" msgstr "বাম উলম্ব" -#: ../pidgin/gtkprefs.c:989 msgid "Right Vertical" msgstr "ডান উলম্ব" -#: ../pidgin/gtkprefs.c:996 msgid "N_ew conversations:" msgstr "নতুন কথোপকথন (_e):" -#: ../pidgin/gtkprefs.c:1045 msgid "Show _formatting on incoming messages" msgstr "আগত বার্তাসমূহে বিন্যাসকরণ প্রদর্শন করুন (_f)" # tithi -#: ../pidgin/gtkprefs.c:1047 msgid "Close IMs immediately when the tab is closed" msgstr "ট্যাব বন্ধ করার সময় IM তাৎক্ষণিকভাবে বন্ধ করুন" -#: ../pidgin/gtkprefs.c:1050 msgid "Show _detailed information" msgstr "বিস্তারিত তথ্য প্রদর্শন করুন (_d)" -#: ../pidgin/gtkprefs.c:1052 msgid "Enable buddy ic_on animation" msgstr "এ্যানিমেশনে বন্ধুর আইকন সক্রিয় করুন (_o)" -#: ../pidgin/gtkprefs.c:1059 msgid "_Notify buddies that you are typing to them" msgstr "আপনি যা টাইপ করছেন তা বন্ধুদের অবগত করুন (_N)" -#: ../pidgin/gtkprefs.c:1062 msgid "Highlight _misspelled words" msgstr "ভুল বানানের শব্দ হাইলাইট করুন (_m)" # tithi -#: ../pidgin/gtkprefs.c:1066 msgid "Use smooth-scrolling" msgstr "মসৃন-স্ক্রলিং ব্যবহার করুন" -#: ../pidgin/gtkprefs.c:1069 msgid "F_lash window when IMs are received" msgstr "আইএম গ্রহণ করলে উইন্ডো ফ্ল্যাশ দিন (_l)" -#: ../pidgin/gtkprefs.c:1071 msgid "Minimi_ze new conversation windows" msgstr "নতুন কথোপকথন উইন্ডো নূন্যতম করুন (_z)" # tithi -#: ../pidgin/gtkprefs.c:1075 msgid "Minimum input area height in lines:" msgstr "লাইনের ন্যুনতম ইনপুট এলাকার উচ্চতা:" -#: ../pidgin/gtkprefs.c:1081 msgid "Font" msgstr "ফন্ট" # tithi -#: ../pidgin/gtkprefs.c:1083 msgid "Use document font from _theme" msgstr "থীম থেকে নথির ফন্ট ব্যবহার করুন (_t)" # tithi -#: ../pidgin/gtkprefs.c:1085 msgid "Use font from _theme" msgstr "থীম থেকে ফন্ট ব্যবহার করুন (_t)" -#: ../pidgin/gtkprefs.c:1091 msgid "Conversation _font:" msgstr "কথোপকথন ফন্ট (_f):" -#: ../pidgin/gtkprefs.c:1098 msgid "Default Formatting" msgstr "পুর্বনির্ধারিত বিন্যাসকরণ" -#: ../pidgin/gtkprefs.c:1117 msgid "" "This is how your outgoing message text will appear when you use protocols " "that support formatting." @@ -18239,68 +13336,53 @@ msgstr "" "এমনভাবে উপস্থিত হবে।" # tithi -#: ../pidgin/gtkprefs.c:1177 msgid "Cannot start proxy configuration program." msgstr "প্রক্সি বিন্যাসন প্রোগ্রাম শুরু করতে পারে না।" -#: ../pidgin/gtkprefs.c:1189 msgid "Cannot start browser configuration program." msgstr "ব্রাউজারের বিন্যাসন প্রোগ্রাম শুরু করতে পারে না।" -#: ../pidgin/gtkprefs.c:1209 msgid "ST_UN server:" msgstr "STUN সার্ভার (_U):" # tithi -#: ../pidgin/gtkprefs.c:1221 msgid "<span style=\"italic\">Example: stunserver.org</span>" msgstr "<span style=\"italic\">উদাহরণ: স্ট্যানসার্ভার.অর্গ</span>" -#: ../pidgin/gtkprefs.c:1225 msgid "_Autodetect IP address" msgstr "স্বয়ং-শনাক্ত আইপি ঠিকানা (_A)" -#: ../pidgin/gtkprefs.c:1234 msgid "Public _IP:" msgstr "সর্বসাধারণ আইপি (_I):" -#: ../pidgin/gtkprefs.c:1265 msgid "Ports" msgstr "পোর্টসমূহ" # tithi -#: ../pidgin/gtkprefs.c:1268 msgid "_Enable automatic router port forwarding" msgstr "স্বয়ংক্রিয় রাউটার পোর্ট অগ্রগমন সক্রিয় করুন (_E)" -#: ../pidgin/gtkprefs.c:1271 msgid "_Manually specify range of ports to listen on" msgstr "শুনতে পোর্টের সীমা নিজের হাতে উল্লেখ করুন (_M)" -#: ../pidgin/gtkprefs.c:1274 msgid "_Start port:" msgstr "শুরুর পোর্ট (_S):" -#: ../pidgin/gtkprefs.c:1281 msgid "_End port:" msgstr "শেষ পোর্ট (_E):" -#: ../pidgin/gtkprefs.c:1289 msgid "Proxy Server & Browser" msgstr "প্রক্সি সার্ভার & ব্রাউজার" # tithi -#: ../pidgin/gtkprefs.c:1297 msgid "<b>Proxy configuration program was not found.</b>" msgstr "<b>প্রক্সির পছন্দসই বিন্যাসন প্রোগ্রাম খুঁজে পাওয়া যায়নি।</b>" # tithi -#: ../pidgin/gtkprefs.c:1305 msgid "<b>Browser configuration program was not found.</b>" msgstr "<b>ব্রাউজারের পছন্দসই বিন্যাসন প্রোগ্রাম খুঁজে পাওয়া যায়নি।</b>" # tithi -#: ../pidgin/gtkprefs.c:1310 msgid "" "Proxy & Browser preferences are configured\n" "in GNOME Preferences" @@ -18308,100 +13390,80 @@ msgstr "" "প্রক্সি ও ব্রাউজারের প্রাধিকারসমূহ \n" "GNOME প্রাধিকারসমূহে পছন্দসই বিন্যাসন করা হয়েছে" -#: ../pidgin/gtkprefs.c:1317 msgid "Configure _Proxy" msgstr "প্রক্সি পছন্দসই বিন্যাস করুন (_P)" -#: ../pidgin/gtkprefs.c:1322 msgid "Configure _Browser" msgstr "ব্রাউজার পছন্দসই বিন্যাস করুন (_B)" -#: ../pidgin/gtkprefs.c:1328 msgid "Proxy Server" msgstr "প্রক্সি সার্ভার" -#: ../pidgin/gtkprefs.c:1333 msgid "No proxy" msgstr "কোনো প্রক্সি নেই" -#: ../pidgin/gtkprefs.c:1389 +#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings +msgid "Use remote DNS with SOCKS4 proxies" +msgstr "" + msgid "_User:" msgstr "ব্যবহারকারী (_U):" # tithi -#: ../pidgin/gtkprefs.c:1477 msgid "Seamonkey" msgstr "সিমাঙ্কি" -#: ../pidgin/gtkprefs.c:1478 msgid "Opera" msgstr "অপেরা" -#: ../pidgin/gtkprefs.c:1479 msgid "Netscape" msgstr "নেটস্কেপ" -#: ../pidgin/gtkprefs.c:1480 msgid "Mozilla" msgstr "মজিলা" -#: ../pidgin/gtkprefs.c:1481 msgid "Konqueror" msgstr "কনকোয়েরর" -#: ../pidgin/gtkprefs.c:1482 msgid "Desktop Default" msgstr "ডেস্কটপ পূর্বনির্ধারিত" -#: ../pidgin/gtkprefs.c:1483 msgid "GNOME Default" msgstr "GNOME পূর্বনির্ধারিত" -#: ../pidgin/gtkprefs.c:1484 msgid "Galeon" msgstr "গ্যালিওন" -#: ../pidgin/gtkprefs.c:1485 msgid "Firefox" msgstr "ফায়ারফক্স" -#: ../pidgin/gtkprefs.c:1486 msgid "Firebird" msgstr "ফায়ারবার্ড" -#: ../pidgin/gtkprefs.c:1487 msgid "Epiphany" msgstr "ইপিফ্যানি" -#: ../pidgin/gtkprefs.c:1496 msgid "Manual" msgstr "সহায়িকা" -#: ../pidgin/gtkprefs.c:1557 msgid "Browser Selection" msgstr "ব্রাউজার নির্বাচন" -#: ../pidgin/gtkprefs.c:1561 msgid "_Browser:" msgstr "ব্রাউজার (_B):" -#: ../pidgin/gtkprefs.c:1569 msgid "_Open link in:" msgstr "লিঙ্ক খুলুন (_O):" -#: ../pidgin/gtkprefs.c:1571 msgid "Browser default" msgstr "ব্রাউজার পূর্বনির্ধারিত" -#: ../pidgin/gtkprefs.c:1572 msgid "Existing window" msgstr "বিদ্যমান উইন্ডো" -#: ../pidgin/gtkprefs.c:1574 msgid "New tab" msgstr "নতুন ট্যাব" -#: ../pidgin/gtkprefs.c:1591 #, c-format msgid "" "_Manual:\n" @@ -18410,63 +13472,54 @@ msgstr "" "সহায়িকা (_M):\n" "(URL এর জন্য %s)" -#: ../pidgin/gtkprefs.c:1617 msgid "Log _format:" msgstr "কার্যবিবরণী বিন্যাস (_f):" -#: ../pidgin/gtkprefs.c:1622 msgid "Log all _instant messages" msgstr "সব তাৎক্ষণিক বার্তাসমূহ লগ করুন (_i)" -#: ../pidgin/gtkprefs.c:1624 msgid "Log all c_hats" msgstr "সকল আড্ডা লগ করুন (_h)" -#: ../pidgin/gtkprefs.c:1626 msgid "Log all _status changes to system log" msgstr "সব অবস্থার পরিবর্তনসমূহ সিস্টেমের কার্যবিবরণীতে লগ করুন (_s)" -#: ../pidgin/gtkprefs.c:1776 msgid "Sound Selection" msgstr "শব্দ নির্বাচন" -#: ../pidgin/gtkprefs.c:1786 +#, c-format msgid "Quietest" msgstr "একদম চুপচাপ" -#: ../pidgin/gtkprefs.c:1788 +#, c-format msgid "Quieter" msgstr "অপেক্ষাকৃত চুপচাপ" -#: ../pidgin/gtkprefs.c:1790 +#, c-format msgid "Quiet" msgstr "চুপচাপ" -#: ../pidgin/gtkprefs.c:1794 +#, c-format msgid "Loud" msgstr "জোরে" -#: ../pidgin/gtkprefs.c:1796 +#, c-format msgid "Louder" msgstr "অপেক্ষাকৃত জোরে" -#: ../pidgin/gtkprefs.c:1798 +#, c-format msgid "Loudest" msgstr "একদম জোরে" -#: ../pidgin/gtkprefs.c:1880 msgid "_Method:" msgstr "প্রক্রিয়া (_M):" -#: ../pidgin/gtkprefs.c:1882 msgid "Console beep" msgstr "কনসোল বীপ" -#: ../pidgin/gtkprefs.c:1889 msgid "No sounds" msgstr "কোনো শব্দ নেই" -#: ../pidgin/gtkprefs.c:1902 #, c-format msgid "" "Sound c_ommand:\n" @@ -18475,283 +13528,218 @@ msgstr "" "শব্দের নির্দেশ (_o):\n" "(ফাইল-নামের জন্য %s)" -#: ../pidgin/gtkprefs.c:1912 msgid "M_ute sounds" msgstr "শব্দ বন্ধ করুন (_u)" -#: ../pidgin/gtkprefs.c:1915 msgid "Sounds when conversation has _focus" msgstr "কথোপকথন ফোকাস করার শব্দ" -#: ../pidgin/gtkprefs.c:1917 msgid "_Enable sounds:" msgstr "শব্দ সক্রিয় করুন (_E):" -#: ../pidgin/gtkprefs.c:1934 msgid "V_olume:" msgstr "ভলিউম (_o):" -#: ../pidgin/gtkprefs.c:2001 msgid "Play" msgstr "বাজাও" -#: ../pidgin/gtkprefs.c:2027 msgid "_Browse..." msgstr "ব্রাউজ করুন... (_B)" -#: ../pidgin/gtkprefs.c:2035 msgid "_Reset" msgstr "পুনঃ বিন্যাস করুন (_R)" -#: ../pidgin/gtkprefs.c:2078 msgid "_Report idle time:" msgstr "অলস সময়ের প্রতিবেদন দিন (_R)" # tithi -#: ../pidgin/gtkprefs.c:2083 msgid "Based on keyboard or mouse use" msgstr "কীবোর্ড বা মাউস ব্যবহারের উপর ভিত্তি করে" -#: ../pidgin/gtkprefs.c:2092 msgid "_Auto-reply:" msgstr "স্বয়ংক্রিয়-উত্তর (_A):" -#: ../pidgin/gtkprefs.c:2096 msgid "When both away and idle" msgstr "যখন উভয়ই অনুপস্থিত এবং অলস" #. Auto-away stuff -#: ../pidgin/gtkprefs.c:2102 msgid "Auto-away" msgstr "স্বয়ংক্রিয়ভাবে অনুপস্থিতি" -#: ../pidgin/gtkprefs.c:2104 msgid "Change status when _idle" msgstr "অলস থাকলে অবস্থা পরিবর্তন করুন (_i)" -#: ../pidgin/gtkprefs.c:2108 msgid "_Minutes before becoming idle:" msgstr "অলস হওয়ার পূর্বের মিনিট (_M):" -#: ../pidgin/gtkprefs.c:2115 msgid "Change _status to:" msgstr "অবস্থা পরিবর্তন করুন (_s):" # tithi #. Signon status stuff -#: ../pidgin/gtkprefs.c:2128 msgid "Status at Startup" msgstr "সূচনার অবস্থা" # tithi -#: ../pidgin/gtkprefs.c:2130 msgid "Use status from last _exit at startup" msgstr "সর্বশেষ ত্যাগের অবস্থা শুরুতে ব্যবহার করুন (_e)" # tithi -#: ../pidgin/gtkprefs.c:2137 msgid "Status to a_pply at startup:" msgstr "সূচনাতে প্রয়োগ করার অবস্থা (_p):" -#: ../pidgin/gtkprefs.c:2166 msgid "Interface" msgstr "ইন্টারফেস" -#: ../pidgin/gtkprefs.c:2168 msgid "Smiley Themes" msgstr "স্মাইলী থীমসমূহ" -#: ../pidgin/gtkprefs.c:2175 msgid "Browser" msgstr "ব্রাউজার" -#: ../pidgin/gtkprefs.c:2179 msgid "Status / Idle" msgstr "অবস্থা / অলস" -#: ../pidgin/gtkprivacy.c:81 msgid "Allow all users to contact me" msgstr "সব ব্যবহারকারীকে আমার সাথে যোগাযোগ করার অনুমতি দিন" -#: ../pidgin/gtkprivacy.c:82 msgid "Allow only the users on my buddy list" msgstr "শুধুমাত্র আমার তালিকার বন্ধুদের অনুমতি দিন" -#: ../pidgin/gtkprivacy.c:83 msgid "Allow only the users below" msgstr "শুধুমাত্র নিম্নোলিখিত ব্যবহারকারীদের অনুমতি দিন" -#: ../pidgin/gtkprivacy.c:84 msgid "Block all users" msgstr "সব ব্যবহারকারীদের ব্লক করুন" -#: ../pidgin/gtkprivacy.c:85 msgid "Block only the users below" msgstr "শুধুমাত্র নিম্নোলিখিত ব্যবহারকারীদের ব্লক করুন" -#: ../pidgin/gtkprivacy.c:352 msgid "Privacy" msgstr "ব্যক্তিগত" -#: ../pidgin/gtkprivacy.c:362 msgid "Changes to privacy settings take effect immediately." msgstr "ব্যক্তিগত বিন্যাসনসমূহে পরিবর্তনসমূহ তাৎক্ষণিকভাবে কার্যকর হবে।" -#: ../pidgin/gtkprivacy.c:371 msgid "Set privacy for:" msgstr "এর জন্য গোপনীয়তা নির্ধারণ করুন:" #. Remove All button -#: ../pidgin/gtkprivacy.c:417 msgid "Remove Al_l" msgstr "সব অপসারণ করুন (_l)" -#: ../pidgin/gtkprivacy.c:503 ../pidgin/gtkprivacy.c:520 msgid "Permit User" msgstr "ব্যবহারকারীকে অনুমতি দিন" -#: ../pidgin/gtkprivacy.c:504 msgid "Type a user you permit to contact you." msgstr "আপনি অনুমতি দেন এমন ব্যবহারকারীকে আপনার সাথে যোগাযোগের জন্য টাইপ করুন।" -#: ../pidgin/gtkprivacy.c:505 msgid "Please enter the name of the user you wish to be able to contact you." msgstr "" "অনুগ।রহ করে আপনার সাথে যোগাযোগে অনুমতি দিতে চান এমন ব্যবহারকারীর নাম প্রবেশ করান।" -#: ../pidgin/gtkprivacy.c:508 ../pidgin/gtkprivacy.c:524 msgid "_Permit" msgstr "অনুমতি দিন (_P)" -#: ../pidgin/gtkprivacy.c:514 #, c-format msgid "Allow %s to contact you?" msgstr "আপনার সাথে যোগাযোগের জন্যে %s কে কি অনুমতি দিবেন?" -#: ../pidgin/gtkprivacy.c:516 #, c-format msgid "Are you sure you wish to allow %s to contact you?" msgstr "আপনি কি নিশ্চিত আপনি %s-কে আপনার সাথে যোগাযোগের অনুমতি দিতে চান?" -#: ../pidgin/gtkprivacy.c:545 ../pidgin/gtkprivacy.c:559 msgid "Block User" msgstr "ব্যবহারকারীকে বাধা দিন" -#: ../pidgin/gtkprivacy.c:546 msgid "Type a user to block." msgstr "বাধা দেয়ার জন্য ব্যবহারকারীকে টাইপ করুন।" -#: ../pidgin/gtkprivacy.c:547 msgid "Please enter the name of the user you wish to block." msgstr "অনুগ্রহ করে আপনি যে ব্যবহারকারীকে ব্লক করতে চান তার নাম প্রবেশ করান।" -#: ../pidgin/gtkprivacy.c:555 #, c-format msgid "Block %s?" msgstr "%s কে কি ব্লক করবেন?" -#: ../pidgin/gtkprivacy.c:557 #, c-format msgid "Are you sure you want to block %s?" msgstr "আপনি কি নিশ্চিত আপনি %s-কে ব্লক করতে চান?" -#: ../pidgin/gtkrequest.c:274 msgid "Apply" msgstr "প্রয়োগ করুন" -#: ../pidgin/gtkrequest.c:1503 msgid "That file already exists" msgstr "ঐ ফাইলটি ইতোমধ্যে বিদ্যমান" -#: ../pidgin/gtkrequest.c:1504 msgid "Would you like to overwrite it?" msgstr "আপনি কি এটা উপরিলিখন করতে চান?" # tithi -#: ../pidgin/gtkrequest.c:1507 msgid "Overwrite" msgstr "উপরিলিখন করুন" -#: ../pidgin/gtkrequest.c:1508 msgid "Choose New Name" msgstr "নতুন নাম পছন্দ করুন" -#: ../pidgin/gtkrequest.c:1649 ../pidgin/gtkrequest.c:1663 msgid "Select Folder..." msgstr "ফোল্ডার নির্বাচন করুন..." #. list button -#: ../pidgin/gtkroomlist.c:570 msgid "_Get List" msgstr "তালিকা সংগ্রহ করুন (_G)" #. add button -#: ../pidgin/gtkroomlist.c:578 msgid "_Add Chat" msgstr "আড্ডা যোগ করুন (_A)" -#: ../pidgin/gtksavedstatuses.c:340 msgid "Are you sure you want to delete the selected saved statuses?" msgstr "আপনি কি নিশ্চিত আপনি নির্বাচিত সংরক্ষিত অবস্থাসমূহ মুছে ফেলতে চান?" #. Use button -#: ../pidgin/gtksavedstatuses.c:650 ../pidgin/gtksavedstatuses.c:1279 msgid "_Use" msgstr "ব্যবহার করুন (_U)" -#: ../pidgin/gtksavedstatuses.c:793 msgid "Title already in use. You must choose a unique title." msgstr "" "শিরোনাম ইতোমধ্যে ব্যবহৃত হচ্ছে। আপনাকে অবশ্যই একটি অনন্য শিরোনাম পছন্দ করতে হবে।" -#: ../pidgin/gtksavedstatuses.c:1003 msgid "Different" msgstr "পৃথক" -#: ../pidgin/gtksavedstatuses.c:1202 msgid "_Title:" msgstr "শিরোনাম (_T):" -#: ../pidgin/gtksavedstatuses.c:1210 ../pidgin/gtksavedstatuses.c:1498 msgid "_Status:" msgstr "অবস্থা (_S):" #. Different status message expander -#: ../pidgin/gtksavedstatuses.c:1226 msgid "Use a _different status for some accounts" msgstr "কিছু একাউন্টের জন্য পৃথক অবস্থা ব্যবহার করুন (_d)" #. Save & Use button -#: ../pidgin/gtksavedstatuses.c:1286 msgid "Sa_ve & Use" msgstr "সংরক্ষণ এবং ব্যবহার করুন (_v)" -#: ../pidgin/gtksavedstatuses.c:1482 #, c-format msgid "Status for %s" msgstr "%s-এর জন্য অবস্থা" -#: ../pidgin/gtksmiley.c:228 ../pidgin/gtksmiley.c:236 -#: ../pidgin/gtksmiley.c:261 ../pidgin/gtksmiley.c:348 msgid "Custom Smiley" msgstr "পছন্দসই স্মাইলী" # tithi -#: ../pidgin/gtksmiley.c:229 ../pidgin/gtksmiley.c:262 msgid "More Data needed" msgstr "আরও তথ্য প্রয়োজন" # tithi -#: ../pidgin/gtksmiley.c:230 ../pidgin/gtksmiley.c:263 msgid "Please provide a shortcut to associate with the smiley." msgstr "অনুগ্রহ করে স্মাইলীর সাথে সম্পর্কিত করতে একটি শর্টকাট প্রদান করুন।" -#: ../pidgin/gtksmiley.c:237 msgid "Duplicate Shortcut" msgstr "অনুরুপ শর্টকাট" # tithi -#: ../pidgin/gtksmiley.c:238 msgid "" "A custom smiley for the selected shortcut already exists. Please specify a " "different shortcut." @@ -18759,83 +13747,65 @@ msgstr "" "নির্বাচিত শর্টকাটটির জন্য পছন্দসই স্মাইলী ইতোমধ্যে বিদ্যমান। অনুগ্রহ করে একটি ভিন্ন " "শর্টকাট উল্লেখ করুন।" -#: ../pidgin/gtksmiley.c:264 msgid "Please select an image for the smiley." msgstr "অনুগ্রহ করে স্মাইলীটির জন্য একটি চিত্র নির্বাচন করুন।" -#: ../pidgin/gtksmiley.c:367 msgid "Edit Smiley" msgstr "স্মাইলী সম্পাদনা করুন" -#: ../pidgin/gtksmiley.c:367 msgid "Add Smiley" msgstr "স্মাইলী যোগ করুন" -#: ../pidgin/gtksmiley.c:388 msgid "Smiley _Image" msgstr "স্মাইলীর চিত্র (_I)" # tithi #. Smiley shortcut -#: ../pidgin/gtksmiley.c:419 msgid "Smiley S_hortcut" msgstr "স্মাইলীর শর্টকাট (_S)" -#: ../pidgin/gtksmiley.c:515 msgid "Smiley" msgstr "স্মাইলী" # tithi -#: ../pidgin/gtksmiley.c:712 msgid "Custom Smiley Manager" msgstr "পছন্দসই স্মাইলী ব্যবস্থাপক" # tithi -#: ../pidgin/gtkstatusbox.c:403 msgid "Click to change your buddyicon for this account." msgstr "এই একাউন্টের জন্য আপনার বন্ধু-আইকন পরিবর্তন করতে ক্লিক করুন।" # tithi -#: ../pidgin/gtkstatusbox.c:404 msgid "Click to change your buddyicon for all accounts." msgstr "সব একাউন্টের জন্য আপনার বন্ধু-আইকন পরিবর্তন করতে ক্লিক করুন।" -#: ../pidgin/gtkstatusbox.c:695 msgid "Waiting for network connection" msgstr "নেটওয়ার্ক সংযোগের জন্য অপেক্ষা করছে" -#: ../pidgin/gtkstatusbox.c:1110 msgid "New status..." msgstr "নতুন অবস্থা..." -#: ../pidgin/gtkstatusbox.c:1111 msgid "Saved statuses..." msgstr "সংরক্ষিত অবস্থাসমূহ..." -#: ../pidgin/gtkstatusbox.c:1788 msgid "Status Selector" msgstr "অবস্থা নির্বাচক" # tithi -#: ../pidgin/gtkutils.c:687 msgid "Google Talk" msgstr "গুগল টক" -#: ../pidgin/gtkutils.c:1457 ../pidgin/gtkutils.c:1486 #, c-format msgid "The following error has occurred loading %s: %s" msgstr "%1s লোড করার সময় নিম্নোক্ত ত্রুটি সংঘটিত হয়েছে: %2s" -#: ../pidgin/gtkutils.c:1460 ../pidgin/gtkutils.c:1488 msgid "Failed to load image" msgstr "চিত্র লোড করতে ব্যর্থ হয়েছে" -#: ../pidgin/gtkutils.c:1562 #, c-format msgid "Cannot send folder %s." msgstr "%s ফোল্ডার পাঠাতে পারে না।" -#: ../pidgin/gtkutils.c:1563 #, c-format msgid "" "%s cannot transfer a folder. You will need to send the files within " @@ -18843,12 +13813,9 @@ msgid "" msgstr "" "%s ফোল্ডার স্থানান্তর করতে পারে না। আপনাকে প্রতিটি ফাইল আলাদাভাবে পাঠাতে হবে।" -#: ../pidgin/gtkutils.c:1597 ../pidgin/gtkutils.c:1609 -#: ../pidgin/gtkutils.c:1616 msgid "You have dragged an image" msgstr "আপনি একটি চিত্র টেনেছেন" -#: ../pidgin/gtkutils.c:1598 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." @@ -18856,23 +13823,18 @@ msgstr "" "আপনি এই ছবিটি ফাইল স্থানান্তর হিসেবে পাঠাতে পারেন, এটাকে এই বার্তার সাথে দৃঢ়বাবে " "সংযুক্ত করুন, বা এটাকে এই ব্যবহারকারীর জন্য বন্ধু আইকন হিসেবে ব্যবহার করুন।" -#: ../pidgin/gtkutils.c:1604 ../pidgin/gtkutils.c:1624 msgid "Set as buddy icon" msgstr "বন্ধু আইকন হিসেবে নির্ধারণ করুন" -#: ../pidgin/gtkutils.c:1605 ../pidgin/gtkutils.c:1625 msgid "Send image file" msgstr "চিত্র ফাইল পাঠান" -#: ../pidgin/gtkutils.c:1606 ../pidgin/gtkutils.c:1625 msgid "Insert in message" msgstr "বার্তায় প্রবেশ করান" -#: ../pidgin/gtkutils.c:1610 msgid "Would you like to set it as the buddy icon for this user?" msgstr "আপনি কি এটাকে এই ব্যবহারকারীর জন্য বন্ধু আইকন হিসেবে নির্ধারণ করতে চান?" -#: ../pidgin/gtkutils.c:1617 msgid "" "You can send this image as a file transfer, or use it as the buddy icon for " "this user." @@ -18880,7 +13842,6 @@ msgstr "" "আপনি এই চিত্রটি ফাইল স্থানান্তর হিসেবে পাঠাতে পারেন, বা এটাকে এই ব্যবহারকারীর " "জন্য বন্ধু আইকন হিসেবে ব্যবহার করতে পারেন।" -#: ../pidgin/gtkutils.c:1618 msgid "" "You can insert this image into this message, or use it as the buddy icon for " "this user" @@ -18893,11 +13854,9 @@ msgstr "" #. * 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:1677 msgid "Cannot send launcher" msgstr "প্রকাশক পাঠাতে পারে না" -#: ../pidgin/gtkutils.c:1677 msgid "" "You dragged a desktop launcher. Most likely you wanted to send whatever this " "launcher points to instead of this launcher itself." @@ -18905,7 +13864,6 @@ msgstr "" "আপনি একটি ডেস্কটপ প্রকাশক টেনে এনেছেন। এই প্রকাশকটি নিজেকে নির্দেশ করার পরিবর্তে " "আর যেখানে নির্দেশ করে সেখানে সম্ভবত আপনি পাঠাতে চান।" -#: ../pidgin/gtkutils.c:2415 #, c-format msgid "" "<b>File:</b> %s\n" @@ -18917,133 +13875,104 @@ msgstr "" "<b>চিত্রের আকার:</b> %3dx%4d" # tithi -#: ../pidgin/gtkutils.c:2717 #, c-format msgid "The file '%s' is too large for %s. Please try a smaller image.\n" msgstr "" "'%1s' ফাইলটি %2s এর জন্য অনেক বড়। অনুগ্রহ করে অপেক্ষাকৃত ছোট চিত্র ব্যবহার করুন।\n" -#: ../pidgin/gtkutils.c:2719 msgid "Icon Error" msgstr "আইকন ত্রুটি" -#: ../pidgin/gtkutils.c:2720 msgid "Could not set icon" msgstr "আইকন নির্ধারণ করা হয়নি" -#: ../pidgin/gtkutils.c:2820 #, c-format msgid "Failed to open file '%s': %s" msgstr "'%1s' ফাইলটি খুলতে ব্যর্থ: %2s" # tithi -#: ../pidgin/gtkutils.c:2869 #, c-format msgid "" "Failed to load image '%s': reason not known, probably a corrupt image file" msgstr "" "'%s' চিত্রটি লোড করতে ব্যর্থ হয়েছে। কারণ জানা নেই, সম্ভবত একটি নষ্ট চিত্রের ফাইল" -#: ../pidgin/gtkwhiteboard.c:754 ../pidgin/gtkwhiteboard.c:773 msgid "Save File" msgstr "ফাইল সংরক্ষণ করুন" -#: ../pidgin/gtkwhiteboard.c:861 msgid "Select color" msgstr "রং নির্বাচন করুন" -#: ../pidgin/pidginstock.c:88 msgid "_Alias" msgstr "উপনাম (_A)" -#: ../pidgin/pidginstock.c:90 msgid "Close _tabs" msgstr "ট্যাবসমূহ বন্ধ করুন (_t)" -#: ../pidgin/pidginstock.c:92 msgid "_Get Info" msgstr "তথ্য সংগ্রহ করুন (_G)" -#: ../pidgin/pidginstock.c:93 msgid "_Invite" msgstr "আমন্ত্রণ জানান (_I)" -#: ../pidgin/pidginstock.c:94 msgid "_Modify..." msgstr "পরিবর্তন করুন... (_M)" -#: ../pidgin/pidginstock.c:95 msgid "_Add..." msgstr "যোগ করুন... (_A)" -#: ../pidgin/pidginstock.c:96 msgid "_Open Mail" msgstr "মেইল খুলুন (_O)" -#: ../pidgin/pidginstock.c:98 msgid "_Edit" msgstr "সম্পাদনা করুন (_E)" -#: ../pidgin/pidgintooltip.c:125 msgid "Pidgin Tooltip" msgstr "পিজিন টুলের-ইঙ্গিত" # tithi -#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:2 msgid "Pidgin smileys" msgstr "পিজিন স্মাইলীসমূহ" # tithi -#: ../pidgin/pixmaps/emotes/none/none.theme.in.h:1 msgid "Penguin Pimps" msgstr "পেঙ্গুইন পিম্পসমূহ" # tithi -#: ../pidgin/pixmaps/emotes/none/none.theme.in.h:2 msgid "Selecting this disables graphical emoticons." msgstr "এই নিস্ক্রিয় গ্রাফিকাল অভিব্যক্তি-আইকন নির্বাচন করছে।" -#: ../pidgin/pixmaps/emotes/none/none.theme.in.h:3 msgid "none" msgstr "কোনটি না" -#: ../pidgin/pixmaps/emotes/small/16/small.theme.in.h:1 msgid "Small" msgstr "ছোট" -#: ../pidgin/pixmaps/emotes/small/16/small.theme.in.h:2 msgid "Smaller versions of the default smilies" msgstr "পূর্বনির্ধারিত স্মাইলীগুলোর অপেক্ষাকৃত ছোট সংস্করণ" # tithi -#: ../pidgin/plugins/cap/cap.c:441 ../pidgin/plugins/cap/cap.c:444 msgid "Response Probability:" msgstr "সাড়ার সম্ভাব্যতা:" -#: ../pidgin/plugins/cap/cap.c:769 msgid "Statistics Configuration" msgstr "পরিসংখ্যান বিন্যাসন" # tithi #. msg_difference spinner -#: ../pidgin/plugins/cap/cap.c:772 msgid "Maximum response timeout:" msgstr "সর্বোচ্চ সাড়ার সময়োত্তীর্ণ হয়েছে:" -#: ../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 "মিনিট" # fix me tithi #. last_seen spinner -#: ../pidgin/plugins/cap/cap.c:779 msgid "Maximum last-seen difference:" msgstr "শেষ-দেখার সর্বোচ্চ পার্থক্য:" # tithi #. threshold spinner -#: ../pidgin/plugins/cap/cap.c:786 msgid "Threshold:" msgstr "থ্রেসহোল্ড:" @@ -19054,61 +13983,49 @@ msgstr "থ্রেসহোল্ড:" #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/cap/cap.c:894 msgid "Contact Availability Prediction" msgstr "যোগাযোগ সহজলভ্যতার ভবিষ্যৎবাণী" # tithi #. *< name #. *< version -#: ../pidgin/plugins/cap/cap.c:896 msgid "Contact Availability Prediction plugin." msgstr "যোগাযোগ সহজলভ্যতার ভবিষ্যৎবাণীর প্লাগইন।" # tithi #. * summary -#: ../pidgin/plugins/cap/cap.c:897 msgid "Displays statistical information about your buddies' availability" msgstr "আপনার বন্ধুদের সম্ভাব্যতা সম্পর্কে পরিসংখ্যান সংক্রান্ত তথ্য প্রদর্শন করে" -#: ../pidgin/plugins/contact_priority.c:61 msgid "Buddy is idle" msgstr "বন্ধু অলস" -#: ../pidgin/plugins/contact_priority.c:62 msgid "Buddy is away" msgstr "বন্ধু অনুপস্থিত" # fix me tithi -#: ../pidgin/plugins/contact_priority.c:63 msgid "Buddy is \"extended\" away" msgstr "বন্ধু অনুপস্থিত \"প্রসারিত\":" #. Not used yet. -#: ../pidgin/plugins/contact_priority.c:66 msgid "Buddy is mobile" msgstr "বন্ধু মোবাইলে" -#: ../pidgin/plugins/contact_priority.c:68 msgid "Buddy is offline" msgstr "বন্ধু অফলাইনে" -#: ../pidgin/plugins/contact_priority.c:90 msgid "Point values to use when..." msgstr "ব্যবহার করতে মানসমূহ নির্দেশ করুন যখন..." -#: ../pidgin/plugins/contact_priority.c:118 msgid "" "The buddy with the <i>largest score</i> is the buddy who will have priority " "in the contact.\n" msgstr "" "<i>largest score</i> সম্বলিত বন্ধু হলো এমন বন্ধু যার যোগাযোগে অগ্রাধিকার থাকবে।\n" -#: ../pidgin/plugins/contact_priority.c:125 msgid "Use last buddy when scores are equal" msgstr "স্কোর সমান হলে শেষ বন্ধুকে ব্যবহার করুন" -#: ../pidgin/plugins/contact_priority.c:130 msgid "Point values to use for account..." msgstr "একাউন্ট ব্যবহারের জন্য মানসমূহ নির্দেশ করুন..." @@ -19118,20 +14035,17 @@ msgstr "একাউন্ট ব্যবহারের জন্য মান #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/contact_priority.c:188 msgid "Contact Priority" msgstr "যোগাযোগের অগ্রাধিকার" #. *< name #. *< version #. *< summary -#: ../pidgin/plugins/contact_priority.c:191 msgid "" "Allows for controlling the values associated with different buddy states." msgstr "বিভিন্ন বন্ধুর রাজ্যের সাথে সম্পর্কিত মানসমূহ নিয়ন্ত্রণ করার জন্য অনুমতি দেয়।" #. *< description -#: ../pidgin/plugins/contact_priority.c:193 msgid "" "Allows for changing the point values of idle/away/offline states for buddies " "in contact priority computations." @@ -19139,64 +14053,50 @@ msgstr "" "যোগাযোগের অগ্রাধিকার নির্ণয়ে বন্ধুদের জন্য অলস/অনুপস্থিত/অফলাইন অবস্থার বিন্দু মানসমূহ " "পরিবর্তন করার জন্য অনুমোদন করে।" -#: ../pidgin/plugins/convcolors.c:23 msgid "Conversation Colors" msgstr "কথোপকথন রংসমূহ" -#: ../pidgin/plugins/convcolors.c:25 ../pidgin/plugins/convcolors.c:26 msgid "Customize colors in the conversation window" msgstr "কথোপকথন উইন্ডোটির রং পছন্দসই বিন্যাস করুন" -#: ../pidgin/plugins/convcolors.c:87 msgid "Error Messages" msgstr "ত্রুটি বার্তাসমূহ" -#: ../pidgin/plugins/convcolors.c:88 msgid "Highlighted Messages" msgstr "প্রনির্দেশিত বার্তাসমূহ" -#: ../pidgin/plugins/convcolors.c:89 msgid "System Messages" msgstr "সিস্টেম বার্তাসমূহ" -#: ../pidgin/plugins/convcolors.c:90 msgid "Sent Messages" msgstr "প্রেরিত বার্তাসমূহ" -#: ../pidgin/plugins/convcolors.c:91 msgid "Received Messages" msgstr "গৃহীত বার্তাসমূহ" -#: ../pidgin/plugins/convcolors.c:223 ../pidgin/plugins/pidginrc.c:260 #, c-format msgid "Select Color for %s" msgstr "%s এর জন্য রং নির্বাচন করুন" # tithi -#: ../pidgin/plugins/convcolors.c:372 msgid "Ignore incoming format" msgstr "আগত বিন্যাস উপেক্ষা করুন" -#: ../pidgin/plugins/convcolors.c:373 msgid "Apply in Chats" msgstr "আড্ডায় প্রয়োগ করুন" # tithi -#: ../pidgin/plugins/convcolors.c:374 msgid "Apply in IMs" msgstr "আইএম গুলোতে প্রয়োগ করুন" -#: ../pidgin/plugins/extplacement.c:80 msgid "By conversation count" msgstr "কথোপকথন গণনা অনুসারে" -#: ../pidgin/plugins/extplacement.c:101 msgid "Conversation Placement" msgstr "কথোপকথন অবস্থিতিকরণ" # fix-me tithi #. 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\"." @@ -19204,11 +14104,9 @@ msgstr "" "নোট: \"নতুন কথোপকথনসমূহের\" প্রাধিকার অবশ্যই \"কথোপকথন গণনার ভিত্তিতে\" নির্ধারিত " "হবে।" -#: ../pidgin/plugins/extplacement.c:111 msgid "Number of conversations per window" msgstr "প্রতি উইন্ডোতে কথোপকথনের সংখ্যা" -#: ../pidgin/plugins/extplacement.c:117 msgid "Separate IM and Chat windows when placing by number" msgstr "সংখ্যা অনুসারে সাজানোর সময় আইএম ও আড্ডার উইন্ডোগুলো আলাদা করুন" @@ -19218,19 +14116,16 @@ msgstr "সংখ্যা অনুসারে সাজানোর সময #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/extplacement.c:146 msgid "ExtPlacement" msgstr "ExtPlacement" #. *< name #. *< version -#: ../pidgin/plugins/extplacement.c:148 msgid "Extra conversation placement options." msgstr "অতিরিক্ত কথোপকথন অবস্থিতিকরণ পছন্দসমূহ।" #. *< summary #. * description -#: ../pidgin/plugins/extplacement.c:150 msgid "" "Restrict the number of conversations per windows, optionally separating IMs " "and Chats" @@ -19238,22 +14133,18 @@ msgstr "" "আইএম এবং আড্ডা ঐচ্ছিকভাবে আলাদা করে, প্রতিটি উইন্ডোর কথোপকথন সংখ্যা সীমিত করুন।" #. Configuration frame -#: ../pidgin/plugins/gestures/gestures.c:235 msgid "Mouse Gestures Configuration" msgstr "মাউসের ভঙ্গিমা বিন্যাসন করুন" -#: ../pidgin/plugins/gestures/gestures.c:242 msgid "Middle mouse button" msgstr "মাউসের মাঝের বোতাম" -#: ../pidgin/plugins/gestures/gestures.c:247 msgid "Right mouse button" msgstr "মাউসের ডান বোতাম" # previous: # দৃশ্যমান ভঙ্গিমা প্রদর্শন (_দ) #. "Visual gesture display" checkbox -#: ../pidgin/plugins/gestures/gestures.c:259 msgid "_Visual gesture display" msgstr "ঐক্ষিক ভঙ্গিমার প্রদর্শন (_V)" @@ -19263,19 +14154,16 @@ msgstr "ঐক্ষিক ভঙ্গিমার প্রদর্শন (_V #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/gestures/gestures.c:295 msgid "Mouse Gestures" msgstr "মাউসের ভঙ্গিমা" #. *< name #. *< version #. * summary -#: ../pidgin/plugins/gestures/gestures.c:298 msgid "Provides support for mouse gestures" msgstr "মাউসের ভঙ্গিমাকে সমর্থন দেয়" #. * 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" @@ -19290,35 +14178,26 @@ msgstr "" "•পূর্ববর্তী কথোপকথনে পরিবর্তন করতে উপরে টানুন এবং তারপর বামে টানুন।\n" "•পরবর্তী কথোপকথন পরিবর্তন করতে উপরে টানুন এবং তারপর ডানে টানুন।" -#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:143 msgid "Instant Messaging" msgstr "তাৎক্ষণিক বার্তাব্যবস্থা" #. 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 "" "নিম্নোক্ত ঠিকানার বই থেকে একজন ব্যক্তিকে নির্বাচন করুন, বা একজন নতুন ব্যক্তি যোগ করুন।" -#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:555 -#: ../pidgin/plugins/gevolution/new_person_dialog.c:305 msgid "Group:" msgstr "গ্রুপ:" #. "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 "নতুন ব্যক্তি" #. "Select Buddy" button -#: ../pidgin/plugins/gevolution/add_buddy_dialog.c:597 msgid "Select Buddy" msgstr "বন্ধু নির্বাচন করুন" #. Add the label. -#: ../pidgin/plugins/gevolution/assoc-buddy.c:343 msgid "" "Select a person from your address book to add this buddy to, or create a new " "person." @@ -19327,44 +14206,34 @@ msgstr "" "তৈরি করুন।" #. Add the expander -#: ../pidgin/plugins/gevolution/assoc-buddy.c:431 msgid "User _details" msgstr "ব্যবহারকারীর বিবরণ (_d)" #. "Associate Buddy" button -#: ../pidgin/plugins/gevolution/assoc-buddy.c:484 msgid "_Associate Buddy" msgstr "সম্পৃক্ত বন্ধু (_A)" -#: ../pidgin/plugins/gevolution/gevolution.c:242 -#: ../pidgin/plugins/gevolution/gevolution.c:248 msgid "Unable to send email" msgstr "ই-মেইল পাঠাতে ব্যর্থ" -#: ../pidgin/plugins/gevolution/gevolution.c:243 msgid "The evolution executable was not found in the PATH." msgstr "পথ-এর মধ্যে কার্যকরযোগ্য বিবর্তন খুঁজে পাওয়া যায়নি।" # tithi -#: ../pidgin/plugins/gevolution/gevolution.c:249 msgid "An email address was not found for this buddy." msgstr "এই বন্ধুটির জন্য একটি ই-মেইল ঠিকানা খুঁজে পাওয়া যায়নি।" -#: ../pidgin/plugins/gevolution/gevolution.c:275 msgid "Add to Address Book" msgstr "ঠিকানার বইয়ে যোগ করুন" -#: ../pidgin/plugins/gevolution/gevolution.c:287 msgid "Send Email" msgstr "ই-মেইল পাঠান" #. Configuration frame -#: ../pidgin/plugins/gevolution/gevolution.c:414 msgid "Evolution Integration Configuration" msgstr "বিবর্তন একত্রিকরণ বিন্যাসন" #. Label -#: ../pidgin/plugins/gevolution/gevolution.c:417 msgid "Select all accounts that buddies should be auto-added to." msgstr "স্বয়ংক্রিয়ভাবে সব একাউন্টগুলো নির্বাচন করুন যাতে বন্ধুরা স্বয়ং-যুক্ত হবে।" @@ -19374,7 +14243,6 @@ msgstr "স্বয়ংক্রিয়ভাবে সব একাউন #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/gevolution/gevolution.c:529 msgid "Evolution Integration" msgstr "বিবর্তন একত্রিকরণ" @@ -19382,38 +14250,29 @@ msgstr "বিবর্তন একত্রিকরণ" #. *< version #. * summary #. * description -#: ../pidgin/plugins/gevolution/gevolution.c:532 -#: ../pidgin/plugins/gevolution/gevolution.c:534 msgid "Provides integration with Evolution." msgstr "বিবর্তনের সঙ্গে একত্রিকরণ প্রদান করে।" -#: ../pidgin/plugins/gevolution/new_person_dialog.c:266 msgid "Please enter the person's information below." msgstr "অনুগ্রহ করে ব্যক্তির তথ্যাদি নিচে প্রবেশ করান।" -#: ../pidgin/plugins/gevolution/new_person_dialog.c:270 msgid "Please enter the buddy's username and account type below." msgstr "অনুগ্রহ করে বন্ধুর ব্যবহারকারী নাম ও একাউন্টের ধরণ নিচে প্রবেশ করান।" -#: ../pidgin/plugins/gevolution/new_person_dialog.c:290 msgid "Account type:" msgstr "একাউন্টের ধরণ:" # and this #. Optional Information section -#: ../pidgin/plugins/gevolution/new_person_dialog.c:313 msgid "Optional information:" msgstr "ঐচ্ছিক তথ্য:" -#: ../pidgin/plugins/gevolution/new_person_dialog.c:348 msgid "First name:" msgstr "প্রথম নাম:" -#: ../pidgin/plugins/gevolution/new_person_dialog.c:360 msgid "Last name:" msgstr "শেষ নাম:" -#: ../pidgin/plugins/gevolution/new_person_dialog.c:380 msgid "Email:" msgstr "ইমেইল:" @@ -19423,7 +14282,6 @@ msgstr "ইমেইল:" #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/gtk-signals-test.c:160 msgid "GTK Signals Test" msgstr "GTK সঙ্কেতের পরীক্ষা" @@ -19431,12 +14289,9 @@ msgstr "GTK সঙ্কেতের পরীক্ষা" #. *< 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 "সব ইউআই সঙ্কেত সঠিকভাবে কাজ করছে কিনা তা দেখার জন্য পরীক্ষা করুন।" -#: ../pidgin/plugins/gtkbuddynote.c:36 #, c-format msgid "" "\n" @@ -19445,7 +14300,6 @@ msgstr "" "\n" "<b>বন্ধুর নোট</b>: %s" -#: ../pidgin/plugins/history.c:202 msgid "History" msgstr "ইতিহাস" @@ -19455,7 +14309,6 @@ msgstr "ইতিহাস" #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/iconaway.c:82 msgid "Iconify on Away" msgstr "অনুপস্থিত হলে আইকন দ্বারা চিহ্নিত করুন" @@ -19463,51 +14316,40 @@ msgstr "অনুপস্থিত হলে আইকন দ্বারা #. *< version #. * summary #. * description -#: ../pidgin/plugins/iconaway.c:85 ../pidgin/plugins/iconaway.c:87 msgid "Iconifies the buddy list and your conversations when you go away." msgstr "আপনার অনুপস্থিতিতে বন্ধু তালিকা ও আপনার কথোপকথন আইকন দ্বারা চিহ্নিত করুন।" -#: ../pidgin/plugins/mailchk.c:160 msgid "Mail Checker" msgstr "মেইল পরীক্ষক" -#: ../pidgin/plugins/mailchk.c:162 msgid "Checks for new local mail." msgstr "নতুন স্থানীয় মেইলের জন্য পরীক্ষা করে।" -#: ../pidgin/plugins/mailchk.c:163 msgid "Adds a small box to the buddy list that shows if you have new mail." msgstr "বন্ধু তালিকার একটি ছোট বাক্স যুক্ত করে যা আপনার নতুন মেইল এলে প্রদর্শন করে।" -#: ../pidgin/plugins/markerline.c:23 msgid "Markerline" msgstr "চিহ্নিতকারীর-রেখা" # tithi -#: ../pidgin/plugins/markerline.c:25 ../pidgin/plugins/markerline.c:26 msgid "Draw a line to indicate new messages in a conversation." msgstr "কথোপকথনে নতুন বার্তাগুলো নির্দেশ করতে একটি লাইন আঁকুন।" # fix me tithi -#: ../pidgin/plugins/markerline.c:238 msgid "Jump to markerline" msgstr "চিহ্নিতকারীর-রেখায় গমন করুন" # tithi -#: ../pidgin/plugins/markerline.c:272 msgid "Draw Markerline in " msgstr "চিহ্নিতকারীর-রেখা আঁকুন" -#: ../pidgin/plugins/markerline.c:276 ../pidgin/plugins/notify.c:694 msgid "_IM windows" msgstr "আইএম উইন্ডোজ (_I)" -#: ../pidgin/plugins/markerline.c:280 ../pidgin/plugins/notify.c:701 msgid "C_hat windows" msgstr "আড্ডার উইন্ডো (_h)" # tithi -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:44 msgid "" "A music messaging session has been requested. Please click the MM icon to " "accept." @@ -19516,39 +14358,31 @@ msgstr "" "আইকনটি ক্লিক করুন।" # fix me -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:45 msgid "Music messaging session confirmed." msgstr "সংগীত বার্তাকরণ অধিবেশন নিশ্চিত।" # fix me -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:430 msgid "Music Messaging" msgstr "সংগীত বার্তাকরণ" # tithi -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:431 msgid "There was a conflict in running the command:" msgstr "নির্দেশ চালাতে একটি দ্বন্দ্ব ছিল:" -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:539 msgid "Error Running Editor" msgstr "সম্পাদক চালাতে ত্রুটি" -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:540 msgid "The following error has occurred:" msgstr "নিম্নোক্ত ত্রুটি সংঘটিত হয়েছে:" #. Configuration frame -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:639 msgid "Music Messaging Configuration" msgstr "সংগীত বার্তাকরণ বিন্যাসন" # tithifix me -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:643 msgid "Score Editor Path" msgstr "সম্পাদক পাথ স্কোর" -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:644 msgid "_Apply" msgstr "প্রয়োগ করুন (_A)" @@ -19561,13 +14395,11 @@ msgstr "প্রয়োগ করুন (_A)" #. *< id #. *< name #. *< version -#: ../pidgin/plugins/musicmessaging/musicmessaging.c:685 msgid "Music Messaging Plugin for collaborative composition." msgstr "সমন্নিত রচনার জন্য সংগীত বার্তাকরণ প্লাগইন করুন।" # fix me tithi #. * 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." @@ -19576,87 +14408,70 @@ msgstr "" "সম্পাদনার মাধ্যমে যুগপৎভাবে এক খন্ড সংগীতের উপর কাজ করে।" #. ---------- "Notify For" ---------- -#: ../pidgin/plugins/notify.c:690 msgid "Notify For" msgstr "এর জন্য প্রজ্ঞাপন" # fix me -#: ../pidgin/plugins/notify.c:709 msgid "\t_Only when someone says your username" msgstr "" " শুধুমাত্র তখন যখন কেউ একজন আপনার ব্যবহারকারীর নাম ডাকে " "(_O)" -#: ../pidgin/plugins/notify.c:719 msgid "_Focused windows" msgstr "ফোকাসকৃত উইন্ডো (_F)" #. ---------- "Notification Methods" ---------- -#: ../pidgin/plugins/notify.c:727 msgid "Notification Methods" msgstr "প্রজ্ঞাপন পদ্ধতি" -#: ../pidgin/plugins/notify.c:734 msgid "Prepend _string into window title:" msgstr "উইন্ডোর শিরোনামে স্ট্রীং যোগ করুন (_s):" #. Count method button -#: ../pidgin/plugins/notify.c:753 msgid "Insert c_ount of new messages into window title" msgstr "উইন্ডোর শিরোনামে নতুন বার্তাসমূহের সংখ্যা প্রবেশ করান (_o)" # fix me #. Count xprop method button -#: ../pidgin/plugins/notify.c:762 msgid "Insert count of new message into _X property" msgstr "X বৈশিষ্ট্যে নতুন বার্তাসমূহের সংখ্যা প্রবেশ করান (_X)" #. Urgent method button -#: ../pidgin/plugins/notify.c:770 msgid "Set window manager \"_URGENT\" hint" msgstr "উইন্ডো ব্যবস্থাপক \"জরুরী\" ইঙ্গিতে নির্দিষ্ট করুন (_U)" -#: ../pidgin/plugins/notify.c:772 msgid "_Flash window" msgstr "ফ্ল্যাশ উইন্ডো (_F)" #. Raise window method button -#: ../pidgin/plugins/notify.c:781 msgid "R_aise conversation window" msgstr "কথোপকথন উইন্ডো বৃদ্ধি করুন (_a)" #. Present conversation method button -#: ../pidgin/plugins/notify.c:789 msgid "_Present conversation window" msgstr "বর্তমান কথোপকথন উইন্ডো (_P)" #. ---------- "Notification Removals" ---------- -#: ../pidgin/plugins/notify.c:797 msgid "Notification Removal" msgstr "প্রজ্ঞাপন অপসারক" #. Remove on focus button -#: ../pidgin/plugins/notify.c:802 msgid "Remove when conversation window _gains focus" msgstr "কথোপকথন উইন্ডোতে ফোকাস করা হলে অপসারণ করুন (_g)" #. Remove on click button -#: ../pidgin/plugins/notify.c:809 msgid "Remove when conversation window _receives click" msgstr "কথোপকথন উইন্ডোতে ক্লিক করা হলে অপসারণ করুন (_r)" #. Remove on type button -#: ../pidgin/plugins/notify.c:817 msgid "Remove when _typing in conversation window" msgstr "কথোপকথন উইন্ডোতে টাইপ করার সময় অপসারণ করুন (_t)" #. Remove on message send button -#: ../pidgin/plugins/notify.c:825 msgid "Remove when a _message gets sent" msgstr "একটি বার্তা পাঠানো হলে অপসারণ করুন (_m)" #. Remove on conversation switch button -#: ../pidgin/plugins/notify.c:834 msgid "Remove on switch to conversation ta_b" msgstr "কথোপকথন ট্যাবে পরিবর্তনের সময় অপসারণ করুন (_b)" @@ -19666,7 +14481,6 @@ msgstr "কথোপকথন ট্যাবে পরিবর্তনের #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/notify.c:927 msgid "Message Notification" msgstr "বার্তার প্রজ্ঞাপন" @@ -19674,7 +14488,6 @@ msgstr "বার্তার প্রজ্ঞাপন" #. *< version #. * summary #. * description -#: ../pidgin/plugins/notify.c:930 ../pidgin/plugins/notify.c:932 msgid "Provides a variety of ways of notifying you of unread messages." msgstr "আপনাকে অপঠিত বার্তাসমূহের বিভিন্ন ধরনের প্রজ্ঞাপন প্রদান করে।" @@ -19684,19 +14497,16 @@ msgstr "আপনাকে অপঠিত বার্তাসমূহের #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/pidgininc.c:91 msgid "Pidgin Demonstration Plugin" msgstr "পিজিন কার্যপ্রণালী প্রদর্শন প্লাগইন" #. *< name #. *< version #. * summary -#: ../pidgin/plugins/pidgininc.c:94 msgid "An example plugin that does stuff - see the description." msgstr "একটি উদাহারণ প্লাগইন যা অনেক কিছু করে - বিবরণ দেখুন।" #. * description -#: ../pidgin/plugins/pidgininc.c:96 msgid "" "This is a really cool plugin that does a lot of stuff:\n" "- It tells you who wrote the program when you log in\n" @@ -19708,60 +14518,47 @@ msgstr "" "- এটা সব আগত পাঠ উল্টে দেয়\n" "- আপনার তালিকাভুক্ত ব্যক্তি সাইন অন করলেই এটা তাদেরকে একটি বার্তা পাঠায়" -#: ../pidgin/plugins/pidginrc.c:51 msgid "Cursor Color" msgstr "কার্সারের রং" -#: ../pidgin/plugins/pidginrc.c:52 msgid "Secondary Cursor Color" msgstr "গৌণ কার্সারের রং" -#: ../pidgin/plugins/pidginrc.c:53 msgid "Hyperlink Color" msgstr "হাইপারলিঙ্কের রং" -#: ../pidgin/plugins/pidginrc.c:54 msgid "Visited Hyperlink Color" msgstr "প্রনির্দেশিত হাইপারলিঙ্ক রং" -#: ../pidgin/plugins/pidginrc.c:57 msgid "Highlighted Message Name Color" msgstr "প্রনির্দেশিত বার্তার নামের রং" -#: ../pidgin/plugins/pidginrc.c:69 msgid "GtkTreeView Horizontal Separation" msgstr "GtkTreeView অনুভূমিক বিভাজন" -#: ../pidgin/plugins/pidginrc.c:84 msgid "Conversation Entry" msgstr "কথোপকথন এন্টি" -#: ../pidgin/plugins/pidginrc.c:85 msgid "Request Dialog" msgstr "অনুরোধ সংলাপ" -#: ../pidgin/plugins/pidginrc.c:86 msgid "Notify Dialog" msgstr "প্রজ্ঞাপন সংলাপ" -#: ../pidgin/plugins/pidginrc.c:262 msgid "Select Color" msgstr "রং নির্বাচন করুন" -#: ../pidgin/plugins/pidginrc.c:309 +#, c-format msgid "Select Interface Font" msgstr "ইন্টারফেসের ফন্ট নির্বাচন করুন" -#: ../pidgin/plugins/pidginrc.c:312 #, c-format msgid "Select Font for %s" msgstr "%s-এর জন্য ফন্ট নির্বাচন করুন" -#: ../pidgin/plugins/pidginrc.c:380 msgid "GTK+ Interface Font" msgstr "GTK+ ইন্টারফেসের ফন্ট" -#: ../pidgin/plugins/pidginrc.c:400 msgid "GTK+ Text Shortcut Theme" msgstr "GTK+ পাঠ শর্টকাটের থীম" @@ -19785,49 +14582,38 @@ msgstr "GTK+ পাঠ শর্টকাটের থীম" #. widget_bool_widgets[i]); #. } #. -#: ../pidgin/plugins/pidginrc.c:437 msgid "Interface colors" msgstr "ইন্টারফেসের রং" # tithi -#: ../pidgin/plugins/pidginrc.c:461 msgid "Widget Sizes" msgstr "উইজেট আকারসমূহ" -#: ../pidgin/plugins/pidginrc.c:482 msgid "Fonts" msgstr "ফন্টসমূহ" -#: ../pidgin/plugins/pidginrc.c:506 msgid "Gtkrc File Tools" msgstr "Gtkrc ফাইলের টুলসমূহ" -#: ../pidgin/plugins/pidginrc.c:511 #, c-format msgid "Write settings to %s%sgtkrc-2.0" msgstr "%s%sgtkrc-২.০ এ লিখন বিন্যাসন" -#: ../pidgin/plugins/pidginrc.c:520 msgid "Re-read gtkrc files" msgstr "gtkrc ফাইলগুলো পুনরায় পড়ুন" -#: ../pidgin/plugins/pidginrc.c:558 msgid "Pidgin GTK+ Theme Control" msgstr "পিজিন GTK+ থীম নিয়ন্ত্রণ" -#: ../pidgin/plugins/pidginrc.c:560 ../pidgin/plugins/pidginrc.c:561 msgid "Provides access to commonly used gtkrc settings." msgstr "সাধারণত ব্যবহৃত gtkrc বিন্যাসনসমূহে প্রবেশ অনুমোদন করে।" -#: ../pidgin/plugins/raw.c:175 msgid "Raw" msgstr "নতুন" -#: ../pidgin/plugins/raw.c:177 msgid "Lets you send raw input to text-based protocols." msgstr "আপনাকে পাঠ-ভিত্তিক প্রটোকলসমূহে নতুন ইনপুট পাঠাতে দেয়।" -#: ../pidgin/plugins/raw.c:178 msgid "" "Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit " "'Enter' in the entry box to send. Watch the debug window." @@ -19835,20 +14621,16 @@ msgstr "" "আপনাকে পাঠ-ভিত্তিক প্রটোকলসমূহে (XMPP, MSN, IRC, TOC) নতুন ইনপুট পাঠাতে দেয়। " "পাঠাতে হলে এন্ট্রি বাক্সের 'Enter' চাপুন। ডিবাগ উইন্ডোটি পর্যবেক্ষণ করুন।" -#: ../pidgin/plugins/relnot.c:111 #, c-format msgid "You can upgrade to %s %s today." msgstr "আপনি আজ %s %s এ উন্নততর করতে পারেন।" -#: ../pidgin/plugins/relnot.c:116 msgid "New Version Available" msgstr "নতুন সংস্করণ সহজলভ্য" -#: ../pidgin/plugins/relnot.c:119 msgid "Later" msgstr "পরবর্তীতে" -#: ../pidgin/plugins/relnot.c:120 msgid "Download Now" msgstr "এখন ডাউনলোড করুন" @@ -19858,19 +14640,16 @@ msgstr "এখন ডাউনলোড করুন" #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/relnot.c:199 msgid "Release Notification" msgstr "সংস্করণ প্রজ্ঞাপন" #. *< name #. *< version #. * summary -#: ../pidgin/plugins/relnot.c:202 msgid "Checks periodically for new releases." msgstr "পর্যায়ক্রমিকভাবে নতুন সংস্করণের জন্য পরীক্ষা করুন।" #. * description -#: ../pidgin/plugins/relnot.c:204 msgid "" "Checks periodically for new releases and notifies the user with the " "ChangeLog." @@ -19886,18 +14665,15 @@ msgstr "" #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/sendbutton.c:176 msgid "Send Button" msgstr "পাঠানোর বোতাম" #. *< name #. *< version -#: ../pidgin/plugins/sendbutton.c:178 msgid "Conversation Window Send Button." msgstr "কথোপকথন উইন্ডোর প্রেরণ বোতাম" #. *< summary -#: ../pidgin/plugins/sendbutton.c:179 msgid "" "Adds a Send button to the entry area of the conversation window. Intended " "for when no physical keyboard is present." @@ -19905,71 +14681,55 @@ msgstr "" "কথোপকথন উইন্ডোর এন্ট্রি এলাকায় একটি প্রেরণ বোতাম যোগ করুন। যখন কোনো কীবোর্ড বর্তমান " "নেই এমন উদ্দেশ্যে।" -#: ../pidgin/plugins/spellchk.c:1971 msgid "Duplicate Correction" msgstr "অনুরূপ সংশোধন" -#: ../pidgin/plugins/spellchk.c:1972 msgid "The specified word already exists in the correction list." msgstr "উল্লেখিত শব্দটি ইতোমধ্যে সংশোধন তালিকায় বিদ্যমান।" -#: ../pidgin/plugins/spellchk.c:2185 msgid "Text Replacements" msgstr "পাঠ প্রতিস্থাপন" -#: ../pidgin/plugins/spellchk.c:2208 msgid "You type" msgstr "আপনি টাইপ করুন" -#: ../pidgin/plugins/spellchk.c:2222 msgid "You send" msgstr "আপনি পাঠান" -#: ../pidgin/plugins/spellchk.c:2236 msgid "Whole words only" msgstr "শুধুমাত্র পূর্ণ শব্দ" # tithi -#: ../pidgin/plugins/spellchk.c:2248 msgid "Case sensitive" msgstr "কেস সংবেদনশীল" -#: ../pidgin/plugins/spellchk.c:2274 msgid "Add a new text replacement" msgstr "নতুন পাঠ প্রতিস্থাপন যোগ করুন" -#: ../pidgin/plugins/spellchk.c:2290 msgid "You _type:" msgstr "আপনি টাইপ করুন (_t):" -#: ../pidgin/plugins/spellchk.c:2294 msgid "You _send:" msgstr "আপনি পাঠান (_s):" # tithi #. Created here so it can be passed to whole_words_button_toggled. -#: ../pidgin/plugins/spellchk.c:2297 msgid "_Exact case match (uncheck for automatic case handling)" msgstr "যথাযথ কেস সমন্বয় (স্বয়ংক্রিয় কেস পরিচালনার জন্য অপরীক্ষীত রাখুন) (_E)" -#: ../pidgin/plugins/spellchk.c:2299 msgid "Only replace _whole words" msgstr "শুধুমাত্র পূর্ণ শব্দ প্রতিস্থাপন করুন (_w)" -#: ../pidgin/plugins/spellchk.c:2324 msgid "General Text Replacement Options" msgstr "সাধারণ পাঠ প্রতিস্থাপন পছন্দসমূহ" # tithi -#: ../pidgin/plugins/spellchk.c:2325 msgid "Enable replacement of last word on send" msgstr "পাঠানোর সময় শেষ শব্দের প্রতিস্থাপন সক্রিয় করুন" -#: ../pidgin/plugins/spellchk.c:2358 msgid "Text replacement" msgstr "পাঠ প্রতিস্থাপন" -#: ../pidgin/plugins/spellchk.c:2360 ../pidgin/plugins/spellchk.c:2361 msgid "Replaces text in outgoing messages according to user-defined rules." msgstr "ব্যবহারকারী-সুনির্দিষ্ট নীতি অনুযায়ী বহির্গমন বার্তাসমুহে পাঠ প্রতিস্থাপন করে।" @@ -19979,7 +14739,6 @@ msgstr "ব্যবহারকারী-সুনির্দিষ্ট ন #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/ticker/ticker.c:74 ../pidgin/plugins/ticker/ticker.c:356 msgid "Buddy Ticker" msgstr "বন্ধু চিহ্নিতকারী" @@ -19987,11 +14746,9 @@ msgstr "বন্ধু চিহ্নিতকারী" #. *< 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 "বন্ধুতালিকার একটি অনুভূমিক স্ক্রলিং সংস্করণ।" -#: ../pidgin/plugins/timestamp.c:135 msgid "Display Timestamps Every" msgstr "প্রত্যেক টাইমস্টাম্প প্রদর্শন করুন" @@ -20001,7 +14758,6 @@ msgstr "প্রত্যেক টাইমস্টাম্প প্রদ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/timestamp.c:200 msgid "Timestamp" msgstr "টাইমস্ট্যাম্প" @@ -20009,46 +14765,36 @@ msgstr "টাইমস্ট্যাম্প" #. *< name #. *< version #. * summary -#: ../pidgin/plugins/timestamp.c:203 msgid "Display iChat-style timestamps" msgstr "আই-আড্ডা-শৈলীর টাইমস্ট্যাম্প প্রদর্শন করুন" # fix me #. * description -#: ../pidgin/plugins/timestamp.c:205 msgid "Display iChat-style timestamps every N minutes." msgstr "প্রতি N মিনিট পর আই-আড্ডা-শৈলীর টাইমস্ট্যাম্প প্রদর্শন করুন।" # tithi -#: ../pidgin/plugins/timestamp_format.c:23 msgid "Timestamp Format Options" msgstr "টাইমস্ট্যাম্প বিন্যাসের পছন্দসমূহ" # tithi -#: ../pidgin/plugins/timestamp_format.c:26 +#, c-format msgid "_Force 24-hour time format" msgstr "২৪-ঘন্টার সময় বিন্যাস নির্ধারণ করুন (_F)" -#: ../pidgin/plugins/timestamp_format.c:33 msgid "Show dates in..." msgstr "এ তারিখ প্রদর্শন করুন..." -#: ../pidgin/plugins/timestamp_format.c:38 msgid "Co_nversations:" msgstr "কথোপকথন (_n):" -#: ../pidgin/plugins/timestamp_format.c:40 -#: ../pidgin/plugins/timestamp_format.c:49 msgid "For delayed messages" msgstr "বিলম্বিত বার্তাসমূহের জন্য" # tithi -#: ../pidgin/plugins/timestamp_format.c:41 -#: ../pidgin/plugins/timestamp_format.c:50 msgid "For delayed messages and in chats" msgstr "বিলম্বিত বার্তাসমূহের জন্য এবং আড্ডায়" -#: ../pidgin/plugins/timestamp_format.c:47 msgid "_Message Logs:" msgstr "বার্তার কার্যবিবরণী (_M):" @@ -20059,7 +14805,6 @@ msgstr "বার্তার কার্যবিবরণী (_M):" #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/timestamp_format.c:151 msgid "Message Timestamp Formats" msgstr "বার্তার টাইমস্ট্যাম্প বিন্যাসসমূহ" @@ -20067,13 +14812,11 @@ msgstr "বার্তার টাইমস্ট্যাম্প বিন #. *< name #. *< version #. * summary -#: ../pidgin/plugins/timestamp_format.c:154 msgid "Customizes the message timestamp formats." msgstr "বার্তার টাইমস্টাম্প বিন্যাসসমূহ পছন্দসই বিন্যাস করে।" # tithi #. * description -#: ../pidgin/plugins/timestamp_format.c:156 msgid "" "This plugin allows the user to customize conversation and logging message " "timestamp formats." @@ -20081,44 +14824,32 @@ msgstr "" "এই প্লাগইন ব্য়বহারকারীকে কথোপকথন এবং যুক্তকরণ বার্তার টাইমস্টাম্প বিন্যাসসমূহ পছন্দসই " "বিন্যাস করার অনুমতি দেয়।" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:175 -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:598 -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:645 msgid "Opacity:" msgstr "জড়তা:" #. IM Convo trans options -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:562 msgid "IM Conversation Windows" msgstr "তাৎক্ষণিক বার্তার কথোপকথন উইন্ডোজ" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:563 msgid "_IM window transparency" msgstr "তাৎক্ষণিক বার্তা উইন্ডোর স্বচ্ছতা (_I)" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:577 msgid "_Show slider bar in IM window" msgstr "তাৎক্ষণিক বার্তার উইন্ডোতে স্লাইডার বার প্রদর্শন করুন (_S)" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:584 msgid "Remove IM window transparency on focus" msgstr "ফোকাসে আইএম উইন্ডোর স্বচ্ছতা অপসারন করুন" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:587 -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:635 msgid "Always on top" msgstr "সব সময় উপরে" #. Buddy List trans options -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:619 msgid "Buddy List Window" msgstr "বন্ধু তালিকার উইন্ডো" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:620 msgid "_Buddy List window transparency" msgstr "বন্ধু তালিকা উইন্ডোর স্বচ্ছতা (_B)" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:633 msgid "Remove Buddy List window transparency on focus" msgstr "ফোকাসে বন্ধু তালিকার উইন্ডোর স্বচ্ছতা অপসারণ করুন" @@ -20128,19 +14859,16 @@ msgstr "ফোকাসে বন্ধু তালিকার উইন্ড #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:693 msgid "Transparency" msgstr "স্বচ্ছতা" #. *< name #. *< version #. * summary -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:696 msgid "Variable Transparency for the buddy list and conversations." msgstr "বন্ধু তালিকা ও কথোপকথনের জন্য ভেরিয়েবল স্বচ্ছতা।" #. * description -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:698 msgid "" "This plugin enables variable alpha transparency on conversation windows and " "the buddy list.\n" @@ -20151,55 +14879,40 @@ msgstr "" "\n" "* নোট: এই প্লাগইন Win2000 বা অপেক্ষাকৃত প্রয়োজন।" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:303 msgid "GTK+ Runtime Version" msgstr "GTK+ চলমান সংস্করণ" #. Autostart -#: ../pidgin/plugins/win32/winprefs/winprefs.c:311 msgid "Startup" msgstr "সূচনা" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:312 #, c-format msgid "_Start %s on Windows startup" msgstr "উইন্ডোজ শুরুর সময় %s কে চালু করুন (_S)" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:327 msgid "_Dockable Buddy List" msgstr "ডকযোগ্য বন্ধু তালিকা (_D)" #. Blist On Top -#: ../pidgin/plugins/win32/winprefs/winprefs.c:331 msgid "_Keep Buddy List window on top:" msgstr "বন্ধু তালিকার উইন্ডো উপরে রাখুন (_K):" #. XXX: Did this ever work? -#: ../pidgin/plugins/win32/winprefs/winprefs.c:336 msgid "Only when docked" msgstr "শুধুমাত্র যখন ডক করে" -# fix me -#: ../pidgin/plugins/win32/winprefs/winprefs.c:341 -msgid "_Flash window when chat messages are received" -msgstr "আড্ডার বার্তাসমূহ গ্রহণ করলে উইন্ডো ফ্ল্যাশ দিন (_F)" - -#: ../pidgin/plugins/win32/winprefs/winprefs.c:371 msgid "Windows Pidgin Options" msgstr "উইন্ডোজের পিজিন পছন্দসমূহ" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:373 msgid "Options specific to Pidgin for Windows." msgstr "উইন্ডোজের জন্য পিজিনে উল্লেখিত পছন্দসমূহ।" # fix me -#: ../pidgin/plugins/win32/winprefs/winprefs.c:374 msgid "" "Provides options specific to Pidgin for Windows , such as buddy list docking." msgstr "" "উইন্ডোজের জন্য পিজিনে উল্লেখিত পছন্দগুলো প্রদান করে , যেমন বন্ধু তালিকা দেখানো।" -#: ../pidgin/plugins/xmppconsole.c:670 msgid "<font color='#777777'>Logged out.</font>" msgstr "<font color='#777777'>লগ আউট হয়েছে।</font>" @@ -20209,30 +14922,23 @@ msgstr "<font color='#777777'>লগ আউট হয়েছে।</font>" #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/xmppconsole.c:749 ../pidgin/plugins/xmppconsole.c:844 -#: ../pidgin/plugins/xmppconsole.c:863 msgid "XMPP Console" msgstr "XMPP কনসোল" -#: ../pidgin/plugins/xmppconsole.c:756 msgid "Account: " msgstr "একাউন্ট:" -#: ../pidgin/plugins/xmppconsole.c:783 msgid "<font color='#777777'>Not connected to XMPP</font>" msgstr "<font color='#777777'>XMPP এর সাথে সংযুক্ত নয়</font>" # tithi -#: ../pidgin/plugins/xmppconsole.c:793 msgid "Insert an <iq/> stanza." msgstr "একটি <iq/> পংক্তি যুক্ত করুন।" # tithi -#: ../pidgin/plugins/xmppconsole.c:802 msgid "Insert a <presence/> stanza." msgstr "একটি <presence/> পংক্তি প্রবেশ করান।" -#: ../pidgin/plugins/xmppconsole.c:811 msgid "Insert a <message/> stanza." msgstr "একটি <message/> পংক্তি প্রবেশ করান।" @@ -20240,16 +14946,21 @@ msgstr "একটি <message/> পংক্তি প্রবেশ করা #. *< name #. *< version #. * summary -#: ../pidgin/plugins/xmppconsole.c:866 msgid "Send and receive raw XMPP stanzas." msgstr "নতুন XMPP পংক্তিগুলো পাঠান এবং গ্রহণ করুন।" # tithi #. * description -#: ../pidgin/plugins/xmppconsole.c:868 msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "এই প্লাগিনটি XMPP সার্ভার বা ক্লায়েন্ট ডিবাগ করার জন্য কার্যকর।" +#~ msgid "Unable to retrieve MSN Address Book" +#~ msgstr "MSN ঠিকানা বই পুনরূদ্ধারে ব্যর্থ হয়েছে" + +# fix me +#~ msgid "_Flash window when chat messages are received" +#~ msgstr "আড্ডার বার্তাসমূহ গ্রহণ করলে উইন্ডো ফ্ল্যাশ দিন (_F)" + # tithi #~ msgid "" #~ "You may be disconnected shortly. You may want to use TOC until this is " @@ -3,7 +3,7 @@ # Copyright (C) unknown, Robert Millan <zeratul2@wanadoo.es> # Copyright (C) December 2003 (from 2003-12-12 until 2003-12-18), # January (2004-01-07,12), Xan <dxpublica@telefonica.net> -# Copyright (c) 2004, 2005, 2006, 2007, 2008 +# Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009 # Josep Puigdemont i Casamajó <josep.puigdemont@gmail.com> # # This file is distributed under the same license as the Pidgin package. @@ -33,8 +33,8 @@ msgid "" msgstr "" "Project-Id-Version: Pidgin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-01-05 01:42+0100\n" -"PO-Revision-Date: 2009-01-05 20:36+0100\n" +"POT-Creation-Date: 2009-02-22 10:28+0100\n" +"PO-Revision-Date: 2009-02-22 15:18+0100\n" "Last-Translator: Josep Puigdemont i Casamajó <josep.puigdemont@gmail.com>\n" "Language-Team: Catalan <tradgnome@softcatala.net>\n" "MIME-Version: 1.0\n" @@ -57,7 +57,7 @@ msgid "" "Usage: %s [OPTION]...\n" "\n" " -c, --config=DIR use DIR for config files\n" -" -d, --debug print debugging messages to stdout\n" +" -d, --debug print debugging messages to stderr\n" " -h, --help display this help and exit\n" " -n, --nologin don't automatically login\n" " -v, --version display the current version and exit\n" @@ -66,7 +66,8 @@ msgstr "" "Forma d'ús: %s [OPCIÓ]...\n" "\n" " -c, --config=DIR utilitza DIR per als fitxers de configuració\n" -" -d, --debug mostra missatges de depuració a la sortida estàndard\n" +" -d, --debug mostra missatges de depuració a la sortida d'error\n" +" estàndard \n" " -h, --help mostra aquesta ajuda i surt\n" " -n, --nologin no entra automàticament\n" " -v, --version mostra la versió actual i surt\n" @@ -1198,7 +1199,6 @@ msgstr "Minuts abans de canviar l'estat" msgid "Change status to" msgstr "Canvia l'estat a" -#. Conversations msgid "Conversations" msgstr "Converses" @@ -1522,7 +1522,6 @@ msgstr "" "Quan s'obri una nova conversa aquest connector inserirà la darrera conversa " "en la conversa actual." -#, c-format msgid "Online" msgstr "En línia" @@ -1959,7 +1958,6 @@ msgstr "S'està iniciant la transferència de %s de %s?" msgid "Transfer of file %s complete" msgstr "S'ha completat la transferència del fitxer %s" -#, c-format msgid "File transfer complete" msgstr "S'ha completat la transferència del fitxer" @@ -1967,7 +1965,6 @@ msgstr "S'ha completat la transferència del fitxer" msgid "You canceled the transfer of %s" msgstr "Heu cancel·lat la transferència de %s" -#, c-format msgid "File transfer cancelled" msgstr "S'ha cancel·lat la transferència del fitxer" @@ -2168,7 +2165,6 @@ msgstr "(%s) %s <RESPOSTA-AUTOMÀTICA>: %s\n" msgid "You are using %s, but this plugin requires %s." msgstr "Esteu emprant %s, però aquest connector requereix %s." -#, c-format msgid "This plugin has not defined an ID." msgstr "Aquest connector no ha definit cap ID." @@ -2866,7 +2862,6 @@ msgstr "" "No s'ha pogut establir cap connexió amb el servidor local de mDNS. S'està " "executant?" -#. Creating the options for the protocol msgid "First name" msgstr "Nom" @@ -2899,6 +2894,10 @@ msgstr "Connector per al protocol Bonjour" msgid "Purple Person" msgstr "Persona porpra" +#. Creating the options for the protocol +msgid "Local Port" +msgstr "Port local" + msgid "Bonjour" msgstr "Bonjour" @@ -3063,7 +3062,6 @@ msgstr "Disponible" #. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for #. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message #. Away stuff -#, c-format msgid "Away" msgstr "Absent" @@ -3961,7 +3959,6 @@ msgstr "Xerraire" msgid "Extended Away" msgstr "Absent des de fa una bona estona" -#, c-format msgid "Do Not Disturb" msgstr "No molesteu" @@ -4714,9 +4711,6 @@ msgstr "Accions" msgid "Select an action" msgstr "Seleccioneu una acció" -msgid "Unable to retrieve MSN Address Book" -msgstr "No s'ha pogut obtenir la llibreta d'adreces MSN" - #. 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 @@ -6192,7 +6186,6 @@ msgstr "" msgid "Error. SSL support is not installed." msgstr "Error. No hi ha instal·lades les biblioteques per a SSL." -#, c-format msgid "This conference has been closed. No more messages can be sent." msgstr "S'ha tancat aquesta conferència. No s'hi poden enviar més missatges." @@ -6459,23 +6452,18 @@ msgstr "Càmera" msgid "Screen Sharing" msgstr "Compartició de pantalla" -#, c-format msgid "Free For Chat" msgstr "Lliure per parlar" -#, c-format msgid "Not Available" msgstr "No disponible" -#, c-format msgid "Occupied" msgstr "Ocupat" -#, c-format msgid "Web Aware" msgstr "Conscient de la web" -#, c-format msgid "Invisible" msgstr "Invisible" @@ -7039,6 +7027,7 @@ msgstr "C_onnecta" msgid "Get AIM Info" msgstr "Obtén informació de AIM" +#. We only do this if the user is in our buddy list msgid "Edit Buddy Comment" msgstr "Edita el comentari sobre l'amic" @@ -7150,7 +7139,6 @@ msgstr "" msgid "Attempting to connect to %s:%hu." msgstr "S'està intentant connectar amb %s:%hu." -#, c-format msgid "Attempting to connect via proxy server." msgstr "S'està intentant connectar a través d'un servidor intermediari." @@ -7695,6 +7683,9 @@ msgstr "Mostra els avisos del servidor" msgid "Show server news" msgstr "Mostra les notícies del servidor" +msgid "Show chat room when msg comes" +msgstr "Mostra la sala de xat quan hi arribin missatges" + # FIXME: keep alive -> permanència msgid "Keep alive interval (seconds)" msgstr "Interval de permanència (en segons)" @@ -11454,6 +11445,9 @@ msgstr "Lituà" msgid "Macedonian" msgstr "Macedoni" +msgid "Mongolian" +msgstr "Mongol" + msgid "Bokmål Norwegian" msgstr "Noruec bokmål" @@ -11572,8 +11566,30 @@ msgstr "" "<BR><BR>" #, c-format -msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" -msgstr "<FONT SIZE=\"4\">IRC:</FONT> #pidgin a irc.freenode.net<BR><BR>" +msgid "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">PMF:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">Ajuda per correu electrònic:</FONT> <A HREF=\"mailto:" +"support@pidgin.im\">support@pidgin.im</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgstr "" +"<FONT SIZE=\"4\">Canal d'IRC:</FONT> #pidgin a irc.freenode.net<BR><BR>" + +#, c-format +msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" +msgstr "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" msgid "Current Developers" msgstr "Desenvolupadors actuals" @@ -12242,6 +12258,12 @@ msgstr "" msgid "Pidgin" msgstr "Pidgin" +#, c-format +msgid "Exiting because another libpurple client is already running.\n" +msgstr "" +"Ara se sortirà atès que ja hi ha un altre client del libpurple executant-" +"se.\n" + msgid "Open All Messages" msgstr "Obre tots els missatges" @@ -12590,6 +12612,10 @@ msgstr "Servidor intermediari" msgid "No proxy" msgstr "Sense servidor intermediari" +#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings +msgid "Use remote DNS with SOCKS4 proxies" +msgstr "Empra DNS remot amb servidors intermediàris SOCKS4" + msgid "_User:" msgstr "_Usuari:" @@ -14050,9 +14076,6 @@ msgstr "_Conserva la finestra d'amics per sobre:" msgid "Only when docked" msgstr "Només si està acoblada" -msgid "_Flash window when chat messages are received" -msgstr "_Fes que la finestra parpellegi quan arribin missatges de xat" - msgid "Windows Pidgin Options" msgstr "Opcions del Pidgin per al Windows" @@ -14103,6 +14126,12 @@ msgstr "Envia i rep blocs XMPP en brut." msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "Aquest connector és útil per a depurar servidors i clients XMPP." +#~ msgid "Unable to retrieve MSN Address Book" +#~ msgstr "No s'ha pogut obtenir la llibreta d'adreces MSN" + +#~ msgid "_Flash window when chat messages are received" +#~ msgstr "_Fes que la finestra parpellegi quan arribin missatges de xat" + #~ msgid "" #~ "You may be disconnected shortly. You may want to use TOC until this is " #~ "fixed. Check %s for updates." @@ -1,25 +1,32 @@ -# Pidgin Danish translation -# Copyright (C) 2003-2006, Morten Brix Pedersen <morten@wtf.dk> -# Copyright (C) 2007-2009, Peter Bach <bach.peter@gmail.com> -# +# Pidgin Danish translation. +# Copyright (C) 2003-2009 Free Software Foundation, Inc. # This file is distributed under the same license as the Pidgin package. +# Morten Brix Pedersen <morten@wtf.dk>, 2003-2006 +# Peter Bach <bach.peter@gmail.com>, 2007-2009 # # Konventioner: # Buddy list, Contact list = venneliste # Buddy pounce = overvågning (som i venneovervågning) # Away = fravær eller fraværende +# Online = tilkoblet +# Offline = afkoblet +# Join = tilslutte # IM / IMs = besked / beskeder # Mouse Gesture = Musebevægelse # Friendly Name (MSN protokollen) = synligt navn # Tray Icon = Statusikon # Ban = Udvis +# Signature = underskrift +# Link = henvisning +# web = internet +# token = nøgle (netværkstermologi) # msgid "" msgstr "" -"Project-Id-Version: Pidgin 2.0.0\n" +"Project-Id-Version: Pidgin 2.5.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-02-22 13:16-0500\n" -"PO-Revision-Date: 2009-02-22 14:04+0100\n" +"PO-Revision-Date: 2009-02-23 18:17+0100\n" "Last-Translator: Peter Bach <bach.peter@gmail.com>\n" "Language-Team: Danish <dansk@dansk-gruppen.dk>\n" "MIME-Version: 1.0\n" @@ -50,21 +57,15 @@ msgstr "" "%s\n" "Brug: %s [TILVALG]...\n" "\n" -" -c, --config=MAPPE brug MAPPE for opsætningsfiler\n" +" -c, --config=DIR brug DIR for opsætningsfiler\n" " -d, --debug udskriv fejlsøgningsbeskeder til stderr\n" -" -h, --help vis denne hjælp og afslut\n" +" -h, --help vis denne hjælp og afslut\n" " -n, --nologin log ikke ind automatisk\n" " -v, --version vis nuværende version og afslut\n" #, c-format -msgid "" -"%s encountered errors migrating your settings from %s to %s. Please " -"investigate and complete the migration by hand. Please report this error at " -"http://developer.pidgin.im" -msgstr "" -"%s opdagede fejl ved migrering af dine indstillinger fra %s til %s. Undersøg " -"og afslut migreringen manuelt. Venligst rapporter denne fejl på http://" -"developer.pidgin.im" +msgid "%s encountered errors migrating your settings from %s to %s. Please investigate and complete the migration by hand. Please report this error at http://developer.pidgin.im" +msgstr "%s opdagede fejl ved migrering af dine indstillinger fra %s til %s. Undersøg og færdiggør migreringen manuelt. Venligst rapportér denne fejl på http://developer.pidgin.im" msgid "Error" msgstr "Fejl" @@ -169,7 +170,7 @@ msgid "" "Online: %d\n" "Total: %d" msgstr "" -"Opkoblet: %d\n" +"Tilkoblet: %d\n" "Total: %d" #, c-format @@ -197,7 +198,7 @@ msgid "You must select an account." msgstr "Du skal vælge en konto." msgid "The selected account is not online." -msgstr "Den valgte konto er ikke online." +msgstr "Den valgte konto er ikke tilkoblet." msgid "Error adding buddy" msgstr "Fejl ved tilføjelse af ven" @@ -221,7 +222,7 @@ msgid "Please enter buddy information." msgstr "Indtast venne-information." msgid "Chats" -msgstr "Chat-rum" +msgstr "Samtalerum" #. Extract their Name and put it in msgid "Name" @@ -234,10 +235,10 @@ msgid "Group" msgstr "Gruppe" msgid "Auto-join" -msgstr "Auto-Deltag" +msgstr "Auto-tilslut" msgid "Add Chat" -msgstr "Tilføj chat" +msgstr "Tilføj samtale" msgid "You can edit more information from the context menu later." msgstr "Du kan redigere flere informationer fra højreklik-menuen senere." @@ -255,7 +256,7 @@ msgid "Enter the name of the group" msgstr "Indtast navnet på gruppen" msgid "Edit Chat" -msgstr "Redigér chat" +msgstr "Redigér samtale" msgid "Please Update the necessary fields." msgstr "Venligst opdatér de nødvendige felter." @@ -285,7 +286,7 @@ msgid "Blocked" msgstr "Blokeret" msgid "Show when offline" -msgstr "Vis når offline" +msgstr "Vis når afkoblet" #, c-format msgid "Please enter the new name for %s" @@ -295,18 +296,16 @@ msgid "Rename" msgstr "Omdøb" msgid "Set Alias" -msgstr "Sæt alias" +msgstr "Angiv alias" msgid "Enter empty string to reset the name." msgstr "Indtast tom streng for at nulstille navnet." msgid "Removing this contact will also remove all the buddies in the contact" -msgstr "" -"Ved at fjerne denne kontakt vil du også fjerne alle vennerne i denne kontakt" +msgstr "Ved at fjerne denne kontakt vil du også fjerne alle vennerne i denne kontakt" msgid "Removing this group will also remove all the buddies in the group" -msgstr "" -"Ved at fjerne denne gruppe vil du også fjerne alle vennerne i denne gruppe" +msgstr "Ved at fjerne denne gruppe vil du også fjerne alle vennerne i denne gruppe" #, c-format msgid "Are you sure you want to remove %s?" @@ -354,18 +353,16 @@ msgid "Plugins" msgstr "Udvidelsesmoduler" msgid "Block/Unblock" -msgstr "Blokér/Afblokér" +msgstr "Blokér/frigiv" msgid "Block" msgstr "Blokér" msgid "Unblock" -msgstr "Afblokér" +msgstr "Frigiv" -msgid "" -"Please enter the username or alias of the person you would like to Block/" -"Unblock." -msgstr "Indtast brugernavnet eller alias på personen du vil blokere/afblokere." +msgid "Please enter the username or alias of the person you would like to Block/Unblock." +msgstr "Indtast brugernavnet eller alias på personen du vil blokere/frigive." #. Not multiline #. Not masked? @@ -383,39 +380,35 @@ msgid "Channel" msgstr "Kanal" msgid "Join a Chat" -msgstr "Deltag i en chat" +msgstr "Tilslut en samtale" msgid "Please enter the name of the chat you want to join." -msgstr "Indtast navnet på den chat du vil tilslutte." +msgstr "Indtast navnet på den samtale du vil tilslutte." msgid "Join" -msgstr "Deltag" +msgstr "Tilslut" -msgid "" -"Please enter the username or alias of the person whose log you would like to " -"view." -msgstr "" -"Indtast brugernavnet eller alias på den person, hvis log du gerne vil " -"gennemse." +msgid "Please enter the username or alias of the person whose log you would like to view." +msgstr "Indtast brugernavnet eller alias på den person, hvis log du gerne vil gennemse." #. Create the "Options" frame. msgid "Options" msgstr "Indstillinger" msgid "Send IM..." -msgstr "Send kvik-besked..." +msgstr "Send besked..." msgid "Block/Unblock..." -msgstr "Blokér/Afblokér..." +msgstr "Blokér/frigiv..." msgid "Join Chat..." -msgstr "Tilslut chat..." +msgstr "Tilslut samtale..." msgid "View Log..." msgstr "Vis log..." msgid "View All Logs" -msgstr "Vis alle logge" +msgstr "Vis alle logger" msgid "Show" msgstr "Vis" @@ -424,7 +417,7 @@ msgid "Empty groups" msgstr "Tomme grupper" msgid "Offline buddies" -msgstr "Offline venner" +msgstr "Afkoblede venner" msgid "Sort" msgstr "Sortér" @@ -442,7 +435,7 @@ msgid "Buddy" msgstr "Ven" msgid "Chat" -msgstr "Chat" +msgstr "Samtale" msgid "Grouping" msgstr "Gruppering" @@ -478,7 +471,7 @@ msgid "" "Export to file %s failed.\n" "Check that you have write permission to the target path\n" msgstr "" -"Fejl ved eksportering af filen %s.\n" +"Fejl ved eksportering til filen %s.\n" "Kontroller at du har skriverettigheder til målstien\n" msgid "Certificate Export Error" @@ -511,7 +504,7 @@ msgstr "SSL-værtscertifikat" #, c-format msgid "Really delete certificate for %s?" -msgstr "Vil du slette certifikat for %s?" +msgstr "Vil du slette certifikat til %s?" msgid "Confirm certificate delete" msgstr "Bekræft sletning af certifikat" @@ -542,39 +535,32 @@ msgstr "%s afbrudt." msgid "" "%s\n" "\n" -"Finch will not attempt to reconnect the account until you correct the error " -"and re-enable the account." +"Finch will not attempt to reconnect the account until you correct the error and re-enable the account." msgstr "" "%s\n" " \n" -"Finch vil ikke forsøge at genforbinde til kontoen før du retter fejlen og " -"genaktiverer kontoen." +"Finch vil ikke forsøge at genforbinde til kontoen før du retter fejlen og genaktiverer kontoen." msgid "Re-enable Account" msgstr "Slå konto til igen" -msgid "" -"The account has disconnected and you are no longer in this chat. You will be " -"automatically rejoined in the chat when the account reconnects." -msgstr "" -"Kontoen har afbrudt og du er ikke længere i denne chat. Du vil automatisk " -"blive tilsluttet til chatten igen når kontoen genforbinder." +msgid "The account has disconnected and you are no longer in this chat. You will be automatically rejoined in the chat when the account reconnects." +msgstr "Kontoen har afbrudt og du er ikke længere i denne samtale. Du vil automatisk blive tilsluttet til samtalen igen når kontoen genforbinder." msgid "No such command." msgstr "Ingen kommando ved det navn." msgid "Syntax Error: You typed the wrong number of arguments to that command." -msgstr "" -"Syntaksfejl: Du indtastede det forkert antal argumenter til den kommando." +msgstr "Syntaksfejl: Du indtastede det forkert antal argumenter til den kommando." msgid "Your command failed for an unknown reason." msgstr "Din kommando fejlede pga. en ukendt årsag." msgid "That command only works in chats, not IMs." -msgstr "Den kommando virker kun i chats, ikke i samtalevinduer." +msgstr "Den kommando virker kun i samtaler, ikke i beskeder." msgid "That command only works in IMs, not chats." -msgstr "Den besked virker kun i samtalevinduer, ikke i chats." +msgstr "Den besked virker kun i beskeder, ikke i samtaler." msgid "That command doesn't work on this protocol." msgstr "Den kommando virker ikke med denne protokol." @@ -599,15 +585,13 @@ msgstr "" "%s skriver..." msgid "You have left this chat." -msgstr "Du har forladt denne chat." +msgstr "Du har forladt denne samtale." msgid "Logging started. Future messages in this conversation will be logged." msgstr "Logning startet. Fremtidige beskeder i denne samtale vil blive logget." -msgid "" -"Logging stopped. Future messages in this conversation will not be logged." -msgstr "" -"Logning stoppet. Fremtidige beskeder i denne samtale vil ikke blive logget." +msgid "Logging stopped. Future messages in this conversation will not be logged." +msgstr "Logning stoppet. Fremtidige beskeder i denne samtale vil ikke blive logget." msgid "Send To" msgstr "Send til" @@ -641,7 +625,7 @@ msgid "Invite..." msgstr "Invitér..." msgid "Enable Logging" -msgstr "Aktiver logning" +msgstr "Aktivér logning" msgid "Enable Sounds" msgstr "Aktivér lyde" @@ -669,34 +653,21 @@ msgstr "" "De følgende kommandoer er tilgængelige i dette sammenhæng:\n" #, c-format -msgid "" -"%s is not a valid message class. See '/help msgcolor' for valid message " -"classes." -msgstr "" -"%s er ikke en gyldig beskedklasse. Se \"/help msgcolor\" for gyldige " -"beskedklasser." +msgid "%s is not a valid message class. See '/help msgcolor' for valid message classes." +msgstr "%s er ikke en gyldig beskedklasse. Se \"/help msgcolor\" for gyldige beskedklasser." #, c-format msgid "%s is not a valid color. See '/help msgcolor' for valid colors." msgstr "%s er ikke gyldig farve. Se \"/help msgcolor\" for gyldige farver." -msgid "" -"say <message>: Send a message normally as if you weren't using a " -"command." -msgstr "" -"say <besked>: Send en besked som normalt hvis du ikke brugte en " -"kommando." +msgid "say <message>: Send a message normally as if you weren't using a command." +msgstr "say <besked>: Send en besked som normalt hvis du ikke brugte en kommando." msgid "me <action>: Send an IRC style action to a buddy or chat." -msgstr "" -"me <handling>: Send en IRC-lignende handling til en ven eller en chat." +msgstr "me <handling>: Send en IRC-lignende handling til en ven eller samtale." -msgid "" -"debug <option>: Send various debug information to the current " -"conversation." -msgstr "" -"edbug <tilvalg>: Send forskellige fejlsøgningsoplysninger til den " -"nuværende samtale." +msgid "debug <option>: Send various debug information to the current conversation." +msgstr "edbug <tilvalg>: Send forskellige fejlsøgningsoplysninger til den nuværende samtale." msgid "clear: Clears the conversation scrollback." msgstr "clear: Rydder samtalevinduet for tekst." @@ -705,38 +676,28 @@ msgid "help <command>: Help on a specific command." msgstr "help <kommando>: Hjælp til en specifik kommando." msgid "users: Show the list of users in the chat." -msgstr "brugere: Vis listen over brugere i chatten." +msgstr "users: Vis listen over brugere i samtalen." msgid "plugins: Show the plugins window." -msgstr "udvidelsesmoduler: Vis udvidelsesmodul-vinduet." +msgstr "plugins: Vis vinduet for udvidelsesmoduler." msgid "buddylist: Show the buddylist." -msgstr "venneliste: Vis vennelisten." +msgstr "buddylist: Vis vennelisten." msgid "accounts: Show the accounts window." -msgstr "konti: Vis konto-vinduet." +msgstr "accounts: Vis konto-vinduet." msgid "debugwin: Show the debug window." -msgstr "fejlsøgningsvin: Vis fejlsøgningsvinduet." +msgstr "debugwin: Vis fejlsøgningsvinduet." msgid "prefs: Show the preference window." -msgstr "indst: Vis indstillingsvinduet." +msgstr "prefs: Vis indstillingsvinduet." msgid "statuses: Show the savedstatuses window." -msgstr "status: Vis gemte statuser-vinduet." +msgstr "statuses: Vis gemte statuser-vinduet." -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 <klasse> <forgrund> <baggrund;: Sæt farven for de " -"forskellige klasser af beskeder i samtalevinduet.<br> <klasse>: " -"modtag, send, markér, handling, tidsstempel<br> <forgrund/" -"baggrund>: sort, rød, grøn, blå, hvid, grå, mørkegrå, magenta, cyan, " -"standard<br><br>EKSEMPEL:<br> msgcolor send cyan standard" +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 <klasse> <forgrund> <baggrund;: Sæt farven for de forskellige klasser af beskeder i samtalevinduet.<br> <klasse>: modtag, send, markér, handling, tidsstempel<br> <forgrund/baggrund>: sort, rød, grøn, blå, hvid, grå, mørkegrå, magenta, cyan, standard<br><br>EKSEMPEL:<br> msgcolor send cyan standard" msgid "Unable to open file." msgstr "Kunne ikke åbne fil." @@ -806,7 +767,7 @@ msgstr "Fejlede" #, c-format msgid "%.2f KiB/s" -msgstr "%.2f KB/s" +msgstr "%.2f KiB/s" msgid "Sent" msgstr "Sendt" @@ -838,25 +799,14 @@ msgstr "Samtaler med %s på %s" msgid "%B %Y" msgstr "%B %Y" -msgid "" -"System events will only be logged if the \"Log all status changes to system " -"log\" preference is enabled." -msgstr "" -"System handlinger vil kun blive logget hvis \"Log alle status ændringer til " -"system log\" indstillingen er slået til." +msgid "System events will only be logged if the \"Log all status changes to system log\" preference is enabled." +msgstr "System handlinger vil kun blive logget hvis \"Log alle status ændringer til system log\" indstillingen er slået til." -msgid "" -"Instant messages will only be logged if the \"Log all instant messages\" " -"preference is enabled." -msgstr "" -"Beskeder vil kun blive logget hvis \"Log alle beskeder\" indstillingen er " -"slået til." +msgid "Instant messages will only be logged if the \"Log all instant messages\" preference is enabled." +msgstr "Beskeder vil kun blive logget hvis \"Log alle beskeder\" indstillingen er slået til." -msgid "" -"Chats will only be logged if the \"Log all chats\" preference is enabled." -msgstr "" -"Chats vil kun blive logget hvis \"Log alle chats\" indstillingen er slået " -"til." +msgid "Chats will only be logged if the \"Log all chats\" preference is enabled." +msgstr "Samtaler vil kun blive logget hvis \"Log alle samtaler\" indstillingen er slået til." msgid "No logs were found" msgstr "Ingen logs blev fundet" @@ -901,7 +851,7 @@ msgstr[0] "%s (%s) har %d ny besked." msgstr[1] "%s (%s) har %d nye beskeder." msgid "New Mail" -msgstr "Ny email" +msgstr "Ny post" #, c-format msgid "Info for %s" @@ -929,7 +879,7 @@ msgid "loading plugin failed" msgstr "fejl ved indlæsning af udvidelsesmodul" msgid "unloading plugin failed" -msgstr "afmontering af udvidelsesmodul fejlede" +msgstr "udlæsning af udvidelsesmodul fejlede" #, c-format msgid "" @@ -951,7 +901,7 @@ msgid "Plugin need to be loaded before you can configure it." msgstr "Udvidelsesmodul skal indlæses før du kan konfigurere det." msgid "No configuration options for this plugin." -msgstr "Ingen konfigurationsmuligheder for dette udvidelsesmodul." +msgstr "Ingen konfigurationsindstillinger for dette udvidelsesmodul." msgid "Error loading plugin" msgstr "Fejl ved indlæsning af udvidelsesmodul" @@ -959,16 +909,14 @@ msgstr "Fejl ved indlæsning af udvidelsesmodul" msgid "The selected file is not a valid plugin." msgstr "Den valgte fil er ikke et gyldigt udvidelsesmodul." -msgid "" -"Please open the debug window and try again to see the exact error message." -msgstr "" -"Åben fejlsøgningsvinduet og prøv igen for at se den eksakte fejlbesked." +msgid "Please open the debug window and try again to see the exact error message." +msgstr "Åben fejlsøgningsvinduet og prøv igen for at se den eksakte fejlbesked." msgid "Select plugin to install" msgstr "Vælg udvidelsesmodul som skal installeres" msgid "You can (un)load plugins from the following list." -msgstr "Du kan (af)koble udvidelsesmoduler fra følgende liste." +msgstr "Du kan (ud)læse udvidelsesmoduler fra følgende liste." msgid "Install Plugin..." msgstr "Installér udvidelsesmodul..." @@ -1045,7 +993,7 @@ msgid "Open an IM window" msgstr "Åbn et beskedvindue" msgid "Pop up a notification" -msgstr "Popup en påmindelse" +msgstr "Pop op en påmindelse" msgid "Send a message" msgstr "Send en besked" @@ -1120,7 +1068,7 @@ msgstr "%s har sendt dig en besked. (%s)" #, c-format msgid "Unknown pounce event. Please report this!" -msgstr "Ukendt handling ved overvågning. Venligst rapportér dette!" +msgstr "Ukendt hændelse ved overvågning. Venligst rapportér dette!" msgid "Based on keyboard use" msgstr "Baseret på keyboardbrug" @@ -1144,10 +1092,10 @@ msgid "Log format" msgstr "Log-format" msgid "Log IMs" -msgstr "Log kvik-beskeder" +msgstr "Log beskeder" msgid "Log chats" -msgstr "Log chats" +msgstr "Log samtaler" msgid "Log status change events" msgstr "Log status-ændringer handlinger" @@ -1156,13 +1104,13 @@ msgid "Report Idle time" msgstr "Rapportér inaktiv tid" msgid "Change status when idle" -msgstr "Skift status ved inaktivitet" +msgstr "Ændr status ved inaktivitet" msgid "Minutes before changing status" msgstr "Minutter før ændring af status" msgid "Change status to" -msgstr "Skift status til" +msgstr "Ændr status til" msgid "Conversations" msgstr "Samtaler" @@ -1171,10 +1119,10 @@ msgid "Logging" msgstr "Logning" msgid "You must fill all the required fields." -msgstr "Du skal udfylde alle de påkrævede felter." +msgstr "Du skal udfylde alle de krævede felter." msgid "The required fields are underlined." -msgstr "De påkrævede felter er understreget." +msgstr "De felter som kræves er understreget." msgid "Not implemented yet." msgstr "Ikke implementeret endnu." @@ -1186,7 +1134,7 @@ msgid "Open File..." msgstr "Åbn fil..." msgid "Choose Location..." -msgstr "Bestem placering..." +msgstr "Vælg placering..." msgid "Hit 'Enter' to find more rooms of this category." msgstr "Tryk \"Retur\" for at finde flere rum af denne kategori." @@ -1214,19 +1162,19 @@ msgid "Message sent" msgstr "Besked sendt" msgid "Person enters chat" -msgstr "Person kommer ind i chat" +msgstr "Person kommer ind i samtale" msgid "Person leaves chat" -msgstr "Person forlader chat" +msgstr "Person forlader samtale" msgid "You talk in chat" -msgstr "Du taler i chat" +msgstr "Du taler i samtale" msgid "Others talk in chat" -msgstr "Andre snakker i chat" +msgstr "Andre taler i samtale" msgid "Someone says your username in chat" -msgstr "Nogle siger dit navn i en chat" +msgstr "Nogle siger dit brugernavn i en samtale" msgid "GStreamer Failure" msgstr "GStreamer fejl" @@ -1351,7 +1299,7 @@ msgid "Duplicate title" msgstr "Dublet titel" msgid "Please enter a different title for the status." -msgstr "Brug en anden titel for statussen." +msgstr "Brug en anden titel for den status." msgid "Substatus" msgstr "Understatus" @@ -1391,22 +1339,16 @@ msgid "Couldn't find window" msgstr "Kan ikke finde vindue" msgid "This plugin cannot be loaded because it was not built with X11 support." -msgstr "" -"Udvidelsesmodulet kan ikke indlæses, fordi det ikke er bygget med X11-" -"understøttelse." +msgstr "Udvidelsesmodulet kan ikke indlæses, fordi det ikke er bygget med X11-understøttelse." msgid "GntClipboard" msgstr "GntClipboard" msgid "Clipboard plugin" -msgstr "Udklipsholder-udvidelsesmodul" +msgstr "Klippebords-udvidelsesmodul" -msgid "" -"When the gnt clipboard contents change, the contents are made available to " -"X, if possible." -msgstr "" -"Når gnt-udklipsbordrets indhold ændrer sig, bliver indholdet gjort " -"tilgængelig for X, hvis det er muligt." +msgid "When the gnt clipboard contents change, the contents are made available to X, if possible." +msgstr "Når gnt-klippebordets indhold ændrer sig, bliver indholdet gjort tilgængelig for X, hvis det er muligt." #, c-format msgid "%s just signed on" @@ -1432,13 +1374,13 @@ msgid "Buddy signs on/off" msgstr "Ven logger ind/ud" msgid "You receive an IM" -msgstr "Du har modtaget en kvik-besked" +msgstr "Du har modtaget en besked" msgid "Someone speaks in a chat" -msgstr "Nogle taler i en chat" +msgstr "Nogle taler i en samtale" msgid "Someone says your name in a chat" -msgstr "Nogle siger dit navn i en chat" +msgstr "Nogle siger dit navn i en samtale" msgid "Notify with a toaster when" msgstr "Påmind med en toaster når" @@ -1460,18 +1402,16 @@ msgid "<b>Conversation with %s on %s:</b><br>" msgstr "<b>Samtale med %s på %s</b><br>" msgid "History Plugin Requires Logging" -msgstr "Historik modul kræver logning" +msgstr "Historikmodul kræver logning" msgid "" "Logging can be enabled from Tools -> Preferences -> Logging.\n" "\n" -"Enabling logs for instant messages and/or chats will activate history for " -"the same conversation type(s)." +"Enabling logs for instant messages and/or chats will activate history for the same conversation type(s)." msgstr "" "Logning kan slås til i Værktøjer -> Indstillinger -> Logning.\n" "\n" -"Ved at slå logs til for beskeder og/eller chats, vil det aktivere " -"historikken for de samme samtale typer." +"Ved at slå logs til for beskeder og/eller samtaler, vil det aktivere historikken for de samme samtale typer." msgid "GntHistory" msgstr "GntHistorik" @@ -1479,27 +1419,23 @@ msgstr "GntHistorik" msgid "Shows recently logged conversations in new conversations." msgstr "Viser tidligere loggede samtaler i nye samtaler." -msgid "" -"When a new conversation is opened this plugin will insert the last " -"conversation into the current conversation." -msgstr "" -"Når en ny samtale bliver åbnet, vil dette modul indsætte den sidste samtale " -"ind i den nye samtale." +msgid "When a new conversation is opened this plugin will insert the last conversation into the current conversation." +msgstr "Når en ny samtale bliver åbnet, vil dette modul indsætte den sidste samtale ind i den nye samtale." msgid "Online" -msgstr "Logget ind" +msgstr "Tilkoblet" msgid "Offline" -msgstr "Offline" +msgstr "Afkoblet" msgid "Online Buddies" -msgstr "Online venner" +msgstr "Tilkoblede venner" msgid "Offline Buddies" -msgstr "Offline venner" +msgstr "Afkoblede venner" msgid "Online/Offline" -msgstr "Online/Offline" +msgstr "Til-/Afkoblede" msgid "Meebo" msgstr "Meebo" @@ -1514,7 +1450,7 @@ msgid "Nested Grouping (experimental)" msgstr "Indlejret gruppering (eksperimentel)" msgid "Provides alternate buddylist grouping options." -msgstr "Giver alternativ venneliste grupperingsmuligheder." +msgstr "Giver alternative grupperingsindstillinger for venneliste." msgid "Lastlog" msgstr "Lastlog" @@ -1569,14 +1505,14 @@ msgstr "Ny adgangskode (igen)" #, c-format msgid "Change password for %s" -msgstr "Skift adgangskode for %s" +msgstr "Ændr adgangskode for %s" msgid "Please enter your current password and your new password." msgstr "Indtast din nuværende og nye adgangskode." #, c-format msgid "Change user information for %s" -msgstr "Skift bruger oplysninger for %s" +msgstr "Ændr brugeroplysninger for %s" msgid "Set User Info" msgstr "Ret brugeroplysninger" @@ -1623,7 +1559,7 @@ msgstr "SSL-modpart cache" #. Make messages #, c-format msgid "Accept certificate for %s?" -msgstr "Acceptér certifikat for %s?" +msgstr "Acceptér certifikat til %s?" #. TODO: Find what the handle ought to be msgid "SSL Certificate Verification" @@ -1637,17 +1573,13 @@ msgid "Reject" msgstr "Afvis" msgid "_View Certificate..." -msgstr "_Se certifikat..." +msgstr "_Vis certifikat..." #. Prompt the user to authenticate the certificate #. vrq will be completed by user_auth #, c-format -msgid "" -"The certificate presented by \"%s\" is self-signed. It cannot be " -"automatically checked." -msgstr "" -"Certifikatet præsenteret af \"%s\" er selvsigneret. Det kan ikke blive " -"kontrolleret automatisk." +msgid "The certificate presented by \"%s\" is self-signed. It cannot be automatically checked." +msgstr "Certifikatet præsenteret af \"%s\" er selv underskrevet. Det kan ikke kontrolleres automatisk." #, c-format msgid "The certificate chain presented for %s is not valid." @@ -1665,42 +1597,27 @@ msgid "Invalid certificate chain" msgstr "Ugyldig certifikatkæde" #. vrq will be completed by user_auth -msgid "" -"You have no database of root certificates, so this certificate cannot be " -"validated." -msgstr "" -"Du har ingen database med rodcertifikater, så dette certifikat kan ikke " -"godkendes." +msgid "You have no database of root certificates, so this certificate cannot be validated." +msgstr "Du har ingen database med rodcertifikater, så dette certifikat kan ikke kontrolleres." #. vrq will be completed by user_auth -msgid "" -"The root certificate this one claims to be issued by is unknown to Pidgin." -msgstr "" -"Rodcertifikatet, som denne påstår at være udgivet af, er ukendt af Pidgin." +msgid "The root certificate this one claims to be issued by is unknown to Pidgin." +msgstr "Rodcertifikatet, som denne påstår at være udgivet af, er ukendt af Pidgin." #, c-format -msgid "" -"The certificate chain presented by %s does not have a valid digital " -"signature from the Certificate Authority from which it claims to have a " -"signature." -msgstr "" -"Certifikatkæden, præsenteret af %s, har ikke et gyldigt digitalt signatur " -"fra den certificerende myndighed, som den påstår at have et signatur fra." +msgid "The certificate chain presented by %s does not have a valid digital signature from the Certificate Authority from which it claims to have a signature." +msgstr "Certifikatkæden, præsenteret af %s, har ikke en gyldig digital underskrift fra den certificerende myndighed, som den påstår at have en underskrift fra." msgid "Invalid certificate authority signature" -msgstr "Ugyldig signatur fra certificerende myndighed" +msgstr "Ugyldig underskrift fra certificerende myndighed" #. Prompt the user to authenticate the certificate #. TODO: Provide the user with more guidance about why he is #. being prompted #. vrq will be completed by user_auth #, c-format -msgid "" -"The certificate presented by \"%s\" claims to be from \"%s\" instead. This " -"could mean that you are not connecting to the service you believe you are." -msgstr "" -"Certifikatet præsenteret af \"%s\" påstår at være fra \"%s\" i stedet. Dette " -"kunne tyde på, at du ikke er forbundet til den service du tror du er." +msgid "The certificate presented by \"%s\" claims to be from \"%s\" instead. This could mean that you are not connecting to the service you believe you are." +msgstr "Certifikatet præsenteret af \"%s\" påstår at være fra \"%s\" i stedet. Dette kunne tyde på, at du ikke er forbundet til den tjeneste du tror du er." #. Make messages #, c-format @@ -1802,17 +1719,17 @@ msgid "No name" msgstr "Intet navn" msgid "Unable to create new resolver process\n" -msgstr "Kunne ikke oprette ny opløsningsproces\n" +msgstr "Kunne ikke oprette ny løsningsproces\n" msgid "Unable to send request to resolver process\n" -msgstr "Kunne ikke sende forespørgelse til opløsningsproces\n" +msgstr "Kunne ikke sende forespørgsel til løsningsproces\n" #, c-format msgid "" "Error resolving %s:\n" "%s" msgstr "" -"Fejl ved opløsning af %s:\n" +"Fejl ved løsning af %s:\n" "%s" #, c-format @@ -1824,12 +1741,12 @@ msgid "" "Error reading from resolver process:\n" "%s" msgstr "" -"Fejl ved indlæsning fra opløsningsproces:\n" +"Fejl ved indlæsning fra løsningsproces:\n" "%s" #, c-format msgid "Resolver process exited without answering our request" -msgstr "Opløsningsprocess afsluttede uden svar på vores forespørgelse" +msgstr "Løsningsprocess afsluttede uden svar på vores forespørgsel" #, c-format msgid "Thread creation failure: %s" @@ -1994,68 +1911,32 @@ msgstr "Håndteringen af \"xmpp\"-adresser" msgid "The handler for \"ymsgr\" URLs" msgstr "Håndteringen af \"ymsgr\"-adresser" -msgid "" -"True if the command specified in the \"command\" key should handle \"aim\" " -"URLs." -msgstr "" -"Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"aim\"-" -"adresser." +msgid "True if the command specified in the \"command\" key should handle \"aim\" URLs." +msgstr "Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"aim\"-adresser." -msgid "" -"True if the command specified in the \"command\" key should handle \"gg\" " -"URLs." -msgstr "" -"Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"gg\"-" -"adresser." +msgid "True if the command specified in the \"command\" key should handle \"gg\" URLs." +msgstr "Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"gg\"-adresser." -msgid "" -"True if the command specified in the \"command\" key should handle \"icq\" " -"URLs." -msgstr "" -"Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"icq\"-" -"adresser." +msgid "True if the command specified in the \"command\" key should handle \"icq\" URLs." +msgstr "Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"icq\"-adresser." -msgid "" -"True if the command specified in the \"command\" key should handle \"irc\" " -"URLs." -msgstr "" -"Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"irc\"-" -"adresser." +msgid "True if the command specified in the \"command\" key should handle \"irc\" URLs." +msgstr "Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"irc\"-adresser." -msgid "" -"True if the command specified in the \"command\" key should handle \"msnim\" " -"URLs." -msgstr "" -"Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"msnim\"-" -"adresser." +msgid "True if the command specified in the \"command\" key should handle \"msnim\" URLs." +msgstr "Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"msnim\"-adresser." -msgid "" -"True if the command specified in the \"command\" key should handle \"sip\" " -"URLs." -msgstr "" -"Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"sip\"-" -"adresser." +msgid "True if the command specified in the \"command\" key should handle \"sip\" URLs." +msgstr "Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"sip\"-adresser." -msgid "" -"True if the command specified in the \"command\" key should handle \"xmpp\" " -"URLs." -msgstr "" -"Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"xmpp\"-" -"adresser." +msgid "True if the command specified in the \"command\" key should handle \"xmpp\" URLs." +msgstr "Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"xmpp\"-adresser." -msgid "" -"True if the command specified in the \"command\" key should handle \"ymsgr\" " -"URLs." -msgstr "" -"Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"ymsgr\"-" -"adresser." +msgid "True if the command specified in the \"command\" key should handle \"ymsgr\" URLs." +msgstr "Sand hvis kommandoen angivet i \"kommando\"-nøglen skulle håndtere \"ymsgr\"-adresser." -msgid "" -"True if the command used to handle this type of URL should be run in a " -"terminal." -msgstr "" -"Sand hvis kommandoen brugt til at håndtere denne type af adresse skal køres " -"i en terminal." +msgid "True if the command used to handle this type of URL should be run in a terminal." +msgstr "Sand hvis kommandoen brugt til at håndtere denne type af adresse skal køres i en terminal." msgid "Whether the specified command should handle \"aim\" URLs" msgstr "Hvorledes den angivne kommando skal håndtere \"aim\"-adresser" @@ -2088,10 +1969,10 @@ msgid "HTML" msgstr "HTML" msgid "Plain text" -msgstr "Ren tekst" +msgstr "Klartekst" msgid "Old flat format" -msgstr "Gammel fladformat" +msgstr "Gammelt fladt format" msgid "Logging of this conversation failed." msgstr "Logning af denne samtale fejlede." @@ -2100,20 +1981,12 @@ msgid "XML" msgstr "XML" #, c-format -msgid "" -"<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" -"REPLY>:</b></font> %s<br/>\n" -msgstr "" -"<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-SVAR>:" -"</b></font> %s<br/>\n" +msgid "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-REPLY>:</b></font> %s<br/>\n" +msgstr "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-SVAR>:</b></font> %s<br/>\n" #, c-format -msgid "" -"<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" -"REPLY>:</b></font> %s<br/>\n" -msgstr "" -"<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-SVAR>:" -"</b></font> %s<br/>\n" +msgid "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-REPLY>:</b></font> %s<br/>\n" +msgstr "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-SVAR>:</b></font> %s<br/>\n" msgid "<font color=\"red\"><b>Unable to find log path!</b></font>" msgstr "<font color=\"red\"><b>Kunne ikke finde logsti!</b></font>" @@ -2131,7 +2004,7 @@ msgid "You are using %s, but this plugin requires %s." msgstr "Du bruger %s, men dette udvidelsesmodul kræver %s." msgid "This plugin has not defined an ID." -msgstr "Dette udvidelsesmodul har ikke defineret et ID." +msgstr "Dette udvidelsesmodul har ikke defineret et id." #, c-format msgid "Plugin magic mismatch %d (need %d)" @@ -2141,19 +2014,12 @@ msgstr "Modul magi fejlede %d (krævede %d)" msgid "ABI version mismatch %d.%d.x (need %d.%d.x)" msgstr "ABI versions fejl %d.%d.x (kræver %d.%d.x)" -msgid "" -"Plugin does not implement all required functions (list_icon, login and close)" -msgstr "" -"Udvidelsesmodul implementerer ikke alle de krævede funktioner (list_icon, " -"login og luk)" +msgid "Plugin does not implement all required functions (list_icon, login and close)" +msgstr "Udvidelsesmodul implementerer ikke alle de krævede funktioner (list_icon, logind og luk)" #, c-format -msgid "" -"The required plugin %s was not found. Please install this plugin and try " -"again." -msgstr "" -"Det krævede udvidelsesmodul %s blev ikke fundet. Installér modulet og prøv " -"igen." +msgid "The required plugin %s was not found. Please install this plugin and try again." +msgstr "Det krævede udvidelsesmodul %s blev ikke fundet. Installér modulet og prøv igen." msgid "Unable to load the plugin" msgstr "Kan ikke indlæse udvidelsesmodulet" @@ -2187,7 +2053,7 @@ msgid "When a file-transfer request arrives from %s" msgstr "Når der ankommer en filoverførselsanmodning fra %s" msgid "Set Autoaccept Setting" -msgstr "Sæt automatisk accept indstillinger" +msgstr "Indstil automatisk accept indstillinger" msgid "_Save" msgstr "_Gem" @@ -2226,7 +2092,7 @@ msgstr "" "(kun hvis der ikke er nogen konversation med senderen)" msgid "Create a new directory for each user" -msgstr "Opret et nyt bibliotek for hver bruger" +msgstr "Opret et nyt katalog for hver bruger" msgid "Notes" msgstr "Noter" @@ -2314,7 +2180,7 @@ msgid "I'dle Mak'er" msgstr "Inaktivs opsætter" msgid "Set Account Idle Time" -msgstr "Sæt inaktiv tid for konto" +msgstr "Indstil inaktiv tid for konto" msgid "_Set" msgstr "_Sæt" @@ -2329,13 +2195,13 @@ msgid "_Unset" msgstr "_Fjern" msgid "Set Idle Time for All Accounts" -msgstr "Sæt inaktiv tid for alle konti" +msgstr "Indstil inaktiv tid for alle konti" msgid "Unset Idle Time for All Idled Accounts" msgstr "Fjern inaktiv tid fra alle inaktive konti" msgid "Allows you to hand-configure how long you've been idle" -msgstr "Tillader dig at manuelt sætte op hvor lang tid du har været inaktiv" +msgstr "Tillader dig at indstille hvor lang tid du har været inaktiv" #. *< type #. *< ui_requirement @@ -2353,12 +2219,8 @@ msgid "Test plugin IPC support, as a client." msgstr "Test modul IPC understøttelse, som en klient." #. * description -msgid "" -"Test plugin IPC support, as a client. This locates the server plugin and " -"calls the commands registered." -msgstr "" -"Test modul IPC understøttelse, som en klient. Dette finder server modulet og " -"kalder den registrerede kommando." +msgid "Test plugin IPC support, as a client. This locates the server plugin and calls the commands registered." +msgstr "Test modul IPC understøttelse, som en klient. Dette finder server modulet og kalder den registrerede kommando." #. *< type #. *< ui_requirement @@ -2377,12 +2239,10 @@ msgstr "Test modul IPC understøttelse, som en server." #. * description msgid "Test plugin IPC support, as a server. This registers the IPC commands." -msgstr "" -"Test modul IPC understøttelse, som en server. Dette registrerer IPC " -"kommandoerne." +msgstr "Test modul IPC understøttelse, som en server. Dette registrerer IPC kommandoerne." msgid "Join/Part Hiding Configuration" -msgstr "Tilslut/Del skjult konfiguration" +msgstr "Tilslut/Deltag skjult konfiguration" msgid "Minimum Room Size" msgstr "Mindste rumstørrelse" @@ -2400,7 +2260,7 @@ msgstr "Anvend skjulte regler for venner" #. *< priority #. *< id msgid "Join/Part Hiding" -msgstr "Tilslut/del skjul" +msgstr "Skjul tilslut/deltag" #. *< name #. *< version @@ -2409,12 +2269,8 @@ msgid "Hides extraneous join/part messages." msgstr "Skjuler overflødige tilslut/deltag-beskeder." #. * description -msgid "" -"This plugin hides join/part messages in large rooms, except for those users " -"actively taking part in a conversation." -msgstr "" -"Dette udvidelsesmodul skjuler tilslut/deltag-beskeder i store rum, undtager " -"de brugere der aktivt tager del i en samtale." +msgid "This plugin hides join/part messages in large rooms, except for those users actively taking part in a conversation." +msgstr "Dette udvidelsesmodul skjuler tilslut/deltag-beskeder i store rum, undtagen de brugere der aktivt tager del i en samtale." #. This is used in the place of a timezone abbreviation if the #. * offset is way off. The user should never really see it, but @@ -2424,7 +2280,7 @@ msgid "(UTC)" msgstr "(UTC)" msgid "User is offline." -msgstr "Bruger er offline." +msgstr "Bruger er afkoblet." msgid "Auto-response sent:" msgstr "Auto-svar sendt:" @@ -2439,12 +2295,8 @@ msgstr "En eller flere beskeder er måske ikke blevet leveret." msgid "You were disconnected from the server." msgstr "Din forbindelse til serveren blev afbrudt." -msgid "" -"You are currently disconnected. Messages will not be received unless you are " -"logged in." -msgstr "" -"Du er ikke forbunddet. Beskeder vil ikke blive modtaget medmindre du er " -"logged ind." +msgid "You are currently disconnected. Messages will not be received unless you are logged in." +msgstr "Du er ikke forbunddet. Beskeder vil ikke blive modtaget medmindre du er logged ind." msgid "Message could not be sent because the maximum length was exceeded." msgstr "Besked kunne ikke sendes, fordi maksimum længden var overskredet." @@ -2525,18 +2377,13 @@ msgstr "Inkludér andre klienters logs i logviseren." #. * description msgid "" -"When viewing logs, this plugin will include logs from other IM clients. " -"Currently, this includes Adium, MSN Messenger, and Trillian.\n" +"When viewing logs, this plugin will include logs from other IM clients. Currently, this includes Adium, MSN Messenger, and Trillian.\n" "\n" -"WARNING: This plugin is still alpha code and may crash frequently. Use it " -"at your own risk!" +"WARNING: This plugin is still alpha code and may crash frequently. Use it at your own risk!" msgstr "" -"Når der vises logs, vil dette udvidelsesmodul inkludere logs fra andre kvik-" -"beskedklienter. På nuværende tidspunkt, er dette Adium, MSN Messenger og " -"Trillian.\n" +"Når der vises logs, vil dette udvidelsesmodul inkludere logs fra andre beskedklienter. På nuværende tidspunkt, er dette Adium, MSN Messenger og Trillian.\n" "\n" -"ADVARSEL: Dette udvidelsesmodul er stadig alfa-kode og kan bryde ned " -"jævnligt. Brug det på eget ansvar!" +"ADVARSEL: Dette udvidelsesmodul er stadig alfa-kode og kan bryde ned jævnligt. Brug det på eget ansvar!" msgid "Mono Plugin Loader" msgstr "Mono-udvidelsesmodul indlæser" @@ -2545,10 +2392,10 @@ msgid "Loads .NET plugins with Mono." msgstr "Indlæser .NET moduler med Mono." msgid "Add new line in IMs" -msgstr "Tilføj ny linje i kvikbeskeder" +msgstr "Tilføj ny linje i beskeder" msgid "Add new line in Chats" -msgstr "Tilføj ny line i chat" +msgstr "Tilføj ny line i samtaler" #. *< magic #. *< major version @@ -2568,35 +2415,21 @@ msgid "Prepends a newline to displayed message." msgstr "Indskyder en ny linje i viste besked." #. *< summary -msgid "" -"Prepends a newline to messages so that the rest of the message appears below " -"the username in the conversation window." -msgstr "" -"Indskyder en ny linje til beskederne så resten af beskederne optræder " -"nedenunder skærmnavnet i samtalevinduet." +msgid "Prepends a newline to messages so that the rest of the message appears below the username in the conversation window." +msgstr "Indskyder en ny linje til beskederne så resten af beskederne optræder nedenunder skærmnavnet i samtalevinduet." msgid "Offline Message Emulation" msgstr "Afkoblet besked-emulering" msgid "Save messages sent to an offline user as pounce." -msgstr "" -"Gem beskeder sendt til en afkoblet bruger som automatisk praj ved indlogning." +msgstr "Gem beskeder sendt til en afkoblet bruger som automatisk praj ved indlogning." -msgid "" -"The rest of the messages will be saved as pounce. You can edit/delete the " -"pounce from the `Buddy Pounce' dialog." -msgstr "" -"Resten af beskeden vil blive gemt som automatisk praj ved indlogning. Du kan " -"redigere/slette automatisk praj ved indlogning fra venne-automatisk praj ved " -"indlogning-vinduet." +msgid "The rest of the messages will be saved as pounce. You can edit/delete the pounce from the `Buddy Pounce' dialog." +msgstr "Resten af beskeden vil blive gemt som automatisk praj ved indlogning. Du kan redigere/slette automatisk praj ved indlogning fra venne-automatisk praj ved indlogning-vinduet." #, c-format -msgid "" -"\"%s\" is currently offline. Do you want to save the rest of the messages in " -"a pounce and automatically send them when \"%s\" logs back in?" -msgstr "" -"\"%s\" er afkoblet. Vil du gemme testen af beskeden i en automatisk praj ved " -"indlogning og automatisk sende dem når \"%s\" logger på igen?" +msgid "\"%s\" is currently offline. Do you want to save the rest of the messages in a pounce and automatically send them when \"%s\" logs back in?" +msgstr "\"%s\" er afkoblet. Vil du gemme testen af beskeden i en automatisk praj ved indlogning og automatisk sende dem når \"%s\" logger på igen?" msgid "Offline Message" msgstr "Besked når afkoblet" @@ -2637,12 +2470,8 @@ msgstr "Synsk tilstand" msgid "Psychic mode for incoming conversation" msgstr "Synsk tilstand for indgående samtaler" -msgid "" -"Causes conversation windows to appear as other users begin to message you. " -"This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" -msgstr "" -"Får samtalevinduerne til at dukke frem når andre brugere begynder at skrive " -"til dig. Dette virker med AIM, ICQ, XMPP, Sametime og Yahoo!" +msgid "Causes conversation windows to appear as other users begin to message you. This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" +msgstr "Får samtalevinduerne til at dukke frem når andre brugere begynder at skrive til dig. Dette virker med AIM, ICQ, XMPP, Sametime og Yahoo!" msgid "You feel a disturbance in the force..." msgstr "Du føler en ændring i kraften..." @@ -2693,7 +2522,7 @@ msgstr "Test for at se de fleste ting virker." #. Scheme name msgid "X.509 Certificates" -msgstr "X.509 certifikater" +msgstr "X.509-certifikater" #. *< type #. *< ui_requirement @@ -2741,7 +2570,7 @@ msgstr "SSL" #. * summary #. * description msgid "Provides a wrapper around SSL support libraries." -msgstr "En \"wrapper\" omkring SSL understøttelses biblioteker." +msgstr "Giver et omslag omkring SSL-understøttelses biblioteker." #, c-format msgid "%s is no longer away." @@ -2788,11 +2617,8 @@ msgstr "Vennestatus påmindelse" #. *< version #. * summary #. * description -msgid "" -"Notifies in a conversation window when a buddy goes or returns from away or " -"idle." -msgstr "" -"Fortæller i en samtale når en ven bliver fraværende eller kommer tilbage." +msgid "Notifies in a conversation window when a buddy goes or returns from away or idle." +msgstr "Fortæller i en samtale når en ven bliver fraværende eller kommer tilbage." msgid "Tcl Plugin Loader" msgstr "Tcl-udvidelsesmodul indlæser" @@ -2800,25 +2626,16 @@ msgstr "Tcl-udvidelsesmodul indlæser" msgid "Provides support for loading Tcl plugins" msgstr "Giver understøttelse af Tcl-udvidelsesmoduler" -msgid "" -"Unable to detect ActiveTCL installation. If you wish to use TCL plugins, " -"install ActiveTCL from http://www.activestate.com\n" -msgstr "" -"Ikke i stand til at opdage ActiveTCL installation. Hvis du ønsker at bruge " -"TCL-udvidelsesmoduler, installér ActiveTCL fra http://www.activestate.com\n" +msgid "Unable to detect ActiveTCL installation. If you wish to use TCL plugins, install ActiveTCL from http://www.activestate.com\n" +msgstr "Ikke i stand til at opdage ActiveTCL installation. Hvis du ønsker at bruge TCL-udvidelsesmoduler, installér ActiveTCL fra http://www.activestate.com\n" -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 værktøjssættet til Windows lbev ikke fundet, se oss på: http://" -"d.pidgin.im/BonjourWindows 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-værktøjssættet til Windows blev ikke fundet, se oss på: http://d.pidgin.im/BonjourWindows for mere information." msgid "Unable to listen for incoming IM connections\n" msgstr "Ude af stand til at lytte for indgående beskeder\n" -msgid "" -"Unable to establish connection with the local mDNS server. Is it running?" +msgid "Unable to establish connection with the local mDNS server. Is it running?" msgstr "Kunne ikke etablerede forbindelse til lokal mDNS server. Kører den?" msgid "First name" @@ -2828,7 +2645,7 @@ msgid "Last name" msgstr "Efternavn" msgid "Email" -msgstr "Email" +msgstr "E-post" msgid "AIM Account" msgstr "AIM-konto" @@ -2853,16 +2670,15 @@ msgid "Purple Person" msgstr "Lilla person" #. Creating the options for the protocol -#, fuzzy msgid "Local Port" -msgstr "Lokalitet" +msgstr "Lokal port" msgid "Bonjour" msgstr "Bonjour" #, c-format msgid "%s has closed the conversation." -msgstr "%s har lukket samtalen." +msgstr "%s har afsluttet samtalen." msgid "Unable to send the message, the conversation couldn't be started." msgstr "Kunne ikke sende beskedn; samtalen kunne ikke startes." @@ -2880,19 +2696,16 @@ msgid "Error communicating with local mDNSResponder." msgstr "Fejl under kommunikation med lokal mDNSResponder." msgid "Invalid proxy settings" -msgstr "Ugyldige mellemværts indstillinger" +msgstr "Ugyldige proxyindstillinger" -msgid "" -"Either the host name or port number specified for your given proxy type is " -"invalid." -msgstr "" -"Enten værtsnavnet eller porten der er angivet for din mellemvært er ugyldig." +msgid "Either the host name or port number specified for your given proxy type is invalid." +msgstr "Enten er værtsnavnet eller porten der er angivet for din proxytype ugyldig." msgid "Token Error" -msgstr "Token fejl" +msgstr "Nøgle fejl" msgid "Unable to fetch the token.\n" -msgstr "Ikke i stand til at få fat i token.\n" +msgstr "Ikke i stand til at få fat i nøgle.\n" msgid "Save Buddylist..." msgstr "Gem venneliste..." @@ -2944,10 +2757,10 @@ msgid "Password (retype)" msgstr "Adgangskode (tast igen)" msgid "Enter current token" -msgstr "Indtast nuværende symbol" +msgstr "Indtast nuværende nøgle" msgid "Current token" -msgstr "Nuværende symbol" +msgstr "Nuværende nøgle" msgid "Register New Gadu-Gadu Account" msgstr "Registrér ny Gadu-Gadu konto" @@ -2974,7 +2787,7 @@ msgid "Female" msgstr "Kvinde" msgid "Only online" -msgstr "Kun online" +msgstr "Kun tilkoblede" msgid "Find buddies" msgstr "Find venner" @@ -2992,7 +2805,7 @@ msgid "Unable to change password. Error occurred.\n" msgstr "Kunne ikke ændre adgangskode. En fejl skete.\n" msgid "Change password for the Gadu-Gadu account" -msgstr "Skift adgangskode for Gadu-Gadu kontoen" +msgstr "Ændr adgangskode for Gadu-Gadu-kontoen" msgid "Password was changed successfully!" msgstr "Adgangskoden blev ændret!" @@ -3004,14 +2817,14 @@ msgid "Please, enter your current password and your new password for UIN: " msgstr "Indtast din nuværende og nye adgangskode til UIN: " msgid "Change Gadu-Gadu Password" -msgstr "Skift Gadu-Gadu adgangskode" +msgstr "Ændr Gadu-Gadu-adgangskode" #, c-format msgid "Select a chat for buddy: %s" -msgstr "Vælg en chat for ven: %s" +msgstr "Vælg en samtale for ven: %s" msgid "Add to chat..." -msgstr "Tilføj til chat..." +msgstr "Tilføj til samtale..." msgid "Available" msgstr "Tilgængelig" @@ -3062,19 +2875,19 @@ msgid "Your buddy list was stored on the server." msgstr "Din venneliste blev gemt på serveren." msgid "Connection failed." -msgstr "Forbindelse mislykkedes." +msgstr "Forbindelse fejlede." msgid "Add to chat" -msgstr "Tilføj til chat" +msgstr "Tilføj til samtale" msgid "Chat _name:" -msgstr "Chat _navn:" +msgstr "Samtale_navn:" msgid "Chat error" -msgstr "Chat fejl" +msgstr "Fejl i samtale" msgid "This chat name is already in use" -msgstr "Dette chatnavn eksisterer allerede" +msgstr "Dette samtalenavn eksisterer allerede" msgid "Not connected to the server." msgstr "Ikke forbundet til serveren." @@ -3083,7 +2896,7 @@ msgid "Find buddies..." msgstr "Find venner..." msgid "Change password..." -msgstr "Skift adgangskode..." +msgstr "Ændr adgangskode..." msgid "Upload buddylist to Server" msgstr "Overfør venneliste til server" @@ -3142,7 +2955,7 @@ msgid "No MOTD available" msgstr "Ingen MOTD tilgængelig" msgid "There is no MOTD associated with this connection." -msgstr "Der er ingen MOTD associeret med denne forbindelse." +msgstr "Der er ingen MOTD tilknyttet denne forbindelse." #, c-format msgid "MOTD for %s" @@ -3266,7 +3079,7 @@ msgid "Idle for" msgstr "Inaktiv i" msgid "Online since" -msgstr "Online siden" +msgstr "Tilkoblet siden" msgid "<b>Defining adjective:</b>" msgstr "<b>Definerende adjektiv:</b>" @@ -3324,7 +3137,7 @@ msgstr "Kunne ikke sende" #, c-format msgid "Joining %s requires an invitation." -msgstr "Det kræver en invitation for at deltage i %s." +msgstr "Det kræver en invitation for at tilslutte %s." msgid "Invitation only" msgstr "Kun invitation" @@ -3345,19 +3158,11 @@ msgstr "mode (%s %s) af %s" msgid "Invalid nickname" msgstr "Ugyldigt brugernavn" -msgid "" -"Your selected nickname was rejected by the server. It probably contains " -"invalid characters." -msgstr "" -"Dit valgte brugernavn blev nægtet af serveren. Det indeholder sikkert " -"ugyldige bogstaver." +msgid "Your selected nickname was rejected by the server. It probably contains invalid characters." +msgstr "Dit valgte brugernavn blev nægtet af serveren. Det indeholder sikkert ugyldige bogstaver." -msgid "" -"Your selected account name was rejected by the server. It probably contains " -"invalid characters." -msgstr "" -"Dit valgte konto navn blev nægtet af serveren. Det indeholder sikkert " -"ugyldige bogstaver." +msgid "Your selected account name was rejected by the server. It probably contains invalid characters." +msgstr "Dit valgte konto navn blev nægtet af serveren. Det indeholder sikkert ugyldige bogstaver." msgid "Cannot change nick" msgstr "Kan ikke ændre navn" @@ -3381,7 +3186,7 @@ msgid "Cannot join %s: Registration is required." msgstr "Kan ikke tilslutte %s: Registrering krævet." msgid "Cannot join channel" -msgstr "Kan ikke deltage i kanalen" +msgstr "Kan ikke tilslutte kanalen" msgid "Nick or channel is temporarily unavailable." msgstr "Navn eller kanal er midlertidigt utilgængelig." @@ -3391,183 +3196,109 @@ msgid "Wallops from %s" msgstr "Wallops fra %s" msgid "action <action to perform>: Perform an action." -msgstr "action <handling at udføre>: Udfør en handling." +msgstr "action <handling at udføre>: Udfør en handling." -msgid "" -"away [message]: Set an away message, or use no message to return from being " -"away." -msgstr "" -"away [besked]: Sæt en fraværsbesked. Hvis ingen besked angives, så returnes " -"du fra fravær." +msgid "away [message]: Set an away message, or use no message to return from being away." +msgstr "away [besked]: Indstil en fraværsbesked. Hvis ingen besked angives, så returnes du fra fravær." msgid "ctcp <nick> <msg>: sends ctcp msg to nick." -msgstr "ctcp <nick> <msg>: sender ctcp besked til kælenavn." +msgstr "ctcp <nick> <msg>: sender ctcp-besked til kælenavn." msgid "chanserv: Send a command to chanserv" msgstr "chanserv: Send en kommando til chanserv" -msgid "" -"deop <nick1> [nick2] ...: Remove channel operator status from " -"someone. You must be a channel operator to do this." -msgstr "" -"deop <navn1> [navn2] ...: Fjern kanal operatør status fra en. Du skal " -"være kanal operatør for at gøre dette." +msgid "deop <nick1> [nick2] ...: Remove channel operator status from someone. You must be a channel operator to do this." +msgstr "deop <navn1> [navn2] ...: Fjern kanal operatør status fra en. Du skal være kanal operatør for at gøre dette." -msgid "" -"devoice <nick1> [nick2] ...: Remove channel voice status from " -"someone, preventing them from speaking if the channel is moderated (+m). You " -"must be a channel operator to do this." -msgstr "" -"devoice <navn1> [navn2] ...: Fjern kanal 'voice' status fra en. Det " -"forhindrer dem i at snakke hvis kanalen er modereret (+m). Du skal være " -"kanal operatør for at gøre dette." +msgid "devoice <nick1> [nick2] ...: Remove channel voice status from someone, preventing them from speaking if the channel is moderated (+m). You must be a channel operator to do this." +msgstr "devoice <navn1> [navn2] ...: Fjern kanal 'voice' status fra en. Det forhindrer dem i at snakke hvis kanalen er modereret (+m). Du skal være kanal operatør for at gøre dette." -msgid "" -"invite <nick> [room]: Invite someone to join you in the specified " -"channel, or the current channel." -msgstr "" -"invite <navn> [rum]: Invitér nogle til den angivne kanal, eller den " -"nuværende kanal." +msgid "invite <nick> [room]: Invite someone to join you in the specified channel, or the current channel." +msgstr "invite <navn> [rum]: Invitér nogle til den angivne kanal, eller den nuværende kanal." -msgid "" -"j <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " -"channels, optionally providing a channel key for each if needed." -msgstr "" -"j <rum1>[,rum2][,...] [nøgle1[,nøgle2][,...]]: Deltag i en eller flere " -"kanaler. Du kan angive en adgangsnøgle hvis det er krævet." +msgid "j <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more channels, optionally providing a channel key for each if needed." +msgstr "j <rum1>[,rum2][,...] [nøgle1[,nøgle2][,...]]: Deltag i en eller flere kanaler. Du kan angive en adgangsnøgle hvis det er krævet." -msgid "" -"join <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " -"channels, optionally providing a channel key for each if needed." -msgstr "" -"join <rum1>[,rum2][,...] [nøgle1[,nøgle2][,...]]: Deltag i en eller " -"flere kanaler. Du kan angive en adgangsnøgle hvis det er krævet." +msgid "join <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more channels, optionally providing a channel key for each if needed." +msgstr "join <rum1>[,rum2][,...] [nøgle1[,nøgle2][,...]]: Tilslut en eller flere kanaler. Du kan angive en adgangsnøgle hvis det er krævet." -msgid "" -"kick <nick> [message]: Remove someone from a channel. You must be a " -"channel operator to do this." -msgstr "" -"kick <nick> [besked]: Fjern nogle fra kanalen. Du skal have kanal " -"operatør status for at gøre dette." +msgid "kick <nick> [message]: Remove someone from a channel. You must be a channel operator to do this." +msgstr "kick <nick> [besked]: Fjern nogle fra kanalen. Du skal have kanal operatør status for at gøre dette." -msgid "" -"list: Display a list of chat rooms on the network. <i>Warning, some servers " -"may disconnect you upon doing this.</i>" -msgstr "" -"list: Vis en liste over chatrum på netværket. <i>Advarsel, nogle servere kan " -"afbryde forbindelsen når du gør dette.</i>" +msgid "list: Display a list of chat rooms on the network. <i>Warning, some servers may disconnect you upon doing this.</i>" +msgstr "list: Vis en liste over samtalerum på netværket. <i>Advarsel, nogle servere kan afbryde forbindelsen når du gør dette.</i>" msgid "me <action to perform>: Perform an action." -msgstr "me <handling at udføre>: Udfør en handling." +msgstr "me <handling at udføre>: Udfør en handling." msgid "memoserv: Send a command to memoserv" msgstr "memoserv: Send en kommando til memoserv" -msgid "" -"mode <+|-><A-Za-z> <nick|channel>: Set or unset a channel " -"or user mode." -msgstr "" -"mode <+|-><A-Za-Z> <nick|kanal>: Sæt eller fjern en kanal " -"eller bruger tilstand." +msgid "mode <+|-><A-Za-z> <nick|channel>: Set or unset a channel or user mode." +msgstr "mode <+|-><A-Za-Z> <nick|kanal>: Sæt eller fjern en kanal eller bruger tilstand." -msgid "" -"msg <nick> <message>: Send a private message to a user (as " -"opposed to a channel)." -msgstr "" -"msg <navn> <besked>: Send en privat besked til en bruger " -"(istedet for en kanal)." +msgid "msg <nick> <message>: Send a private message to a user (as opposed to a channel)." +msgstr "msg <navn> <besked>: Send en privat besked til en bruger (istedet for en kanal)." msgid "names [channel]: List the users currently in a channel." -msgstr "names [kanal]: Vis brugerne der er på kanalen lige nu." +msgstr "names [kanal]: Vis brugerne der er på kanalen lige nu." msgid "nick <new nickname>: Change your nickname." -msgstr "nick <nyt navn>: Skift dit navn." +msgstr "nick <nyt navn>: Ændr dit navn." msgid "nickserv: Send a command to nickserv" msgstr "nickserv: Send en kommando til nickserv" msgid "notice <target<: Send a notice to a user or channel." -msgstr "påmind <targetl<: Send en påmindelse til en bruger eller kanal." +msgstr "notice <targetl<: Send en påmindelse til en bruger eller kanal." -msgid "" -"op <nick1> [nick2] ...: Grant channel operator status to someone. You " -"must be a channel operator to do this." -msgstr "" -"op <navn1> [navn2] ...: Giv kanal operatør status til en. Du skal selv " -"være kanal operatør for at gøre dette." +msgid "op <nick1> [nick2] ...: Grant channel operator status to someone. You must be a channel operator to do this." +msgstr "op <navn1> [navn2] ...: Giv kanal operatør status til en. Du skal selv være kanal operatør for at gøre dette." -msgid "" -"operwall <message>: If you don't know what this is, you probably " -"can't use it." -msgstr "" -"operwall <message>: Hvis du ikke ved hvad dette er, så kan du sikkert " -"ikke bruge det." +msgid "operwall <message>: If you don't know what this is, you probably can't use it." +msgstr "operwall <message>: Hvis du ikke ved hvad dette er, så kan du sikkert ikke bruge det." msgid "operserv: Send a command to operserv" msgstr "operserv: Send en kommando til operserv" -msgid "" -"part [room] [message]: Leave the current channel, or a specified channel, " -"with an optional message." -msgstr "" -"part [rum] [besked]: Forlad den nuværende kanal, eller angiv en kanal med en " -"eventuel fraværsbesked." +msgid "part [room] [message]: Leave the current channel, or a specified channel, with an optional message." +msgstr "part [rum] [besked]: Forlad den nuværende kanal, eller angiv en kanal med en eventuel fraværsbesked." -msgid "" -"ping [nick]: Asks how much lag a user (or the server if no user specified) " -"has." -msgstr "" -"ping [navn]: Spørger hvor meget lag (tidsforsinkelse) en bruger (eller " -"serveren hvis ingen bruger angivet) har." +msgid "ping [nick]: Asks how much lag a user (or the server if no user specified) has." +msgstr "ping [navn]: Spørger hvor meget lag (tidsforsinkelse) en bruger (eller serveren hvis ingen bruger angivet) har." -msgid "" -"query <nick> <message>: Send a private message to a user (as " -"opposed to a channel)." -msgstr "" -"query <navn> <besked>: Send en privat besked til en bruger " -"(istedet for en kanal)." +msgid "query <nick> <message>: Send a private message to a user (as opposed to a channel)." +msgstr "query <navn> <besked>: Send en privat besked til en bruger (istedet for en kanal)." msgid "quit [message]: Disconnect from the server, with an optional message." -msgstr "quit [besked]: Luk forbindelse til server, med en eventuel besked." +msgstr "quit [besked]: Luk forbindelse til server, med en eventuel besked." msgid "quote [...]: Send a raw command to the server." -msgstr "quote [...]: Sender en rå kommando til serveren." +msgstr "quote [...]: Sender en rå kommando til serveren." -msgid "" -"remove <nick> [message]: Remove someone from a room. You must be a " -"channel operator to do this." -msgstr "" -"remove <nick> [besked]: Fjern nogen fra et rum. Du skal have kanal " -"operatør status for at gøre dette." +msgid "remove <nick> [message]: Remove someone from a room. You must be a channel operator to do this." +msgstr "remove <nick> [besked]: Fjern nogen fra et rum. Du skal have kanal operatør status for at gøre dette." msgid "time: Displays the current local time at the IRC server." msgstr "time: Viser den lokale tid på IRC-serveren." msgid "topic [new topic]: View or change the channel topic." -msgstr "topic [nyt emne]: Vis eller skift kanalens emne." +msgstr "topic [nyt emne]: Vis eller ændr kanalens emne." msgid "umode <+|-><A-Za-z>: Set or unset a user mode." -msgstr "umode <+|-><A-Za-z>: Sæt eller fjern en bruger tilstand." +msgstr "umode <+|-><A-Za-z>: Sæt eller fjern en bruger tilstand." msgid "version [nick]: send CTCP VERSION request to a user" msgstr "version [nick]: send CTCP VERSION forspørgelse til en bruger" -msgid "" -"voice <nick1> [nick2] ...: Grant channel voice status to someone. You " -"must be a channel operator to do this." -msgstr "" -"voice <navn1> [navn2] ...: Giv kanal 'voice' status til en. Du skal " -"havekanal operatør status for at gøre dette." +msgid "voice <nick1> [nick2] ...: Grant channel voice status to someone. You must be a channel operator to do this." +msgstr "voice <navn1> [navn2] ...: Giv kanal 'voice' status til en. Du skal havekanal operatør status for at gøre dette." -msgid "" -"wallops <message>: If you don't know what this is, you probably can't " -"use it." -msgstr "" -"wallops <besked>: Hvis du ikke ved hvad dette er, så kan du sikkert " -"ikke bruge det." +msgid "wallops <message>: If you don't know what this is, you probably can't use it." +msgstr "wallops <besked>: Hvis du ikke ved hvad dette er, så kan du sikkert ikke bruge det." msgid "whois [server] <nick>: Get information on a user." -msgstr "whois [server] <navn>: Hent oplysninger om en bruger." +msgstr "whois [server] <navn>: Hent oplysninger om en bruger." msgid "whowas <nick>: Get information on a user that has logged off." msgstr "whowas <nick>: Hent oplysninger om en bruger som er logget af." @@ -3589,10 +3320,10 @@ msgid "Unknown Error" msgstr "Ukendt fejl" msgid "Ad-Hoc Command Failed" -msgstr "Ad-Hoc kommando fejlede" +msgstr "Ad-Hoc-kommando fejlede" msgid "execute" -msgstr "udfør" +msgstr "kør" msgid "Server requires TLS/SSL for login. No TLS/SSL support found." msgstr "Server kræver SSL til logind. Ingen TLS/SSL-understøttelse fundet." @@ -3601,18 +3332,14 @@ msgid "You require encryption, but no TLS/SSL support found." msgstr "Du kræver kryptering, men ingen TLS/SSL-understøttelse blev fundet." msgid "Server requires plaintext authentication over an unencrypted stream" -msgstr "Server kræver ren tekst godkendelse over en ukrypteret strøm" +msgstr "Server kræver godkendelse i klartekst over en ukrypteret strøm" #, c-format -msgid "" -"%s requires plaintext authentication over an unencrypted connection. Allow " -"this and continue authentication?" -msgstr "" -"%s kræver ren tekst godkendelse over en ukrypteret forbindelse. Tillad dette " -"og fortsæt godkendelse?" +msgid "%s requires plaintext authentication over an unencrypted connection. Allow this and continue authentication?" +msgstr "%s kræver godkendelse i klartekst over en ukrypteret forbindelse. Tillad dette og fortsæt godkendelse?" msgid "Plaintext Authentication" -msgstr "Ren tekst godkendelse" +msgstr "Godkendelse i klartekst" msgid "Invalid response from server." msgstr "Ugyldigt svar fra server." @@ -3679,12 +3406,8 @@ msgstr "Beskrivelse" msgid "Edit XMPP vCard" msgstr "Redigér XMPP vCard" -msgid "" -"All items below are optional. Enter only the information with which you feel " -"comfortable." -msgstr "" -"Alle oplysninger er valgfri. Skriv kun de ting, du ønsker andre skal vide om " -"dig." +msgid "All items below are optional. Enter only the information with which you feel comfortable." +msgstr "Alle elementerne nedenfor er valgfrie. Skriv kun de ting, du ønsker andre skal vide om dig." msgid "Client" msgstr "Klient" @@ -3696,37 +3419,37 @@ msgid "Last Activity" msgstr "Sidste aktivitet" msgid "Service Discovery Info" -msgstr "Serviceopdagelsesbesked" +msgstr "Besked ved tjenesteopdagelse" msgid "Service Discovery Items" -msgstr "Punkter for serviceopdagelse" +msgstr "Elementer for tjenesteopdagelse" msgid "Extended Stanza Addressing" msgstr "Udvidet Stanza-adressering" msgid "Multi-User Chat" -msgstr "Flerbruger chat" +msgstr "Flerbrugersamtale" msgid "Multi-User Chat Extended Presence Information" -msgstr "Udvidet oplysning om multibruger samtale tilstedeværelse" +msgstr "Flerbrugersamtale udvidede tilstedeværelsesinformation" msgid "In-Band Bytestreams" msgstr "In-Band-bytestrømme" msgid "Ad-Hoc Commands" -msgstr "Ad-Hoc kommandoer" +msgstr "Ad-Hoc-kommandoer" msgid "PubSub Service" -msgstr "PubSub-service" +msgstr "PubSub-tjeneste" msgid "SOCKS5 Bytestreams" msgstr "SOCKS5-bytestrømme" msgid "Out of Band Data" -msgstr "Løbet tør for Band-data" +msgstr "Out of Band Data" msgid "XHTML-IM" -msgstr "XHTML-kvikbesked" +msgstr "XHTML-besked" msgid "In-Band Registration" msgstr "In-Band-registrering" @@ -3738,7 +3461,7 @@ msgid "User Avatar" msgstr "Brugeravatar" msgid "Chat State Notifications" -msgstr "Chat status påmindelser" +msgstr "Samtalestatus påmindelser" msgid "Software Version" msgstr "Software version" @@ -3756,7 +3479,7 @@ msgid "User Activity" msgstr "Brugeraktivitet" msgid "Entity Capabilities" -msgstr "Entitetskapabiliteter" +msgstr "Enhedsegenskaber" msgid "Encrypted Session Negotiations" msgstr "Krypterede sessionsforhandlinger" @@ -3765,7 +3488,7 @@ msgid "User Tune" msgstr "Brugermelodi" msgid "Roster Item Exchange" -msgstr "Mønstring af elementudveksling" +msgstr "Navneliste over elementudveksling" msgid "Reachability Address" msgstr "E-post-adresse" @@ -3801,13 +3524,13 @@ msgid "Message Receipts" msgstr "Beskedmodtagere" msgid "Public Key Publishing" -msgstr "Udgivelse af offentlige nøgle" +msgstr "Udgivelse af offentlig nøgle" msgid "User Chatting" -msgstr "Bruger chatter" +msgstr "Bruger samtaler" msgid "User Browsing" -msgstr "Bruger surfer" +msgstr "Bruger browser" msgid "User Gaming" msgstr "Bruger spiller" @@ -3819,7 +3542,7 @@ msgid "Ping" msgstr "Ping" msgid "Stanza Encryption" -msgstr "Stanza kryptering" +msgstr "Stanza-kryptering" msgid "Entity Time" msgstr "Tidsenhed" @@ -3831,16 +3554,16 @@ msgid "Collaborative Data Objects" msgstr "Samarbejdende dataobjekter" msgid "File Repository and Sharing" -msgstr "Filarkiv og deling" +msgstr "Filarkiv og -deling" msgid "STUN Service Discovery for Jingle" -msgstr "STUN-serviceopdagelse for Jingle" +msgstr "STUN-tjenesteopdagelse for Jingle" msgid "Simplified Encrypted Session Negotiation" msgstr "Simplificeret krypteret sessionsforhandling" msgid "Hop Check" -msgstr "Hop kontrol" +msgstr "Hop-kontrol" msgid "Capabilities" msgstr "Klient understøtter" @@ -3892,7 +3615,7 @@ msgid "Log Out" msgstr "Log af" msgid "Chatty" -msgstr "Vil gerne chatte" +msgstr "Vil gerne samtale" msgid "Extended Away" msgstr "Totalt fraværende" @@ -3910,15 +3633,11 @@ msgid "The following are the results of your search" msgstr "Det følgende er resultaterne på din søgning" #. current comment from Jabber User Directory users.jabber.org -msgid "" -"Find a contact by entering the search criteria in the given fields. Note: " -"Each field supports wild card searches (%)" -msgstr "" -"Find en kontakt ved at indtaste søgekriterien i de givne felter. Bemærk: " -"Hver felt understøtter joker-søgninger (%)" +msgid "Find a contact by entering the search criteria in the given fields. Note: Each field supports wild card searches (%)" +msgstr "Find en kontakt ved at indtaste søgekriterien i de givne felter. Bemærk: Hver felt understøtter joker-søgninger (%)" msgid "Directory Query Failed" -msgstr "Mappe forespørgelse fejlede" +msgstr "Mappe forespørgsel fejlede" msgid "Could not query the directory server." msgstr "Kunne ikke forespørge mappe-serveren." @@ -3933,10 +3652,10 @@ msgid "Fill in one or more fields to search for any matching XMPP users." msgstr "Udfyld et eller flere felter for at søge efter XMPP-brugere." msgid "Email Address" -msgstr "Email adresse" +msgstr "E-postadresse" msgid "Search for XMPP users" -msgstr "Søg efter en XMPP-brugere" +msgstr "Søg efter XMPP-brugere" #. "Search" msgid "Search" @@ -4000,7 +3719,7 @@ msgid "Registration error" msgstr "Fejl under registrering" msgid "Nick changing not supported in non-MUC chatrooms" -msgstr "Ændring af navn ikke understøttet i ikke-MUC chatrum" +msgstr "Ændring af navn ikke understøttet i ikke-MUC samtalerum" msgid "Error retrieving room list" msgstr "Fejl ved modtagelse af rumliste" @@ -4018,7 +3737,7 @@ msgid "Find Rooms" msgstr "Find rum" msgid "You require encryption, but it is not available on this server." -msgstr "Du kræver kryptering, men det er ikke muligt på denne server." +msgstr "Du kræver kryptering, men det er ikke tilrådighed på denne server." msgid "Write error" msgstr "Fejl ved skrivning" @@ -4044,7 +3763,7 @@ msgid "Invalid XMPP ID" msgstr "Ugyldigt XMPP-id" msgid "Invalid XMPP ID. Domain must be set." -msgstr "Ugyldigt XMPP ID. Domæne skal angives." +msgstr "Ugyldigt XMPP-id. Domæne skal angives." #, c-format msgid "Registration of %s@%s successful" @@ -4088,9 +3807,8 @@ msgstr "Dato" msgid "Unregister" msgstr "Afregistrér" -msgid "" -"Please fill out the information below to change your account registration." -msgstr "Udfyld oplysninger forneden for at ændre kontoregistrering." +msgid "Please fill out the information below to change your account registration." +msgstr "Udfyld oplysninger forneden for at ændre din kontoregistrering." msgid "Please fill out the information below to register your new account." msgstr "Udfyld oplysninger forneden for at registrere din nye konto." @@ -4103,14 +3821,14 @@ msgstr "Registrér" #, c-format msgid "Change Account Registration at %s" -msgstr "Skift brugerregistrering på %s" +msgstr "Ændr brugerregistrering på %s" #, c-format msgid "Register New Account at %s" msgstr "Registrér ny konto på %s" msgid "Change Registration" -msgstr "Skift registrering" +msgstr "Ændr registrering" msgid "Error unregistering account" msgstr "Fejl ved afregistrering af konto" @@ -4209,7 +3927,7 @@ msgid "Password (again)" msgstr "Adgangskode (igen)" msgid "Change XMPP Password" -msgstr "Skift XMPP-adgangskode" +msgstr "Ændr XMPP-adgangskode" msgid "Please enter your new password" msgstr "Indtast din nye adgangskode" @@ -4219,7 +3937,7 @@ msgstr "Ret brugeroplysninger..." #. if (js->protocol_options & CHANGE_PASSWORD) { msgid "Change Password..." -msgstr "Skift adgangskode..." +msgstr "Ændr adgangskode..." #. } msgid "Search for Users..." @@ -4247,7 +3965,7 @@ msgid "Item Not Found" msgstr "Punkt ikke fundet" msgid "Malformed XMPP ID" -msgstr "Ugyldigt XMPP-id" +msgstr "Misdannet XMPP-id" msgid "Not Acceptable" msgstr "Ikke acceptabel" @@ -4274,7 +3992,7 @@ msgid "Server Overloaded" msgstr "Server overbelastet" msgid "Service Unavailable" -msgstr "Service ikke tilgængelig" +msgstr "Tjeneste ikke tilgængelig" msgid "Subscription Required" msgstr "Abonement krævet" @@ -4325,7 +4043,7 @@ msgid "Improper Addressing" msgstr "Forkert addressering" msgid "Invalid ID" -msgstr "Ugyldigt ID" +msgstr "Ugyldigt id" msgid "Invalid Namespace" msgstr "Ugyldigt navnerum" @@ -4402,11 +4120,11 @@ msgstr "Ude af stand til at pinge bruger %s" #, c-format msgid "Unable to buzz, because there is nothing known about user %s." -msgstr "Kan ikke bippe, fordi der ikke er noget kendt om brugeren %s." +msgstr "Kan ikke bippe, fordi der ikke er noget kendt om bruger %s." #, c-format msgid "Unable to buzz, because user %s might be offline." -msgstr "Kan ikke bippe, fordi brugeren %s måske er offline." +msgstr "Kan ikke bippe, fordi bruger %s måske er afkoblet." #, c-format msgid "Unable to buzz, because the user %s does not support it." @@ -4423,59 +4141,49 @@ msgstr "%s har bippet dig!" #, c-format msgid "Buzzing %s..." -msgstr "Kalder %s..." +msgstr "Bipper %s..." msgid "config: Configure a chat room." -msgstr "config: Sæt et chatrum op." +msgstr "config: Sæt et samtalerum op." msgid "configure: Configure a chat room." -msgstr "configure: Sæt et chatrum op." +msgstr "configure: Sæt et samtalerum op." msgid "part [room]: Leave the room." -msgstr "part [rum]: Forlad rummet." +msgstr "part [rum]: Forlad rummet." msgid "register: Register with a chat room." -msgstr "register: Registrér med et chatrum." +msgstr "register: Registrér med et samtalerum." msgid "topic [new topic]: View or change the topic." -msgstr "topic [nyt emne]: Vis eller skift emnet." +msgstr "topic [nyt emne]: Vis eller ændr emnet." msgid "ban <user> [reason]: Ban a user from the room." -msgstr "udvis <user> [reason]: Udvis en bruger fra rummet." +msgstr "ban <user> [reason]: Udvis en bruger fra rummet." -msgid "" -"affiliate <user> <owner|admin|member|outcast|none>: Set a user's " -"affiliation with the room." -msgstr "" -"affiliate <bruger> <owner|admin|member|outcast|none>: Sæt en " -"brugerstilknytning til rummet." +msgid "affiliate <user> <owner|admin|member|outcast|none>: Set a user's affiliation with the room." +msgstr "affiliate <bruger> <owner|admin|member|outcast|none>: Indstil en brugerstilknytning til rummet." -msgid "" -"role <user> <moderator|participant|visitor|none>: Set a user's " -"role in the room." -msgstr "" -"role <bruger> <moderator|participant|visitor|none>: Sæt en " -"brugers rolle i rummet." +msgid "role <user> <moderator|participant|visitor|none>: Set a user's role in the room." +msgstr "role <bruger> <moderator|participant|visitor|none>: Indstil en brugers rolle i rummet." msgid "invite <user> [message]: Invite a user to the room." -msgstr "invite <bruger> [besked]: Invitér en bruger til rummet." +msgstr "invite <bruger> [besked]: Invitér en bruger til rummet." msgid "join: <room> [password]: Join a chat on this server." -msgstr "deltag: <room> [password]: Deltag i chatrum på denne server." +msgstr "join: <room> [password]: Tilslut samtalerum på denne server." msgid "kick <user> [reason]: Kick a user from the room." -msgstr "spark <user> [reason]: Spark en bruger fra rummet." +msgstr "kick <user> [reason]: Spark en bruger fra rummet." -msgid "" -"msg <user> <message>: Send a private message to another user." -msgstr "" -"msg <bruger> <besked>: Send en privat besked til en anden bruger." +msgid "msg <user> <message>: Send a private message to another user." +msgstr "msg <bruger> <besked>: Send en privat besked til en anden bruger." msgid "ping <jid>:\tPing a user/component/server." msgstr "ping <jid>:\tPing en bruger/komponent/server." msgid "buzz: Buzz a user to get their attention" -msgstr "buzz: Buzz en kontakt for at få deres opmærksomhed" +msgstr "buzz: Bip en kontakt for at få deres opmærksomhed" #. *< type #. *< ui_requirement @@ -4488,7 +4196,7 @@ msgstr "buzz: Buzz en kontakt for at få deres opmærksomhed" #. * summary #. * description msgid "XMPP Protocol Plugin" -msgstr "XMPP-protokolmodul" +msgstr "XMPP-protokoludvidelsesmodul" #. Translators: 'domain' is used here in the context of Internet domains, e.g. pidgin.im msgid "Domain" @@ -4501,7 +4209,7 @@ msgid "Force old (port 5223) SSL" msgstr "Tving gammel (port 5223) SSL" msgid "Allow plaintext auth over unencrypted streams" -msgstr "Tillad ren tekst godkendelse over ukrypterede strømme" +msgstr "Tillad godkendelse i klartekst over ukrypterede strømme" msgid "Connect port" msgstr "Tilslutningsport" @@ -4518,7 +4226,7 @@ msgstr "Filoverførsel-proxyer" #. this should probably be part of global smiley theme settings later on, #. shared with MSN msgid "Show Custom Smileys" -msgstr "Vis brugerdefinerede smileys" +msgstr "Vis tilpassede smileyer" #, c-format msgid "%s has left the conversation." @@ -4541,7 +4249,7 @@ msgid "Message delivery to %s failed: %s" msgstr "Beskedlevering til %s fejlede: %s" msgid "XMPP Message Error" -msgstr "XMPP beskedfejl" +msgstr "Fejl i XMPP-besked" #, c-format msgid "(Code %s)" @@ -4556,12 +4264,8 @@ msgstr "Ukendt fejlkode i tilstedeværelse" msgid "Create New Room" msgstr "Opret nyt rum" -msgid "" -"You are creating a new room. Would you like to configure it, or accept the " -"default settings?" -msgstr "" -"Du opretter et nyt rum. Vil du konfigurere det, eller bruge " -"standardindstillingerne?" +msgid "You are creating a new room. Would you like to configure it, or accept the default settings?" +msgstr "Du opretter et nyt rum. Vil du konfigurere det, eller bruge standardindstillingerne?" msgid "_Configure Room" msgstr "_Konfigurér rum" @@ -4571,17 +4275,15 @@ msgstr "_Acceptér standardindstillinger" #, c-format msgid "Error joining chat %s" -msgstr "Fejl ved deltagelse i chat %s" +msgstr "Fejl ved tilslutning til samtale %s" #, c-format msgid "Error in chat %s" -msgstr "Fejl i chat %s" +msgstr "Fejl i samtale %s" #, c-format msgid "Unable to send file to %s, user does not support file transfers" -msgstr "" -"Ikke i stand til at sende fil til %s, brugeren understøtter ikke " -"filoverførsler" +msgstr "Ikke i stand til at sende fil til %s, brugeren understøtter ikke filoverførsler" msgid "File Send Failed" msgstr "Afsendelse af fil fejlede" @@ -4592,13 +4294,11 @@ msgstr "Kunne ikke sende fil til %s, ugyldig JID" #, c-format msgid "Unable to send file to %s, user is not online" -msgstr "Ikke i stand til at sende fil til %s, brugeren er ikke online" +msgstr "Ikke i stand til at sende fil til %s, brugeren er ikke tilkoblet" #, c-format msgid "Unable to send file to %s, not subscribed to user presence" -msgstr "" -"Ikke i stand til at sende fil til %s, brugeren understøtter ikke " -"filoverførsler" +msgstr "Ikke i stand til at sende fil til %s, brugeren understøtter ikke filoverførsler" #, c-format msgid "Please select the resource of %s to which you would like to send a file" @@ -4614,26 +4314,22 @@ msgid "Please select your mood from the list." msgstr "Vælg dit humør fra listen." msgid "Set" -msgstr "Sæt" +msgstr "Indstil" msgid "Set Mood..." -msgstr "Sæt humør..." +msgstr "Indstil humør..." msgid "Set User Nickname" -msgstr "Sæt brugerkælenavn" +msgstr "Indstil brugerkælenavn" msgid "Please specify a new nickname for you." -msgstr "Indtast dit nye navn for dig." +msgstr "Indtast dit nye kælenavn for dig." -msgid "" -"This information is visible to all contacts on your contact list, so choose " -"something appropriate." -msgstr "" -"Denne information er synlig for alle kontakter på din kontaktliste, så vælg " -"noget passende." +msgid "This information is visible to all contacts on your contact list, so choose something appropriate." +msgstr "Denne information er synlig for alle kontakter på din kontaktliste, så vælg noget passende." msgid "Set Nickname..." -msgstr "Sæt kælenavn..." +msgstr "Indstil kælenavn..." msgid "Actions" msgstr "Handlinger" @@ -4649,7 +4345,7 @@ msgid "Unable to add \"%s\"." msgstr "Kunne ikke tilføje \"%s\"." msgid "Buddy Add error" -msgstr "Tilføj ven fejl" +msgstr "Fejl ved tilføj ven" msgid "The username specified does not exist." msgstr "Brugernavnet du angav findes ikke." @@ -4659,20 +4355,12 @@ msgid "Buddy list synchronization issue in %s (%s)" msgstr "Problemer med synkronisering af venneliste i %s (%s)" #, c-format -msgid "" -"%s on the local list is inside the group \"%s\" but not on the server list. " -"Do you want this buddy to be added?" -msgstr "" -"%s på den lokale liste er i gruppen \"%s\" men ikke på serverlisten. Vil du " -"have denne ven tilføjet?" +msgid "%s on the local list is inside the group \"%s\" but not on the server list. Do you want this buddy to be added?" +msgstr "%s på den lokale liste er i gruppen \"%s\" men ikke på serverlisten. Vil du have denne ven tilføjet?" #, c-format -msgid "" -"%s is on the local list but not on the server list. Do you want this buddy " -"to be added?" -msgstr "" -"%s er på den lokale liste men ikke på serverlisten. Vil du have denne ven " -"tilføjet?" +msgid "%s is on the local list but not on the server list. Do you want this buddy to be added?" +msgstr "%s er på den lokale liste men ikke på serverlisten. Vil du have denne ven tilføjet?" #, c-format msgid "Unable to parse message" @@ -4684,7 +4372,7 @@ msgstr "Syntaks fejl (sikkert en klientfejl)" #, c-format msgid "Invalid email address" -msgstr "Ugyldig email adresse" +msgstr "Ugyldig e-postadresse" #, c-format msgid "User does not exist" @@ -4720,7 +4408,7 @@ msgstr "Ikke på liste" #, c-format msgid "User is offline" -msgstr "Bruger er offline" +msgstr "Bruger er afkoblet" #, c-format msgid "Already in the mode" @@ -4844,7 +4532,7 @@ msgstr "For mange sessioner" #, c-format msgid "Passport not verified" -msgstr "Passport konto endnu ikke godkendt" +msgstr "Passport-konto endnu ikke godkendt" #, c-format msgid "Bad friend file" @@ -4868,7 +4556,7 @@ msgstr "Godkendelse fejlede" #, c-format msgid "Not allowed when offline" -msgstr "Ikke tilladt når du er offline" +msgstr "Ikke tilladt når du er afkoblet" #, c-format msgid "Not accepting new users" @@ -4880,10 +4568,10 @@ msgstr "Børne-passport uden forældre godkendelse" #, c-format msgid "Passport account not yet verified" -msgstr "Passport konto endnu ikke godkendt" +msgstr "Passport-konto endnu ikke godkendt" msgid "Passport account suspended" -msgstr "Passport konto suspenderet" +msgstr "Passport-konto suspenderet" #, c-format msgid "Bad ticket" @@ -4901,24 +4589,24 @@ msgid "Other Contacts" msgstr "Andre kontakter" msgid "Non-IM Contacts" -msgstr "Ikke-kvikbesked kontakter" +msgstr "Ikke-besked kontakter" msgid "Nudge" -msgstr "Prik" +msgstr "Flirt" #, c-format msgid "%s has nudged you!" -msgstr "%s har prikket til dig!" +msgstr "%s flirter med dig!" #, c-format msgid "Nudging %s..." -msgstr "Prikker %s..." +msgstr "Flirter med %s..." msgid "Email Address..." -msgstr "Email adresser..." +msgstr "E-postadresser..." msgid "Your new MSN friendly name is too long." -msgstr "Dit nye MSN synlige navn er for langt." +msgstr "Dit nye synlige MSN-navn er for langt." msgid "Set your friendly name." msgstr "Sæt dit synlige navn." @@ -4938,12 +4626,8 @@ msgstr "Sæt mobiltelefonnummer." msgid "Allow MSN Mobile pages?" msgstr "Tillad MSN mobiltelefon sider?" -msgid "" -"Do you want to allow or disallow people on your buddy list to send you MSN " -"Mobile pages to your cell phone or other mobile device?" -msgstr "" -"Vil du tillade eller nægte folk på din venneliste at sende dig MSN " -"mobiltelefon sider til din mobiltelefon eller andre mobilenheder?" +msgid "Do you want to allow or disallow people on your buddy list to send you MSN Mobile pages to your cell phone or other mobile device?" +msgstr "Vil du tillade eller nægte folk på din venneliste at sende dig MSN mobiltelefon sider til din mobiltelefon eller andre mobilenheder?" msgid "Allow" msgstr "Tillad" @@ -4959,9 +4643,8 @@ msgid "No text is blocked for this account." msgstr "Ingen tekst er blokeret for denne konto." #, c-format -msgid "" -"MSN servers are currently blocking the following regular expressions:<br/>%s" -msgstr "MSN servere blokerer følgende regulære udtryk:<br/>%s" +msgid "MSN servers are currently blocking the following regular expressions:<br/>%s" +msgstr "MSN-servere blokerer følgende regulære udtryk:<br/>%s" msgid "This account does not have email enabled." msgstr "Denne konto har ikke e-post aktiveret." @@ -5018,7 +4701,7 @@ msgid "Game Title" msgstr "Spiltitel" msgid "Office Title" -msgstr "Kontor titel" +msgstr "Kontortitel" msgid "Set Friendly Name..." msgstr "Sæt synligt navn..." @@ -5048,12 +4731,10 @@ msgid "Send to Mobile" msgstr "Send til mobiltelefon" msgid "Initiate _Chat" -msgstr "Åbn _chat" +msgstr "Åbn _samtale" msgid "SSL support is needed for MSN. Please install a supported SSL library." -msgstr "" -"SSL-understøttelse skal bruges til MSN. Installér et understøttet SSL-" -"bibliotek." +msgstr "SSL-understøttelse er krævet til MSN. Installér et understøttet SSL-bibliotek." msgid "Failed to connect to server." msgstr "Kunne ikke forbinde til server." @@ -5134,10 +4815,10 @@ msgid "Home Fax" msgstr "Hjemmefax" msgid "Personal Email" -msgstr "Personlig email" +msgstr "Personlig e-post" msgid "Personal IM" -msgstr "Personlig kvik-besked" +msgstr "Personlig besked" msgid "Anniversary" msgstr "Jubilæum" @@ -5177,10 +4858,10 @@ msgid "Work Fax" msgstr "Arbejdsfax" msgid "Work Email" -msgstr "Arbejds email" +msgstr "Arbejds e-post" msgid "Work IM" -msgstr "Arbejd kvik-besked" +msgstr "Arbejd besked" msgid "Start Date" msgstr "Startdato" @@ -5197,24 +4878,14 @@ msgstr "Hjemmeside" msgid "The user has not created a public profile." msgstr "Brugeren har ikke oprettet en offentlig profil." -msgid "" -"MSN reported not being able to find the user's profile. This either means " -"that the user does not exist, or that the user exists but has not created a " -"public profile." -msgstr "" -"MSN rapporterede tilbage, at den ikke kunne finde brugerens profil. Dette " -"betyder enten at brugeren ikke eksisterer, eller at brugeren ikke har " -"oprettet en offentlig profil." +msgid "MSN reported not being able to find the user's profile. This either means that the user does not exist, or that the user exists but has not created a public profile." +msgstr "MSN rapporterede tilbage, at den ikke kunne finde brugerens profil. Dette betyder enten at brugeren ikke eksisterer, eller at brugeren ikke har oprettet en offentlig profil." -msgid "" -"Could not find any information in the user's profile. The user most likely " -"does not exist." -msgstr "" -"Kunne ikke finde nogle oplysninger i brugerens profil. Brugeren eksisterer " -"højst sandsynligt ikke." +msgid "Could not find any information in the user's profile. The user most likely does not exist." +msgstr "Kunne ikke finde nogle oplysninger i brugerens profil. Brugeren eksisterer højst sandsynligt ikke." msgid "View web profile" -msgstr "Se web-profil" +msgstr "Se internet-profil" #. *< type #. *< ui_requirement @@ -5235,16 +4906,16 @@ msgid "HTTP Method Server" msgstr "HTTP-metodeserver" msgid "Show custom smileys" -msgstr "Vis brugerdefinerede smileys" +msgstr "Vis tilpassede smileyer" msgid "nudge: nudge a user to get their attention" msgstr "vink: vink en bruger for at få deres opmærksomhed" msgid "Windows Live ID authentication:Unable to connect" -msgstr "Windows Live ID godkendelse:Kunne ikke forbinde" +msgstr "Godkendelse af Windows Live-id:Kunne ikke forbinde" msgid "Windows Live ID authentication:Invalid response" -msgstr "Windows Live ID godkendelse:Ugyldigt svar" +msgstr "Godkendelse af Windows Live-id:Ugyldigt svar" #, c-format msgid "%s is not a valid group." @@ -5290,10 +4961,10 @@ msgstr "%s kunne ikke tilføjes, fordi din venneliste er fuld." #, c-format msgid "%s is not a valid passport account." -msgstr "%s er ikke en gyldig passport konto." +msgstr "%s er ikke en gyldig passport-konto." msgid "Service Temporarily Unavailable." -msgstr "Service midlertidigt utilgængelig." +msgstr "Tjeneste midlertidigt utilgængelig." msgid "Mobile message was not sent because it was too long." msgstr "Mobilbesked blev ikke sendt, fordi den var for lang." @@ -5306,38 +4977,24 @@ msgstr "Kunne ikke slette gruppe" #, c-format msgid "" -"The MSN server will shut down for maintenance in %d minute. You will " -"automatically be signed out at that time. Please finish any conversations " -"in progress.\n" +"The MSN server will shut down for maintenance in %d minute. You will automatically be signed out at that time. Please finish any conversations in progress.\n" "\n" -"After the maintenance has been completed, you will be able to successfully " -"sign in." +"After the maintenance has been completed, you will be able to successfully sign in." msgid_plural "" -"The MSN server will shut down for maintenance in %d minutes. You will " -"automatically be signed out at that time. Please finish any conversations " -"in progress.\n" +"The MSN server will shut down for maintenance in %d minutes. You will automatically be signed out at that time. Please finish any conversations in progress.\n" "\n" -"After the maintenance has been completed, you will be able to successfully " -"sign in." +"After the maintenance has been completed, you will be able to successfully sign in." msgstr[0] "" -"MSN-serveren vil blive lukket ned for vedligeholdelse om %d minut. Du vil " -"automatisk blive logget af på det tidspunkt. Færdiggør alle igangværende " -"samtaler.\n" +"MSN-serveren vil blive lukket ned for vedligeholdelse om %d minut. Du vil automatisk blive logget af på det tidspunkt. Færdiggør alle igangværende samtaler.\n" "\n" "Efter vedligeholdelsen er blevet gennemført, kan du logge ind igen." msgstr[1] "" -"MSN-serveren vil blive lukket ned for vedligeholdelse om %d minutter. Du vil " -"automatisk blive logget af på det tidspunkt. Færdiggør alle igangværende " -"samtaler.\n" +"MSN-serveren vil blive lukket ned for vedligeholdelse om %d minutter. Du vil automatisk blive logget af på det tidspunkt. Færdiggør alle igangværende samtaler.\n" "\n" "Efter vedligeholdelsen er blevet gennemført, kan du logge ind igen." -msgid "" -"Message was not sent because the system is unavailable. This normally " -"happens when the user is blocked or does not exist." -msgstr "" -"Besked blev ikke sendt, fordi systemet ikke er tilgængelig. Dette sker " -"normalt når brugeren er blokeret eller ikke findes." +msgid "Message was not sent because the system is unavailable. This normally happens when the user is blocked or does not exist." +msgstr "Besked blev ikke sendt, fordi systemet ikke er tilgængeligt. Dette sker normalt når brugeren er blokeret eller ikke findes." msgid "Message was not sent because messages are being sent too quickly." msgstr "Besked blev ikke sendt, fordi beskederne sendes for hurtigt." @@ -5375,20 +5032,17 @@ msgid "You have signed on from another location." msgstr "Du er logget ind fra en anden maskine." msgid "The MSN servers are temporarily unavailable. Please wait and try again." -msgstr "" -"MSN serverne er midlertidigt utilgængelige. Vent og forsøg igen senere." +msgstr "MSN-serverne er midlertidigt utilgængelige. Vent og forsøg igen senere." msgid "The MSN servers are going down temporarily." -msgstr "MSN serverne lukkes midlertidigt." +msgstr "MSN-serverne lukkes midlertidigt." #, c-format msgid "Unable to authenticate: %s" msgstr "Kunne ikke godkende: %s" -msgid "" -"Your MSN buddy list is temporarily unavailable. Please wait and try again." -msgstr "" -"Din MSN venneliste er midlertidigt utilgængelig. Vent og førsøg igen senere." +msgid "Your MSN buddy list is temporarily unavailable. Please wait and try again." +msgstr "Din MSN venneliste er midlertidigt utilgængelig. Vent og førsøg igen senere." msgid "Handshaking" msgstr "Forhandler" @@ -5418,15 +5072,13 @@ msgid "Out To Lunch" msgstr "Ude til frokost" msgid "Message may have not been sent because a timeout occurred:" -msgstr "" -"Besked er måske ikke blevet sendt på grund af et tidsudløb der overskred " -"grænsen:" +msgstr "Besked er måske ikke blevet sendt på grund af et tidsudløb der overskred grænsen:" msgid "Message could not be sent, not allowed while invisible:" msgstr "Besked kunne ikke sendes, ikke tilladt imens du er usynlig:" msgid "Message could not be sent because the user is offline:" -msgstr "Besked kunne ikke sendes, fordi brugeren er offline:" +msgstr "Besked kunne ikke sendes, fordi brugeren er afkoblet:" msgid "Message could not be sent because a connection error occurred:" msgstr "Besked kunne ikke sendes på grund af en forbindelsesfejl:" @@ -5434,16 +5086,10 @@ msgstr "Besked kunne ikke sendes på grund af en forbindelsesfejl:" msgid "Message could not be sent because we are sending too quickly:" msgstr "Besked kunne ikke sendes, fordi vi sender for hurtigt:" -msgid "" -"Message could not be sent because we were unable to establish a session with " -"the server. This is likely a server problem, try again in a few minutes:" -msgstr "" -"Besked kunne ikke sendes, fordi vi ikke kunne etablere en session med " -"serveren. Dette er højst sandsynligt et server problem, prøv igen om nogle " -"få minutter:" +msgid "Message could not be sent because we were unable to establish a session with the server. This is likely a server problem, try again in a few minutes:" +msgstr "Besked kunne ikke sendes, fordi vi ikke kunne etablere en session med serveren. Dette er højst sandsynligt et server problem, prøv igen om nogle få minutter:" -msgid "" -"Message could not be sent because an error with the switchboard occurred:" +msgid "Message could not be sent because an error with the switchboard occurred:" msgstr "Besked kunne ikke sendes på grund af en fejl med switchboard:" msgid "Message may have not been sent because an unknown error occurred:" @@ -5483,7 +5129,7 @@ msgstr "Profil URL" #. * summary #. * description msgid "MSN Protocol Plugin" -msgstr "MSN-protokol udvidelsesmodul" +msgstr "MSN-protokoludvidelsesmodul" #, c-format msgid "No such user: %s" @@ -5493,10 +5139,10 @@ msgid "User lookup" msgstr "Opslag af bruger" msgid "Reading challenge" -msgstr "Læsesvar" +msgstr "Reading challenge" msgid "Unexpected challenge length from server" -msgstr "Uventet svarlængde fra server" +msgstr "Unexpected challenge length from server" msgid "Logging in" msgstr "Logger ind" @@ -5515,16 +5161,16 @@ msgstr "Mistede forbindelsen til server" #. Can't write _()'d strings in array initializers. Workaround. msgid "New mail messages" -msgstr "Nye mail-beskeder" +msgstr "Nye postbeskeder" msgid "New blog comments" -msgstr "Ny blog-kommentarer" +msgstr "Nye blog-kommentarer" msgid "New profile comments" msgstr "Nye profilkommentarer" msgid "New friend requests!" -msgstr "Ny venneforspørgsel!" +msgstr "Ny venneanmodning!" msgid "New picture comments" msgstr "Nye billedkommentarer" @@ -5536,18 +5182,10 @@ msgid "IM Friends" msgstr "IM-venner" #, c-format -msgid "" -"%d buddy was added or updated from the server (including buddies already on " -"the server-side list)" -msgid_plural "" -"%d buddies were added or updated from the server (including buddies already " -"on the server-side list)" -msgstr[0] "" -"%d ven blev tilføjet eller opdateret fra serveren (inkluderet venner som " -"allerede findes på serverlisten)" -msgstr[1] "" -"%d venner blev tilføjet eller opdateret fra serveren (inkluderet venner som " -"allerede findes på serverlisten)" +msgid "%d buddy was added or updated from the server (including buddies already on the server-side list)" +msgid_plural "%d buddies were added or updated from the server (including buddies already on the server-side list)" +msgstr[0] "%d ven blev tilføjet eller opdateret fra serveren (inkluderet venner som allerede findes på serverlisten)" +msgstr[1] "%d venner blev tilføjet eller opdateret fra serveren (inkluderet venner som allerede findes på serverlisten)" msgid "Add contacts from server" msgstr "Tilføj kontakter fra server" @@ -5563,18 +5201,11 @@ msgid "Protocol error, code %d: %s" msgstr "Protokol fejlkode %d: %s" #, c-format -msgid "" -"%s Your password is %d characters, greater than the expected maximum length " -"of %d for MySpaceIM. Please shorten your password at http://profileedit." -"myspace.com/index.cfm?fuseaction=accountSettings.changePassword and try " -"again." -msgstr "" -"%s Din adgangskode er %d karakterer og dermed større end det forventede " -"maksimum på %d for MySpaceIM. Forkort din adgangskode på http://profileedit." -"myspace.com/index.cfm?fuseaction=accountSettings.changePassword og prøv igen." +msgid "%s Your password is %d characters, greater than the expected maximum length of %d for MySpaceIM. Please shorten your password at http://profileedit.myspace.com/index.cfm?fuseaction=accountSettings.changePassword and try again." +msgstr "%s Din adgangskode er %d karakterer og dermed større end det forventede maksimum på %d for MySpaceIM. Forkort din adgangskode på http://profileedit.myspace.com/index.cfm?fuseaction=accountSettings.changePassword og prøv igen." msgid "MySpaceIM Error" -msgstr "MySpaceIM fejl" +msgstr "MySpaceIM-fejl" msgid "Invalid input condition" msgstr "Ugyldig indtastningsbetingelse" @@ -5590,7 +5221,7 @@ msgid "Couldn't connect to host: %s (%d)" msgstr "Kunne ikke forbinde til vært: %s (%d)" msgid "Failed to add buddy" -msgstr "Kunne ikke tilføje en ven" +msgstr "Kunne ikke tilføje ven" msgid "'addbuddy' command failed." msgstr "\"addbuddy\"-kommando fejlede." @@ -5613,12 +5244,8 @@ msgstr "Manglende kode" msgid "The RC4 cipher could not be found" msgstr "RC4 cipher kunne ikke findes" -msgid "" -"Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will " -"not be loaded." -msgstr "" -"Opgrader til en libpurple med RC4-understøttelse (>=2.0.1). MySpaceIM-" -"udvidelsesmodul vil ikke blive indlæst." +msgid "Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will not be loaded." +msgstr "Opgradér til en libpurple med RC4-understøttelse (>=2.0.1). MySpaceIM-udvidelsesmodul vil ikke blive indlæst." msgid "Add friends from MySpace.com" msgstr "Tilføj venner fra MySpace.com" @@ -5631,18 +5258,16 @@ msgid "Find people..." msgstr "Find folk..." msgid "Change IM name..." -msgstr "Skift IM-navn..." +msgstr "Ændr beskednavn..." msgid "myim URL handler" msgstr "myim URL-håndtering" msgid "No suitable MySpaceIM account could be found to open this myim URL." -msgstr "" -"Der kunne ikke findes nogen passende MySpaceIM-konto til at åbne denne myim " -"URL." +msgstr "Der kunne ikke findes nogen passende MySpaceIM-konto til at åbne denne myim URL." msgid "Enable the proper MySpaceIM account and try again." -msgstr "Aktiver korrekte MySpaceIM-konto og prøv igen." +msgstr "Aktivér den korrekte MySpaceIM-konto og prøv igen." msgid "Show display name in status text" msgstr "Vis synligt navn i statustekst" @@ -5657,7 +5282,7 @@ msgid "Screen resolution (dots per inch)" msgstr "Skærmopløsning (punkter pr. tomme)" msgid "Base font size (points)" -msgstr "Basal striftstørrelse (punkter)" +msgstr "Basal skrifttypestørrelse (punkter)" msgid "User" msgstr "Bruger" @@ -5706,15 +5331,15 @@ msgstr "Indtast et brugernavn der skal kontrolleres for tilgænglighed:" #. * connotation, for example, "he was zapped by electricity when #. * he put a fork in the toaster." msgid "Zap" -msgstr "Zap" +msgstr "Slå" #, c-format msgid "%s has zapped you!" -msgstr "%s har zappet dig!" +msgstr "%s har slået dig!" #, c-format msgid "Zapping %s..." -msgstr "Zapper %s..." +msgstr "Slår %s..." #. Whack means "to hit or strike someone with a sharp blow" msgid "Whack" @@ -5776,7 +5401,7 @@ msgstr "%s har givet dig en kindhest!" #, c-format msgid "Slapping %s..." -msgstr "Slår %s..." +msgstr "Giver kindhest til %s..." #. Goose means "to pinch someone on their butt" msgid "Goose" @@ -5891,17 +5516,13 @@ msgid "Master archive is misconfigured" msgstr "Hoved-arkiv er konfigureret forkert" msgid "Incorrect username or password" -msgstr "Forkert brugernavn eller kodeord" +msgstr "Forkert brugernavn eller adgangskode" msgid "Could not recognize the host of the username you entered" msgstr "Kunne ikke genkende værten på brugernavnet du indtastede" -msgid "" -"Your account has been disabled because too many incorrect passwords were " -"entered" -msgstr "" -"Din konto er blevet deaktiveret fordi for mange ugyldige adgangskoder blev " -"indtastet" +msgid "Your account has been disabled because too many incorrect passwords were entered" +msgstr "Din konto er blevet deaktiveret fordi for mange ugyldige adgangskoder blev indtastet" msgid "You cannot add the same person twice to a conversation" msgstr "Du kan ikke tilføje den samme person to gange til en samtale" @@ -5921,14 +5542,11 @@ msgstr "Inkompatibel protokolversion" msgid "The user has blocked you" msgstr "Brugeren har blokeret dig" -msgid "" -"This evaluation version does not allow more than ten users to log in at one " -"time" -msgstr "" -"Denne prøve-version tillader ikke mere end 10 brugere logget ind på samme tid" +msgid "This evaluation version does not allow more than ten users to log in at one time" +msgstr "Denne prøve-version tillader ikke mere end 10 brugere logget ind på samme tid" msgid "The user is either offline or you are blocked" -msgstr "Brugeren er enten offline, eller du er blokeret" +msgstr "Brugeren er enten afkoblet, eller du er blokeret" #, c-format msgid "Unknown error: 0x%X" @@ -5964,20 +5582,12 @@ msgid "Unable to send message. Could not create the conference (%s)." msgstr "Kunne ikke sende besked. Kunne ikke oprette konferencen (%s)." #, c-format -msgid "" -"Unable to move user %s to folder %s in the server side list. Error while " -"creating folder (%s)." -msgstr "" -"Kunne ikke flytte bruger %s til mappe %s i serverlisten. Fejl skete, da " -"mappe skulle oprettes (%s)." +msgid "Unable to move user %s to folder %s in the server side list. Error while creating folder (%s)." +msgstr "Kunne ikke flytte bruger %s til mappe %s i serverlisten. Fejl skete, da mappe skulle oprettes (%s)." #, c-format -msgid "" -"Unable to add %s to your buddy list. Error creating folder in server side " -"list (%s)." -msgstr "" -"Kunne ikke tilføje %s til din venneliste. Fejl ved opretning af mappe i " -"serverliste (%s)." +msgid "Unable to add %s to your buddy list. Error creating folder in server side list (%s)." +msgstr "Kunne ikke tilføje %s til din venneliste. Fejl ved opretning af mappe i serverliste (%s)." #, c-format msgid "Could not get details for user %s (%s)." @@ -6020,7 +5630,7 @@ msgid "Mailstop" msgstr "Poststop" msgid "User ID" -msgstr "Bruger ID" +msgstr "Bruger id" #. tag = _("DN"); #. value = nm_user_record_get_dn(user_record); @@ -6062,29 +5672,23 @@ msgstr "" "Sendt: %s" msgid "Would you like to join the conversation?" -msgstr "Vil du deltage i samtalen?" +msgstr "Vil du tilslutte samtalen?" msgid "You have been logged out because you logged in at another workstation." msgstr "Du er blevet logget af, fordi du er logget på en anden maskine." #, c-format -msgid "" -"%s appears to be offline and did not receive the message that you just sent." -msgstr "" -"%s ser ud til at være offline, og har ikke modtaget beskeden du har sendt." +msgid "%s appears to be offline and did not receive the message that you just sent." +msgstr "%s ser ud til at være afkoblet, og har ikke modtaget beskeden du har sendt." -msgid "" -"Unable to connect to server. Please enter the address of the server you wish " -"to connect to." -msgstr "" -"Kunne ikke forbinde til server. Indtast adressen på serveren du vil forbinde " -"til." +msgid "Unable to connect to server. Please enter the address of the server you wish to connect to." +msgstr "Kunne ikke forbinde til server. Indtast adressen på serveren du vil forbinde til." msgid "Error. SSL support is not installed." msgstr "Fejl. SSL-understøttelse er ikke installeret." msgid "This conference has been closed. No more messages can be sent." -msgstr "Konferencen er blevet lukket. Der kan ikke sendes flere beskeder." +msgstr "Konferencen er blevet afsluttet. Der kan ikke sendes flere beskeder." #. *< type #. *< ui_requirement @@ -6106,10 +5710,10 @@ msgid "Server port" msgstr "Server port" msgid "Could not join chat room" -msgstr "Kunne ikke tilslutte chatrum" +msgstr "Kunne ikke tilslutte samtalerum" msgid "Invalid chat room name" -msgstr "Ugyldigt navn på chatrum" +msgstr "Ugyldigt navn på samtalerum" msgid "Server closed the connection." msgstr "Server lukkede forbindelsen." @@ -6119,7 +5723,7 @@ msgid "" "Lost connection with server:\n" "%s" msgstr "" -"Mistede forbindelsen med server:\n" +"Mistede forbindelsen til server:\n" "%s" msgid "Received invalid data on connection with server." @@ -6165,7 +5769,7 @@ msgstr "Fjernbrugeren har afslået din forespørgsel." #, c-format msgid "Lost connection with the remote user:<br>%s" -msgstr "Mistede forbindelse med fjernbrugeren:<br>%s" +msgstr "Mistede forbindelse til fjernbrugeren:<br>%s" msgid "Received invalid data on connection with remote user." msgstr "Modtog ugyldige data ved forbindelse til fjern bruger." @@ -6174,15 +5778,11 @@ msgid "Could not establish a connection with the remote user." msgstr "Kunne ikke etablere en forbindelse til en fjernbruger." msgid "Direct IM established" -msgstr "Direkte kvikbesked etableret" +msgstr "Direkte besked etableret" #, c-format -msgid "" -"%s tried to send you a %s file, but we only allow files up to %s over Direct " -"IM. Try using file transfer instead.\n" -msgstr "" -"%s forsøgte at sende dig en %s fil, men vi tillader kun filer op til %s over " -"direkte kvikbesked. Prøv at bruge filoverførelse i stedet for.\n" +msgid "%s tried to send you a %s file, but we only allow files up to %s over Direct IM. Try using file transfer instead.\n" +msgstr "%s forsøgte at sende dig en %s fil, men vi tillader kun filer op til %s over direkte besked. Prøv at bruge filoverførelse i stedet for.\n" #, c-format msgid "File %s is %s, which is larger than the maximum size of %s." @@ -6201,7 +5801,7 @@ msgid "Rate to client" msgstr "Grænse til klient" msgid "Service unavailable" -msgstr "Service ikke tilgængelig" +msgstr "Tjeneste ikke tilgængelig" msgid "Service not defined" msgstr "Tjeneste ikke defineret" @@ -6260,24 +5860,12 @@ msgstr "Kø fuld" msgid "Not while on AOL" msgstr "Ikke samtidig med AOL" -msgid "" -"(There was an error receiving this message. The buddy you are speaking with " -"is probably using a different encoding than expected. If you know what " -"encoding he is using, you can specify it in the advanced account options for " -"your AIM/ICQ account.)" -msgstr "" -"(Der opstod en fejl ved modtagelse af denne besked. Vennen du taler med " -"bruger måske en anden indkodning end forventet. Hvis du kender indkodningen, " -"som han bruger, kan du angive den i avancerede kontovalgmuligheder for din " -"AIM/ICQ-konto.)" +msgid "(There was an error receiving this message. The buddy you are speaking with is probably using a different encoding than expected. If you know what encoding he is using, you can specify it in the advanced account options for your AIM/ICQ account.)" +msgstr "(Der opstod en fejl ved modtagelse af denne besked. Vennen du taler med bruger måske en anden indkodning end forventet. Hvis du kender indkodningen, som han bruger, kan du angive den i avancerede kontoindstillinger for din AIM/ICQ-konto.)" #, c-format -msgid "" -"(There was an error receiving this message. Either you and %s have " -"different encodings selected, or %s has a buggy client.)" -msgstr "" -"(Der opstod en fejl ved modtagelse af denne besked. Enten har du eller %s " -"valgt forskellige indkodninger, eller har %s en fejlramt klient.)" +msgid "(There was an error receiving this message. Either you and %s have different encodings selected, or %s has a buggy client.)" +msgstr "(Der opstod en fejl ved modtagelse af denne besked. Enten har du eller %s valgt forskellige indkodninger, eller har %s en fejlramt klient.)" #. Label msgid "Buddy Icon" @@ -6332,7 +5920,7 @@ msgid "Security Enabled" msgstr "Sikkerhedsaktiveret" msgid "Video Chat" -msgstr "Video chat" +msgstr "Videosamtale" msgid "iChat AV" msgstr "iChat AV" @@ -6347,7 +5935,7 @@ msgid "Screen Sharing" msgstr "Skærmdeling" msgid "Free For Chat" -msgstr "Fri til chat" +msgstr "Fri til samtale" msgid "Not Available" msgstr "Ikke tilgængelig" @@ -6356,7 +5944,7 @@ msgid "Occupied" msgstr "Optaget" msgid "Web Aware" -msgstr "Web-opmærksom" +msgstr "Internet-opmærksom" msgid "Invisible" msgstr "Usynlig" @@ -6394,18 +5982,11 @@ msgstr "Forbindelse oprettet, cookie sendt" #. TODO: Don't call this with ssi msgid "Finalizing connection" -msgstr "Færddiggører opkobling" +msgstr "Færddiggører forbindelse" #, c-format -msgid "" -"Unable to login: Could not sign on as %s because the username is invalid. " -"Usernames must be a valid email address, or start with a letter and contain " -"only letters, numbers and spaces, or contain only numbers." -msgstr "" -"Kunne ikke logge ind: Kunne ikke logge på som %s, fordi brugernavnet er " -"ugyldigt. Brugernavne skal være en gyldig e-postadresse, eller starte med et " -"bogstav og kun indeholde bogstaver, tal eller mellemrum, eller kun indeholde " -"tal." +msgid "Unable to login: Could not sign on as %s because the username is invalid. Usernames must be a valid email address, or start with a letter and contain only letters, numbers and spaces, or contain only numbers." +msgstr "Kunne ikke logge ind: Kunne ikke logge på som %s, fordi brugernavnet er ugyldigt. Brugernavne skal være en gyldig e-postadresse, eller starte med et bogstav og kun indeholde bogstaver, tal eller mellemrum, eller kun indeholde tal." #. Unregistered screen name #. uid is not exist @@ -6425,12 +6006,8 @@ msgstr "AOL Instant Messenger tjenesten er midlertidigt utilgængelig." #. screen name connecting too frequently #. IP address connecting too frequently -msgid "" -"You have been connecting and disconnecting too frequently. Wait ten minutes " -"and try again. If you continue to try, you will need to wait even longer." -msgstr "" -"Du er logget ind og ud for mange gange indenfor et kort tidsrum. Vent ti " -"minutter og prøv så igen, for ellers skal du bare vente endnu længere." +msgid "You have been connecting and disconnecting too frequently. Wait ten minutes and try again. If you continue to try, you will need to wait even longer." +msgstr "Du er logget ind og ud for mange gange indenfor et kort tidsrum. Vent ti minutter og prøv så igen, for ellers skal du bare vente endnu længere." #, c-format msgid "The client version you are using is too old. Please upgrade at %s" @@ -6459,19 +6036,17 @@ msgstr "_O.k." #, c-format msgid "You may be disconnected shortly. If so, check %s for updates." -msgstr "" -"Du vil måske blive frakoblet snart. Hvis tilfældet, kontrollér %s for " -"opdateringer." +msgstr "Du vil måske blive frakoblet snart. Hvis tilfældet, kontrollér %s for opdateringer." msgid "Unable to get a valid AIM login hash." -msgstr "Kunne ikke opnå et gyldigt AIM-logindhash." +msgstr "Kunne ikke hente et gyldigt AIM-logindhash." #, c-format msgid "You may be disconnected shortly. Check %s for updates." msgstr "Du vil måske blive frakoblet snart. Kontrollér %s for opdateringer." msgid "Unable to get a valid login hash." -msgstr "Kunne ikke opnå et gyldigt loginhash." +msgstr "Kunne ikke hente et gyldigt loginhash." msgid "Password sent" msgstr "Adgangskode sendt" @@ -6496,12 +6071,10 @@ msgstr "Besked for nægtelse af godkendelses anmodning:" #, c-format msgid "" -"The user %u has denied your request to add them to your buddy list for the " -"following reason:\n" +"The user %u has denied your request to add them to your buddy list for the following reason:\n" "%s" msgstr "" -"Brugeren %u har nægtet din anmodning om at tilføje sig til din venneliste, " -"af den følgende grund:\n" +"Brugeren %u har nægtet din anmodning om at tilføje sig til din venneliste, af den følgende grund:\n" "%s" msgid "ICQ authorization denied." @@ -6543,7 +6116,7 @@ msgid "" "Message is:\n" "%s" msgstr "" -"Du har modtaget en ICQ email fra %s [%s]\n" +"Du har modtaget en ICQ e-post fra %s [%s]\n" "\n" "Beskeden er:\n" "%s" @@ -6574,37 +6147,22 @@ msgstr[0] "Du har ikke modtaget %hu besked fra %s, fordi den var for store." msgstr[1] "Du har ikke modtaget %hu beskeder fra %s, fordi de var for store." #, c-format -msgid "" -"You missed %hu message from %s because the rate limit has been exceeded." -msgid_plural "" -"You missed %hu messages from %s because the rate limit has been exceeded." -msgstr[0] "" -"Du har ikke modtaget %hu besked fra %s, fordi den blev sendt for hurtigt." -msgstr[1] "" -"Du har ikke modtaget %hu beskeder fra %s, fordi de blev sendt for hurtigt." +msgid "You missed %hu message from %s because the rate limit has been exceeded." +msgid_plural "You missed %hu messages from %s because the rate limit has been exceeded." +msgstr[0] "Du har ikke modtaget %hu besked fra %s, fordi den blev sendt for hurtigt." +msgstr[1] "Du har ikke modtaget %hu beskeder fra %s, fordi de blev sendt for hurtigt." #, 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] "" -"Du har ikke modtaget %hu besked fra %s, fordi hans/hendes advarselsniveau er " -"for højt." -msgstr[1] "" -"Du har ikke modtaget %hu beskeder fra %s, fordi hans/hendes advarselsniveau " -"er for højt." +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] "Du har ikke modtaget %hu besked fra %s, fordi hans/hendes advarselsniveau er for højt." +msgstr[1] "Du har ikke modtaget %hu beskeder fra %s, fordi hans/hendes advarselsniveau er for højt." #, 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] "" -"Du har ikke modtaget %hu besked fra %s, fordi dit advarselsniveau er for " -"højt." -msgstr[1] "" -"Du har ikke modtaget %hu beskeder fra %s, fordi dit advarselsniveau er for " -"højt." +msgid_plural "You missed %hu messages from %s because your warning level is too high." +msgstr[0] "Du har ikke modtaget %hu besked fra %s, fordi dit advarselsniveau er for højt." +msgstr[1] "Du har ikke modtaget %hu beskeder fra %s, fordi dit advarselsniveau er for højt." #, c-format msgid "You missed %hu message from %s for an unknown reason." @@ -6629,7 +6187,7 @@ msgid "User information not available: %s" msgstr "Bruger oplysninger er ikke tilgængelige: %s" msgid "Online Since" -msgstr "Online siden" +msgstr "Tilkoblet siden" msgid "Member Since" msgstr "Medlem siden" @@ -6641,23 +6199,15 @@ msgid "Your AIM connection may be lost." msgstr "Din AIM forbindelse kan være afbrudt." #. The conversion failed! -msgid "" -"[Unable to display a message from this user because it contained invalid " -"characters.]" -msgstr "" -"[Ude af stand til at vise en besked fra denne bruger, fordi den indeholdte " -"ugyldige bogstaver.]" +msgid "[Unable to display a message from this user because it contained invalid characters.]" +msgstr "[Ude af stand til at vise en besked fra denne bruger, fordi den indeholdte ugyldige bogstaver.]" -msgid "" -"The last action you attempted could not be performed because you are over " -"the rate limit. Please wait 10 seconds and try again." -msgstr "" -"Den sidste handling blev ikke udført, fordi du har overskredet grænsen. Vent " -"i 10 sekunder og prøv igen." +msgid "The last action you attempted could not be performed because you are over the rate limit. Please wait 10 seconds and try again." +msgstr "Den sidste handling blev ikke udført, fordi du har overskredet grænsen. Vent i 10 sekunder og prøv igen." #, c-format msgid "You have been disconnected from chat room %s." -msgstr "Forbindelse til chat-rum %s afbrudt." +msgstr "Forbindelse til samtalerum %s afbrudt." msgid "Mobile Phone" msgstr "Mobiltelefon" @@ -6691,139 +6241,88 @@ msgstr "Pop-Up besked" #, c-format msgid "The following username is associated with %s" msgid_plural "The following usernames are associated with %s" -msgstr[0] "Følgende brugernavn er associeret med %s" -msgstr[1] "Følgende brugernavne er associeret med %s" +msgstr[0] "Følgende brugernavn er tilknyttet %s" +msgstr[1] "Følgende brugernavne er tilknyttet %s" #, c-format msgid "No results found for email address %s" -msgstr "Ingen resultater fundet for post-adressen %s" +msgstr "Ingen resultater fundet for e-postadressen %s" #, c-format msgid "You should receive an email asking to confirm %s." -msgstr "Du bør modtage en email for at acceptere %s." +msgstr "Du bør modtage en e-post for at acceptere %s." msgid "Account Confirmation Requested" msgstr "Der er anmodet om konto bekræftelse" #, c-format -msgid "" -"Error 0x%04x: Unable to format username because the requested name differs " -"from the original." -msgstr "" -"Fejl 0x%04x: Kunne ikke formattere brugernavn fordi det anmodede brugernavn " -"er forskelligt fra det oprindelige." +msgid "Error 0x%04x: Unable to format username because the requested name differs from the original." +msgstr "Fejl 0x%04x: Kunne ikke formattere brugernavn fordi det anmodede brugernavn er forskelligt fra det oprindelige." #, c-format msgid "Error 0x%04x: Unable to format username because it is invalid." msgstr "Fejl 0x%04x: Kunne ikke formattere brugernavn fordi det er ugyldigt." #, c-format -msgid "" -"Error 0x%04x: Unable to format username because the requested name is too " -"long." -msgstr "" -"Fejl 0x%04x: Kunne ikke formattere brugernavn fordi det anmodede navn er for " -"langt." +msgid "Error 0x%04x: Unable to format username because the requested name is too long." +msgstr "Fejl 0x%04x: Kunne ikke formattere brugernavn fordi det anmodede navn er for langt." #, c-format -msgid "" -"Error 0x%04x: Unable to change email address because there is already a " -"request pending for this username." -msgstr "" -"Fejl 0x%04x: Ikke i stand til at ændre e-post adresse, fordi der allerede er " -"en anmodning ventende for dette brugernavn." +msgid "Error 0x%04x: Unable to change email address because there is already a request pending for this username." +msgstr "Fejl 0x%04x: Kan ikke ændre e-postadresse, fordi der allerede er en anmodning ventende for dette brugernavn." #, c-format -msgid "" -"Error 0x%04x: Unable to change email address because the given address has " -"too many usernames associated with it." -msgstr "" -"Fejl 0x%04x: Ikke i stand til at ændre e-post adresse, fordi den angivne " -"adresse har for mange brugernavne knyttet til sig." +msgid "Error 0x%04x: Unable to change email address because the given address has too many usernames associated with it." +msgstr "Fejl 0x%04x: Kan ikke ændre e-postadresse, fordi den angivne adresse har for mange brugernavne tilknyttet sig." #, c-format -msgid "" -"Error 0x%04x: Unable to change email address because the given address is " -"invalid." -msgstr "" -"Fejl 0x%04x: Ikke i stand til at ændre email adresse, fordi den angivne " -"adresse er ugyldig." +msgid "Error 0x%04x: Unable to change email address because the given address is invalid." +msgstr "Fejl 0x%04x: Kan ikke ændre e-postadresse, fordi den angivne adresse er ugyldig." #, c-format msgid "Error 0x%04x: Unknown error." msgstr "Fejl 0x%04x: Ukendt fejl." msgid "Error Changing Account Info" -msgstr "Fejl ved ændring af konto oplysninger" +msgstr "Fejl ved ændring af kontooplysninger" #, c-format msgid "The email address for %s is %s" -msgstr "%s's post-adresse er %s" +msgstr "%s's e-postadresse er %s" msgid "Account Info" msgstr "Konto Oplysninger" -msgid "" -"Your IM Image was not sent. You must be Direct Connected to send IM Images." -msgstr "" -"Dit billede blev ikke sendt. Du skal være direkte forbundet for at sende " -"billeder." +msgid "Your IM Image was not sent. You must be Direct Connected to send IM Images." +msgstr "Dit billede blev ikke sendt. Du skal være direkte forbundet for at sende billeder." msgid "Unable to set AIM profile." msgstr "Kunne ikke ændre AIM profil." -msgid "" -"You have probably requested to set your profile before the login procedure " -"completed. Your profile remains unset; try setting it again when you are " -"fully connected." -msgstr "" -"Du har sikkert anmodet om at sætte din profil før login-processen er blevet " -"færdig. Din profil er ikke sat; prøv at sætte den igen når du er færdig med " -"at forbinde til serveren." +msgid "You have probably requested to set your profile before the login procedure completed. Your profile remains unset; try setting it again when you are fully connected." +msgstr "Du har sikkert anmodet om at sætte din profil før login-processen er blevet færdig. Din profil er ikke sat; prøv at sætte den igen når du er færdig med at forbinde til serveren." #, c-format -msgid "" -"The maximum profile length of %d byte has been exceeded. It has been " -"truncated for you." -msgid_plural "" -"The maximum profile length of %d bytes has been exceeded. It has been " -"truncated for you." -msgstr[0] "" -"Profil-længdens maksimale størrelse på %d byte er blevet overskredet. Den " -"er blevet forkortet for dig." -msgstr[1] "" -"Profil-længdens maksimale størrelse på %d bytes er blevet overskredet. Den " -"er blevet forkortet for dig." +msgid "The maximum profile length of %d byte has been exceeded. It has been truncated for you." +msgid_plural "The maximum profile length of %d bytes has been exceeded. It has been truncated for you." +msgstr[0] "Profil-længdens maksimale størrelse på %d byte er blevet overskredet. Den er blevet forkortet for dig." +msgstr[1] "Profil-længdens maksimale størrelse på %d bytes er blevet overskredet. Den er blevet forkortet for dig." msgid "Profile too long." msgstr "Profil for lang." #, c-format -msgid "" -"The maximum away message length of %d byte has been exceeded. It has been " -"truncated for you." -msgid_plural "" -"The maximum away message length of %d bytes has been exceeded. It has been " -"truncated for you." -msgstr[0] "" -"Fraværsbeskedens maksimale længde på %d byte er blevet overskredet. Den er " -"blevet forkortet for dig." -msgstr[1] "" -"Fraværsbeskedens maksimale længde på %d bytes er blevet overskredet. Den er " -"blevet forkortet for dig." +msgid "The maximum away message length of %d byte has been exceeded. It has been truncated for you." +msgid_plural "The maximum away message length of %d bytes has been exceeded. It has been truncated for you." +msgstr[0] "Fraværsbeskedens maksimale længde på %d byte er blevet overskredet. Den er blevet forkortet for dig." +msgstr[1] "Fraværsbeskedens maksimale længde på %d bytes er blevet overskredet. Den er blevet forkortet for dig." msgid "Away message too long." msgstr "Fraværsbesked for lang." #, c-format -msgid "" -"Could not add the buddy %s because the username is invalid. Usernames must " -"be a valid email address, or start with a letter and contain only letters, " -"numbers and spaces, or contain only numbers." -msgstr "" -"Kunne ikke tilføje vennen %s, fordi brugernavnet er ugyldigt. Brugernavne " -"skal være en gyldig e-postadresse, eller starte med ét bogstav og kun " -"indeholde bogstaver, tal og mellemrum, eller kun indeholde tal." +msgid "Could not add the buddy %s because the username is invalid. Usernames must be a valid email address, or start with a letter and contain only letters, numbers and spaces, or contain only numbers." +msgstr "Kunne ikke tilføje vennen %s, fordi brugernavnet er ugyldigt. Brugernavne skal være en gyldig e-postadresse, eller starte med ét bogstav og kun indeholde bogstaver, tal og mellemrum, eller kun indeholde tal." msgid "Unable to Add" msgstr "Ikke i stand til at tilføje" @@ -6831,24 +6330,15 @@ msgstr "Ikke i stand til at tilføje" msgid "Unable to Retrieve Buddy List" msgstr "Kunne ikke hente venneliste" -msgid "" -"The AIM servers were temporarily unable to send your buddy list. Your buddy " -"list is not lost, and will probably become available in a few minutes." -msgstr "" -"AIM-serverne var midlertidigt ude af stand til at hente din venneliste. Din " -"venneliste er ikke tabt, og vil sikkert blive tilgængelig indenfor et par " -"minutter." +msgid "The AIM servers were temporarily unable to send your buddy list. Your buddy list is not lost, and will probably become available in a few minutes." +msgstr "AIM-serverne var midlertidigt ude af stand til at sende din venneliste. Din venneliste er ikke tabt, og vil sikkert blive tilgængelig indenfor et par minutter." msgid "Orphans" msgstr "Tabte" #, c-format -msgid "" -"Could not add the buddy %s because you have too many buddies in your buddy " -"list. Please remove one and try again." -msgstr "" -"Kunne ikke tilføje vennen %s fordi du har for mange venner i din venneliste." -"Fjern en, og prøv igen." +msgid "Could not add the buddy %s because you have too many buddies in your buddy list. Please remove one and try again." +msgstr "Kunne ikke tilføje vennen %s fordi du har for mange venner i din venneliste.Fjern en, og prøv igen." msgid "(no name)" msgstr "(intet navn)" @@ -6858,12 +6348,8 @@ msgid "Could not add the buddy %s for an unknown reason." msgstr "Kunne ikke tilføje vennen %s af en ukendt årsag." #, c-format -msgid "" -"The user %s has given you permission to add him or her to your buddy list. " -"Do you want to add this user?" -msgstr "" -"Brugeren %s har givet dig lov til at tilføje dig til din venneliste. Vil du " -"tilføje brugeren?" +msgid "The user %s has given you permission to add him or her to your buddy list. Do you want to add this user?" +msgstr "Brugeren %s har givet dig lov til at tilføje dig til din venneliste. Vil du tilføje brugeren?" msgid "Authorization Given" msgstr "Godkendelse Givet" @@ -6871,9 +6357,7 @@ msgstr "Godkendelse Givet" #. Granted #, c-format msgid "The user %s has granted your request to add them to your buddy list." -msgstr "" -"Brugeren %s har givet lov til din anmodning om at tilføje dem til din " -"venneliste." +msgstr "Brugeren %s har givet lov til din anmodning om at tilføje dem til din venneliste." msgid "Authorization Granted" msgstr "Godkendelse Givet" @@ -6881,12 +6365,10 @@ msgstr "Godkendelse Givet" #. Denied #, c-format msgid "" -"The user %s has denied your request to add them to your buddy list for the " -"following reason:\n" +"The user %s has denied your request to add them to your buddy list for the following reason:\n" "%s" msgstr "" -"Brugeren %s har nægtet din anmodning om at tilføje dem til din venneliste af " -"følgende grund:\n" +"Brugeren %s har nægtet din anmodning om at tilføje dem til din venneliste af følgende grund:\n" "%s" msgid "Authorization Denied" @@ -6896,10 +6378,10 @@ msgid "_Exchange:" msgstr "_Udveksl:" msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats." -msgstr "Dit billede blev ikke sendt. Du kan ikke sende billeder i AIM chats." +msgstr "Dit billede blev ikke sendt. Du kan ikke sende billeder i AIM-samtaler." msgid "iTunes Music Store Link" -msgstr "iTunes Music Store link" +msgstr "Henvisning til iTunes Music Store" #, c-format msgid "Buddy Comment for %s" @@ -6912,12 +6394,8 @@ msgstr "Vennekommentar:" msgid "You have selected to open a Direct IM connection with %s." msgstr "Du har valgt at åbne en direkte besked-forbindelse med %s." -msgid "" -"Because this reveals your IP address, it may be considered a security risk. " -"Do you wish to continue?" -msgstr "" -"Fordi dette afslører din IP-adresse, ses det som en privatlivs-risiko. Vil " -"du fortsætte?" +msgid "Because this reveals your IP address, it may be considered a security risk. Do you wish to continue?" +msgstr "Fordi dette afslører din IP-adresse, ses det som en privatlivs-risiko. Vil du fortsætte?" msgid "C_onnect" msgstr "_Tilslut" @@ -6942,7 +6420,7 @@ msgid "Require authorization" msgstr "Kræv godkendelse" msgid "Web aware (enabling this will cause you to receive SPAM!)" -msgstr "Web tilstedeværelse (hvis dette er slået til vil du modtage SPAM!)" +msgstr "Internet tilstedeværelse (hvis dette er slået til vil du modtage SPAM!)" msgid "ICQ Privacy Options" msgstr "ICQ privatlivsindstillinger" @@ -6954,7 +6432,7 @@ msgid "Username formatting can change only capitalization and whitespace." msgstr "Brugernavn formatering kan kun ændre store/små bogstaver og mellemrum." msgid "Change Address To:" -msgstr "Skift adresse til:" +msgstr "Ændr adresse til:" msgid "<i>you are not waiting for authorization</i>" msgstr "<i>du venter ikke på godkendelse</i>" @@ -6962,33 +6440,29 @@ msgstr "<i>du venter ikke på godkendelse</i>" msgid "You are awaiting authorization from the following buddies" msgstr "Du afventer godkendelse fra følgende venner" -msgid "" -"You can re-request authorization from these buddies by right-clicking on " -"them and selecting \"Re-request Authorization.\"" -msgstr "" -"Du kan anmode om ny godkendelse fra disse venner ved at højreklikke på dem " -"og vælge \"Anmod om ny godkendelse\"." +msgid "You can re-request authorization from these buddies by right-clicking on them and selecting \"Re-request Authorization.\"" +msgstr "Du kan anmode om ny godkendelse fra disse venner ved at højreklikke på dem og vælge \"Anmod om ny godkendelse\"." msgid "Find Buddy by Email" -msgstr "Find ven udfra email adresse" +msgstr "Find ven udfra e-postadresse" msgid "Search for a buddy by email address" -msgstr "Søg efter en ven udfra email adresse" +msgstr "Søg efter en ven udfra e-postadresse" msgid "Type the email address of the buddy you are searching for." -msgstr "Indtast email adressen på vennen du søger efter." +msgstr "Indtast e-postadressen på vennen du søger efter." msgid "_Search" msgstr "_Søg" msgid "Set User Info (web)..." -msgstr "Sæt brugeroplysninger (web)..." +msgstr "Indstil brugeroplysninger (internet)..." msgid "Change Password (web)" -msgstr "Skift adgangskode (web)" +msgstr "Ændr adgangskode (internet)" msgid "Configure IM Forwarding (web)" -msgstr "Konfigurér kvikbesked-videresendelse (web)" +msgstr "Konfigurér beskedvideresendelse (internet)" #. ICQ actions msgid "Set Privacy Options..." @@ -6999,16 +6473,16 @@ msgid "Confirm Account" msgstr "Bekræft Konto" msgid "Display Currently Registered Email Address" -msgstr "Vis nuværende registrede e-post adresse" +msgstr "Vis nuværende registrede e-postadresse" msgid "Change Currently Registered Email Address..." -msgstr "Skift nuværende registrede e-post adresse..." +msgstr "Ændr nuværende registrede e-postadresse..." msgid "Show Buddies Awaiting Authorization" msgstr "Vis venner der afventer godkendelse" msgid "Search for Buddy by Email Address..." -msgstr "Søg efter ven udfra e-post adresse..." +msgstr "Søg efter ven udfra e-postadresse..." msgid "Search for Buddy by Information" msgstr "Søg efter ven udfra oplysninger" @@ -7018,8 +6492,8 @@ msgid "" "file transfers and direct IM (slower,\n" "but does not reveal your IP address)" msgstr "" -"Brug altid AIM/ICQ-mellemværtsserver til\n" -"filoverførsler og direkte besked (langsommere,\n" +"Brug altid AIM/ICQ-proxyserver til\n" +"filoverførsler og kvikbesked (langsommere,\n" "men afslører ikke din IP-adresse)" msgid "Allow multiple simultaneous logins" @@ -7034,20 +6508,14 @@ msgid "Attempting to connect to %s:%hu." msgstr "Prøver at forbinde til %s:%hu." msgid "Attempting to connect via proxy server." -msgstr "Forsøger at forbinde via mellemværtsserver." +msgstr "Forsøger at forbinde via proxy-server." #, c-format msgid "%s has just asked to directly connect to %s" msgstr "%s har lige spurgt om at forbinde direkte til %s" -msgid "" -"This requires a direct connection between the two computers and is necessary " -"for IM Images. Because your IP address will be revealed, this may be " -"considered a privacy risk." -msgstr "" -"Dette kræver en direkte forbindelse imellem to computere og er nødvendigt " -"for billeder. Fordi din IP-adresse vil blive afsløret, kan det anses som en " -"privatlivs risiko." +msgid "This requires a direct connection between the two computers and is necessary for IM Images. Because your IP address will be revealed, this may be considered a privacy risk." +msgstr "Dette kræver en direkte forbindelse imellem to computere og er nødvendigt for billeder. Fordi din IP-adresse vil blive afsløret, kan det anses som en privatlivs risiko." msgid "Aquarius" msgstr "Vandmand" @@ -7131,7 +6599,7 @@ msgid "Friend Only" msgstr "Kun ven" msgid "Private" -msgstr "Privatliv" +msgstr "Privat" msgid "QQ Number" msgstr "QQ-nummer" @@ -7149,7 +6617,7 @@ msgid "Phone Number" msgstr "Telefonnummer" msgid "Authorize adding" -msgstr "Godkend ven" +msgstr "Godkend tilføjelse" msgid "Cellphone Number" msgstr "Mobilnummer" @@ -7161,10 +6629,10 @@ msgid "City/Area" msgstr "By/område" msgid "Publish Mobile" -msgstr "Udgiv mobil" +msgstr "Offentliggør mobil" msgid "Publish Contact" -msgstr "Udgiv kontakt" +msgstr "Offentliggør kontakt" msgid "College" msgstr "Fold sammen" @@ -7185,16 +6653,16 @@ msgid "False" msgstr "Falsk" msgid "Modify Contact" -msgstr "Ændrer kontakt" +msgstr "Ændr kontakt" msgid "Modify Address" -msgstr "Ændre addresse" +msgstr "Ændr adresse" msgid "Modify Extended Information" -msgstr "Ændre udvidet information" +msgstr "Ændr udvidet information" msgid "Modify Information" -msgstr "Ændre information" +msgstr "Ændr information" msgid "Update" msgstr "Opdatér" @@ -7232,13 +6700,13 @@ msgid "Add buddy authorize" msgstr "Tilføj vennegodkendelse" msgid "Enter request here" -msgstr "Indtast forespørgelse her" +msgstr "Indtast anmodning her" msgid "Would you be my friend?" msgstr "Vil du være min ven?" msgid "QQ Buddy" -msgstr "QQ ven" +msgstr "QQ-ven" msgid "Add buddy" msgstr "Tilføj ven" @@ -7307,10 +6775,10 @@ msgid "Admin" msgstr "Admin" msgid "Notice" -msgstr "Note" +msgstr "Bemærk" msgid "Detail" -msgstr "Detaljer" +msgstr "Detalje" msgid "Creator" msgstr "Opretter" @@ -7322,13 +6790,13 @@ msgid "Category" msgstr "Kategori" msgid "The Qun does not allow others to join" -msgstr "Qun'en tillader ikke andre at blive medlem" +msgstr "Qun'en tillader ikke andre at tilslutte" msgid "Join QQ Qun" -msgstr "Deltag QQ Qun" +msgstr "Tilslut QQ Qun" msgid "Input request here" -msgstr "Indtast forespørgelse her" +msgstr "Indtast forespørgsel her" #, c-format msgid "Successfully joined Qun %s (%u)" @@ -7361,13 +6829,13 @@ msgstr "" "vil denne operation måske fjerne denne Qun." msgid "Sorry, you are not our style" -msgstr "Beklager, du er ikke min type" +msgstr "Beklager, du er ikke vores type" msgid "Successfully changed Qun members" -msgstr "Ændret Qun-medlemmer problemfrit" +msgstr "Ændrede Qun-medlemmer problemfrit" msgid "Successfully changed Qun information" -msgstr "Ændret Qun-information problemfrit" +msgstr "Ændrede Qun-information problemfrit" msgid "You have successfully created a Qun" msgstr "Du har oprettet en Qun" @@ -7380,15 +6848,15 @@ msgstr "Opsætning" #, c-format msgid "%u requested to join Qun %u for %s" -msgstr "%u anmoder om at blive medlem af Qun %u for %s" +msgstr "%u anmoder om at tilslutte Qun %u for %s" #, c-format msgid "%u request to join Qun %u" -msgstr "%u anmoder om at blive medlem af Qun %u" +msgstr "%u anmoder om at tilslutte Qun %u" #, c-format msgid "Failed to join Qun %u, operated by admin %u" -msgstr "Kunne ikke deltage i Qun %u, styret af admin %u" +msgstr "Kunne ikke tilslutte Qun %u, styret af admin %u" #, c-format msgid "<b>Joining Qun %u is approved by admin %u for %s</b>" @@ -7400,7 +6868,7 @@ msgstr "<b>Fjernede vennen %u.</b>" #, c-format msgid "<b>New buddy %u joined.</b>" -msgstr "<b>Nu ven %u deltager.</b>" +msgstr "<b>Ny ven %u tilsluttet.</b>" #, c-format msgid "Unknown-%d" @@ -7416,10 +6884,10 @@ msgid " TCP" msgstr " TCP" msgid " FromMobile" -msgstr " FraMobil" +msgstr " FromMobile" msgid " BindMobile" -msgstr " BindMobil" +msgstr " BindMobile" msgid " Video" msgstr " Video" @@ -7441,11 +6909,11 @@ msgstr "Vælg ikon..." #, c-format msgid "<b>Login time</b>: %d-%d-%d, %d:%d:%d<br>\n" -msgstr "<b>Login tid</b>: %d-%d-%d, %d:%d:%d<br>\n" +msgstr "<b>Logind tid</b>: %d-%d-%d, %d:%d:%d<br>\n" #, c-format msgid "<b>Total Online Buddies</b>: %d<br>\n" -msgstr "<b>Totale venner online</b>: %d<br>\n" +msgstr "<b>Totale venner tilkoblet</b>: %d<br>\n" #, c-format msgid "<b>Last Refresh</b>: %d-%d-%d, %d:%d:%d<br>\n" @@ -7473,7 +6941,7 @@ msgstr "<b>Sendt</b>: %lu<br>\n" #, c-format msgid "<b>Resend</b>: %lu<br>\n" -msgstr "<b>Gensendt</b>: %lu<br>\n" +msgstr "<b>Gensend</b>: %lu<br>\n" #, c-format msgid "<b>Lost</b>: %lu<br>\n" @@ -7485,7 +6953,7 @@ msgstr "<b>Modtaget</b>: %lu<br>\n" #, c-format msgid "<b>Received Duplicate</b>: %lu<br>\n" -msgstr "<b>Modtagede duplikater</b>: %lu<br>\n" +msgstr "<b>Modtaget duplikat</b>: %lu<br>\n" #, c-format msgid "<b>Time</b>: %d-%d-%d, %d:%d:%d<br>\n" @@ -7502,13 +6970,13 @@ msgid "<p><b>Original Author</b>:<br>\n" msgstr "<p><b>Oprindelig forfatter</b>:<br>\n" msgid "<p><b>Code Contributors</b>:<br>\n" -msgstr "<p><b>Kode bidragere</b>:<br>\n" +msgstr "<p><b>Kode bidragydere</b>:<br>\n" msgid "<p><b>Lovely Patch Writers</b>:<br>\n" msgstr "<p><b>Elskede programrettelsesskrivere</b>:<br>\n" msgid "<p><b>Acknowledgement</b>:<br>\n" -msgstr "<p><b>Bekræft erkendelse</b>:<br>\n" +msgstr "<p><b>Bekræft anerkendelse</b>:<br>\n" msgid "<p><i>And, all the boys in the backroom...</i><br>\n" msgstr "<p><i>Og alle drengene i baggrunden...</i><br>\n" @@ -7521,10 +6989,10 @@ msgid "About OpenQ %s" msgstr "Om OpenQ %s" msgid "Change Icon" -msgstr "Ændre ikon" +msgstr "Ændr ikon" msgid "Change Password" -msgstr "Skift adgangskode" +msgstr "Ændr adgangskode" msgid "Account Information" msgstr "Kontoinformation" @@ -7567,13 +7035,13 @@ msgid "Connect by TCP" msgstr "Tilslut med TCP" msgid "Show server notice" -msgstr "Vis servernote" +msgstr "Vis serverbemærkning" msgid "Show server news" msgstr "Vis servernyheder" msgid "Show chat room when msg comes" -msgstr "Vis chatrum når besked kommer" +msgstr "Vis samtalerum når besked kommer" msgid "Keep alive interval (seconds)" msgstr "Hold i live interval (sekunder)" @@ -7582,15 +7050,15 @@ msgid "Update interval (seconds)" msgstr "Opdateringsinterval (sekunder)" msgid "Cannot decrypt server reply" -msgstr "Kan ikke afkode serversvar" +msgstr "Kan ikke afkryptere serversvar" #, c-format msgid "Failed requesting token, 0x%02X" -msgstr "Fejl ved forespørgelse efter symbol, 0x%02X" +msgstr "Fejl ved forespørgsel efter nøgle, 0x%02X" #, c-format msgid "Invalid token len, %d" -msgstr "Ugyldigt symbollængde, %d" +msgstr "Ugyldig nøglelængde, %d" #. extend redirect used in QQ2006 msgid "Redirect_EX is not currently supported" @@ -7600,14 +7068,14 @@ msgstr "Redirect_EX er for øjeblikket ikke understøttet" #. need activation #. need activation msgid "Activation required" -msgstr "Registrering krævet" +msgstr "Aktivering krævet" #, c-format msgid "Unknown reply code when logging in (0x%02X)" msgstr "Ukendt svarkode ved indlogning i (0x%02X)" msgid "Could not decrypt server reply" -msgstr "Kunne ikke afkode serversvar" +msgstr "Kunne ikke afkryptere serversvar" msgid "Requesting captcha" msgstr "Anmoder om captcha" @@ -7625,7 +7093,7 @@ msgid "Enter code" msgstr "Indtast kode" msgid "QQ Captcha Verification" -msgstr "QQ Captcha-efterprøvning" +msgstr "QQ Captcha-godkendelse" msgid "Enter the text from the image" msgstr "Indtast teksten fra billedet" @@ -7659,10 +7127,10 @@ msgid "Connection lost" msgstr "Forbindelse mistet" msgid "Getting server" -msgstr "Henter server" +msgstr "Finder server" msgid "Requesting token" -msgstr "Anmoder om symbol" +msgstr "Anmoder om nøgle" msgid "Couldn't resolve host" msgstr "Kunne ikke slå vært op" @@ -7683,7 +7151,7 @@ msgid "" "%s\n" "%s" msgstr "" -"Servernyt:\n" +"Servernyheder:\n" "%s\n" "%s\n" "%s" @@ -7719,7 +7187,7 @@ msgid "QQ Qun Command" msgstr "QQ Qun-kommando" msgid "Could not decrypt login reply" -msgstr "Kan ikke dekryptere logindsvar" +msgstr "Kan ikke afkryptere logindsvar" msgid "Unknown LOGIN CMD" msgstr "Ukendt LOGIN CMD" @@ -7784,13 +7252,11 @@ msgid "Login Acknowledged" msgstr "Login godkendt" msgid "Starting Services" -msgstr "Starter services" +msgstr "Starter tjenester" #, c-format -msgid "" -"A Sametime administrator has issued the following announcement on server %s" -msgstr "" -"En Sametime administrator har sendt den følgende annoncering på server %s" +msgid "A Sametime administrator has issued the following announcement on server %s" +msgstr "En Sametime administrator har sendt den følgende annoncering på server %s" msgid "Sametime Administrator Announcement" msgstr "Sametime administrator annoncering" @@ -7811,7 +7277,7 @@ msgid "Announcement from %s" msgstr "Annoncering fra %s" msgid "Conference Closed" -msgstr "Konference lukket" +msgstr "Konference afsluttet" msgid "Unable to send message: " msgstr "Kunne ikke sende besked: " @@ -7838,12 +7304,8 @@ msgid "Create conference with user" msgstr "Opret konference med bruger" #, c-format -msgid "" -"Please enter a topic for the new conference, and an invitation message to be " -"sent to %s" -msgstr "" -"Indtast et emne for den nye konference, og en invitationsbesked der skal " -"sendes til %s" +msgid "Please enter a topic for the new conference, and an invitation message to be sent to %s" +msgstr "Indtast et emne for den nye konference, og en invitationsbesked der skal sendes til %s" msgid "New Conference" msgstr "Ny konference" @@ -7861,14 +7323,8 @@ msgid "Invite user to a conference" msgstr "Invitér bruger til en konference" #, c-format -msgid "" -"Select a conference from the list below to send an invite to user %s. Select " -"\"Create New Conference\" if you'd like to create a new conference to invite " -"this user to." -msgstr "" -"Vælg en konference fra listen forneden for at sende en invitation til bruger " -"%s. Vælg \"Opret ny konference\" hvis du vil oprette en ny konference at " -"invitere denne bruger til." +msgid "Select a conference from the list below to send an invite to user %s. Select \"Create New Conference\" if you'd like to create a new conference to invite this user to." +msgstr "Vælg en konference fra listen forneden for at sende en invitation til bruger %s. Vælg \"Opret ny konference\" hvis du vil oprette en ny konference at invitere denne bruger til." msgid "Invite to Conference" msgstr "Invitér til konference" @@ -7886,12 +7342,8 @@ msgid "No Sametime Community Server specified" msgstr "Ingen Sametime community server angivet" #, c-format -msgid "" -"No host or IP address has been configured for the Meanwhile account %s. " -"Please enter one below to continue logging in." -msgstr "" -"Ingen vært eller IP-adresse er blevet sat op for Meanwhile-kontoen %s. " -"Indtast en forneden for at fortsætte med at logge ind." +msgid "No host or IP address has been configured for the Meanwhile account %s. Please enter one below to continue logging in." +msgstr "Ingen vært eller IP-adresse er blevet sat op for Meanwhile-kontoen %s. Indtast en forneden for at fortsætte med at logge ind." msgid "Meanwhile Connection Setup" msgstr "Meanwhile forbindelsesopsætning" @@ -7913,19 +7365,14 @@ msgid "User Name" msgstr "Brugernavn" msgid "Sametime ID" -msgstr "Sametime ID" +msgstr "Sametime-id" msgid "An ambiguous user ID was entered" -msgstr "Et ugyldigt bruger ID blev indtastet" +msgstr "Et ugyldigt bruger id blev indtastet" #, c-format -msgid "" -"The identifier '%s' may possibly refer to any of the following users. Please " -"select the correct user from the list below to add them to your buddy list." -msgstr "" -"Identificeringen '%s' kan henvise til hvilken som helst af de følgende " -"brugere. Vælg den korrekte bruger fra listen forneden for at tilføje dem til " -"din venneliste." +msgid "The identifier '%s' may possibly refer to any of the following users. Please select the correct user from the list below to add them to your buddy list." +msgstr "Identificeringen '%s' kan henvise til hvilken som helst af de følgende brugere. Vælg den korrekte bruger fra listen forneden for at tilføje dem til din venneliste." msgid "Select User" msgstr "Vælg bruger" @@ -7934,12 +7381,8 @@ msgid "Unable to add user: user not found" msgstr "Kunne ikke tilføje bruger: bruger ikke fundet" #, c-format -msgid "" -"The identifier '%s' did not match any users in your Sametime community. This " -"entry has been removed from your buddy list." -msgstr "" -"Identificeringen '%s' matchede ikke nogle brugere i dit Sametime fællesskab. " -"Denne post er blevet fjernet fra din venneliste." +msgid "The identifier '%s' did not match any users in your Sametime community. This entry has been removed from your buddy list." +msgstr "Identificeringen '%s' matchede ikke nogle brugere i dit Sametime fællesskab. Denne post er blevet fjernet fra din venneliste." #, c-format msgid "" @@ -7992,14 +7435,8 @@ msgid "Notes Address Book group results" msgstr "Notes adressebog grupperesultater" #, c-format -msgid "" -"The identifier '%s' may possibly refer to any of the following Notes Address " -"Book groups. Please select the correct group from the list below to add it " -"to your buddy list." -msgstr "" -"Identificeringen '%s' kan henvise til hvilken som helst af de følgende Notes " -"adressebogsgrupper. Vælg den korrekte gruppe fra listen forneden for at " -"tilføje den til din venneliste." +msgid "The identifier '%s' may possibly refer to any of the following Notes Address Book groups. Please select the correct group from the list below to add it to your buddy list." +msgstr "Identificeringen '%s' kan henvise til hvilken som helst af de følgende Notes adressebogsgrupper. Vælg den korrekte gruppe fra listen forneden for at tilføje den til din venneliste." msgid "Select Notes Address Book" msgstr "Vælg Notes adressebog" @@ -8008,36 +7445,22 @@ msgid "Unable to add group: group not found" msgstr "Kunne ikke tilføje gruppe: gruppe ikke fundet" #, c-format -msgid "" -"The identifier '%s' did not match any Notes Address Book groups in your " -"Sametime community." -msgstr "" -"Identificeringen '%s' matchede ikke nogle Notes adressebogsgrupper i dit " -"Sametime fællesskab." +msgid "The identifier '%s' did not match any Notes Address Book groups in your Sametime community." +msgstr "Identificeringen '%s' matchede ikke nogle Notes adressebogsgrupper i dit Sametime fællesskab." msgid "Notes Address Book Group" msgstr "Notes adressebogsgruppe" -msgid "" -"Enter the name of a Notes Address Book group in the field below to add the " -"group and its members to your buddy list." -msgstr "" -"Indtast navnet på en Notes adressebogsgruppe i feltet forneden for at " -"tilføje gruppen og dens medlemmer til din venneliste." +msgid "Enter the name of a Notes Address Book group in the field below to add the group and its members to your buddy list." +msgstr "Indtast navnet på en Notes adressebogsgruppe i feltet forneden for at tilføje gruppen og dens medlemmer til din venneliste." #, c-format msgid "Search results for '%s'" msgstr "Søgeresultater for '%s'" #, c-format -msgid "" -"The identifier '%s' may possibly refer to any of the following users. You " -"may add these users to your buddy list or send them messages with the action " -"buttons below." -msgstr "" -"Identificeringen '%s' kan muligvis henvise til hvilken som helst af de " -"følgende brugere. Du kan tilføje disse brugere til din venneliste eller " -"sende dem beskeder med handlingsknapperne forneden." +msgid "The identifier '%s' may possibly refer to any of the following users. You may add these users to your buddy list or send them messages with the action buttons below." +msgstr "Identificeringen '%s' kan muligvis henvise til hvilken som helst af de følgende brugere. Du kan tilføje disse brugere til din venneliste eller sende dem beskeder med handlingsknapperne forneden." msgid "Search Results" msgstr "Søgeresultater" @@ -8047,8 +7470,7 @@ msgstr "Ingen fundne" #, c-format msgid "The identifier '%s' did not match any users in your Sametime community." -msgstr "" -"Identificeringen '%s' matchede ingen brugere i dit Sametime fællesskab." +msgstr "Identificeringen '%s' matchede ingen brugere i dit Sametime fællesskab." msgid "No Matches" msgstr "Ingen fundne" @@ -8056,12 +7478,8 @@ msgstr "Ingen fundne" msgid "Search for a user" msgstr "Søg efter en bruger" -msgid "" -"Enter a name or partial ID in the field below to search for matching users " -"in your Sametime community." -msgstr "" -"Indtast et navn eller delvist ID i feltet forneden for at søge efter " -"matchende brugere i dit Sametime fællesskab." +msgid "Enter a name or partial ID in the field below to search for matching users in your Sametime community." +msgstr "Indtast et navn eller delvist id i feltet forneden for at søge efter matchende brugere i dit Sametime fællesskab." msgid "User Search" msgstr "Brugersøgning" @@ -8117,9 +7535,7 @@ msgid "The remote user is not present in the network any more" msgstr "Brugeren er ikke til stede i netværket længere" #, c-format -msgid "" -"Key agreement request received from %s. Would you like to perform the key " -"agreement?" +msgid "Key agreement request received from %s. Would you like to perform the key agreement?" msgstr "Anmodning om nøgle enighed modtaget %s. Vil du udføre nøgle enigheden?" #, c-format @@ -8166,13 +7582,8 @@ msgstr "Kan ikke hente oplysninger" msgid "The %s buddy is not trusted" msgstr "Vennen %s er ikke betroet" -msgid "" -"You cannot receive buddy notifications until you import his/her public key. " -"You can use the Get Public Key command to get the public key." -msgstr "" -"Du kan ikke modtage venne-påmindelser før du importerer hans/hendes " -"offentlige nøgle. Du kan bruge \"Hent offentlig nøgle\" kommandoen for at " -"hente den offentlige nøgle." +msgid "You cannot receive buddy notifications until you import his/her public key. You can use the Get Public Key command to get the public key." +msgstr "Du kan ikke modtage venne-påmindelser før du importerer hans/hendes offentlige nøgle. Du kan bruge \"Hent offentlig nøgle\" kommandoen for at hente den offentlige nøgle." #. Open file selector to select the public key. msgid "Open..." @@ -8182,12 +7593,8 @@ msgstr "Åbn..." msgid "The %s buddy is not present in the network" msgstr "%s vennen er ikke til stede på netværket" -msgid "" -"To add the buddy you must import his/her public key. Press Import to import " -"a public key." -msgstr "" -"For at tilføje en ven, skal du importere hendes/hans offentlige nøgle. Tryk " -"Importér for at importere en offentlig nøgle." +msgid "To add the buddy you must import his/her public key. Press Import to import a public key." +msgstr "For at tilføje vennen, skal du importere hendes/hans offentlige nøgle. Tryk Importér for at importere en offentlig nøgle." msgid "_Import..." msgstr "_Importér..." @@ -8195,19 +7602,11 @@ msgstr "_Importér..." msgid "Select correct user" msgstr "Vælg en korrekt bruger" -msgid "" -"More than one user was found with the same public key. Select the correct " -"user from the list to add to the buddy list." -msgstr "" -"Mere end én bruger blev fundet med den samme offentlige nøgle. Vælg den " -"korrekte bruger fra listen som du vil tilføje til din venneliste." +msgid "More than one user was found with the same public key. Select the correct user from the list to add to the buddy list." +msgstr "Mere end én bruger blev fundet med den samme offentlige nøgle. Vælg den korrekte bruger fra listen som du vil tilføje til din venneliste." -msgid "" -"More than one user was found with the same name. Select the correct user " -"from the list to add to the buddy list." -msgstr "" -"Mere end én bruger blev fundet med det samme navn. Vælg den korrekte bruger " -"fra listen, som du vil tilføje til din venneliste." +msgid "More than one user was found with the same name. Select the correct user from the list to add to the buddy list." +msgstr "Mere end én bruger blev fundet med det samme navn. Vælg den korrekte bruger fra listen, som du vil tilføje til din venneliste." msgid "Detached" msgstr "Ikke koblet på" @@ -8357,18 +7756,8 @@ msgid "Channel Public Keys List" msgstr "Kanalens liste med offentlige nøgler" #, c-format -msgid "" -"Channel authentication is used to secure the channel from unauthorized " -"access. The authentication may be based on passphrase and digital " -"signatures. If passphrase is set, it is required to be able to join. If " -"channel public keys are set then only users whose public keys are listed are " -"able to join." -msgstr "" -"Kanal godkendelse brugeres til at sikre kanalen fra uønsket adgang. " -"Godkendelsen kan være baseret på en adgangssætning og digitale signaturer. " -"Hvis adgangssætningen er sat, er den krævet for at deltage. Hvis kanalens " -"offentlige nøgler er sat, så er det kun brugere hvis offentlige nøgler der " -"er nævnt, som kan deltage." +msgid "Channel authentication is used to secure the channel from unauthorized access. The authentication may be based on passphrase and digital signatures. If passphrase is set, it is required to be able to join. If channel public keys are set then only users whose public keys are listed are able to join." +msgstr "Kanal godkendelse brugeres til at sikre kanalen fra uønsket adgang. Godkendelsen kan være baseret på en adgangssætning og digitale underskrifter. Hvis adgangssætningen er angivet, er den påkrævet for at tilslutte. Hvis kanalens offentlige nøgler er angivet, så er det kun brugere hvis offentlige nøgler der er nævnt, som kan deltage." msgid "Channel Authentication" msgstr "Kanal godkendelse" @@ -8432,15 +7821,14 @@ msgid "Set Secret Channel" msgstr "Sæt hemmelig kanal" #, c-format -msgid "" -"You have to join the %s channel before you are able to join the private group" -msgstr "Du skal deltage i %s kanalen før du kan deltage i den private gruppe" +msgid "You have to join the %s channel before you are able to join the private group" +msgstr "Du skal tilslutte %s kanalen før du kan tilslutte den private gruppe" msgid "Join Private Group" -msgstr "Deltag i privat gruppe" +msgstr "Tilslut privat gruppe" msgid "Cannot join private group" -msgstr "Kan ikke deltage i privat gruppe" +msgstr "Kan ikke tilslutte privat gruppe" msgid "Call Command" msgstr "Kald kommando" @@ -8458,7 +7846,7 @@ msgid "Error during file transfer" msgstr "Fejl under filoverførsel" msgid "Remote disconnected" -msgstr "Fjerndel afbrudt" +msgstr "Fjernvært afbrød" msgid "Permission denied" msgstr "Adgang nægtet" @@ -8547,7 +7935,7 @@ msgid "Note" msgstr "Note" msgid "Join Chat" -msgstr "Deltag i chat" +msgstr "Tilslut samtale" #, c-format msgid "You are channel founder on <I>%s</I>" @@ -8567,7 +7955,7 @@ msgid "Public Key Fingerprint" msgstr "Offentlig nøgle fingeraftryk" msgid "Public Key Babbleprint" -msgstr "Offentlige nøgle \"babbleprint\"" +msgstr "Offentlig nøgle \"babbleprint\"" msgid "_More..." msgstr "_Mere..." @@ -8673,12 +8061,8 @@ msgid "Passphrase required" msgstr "Adgangssætning krævet" #, c-format -msgid "" -"Received %s's public key. Your local copy does not match this key. Would you " -"still like to accept this public key?" -msgstr "" -"Modtog %s's offentlige nøgle. Din lokale kopi passer ikke med denne nøgle. " -"Vil du stadig acceptere den?" +msgid "Received %s's public key. Your local copy does not match this key. Would you still like to accept this public key?" +msgstr "Modtog %s's offentlige nøgle. Din lokale kopi passer ikke med denne nøgle. Vil du stadig acceptere den?" #, c-format msgid "Received %s's public key. Would you like to accept this public key?" @@ -8709,16 +8093,13 @@ msgid "Disconnected by server" msgstr "Afbrudt af server" msgid "Error during connecting to SILC Server" -msgstr "Fejl ved forbindelse til SILC server" +msgstr "Fejl ved forbindelse til SILC-server" msgid "Key Exchange failed" msgstr "Nøgle udveksling fejlede" -msgid "" -"Resuming detached session failed. Press Reconnect to create new connection." -msgstr "" -"Genoptagelse af tidligere session fejlede. Lav en ny forbindelse ved at " -"trykke på gentabler forbindelse." +msgid "Resuming detached session failed. Press Reconnect to create new connection." +msgstr "Genoptagelse af tidligere session fejlede. Lav en ny forbindelse ved at trykke på gentabler forbindelse." msgid "Connection failed" msgstr "Forbindelse fejlede" @@ -8730,20 +8111,20 @@ msgid "Unable to create connection" msgstr "Kunne ikke oprette forbindelse" msgid "Could not load SILC key pair" -msgstr "Kunne ikke indlæse SILC nøglepar" +msgstr "Kunne ikke indlæse SILC-nøglepar" #. Progress msgid "Connecting to SILC Server" -msgstr "Tilslutter til SILC server" +msgstr "Tilslutter til SILC-server" msgid "Out of memory" msgstr "Løb tør for hukommelse" msgid "Cannot initialize SILC protocol" -msgstr "Kan ikke initialisere SILC protokol" +msgstr "Kan ikke initialisere SILC-protokol" msgid "Error loading SILC key pair" -msgstr "Fejl ved indlæsning af SILC nøglepar" +msgstr "Fejl ved indlæsning af SILC-nøglepar" #, c-format msgid "Download %s: %s" @@ -8794,16 +8175,10 @@ msgid "Timezone (UTC)" msgstr "Tidszone (UTC)" msgid "User Online Status Attributes" -msgstr "Online bruger status-attributter" +msgstr "Status-attributter for tilkoblet bruger" -msgid "" -"You can let other users see your online status information and your personal " -"information. Please fill the information you would like other users to see " -"about yourself." -msgstr "" -"Du kan lade andre brugere se dine online status oplysninger og dine " -"personlige oplysninger. Udfyld de oplysninger, du gerne vil have at folk kan " -"se om dig." +msgid "You can let other users see your online status information and your personal information. Please fill the information you would like other users to see about yourself." +msgstr "Du kan lade andre brugere se dine tilkoblede statusoplysninger og dine personlige oplysninger. Udfyld de oplysninger, du gerne vil have at folk kan se om dig." msgid "Message of the Day" msgstr "Dagens besked (MOTD)" @@ -8812,10 +8187,10 @@ msgid "No Message of the Day available" msgstr "Ingen MOTD tilgængelig" msgid "There is no Message of the Day associated with this connection" -msgstr "Der er ingen MOTD associeret med denne forbindelse" +msgstr "Der er ingen MOTD tilknyttet denne forbindelse" msgid "Create New SILC Key Pair" -msgstr "Opret nyt SILC nøglepar" +msgstr "Opret nyt SILC-nøglepar" msgid "Passphrases do not match" msgstr "Adgangskoder passer ikke" @@ -8839,13 +8214,13 @@ msgid "Generate Key Pair" msgstr "Generér nøglepar" msgid "Online Status" -msgstr "Online status" +msgstr "Tilkoblet status" msgid "View Message of the Day" msgstr "Vis dagens besked (MOTD)" msgid "Create SILC Key Pair..." -msgstr "Opret SILC nøglepar..." +msgstr "Opret SILC-nøglepar..." #, c-format msgid "User <I>%s</I> is not present in the network" @@ -8878,107 +8253,88 @@ msgid "Unknown command: %s, (may be a client bug)" msgstr "Ukendt kommando: %s, (måske er det en klientfejl)" msgid "part [channel]: Leave the chat" -msgstr "part [kanal]: Forlad chatten" +msgstr "part [kanal]: Forlad samtalen" msgid "leave [channel]: Leave the chat" -msgstr "leave [kanal]: Forlad chatten" +msgstr "leave [kanal]: Forlad samtalen" msgid "topic [<new topic>]: View or change the topic" -msgstr "topic [<nyt emne>]: Vis eller skift emnet" +msgstr "topic [<nyt emne>]: Vis eller ændr emnet" msgid "join <channel> [<password>]: Join a chat on this network" -msgstr "" -"join <kanal> [<adgangskode>]: Deltag i chat på dette netværk" +msgstr "join <kanal> [<adgangskode>]: Tilslut samtale på dette netværk" msgid "list: List channels on this network" -msgstr "list: Vis kanaler på dette netværk" +msgstr "list: Vis kanaler på dette netværk" msgid "whois <nick>: View nick's information" -msgstr "whois <navn>: Vis brugerens oplysninger" +msgstr "whois <navn>: Vis brugerens oplysninger" msgid "msg <nick> <message>: Send a private message to a user" -msgstr "msg <navn> <besked>: Send en privat besked til en bruger" +msgstr "msg <navn> <besked>: Send en privat besked til en bruger" msgid "query <nick> [<message>]: Send a private message to a user" -msgstr "" -"query <navn> [<besked>]: Send en privat besked til en bruger" +msgstr "query <navn> [<besked>]: Send en privat besked til en bruger" msgid "motd: View the server's Message Of The Day" -msgstr "motd: Vis dagens besked (MOTD)" +msgstr "motd: Vis dagens besked (MOTD)" msgid "detach: Detach this session" msgstr "detach: Gå væk fra denne session" msgid "quit [message]: Disconnect from the server, with an optional message" -msgstr "quit [besked]: Luk forbindelse til server, med en eventuel besked" +msgstr "quit [besked]: Luk forbindelse til server, med en eventuel besked" msgid "call <command>: Call any silc client command" -msgstr "call <kommando>: Kald en vilkårlig silc klient kommando" +msgstr "call <kommando>: Kald en vilkårlig silc-klient kommando" msgid "kill <nick> [-pubkey|<reason>]: Kill nick" -msgstr "kill <kælenavn> [-pubkey|<begrundelse>]: Dræb kælenavn" +msgstr "kill <kælenavn> [-pubkey|<begrundelse>]: Dræb kælenavn" msgid "nick <newnick>: Change your nickname" -msgstr "nick <nyt navn>: Skift dit navn" +msgstr "nick <nyt navn>: Ændr dit kælenavn" msgid "whowas <nick>: View nick's information" -msgstr "whowas <navn>: Vis brugerens oplysninger" +msgstr "whowas <navn>: Vis brugerens oplysninger" -msgid "" -"cmode <channel> [+|-<modes>] [arguments]: Change or display " -"channel modes" -msgstr "" -"cmode <kanal> [+|-<tilstande>] [argumenter]: Sæt eller fjern en " -"kanal tilstand" +msgid "cmode <channel> [+|-<modes>] [arguments]: Change or display channel modes" +msgstr "cmode <kanal> [+|-<tilstande>] [argumenter]: Ændre eller vis kanaltilstande" -msgid "" -"cumode <channel> +|-<modes> <nick>: Change nick's modes " -"on channel" -msgstr "" -"cumode <kanal> +|-<tilstande> <navn>: Sæt brugerens " -"tilstande på kanal" +msgid "cumode <channel> +|-<modes> <nick>: Change nick's modes on channel" +msgstr "cumode <kanal> +|-<tilstande> <navn>: Ændre brugerens tilstande på kanal" msgid "umode <usermodes>: Set your modes in the network" -msgstr "umode <brugertilstande>: Sæt dine tilstande på netværket" +msgstr "umode <brugertilstande>: Angiv dine tilstande på netværket" msgid "oper <nick> [-pubkey]: Get server operator privileges" msgstr "oper <navn> [-pubkey]: Få server operatør privilegier" -msgid "" -"invite <channel> [-|+]<nick>: invite nick or add/remove from " -"channel invite list" -msgstr "" -"invite <kanal> [-|+]<navn>: invitér navn eller tilføj/fjern fra " -"kanal invitationsliste" +msgid "invite <channel> [-|+]<nick>: invite nick or add/remove from channel invite list" +msgstr "invite <kanal> [-|+]<navn>: invitér navn eller tilføj/fjern fra kanal invitationsliste" msgid "kick <channel> <nick> [comment]: Kick client from channel" msgstr "kick <kanal> <navn> [comment]: Spark klient fra kanal" msgid "info [server]: View server administrative details" -msgstr "info [server]: Vis serverens administrative detaljer" +msgstr "info [server]: Vis serverens administrative detaljer" msgid "ban [<channel> +|-<nick>]: Ban client from channel" msgstr "ban [<kanal> +|-<navn>]: Udvis klient fra kanal" msgid "getkey <nick|server>: Retrieve client's or server's public key" -msgstr "" -"getkey <navn|server>: Hent klient eller servers offentlige nøgle" +msgstr "getkey <navn|server>: Hent klientens eller serverens offentlige nøgle" msgid "stats: View server and network statistics" -msgstr "stats: Vis server- og netværksstatistik" +msgstr "stats: Vis server- og netværksstatistik" msgid "ping: Send PING to the connected server" -msgstr "ping: Send PING til den forbundne server" +msgstr "ping: Send PING til den forbundne server" msgid "users <channel>: List users in channel" -msgstr "users <kanal>: Vis brugere på kanalen lige nu" +msgstr "users <kanal>: Vis brugere på kanalen" -msgid "" -"names [-count|-ops|-halfops|-voices|-normal] <channel(s)>: List " -"specific users in channel(s)" -msgstr "" -"names [-count|-ops|-halfops|-voices|-normal] <kanal(er)>: Vis angivne " -"brugere på kanal(er)" +msgid "names [-count|-ops|-halfops|-voices|-normal] <channel(s)>: List specific users in channel(s)" +msgstr "names [-count|-ops|-halfops|-voices|-normal] <kanal(er)>: Vis angivne brugere på kanal(er)" #. *< type #. *< ui_requirement @@ -8990,11 +8346,11 @@ msgstr "" #. *< version #. * summary msgid "SILC Protocol Plugin" -msgstr "SILC prokotolmodul" +msgstr "SILC-prokotolmodul" #. * description msgid "Secure Internet Live Conferencing (SILC) Protocol" -msgstr "Secure Internet Live Conferencing (SILC) protokol" +msgstr "Secure Internet Live Conferencing (SILC)-protokol" msgid "Network" msgstr "Netværk" @@ -9018,7 +8374,7 @@ msgid "Public key authentication" msgstr "Offentlig nøgle godkendelse" msgid "Block IMs without Key Exchange" -msgstr "Blokér kvikbeskeder uden nøgleudveksling" +msgstr "Blokér beskeder uden nøgleudveksling" msgid "Block messages to whiteboard" msgstr "Blokér beskeder til tavle" @@ -9027,13 +8383,13 @@ msgid "Automatically open whiteboard" msgstr "Åbn automatisk tavle" msgid "Digitally sign and verify all messages" -msgstr "Skriv alle beskeder under med digital signatur og godkend dem" +msgstr "Skriv alle beskeder under med digital underskrift og godkend dem" msgid "Creating SILC key pair..." -msgstr "Opretter SILC nøglepar..." +msgstr "Opretter SILC-nøglepar..." msgid "Cannot create SILC key pair\n" -msgstr "Kan ikke oprette SILC nøglepar\n" +msgstr "Kan ikke oprette SILC-nøglepar\n" #. Hint for translators: Please check the tabulator width here and in #. the next strings (short strings: 2 tabs, longer strings 1 tab, @@ -9048,7 +8404,7 @@ msgstr "Brugernavn. \t%s\n" #, c-format msgid "Email: \t\t%s\n" -msgstr "Email: \t\t%s\n" +msgstr "E-post: \t\t%s\n" #, c-format msgid "Host Name: \t%s\n" @@ -9115,9 +8471,7 @@ msgid "%s sent message to whiteboard. Would you like to open the whiteboard?" msgstr "%s sendte besked til tavle. Vil du åbne tavlen?" #, c-format -msgid "" -"%s sent message to whiteboard on %s channel. Would you like to open the " -"whiteboard?" +msgid "%s sent message to whiteboard on %s channel. Would you like to open the whiteboard?" msgstr "%s sendte besked til tavle på kanalen %s. Vil du åbne tavlen?" msgid "Whiteboard" @@ -9156,7 +8510,7 @@ msgstr "Fejl: Fjernvært understøtter ikke foreslåede HMAC" #, c-format msgid "Failure: Incorrect signature" -msgstr "Fejl: Ugyldig signatur" +msgstr "Fejl: Ugyldig underskrift" #, c-format msgid "Failure: Invalid cookie" @@ -9167,14 +8521,14 @@ msgid "Failure: Authentication failed" msgstr "Fejl: Godkendelse fejlede" msgid "Cannot initialize SILC Client connection" -msgstr "Kan ikke initialisere SILC klient forbindelse" +msgstr "Kan ikke initialisere SILC-klient forbindelse" msgid "John Noname" msgstr "Intet navn" #, c-format msgid "Could not load SILC key pair: %s" -msgstr "Kunne ikke indlæse SILC nøglepar: %s" +msgstr "Kunne ikke indlæse SILC-nøglepar: %s" msgid "Could not write" msgstr "Kunne ikke skrive" @@ -9219,10 +8573,10 @@ msgid "Use UDP" msgstr "Brug UDP" msgid "Use proxy" -msgstr "Brug mellemvært" +msgstr "Brug proxy" msgid "Proxy" -msgstr "Mellemvært" +msgstr "Proxy" msgid "Auth User" msgstr "Autentificering bruger" @@ -9268,7 +8622,7 @@ msgstr "En besked blev ikke sendt - du var hurtigere end serveren." #, c-format msgid "Chat in %s is not available." -msgstr "Chat i %s er ikke muligt." +msgstr "Samtale i %s er ikke muligt." #, c-format msgid "You are sending messages too fast to %s." @@ -9280,8 +8634,7 @@ msgstr "Du har ikke modtaget en besked fra %s, fordi den var for lang." #, c-format msgid "You missed an IM from %s because it was sent too fast." -msgstr "" -"Du har ikke modtaget en besked fra %s, fordi den blev sendt for hurtigt." +msgstr "Du har ikke modtaget en besked fra %s, fordi den blev sendt for hurtigt." #, c-format msgid "Failure." @@ -9301,7 +8654,7 @@ msgstr "Søgetjeneste midlertidigt utilgængelig." #, c-format msgid "Email lookup restricted." -msgstr "Email søgning er begrænset." +msgstr "E-post søgning er begrænset." #, c-format msgid "Keyword ignored." @@ -9336,12 +8689,8 @@ msgid "Your warning level is currently too high to log in." msgstr "Du har for mange advarsler i øjeblikket til at kunne logge ind." #, c-format -msgid "" -"You have been connecting and disconnecting too frequently. Wait ten minutes " -"and try again. If you continue to try, you will need to wait even longer." -msgstr "" -"Du er logget ind og ud for mange gange indenfor et kort tidsrum. Vent ti " -"minutter og prøv så igen, for ellers skal du bare vente endnu længere." +msgid "You have been connecting and disconnecting too frequently. Wait ten minutes and try again. If you continue to try, you will need to wait even longer." +msgstr "Du er logget ind og ud for mange gange indenfor et kort tidsrum. Vent ti minutter og prøv så igen, for ellers skal du bare vente endnu længere." #, c-format msgid "An unknown signon error has occurred: %s." @@ -9364,7 +8713,7 @@ msgid "TOC has come back from its pause. You may now send messages again." msgstr "TOC er blevet tilgængelig. Du kan nu sende beskeder igen." msgid "Password Change Successful" -msgstr "Adgangskode skiftet" +msgstr "Adgangskode ændret" msgid "_Group:" msgstr "_Gruppe:" @@ -9426,53 +8775,38 @@ msgid "Yahoo! system message for %s:" msgstr "Yahoo! systembesked til %s:" #, c-format -msgid "" -"%s has (retroactively) denied your request to add them to your list for the " -"following reason: %s." +msgid "%s has (retroactively) denied your request to add them to your list for the following reason: %s." msgstr "" -"%s har nægtet din anmodning om at tilføje dem til din venneliste af følgende " -"grund:\n" +"%s har (tilbagevirkende) nægtet din anmodning om at tilføje dem til din venneliste af følgende grund:\n" "%s." #, c-format msgid "%s has (retroactively) denied your request to add them to your list." -msgstr "%s har nægtet din anmodning om at tilføje dem til din venneliste." +msgstr "%s har (tilbagevirkende) nægtet din anmodning om at tilføje dem til din venneliste." msgid "Add buddy rejected" msgstr "Vennetilføjelse nægtet" #, c-format -msgid "" -"The Yahoo server has requested the use of an unrecognized authentication " -"method. You will probably not be able to successfully sign on to Yahoo. " -"Check %s for updates." -msgstr "" -"Yahoo-serveren har anmodet om brugen af en ukendt godkendelsesmetode. Du " -"vil højst sandsynligt ikke kunne logge problemfrit på Yahoo. Kontrollér %s " -"for opdateringer." +msgid "The Yahoo server has requested the use of an unrecognized authentication method. You will probably not be able to successfully sign on to Yahoo. Check %s for updates." +msgstr "Yahoo-serveren har anmodet om brugen af en ukendt godkendelsesmetode. Du vil højst sandsynligt ikke kunne logge problemfrit på Yahoo. Kontrollér %s for opdateringer." msgid "Failed Yahoo! Authentication" msgstr "Fejlede Yahoo! godkendelse" #, c-format -msgid "" -"You have tried to ignore %s, but the user is on your buddy list. Clicking " -"\"Yes\" will remove and ignore the buddy." -msgstr "" -"Du har prøvet at ignorere %s, men brugeren er på din venneliste. Hvis du " -"klikker på \"Ja\" vil det fjerne og ignorere vennen." +msgid "You have tried to ignore %s, but the user is on your buddy list. Clicking \"Yes\" will remove and ignore the buddy." +msgstr "Du har prøvet at ignorere %s, men brugeren er på din venneliste. Hvis du klikker på \"Ja\" vil det fjerne og ignorere vennen." msgid "Ignore buddy?" msgstr "Ignorér ven?" msgid "Your account is locked, please log in to the Yahoo! website." -msgstr "Din konto er låst. Log ind på Yahoo! websitet." +msgstr "Din konto er låst. Log ind på Yahoo!-webstedet." #, c-format msgid "Unknown error number %d. Logging into the Yahoo! website may fix this." -msgstr "" -"Ukendt fejl nummer %d. Prøv at logge ind på Yahoo! websitet for at fixe " -"dette." +msgstr "Ukendt fejl nummer %d. Prøv at logge ind på Yahoo!webstedet for at fixe dette." #, c-format msgid "Could not add buddy %s to group %s to the server list on account %s." @@ -9496,7 +8830,7 @@ msgid "" "Lost connection with %s:\n" "%s" msgstr "" -"Mistede forbindelsen %s:\n" +"Mistede forbindelsen til %s:\n" "%s" #, c-format @@ -9526,22 +8860,22 @@ msgid "Not on server list" msgstr "Ikke på server liste" msgid "Appear Online" -msgstr "Virk offline" +msgstr "Virk tilkoblet" msgid "Appear Permanently Offline" -msgstr "Virk permanent offline" +msgstr "Virk permanent afkoblet" msgid "Presence" msgstr "Tilstedeværelse" msgid "Appear Offline" -msgstr "Virk offline" +msgstr "Virk afkoblet" msgid "Don't Appear Permanently Offline" -msgstr "Virk ikke permanent offline" +msgstr "Virk ikke permanent afkoblet" msgid "Join in Chat" -msgstr "Deltag i chat" +msgstr "Tilslut samtale" msgid "Initiate Conference" msgstr "Start konference" @@ -9553,22 +8887,22 @@ msgid "Start Doodling" msgstr "Start med at \"Doodle\"" msgid "Activate which ID?" -msgstr "Aktivér hvilket ID?" +msgstr "Aktivér hvilket id?" msgid "Join whom in chat?" -msgstr "Deltag med hvem i chat?" +msgstr "Tilslut hvem i samtale?" msgid "Activate ID..." -msgstr "Aktivér ID..." +msgstr "Aktivér id..." msgid "Join User in Chat..." -msgstr "Deltag med bruger i chat..." +msgstr "Tilslut bruger i samtale..." msgid "Open Inbox" msgstr "Åbn indbakke" msgid "join <room>: Join a chat room on the Yahoo network" -msgstr "join <rum>: Deltag i chatrum på Yahoo-netværket" +msgstr "join <rum>: Tilslut samtalerum på Yahoo-netværket" msgid "list: List rooms on the Yahoo network" msgstr "list: Vis rum på Yahoo-netværket" @@ -9577,7 +8911,7 @@ msgid "doodle: Request user to start a Doodle session" msgstr "doodle: Anmod en bruger om at starte en \"Doodle\"-session" msgid "Yahoo ID..." -msgstr "Yahoo ID..." +msgstr "Yahoo-id..." #. *< type #. *< ui_requirement @@ -9614,19 +8948,19 @@ msgid "File transfer port" msgstr "Filoverførsel port" msgid "Chat room locale" -msgstr "Chatrum tegnsæt" +msgstr "Samtalerum tegnsæt" msgid "Ignore conference and chatroom invitations" -msgstr "Ignorér konference og chatrum invitationer" +msgstr "Ignorér konference og samtalerum invitationer" msgid "Chat room list URL" -msgstr "Chatrumsliste adresse" +msgstr "Adresse på liste over samtalerum" msgid "Yahoo Chat server" -msgstr "Yahoo Chat-server" +msgstr "Yahoo-samtaleserver" msgid "Yahoo Chat port" -msgstr "Yahoo chat-port" +msgstr "Yahoo-samtaleport" #. Write a local message to this conversation showing that a request for a #. * Doodle session has been made @@ -9647,17 +8981,11 @@ msgstr "Yahoo! Japan profil" msgid "Yahoo! Profile" msgstr "Yahoo! profil" -msgid "" -"Sorry, profiles marked as containing adult content are not supported at this " -"time." -msgstr "" -"Desværre, profiler der er markeret som indeholdende indhold der ikke er for " -"børn, er ikke understøttet." +msgid "Sorry, profiles marked as containing adult content are not supported at this time." +msgstr "Desværre, profiler der er markeret som indeholdende indhold der ikke er for børn, er ikke understøttet." -msgid "" -"If you wish to view this profile, you will need to visit this link in your " -"web browser:" -msgstr "Vis du vil se denne profil, skal du besøge dette link i din netlæser:" +msgid "If you wish to view this profile, you will need to visit this link in your web browser:" +msgstr "Vis du vil se denne profil, skal du besøge denne henvisning i din netlæser:" msgid "Yahoo! ID" msgstr "Yahoo! ID" @@ -9672,53 +9000,38 @@ msgid "Home Page" msgstr "Hjemmeside" msgid "Cool Link 1" -msgstr "Sejt link 1" +msgstr "Sej henvisning 1" msgid "Cool Link 2" -msgstr "Sejt link 2" +msgstr "Sej henvisning 2" msgid "Cool Link 3" -msgstr "Sejt link 3" +msgstr "Sej henvisning 3" msgid "Last Update" msgstr "Sidst opdateret" -msgid "" -"This profile is in a language or format that is not supported at this time." -msgstr "" -"Denne profil er i et sprog eller format som ikke er understøttet på " -"nuværende tidspunkt." +msgid "This profile is in a language or format that is not supported at this time." +msgstr "Denne profil er i et sprog eller format som ikke er understøttet på nuværende tidspunkt." -msgid "" -"Could not retrieve the user's profile. This most likely is a temporary " -"server-side problem. Please try again later." -msgstr "" -"Kunne ikke modtage brugerens profil. Dette er højst sandsynligt et " -"midlertidigt server problem. Prøv igen senere." +msgid "Could not retrieve the user's profile. This most likely is a temporary server-side problem. Please try again later." +msgstr "Kunne ikke modtage brugerens profil. Dette er højst sandsynligt et midlertidigt server problem. Prøv igen senere." -msgid "" -"Could not retrieve the user's profile. This most likely means that the user " -"does not exist; however, Yahoo! sometimes does fail to find a user's " -"profile. If you know that the user exists, please try again later." -msgstr "" -"Kunne ikke modtage brugerens profil. Dette betyder højst sandsynligt at " -"brugeren ikke eksisterer; men Yahoo! tager nogen gange fejl og kan ikke " -"finde en brugers profil. Hvis du ved at brugeren eksisterer, så prøv igen " -"senere." +msgid "Could not retrieve the user's profile. This most likely means that the user does not exist; however, Yahoo! sometimes does fail to find a user's profile. If you know that the user exists, please try again later." +msgstr "Kunne ikke modtage brugerens profil. Dette betyder højst sandsynligt at brugeren ikke eksisterer; men Yahoo! tager nogen gange fejl og kan ikke finde en brugers profil. Hvis du ved at brugeren eksisterer, så prøv igen senere." msgid "The user's profile is empty." msgstr "Brugerens profil er tom." #, c-format msgid "%s declined your conference invitation to room \"%s\" because \"%s\"." -msgstr "" -"%s sagde nej til din konference-invitiation til rum \"%s\" pga. \"%s\"." +msgstr "%s sagde nej til din konference-invitiation til rum \"%s\" pga. \"%s\"." msgid "Invitation Rejected" msgstr "Invitation afvist" msgid "Failed to join chat" -msgstr "Kunne ikke deltage i chat" +msgstr "Kunne ikke tilslutte samtale" #. -6 msgid "Unknown room" @@ -9732,22 +9045,18 @@ msgstr "Måske er rummet fyldt" msgid "Not available" msgstr "Ikke tilgængelig" -msgid "" -"Unknown error. You may need to logout and wait five minutes before being " -"able to rejoin a chatroom" -msgstr "" -"Ukendt fejl. Det kræver måske at du logger ud og venter fem minutter før du " -"kan joine chatrummet igen" +msgid "Unknown error. You may need to logout and wait five minutes before being able to rejoin a chatroom" +msgstr "Ukendt fejl. Det kræver måske at du logger ud og venter fem minutter før du kan tilslutte samtalerummet igen" #, c-format msgid "You are now chatting in %s." -msgstr "Du er nu kendt som %s." +msgstr "Du samtaler nu i %s." msgid "Failed to join buddy in chat" -msgstr "Kunne ikke deltage med ven i chat" +msgstr "Kunne ikke tilslutte ven i samtale" msgid "Maybe they're not in a chat?" -msgstr "Måske er de ikke i en chat?" +msgstr "Måske er de ikke i en samtale?" msgid "Fetching the room list failed." msgstr "Hentning af rumliste fejlede." @@ -9775,16 +9084,12 @@ msgstr "" "Mistede forbindelsen til server\n" "%s" -msgid "" -"(There was an error converting this message.\t Check the 'Encoding' option " -"in the Account Editor)" -msgstr "" -"(Der opstod en fejl, da denne besked skulle konverteres.\t Tjek 'Tegnsæt'-" -"indstillingen i Konto-redigeringen)" +msgid "(There was an error converting this message.\t Check the 'Encoding' option in the Account Editor)" +msgstr "(Der opstod en fejl, da denne besked skulle konverteres.\t Tjek 'Tegnsæt'-indstillingen i Konto-redigeringen)" #, c-format msgid "Unable to send to chat %s,%s,%s" -msgstr "Kunne ikke sende til chat %s,%s,%s" +msgstr "Kunne ikke sende til samtale %s,%s,%s" msgid "Hidden or not logged-in" msgstr "Skjult eller ikke logget ind" @@ -9825,33 +9130,19 @@ msgid "topic <instance>: Set the instance to be used on this class" msgstr "topic <instans>: Sæt instans der skal bruges på denne class" msgid "sub <class> <instance> <recipient>: Join a new chat" -msgstr "" -"sub <class> <instans> <modtager>: Deltag i en ny chat" +msgstr "sub <class> <instans> <modtager>: Tilslut en ny samtale" -msgid "" -"zi <instance>: Send a message to <message,<i>instance</i>,*>" +msgid "zi <instance>: Send a message to <message,<i>instance</i>,*>" msgstr "zi <instans>: Send en besked til <besked,<i>instans</i>,*>" -msgid "" -"zci <class> <instance>: Send a message to <<i>class</i>," -"<i>instance</i>,*>" -msgstr "" -"zci <klasse> <instans>: Send en besked til <<i>klasse</i>," -"<i>instans</i>,*>" +msgid "zci <class> <instance>: Send a message to <<i>class</i>,<i>instance</i>,*>" +msgstr "zci <klasse> <instans>: Send en besked til <<i>klasse</i>,<i>instans</i>,*>" -msgid "" -"zcir <class> <instance> <recipient>: Send a message to <" -"<i>class</i>,<i>instance</i>,<i>recipient</i>>" -msgstr "" -"zcir <klasse> <instans> <modtager>: Send en besked til <" -"<i>klasse</i>,<i>instans</i>,<i>modtager</i>>" +msgid "zcir <class> <instance> <recipient>: Send a message to <<i>class</i>,<i>instance</i>,<i>recipient</i>>" +msgstr "zcir <klasse> <instans> <modtager>: Send en besked til <<i>klasse</i>,<i>instans</i>,<i>modtager</i>>" -msgid "" -"zir <instance> <recipient>: Send a message to <MESSAGE," -"<i>instance</i>,<i>recipient</i>>" -msgstr "" -"zir <instans> <modtager>: Send en besked til <MESSAGE," -"<i>instans</i>,<i>modtager</i>>" +msgid "zir <instance> <recipient>: Send a message to <MESSAGE,<i>instance</i>,<i>recipient</i>>" +msgstr "zir <instans> <modtager>: Send en besked til <MESSAGE,<i>instans</i>,<i>modtager</i>>" msgid "zc <class>: Send a message to <<i>class</i>,PERSONAL,*>" msgstr "zc <klasse>: Send en besked til <<i>klasse</i>,PERSONAL,*>" @@ -9909,15 +9200,15 @@ msgstr "" #, c-format msgid "Unable to parse response from HTTP proxy: %s\n" -msgstr "Kunne ikke fortolke svar fra HTTP-mellemvært: %s\n" +msgstr "Kunne ikke fortolke svar fra HTTP-proxy: %s\n" #, c-format msgid "HTTP proxy connection error %d" -msgstr "HTTP-mellemvært forbindelsesfejl %d" +msgstr "HTTP-proxy forbindelsesfejl %d" #, c-format msgid "Access denied: HTTP proxy server forbids port %d tunneling." -msgstr "Adgang nægtet: HTTP-mellemværtsserver tillader ikke port %d tunnel." +msgstr "Adgang nægtet: HTTP-proxyserver tillader ikke port %d tunnel." #, c-format msgid "Error resolving %s" @@ -9928,7 +9219,7 @@ msgstr "Kunne ikke slå værtsnavn op" #, c-format msgid "Requesting %s's attention..." -msgstr "Påkræver %s's opmærksomhed..." +msgstr "Anmoder om %s's opmærksomhed..." #, c-format msgid "%s has requested your attention!" @@ -9967,15 +9258,15 @@ msgid "" "%s has invited %s to the chat room %s:\n" "%s" msgstr "" -"%s har inviteret %s til chatrummet %s:\n" +"%s har inviteret %s til samtalerummet %s:\n" "%s" #, c-format msgid "%s has invited %s to the chat room %s\n" -msgstr "%s har inviteret %s til chatrummet %s\n" +msgstr "%s har inviteret %s til samtalerummet %s\n" msgid "Accept chat invitation?" -msgstr "Accepter chat invitation?" +msgstr "Accepter samtaleinvitation?" #. Shortcut msgid "Shortcut" @@ -9989,10 +9280,10 @@ msgid "Stored Image" msgstr "Gemt billede" msgid "Stored Image. (that'll have to do for now)" -msgstr "Gemt billede. (det må udgøre det indtil videre)" +msgstr "Gemt billede. (det må gøre det indtil videre)" msgid "SSL Connection Failed" -msgstr "SSL-forbindelse mislykkedes" +msgstr "SSL-forbindelse fejlede" msgid "SSL Handshake Failed" msgstr "SSL-håndtryk fejlede" @@ -10061,12 +9352,8 @@ msgid "Error Reading %s" msgstr "Fejl ved læsning af %s" #, c-format -msgid "" -"An error was encountered reading your %s. They have not been loaded, and " -"the old file has been renamed to %s~." -msgstr "" -"En fejl opstod ved læsning af din %s. De er ikke blevet indlæst, og den " -"gamle fil er blevet omdøbt til %s~." +msgid "An error was encountered reading your %s. They have not been loaded, and the old file has been renamed to %s~." +msgstr "En fejl opstod ved læsning af din %s. De er ikke blevet indlæst, og den gamle fil er blevet omdøbt til %s~." msgid "Calculating..." msgstr "Udregner..." @@ -10123,12 +9410,8 @@ msgid "Error reading from %s: response too long (%d bytes limit)" msgstr "Fejl ved læsning fra %s: svar for langt (%d bytes grænse)" #, c-format -msgid "" -"Unable to allocate enough memory to hold the contents from %s. The web " -"server may be trying something malicious." -msgstr "" -"Ikke i stand til at allokere nok hukommelse til at holde indholdet fra %s. " -"Webserveren prøver måske noget ondskabsfuldt." +msgid "Unable to allocate enough memory to hold the contents from %s. The web server may be trying something malicious." +msgstr "Ikke i stand til at allokere nok hukommelse til at holde indholdet fra %s. Internetserveren prøver måske noget ondskabsfuldt." #, c-format msgid "Error reading from %s: %s" @@ -10158,7 +9441,7 @@ msgstr "Forbindelse afbrudt af andet software på din computer." #. 10054 #, c-format msgid "Remote host closed connection." -msgstr "Fjernbrugeren har lukket forbindelsen." +msgstr "Fjernværten har lukket forbindelsen." #. 10060 #, c-format @@ -10168,7 +9451,7 @@ msgstr "Forbindelsen overskred tidsgrænsen." #. 10061 #, c-format msgid "Connection refused." -msgstr "Forbindelse afslået." +msgstr "Forbindelse afvist." #. 10048 #, c-format @@ -10179,10 +9462,10 @@ msgid "Internet Messenger" msgstr "Internet beskeder" msgid "Pidgin Internet Messenger" -msgstr "Pidgin Internet Kvikbesked" +msgstr "Pidgin Internet Besked" msgid "Send instant messages over multiple protocols" -msgstr "Send kvik-beskeder over flere protokoller" +msgstr "Send kvikbeskeder over flere protokoller" msgid "Orientation" msgstr "Placering" @@ -10215,7 +9498,7 @@ msgstr "Påmindelse om ny _post" #. Buddy icon msgid "Use this buddy _icon for this account:" -msgstr "Brug dette venne_ikon for denne konto:" +msgstr "Brug dette venne_ikon til denne konto:" #. Build the protocol options frame. #, c-format @@ -10223,13 +9506,13 @@ msgid "%s Options" msgstr "%s indstillinger" msgid "Use GNOME Proxy Settings" -msgstr "Brug GNOME-mellemværts indstillinger" +msgstr "Brug GNOME-proxy indstillinger" msgid "Use Global Proxy Settings" -msgstr "Brug globale mellemværts indstillinger" +msgstr "Brug globale proxy-indstillinger" msgid "No Proxy" -msgstr "Ingen mellemvært" +msgstr "Ingen proxy" msgid "HTTP" msgstr "HTTP" @@ -10256,10 +9539,10 @@ msgid "you can see the butterflies mating" msgstr "du kan se sommerfuglene parre sig" msgid "Proxy Options" -msgstr "Indstillinger for mellemvært" +msgstr "Indstillinger for proxy" msgid "Proxy _type:" -msgstr "Mellemværts_type:" +msgstr "Proxy_type:" msgid "_Host:" msgstr "_Værtsnavn:" @@ -10298,39 +9581,24 @@ msgstr "Protokol" msgid "" "<span size='larger' weight='bold'>Welcome to %s!</span>\n" "\n" -"You have no IM accounts configured. To start connecting with %s press the " -"<b>Add...</b> button below and configure your first account. If you want %s " -"to connect to multiple IM accounts, press <b>Add...</b> again to configure " -"them all.\n" +"You have no IM accounts configured. To start connecting with %s press the <b>Add...</b> button below and configure your first account. If you want %s to connect to multiple IM accounts, press <b>Add...</b> again to configure them all.\n" "\n" -"You can come back to this window to add, edit, or remove accounts from " -"<b>Accounts->Manage Accounts</b> in the Buddy List window" +"You can come back to this window to add, edit, or remove accounts from <b>Accounts->Manage Accounts</b> in the Buddy List window" msgstr "" "<span size='larger' weight='bold'>Velkommen til %s!</span>\n" "\n" -"Du har ingen kvikbesked-konti konfigureret. For at komme i gang med at " -"forbinde med %s tryk <b>Tilføj...</b>-knappen nedenfor og konfigurer din " -"første konto. Hvis du vil have %s til at forbinde til flere kvikbesked-" -"konti, tryk <b>Tilføj...</b> igen for at konfigurer dem alle.\n" +"Du har ingen besked-konti konfigureret. For at komme i gang med at forbinde med %s tryk <b>Tilføj...</b>-knappen nedenfor og konfigurér din første konto. Hvis du vil have %s til at forbinde til flere besked-konti, tryk <b>Tilføj...</b> igen for at konfigurere dem alle.\n" "\n" -"Du kan vende tilbage til dette vindue for at tilføje, redigere eller fjerne " -"konti fra <b>Konti->Kontihåndtering</b> i venneliste-vinduet" +"Du kan vende tilbage til dette vindue for at tilføje, redigere eller fjerne konti fra <b>Konti->Kontihåndtering</b> i venneliste-vinduet" #, c-format msgid "You have %d contact named %s. Would you like to merge them?" -msgid_plural "" -"You currently have %d contacts named %s. Would you like to merge them?" +msgid_plural "You currently have %d contacts named %s. Would you like to merge them?" msgstr[0] "Du har %d kontakt navngivet %s. Vil du slå dem sammen?" msgstr[1] "Du har %d kontakter navngivet %s. Vil du slå dem sammen?" -msgid "" -"Merging these contacts will cause them to share a single entry on the buddy " -"list and use a single conversation window. You can separate them again by " -"choosing 'Expand' from the contact's context menu" -msgstr "" -"Slås disse kontakter sammen, vil de dele et enkelt element på vennelisten, " -"og bruge et enkelt samtalevindue. Du kan adskille dem igen, ved at vælge " -"\"Udvid\" fra i kontekstmenuen for kontakten" +msgid "Merging these contacts will cause them to share a single entry on the buddy list and use a single conversation window. You can separate them again by choosing 'Expand' from the contact's context menu" +msgstr "Slås disse kontakter sammen, vil de dele et enkelt element på vennelisten, og bruge et enkelt samtalevindue. Du kan adskille dem igen, ved at vælge \"Udvid\" i kontekstmenuen for kontakten" msgid "Please update the necessary fields." msgstr "Opdatér de nødvendige felter." @@ -10338,11 +9606,8 @@ msgstr "Opdatér de nødvendige felter." msgid "Room _List" msgstr "Rum_liste" -msgid "" -"Please enter the appropriate information about the chat you would like to " -"join.\n" -msgstr "" -"Indtast den nødvendige information om den chat du gerne vil deltage i.\n" +msgid "Please enter the appropriate information about the chat you would like to join.\n" +msgstr "Indtast den nødvendige information om den samtale du gerne vil tilslutte.\n" msgid "_Account:" msgstr "_Konto:" @@ -10372,7 +9637,7 @@ msgid "View _Log" msgstr "Vis _log" msgid "Hide when offline" -msgstr "Skjul når offline" +msgstr "Skjul når afkoblet" msgid "_Alias..." msgstr "_Alias..." @@ -10381,7 +9646,7 @@ msgid "_Remove" msgstr "_Fjern" msgid "Set Custom Icon" -msgstr "Sæt tilpasset ikon" +msgstr "Indstil tilpasset ikon" msgid "Remove Custom Icon" msgstr "Fjern tilpasset ikon" @@ -10390,7 +9655,7 @@ msgid "Add _Buddy..." msgstr "Tilføj _ven..." msgid "Add C_hat..." -msgstr "Tilføj _chat..." +msgstr "Tilføj _samtale..." msgid "_Delete Group" msgstr "_Slet gruppe" @@ -10400,10 +9665,10 @@ msgstr "_Omdøb" #. join button msgid "_Join" -msgstr "_Deltag" +msgstr "_Tilslut" msgid "Auto-Join" -msgstr "Auto-Deltag" +msgstr "Auto-tilslut" msgid "Persistent" msgstr "Vedvarende" @@ -10420,11 +9685,8 @@ msgstr "_Udvid" msgid "/Tools/Mute Sounds" msgstr "/Værktøjer/Slå lyde fra" -msgid "" -"You are not currently signed on with an account that can add that buddy." -msgstr "" -"Du er på nuværende tidspunkt ikke logget på nogen konti som kan tilføje en " -"ven." +msgid "You are not currently signed on with an account that can add that buddy." +msgstr "Du er på nuværende tidspunkt ikke logget på nogen konti som kan tilføje denne ven." #. I don't believe this can happen currently, I think #. * everything that calls this function checks for one of the @@ -10440,7 +9702,7 @@ msgid "/Buddies/New Instant _Message..." msgstr "/Venner/Ny _besked..." msgid "/Buddies/Join a _Chat..." -msgstr "/Venner/_Deltag i chat..." +msgstr "/Venner/_Tilslut en samtale..." msgid "/Buddies/Get User _Info..." msgstr "/Venner/_Hent brugeroplysninger..." @@ -10452,19 +9714,19 @@ msgid "/Buddies/Sh_ow" msgstr "/Venner/_Vis" msgid "/Buddies/Show/_Offline Buddies" -msgstr "/Venner/Vis/_offline venner" +msgstr "/Venner/Vis/_Afkoblede venner" msgid "/Buddies/Show/_Empty Groups" -msgstr "/Venner/Vis/_tomme grupper" +msgstr "/Venner/Vis/_Tomme grupper" msgid "/Buddies/Show/Buddy _Details" -msgstr "/Venner/Vis/venne_detaljer" +msgstr "/Venner/Vis/Venne_detaljer" msgid "/Buddies/Show/Idle _Times" -msgstr "/Venner/Vis/inaktiv _tider" +msgstr "/Venner/Vis/Inaktiv _tider" msgid "/Buddies/Show/_Protocol Icons" -msgstr "/Venner/Vis/_tomme grupper" +msgstr "/Venner/Vis/_Protokolikoner" msgid "/Buddies/_Sort Buddies" msgstr "/Venner/_Sortér venner" @@ -10473,7 +9735,7 @@ msgid "/Buddies/_Add Buddy..." msgstr "/Venner/Tilføj _ven..." msgid "/Buddies/Add C_hat..." -msgstr "/Venner/Tilføj _chat..." +msgstr "/Venner/Tilføj _samtale..." msgid "/Buddies/Add _Group..." msgstr "/Venner/Tilføj _gruppe..." @@ -10508,7 +9770,7 @@ msgid "/Tools/Pr_ivacy" msgstr "/Værktøjer/_Privatliv" msgid "/Tools/Smile_y" -msgstr "/Værktøjer/Smile_ys" +msgstr "/Værktøjer/Smile_y" msgid "/Tools/_File Transfers" msgstr "/Værktøjer/_Filoverførsler" @@ -10527,7 +9789,7 @@ msgid "/_Help" msgstr "/_Hjælp" msgid "/Help/Online _Help" -msgstr "/Hjælp/Online _hjælp" +msgstr "/Hjælp/Tilkoblet _hjælp" msgid "/Help/_Debug Window" msgstr "/Hjælp/Vis _fejlsøgningsvindue" @@ -10556,7 +9818,7 @@ msgstr "" "<b>Emne:</b> %s" msgid "(no topic set)" -msgstr "(Intet emne sat)" +msgstr "(Intet emne angivet)" msgid "Buddy Alias" msgstr "Vennealias" @@ -10595,7 +9857,7 @@ msgid "/Buddies/New Instant Message..." msgstr "/Venner/Ny besked..." msgid "/Buddies/Join a Chat..." -msgstr "/Venner/Deltag i chat..." +msgstr "/Venner/Tilslut en samtale..." msgid "/Buddies/Get User Info..." msgstr "/Venner/Hent brugeroplysninger..." @@ -10604,7 +9866,7 @@ msgid "/Buddies/Add Buddy..." msgstr "/Venner/Tilføj ven..." msgid "/Buddies/Add Chat..." -msgstr "/Venner/Tilføj chat..." +msgstr "/Venner/Tilføj samtale..." msgid "/Buddies/Add Group..." msgstr "/Venner/Tilføj gruppe..." @@ -10649,12 +9911,9 @@ msgstr "Velkommen tilbage!" #, c-format msgid "%d account was disabled because you signed on from another location:" -msgid_plural "" -"%d accounts were disabled because you signed on from another location:" -msgstr[0] "" -"%d-konto blev deaktiveret, fordi du loggede ind fra en anden lokation:" -msgstr[1] "" -"%d-kontiene blev deaktiveret, fordi du loggede ind fra en anden lokation:" +msgid_plural "%d accounts were disabled because you signed on from another location:" +msgstr[0] "%d-konto blev deaktiveret, fordi du loggede ind fra en anden lokation:" +msgstr[1] "%d-kontiene blev deaktiveret, fordi du loggede ind fra en anden lokation:" msgid "<b>Username:</b>" msgstr "<b>Brugernavn:</b>" @@ -10673,21 +9932,17 @@ msgstr "/Konti" msgid "" "<span weight='bold' size='larger'>Welcome to %s!</span>\n" "\n" -"You have no accounts enabled. Enable your IM accounts from the <b>Accounts</" -"b> window at <b>Accounts->Manage Accounts</b>. Once you enable accounts, " -"you'll be able to sign on, set your status, and talk to your friends." +"You have no accounts enabled. Enable your IM accounts from the <b>Accounts</b> window at <b>Accounts->Manage Accounts</b>. Once you enable accounts, you'll be able to sign on, set your status, and talk to your friends." msgstr "" "<span weight='bold' size='larger'>Velkommen til %s!</span>\n" "\n" -"Du har ingen aktive konti. Aktivér dine kvikbesked-konti fra <b>Konti</b>-" -"vinduet <b>Konti->Kontihåndtering</b>. Når du har aktiveret konti, vil du " -"være i stand til at logge på, sætte din status og tale med dine venner." +"Du har ingen aktive konti. Aktivér dine besked-konti fra <b>Konti</b>-vinduet <b>Konti->Kontihåndtering</b>. Når du har aktiveret konti, vil du være i stand til at logge på, sætte din status og tale med dine venner." #. set the Show Offline Buddies option. must be done #. * after the treeview or faceprint gets mad. -Robot101 #. msgid "/Buddies/Show/Offline Buddies" -msgstr "/Venner/Vis/Offline venner" +msgstr "/Venner/Vis/Afkoblede venner" msgid "/Buddies/Show/Empty Groups" msgstr "/Venner/Vis/Tomme grupper" @@ -10714,30 +9969,22 @@ msgid "Add buddy to _group:" msgstr "Tilføj ven til _gruppe:" msgid "This protocol does not support chat rooms." -msgstr "Denne protokol understøtter ikke chatrum." +msgstr "Denne protokol understøtter ikke samtalerum." -msgid "" -"You are not currently signed on with any protocols that have the ability to " -"chat." -msgstr "" -"Du er på nuværende tidspunkt ikke logget på nogen protokoller som har evnen " -"til at chatte." +msgid "You are not currently signed on with any protocols that have the ability to chat." +msgstr "Du er på nuværende tidspunkt ikke logget på nogen protokoller som har evnen til at samtale." -msgid "" -"Please enter an alias, and the appropriate information about the chat you " -"would like to add to your buddy list.\n" -msgstr "" -"Indtast et alias og den nødvendige information om den chat du vil tilføje " -"til din venneliste.\n" +msgid "Please enter an alias, and the appropriate information about the chat you would like to add to your buddy list.\n" +msgstr "Indtast et alias og den nødvendige information om den samtale du vil tilføje til din venneliste.\n" msgid "A_lias:" msgstr "A_lias:" msgid "Auto_join when account becomes online." -msgstr "_Tilslut automatisk når en konto kommer online." +msgstr "_Tilslut automatisk når en konto tilkobles." msgid "_Remain in chat after window is closed." -msgstr "_Forbliv i chat efter vinduet er lukket." +msgstr "_Forbliv i samtale efter vinduet er lukket." msgid "Please enter the name of the group to be added." msgstr "Indtast navnet på gruppen der skal tilføjes." @@ -10774,24 +10021,17 @@ msgid "Unknown command." msgstr "Ukendt kommando." msgid "That buddy is not on the same protocol as this chat." -msgstr "Vennen er ikke på den samme protokol som denne chat." +msgstr "Vennen er ikke på den samme protokol som denne samtale." -msgid "" -"You are not currently signed on with an account that can invite that buddy." -msgstr "" -"Du er på nuværende tidspunkt ikke logget på nogen konti som kan invitere den " -"ven." +msgid "You are not currently signed on with an account that can invite that buddy." +msgstr "Du er på nuværende tidspunkt ikke logget på nogen konti som kan invitere den ven." msgid "Invite Buddy Into Chat Room" -msgstr "Invitér ven med i chat-rum" +msgstr "Invitér ven med i samtalerum" #. Put our happy label in it. -msgid "" -"Please enter the name of the user you wish to invite, along with an optional " -"invite message." -msgstr "" -"Indtast navnet på den bruger, du vil invitere, samt eventuelt en inviterings-" -"besked." +msgid "Please enter the name of the user you wish to invite, along with an optional invite message." +msgstr "Indtast navnet på den bruger, du vil invitere, samt eventuelt en inviterings-besked." msgid "_Buddy:" msgstr "_Ven:" @@ -10840,10 +10080,10 @@ msgid "Save Icon As..." msgstr "Gem ikon som..." msgid "Set Custom Icon..." -msgstr "Sæt tilpasset ikon..." +msgstr "Indstil tilpasset ikon..." msgid "Change Size" -msgstr "Skift størrelse" +msgstr "Ændr størrelse" msgid "Show All" msgstr "Vis alle" @@ -10889,7 +10129,7 @@ msgid "/Conversation/_Block..." msgstr "/Samtale/_Blokér..." msgid "/Conversation/_Unblock..." -msgstr "/Samtale/_Afblokering..." +msgstr "/Samtale/_Frigiv..." msgid "/Conversation/_Add..." msgstr "/Samtale/_Tilføj..." @@ -10908,25 +10148,25 @@ msgstr "/Samtale/_Luk" #. Options msgid "/_Options" -msgstr "/_Valgmuligheder" +msgstr "/_Indstillinger" msgid "/Options/Enable _Logging" -msgstr "/Valgmuligheder/Aktiver _logning" +msgstr "/Indstillinger/Aktivér _logning" msgid "/Options/Enable _Sounds" -msgstr "/Valgmuligheder/Brug _lyde" +msgstr "/Indstillinger/Brug _lyde" msgid "/Options/Show Formatting _Toolbars" -msgstr "/Valgmuligheder/Vis _formatteringslinjer" +msgstr "/Indstillinger/Vis _formatteringslinjer" msgid "/Options/Show Ti_mestamps" -msgstr "/Valgmuligheder/Vis _tidsstempler" +msgstr "/Indstillinger/Vis _tidsstempler" msgid "/Conversation/More" msgstr "/Samtale/Mere" msgid "/Options" -msgstr "/Valgmuligheder" +msgstr "/Indstillinger" #. The menubar has been deactivated. Make sure the 'More' submenu is regenerated next time #. * the 'Conversation' menu pops up. @@ -10958,7 +10198,7 @@ msgid "/Conversation/Block..." msgstr "/Samtale/Blokér..." msgid "/Conversation/Unblock..." -msgstr "/Samtale/Afblokering..." +msgstr "/Samtale/Frigivelse..." msgid "/Conversation/Add..." msgstr "/Samtale/Tilføj..." @@ -10967,22 +10207,22 @@ msgid "/Conversation/Remove..." msgstr "/Samtale/Fjern..." msgid "/Conversation/Insert Link..." -msgstr "/Samtale/Indsæt link..." +msgstr "/Samtale/Indsæt henvisning..." msgid "/Conversation/Insert Image..." msgstr "/Samtale/Indsæt billede..." msgid "/Options/Enable Logging" -msgstr "/Valgmuligheder/Aktiver logning" +msgstr "/Indstillinger/Aktivér logning" msgid "/Options/Enable Sounds" -msgstr "/Valgmuligheder/Brug lyde" +msgstr "/Indstillinger/Brug lyde" msgid "/Options/Show Formatting Toolbars" -msgstr "/Valgmuligheder/Vis formatteringslinjer" +msgstr "/Indstillinger/Vis formatteringslinjer" msgid "/Options/Show Timestamps" -msgstr "/Valgmuligheder/Vis tidsstempler" +msgstr "/Indstillinger/Vis tidsstempler" msgid "User is typing..." msgstr "Bruger skriver..." @@ -11004,7 +10244,7 @@ msgstr "_Send" #. Setup the label telling how many people are in the room. msgid "0 people in room" -msgstr "Ingen chattere i rummet" +msgstr "Ingen samtalere i rummet" #, c-format msgid "%d person in room" @@ -11055,7 +10295,7 @@ msgid "Last created window" msgstr "Sidst oprettede vindue" msgid "Separate IM and Chat windows" -msgstr "Seperate samtale- og chatvinduer" +msgstr "Seperate besked- og samtalevinduer" msgid "New window" msgstr "Nyt vindue" @@ -11088,7 +10328,7 @@ msgid "Filter" msgstr "Filter" msgid "Right click for more options." -msgstr "Højreklik for flere muligheder." +msgstr "Højreklik for flere indstillinger." msgid "Level " msgstr "Niveau " @@ -11125,7 +10365,7 @@ msgid "support" msgstr "support" msgid "webmaster" -msgstr "webmaster" +msgstr "internetudvikler" msgid "Senior Contributor/QA" msgstr "Seniorbidrager/QA" @@ -11162,7 +10402,7 @@ msgid "Arabic" msgstr "Arabisk" msgid "Belarusian Latin" -msgstr "Belarusian Latin" +msgstr "Hviderussisk latinsk" msgid "Bulgarian" msgstr "Bulgarsk" @@ -11261,10 +10501,10 @@ msgid "Ubuntu Georgian Translators" msgstr "Georgiske Ubuntu-oversættere" msgid "Kannada" -msgstr "Kannada" +msgstr "Kanada" msgid "Kannada Translation team" -msgstr "Kannada oversættelseshold" +msgstr "Kanadiske oversættelseshold" msgid "Korean" msgstr "Koreansk" @@ -11285,7 +10525,7 @@ msgid "Mongolian" msgstr "Mongolsk" msgid "Bokmål Norwegian" -msgstr "Bokmål" +msgstr "Norsk" msgid "Nepali" msgstr "Nepali" @@ -11363,7 +10603,7 @@ msgid "Simplified Chinese" msgstr "Simpelt kinesisk" msgid "Hong Kong Chinese" -msgstr "Hong Kong Chinese" +msgstr "Kinesisk" msgid "Traditional Chinese" msgstr "Traditionelt kinesisk" @@ -11376,45 +10616,19 @@ msgid "About %s" msgstr "Om %s" #, c-format -msgid "" -"%s is a graphical modular messaging client based on libpurple which is " -"capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, " -"Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, MySpaceIM, Gadu-Gadu, and " -"QQ all at once. It is written using GTK+.<BR><BR>You may modify and " -"redistribute the program under the terms of the GPL (version 2 or later). A " -"copy of the GPL is contained in the 'COPYING' file distributed with %s. %s " -"is copyrighted by its contributors. See the 'COPYRIGHT' file for the " -"complete list of contributors. We provide no warranty for this program." -"<BR><BR>" -msgstr "" -"%s er en grafisk modulær kvikbeskeds-klient baseret på libpurple, der " -"understøtter AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, Novell " -"GroupWise, Lotus Sametime, Bonjour, Zephyr, MySpaceIM, Gadu-Gadu og QQ på " -"samme tid. Det er skrevet i GTK+.<BR><BR>Du må modificere og redistribuere " -"programmet under de betingelser givet af GPL (version 2 eller senere). En " -"kopi af GPL er indeholdt i 'COPYING' filen som blev distribueret med %s. %s " -"er ophavsret af dens bidragsydere. Se 'COPYRIGHT' filen for den komplette " -"liste af bidragsydere. Vi giver ingen garanti for dette program.<BR><BR>" +msgid "%s is a graphical modular messaging client based on libpurple which is capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, MySpaceIM, Gadu-Gadu, and QQ all at once. It is written using GTK+.<BR><BR>You may modify and redistribute the program under the terms of the GPL (version 2 or later). A copy of the GPL is contained in the 'COPYING' file distributed with %s. %s is copyrighted by its contributors. See the 'COPYRIGHT' file for the complete list of contributors. We provide no warranty for this program.<BR><BR>" +msgstr "%s er en grafisk modulær beskedklient baseret på libpurple, der understøtter AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, MySpaceIM, Gadu-Gadu og QQ på samme tid. Det er skrevet i GTK+.<BR><BR>Du må modificere og redistribuere programmet under de betingelser givet af GPL (version 2 eller senere). En kopi af GPL er indeholdt i 'COPYING' filen som blev distribueret med %s. %s er ophavsret af dens bidragydere. Se 'COPYRIGHT' filen for den komplette liste af bidragydere. Vi giver ingen garanti for dette program.<BR><BR>" #, c-format -msgid "" -"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" -"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" -msgstr "" -"<FONT SIZE=\"4\">OSS:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" -"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" +msgid "<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" +msgstr "<FONT SIZE=\"4\">OSS:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" #, c-format -msgid "" -"<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im" -"\">support@pidgin.im</A><BR/><BR/>" -msgstr "" -"<FONT SIZE=\"4\">Hjælp via e-post:</FONT> <A HREF=\"mailto:support@pidgin.im" -"\">support@pidgin.im</A><BR/><BR/>" +msgid "<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im\">support@pidgin.im</A><BR/><BR/>" +msgstr "<FONT SIZE=\"4\">Hjælp via e-post:</FONT> <A HREF=\"mailto:support@pidgin.im\">support@pidgin.im</A><BR/><BR/>" #, c-format -msgid "" -"<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgid "<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>" msgstr "<FONT SIZE=\"4\">IRC-kanal:</FONT> #pidgin on irc.freenode.net<BR><BR>" #, c-format @@ -11425,13 +10639,13 @@ msgid "Current Developers" msgstr "Nuværende udviklere" msgid "Crazy Patch Writers" -msgstr "Vilde patch-skrivere" +msgstr "Vilde fejlrettere" msgid "Retired Developers" msgstr "Tidligere udviklere" msgid "Retired Crazy Patch Writers" -msgstr "Tidligere Vilde patch-skrivere" +msgstr "Tidligere Vilde fejlrettere" msgid "Current Translators" msgstr "Nuværende oversættere" @@ -11451,12 +10665,8 @@ msgstr "_Konto" msgid "Get User Info" msgstr "Hent brugeroplysninger" -msgid "" -"Please enter the username or alias of the person whose info you would like " -"to view." -msgstr "" -"Indtast brugernavnet eller alias på den person, hvis oplysninger du gerne " -"vil se." +msgid "Please enter the username or alias of the person whose info you would like to view." +msgstr "Indtast brugernavnet eller alias på den person, hvis oplysninger du gerne vil se." msgid "View User Log" msgstr "Vis bruger log" @@ -11475,24 +10685,16 @@ msgid "Alias Buddy" msgstr "Lav alias for ven" msgid "Alias Chat" -msgstr "Alias chat" +msgstr "Samtalealias" msgid "Enter an alias for this chat." -msgstr "Indtast et alias for denne chat." +msgstr "Indtast et alias for denne samtale." #, c-format -msgid "" -"You are about to remove the contact containing %s and %d other buddy from " -"your buddy list. Do you want to continue?" -msgid_plural "" -"You are about to remove the contact containing %s and %d other buddies from " -"your buddy list. Do you want to continue?" -msgstr[0] "" -"Du skal til at fjerne kontakten indeholdende %s og %d anden ven fra din " -"venneliste. Vil du fortsætte?" -msgstr[1] "" -"Du skal til at fjerne kontakten indeholdende %s og %d andre venner fra din " -"venneliste. Vil du fortsætte?" +msgid "You are about to remove the contact containing %s and %d other buddy from your buddy list. Do you want to continue?" +msgid_plural "You are about to remove the contact containing %s and %d other buddies from your buddy list. Do you want to continue?" +msgstr[0] "Du skal til at fjerne kontakten indeholdende %s og %d anden ven fra din venneliste. Vil du fortsætte?" +msgstr[1] "Du skal til at fjerne kontakten indeholdende %s og %d andre venner fra din venneliste. Vil du fortsætte?" msgid "Remove Contact" msgstr "Fjern kontakt" @@ -11501,9 +10703,7 @@ msgid "_Remove Contact" msgstr "_Fjern kontakt" #, c-format -msgid "" -"You are about to merge the group called %s into the group called %s. Do you " -"want to continue?" +msgid "You are about to merge the group called %s into the group called %s. Do you want to continue?" msgstr "Du er ved at slå gruppen %s sammen med gruppen %s. Vil du fortsætte?" msgid "Merge Groups" @@ -11513,12 +10713,8 @@ msgid "_Merge Groups" msgstr "_Slå grupper sammen" #, 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 "" -"Du skal til at fjerne gruppen %s og alle den indeholder fra din venneliste. " -"Vil du fortsætte?" +msgid "You are about to remove the group %s and all its members from your buddy list. Do you want to continue?" +msgstr "Du skal til at fjerne gruppen %s og alle den indeholder fra din venneliste. Vil du fortsætte?" msgid "Remove Group" msgstr "Fjern gruppe" @@ -11527,8 +10723,7 @@ msgid "_Remove Group" msgstr "_Fjern gruppe" #, c-format -msgid "" -"You are about to remove %s from your buddy list. Do you want to continue?" +msgid "You are about to remove %s from your buddy list. Do you want to continue?" msgstr "Du skal til at slette %s fra din venneliste. Vil du fortsætte?" msgid "Remove Buddy" @@ -11538,22 +10733,20 @@ msgid "_Remove Buddy" msgstr "_Fjern ven" #, c-format -msgid "" -"You are about to remove the chat %s from your buddy list. Do you want to " -"continue?" -msgstr "Du skal til at fjerne chatten %s fra din venneliste. Vil du fortsætte?" +msgid "You are about to remove the chat %s from your buddy list. Do you want to continue?" +msgstr "Du skal til at fjerne samtalen %s fra din venneliste. Vil du fortsætte?" msgid "Remove Chat" -msgstr "Fjern chat" +msgstr "Fjern samtale" msgid "_Remove Chat" -msgstr "_Fjern chat" +msgstr "_Fjern samtale" msgid "Right-click for more unread messages...\n" msgstr "Højreklik for flere ulæste beskeder...\n" msgid "_Change Status" -msgstr "_Skift status" +msgstr "_Ændr status" msgid "Show Buddy _List" msgstr "Vis venne_liste" @@ -11655,57 +10848,56 @@ msgid "_Reset formatting" msgstr "_Nulstil formattering" msgid "Disable _smileys in selected text" -msgstr "Deaktivér _smileys i valgt tekst" +msgstr "Deaktivér _smileyer i valgt tekst" msgid "Hyperlink color" -msgstr "Link farve" +msgstr "Farve på henvisning" msgid "Color to draw hyperlinks." -msgstr "Farve som hyperlinks skal være." +msgstr "Farve på henvisninger." msgid "Hyperlink visited color" -msgstr "Link farve ved besøgt link" +msgstr "Farve på besøgt henvisning" msgid "Color to draw hyperlinks after it has been visited (or activated)." -msgstr "" -"Farve som hyperlinks skal være efter de er blevet besøgt (eller aktiveret)." +msgstr "Farve på henvisning efter at de er blevet besøgt (eller aktiveret)." # virkelig dårlig oversættelse! msgid "Hyperlink prelight color" -msgstr "Hyperlink præ-lys farve" +msgstr "Farve på ubrugte henvisninger" msgid "Color to draw hyperlinks when mouse is over them." -msgstr "Farve som hyperlinks skal være når musen er over dem." +msgstr "Farve på henvisning når musen er over dem." msgid "Sent Message Name Color" msgstr "Farve på sendte beskeder" msgid "Color to draw the name of a message you sent." -msgstr "Farvelæg navnet på den besked du sendte." +msgstr "Farve som bruges på navnet til den besked du sendte." msgid "Received Message Name Color" -msgstr "Farve på medtagede beskeder" +msgstr "Farve som bruges på navnet til modtagne beskeder" msgid "Color to draw the name of a message you received." -msgstr "Farvelæg navnet på den besked du modtog." +msgstr "Farve som bruges på navnet til den besked du modtog." msgid "\"Attention\" Name Color" -msgstr "\"Opmærksomhed\"-farvenavn" +msgstr "\"Opmærksomhed\" farvenavn" msgid "Color to draw the name of a message you received containing your name." -msgstr "Farvelæg navnet på den besked du modtog indholdende dit navn." +msgstr "Farve som bruges på navnet til den besked du modtog indeholdende dit navn." msgid "Action Message Name Color" -msgstr "Farvenavn for handlingsbesked" +msgstr "Farve som bruges på navnet til handlingsbesked" msgid "Color to draw the name of an action message." -msgstr "Farvelæg navnet på en handlingsbesked." +msgstr "Farve som bruges på navnet til en handlingsbesked." msgid "Action Message Name Color for Whispered Message" -msgstr "Farvenavn for handlingsbesked ved hvisket besked" +msgstr "Farve som bruges på navnet til hvisket handlingsbesked" msgid "Whisper Message Name Color" -msgstr "Farvenavn for hviskebesked" +msgstr "Farve som bruges på navnet til hviskebesked" msgid "Typing notification color" msgstr "Farve på påmindelse af indtastning" @@ -11723,13 +10915,13 @@ msgid "Enable typing notification" msgstr "Aktivér påmindelse om indtastning" msgid "_Copy Email Address" -msgstr "_Kopier email adresse" +msgstr "_Kopier e-postadresse" msgid "_Open Link in Browser" -msgstr "Åbn link i br_owser" +msgstr "Åbn henvisning i br_owser" msgid "_Copy Link Location" -msgstr "_Kopiér link adresse" +msgstr "_Kopiér henvisningsadresse" msgid "" "<span size='larger' weight='bold'>Unrecognized file type</span>\n" @@ -11778,7 +10970,7 @@ msgstr "_Gem billede..." #, c-format msgid "_Add Custom Smiley..." -msgstr "_Tilføj brugerdefinerede smileys..." +msgstr "_Tilføj tilpasset smiley..." msgid "Select Font" msgstr "Vælg skrifttype" @@ -11795,18 +10987,14 @@ msgstr "_Hjemmeside" msgid "_Description" msgstr "_Beskrivelse" -msgid "" -"Please enter the URL and description of the link that you want to insert. " -"The description is optional." -msgstr "" -"Indtast URL'en og beskrivelsen på det link du vil indsætte. Beskrivelsen er " -"ikke krævet." +msgid "Please enter the URL and description of the link that you want to insert. The description is optional." +msgstr "Indtast adressen og beskrivelsen på den henvisning du vil indsætte. Beskrivelsen er ikke krævet." msgid "Please enter the URL of the link that you want to insert." -msgstr "Indtast adressen på henvisningen du vil indsætet." +msgstr "Indtast adressen på henvisningen du vil indsætte." msgid "Insert Link" -msgstr "Indsæt link" +msgstr "Indsæt henvisning" msgid "_Insert" msgstr "_Indsæt" @@ -11823,24 +11011,23 @@ msgid "" "This smiley is disabled because a custom smiley exists for this shortcut:\n" " %s" msgstr "" -"Denne smiley er deaktiveret, fordi tilpasset smiley findes for denne " -"genvej:\n" +"Denne smiley er deaktiveret, fordi en tilpasset smiley findes for denne genvej:\n" "%s" msgid "Smile!" msgstr "Smil!" msgid "_Manage custom smileys" -msgstr "_Håndtér brugerdefinerede smileys" +msgstr "_Håndtér tilpassede smileyer" msgid "This theme has no available smileys." -msgstr "Dette tema har ingen tilgængelige smileys." +msgstr "Dette tema har ingen tilgængelige smileyer." msgid "_Font" msgstr "_Skrifttype" msgid "Group Items" -msgstr "Gruppér punkter" +msgstr "Gruppér elementer" msgid "Ungroup Items" msgstr "Afgruppér elementer" @@ -11855,7 +11042,7 @@ msgid "Underline" msgstr "Understregning" msgid "Strikethrough" -msgstr "Gennemstreget" +msgstr "Gennemstreg" msgid "Increase Font Size" msgstr "Forøg skriftstørrelse" @@ -11864,7 +11051,7 @@ msgid "Decrease Font Size" msgstr "Formindsk skriftstørrelse" msgid "Font Face" -msgstr "Skriftsnit" +msgstr "Skrifttype-familie" msgid "Background Color" msgstr "Baggrundsfarve" @@ -11885,13 +11072,13 @@ msgid "<b>_Bold</b>" msgstr "<b>_Fed</b>" msgid "<i>_Italic</i>" -msgstr "<i>_Kursivt</i>" +msgstr "<i>_Kursiv</i>" msgid "<u>_Underline</u>" -msgstr "<u>_Understregning</u>" +msgstr "<u>_Understreg</u>" msgid "<span strikethrough='true'>Strikethrough</span>" -msgstr "<span strikethrough='true'>Gennemstreget</span>" +msgstr "<span strikethrough='true'>Gennemstreg</span>" msgid "<span size='larger'>_Larger</span>" msgstr "<span size='larger'>_Større</span>" @@ -11906,7 +11093,7 @@ msgstr "<span size='smaller'>_Mindre</span>" #. * need to update them when formatting changes. The above items don't need #. * no updating nor nothin' msgid "_Font face" -msgstr "_Skriftsnit" +msgstr "_Skrifttype-familie" msgid "Foreground _color" msgstr "_Forgrundsfarve" @@ -11918,42 +11105,31 @@ msgid "_Image" msgstr "Bi_llede" msgid "_Link" -msgstr "_Link" +msgstr "_Henvisning" msgid "_Horizontal rule" -msgstr "_Horisontal regel" +msgstr "_Vandret regel" msgid "_Smile!" msgstr "S_mil!" msgid "Log Deletion Failed" -msgstr "Sletning af log mislykkedes" +msgstr "Sletning af log fejlede" msgid "Check permissions and try again." msgstr "Kontrollér rettigheder og prøv igen." #, c-format -msgid "" -"Are you sure you want to permanently delete the log of the conversation with " -"%s which started at %s?" -msgstr "" -"Er du sikker på at du permanent vil slette loggen over samtaler med %s som " -"startede %s?" +msgid "Are you sure you want to permanently delete the log of the conversation with %s which started at %s?" +msgstr "Er du sikker på at du permanent vil slette loggen over samtaler med %s som startede %s?" #, c-format -msgid "" -"Are you sure you want to permanently delete the log of the conversation in %" -"s which started at %s?" -msgstr "" -"Er du sikker på at du permanent vil slette loggen over samtalen i %s som er " -"startet %s?" +msgid "Are you sure you want to permanently delete the log of the conversation in %s which started at %s?" +msgstr "Er du sikker på at du permanent vil slette loggen over samtalen i %s som er startet %s?" #, c-format -msgid "" -"Are you sure you want to permanently delete the system log which started at %" -"s?" -msgstr "" -"Er du sikker på at du permanent vil slette systemloggen som er startet %s?" +msgid "Are you sure you want to permanently delete the system log which started at %s?" +msgstr "Er du sikker på at du permanent vil slette systemloggen som er startet ved %s?" msgid "Delete Log?" msgstr "Slet log?" @@ -11996,15 +11172,15 @@ msgstr "" "%s %s\n" "Brug: %s [TILVALG]...\n" "\n" -" -c, --config=MAPPE brug MAPPE for opsætningsfiler\n" +" -c, --config=DIR brug DIR for opsætningsfiler\n" " -d, --debug udskriv fejlsøgningsbeskeder til stdout\n" " -h, --help vis denne hjælp og afslut\n" -" -m, --multiple tillad flere instanser\n" +" -m, --multiple tillad flere instanser\n" " -n, --nologin log ikke ind automatisk\n" " -l, --login[=NAVN] aktivér angivede konti (valgfrit argument NAVN\n" " angiver konti der skal benyttes, adskilt af kommaer.\n" -" Uden dette vil den første konto blive aktiveret.\n" -" --display=SKÆRM X-skærm der skal benyttes\n" +" Uden dette vil kun den første konto blive aktiveret.\n" +" --display=SKÆRM X-skærm der skal benyttes\n" " -v, --version vis nuværende version og afslut\n" #, c-format @@ -12028,12 +11204,12 @@ msgstr "" " -c, --config=MAPPE brug MAPPE for opsætningsfiler\n" " -d, --debug udskriv fejlsøgningsbeskeder til stdout\n" " -h, --help vis denne hjælp og afslut\n" -" -m, --multiple tillad flere instanser\n" +" -m, --multiple tillad flere instanser\n" " -n, --nologin log ikke ind automatisk\n" " -l, --login[=NAVN] aktivér angivede konti (valgfrit argument NAVN\n" " angiver konti der skal benyttes, adskilt af kommaer.\n" -" Uden dette vil den første konto blive aktiveret.\n" -" --display=SKÆRM X-skærm der skal benyttes\n" +" Uden dette vil kun den første konto blive aktiveret.\n" +" --display=SKÆRM X-skærm der skal benyttes\n" " -v, --version vis nuværende version og afslut\n" #, c-format @@ -12087,8 +11263,8 @@ msgstr[1] "%s har %d nye beskeder." #, c-format msgid "<b>%d new email.</b>" msgid_plural "<b>%d new emails.</b>" -msgstr[0] "<b>%d ny breve.</b>" -msgstr[1] "<b>%d nye breve.</b>" +msgstr[0] "<b>%d ny e-breve.</b>" +msgstr[1] "<b>%d nye e-breve.</b>" #, c-format msgid "The browser command \"%s\" is invalid." @@ -12101,11 +11277,8 @@ msgstr "Kunne ikke åbne URL" msgid "Error launching \"%s\": %s" msgstr "Fejl ved kørsel af \"%s\": %s" -msgid "" -"The 'Manual' browser command has been chosen, but no command has been set." -msgstr "" -"\"Manuel\" browser-kommandoen er blevet valgt, men ingen kommando er blevet " -"sat." +msgid "The 'Manual' browser command has been chosen, but no command has been set." +msgstr "\"Manuel\" browser-kommandoen er blevet valgt, men ingen kommando er blevet angivet." msgid "The following plugins will be unloaded." msgstr "De følgende moduler kunne ikke udlæses." @@ -12117,14 +11290,10 @@ msgid "Unload Plugins" msgstr "Udlæs udvidelsesmoduler" msgid "Could not unload plugin" -msgstr "Kunne ikke deaktivere udvidelsesmodul" +msgstr "Kunne ikke udlæse udvidelsesmodul" -msgid "" -"The plugin could not be unloaded now, but will be disabled at the next " -"startup." -msgstr "" -"Udvidelsesmodulet kunne ikke blive deaktiveret nu, men vil blive deaktiveret " -"ved den næste opstart." +msgid "The plugin could not be unloaded now, but will be disabled at the next startup." +msgstr "Udvidelsesmodulet kunne ikke blive udlæst nu, men vil blive slået fra ved den næste opstart." #, c-format msgid "" @@ -12132,16 +11301,16 @@ msgid "" "Check the plugin website for an update.</span>" msgstr "" "<span foreground=\"rød\" weight=\"bold\">Fejl: %s\n" -"Kontrollér udvidelsesmodul-websiden for en opdatering.</span>" +"Kontrollér udvidelsesmodul-netstedet for en opdatering.</span>" msgid "Author" -msgstr "Udvikler" +msgstr "Forfatter" msgid "<b>Written by:</b>" msgstr "<b>Skrevet af:</b>" msgid "<b>Web site:</b>" -msgstr "<b>Websted:</b>" +msgstr "<b>Netsted:</b>" msgid "<b>Filename:</b>" msgstr "<b>Filnavn:</b>" @@ -12223,7 +11392,7 @@ msgid "_Recurring" msgstr "_Gentages" msgid "Pounce Target" -msgstr "Overvågningsmål" +msgstr "Overvåg mål" msgid "Smiley theme failed to unpack." msgstr "Smiley-tema kunne ikke udpakkes." @@ -12231,12 +11400,8 @@ msgstr "Smiley-tema kunne ikke udpakkes." msgid "Install Theme" msgstr "Installér tema" -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." -msgstr "" -"Vælg et smiley-tema som du gerne vil bruge fra listen forneden. Nye temaer " -"kan installeres ved at træk-og-slippe dem ind i tema listen." +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." +msgstr "Vælg et smiley-tema som du gerne vil bruge fra listen forneden. Nye temaer kan installeres ved at træk-og-slippe dem ind i tema listen." msgid "Icon" msgstr "Ikon" @@ -12245,7 +11410,7 @@ msgid "Keyboard Shortcuts" msgstr "Tastaturgenveje" msgid "Cl_ose conversations with the Escape key" -msgstr "_Luk samtaler med Escape-tasten" +msgstr "_Afslut samtaler med Escape-tasten" msgid "System Tray Icon" msgstr "Statusområde ikon" @@ -12270,7 +11435,7 @@ msgid "Tabs" msgstr "Faner" msgid "Show IMs and chats in _tabbed windows" -msgstr "Vis beskeder og chats i _fanebladsvinduer" +msgstr "Vis beskeder og samtaler i _fanebladsvinduer" msgid "Show close b_utton on tabs" msgstr "Vis _luk knapper på faneblade" @@ -12303,7 +11468,7 @@ msgid "Show _formatting on incoming messages" msgstr "Vis _formatteringslinje på nye beskeder" msgid "Close IMs immediately when the tab is closed" -msgstr "Luk kvikbeskeder straks når fanebladet lukkes" +msgstr "Afslut beskeder straks når fanebladet lukkes" msgid "Show _detailed information" msgstr "Vis _detaljeret information" @@ -12344,18 +11509,14 @@ msgstr "Samtale_skrifttype:" msgid "Default Formatting" msgstr "Standard formattering" -msgid "" -"This is how your outgoing message text will appear when you use protocols " -"that support formatting." -msgstr "" -"Sådan vil din udgående besked se ud når du bruger protokoller, der " -"understøtter formattering." +msgid "This is how your outgoing message text will appear when you use protocols that support formatting." +msgstr "Sådan vil din udgående besked se ud når du bruger protokoller, der understøtter formattering." msgid "Cannot start proxy configuration program." msgstr "Kan ikke starte proxy-konfigurationsprogram." msgid "Cannot start browser configuration program." -msgstr "Kan ikke starte konfigurationsprogram for browser." +msgstr "Kan ikke starte konfigurationsprogram til browser." msgid "ST_UN server:" msgstr "ST_UN server:" @@ -12397,7 +11558,7 @@ msgid "" "Proxy & Browser preferences are configured\n" "in GNOME Preferences" msgstr "" -"Proxy & Browser indstillinger konfigureres\n" +"Proxy- og Browserindstillinger konfigureres\n" "i GNOME-indstillinger" msgid "Configure _Proxy" @@ -12410,11 +11571,11 @@ msgid "Proxy Server" msgstr "Server" msgid "No proxy" -msgstr "Ingen mellemvært" +msgstr "Ingen proxy" #. This is a global option that affects SOCKS4 usage even with account-specific proxy settings msgid "Use remote DNS with SOCKS4 proxies" -msgstr "Benyt fjern-DNS med SOCKS4-mellemværter" +msgstr "Benyt fjern-DNS med SOCKS4-proxyer" msgid "_User:" msgstr "_Bruger:" @@ -12435,7 +11596,7 @@ msgid "Konqueror" msgstr "Konqueror" msgid "Desktop Default" -msgstr "Skrivebordsstandard" +msgstr "Standardskrivebord" msgid "GNOME Default" msgstr "GNOME standard" @@ -12462,7 +11623,7 @@ msgid "_Browser:" msgstr "_Browser:" msgid "_Open link in:" -msgstr "_Åbn link i:" +msgstr "_Åbn henvisning i:" msgid "Browser default" msgstr "Browser standard" @@ -12544,7 +11705,7 @@ msgid "Sounds when conversation has _focus" msgstr "Lyde når samtale har _fokus" msgid "_Enable sounds:" -msgstr "_Aktivér lyde:" +msgstr "_Slå lyde til:" msgid "V_olume:" msgstr "L_ydstyrke:" @@ -12553,7 +11714,7 @@ msgid "Play" msgstr "Afspil" msgid "_Browse..." -msgstr "_Gennemse..." +msgstr "_Browse..." msgid "_Reset" msgstr "_Nulstil" @@ -12575,13 +11736,13 @@ msgid "Auto-away" msgstr "Automatisk fraværende" msgid "Change status when _idle" -msgstr "Skift status ved _inaktivitet" +msgstr "Ændr status ved _inaktivitet" msgid "_Minutes before becoming idle:" msgstr "_Minutter før du bliver inaktiv:" msgid "Change _status to:" -msgstr "Skift _status til:" +msgstr "Ændr _status til:" #. Signon status stuff msgid "Status at Startup" @@ -12591,7 +11752,7 @@ msgid "Use status from last _exit at startup" msgstr "Brug status fra sidste _afslutning ved opstart" msgid "Status to a_pply at startup:" -msgstr "Status som skal _anvendes ved opstart:" +msgstr "Status som skal _bruges ved opstart:" msgid "Interface" msgstr "Grænseflade" @@ -12631,7 +11792,7 @@ msgstr "Sæt privatlivsindstillinger for:" #. Remove All button msgid "Remove Al_l" -msgstr "Slet _alt" +msgstr "Slet _alle" msgid "Permit User" msgstr "Tillad bruger" @@ -12694,7 +11855,7 @@ msgstr "_Hent liste" #. add button msgid "_Add Chat" -msgstr "_Tilføj chat" +msgstr "_Tilføj samtale" msgid "Are you sure you want to delete the selected saved statuses?" msgstr "Er du sikker på at du vil slette de valgte gemte statusser?" @@ -12731,23 +11892,19 @@ msgid "Custom Smiley" msgstr "Tilpasset smiley" msgid "More Data needed" -msgstr "Flere data kræves" +msgstr "Der er behov for flere data" msgid "Please provide a shortcut to associate with the smiley." -msgstr "Angiv en genvej der skal associeres med smileyen." +msgstr "Angiv en genvej der skal tilknyttes smileyen." msgid "Duplicate Shortcut" msgstr "Dublet genvej" -msgid "" -"A custom smiley for the selected shortcut already exists. Please specify a " -"different shortcut." -msgstr "" -"En tilpasset smiley for den valgte genvej findes allerede. Angiv en anden " -"genvej." +msgid "A custom smiley for the selected shortcut already exists. Please specify a different shortcut." +msgstr "En tilpasset smiley for den valgte genvej findes allerede. Angiv en anden genvej." msgid "Please select an image for the smiley." -msgstr "Vælg et billede til smiley'en." +msgstr "Vælg et billede til smileyen." msgid "Edit Smiley" msgstr "Redigér smiley" @@ -12766,13 +11923,13 @@ msgid "Smiley" msgstr "Smiley" msgid "Custom Smiley Manager" -msgstr "Brugertilpasset Smiley-håndtering" +msgstr "Brugertilpasset håndtering af smiley" msgid "Click to change your buddyicon for this account." -msgstr "Klik for at ændre dit venneikon for denne konto." +msgstr "Klik for at ændre dit venneikon til denne konto." msgid "Click to change your buddyicon for all accounts." -msgstr "Klik for at ændre dit venneikon for alle konti." +msgstr "Klik for at ændre dit venneikon til alle konti." msgid "Waiting for network connection" msgstr "Venter på netværksforbindelse" @@ -12781,7 +11938,7 @@ msgid "New status..." msgstr "Ny status..." msgid "Saved statuses..." -msgstr "Gemte statuser..." +msgstr "Gemte statusser..." msgid "Status Selector" msgstr "Statusvælger" @@ -12801,20 +11958,14 @@ msgid "Cannot send folder %s." msgstr "Kan ikke sende mappe %s." #, c-format -msgid "" -"%s cannot transfer a folder. You will need to send the files within " -"individually." -msgstr "%s kan ikke overføre en mappe. Du skal sende filerne individuelt." +msgid "%s cannot transfer a folder. You will need to send the files within individually." +msgstr "%s kan ikke overføre en mappe. Du skal sende filerne i denne individuelt." msgid "You have dragged an image" msgstr "Du har trukket et billede" -msgid "" -"You can send this image as a file transfer, embed it into this message, or " -"use it as the buddy icon for this user." -msgstr "" -"Du kan sende dette billede som en filoverførsel, vedlægge det til en besked, " -"eller bruge det som venneikonet for denne bruger." +msgid "You can send this image as a file transfer, embed it into this message, or use it as the buddy icon for this user." +msgstr "Du kan sende dette billede som en filoverførsel, vedlægge det til en besked, eller bruge det som venneikonet til denne bruger." msgid "Set as buddy icon" msgstr "Sæt som venneikon" @@ -12828,19 +11979,11 @@ msgstr "Indsæt i besked" msgid "Would you like to set it as the buddy icon for this user?" msgstr "Vil du sætte det som venneikon for denne bruger?" -msgid "" -"You can send this image as a file transfer, or use it as the buddy icon for " -"this user." -msgstr "" -"Du kan sende dette billede som en filoverførsel, eller bruge det som " -"venneikonet for denne bruger." +msgid "You can send this image as a file transfer, or use it as the buddy icon for this user." +msgstr "Du kan sende dette billede som en filoverførsel, eller bruge det som venneikonet for denne bruger." -msgid "" -"You can insert this image into this message, or use it as the buddy icon for " -"this user" -msgstr "" -"Du kan indsætte dette billede i beskeden, eller bruge det som venneikon for " -"denne bruger" +msgid "You can insert this image into this message, or use it as the buddy icon for this user" +msgstr "Du kan indsætte dette billede i beskeden, eller bruge det som venneikon for denne bruger" #. I don't know if we really want to do anything here. Most of the desktop item types are crap like #. * "MIME Type" (I have no clue how that would be a desktop item) and "Comment"... nothing we can really @@ -12850,12 +11993,8 @@ msgstr "" msgid "Cannot send launcher" msgstr "Kan ikke sende starter" -msgid "" -"You dragged a desktop launcher. Most likely you wanted to send whatever this " -"launcher points to instead of this launcher itself." -msgstr "" -"Du har trukket en skrivebords starter. Højst sandsynligt vil du sende hvad " -"starteren peger på og ikke starten selv." +msgid "You dragged a desktop launcher. Most likely you wanted to send whatever this launcher points to instead of this launcher itself." +msgstr "Du har trukket en skrivebords starter. Højst sandsynligt vil du sende hvad starteren peger på og ikke starten selv." #, c-format msgid "" @@ -12882,11 +12021,8 @@ msgid "Failed to open file '%s': %s" msgstr "Kunne ikke åbne fil \"%s\": %s" #, c-format -msgid "" -"Failed to load image '%s': reason not known, probably a corrupt image file" -msgstr "" -"Kunne ikke indlæse billeder \"%s\": årsag ikke kendt, måske en ødelagt " -"billedefil" +msgid "Failed to load image '%s': reason not known, probably a corrupt image file" +msgstr "Kunne ikke indlæse billeder \"%s\": årsag ikke kendt, måske en ødelagt billedefil" msgid "Save File" msgstr "Gem fil" @@ -12907,7 +12043,7 @@ msgid "_Invite" msgstr "_Invitér" msgid "_Modify..." -msgstr "_Ændre..." +msgstr "_Ændr..." msgid "_Add..." msgstr "_Tilføj..." @@ -12922,13 +12058,13 @@ msgid "Pidgin Tooltip" msgstr "Pidgin værktøjstip" msgid "Pidgin smileys" -msgstr "Pidgin smiley'er" +msgstr "Pidgin smileyer" msgid "Penguin Pimps" msgstr "Penguin Pimps" msgid "Selecting this disables graphical emoticons." -msgstr "Deaktiverer grafiske humørikoner." +msgstr "Slår grafiske humørikoner fra." msgid "none" msgstr "intet" @@ -12937,7 +12073,7 @@ msgid "Small" msgstr "Lille" msgid "Smaller versions of the default smilies" -msgstr "Mindre udgaver af standard smiley'erne" +msgstr "Mindre udgaver af standardsmileyerne" msgid "Response Probability:" msgstr "Svar sandsynlighed:" @@ -12992,17 +12128,13 @@ msgid "Buddy is mobile" msgstr "Ven er mobil" msgid "Buddy is offline" -msgstr "Ven er offline" +msgstr "Ven er afkoblet" msgid "Point values to use when..." msgstr "Værdier der skal bruges når..." -msgid "" -"The buddy with the <i>largest score</i> is the buddy who will have priority " -"in the contact.\n" -msgstr "" -"Vennen med den <i>højeste score</i> er den ven som vil have prioritet i " -"kontakten.\n" +msgid "The buddy with the <i>largest score</i> is the buddy who will have priority in the contact.\n" +msgstr "Vennen med den <i>højeste score</i> er den ven som vil have prioritet i kontakten.\n" msgid "Use last buddy when scores are equal" msgstr "Brug den sidste ven når score er lige" @@ -13022,19 +12154,12 @@ msgstr "Kontaktsprioritet" #. *< name #. *< version #. *< summary -msgid "" -"Allows for controlling the values associated with different buddy states." -msgstr "" -"Giver mulighed for at kontrollere værdierne associeret med venners " -"forskellige status." +msgid "Allows for controlling the values associated with different buddy states." +msgstr "Giver mulighed for at kontrollere værdierne tilknyttet venners forskellige status." #. *< description -msgid "" -"Allows for changing the point values of idle/away/offline states for buddies " -"in contact priority computations." -msgstr "" -"Giver mulighed for at ændre værdierne af inaktiv/fraværende/offline status " -"for venner i kontaktprioritets beregninger." +msgid "Allows for changing the point values of idle/away/offline states for buddies in contact priority computations." +msgstr "Giver mulighed for at ændre værdierne af inaktiv/fraværende/afkoblet status for venner i kontaktprioritets beregninger." msgid "Conversation Colors" msgstr "Samtalefarver" @@ -13065,10 +12190,10 @@ msgid "Ignore incoming format" msgstr "Ignorér indkomne format" msgid "Apply in Chats" -msgstr "Anvend i chat" +msgstr "Anvend i samtaler" msgid "Apply in IMs" -msgstr "Tilføj i kvik-beskeder" +msgstr "Tilføj i beskeder" msgid "By conversation count" msgstr "Efter antallet af samtaler" @@ -13077,18 +12202,14 @@ msgid "Conversation Placement" msgstr "Samtale placering" #. Translators: "New conversations" should match the text in the preferences dialog and "By conversation count" should be the same text used above -msgid "" -"Note: The preference for \"New conversations\" must be set to \"By " -"conversation count\"." -msgstr "" -"Bemærk: Indstillingerne for \"Nye samtaler\" skal sættes til \"Efter samtale " -"antal\"." +msgid "Note: The preference for \"New conversations\" must be set to \"By conversation count\"." +msgstr "Bemærk: Indstillingerne for \"Nye samtaler\" skal sættes til \"Efter samtale antal\"." msgid "Number of conversations per window" msgstr "Antal af samtaler pr. vindue" msgid "Separate IM and Chat windows when placing by number" -msgstr "Seperate besked- og chatvinduer når der placeres med tal" +msgstr "Seperate besked- og samtalevinduer når der placeres efter tal" #. *< type #. *< ui_requirement @@ -13102,16 +12223,12 @@ msgstr "EkstraPlacering" #. *< name #. *< version msgid "Extra conversation placement options." -msgstr "Ekstra placeringsmuligheder for samtaler." +msgstr "Ekstra placeringsindstillinger for samtaler." #. *< summary #. * description -msgid "" -"Restrict the number of conversations per windows, optionally separating IMs " -"and Chats" -msgstr "" -"Begræns antallet af samtaler pr. vindue, med mulighed for seperate samtale- " -"og chatvinduer" +msgid "Restrict the number of conversations per windows, optionally separating IMs and Chats" +msgstr "Begræns antallet af samtaler pr. vindue, med mulighed for seperate samtale- og samtalevinduer" #. Configuration frame msgid "Mouse Gestures Configuration" @@ -13144,15 +12261,13 @@ msgstr "Giver understøttelse for musebevægelser" #. * description msgid "" -"Allows support for mouse gestures in conversation windows. Drag the middle " -"mouse button to perform certain actions:\n" +"Allows support for mouse gestures in conversation windows. Drag the middle mouse button to perform certain actions:\n" " • Drag down and then to the right to close a conversation.\n" " • Drag up and then to the left to switch to the previous conversation.\n" " • Drag up and then to the right to switch to the next conversation." msgstr "" -"Giver understøttelse for musebevægelser i samtalevinduer. Træk i den " -"midterste knap for at udføre forskellige handlinger:\n" -" • Træk ned og derefter til højre, for at lukke en samtale.\n" +"Giver understøttelse for musebevægelser i samtalevinduer. Træk i den midterste knap for at udføre forskellige handlinger:\n" +" • Træk ned og derefter til højre, for at afslutte en samtale.\n" " • Træk op og derefter til venstre, for at skifte til den forrige samtale.\n" " • Træk op og derefter til højre, for at skifte til den næste samtale." @@ -13175,12 +12290,8 @@ msgid "Select Buddy" msgstr "Vælg ven" #. Add the label. -msgid "" -"Select a person from your address book to add this buddy to, or create a new " -"person." -msgstr "" -"Vælg en person fra din adressebog at tilføje denne ven til, eller tilføj en " -"ny person." +msgid "Select a person from your address book to add this buddy to, or create a new person." +msgstr "Vælg en person fra din adressebog at tilføje denne ven til, eller tilføj en ny person." #. Add the expander msgid "User _details" @@ -13188,7 +12299,7 @@ msgstr "Bruger_detaljer" #. "Associate Buddy" button msgid "_Associate Buddy" -msgstr "_Associér ven" +msgstr "_Tilknyt ven" msgid "Unable to send email" msgstr "Kunne ikke sende e-post" @@ -13197,13 +12308,13 @@ msgid "The evolution executable was not found in the PATH." msgstr "Den ekskvebar Evolution fil blev ikke fundet i PATH." msgid "An email address was not found for this buddy." -msgstr "En e-post-adresse blev ikke fundet for denne ven." +msgstr "En e-postadresse blev ikke fundet for denne ven." msgid "Add to Address Book" msgstr "Tilføj til adressebog" msgid "Send Email" -msgstr "Send email" +msgstr "Send e-post" #. Configuration frame msgid "Evolution Integration Configuration" @@ -13249,7 +12360,7 @@ msgid "Last name:" msgstr "Efternavn:" msgid "Email:" -msgstr "Email:" +msgstr "E-post:" #. *< type #. *< ui_requirement @@ -13298,7 +12409,7 @@ msgid "Mail Checker" msgstr "Post-overvåger" msgid "Checks for new local mail." -msgstr "Tjekker for lokal post." +msgstr "Kontrollerer for lokal post." msgid "Adds a small box to the buddy list that shows if you have new mail." msgstr "Tilføjer en lille boks til vennelisten der viser om du har ny post." @@ -13321,12 +12432,8 @@ msgstr "Besked-v_induer" msgid "C_hat windows" msgstr "C_hat-vinduer" -msgid "" -"A music messaging session has been requested. Please click the MM icon to " -"accept." -msgstr "" -"En musik-beskeds session er blevet anmodet. Klik på MM-ikonet for at " -"acceptere." +msgid "A music messaging session has been requested. Please click the MM icon to accept." +msgstr "En musik-beskeds session er blevet anmodet. Klik på MM-ikonet for at acceptere." msgid "Music messaging session confirmed." msgstr "Musik beskeds-session bekræftet." @@ -13362,15 +12469,11 @@ msgstr "_Anvend" #. *< name #. *< version msgid "Music Messaging Plugin for collaborative composition." -msgstr "Musik besked modul for samarbejdskomposition." +msgstr "Musik besked udvidelsesmodul for samarbejdskomposition." #. * summary -msgid "" -"The Music Messaging Plugin allows a number of users to simultaneously work " -"on a piece of music by editting a common score in real-time." -msgstr "" -"Musik beskeds modulet tillader flere bruger af gangen, til samtidig at " -"arbejde på et stykke musik ved at redigere en fælles score i real-time." +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." +msgstr "Musik beskeds udvidelsesmodulet tillader flere bruger af gangen, til samtidig at arbejde på et stykke musik ved at redigere en fælles score i real-time." #. ---------- "Notify For" ---------- msgid "Notify For" @@ -13450,8 +12553,7 @@ msgstr "Påmindelse af beskeder" #. * summary #. * description msgid "Provides a variety of ways of notifying you of unread messages." -msgstr "" -"Giver mulighed for at påminde dig om ulæste beskeder på forskellige måder." +msgstr "Giver mulighed for at påminde dig om ulæste beskeder på forskellige måder." #. *< type #. *< ui_requirement @@ -13460,13 +12562,13 @@ msgstr "" #. *< priority #. *< id msgid "Pidgin Demonstration Plugin" -msgstr "Pidgin demonstrations-modul" +msgstr "Pidgin demonstrationsudvidelsesmodul" #. *< name #. *< version #. * summary msgid "An example plugin that does stuff - see the description." -msgstr "Et eksempels-modul der gør forskellige ting - se beskrivelsen." +msgstr "Et eksempel-udvidelsesmodul der gør forskellige ting - se beskrivelsen." #. * description msgid "" @@ -13487,13 +12589,13 @@ msgid "Secondary Cursor Color" msgstr "Sekundær markør farve" msgid "Hyperlink Color" -msgstr "Link farve" +msgstr "Farve på henvisning" msgid "Visited Hyperlink Color" -msgstr "Farve for besøgt hyperlink" +msgstr "Farve på besøgt henvisning" msgid "Highlighted Message Name Color" -msgstr "Farvenavn for fremhævede beskeder" +msgstr "Farve som bruges til fremhævede beskednavne" msgid "GtkTreeView Horizontal Separation" msgstr "GtkTreeView horisontal separering" @@ -13564,25 +12666,19 @@ msgid "Re-read gtkrc files" msgstr "Genindlæs gtkrc filer" msgid "Pidgin GTK+ Theme Control" -msgstr "Pidgin GTK+ tema kontrol" +msgstr "Temakontrol til Pidgin GTK+" msgid "Provides access to commonly used gtkrc settings." -msgstr "Giver adgang til fælles brugte gtkrc-indstillinger." +msgstr "Giver adgang til normalt brugte gtkrc-indstillinger." msgid "Raw" msgstr "Rå" msgid "Lets you send raw input to text-based protocols." -msgstr "" -"Giver dig mulighed for at sende rå inddata til text-baserede protokoller." +msgstr "Giver dig mulighed for at sende rå inddata til text-baserede protokoller." -msgid "" -"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit " -"'Enter' in the entry box to send. Watch the debug window." -msgstr "" -"Giver dig mulighed for at sende rå inddata til tekstbaserede protokoller " -"(XMPP, MSN, IRC, TOC). Tryk \"Enter\" i indtastningsfeltet for at sende. " -"Hold øje med fejlsøgningsvinduet." +msgid "Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit 'Enter' in the entry box to send. Watch the debug window." +msgstr "Giver dig mulighed for at sende rå inddata til tekstbaserede protokoller (XMPP, MSN, IRC, TOC). Tryk \"Enter\" i indtastningsfeltet for at sende. Hold øje med fejlsøgningsvinduet." #, c-format msgid "You can upgrade to %s %s today." @@ -13613,12 +12709,8 @@ msgid "Checks periodically for new releases." msgstr "Tjekker periodisk efter nye udgivelser." #. * description -msgid "" -"Checks periodically for new releases and notifies the user with the " -"ChangeLog." -msgstr "" -"Tjeker periodisk efter nye udgivelser og viser brugeren hvilke ændringer der " -"er i den nye udgivelse." +msgid "Checks periodically for new releases and notifies the user with the ChangeLog." +msgstr "Tjeker periodisk efter nye udgivelser og viser brugeren hvilke ændringer der er i den nye udgivelse." #. *< major version #. *< minor version @@ -13629,23 +12721,19 @@ msgstr "" #. *< priority #. *< id msgid "Send Button" -msgstr "Send knap" +msgstr "Sendknap" #. *< name #. *< version msgid "Conversation Window Send Button." -msgstr "Samtalevindue send knap." +msgstr "Samtalevindue sendknap." #. *< summary -msgid "" -"Adds a Send button to the entry area of the conversation window. Intended " -"for when no physical keyboard is present." -msgstr "" -"Tilføjer en send-knappe til indtastningsområdet i samtalevinduet. Beregnet " -"til når der ikke er noget fysisk tastatur tilstede." +msgid "Adds a Send button to the entry area of the conversation window. Intended for when no physical keyboard is present." +msgstr "Tilføjer en sendknap til indtastningsområdet i samtalevinduet. Beregnet til når der ikke er noget fysisk tastatur tilstede." msgid "Duplicate Correction" -msgstr "Dublet rettelse" +msgstr "Duplikér rettelse" msgid "The specified word already exists in the correction list." msgstr "Det angivne ord findes allerede i rettelseslisten." @@ -13682,7 +12770,7 @@ msgid "Only replace _whole words" msgstr "Erstat kun _hele ord" msgid "General Text Replacement Options" -msgstr "Generelle indstillinger for teksterstatning" +msgstr "Generelle indstillinger til teksterstatning" msgid "Enable replacement of last word on send" msgstr "Slå erstatning af sidste ord ved send på" @@ -13748,7 +12836,7 @@ msgid "For delayed messages" msgstr "For forsinkede beskeder" msgid "For delayed messages and in chats" -msgstr "For forsinkede beskeder og i chats" +msgstr "For forsinkede beskeder og i samtaler" msgid "_Message Logs:" msgstr "_Besked logs:" @@ -13766,15 +12854,11 @@ msgstr "Tidsstempel format for beskeder" #. *< version #. * summary msgid "Customizes the message timestamp formats." -msgstr "Definerer formatet på tidsstempler i beskeder." +msgstr "Tilpasser formatet på tidsstempler i beskeder." #. * description -msgid "" -"This plugin allows the user to customize conversation and logging message " -"timestamp formats." -msgstr "" -"Dette modul tillader brugeren selv at definere formatet på tidsstempler i " -"samtaler og logs." +msgid "This plugin allows the user to customize conversation and logging message timestamp formats." +msgstr "Dette modul tillader brugeren selv at tilpasse formatet på tidsstempler i samtaler og logs." msgid "Opacity:" msgstr "Ugennemsigtighed:" @@ -13784,7 +12868,7 @@ msgid "IM Conversation Windows" msgstr "Beskedsamtalevinduer" msgid "_IM window transparency" -msgstr "_Beskedvinduer gennemsigtighed" +msgstr "_Gennemsigtighed af beskedvindue" msgid "_Show slider bar in IM window" msgstr "_Vis rullebjælke i beskedvindue" @@ -13800,7 +12884,7 @@ msgid "Buddy List Window" msgstr "Venneliste vindue" msgid "_Buddy List window transparency" -msgstr "Venne_liste vindue gennemsigtighed" +msgstr "Gennemsigtighed af venne_liste vindue" msgid "Remove Buddy List window transparency on focus" msgstr "Fjern venneliste vindue gennemsigtighed ved fokus" @@ -13822,13 +12906,11 @@ msgstr "Variabel gennemsigtighed for venneliste og samtaler." #. * description msgid "" -"This plugin enables variable alpha transparency on conversation windows and " -"the buddy list.\n" +"This plugin enables variable alpha transparency on conversation windows and the buddy list.\n" "\n" "* Note: This plugin requires Win2000 or greater." msgstr "" -"Dette modul giver dig mulighed variabel alpha gennemsigtighed i samtale-" -"vinduer og vennelisten.\n" +"Dette modul giver dig mulighed variabel alpha gennemsigtighed i samtale-vinduer og vennelisten.\n" "\n" "* Bemærk: Dette modul kræver Win2000 eller bedre." @@ -13855,15 +12937,13 @@ msgid "Only when docked" msgstr "Kun når docked" msgid "Windows Pidgin Options" -msgstr "Indstillinger for Windows Pidgin" +msgstr "Indstillinger for Pidgin til Windows" msgid "Options specific to Pidgin for Windows." -msgstr "Specifikke indstillinger for Windows Pidgin." +msgstr "Specifikke indstillinger for Pidgin til Windows." -msgid "" -"Provides options specific to Pidgin for Windows , such as buddy list docking." -msgstr "" -"Giver muligheder specifikt til Windows Pidgin, såsom venneliste dokning." +msgid "Provides options specific to Pidgin for Windows , such as buddy list docking." +msgstr "Indstillinger specifikt for Pidgin for Windows, såsom venneliste dokning." msgid "<font color='#777777'>Logged out.</font>" msgstr "<font color='#777777'>Loggede ud.</font>" @@ -13900,13 +12980,10 @@ msgstr "Send og modtag rå XMPP-stanzas." #. * description msgid "This plugin is useful for debbuging XMPP servers or clients." -msgstr "" -"Dette udvidelsesmodul er nyttigt for fejlsøgning af XMPP-servere eller " -"klienter." +msgstr "Dette udvidelsesmodul er nyttigt for fejlsøgning af XMPP-servere eller klienter." #~ msgid "Unable to retrieve MSN Address Book" #~ msgstr "Ikke i stand til at hente MSN-adressebog" - #~ msgid "" #~ "You may be disconnected shortly. You may want to use TOC until this is " #~ "fixed. Check %s for updates." @@ -13941,19 +13018,14 @@ msgstr "" #, fuzzy #~ msgid "Failed to send IM." #~ msgstr "Kunne ikke hente navn: %s" - #~ msgid "User information for %s unavailable" #~ msgstr "Bruger oplysninger for %s er ikke tilgængelige" - #~ msgid "_Flash window when chat messages are received" -#~ msgstr "_Blink vindue når chat-beskeder modtages" - +#~ msgstr "_Blink vindue når samtalebeskeder modtages" #~ msgid "A group with the name already exists." #~ msgstr "En mappe med det navn eksisterer allerede." - #~ msgid "Primary Information" #~ msgstr "Primær-information" - #~ msgid "Blood Type" #~ msgstr "Blodtype" @@ -13972,13 +13044,10 @@ msgstr "" #~ msgstr "" #~ "Du prøver at opsætte et ansigt. Pidgin tillader, på nuværende tidspunkt, " #~ "kun standard ansigterne. Vælg venligst et billede fra " - #~ msgid "Invalid QQ Face" #~ msgstr "Ugyldigt QQ-ansigt" - #~ msgid "You rejected %d's request" #~ msgstr "Du afviste %d's anmodning" - #~ msgid "Reject request" #~ msgstr "Afvis anmodning" @@ -13993,20 +13062,17 @@ msgstr "" #, fuzzy #~ msgid "QQ Number Error" #~ msgstr "QQ-nummer" - #~ msgid "Group Description" #~ msgstr "Gruppebeskrivelse" - #~ msgid "Auth" #~ msgstr "Godkend" - #~ msgid "Approve" #~ msgstr "Godkend" #, fuzzy #~ msgid "Successed to join Qun %d, operated by admin %d" #~ msgstr "" -#~ "Din forspørgelse om at blive medlem af gruppen %d er blevet afslået af " +#~ "Din forspørgelse om at tilslutte gruppen %d er blevet afslået af " #~ "administrator %d" #, fuzzy @@ -14016,17 +13082,14 @@ msgstr "" #, fuzzy #~ msgid "[%d] added to Qun \"%d\"" #~ msgstr "Du [%d] er blevet tilføjet af gruppe \"%d\"" - #~ msgid "I am a member" #~ msgstr "Jeg er medlem" #, fuzzy #~ msgid "I am requesting" #~ msgstr "Ugyldig anmodning" - #~ msgid "I am the admin" #~ msgstr "Jeg er administratoren" - #~ msgid "Unknown status" #~ msgstr "Ukendt status" @@ -14044,7 +13107,7 @@ msgstr "" #, fuzzy #~ msgid "Do you want to approve the request?" -#~ msgstr "Vil du godkende denne forespørgelse?" +#~ msgstr "Vil du godkende denne forespørgsel?" #, fuzzy #~ msgid "Change Qun member" @@ -14053,13 +13116,10 @@ msgstr "" #, fuzzy #~ msgid "Change Qun information" #~ msgstr "Kanal oplysninger" - #~ msgid "System Message" #~ msgstr "Systembesked" - #~ msgid "<b>Last Login IP</b>: %s<br>\n" #~ msgstr "<b>Sidste logind IP</b>: %s<br>\n" - #~ msgid "<b>Last Login Time</b>: %s\n" #~ msgstr "<b>Sidste logind tid</b>: %s\n" @@ -14091,7 +13151,7 @@ msgstr "" #, fuzzy #~ msgid "Do you approve the requestion?" -#~ msgstr "Vil du godkende denne forespørgelse?" +#~ msgstr "Vil du godkende denne forespørgsel?" #, fuzzy #~ msgid "Do you add the buddy?" @@ -14124,13 +13184,12 @@ msgstr "" #, fuzzy #~ msgid "Network disconnected" #~ msgstr "%s afbrudt" - #~ msgid "developer" #~ msgstr "udvikler" #, fuzzy #~ msgid "XMPP developer" -#~ msgstr "udvikler" +#~ msgstr "XMPP-udvikler" #, fuzzy #~ msgid "Artists" @@ -14147,105 +13206,78 @@ msgstr "" #~ msgstr "" #~ "<b>Ændringer:</b>\n" #~ "%s<br><br>" - #~ msgid "Screen name:" #~ msgstr "Brugernavn:" #, fuzzy #~ msgid "Show offline buddies" #~ msgstr "Vis afkoblede venner" - #~ msgid "Sort by status" #~ msgstr "Sorter efter status" - #~ msgid "Sort alphabetically" #~ msgstr "Sorter alfabetisk" - #~ msgid "Sort by log size" #~ msgstr "Sorter efter logstørrelse" #, fuzzy #~ msgid "Pounce only when my status is not available" #~ msgstr "Over_våg kun når min status er ikke tilgængelig" - #~ msgid "Someone says your screen name in chat" -#~ msgstr "Nogle siger dit brugernavn i chat" - +#~ msgstr "Nogle siger dit brugernavn i samtale" #~ msgid "EOF while reading from resolver process" #~ msgstr "EOF ved læsning fra resolver-proces" #, fuzzy #~ msgid "There were errors unloading the plugin." #~ msgstr "Pidgin kunne ikke udlæse modulet." - #~ msgid "Error setting socket options" #~ msgstr "Fejl ved opsætning af socket indstillinger" - #~ msgid "Couldn't open file" #~ msgstr "Kan ikke åbne fil" - #~ msgid "" #~ "This server requires plaintext authentication over an unencrypted " #~ "connection. Allow this and continue authentication?" #~ msgstr "" -#~ "Denne server kræver at godkendelse sker ved ren tekst (uden kryptering). " +#~ "Denne server kræver at godkendelse sker i klartekst (uden kryptering). " #~ "Tillad dette og fortsæt godkendelse?" - #~ msgid "Error initializing session" #~ msgstr "Fejl ved initialisering af session" - #~ msgid "Invalid screen name" #~ msgstr "Ugyldigt skærmnavn" - #~ msgid "Unable to make SSL connection to server." #~ msgstr "Kunne ikke skabe SSL-forbindelse til server." - #~ msgid "Too evil (sender)" #~ msgstr "For ond (afsender)" - #~ msgid "Too evil (receiver)" #~ msgstr "For ond (modtager)" - #~ msgid "Screen name sent" #~ msgstr "Brugernavn sendt" - #~ msgid "Invalid screen name." #~ msgstr "Ugyldigt skærmnavn." - #~ msgid "Available Message" #~ msgstr "Tilgængelig besked" - #~ msgid "Screen name" #~ msgstr "Skærmnavn" - #~ msgid "Invalid chat name specified." -#~ msgstr "Ugyldigt chatnavn angivet." - +#~ msgstr "Ugyldigt samtalenavn angivet." #~ msgid "Away Message" #~ msgstr "Fraværs-besked" - #~ msgid "<i>(retrieving)</i>" #~ msgstr " <i>(modtager)</i>" - #~ msgid "Use recent buddies group" #~ msgstr "Brug seneste vennegruppe" - #~ msgid "Show how long you have been idle" #~ msgstr "Vis hvor lang tid du har været inaktiv" - #~ msgid "" #~ "Always use ICQ proxy server for file transfers\n" #~ "(slower, but does not reveal your IP address)" #~ msgstr "" #~ "Brug altid ICQ-mellemværtssever til filoverførelser\n" #~ "(langsommere, men afslører ikke din IP-adresse)" - #~ msgid "Your information has been updated" #~ msgstr "Din information er blevet opdateret" - #~ msgid "Input your reason:" #~ msgstr "Angiv din grund:" - #~ msgid "You have successfully removed a buddy" #~ msgstr "Du har fjernet en ven." @@ -14256,43 +13288,36 @@ msgstr "" #, fuzzy #~ msgid "You have added %d to buddy list" #~ msgstr "Du har tilføjet %d i vennelisten" - #~ msgid "Invalid QQid" #~ msgstr "Ugyldigt QQid" #, fuzzy #~ msgid "Please enter external group ID" #~ msgstr "Venligt indtast en ekstern gruppe-ID" - #~ msgid "Reason: %s" #~ msgstr "Grund: %s" #, fuzzy #~ msgid "Your request to join group %d has been approved by admin %d" #~ msgstr "" -#~ "Din forespørgelse om at blive medlem af gruppen %d er blevet godkendt af " +#~ "Din forespørgsel om at tilslutte gruppen %d er blevet godkendt af " #~ "administrator %d" - #~ msgid "This group has been added to your buddy list" #~ msgstr "Denne gruppe er blevet tilføjet til din venneliste" - #~ msgid "I am applying to join" -#~ msgstr "Jeg prøver at blive medlem" +#~ msgstr "Jeg prøver at tilslutte" #, fuzzy #~ msgid "You have successfully left the group" #~ msgstr "Du har forladt gruppen" - #~ msgid "QQ Group Auth" #~ msgstr "QQ gruppe autorisation" #, fuzzy #~ msgid "Your authorization request has been accepted by the QQ server" #~ msgstr "Din autorisations-operation er blevet accepteret af QQ-serveren" - #~ msgid "Code [0x%02X]: %s" #~ msgstr "Kode [0x%02X]: %s" - #~ msgid "Group Operation Error" #~ msgstr "Gruppe-operationsfejl" @@ -14303,7 +13328,6 @@ msgstr "" #, fuzzy #~ msgid "Error requesting login token" #~ msgstr "Fejl ved oprettelse af forbindelse" - #~ msgid "Unable to login, check debug log" #~ msgstr "Kunne ikke logge ind, kontrollér fejlsøgningslog" @@ -14314,29 +13338,22 @@ msgstr "" #, fuzzy #~ msgid "UDP Address" #~ msgstr "IP-adresse" - #~ msgid "Show Login Information" #~ msgstr "Vis logind information" - #~ msgid "Login failed, no reply" #~ msgstr "Logind slog fejl, intet svar" - #~ msgid "User %s rejected your request" -#~ msgstr "Bruger %s afslog din forespørgelse" +#~ msgstr "Bruger %s afslog din forespørgsel" #, fuzzy #~ msgid "User %s approved your request" -#~ msgstr "Bruger %s har godkendt din forespørgelse" - +#~ msgstr "Bruger %s har godkendt din forespørgsel" #~ msgid "Cannot find/access ~/.silc directory" #~ msgstr "Kan ikke finde eller tilgå ~/.silc mappe" - #~ msgid "%s changed status from %s to %s" #~ msgstr "%s ændrede status fra %s til %s" - #~ msgid "%s is now %s" #~ msgstr "%s er nu %s" - #~ msgid "%s is no longer %s" #~ msgstr "%s er ikke længere %s" @@ -14351,16 +13368,12 @@ msgstr "" #, fuzzy #~ msgid "Add Buddy _Pounce" #~ msgstr "Tilføj overvågning" - #~ msgid "Add a C_hat" -#~ msgstr "Tilføj en _chat" - +#~ msgstr "Tilføj en _samtale" #~ msgid "/Accounts/Add\\/Edit" #~ msgstr "/Konti/Tilføj\\/Redigér" - #~ msgid "<span color=\"red\">%s disconnected: %s</span>" #~ msgstr "<span color=\"red\">%s afbrudt: %s</span>" - #~ msgid "" #~ "Please enter the screen name of the person you would like to add to your " #~ "buddy list. You may optionally enter an alias, or nickname, for the " @@ -14386,36 +13399,30 @@ msgstr "" #~ " \n" #~ "Pidgin vil ikke forsøge at genforbinde til kontoen før du retter fejlen " #~ "og genaktiverer kontoen." - #~ msgid "User has typed something and stopped" #~ msgstr "Bruger har skrevet noget, og stoppet" #, fuzzy #~ msgid "_Send To" #~ msgstr "_Send til" - #~ msgid "" #~ "%s%s<span weight=\"bold\">Written by:</span>\t%s\n" #~ "<span weight=\"bold\">Website:</span>\t\t%s\n" #~ "<span weight=\"bold\">Filename:</span>\t\t%s" #~ msgstr "" #~ "%s%s<span weight=\"bold\">Skrevet af:</span>\t%s\n" -#~ "<span weight=\"bold\">Web site:</span>\t\t%s\n" +#~ "<span weight=\"bold\">Websted:</span>\t\t%s\n" #~ "<span weight=\"bold\">Filnavn:</span>\t\t%s" - #~ msgid "Display Statistics" #~ msgstr "Vis statistikker" - #~ msgid "" #~ "The contact availability plugin (cap) is used to display statistical " #~ "information about buddies in a users contact list." #~ msgstr "" #~ "Tilgængelighedsforudsigelses-udvidelsesmodulet (cap) bruges til at vise " #~ "statistik-information om venner i en brugers kontaktliste." - #~ msgid "Conversation History" #~ msgstr "Samtale historik" - #~ msgid "Log Viewer" #~ msgstr "Loglæser" @@ -14425,7 +13432,7 @@ msgstr "" #, fuzzy #~ msgid "Current media" -#~ msgstr "Nuværende symbol" +#~ msgstr "Nuværende medie" #, fuzzy #~ msgid "Unable to connect to OIM server" @@ -14438,88 +13445,64 @@ msgstr "" #, fuzzy #~ msgid "A_ccount:" #~ msgstr "Konto:" - #~ msgid "Toggle offline buddies" #~ msgstr "Afkoblet venner til/fra" - #~ msgid "" #~ "%s was disconnected due to the following error:\n" #~ "%s" #~ msgstr "" #~ "%s blev afbrudt grundet følgende fejl:\n" #~ "%s" - #~ msgid "Commands are not supported yet. Message was NOT sent." #~ msgstr "Kommandoer er ikke understøttet endnu. Besked blev IKKE sendt." - #~ msgid "Timestamps" #~ msgstr "Tidsstempler" - #~ msgid "..." #~ msgstr "..." - #~ msgid "Still need to do something about this." #~ msgstr "Mangler stadig at gøre noget ved dette." - #~ msgid "Alias..." #~ msgstr "Alias..." - #~ msgid "/Tools/Buddy Pounces" #~ msgstr "/Værktøjer/Venneovervågning" - #~ msgid "/Options/Show Buddy _Icon" -#~ msgstr "/Valgmuligheder/Vis venne_ikoner" - +#~ msgstr "/Indstillinger/Vis venne_ikoner" #~ msgid "/Options/Show Buddy Icon" -#~ msgstr "/Valgmuligheder/Vis venne_ikoner" - +#~ msgstr "/Indstillinger/Vis venne_ikoner" #~ msgid "Jabber developer" #~ msgstr "Jabber udvikler" - #~ msgid "<FONT SIZE=\"4\">IRC:</FONT> #winPidgin on irc.freenode.net<BR><BR>" #~ msgstr "<FONT SIZE=\"4\">IRC:</FONT> #winPidgin på irc.freenode.net<BR><BR>" - #~ msgid "Smaller font size" #~ msgstr "Mindre skriftstørrelse" - #~ msgid "Insert link" -#~ msgstr "Indsæt link" - +#~ msgstr "Indsæt henvisning" #~ msgid "Insert image" #~ msgstr "Indsæt billede" - #~ msgid "Pidgin %s. Try `%s -h' for more information.\n" #~ msgstr "Pidgin %s. Prøv `%s -h' for flere oplysninger.\n" - #~ msgid "Show buddy _icons" #~ msgstr "Vis venne_ikoner" - #~ msgid "" #~ "You can send this image as a file transfer or embed it into this message, " #~ "or use it as the buddy icon for this user." #~ msgstr "" #~ "Du kan sende dette billede som en filoverførsel, vedlægge det til en " #~ "besked, eller bruge det som venneikonet for denne bruger." - #~ msgid "GtkTreeView Expander Size" #~ msgstr "GtkTreeView udfoldelses-pil størrelse" - #~ msgid "GtkTreeView Indent Expanders" #~ msgstr "GtkTreeView indryknings pile" - #~ msgid "Tools" #~ msgstr "Værktøjer" - #~ msgid "" #~ "You can get version %s from:<br><a href=\"http://Pidgin.sourceforge.net/" #~ "\">http://Pidgin.sourceforge.net</a>." #~ msgstr "" #~ "Du kan få version %s fra:<br><a href=\"http://Pidgin.sourceforge.net/" #~ "\">http://Pidgin.sourceforge.net</a>." - #~ msgid "WinPidgin Options" #~ msgstr "WinPidgin Indstillinger" - #~ msgid "" #~ "%d buddy from group %s was not removed because it belongs to an account " #~ "which is disabled or offline. This buddy and the group were not " @@ -14530,23 +13513,18 @@ msgstr "" #~ "were not removed.\n" #~ msgstr[0] "" #~ "%d ven fra gruppe %s blev ikke fjernet fordi den tilhører en konto som er " -#~ "slået fra eller offline. Denne ven og gruppen blev ikke flyttet.\n" +#~ "slået fra eller afkoblet. Denne ven og gruppen blev ikke flyttet.\n" #~ msgstr[1] "" #~ "%d venner fra gruppe %s blev ikke fjernet fordi de tilhører en konto som " -#~ "er slået fra eller offline. Disse venner og gruppen blev ikke flyttet.\n" - +#~ "er slået fra eller afkoblet. Disse venner og gruppen blev ikke flyttet.\n" #~ msgid "Group not removed" #~ msgstr "Gruppe ikke fjernet" - #~ msgid "Old Pidgin" #~ msgstr "Gammel Pidgin" - #~ msgid "Autoreply" #~ msgstr "Automatisk svar" - #~ msgid "Autoreply for all the protocols" #~ msgstr "Automatisk svar for alle protokollerne" - #~ msgid "" #~ "This plugin lets you set autoreply message for any protocol. You can set " #~ "the global autoreply message from the Plugin-options dialog. To set some " @@ -14560,112 +13538,80 @@ msgstr "" #~ "automatisk svarbesked for en bestemt ven, højreklik på vennen i " #~ "venneliste-vinduet. For at sætte en automatisk svarbesked for bestemte " #~ "konti, gå til \"Avanceret\"-fanen i Konto-redigér-vinduet." - #~ msgid "Set autoreply message for %s" #~ msgstr "Sæt automatisk svarbesked for %s" - #~ msgid "Set Autoreply Message" #~ msgstr "Sæt automatisk svarbesked" - #~ msgid "" #~ "The following message will be sent to the buddy when the buddy sends you " #~ "a message and autoreply is enabled." #~ msgstr "" #~ "Følgende besked vil blive sendt til vennen når vennen sender dig en " #~ "besked og automatisk svarbesked er aktiveret." - #~ msgid "Set _Autoreply Message" #~ msgstr "Sæt _automatisk svarbesked" - #~ msgid "Autoreply message" #~ msgstr "Automatisk svarbesked" - #~ msgid "Send autoreply messages when" #~ msgstr "Send automatisk svarbesked når" - #~ msgid "When my account is _away" #~ msgstr "Når min konto er _væk" - #~ msgid "When my account is _idle" #~ msgstr "Når min konto er _fraværende" - #~ msgid "_Default reply" #~ msgstr "_Standard-svar" - #~ msgid "Status message" #~ msgstr "Status-besked" - #~ msgid "Autoreply with status message" #~ msgstr "Automatisk svar med statusbesked" - #~ msgid "Always when there is a status message" #~ msgstr "Altid når der er en statusbesked" - #~ msgid "Only when there's no autoreply message" #~ msgstr "Kun når der ikke er nogen automatisk svarbesked" - #~ msgid "Delay between autoreplies" #~ msgstr "Forsinkelse mellem automatisk svar" - #~ msgid "_Minimum delay (mins)" #~ msgstr "_Mindste forsinkelse (mins)" - #~ msgid "Times to send autoreplies" #~ msgstr "Antal gange der sendes automatisk svar" - #~ msgid "Ma_ximum count" #~ msgstr "Maksimum tæller" - #~ msgid "" #~ "I am currently not available. Please leave your message, and I will get " #~ "back to you as soon as possible." #~ msgstr "" #~ "Jeg er ikke til stede. Vær venlig at efterlade en besked, og jeg vil " #~ "vende tilbage til dig hurtigst muligt." - #~ msgid "Pidgin User" #~ msgstr "Pidgin bruger" - #~ msgid "Jabber Account" #~ msgstr "Jabber-konto" - #~ msgid "Server couldn't authenticate you without a password" #~ msgstr "Server kunne ikke godkende dig uden en adgangskode" - #~ msgid "Search for Jabber users" #~ msgstr "Søg efter Jabber brugere" - #~ msgid "Invalid Jabber ID" #~ msgstr "Ugyldigt Jabber ID" - #~ msgid "Change Jabber Password" -#~ msgstr "Skift Jabber adgangskode" - +#~ msgstr "Ændr Jabber adgangskode" #~ msgid "Jabber Protocol Plugin" #~ msgstr "Jabber protokolmodul" - #~ msgid "You have just sent a Nudge!" #~ msgstr "Du har sendt et vink!" - #~ msgid "SNAC threw error: %s\n" #~ msgstr "SNAC gav fejlen: %s\n" - #~ msgid "User information for %s unavailable:" #~ msgstr "Bruger oplysninger for %s er ikke tilgængelige:" - #~ msgid "Rate limiting error." #~ msgstr "Grænsefejl." - #~ msgid "You have been signed off for an unknown reason." #~ msgstr "Du er blevet logget af pga. en ukendt årsag." - #~ msgid "" #~ "Your screen name is currently formatted as follows:\n" #~ "%s" #~ msgstr "" #~ "Dit brugernavn er formatter således på nuværende tidspunkt:\n" #~ "%s" - #~ msgid "" #~ "Could not add the buddy %s for an unknown reason. The most common reason " #~ "for this is that you have the maximum number of allowed buddies in your " @@ -14673,73 +13619,50 @@ msgstr "" #~ msgstr "" #~ "Kunne ikke tilføje vennen %s pga. en ukendt årsag. Den normale grund for " #~ "dette er at du har det maskimale antal tilladte venner i din venneliste." - #~ msgid "New screen name formatting:" #~ msgstr "Ny brugernavn formatering:" - #~ msgid "Format Screen Name..." #~ msgstr "Formatér brugernavn..." - #~ msgid "_Connect" #~ msgstr "_Tilslut" - #~ msgid "Are you sure to exit this Qun?" #~ msgstr "Er du sikker på at du vil forlade denne Qun?" - #~ msgid "Go ahead" #~ msgstr "Fortsæt" - #~ msgid "Server ACK" #~ msgstr "Server-ACK" - #~ msgid "Send IM fail\n" -#~ msgstr "Send kvik-besked fejlede\n" - +#~ msgstr "Send besked fejlede\n" #~ msgid "Keep alive error, seems connection lost!" #~ msgstr "Hold i live fejl, lader til at forbindelsen er tabt!" - #~ msgid "Request login token error!" #~ msgstr "Login forespørgelesmærke-fejl!" - #~ msgid "%s Address" #~ msgstr "%s-adresse" - #~ msgid "QQ: Available" #~ msgstr "QQ: Tilgængelig" - #~ msgid "QQ: Away" #~ msgstr "QQ: Fraværende" - #~ msgid "QQ: Invisible" #~ msgstr "QQ: Usynlig" - #~ msgid "QQ: Offline" -#~ msgstr "QQ: Offline" - +#~ msgstr "QQ: Afkoblet" #~ msgid "Login in TCP" #~ msgstr "Logind i TCP" - #~ msgid "Login Hidden" #~ msgstr "Skjult logind" - #~ msgid "Socket send error" #~ msgstr "Sokkel sendefejl" - #~ msgid "Would like to add him?" #~ msgstr "Vil du tilføje ham?" - #~ msgid "Reject watching by other users" #~ msgstr "Nægt andre brugere at kigge på" - #~ msgid "Block invites" #~ msgstr "Blokér invitationer" - #~ msgid "Reject online status attribute requests" #~ msgstr "Nægt anmodning om online status-attributter" - #~ msgid "TOC has sent a PAUSE command." #~ msgstr "TOC har sendt en PAUSE kommando." - #~ msgid "" #~ "When this happens, TOC ignores any messages sent to it, and may kick you " #~ "off if you send a message. Pidgin will prevent anything from going " @@ -14749,10 +13672,8 @@ msgstr "" #~ "risikere at blive logget af, hvis du forsøger at sende en besked. Pidgin " #~ "vil derfor tilbageholde alle beskeder. Dette er kun midlertidigt, så hav " #~ "tålmodighed." - #~ msgid "Pidgin - Save As..." #~ msgstr "Pidgin - Gem som..." - #~ msgid "" #~ "The normal authentication method has failed. This means either your " #~ "password is incorrect, or Yahoo!'s authentication scheme has changed. " @@ -14763,48 +13684,34 @@ msgstr "" #~ "adgangskode er forkert, eller at Yahoo!'s godkendelsesmetode er blevet " #~ "ændret. Pidgin vil nu forsøge at logge ind via Web Messenger-" #~ "godkendelsesmetoden, som vil resultere i begrænset funktionalitet." - #~ msgid "Unavailable" #~ msgstr "Ikke tilgængelig" - #~ msgid "Crazychat" #~ msgstr "Skørchat" - #~ msgid "Plugin to establish a Crazychat session." #~ msgstr "Plugin til at etablere en skørchat session." - #~ msgid "Uses Pidgin to obtain buddy ips to connect for a Crazychat session" #~ msgstr "" #~ "Bruger Pidgin til at finde venners ip-adresser til at forbinde til en " #~ "skørchat session" - #~ msgid "Network Configuration" #~ msgstr "Netværksopsætning" - #~ msgid "TCP port" #~ msgstr "TCP port" - #~ msgid "UDP port" #~ msgstr "UDP port" - #~ msgid "Feature Calibration" #~ msgstr "Funktionalitets justering" - #~ msgid "DBus" #~ msgstr "DBus" - #~ msgid "Blink tray icon for unread..." #~ msgstr "Blink statusikon for ulæste..." - #~ msgid "_Instant Messages:" #~ msgstr "_Kvikbeskeder:" - #~ msgid "C_hat Messages:" #~ msgstr "C_hat beskeder:" - #~ msgid "Displays an icon for Pidgin in the system tray." #~ msgstr "Viser et Pidgin-ikon i statusområdet." - #~ msgid "" #~ "Displays a system tray icon (in GNOME, KDE, or Windows for example) to " #~ "show the current status of Pidgin, allow fast access to commonly used " @@ -14815,74 +13722,60 @@ msgstr "" #~ "vise Pidgins nuværende status. Det tillader hurtig adgang til ofte brugte " #~ "funktioner, og du kan hurtigt skjule/vise vennelisten. Det giver også " #~ "mulighed for at blinke når der er ulæste beskeder." - #~ msgid "The specified buddy was not found in the Evolution Contacts." #~ msgstr "Den angivne ven blev ikke fundet i Evolution kontakter" - #~ msgid "Delay" #~ msgstr "Forsinkelse" - #~ msgid "Buddy icon:" #~ msgstr "Venneikon:" - #~ msgid "" #~ "\n" #~ "<b>Nickname:</b> %s" #~ msgstr "" #~ "\n" #~ "<b>Kælenavn:</b> %s" - #~ msgid "" #~ "\n" #~ "<b>Logged In:</b> %s" #~ msgstr "" #~ "\n" #~ "<b>Logget ind:</b> %s" - #~ msgid "" #~ "\n" #~ "<b>Idle:</b> %s" #~ msgstr "" #~ "\n" #~ "<b>Inaktiv:</b> %s" - #~ msgid "" #~ "\n" #~ "<b>Status:</b> Offline" #~ msgstr "" #~ "\n" -#~ "<b>Status:</b> Offline" - +#~ "<b>Status:</b> Afkoblet" #~ msgid "" #~ "\n" #~ "<b>Description:</b> Spooky" #~ msgstr "" #~ "\n" #~ "<b>Beskrivelse:</b> Skræmmende" - #~ msgid "" #~ "\n" #~ "<b>Status:</b> Awesome" #~ msgstr "" #~ "\n" #~ "<b>Status:</b> Enestående" - #~ msgid "" #~ "\n" #~ "<b>Status:</b> Rockin'" #~ msgstr "" #~ "\n" #~ "<b>Status:</b> Fantastisk" - #~ msgid "IM the user" #~ msgstr "Send besked til bruger" - #~ msgid "Ignore the user" #~ msgstr "Ignorér brugeren" - #~ msgid "Get the user's information" #~ msgstr "Hent brugerens oplysninger" - #~ msgid "" #~ "<span weight=\"bold\" size=\"larger\">You have mail!</span>\n" #~ "\n" @@ -14891,161 +13784,120 @@ msgstr "" #~ "<span weight=\"bold\" size=\"larger\">Du har fået post!</span>\n" #~ "\n" #~ "%s" - #~ msgid "Send unknown \"_slash\" commands as messages" #~ msgstr "Send ukendte \"_skråstreg\" kommandoer som beskeder" - #~ msgid "Tab Options" #~ msgstr "Faneblad indstillinger" - #~ msgid "_Sounds while away" #~ msgstr "Afspil _lyde under fravær" - #~ msgid "" #~ "Unable to play sound because the 'Command' sound method has been chosen, " #~ "but no command has been set." #~ msgstr "" #~ "Kunne ikke afspille lyd fordi 'Kommando' lydmetoden er blevet valgt, men " #~ "ingen kommando er blevet sat." - #~ msgid "" #~ "Unable to play sound because the configured sound command could not be " #~ "launched: %s" #~ msgstr "" #~ "Ikke i stand til at afspille lyd fordi den opsatte lydkommando ikke kunne " #~ "køres: %s" - #~ msgid "" #~ "\n" #~ "<b>Status:</b> %s" #~ msgstr "" #~ "\n" #~ "<b>Status</b>: %s" - #~ msgid "" #~ "\n" #~ "<b>Message:</b> %s" #~ msgstr "" #~ "\n" #~ "<b>Besked:</b> %s" - #~ msgid "Unable to initiate a new search" #~ msgstr "Kunne ikke lave en ny søgning" - #~ msgid "You have a pending search. Please wait for it to finish." #~ msgstr "Du har en søgning i gang. Vent til den afslutter." - #~ msgid "<b>%s:</b> %s" #~ msgstr "<b>%s:</b> %s" - #~ msgid "" #~ "Server requires TLS/SSL for login. Select \"Use TLS if available\" in " #~ "account properties" #~ msgstr "" #~ "Server kræevr TLS/SSL til logind. Vælg \"Brug TLS hvis tilgængeligt\" i " #~ "kontoegenskaber" - #~ msgid "Use TLS if available" #~ msgstr "Brug TLS hvis tilgængelig" - #~ msgid "The user %s wants to add %s to his or her buddy list." #~ msgstr "Brugeren %s vil tilføje %s til sin venneliste." - #~ msgid "_Authorize" #~ msgstr "_Godkend" - #~ msgid "_Deny" #~ msgstr "_Nægt" - #~ msgid "%s<b>General</b><br>%s" #~ msgstr "%s<b>Generelt</b><br>%s" - #~ msgid "%s<b>Social</b><br>%s" #~ msgstr "%s<b>Social</b><br>%s" - #~ msgid "<br><b>Personal</b><br>%s" #~ msgstr "<br><b>Personlig</b><br>%s" - #~ msgid "<br><b>Business</b><br>%s" #~ msgstr "<br><b>Erhverv</b><br>%s" - #~ msgid "<hr><b>Contact Info</b>%s%s" #~ msgstr "<hr><b>Kontaktoplysninger</b>%s%s" - #~ msgid "<hr><b>%s:</b> " #~ msgstr "<hr><b>%s:</b> " - #~ msgid "Login server" #~ msgstr "Indlogningsserver" - #~ msgid "The user %s (%s) wants to add %s to his or her buddy list." #~ msgstr "Brugeren %s (%s) vil tilføje %s til sin venneliste." - #~ msgid "Unable to read header from server" #~ msgstr "Kunne ikke hente hoved fra server" - #~ msgid "" #~ "Unable to read message from server: %s. Command is %hd, length is %hd." #~ msgstr "" #~ "Kunne ikke læse besked fra server: %s. Kommando er %hd, længde er %hd." - #~ msgid "users: %s, files: %s, size: %sGB" #~ msgstr "brugere: %s, filer: %s, størrelse: %sGB" - #~ msgid "Unable to add \"%s\" to your Napster hotlist" #~ msgstr "Kunne ikke tilføje \"%s\" til din Napster hotlist" - #~ msgid "%s requested a PING" #~ msgstr "%s anmodede om PING" - #~ msgid "NAPSTER Protocol Plugin" #~ msgstr "NAPSTER protokolmodul" - #~ msgid "Direct IM with %s closed" #~ msgstr "Direkte forbindelse til %s lukket" - #~ msgid "Direct IM with %s failed" #~ msgstr "Direkte forbindelse til %s fejlede" - #~ msgid "Unable to open Direct IM" #~ msgstr "Kunne ikke oprette direkte forbindelse" - #~ msgid "You have lost your connection to chat room %s." -#~ msgstr "Du har tabt forbindelsen til chatrummet %s." - +#~ msgstr "Du har tabt forbindelsen til samtalerummet %s." #~ msgid "Chat is currently unavailable" -#~ msgstr "Chat er ikke tilgængelig nu" - +#~ msgstr "Samtale er ikke tilgængelig nu" #~ msgid "" #~ "Transfer of file %s timed out.\n" #~ " Try enabling proxy servers for file transfers in Accounts -> %s -> Edit " #~ "Account -> Advanced." #~ msgstr "" #~ "Overførsel af fil %s overløb tidsgrænsen.\n" -#~ " Prøv at aktivere proxy servere for filoverførsler i Konti -> %s -> " +#~ " Prøv at aktivere proxyservere for filoverførsler i Konti -> %s -> " #~ "Redigér konto -> Avanceret." - #~ msgid "Unable to log into file transfer proxy." #~ msgstr "Kunne ikke logge ind til filoverførselsproxy." - #~ msgid "" #~ "Unable to establish listener socket or no AOL proxy connection present." #~ msgstr "" #~ "Kan ikke etablere lytte sokkel eller ingen AOL proxy forbindelse tilstede." - #~ msgid "" #~ "The user %s requires authorization before being added to a buddy list. " #~ "Do you want to send an authorization request?" #~ msgstr "" #~ "Brugeren %s kræver godkendelse for at blive tilføjet til en venneliste." #~ "Vil du sende en anmodning om godkendelse?" - #~ msgid "Request Authorization" #~ msgstr "Anmod om godkendelse" - #~ msgid "_Request Authorization" #~ msgstr "_Anmod om godkendelse" - #~ msgid "" #~ "The user %u wants to add %s to their buddy list for the following " #~ "reason:\n" @@ -15053,55 +13905,40 @@ msgstr "" #~ msgstr "" #~ "Brugeren %u vil tilføje %s til sin venneliste af følgende grund:\n" #~ "%s" - #~ msgid "Authorization Request" #~ msgstr "Godkendelse anmodning" - #~ msgid "<B>UIN:</B> %s<BR><B>Status:</B> %s<HR>%s" #~ msgstr "<B>UIN:</B> %s<BR><B>Status:</B> %s<HR>%s" - #~ msgid "Auth host" #~ msgstr "Godkendelses server" - #~ msgid "Auth port" #~ msgstr "Godkendelses port" - #~ msgid "" #~ "\n" #~ "<b>Supports:</b> %s" #~ msgstr "" #~ "\n" #~ "<b>Understøtter:</b>: %s" - #~ msgid "<b>Full Name:</b> %s<br>" #~ msgstr "<b>Fulde navn:</b> %s<br>" - #~ msgid "<b>Supports:</b> %s<br>" #~ msgstr "<b>Understøtter:</b> %s<br>" - #~ msgid "<b>Status:</b> %s" #~ msgstr "<b>Status:</b> %s" - #~ msgid "Wrong Password" #~ msgstr "Forkert adgangskode" - #~ msgid "TOC host" #~ msgstr "TOC Vært" - #~ msgid "TOC port" #~ msgstr "TOC Port" - #~ msgid "Unable to read" #~ msgstr "Kunne ikke læse" - #~ msgid "Pager host" #~ msgstr "Bipper vært" - #~ msgid "YCHT host" #~ msgstr "YCHT vært" - #~ msgid "YCHT port" #~ msgstr "YCHT port" - #~ msgid "g003: Error opening connection.\n" #~ msgstr "g003: Fejl ved oprettelse af forbindelse\n" + @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-02-23 20:26+0100\n" -"PO-Revision-Date: 2009-02-23 19:55+0100\n" -"Last-Translator: Bjoern Voigt <bjoern@cs.tu-berlin.de>\n" +"POT-Creation-Date: 2009-02-25 17:28+0100\n" +"PO-Revision-Date: 2009-02-25 17:28+0100\n" +"Last-Translator: Jochen Kemnade <jochenkemnade@web.de>\n" "Language-Team: German <de@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -7563,6 +7563,9 @@ msgstr "<p><b>Wunderbare Patch-Schreiber</b>:<br>\n" msgid "<p><b>Acknowledgement</b>:<br>\n" msgstr "<p><b>Bestätigung</b>:<br>\n" +msgid "<p><b>Scrupulous Testers</b>:<br>\n" +msgstr "<p><b>Gewissenhafte Tester</b>:<br>\n" + msgid "<p><i>And, all the boys in the backroom...</i><br>\n" msgstr "<p><i>Und all die Jungs im Hinterzimmer...</i><br>\n" @@ -7588,6 +7591,9 @@ msgstr "Alle QQ-Quns aktualisieren" msgid "About OpenQ" msgstr "Über OpenQ" +msgid "Modify Buddy Memo" +msgstr "Buddy-Notiz bearbeiten" + #. *< type #. *< ui_requirement #. *< flags @@ -2258,7 +2258,7 @@ msgstr "Šifritest" #. * summary #. * description msgid "Tests the ciphers that ship with libpurple." -msgstr "Libpurple'ga kaasasolevate šifrite testimine." +msgstr "libpurple'ga kaasasolevate šifrite testimine." #. *< type #. *< ui_requirement @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: pidgin 2.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-01-04 22:44+0100\n" -"PO-Revision-Date: 2009-01-04 22:42+0100\n" +"POT-Creation-Date: 2009-02-25 03:23+0100\n" +"PO-Revision-Date: 2009-02-25 03:21+0100\n" "Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n" "Language-Team: Hungarian <gnome@fsf.hu>\n" "MIME-Version: 1.0\n" @@ -34,7 +34,7 @@ msgid "" "Usage: %s [OPTION]...\n" "\n" " -c, --config=DIR use DIR for config files\n" -" -d, --debug print debugging messages to stdout\n" +" -d, --debug print debugging messages to stderr\n" " -h, --help display this help and exit\n" " -n, --nologin don't automatically login\n" " -v, --version display the current version and exit\n" @@ -42,8 +42,8 @@ msgstr "" "%s\n" "Használat: %s [KAPCSOLÓ]…\n" "\n" -" -c, --config=KÖNYVTÁR A KÖNYVTÁR használata a beállítófájlokhoz\n" -" -d, --debug hibakereső üzenetek kiírása a szabványos kimenetre\n" +" -c, --config=KÖNYVTÁR A KÖNYVTÁR használata a beállítófájlokhoz\n" +" -d, --debug hibakereső üzenetek kiírása a szabványos hibakimenetre\n" " -h, --help ezen súgó megjelenítése és kilépés\n" " -n, --nologin ne jelentkezzen be automatikusan\n" " -v, --version az aktuális verzió megjelenítése és kilépés\n" @@ -1163,7 +1163,6 @@ msgstr "Állapot módosítása ennyi perc után" msgid "Change status to" msgstr "Állapot módosítása a következőre" -#. Conversations msgid "Conversations" msgstr "Társalgások" @@ -1485,7 +1484,6 @@ msgstr "" "Ez a bővítmény új társalgás megnyitásakor beszúrja az utolsó társalgást az " "aktuális társalgásba." -#, c-format msgid "Online" msgstr "Elérhető" @@ -1918,7 +1916,6 @@ msgstr "%s átvitelének megkezdése a következőtől: %s" msgid "Transfer of file %s complete" msgstr "%s fájl átvitele befejeződött" -#, c-format msgid "File transfer complete" msgstr "A fájlátvitel befejeződött" @@ -1926,7 +1923,6 @@ msgstr "A fájlátvitel befejeződött" msgid "You canceled the transfer of %s" msgstr "Megszakította %s átvitelét" -#, c-format msgid "File transfer cancelled" msgstr "Fájlátvitel megszakítva" @@ -2134,7 +2130,6 @@ msgstr "(%s) %s <AUTOMATIKUS VÁLASZ>: %s\n" msgid "You are using %s, but this plugin requires %s." msgstr "A(z) %s programot használja, de a bővítmény a következőt igényli: %s." -#, c-format msgid "This plugin has not defined an ID." msgstr "A bővítmény nem adott meg azonosítót." @@ -2832,7 +2827,6 @@ msgid "" msgstr "" "Nem hozható létre kapcsolat a helyi mDNS kiszolgálóval. Egyáltalán fut?" -#. Creating the options for the protocol msgid "First name" msgstr "Utónév" @@ -2864,6 +2858,10 @@ msgstr "Bonjour protokollbővítmény" msgid "Purple Person" msgstr "Purple személy" +#. Creating the options for the protocol +msgid "Local Port" +msgstr "Helyi port" + msgid "Bonjour" msgstr "Bonjour" @@ -3027,7 +3025,6 @@ msgstr "Elérhető" #. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for #. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message #. Away stuff -#, c-format msgid "Away" msgstr "Távol" @@ -3921,7 +3918,6 @@ msgstr "Beszédes" msgid "Extended Away" msgstr "Nem vagyok a gépnél" -#, c-format msgid "Do Not Disturb" msgstr "Ne zavarjanak" @@ -4668,9 +4664,6 @@ msgstr "Műveletek" msgid "Select an action" msgstr "Válasszon műveletet" -msgid "Unable to retrieve MSN Address Book" -msgstr "Az MSN címjegyzék nem kérhető le" - #. 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 @@ -6124,7 +6117,6 @@ msgstr "" msgid "Error. SSL support is not installed." msgstr "Hiba: az SSL támogatás nincs telepítve." -#, c-format msgid "This conference has been closed. No more messages can be sent." msgstr "Ez a konferencia le lett zárva. További üzenetek már nem küldhetőek." @@ -6388,23 +6380,18 @@ msgstr "Fényképezőgép" msgid "Screen Sharing" msgstr "Képernyőmegosztás" -#, c-format msgid "Free For Chat" msgstr "Ráérek csevegni" -#, c-format msgid "Not Available" msgstr "Nem érhető el" -#, c-format msgid "Occupied" msgstr "Elfoglalt" -#, c-format msgid "Web Aware" msgstr "A weben" -#, c-format msgid "Invisible" msgstr "Láthatatlan" @@ -6986,6 +6973,7 @@ msgstr "Kapcs_olódás" msgid "Get AIM Info" msgstr "AIM információk lekérése" +#. We only do this if the user is in our buddy list msgid "Edit Buddy Comment" msgstr "Partnermegjegyzés szerkesztése" @@ -7096,7 +7084,6 @@ msgstr "" msgid "Attempting to connect to %s:%hu." msgstr "Kapcsolódási kísérlet a következőhöz: %s:%hu." -#, c-format msgid "Attempting to connect via proxy server." msgstr "Kapcsolódási kísérlet proxy kiszolgálón keresztül." @@ -7574,6 +7561,9 @@ msgstr "<p><b>Javítások</b>:<br>\n" msgid "<p><b>Acknowledgement</b>:<br>\n" msgstr "<p><b>Köszönetnyilvánítás</b>:<br>\n" +msgid "<p><b>Scrupulous Testers</b>:<br>\n" +msgstr "<p><b>Lelkiismeretes tesztelők</b>:<br>\n" + msgid "<p><i>And, all the boys in the backroom...</i><br>\n" msgstr "<p><i>és a háttéremberek...</i><br>\n" @@ -7599,6 +7589,9 @@ msgstr "Minden QQ Qun frissítése" msgid "About OpenQ" msgstr "Az OpenQ névjegye" +msgid "Modify Buddy Memo" +msgstr "Partnerfeljegyzés módosítása" + #. *< type #. *< ui_requirement #. *< flags @@ -7636,6 +7629,9 @@ msgstr "Kiszolgálómegjegyzés megjelenítése" msgid "Show server news" msgstr "Kiszolgálóhírek megjelenítése" +msgid "Show chat room when msg comes" +msgstr "Csevegőszoba megjelenítése ha üzenet jön" + msgid "Keep alive interval (seconds)" msgstr "Kapcsolat-fenntartási időköz (mp)" @@ -11390,6 +11386,9 @@ msgstr "litván" msgid "Macedonian" msgstr "macedón" +msgid "Mongolian" +msgstr "Mongol" + msgid "Bokmål Norwegian" msgstr "Norvég Bokmål" @@ -11504,9 +11503,31 @@ msgstr "" "fájlban. A programra nem biztosítunk garanciát.<BR><BR>" #, c-format -msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgid "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" msgstr "" -"<FONT SIZE=\"4\">IRC:</FONT> #pidgin az irc.freenode.net hálózaton<BR><BR>" +"<FONT SIZE=\"4\">Segítség e-mailben (angol):</FONT> <A HREF=\"mailto:" +"support@pidgin.im\">support@pidgin.im</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgstr "" +"<FONT SIZE=\"4\">IRC csatorna:</FONT> #pidgin az irc.freenode.net " +"hálózaton<BR><BR>" + +#, c-format +msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" +msgstr "<FONT SIZE=\"4\">XMPP szoba:</FONT> devel@conference.pidgin.im<BR><BR>" msgid "Current Developers" msgstr "Jelenlegi fejlesztők" @@ -12155,6 +12176,10 @@ msgstr "" msgid "Pidgin" msgstr "Pidgin" +#, c-format +msgid "Exiting because another libpurple client is already running.\n" +msgstr "Kilépés, mert már fut egy másik libpurple kliens.\n" + msgid "Open All Messages" msgstr "Összes üzenet megnyitása" @@ -12493,6 +12518,10 @@ msgstr "Proxy-kiszolgáló" msgid "No proxy" msgstr "Nincs Proxy" +#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings +msgid "Use remote DNS with SOCKS4 proxies" +msgstr "Távoli DNS használata SOCKS4 proxykkal" + msgid "_User:" msgstr "_Felhasználó:" @@ -13947,9 +13976,6 @@ msgstr "_Partnerlista-ablak mindig felül:" msgid "Only when docked" msgstr "Csak ha dokkolt" -msgid "_Flash window when chat messages are received" -msgstr "_Villogtassa az ablakot új csevegésüzenetek fogadásakor" - msgid "Windows Pidgin Options" msgstr "A windowsos Pidin beállításai" diff --git a/po/km.po b/po/km.po new file mode 100644 index 0000000000..771ca9250b --- /dev/null +++ b/po/km.po @@ -0,0 +1,13636 @@ +# translation of pidgin.po to Khmer +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Khoem Sokhem <khoemsokhem@khmeros.info>, 2009. +msgid "" +msgstr "" +"Project-Id-Version: pidgin\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-02-27 16:37-0800\n" +"PO-Revision-Date: 2009-02-25 11:49+0700\n" +"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n" +"Language-Team: Khmer <support@khmeros.info>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: KBabel 1.11.4\n" + +#. Translators may want to transliterate the name. +#. It is not to be translated. +msgid "Finch" +msgstr "បក្សី" + +#, c-format +msgid "%s. Try `%s -h' for more information.\n" +msgstr "%s. Try `%s -h' សម្រាប់ព័ត៌មានបន្ថែម ។\n" + +#, c-format +msgid "" +"%s\n" +"Usage: %s [OPTION]...\n" +"\n" +" -c, --config=DIR use DIR for config files\n" +" -d, --debug print debugging messages to stderr\n" +" -h, --help display this help and exit\n" +" -n, --nologin don't automatically login\n" +" -v, --version display the current version and exit\n" +msgstr "" +"%s\n" +"ការប្រើប្រាស់ ៖ %s [ជម្រើស]...\n" +"\n" +" -c, --config=DIR ប្រើ DIR សម្រាប់ឯកសារ config\n" +" -d, --debug បោះពុម្ពសារបំបាត់ទៅ stderr\n" +" -h, --help បង្ហាញជំនួយនេះ ហើយចេញ\n" +" -n, --nologin កុំចូលដោយស្វ័យប្រវត្តិ\n" +" -v, --version បង្ហាញកំណែបច្ចុប្បន្ន ហើយចេញ\n" + +#, c-format +msgid "" +"%s encountered errors migrating your settings from %s to %s. Please " +"investigate and complete the migration by hand. Please report this error at " +"http://developer.pidgin.im" +msgstr "" +"កំហុសដែលបានជួបប្រទះ %s ប្ដូរទៅការកំណត់របស់អ្នកពី %s ទៅ %s ។ សូមអង្កេត និងបំពេញការប្ដូរដោយដៃ ។ " +"សូមរាយការណ៍កំហុសនេះតាម http://developer.pidgin.im" + +msgid "Error" +msgstr "កំហុស" + +msgid "Account was not added" +msgstr "គណនីមិនត្រូវបានបន្ថែមទេ" + +msgid "Username of an account must be non-empty." +msgstr "ឈ្មោះអ្នកប្រើរបស់គណនីមិនអាចទទេនោះទេ ។" + +msgid "New mail notifications" +msgstr "ការជូនដំណឹងសំបុត្រថ្មី" + +msgid "Remember password" +msgstr "ចងចាំពាក្យសម្ងាត់" + +msgid "There are no protocol plugins installed." +msgstr "គ្មានកម្មវិធីជំនួយពិធីការត្រូវបានដំឡើងនោះទេ ។" + +msgid "(You probably forgot to 'make install'.)" +msgstr "(អ្នកប្រហែលជាភ្លេច 'make install' ។)" + +msgid "Modify Account" +msgstr "កែប្រែគណនី" + +msgid "New Account" +msgstr "គណនីថ្មី" + +msgid "Protocol:" +msgstr "ពិធីការ ៖" + +msgid "Username:" +msgstr "ឈ្មោះអ្នកប្រើ ៖" + +msgid "Password:" +msgstr "ពាក្យសម្ងាត់ ៖" + +msgid "Alias:" +msgstr "ឈ្មោះក្លែងក្លាយ ៖" + +#. Register checkbox +msgid "Create this account on the server" +msgstr "បង្កើតគណនីនេះនៅលើម៉ាស៊ីនបម្រើ" + +#. Cancel button +#. Cancel +msgid "Cancel" +msgstr "បោះបង់" + +#. Save button +#. Save +msgid "Save" +msgstr "រក្សាទុក" + +#, c-format +msgid "Are you sure you want to delete %s?" +msgstr "តើអ្នកប្រាកដជាចង់លុប %s?" + +msgid "Delete Account" +msgstr "លុបគណនី" + +#. Delete button +msgid "Delete" +msgstr "លុប" + +msgid "Accounts" +msgstr "គណនី" + +msgid "You can enable/disable accounts from the following list." +msgstr "អ្នកអាចបិទ/បើកគណនីពីបញ្ជីដូចខាងក្រោម ។" + +#. Add button +msgid "Add" +msgstr "បន្ថែម" + +#. Modify button +msgid "Modify" +msgstr "កែប្រែ" + +#, c-format +msgid "%s%s%s%s has made %s his or her buddy%s%s" +msgstr "%s%s%s%s បានធ្វើ %s មិត្តភក្ដិរបស់គាត់ %s%s" + +msgid "Add buddy to your list?" +msgstr "បន្ថែមមិត្តភក្ដិទៅកាន់បញ្ជីរបស់អ្នក ?" + +#, c-format +msgid "%s%s%s%s wants to add %s to his or her buddy list%s%s" +msgstr "%s%s%s%s ចង់បន្ថែម %s ទៅកាន់បញ្ជីមិត្តភក្ដិរបស់គាត់ %s%s" + +msgid "Authorize buddy?" +msgstr "ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់មិត្តភក្ដិ ?" + +msgid "Authorize" +msgstr "ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +msgid "Deny" +msgstr "បដិសេធ" + +#, c-format +msgid "" +"Online: %d\n" +"Total: %d" +msgstr "" +"លើបណ្ដាញ ៖ %d\n" +"សរុប ៖ %d" + +#, c-format +msgid "Account: %s (%s)" +msgstr "គណនី ៖ %s (%s)" + +#, c-format +msgid "" +"\n" +"Last Seen: %s ago" +msgstr "" +"\n" +"បានឃើញចុងក្រោយ ៖ %s ago" + +msgid "Default" +msgstr "លំនាំដើម" + +msgid "You must provide a username for the buddy." +msgstr "អ្នកត្រូវតែផ្ដល់ឈ្មោះអ្នកប្រោះសម្រាប់មិត្តភក្ដិ ។" + +msgid "You must provide a group." +msgstr "អ្នកត្រូវតែផ្ដល់ក្រុមមួយ ។" + +msgid "You must select an account." +msgstr "អ្នកត្រូវតែជ្រើសគណនីមួយ ។" + +msgid "The selected account is not online." +msgstr "គណនីដែលបានជ្រើសមិននៅលើបណ្ដាញទេ ។" + +msgid "Error adding buddy" +msgstr "កំហុសក្នុងការបន្ថែមមិត្តភក្ដិ" + +msgid "Username" +msgstr "ឈ្មោះអ្នកប្រើ" + +msgid "Alias (optional)" +msgstr "ឈ្មោះក្លែងក្លាយ (ជម្រើស)" + +msgid "Add in group" +msgstr "បន្ថែមក្នុងក្រុម" + +msgid "Account" +msgstr "គណនី" + +msgid "Add Buddy" +msgstr "បន្ថែមមិត្តភក្ដិ" + +msgid "Please enter buddy information." +msgstr "សូមបញ្ចូលព័ត៌មានរបស់មិត្តភក្ដិ ។" + +msgid "Chats" +msgstr "ជជែក" + +#. Extract their Name and put it in +msgid "Name" +msgstr "ឈ្មោះ" + +msgid "Alias" +msgstr "ឈ្មោះក្លែងក្លាយ" + +msgid "Group" +msgstr "ក្រុម" + +msgid "Auto-join" +msgstr "ចូលស្វ័យប្រវត្តិ" + +msgid "Add Chat" +msgstr "បន្ថែមការជជែក" + +msgid "You can edit more information from the context menu later." +msgstr "អ្នកអាចកែសម្រួលព័ត៌មានបន្ថែមពីម៉ឺនុយបរិបទនៅពេលក្រោយ ។" + +msgid "Error adding group" +msgstr "កំហុសក្នុងការបន្ថែមក្រុម" + +msgid "You must give a name for the group to add." +msgstr "អ្នកត្រូវតែផ្ដល់ឈ្មោះសម្រាប់ក្រុមដែលត្រូវបន្ថែម ។" + +msgid "Add Group" +msgstr "បន្ថែមក្រុម" + +msgid "Enter the name of the group" +msgstr "បញ្ចូលឈ្មោះក្រុម" + +msgid "Edit Chat" +msgstr "កែសម្រួលការជជែក" + +msgid "Please Update the necessary fields." +msgstr "សូមធ្វើឲ្យវាលដែលចាំបាច់ទាន់សម័យ ។" + +msgid "Edit" +msgstr "កែសម្រួល" + +msgid "Edit Settings" +msgstr "កែសម្រួលការកំណត់" + +msgid "Information" +msgstr "ព័ត៌មាន" + +msgid "Retrieving..." +msgstr "កំពុងទៅយក..." + +msgid "Get Info" +msgstr "យកព័ត៌មាន" + +msgid "Add Buddy Pounce" +msgstr "បន្ថែមក្រុមមិត្តភក្ដិ" + +msgid "Send File" +msgstr "ផ្ញើឯកសារ" + +msgid "Blocked" +msgstr "បានទប់ស្កាត់" + +msgid "Show when offline" +msgstr "បង្ហាញនៅពេលនៅក្រៅបណ្ដាញ" + +#, c-format +msgid "Please enter the new name for %s" +msgstr "សូមបញ្ចូលឈ្មោះថ្មីសម្រាប់ %s" + +msgid "Rename" +msgstr "ប្តូរឈ្មោះ" + +msgid "Set Alias" +msgstr "កំណត់ឈ្មោះក្លែងក្លាយ" + +msgid "Enter empty string to reset the name." +msgstr "បញ្ចូលខ្សែអក្សរទទេ ដើម្បីកំណត់ឈ្មោះឡើងវិញ ។" + +msgid "Removing this contact will also remove all the buddies in the contact" +msgstr "យកទំនាក់ទំនងនេះចេញ នឹងយកមិត្តភក្ដិទាំងអស់ចេញនៅក្នុងទំនាក់ទំនង" + +msgid "Removing this group will also remove all the buddies in the group" +msgstr "យកក្រុមនេះចេញនឹងយកមិត្តភក្ដិទាំងអស់ចេញនៅក្នុងក្រុម" + +#, c-format +msgid "Are you sure you want to remove %s?" +msgstr "តើអ្នកប្រាកដជាចង់យក %s ចេញឬ ?" + +#. XXX: anything to do with the returned ui-handle? +msgid "Confirm Remove" +msgstr "អះអាងការយកចេញ" + +msgid "Remove" +msgstr "យកចេញ" + +#. Buddy List +msgid "Buddy List" +msgstr "បញ្ជីមិត្តភក្ដិ" + +msgid "Place tagged" +msgstr "បានដាក់ស្លាកកន្លែង" + +msgid "Toggle Tag" +msgstr "បិទ/បើកស្លាក" + +msgid "View Log" +msgstr "មើលកំណត់ហេតុ" + +#. General +msgid "Nickname" +msgstr "សម្មតិនាម" + +#. Never know what those translations might end up like... +#. Idle stuff +msgid "Idle" +msgstr "ទំនេរ" + +msgid "On Mobile" +msgstr "នៅពេលចល័ត" + +msgid "New..." +msgstr "ថ្មី..." + +msgid "Saved..." +msgstr "បានរក្សាទុក..." + +msgid "Plugins" +msgstr "កម្មវិធីជំនួយ" + +msgid "Block/Unblock" +msgstr "ទប់ស្កាត់/មិនទប់ស្កាត់" + +msgid "Block" +msgstr "ទប់ស្កាត់" + +msgid "Unblock" +msgstr "មិនទប់ស្កាត់" + +msgid "" +"Please enter the username or alias of the person you would like to Block/" +"Unblock." +msgstr "សូមបញ្ចូលឈ្មោះអ្នកប្រើ ឬឈ្មោះក្លែងក្លាយរបស់មនុស្ស ដែលអ្នកចង់ទប់ស្កាត់/មិនទប់ស្កាត់ ។" + +#. Not multiline +#. Not masked? +#. No hints? +msgid "OK" +msgstr "យល់ព្រម" + +msgid "New Instant Message" +msgstr "សារបន្ទាន់ថ្មី" + +msgid "Please enter the username or alias of the person you would like to IM." +msgstr "សូមបញ្ចូលឈ្មោះអ្នកប្រើ ឬឈ្មោះក្លែងក្លាយរបស់មនុស្ស ដែលអ្នកចង់ IM ។" + +msgid "Channel" +msgstr "ឆានែល" + +msgid "Join a Chat" +msgstr "ចូលរួមក្នុងការជជែក" + +msgid "Please enter the name of the chat you want to join." +msgstr "សូមបញ្ចូលឈ្មោះនៃការជជែកដែលអ្នកចង់ចូលរួម ។" + +msgid "Join" +msgstr "ចូលរួម" + +msgid "" +"Please enter the username or alias of the person whose log you would like to " +"view." +msgstr "សូមបញ្ចូលឈ្មោះអ្នកប្រើ ឬឈ្មោះក្លែងក្លាយរបស់មនុស្សដែលអ្នកចង់មើល ។" + +#. Create the "Options" frame. +msgid "Options" +msgstr "ជម្រើស" + +msgid "Send IM..." +msgstr "ផ្ញើ IM..." + +msgid "Block/Unblock..." +msgstr "ទប់ស្កាត់/មិនទប់ស្កាត់..." + +msgid "Join Chat..." +msgstr "ចូលរួមការជជែក..." + +msgid "View Log..." +msgstr "មើលកំណត់ហេតុ..." + +msgid "View All Logs" +msgstr "មើលកំណត់ហេតុទាំងអស់" + +msgid "Show" +msgstr "បង្ហាញ" + +msgid "Empty groups" +msgstr "សម្អាតក្រុម" + +msgid "Offline buddies" +msgstr "មិត្តភក្ដិក្រៅបណ្តាញ" + +msgid "Sort" +msgstr "តម្រៀប" + +msgid "By Status" +msgstr "តាមស្ថានភាព" + +msgid "Alphabetically" +msgstr "តាមអក្ខរក្រម" + +msgid "By Log Size" +msgstr "តាមទំហំកំណត់ហេតុ" + +msgid "Buddy" +msgstr "មិត្តភក្ដិ" + +msgid "Chat" +msgstr "ជជែក" + +msgid "Grouping" +msgstr "ការដាក់ជាក្រុម" + +msgid "Certificate Import" +msgstr "នាំចូលវិញ្ញាបនបត្រ" + +msgid "Specify a hostname" +msgstr "បញ្ជាក់ឈ្មោះម៉ាស៊ីន" + +msgid "Type the host name this certificate is for." +msgstr "វាយឈ្មោះម៉ាស៊ីននៃវិញ្ញាបនបត្រនេះគឺសម្រាប់ ។" + +#, c-format +msgid "" +"File %s could not be imported.\n" +"Make sure that the file is readable and in PEM format.\n" +msgstr "" +"ឯកសារ %s មិនអាចត្រូវបាននាំចូលទេ ។\n" +"សូមប្រាកដថាឯកសារអាចអានបាន ហើយមានទ្រង់ទ្រាយជា PEM ។\n" + +msgid "Certificate Import Error" +msgstr "កំហុសក្នុងការនាំវិញ្ញាបនបត្រចូល" + +msgid "X.509 certificate import failed" +msgstr "បានបរាជ័យក្នុងការនាំចូលវិញ្ញាបនបត្រ X.509" + +msgid "Select a PEM certificate" +msgstr "ជ្រើសវិញ្ញាបនបត្រ PEM" + +#, c-format +msgid "" +"Export to file %s failed.\n" +"Check that you have write permission to the target path\n" +msgstr "" +"បានបរាជ័យក្នុងការនាំចេញ %s ។\n" +"ពិនិត្យថា អ្នកមានសិទ្ធិសរសេរទៅកាន់ផ្លូវគោលដៅ\n" + +msgid "Certificate Export Error" +msgstr "កំហុសក្នុងការនាំវិញ្ញាបនបត្រចេញ" + +msgid "X.509 certificate export failed" +msgstr "បានបរាជ័យក្នុងការនាំវិញ្ញាបនបត្រ X.509 ចេញ" + +msgid "PEM X.509 Certificate Export" +msgstr "នាំវិញ្ញាបនបត្រ PEM X.509 ចេញ" + +#, c-format +msgid "Certificate for %s" +msgstr "វិញ្ញាបនបត្រ %s" + +#, c-format +msgid "" +"Common name: %s\n" +"\n" +"SHA1 fingerprint:\n" +"%s" +msgstr "" +"ឈ្មោះធម្មតា ៖ %s\n" +"\n" +"ស្នាម្រាមដៃ SHA1 ៖\n" +"%s" + +msgid "SSL Host Certificate" +msgstr "វិញ្ញាបនបត្រ SSL Host" + +#, c-format +msgid "Really delete certificate for %s?" +msgstr "ពិតជាចង់លុបវិញ្ញាបនបត្រសម្រាប់ %s ឬ ?" + +msgid "Confirm certificate delete" +msgstr "អះអាងការលុបវិញ្ញាបនបត្រ" + +msgid "Certificate Manager" +msgstr "កម្មវិធីគ្រប់គ្រងវិញ្ញាបនបត្រ" + +#. Creating the user splits +msgid "Hostname" +msgstr "ឈ្មោះម៉ាស៊ីន" + +msgid "Info" +msgstr "ព័ត៌មាន" + +#. Close button +msgid "Close" +msgstr "បិទ" + +#, c-format +msgid "%s (%s)" +msgstr "%s (%s)" + +#, c-format +msgid "%s disconnected." +msgstr "បានផ្ដាច់ %s ។" + +#, c-format +msgid "" +"%s\n" +"\n" +"Finch will not attempt to reconnect the account until you correct the error " +"and re-enable the account." +msgstr "" +"%s\n" +"\n" +"បក្សីនឹងមិនប៉ុនប៉ងតភ្ជាប់គណនីឡើងវិញ រហូតដល់អ្នកកែ និងបើកគណនីឡើងវិញ ។" + +msgid "Re-enable Account" +msgstr "បើកគណនីឡើងវិញ" + +msgid "" +"The account has disconnected and you are no longer in this chat. You will be " +"automatically rejoined in the chat when the account reconnects." +msgstr "" +"គណនីបានផ្ដាច់ ហើយអ្នកមិននៅក្នុងការជជែកនេះទៀតទេ ។ អ្នកនឹងត្រូវបានចូលឡើងវិញដោយស្វ័យប្រវត្តិនៅ" +"ក្នុងការជជែក នៅពេលអ្នកតភ្ជាប់គណនីនេះឡើងវិញ ។" + +msgid "No such command." +msgstr "គ្មានពាក្យបញ្ជាបែបនេះទេ ។" + +msgid "Syntax Error: You typed the wrong number of arguments to that command." +msgstr "កំហុសវាក្យសម្ព័ន្ធ ៖ អ្នកបានវាយចំនួនអាគុយម៉ង់មិនត្រឹមត្រូវចំពោះពាក្យបញ្ជានោះទេ ។" + +msgid "Your command failed for an unknown reason." +msgstr "ពាក្យបញ្ជារបស់អ្នកបានបរាជ័យដោយសារមិនស្គាល់ហេតុផល ។" + +msgid "That command only works in chats, not IMs." +msgstr "ពាក្យបញ្ជានោះដំណើរតែនៅក្នុងការជជែកប៉ុណ្ណោះ មិនមែន IMs ។" + +msgid "That command only works in IMs, not chats." +msgstr "ពាក្យបញ្ជានោះដំណើរការតែនៅក្នុង IMs ប៉ុណ្ណោះ មិននៅក្នុងការជជែកទេ ។" + +msgid "That command doesn't work on this protocol." +msgstr "ពាក្យបញ្ជានោះមិនដំណើរការនៅលើពិធីការនេះទេ ។" + +msgid "Message was not sent, because you are not signed on." +msgstr "សារមិនត្រូវបានផ្ញើទេ ពីព្រោះអ្នកមិនបានចូលទេ ។" + +#, c-format +msgid "%s (%s -- %s)" +msgstr "%s (%s -- %s)" + +#, c-format +msgid "%s [%s]" +msgstr "%s [%s]" + +#, c-format +msgid "" +"\n" +"%s is typing..." +msgstr "" +"\n" +"%s កំពុងវាយ..." + +msgid "You have left this chat." +msgstr "អ្នកបានចេញពីការជជែកនេះហើយ ។" + +msgid "Logging started. Future messages in this conversation will be logged." +msgstr "បានចាប់ផ្ដើមចុះកំណត់ហេតុ ។ សារបន្តទៀតនៅក្នុងការសន្ទនានឹងត្រូវបានចុះកំណត់ហេតុ ។" + +msgid "" +"Logging stopped. Future messages in this conversation will not be logged." +msgstr "បានបញ្ចប់ការចុះកំណត់ហេតុ ។ សារបន្តបន្ទាប់ទៀតនៅក្នុងការសន្ទនានឹងមិនត្រូវបានចុះកំណត់ហេតុទេ ។" + +msgid "Send To" +msgstr "ផ្ញើទៅ" + +msgid "Invite message" +msgstr "សារអញ្ជើញ" + +msgid "Invite" +msgstr "អញ្ជើញ" + +msgid "" +"Please enter the name of the user you wish to invite,\n" +"along with an optional invite message." +msgstr "" +"សូមបញ្ចូលឈ្មោះអ្នកប្រើដែលអ្នកចង់អញ្ជើញ\n" +"រួមជាមួយនឹងសារអញ្ជើញជាជម្រើស ។" + +msgid "Conversation" +msgstr "ការសន្ទនា" + +msgid "Clear Scrollback" +msgstr "ជម្រះការរមូរថយក្រោយ" + +msgid "Show Timestamps" +msgstr "បង្ហាញត្រាពេលវេលា" + +msgid "Add Buddy Pounce..." +msgstr "បន្ថែមក្រុមមិត្តភក្ដិ..." + +msgid "Invite..." +msgstr "អញ្ជើញ..." + +msgid "Enable Logging" +msgstr "បើកការចុះកំណត់ហេតុ" + +msgid "Enable Sounds" +msgstr "បើកសំឡេង" + +msgid "<AUTO-REPLY> " +msgstr "<AUTO-REPLY> " + +#, c-format +msgid "List of %d user:\n" +msgid_plural "List of %d users:\n" +msgstr[0] "បញ្ជីអ្នកប្រើ %d ៖\n" + +msgid "Supported debug options are: version" +msgstr "ជម្រើសបំបាត់កំហុសដែលបានគាំទ្រគឺ ៖ កំណែ" + +msgid "No such command (in this context)." +msgstr "គ្មានពាក្យបញ្ជាបែបនេះទេ (នៅក្នុងបរិបទនេះ) ។" + +msgid "" +"Use \"/help <command>\" for help on a specific command.\n" +"The following commands are available in this context:\n" +msgstr "" +"ប្រើ \"/help <command>\" សម្រាប់ជំនួយអំពីពាក្យបញ្ជាជាក់លាក់ ។\n" +"ពាក្យបញ្ជាដូចខាងក្រោមអាចប្រើនៅក្នុងបរិបទនេះ ៖\n" + +#, c-format +msgid "" +"%s is not a valid message class. See '/help msgcolor' for valid message " +"classes." +msgstr "" +"%s មិនមែនជាថ្នាក់សារត្រឹមត្រូវតែ ។ សូមមើល '/help msgcolor' សម្រាប់ថ្នាក់សារដែលត្រឹមត្រូវ ។" + +#, c-format +msgid "%s is not a valid color. See '/help msgcolor' for valid colors." +msgstr "%s មិនមែនជាពណ៌ត្រឹមត្រូវទែ ។ សូមមើល '/help msgcolor' សម្រាប់ពណ៌ដែលត្រឹមត្រូវ ។" + +msgid "" +"say <message>: Send a message normally as if you weren't using a " +"command." +msgstr "និយាយ <message> ៖ ផ្ញើសារតាមធម្មតា ដូចដែលអ្នកមិនកំពុងប្រើពាក្យបញ្ជា ។" + +msgid "me <action>: Send an IRC style action to a buddy or chat." +msgstr "ខ្ញុំ <action> ៖ ផ្ញើសកម្មភាពរចនាប័ទ្ម IRC ទៅកាន់មិត្តភក្ដិ ឬការជជែក ។" + +msgid "" +"debug <option>: Send various debug information to the current " +"conversation." +msgstr "បំបាត់កំហុស <option> ៖ ផ្ញើព័ត៌មានបំបាត់កំហុសផ្សេងៗទៅកាន់ការសន្ទនាបច្ចុប្បន្ន ។" + +msgid "clear: Clears the conversation scrollback." +msgstr "ជម្រះ ៖ ជម្រះការសន្ទនា ។" + +msgid "help <command>: Help on a specific command." +msgstr "ជំនួយ <command> ៖ ជួយពាក្យបញ្ជាក់ជាក់លាក់ ។" + +msgid "users: Show the list of users in the chat." +msgstr "អ្នកប្រើ ៖ បង្ហាញបញ្ជីអ្នកប្រើនៅក្នុងការជជែក ។" + +msgid "plugins: Show the plugins window." +msgstr "កម្មវិធី ៖ បង្ហាញបង្អួចកម្មវិធីជំនួយ ។" + +msgid "buddylist: Show the buddylist." +msgstr "បញ្ជីមិត្តភក្ដិ ៖ បង្ហាញបញ្ជីមិត្តភក្ដិ ។" + +msgid "accounts: Show the accounts window." +msgstr "គណនី ៖ បង្ហាញបង្អួចគណនី ។" + +msgid "debugwin: Show the debug window." +msgstr "debugwin ៖ បង្ហាញបង្អួចបំបាត់កំហុស ។" + +msgid "prefs: Show the preference window." +msgstr "prefs ៖ បង្ហាញបង្អួចចំណូលចិត្ត ។" + +msgid "statuses: Show the savedstatuses window." +msgstr "ស្ថានភាព ៖ បង្ហាញបង្អួចស្ថានភាពរក្សាទុក ។" + +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 <class> <foreground> <background> កំណត់ពណ៌សម្រាប់ថ្នាក់" +"ផ្សេងៗរបស់សារនៅក្នុងបង្អួចសន្ទនា ។<br> <class> ៖ ទទួល ផ្ញើ បន្លិច សកម្មភាព " +"ត្រាពេលវេលា<br> <foreground/background> ៖ ខ្មៅ ក្រហម បៃតង ស ប្រផេះ ប្រផេះ" +"ដិត ស្វាយ ផ្ទៃមេឃ លំនាំដើម<br><br>ឧទាហរណ៍ ៖<br> msgcolor ផ្ញើពណ៌ផ្ទៃមេឃលំនាំដើម" + +msgid "Unable to open file." +msgstr "មិនអាចបើកឯកសារបានទេ ។" + +msgid "Debug Window" +msgstr "បង្អួចបំបាត់កំហុស" + +#. XXX: Setting the GROW_Y for the following widgets don't make sense. But right now +#. * it's necessary to make the width of the debug window resizable ... like I said, +#. * it doesn't make sense. The bug is likely in the packing in gntbox.c. +#. +msgid "Clear" +msgstr "ជម្រះ" + +msgid "Filter:" +msgstr "តម្រង ៖" + +msgid "Pause" +msgstr "ផ្អាក" + +#, c-format +msgid "File Transfers - %d%% of %d file" +msgid_plural "File Transfers - %d%% of %d files" +msgstr[0] "ការផ្ទេរឯកសារ - ឯកសារ %d%% នៃ %d" + +#. Create the window. +msgid "File Transfers" +msgstr "ផ្ទេរឯកសារ" + +msgid "Progress" +msgstr "វឌ្ឍនភាព" + +msgid "Filename" +msgstr "ឈ្មោះឯកសារ" + +msgid "Size" +msgstr "ទំហំ" + +msgid "Speed" +msgstr "ល្បឿន" + +msgid "Remaining" +msgstr "នៅសល់" + +#. XXX: Use of ggp_str_to_uin() is an ugly hack! +msgid "Status" +msgstr "ស្ថានភាព" + +msgid "Close this window when all transfers finish" +msgstr "បិទបង្អួចនេះនៅពេលការផ្ទេរទាំងអស់ចប់" + +msgid "Clear finished transfers" +msgstr "ជម្រះការផ្ទេរដែលចប់" + +msgid "Stop" +msgstr "បញ្ឈប់" + +msgid "Waiting for transfer to begin" +msgstr "រង់ចាំការផ្ទេរចាប់ផ្ដើម" + +msgid "Canceled" +msgstr "បានបោះបង់" + +msgid "Failed" +msgstr "បានបរាជ័យ" + +#, c-format +msgid "%.2f KiB/s" +msgstr "%.2f KiB/s" + +msgid "Sent" +msgstr "បានផ្ញើ" + +msgid "Received" +msgstr "បានទទួល" + +msgid "Finished" +msgstr "បានបញ្ចប់" + +#, c-format +msgid "The file was saved as %s." +msgstr "ឯកសារត្រូវបានរក្សាទុកជា %s ។" + +msgid "Sending" +msgstr "ការផ្ញើ" + +msgid "Receiving" +msgstr "ការទទួល" + +#, c-format +msgid "Conversation in %s on %s" +msgstr "ការសន្ទនានៅក្នុង %s លើ %s" + +#, c-format +msgid "Conversation with %s on %s" +msgstr "ការសន្ទនាជាមួយ %s នៅលើ %s" + +msgid "%B %Y" +msgstr "%B %Y" + +msgid "" +"System events will only be logged if the \"Log all status changes to system " +"log\" preference is enabled." +msgstr "" +"ព្រឹត្តិការណ៍ប្រព័ន្ធនឹងត្រូវបានចុះកំណត់ហេតុ តែក្នុងករណីដែលចំណូលចិត្ត \"ចុះកំណត់ហេតុការផ្លាស់ប្ដូរស្ថានភាព" +"ប្រព័ន្ធ\" ត្រូវបានបើក ។" + +msgid "" +"Instant messages will only be logged if the \"Log all instant messages\" " +"preference is enabled." +msgstr "" +"សារបន្ទាន់នឹងត្រូវបានចុះកំណត់ហេតុតែក្នុងករណីដែលចំណូលចិត្ត \"ចុះកំណត់ហេតុសារបន្ទាន់\" ត្រូវបានបើក ។" + +msgid "" +"Chats will only be logged if the \"Log all chats\" preference is enabled." +msgstr "" +"ការជជែកនឹងត្រូវបានចុះកំណត់ហេតុតែក្នុងករណីដែលចំណូលចិត្ត \"ចុះកំណត់ហេតុជជែកទាំងអស់\" ត្រូវបានបើក ។" + +msgid "No logs were found" +msgstr "រកមិនឃើញកំណត់ហេតុទេ" + +msgid "Total log size:" +msgstr "ទំហំកំណត់ហេតុសរុប ៖" + +#. Search box ********* +msgid "Scroll/Search: " +msgstr "រមូរ/ស្វែងរក ៖ " + +#, c-format +msgid "Conversations in %s" +msgstr "ការសន្ទនានៅក្នុង %s" + +#, c-format +msgid "Conversations with %s" +msgstr "ការសន្ទនាជាមួយ %s" + +msgid "All Conversations" +msgstr "ការសន្ទនាទាំងអស់" + +msgid "System Log" +msgstr "កំណត់ហេតុប្រព័ន្ធ" + +msgid "Emails" +msgstr "អ៊ីមែល" + +msgid "You have mail!" +msgstr "អ្នកមានសំបុត្រ !" + +msgid "Sender" +msgstr "អ្នកផ្ញើ" + +msgid "Subject" +msgstr "ប្រធានបទ" + +#, c-format +msgid "%s (%s) has %d new message." +msgid_plural "%s (%s) has %d new messages." +msgstr[0] "%s (%s) មានសារថ្មី %d ។" + +msgid "New Mail" +msgstr "សំបុត្រថ្មីុត្រ" + +#, c-format +msgid "Info for %s" +msgstr "ព័ត៌មានសម្រាប់ %s" + +msgid "Buddy Information" +msgstr "ព័ត៌មានអំពីមិត្តភក្ដិ" + +msgid "Continue" +msgstr "បន្ត" + +msgid "IM" +msgstr "IM" + +msgid "(none)" +msgstr "(គ្មាន)" + +msgid "URI" +msgstr "URI" + +msgid "ERROR" +msgstr "កំហុស" + +msgid "loading plugin failed" +msgstr "បានបរាជ័យក្នុងការផ្ទុកកម្មវិធីជំនួយ" + +msgid "unloading plugin failed" +msgstr "បានបរាជ័យក្នុងការមិនផ្ទុកកម្មវិធីជំនួយ" + +#, c-format +msgid "" +"Name: %s\n" +"Version: %s\n" +"Description: %s\n" +"Author: %s\n" +"Website: %s\n" +"Filename: %s\n" +msgstr "" +"ឈ្មោះ ៖ %s\n" +"កំណែ ៖ %s\n" +"សេចក្ដីពិពណ៌នា ៖ %s\n" +"អ្នកនិពន្ធ ៖ %s\n" +"តំបន់បណ្ដាញ ៖ %s\n" +"ឈ្មោះឯកសារ ៖ %s\n" + +msgid "Plugin need to be loaded before you can configure it." +msgstr "កម្មវិធីជំនួយត្រូវបានផ្ទុកមុននឹងអ្នកអាចកំណត់រចនាសម្ព័ន្ធ ។" + +msgid "No configuration options for this plugin." +msgstr "គ្មានជម្រើសកំណត់រចនាសម្ព័ន្ធសម្រាប់កម្មវិធីជំនួយនេះទេ ។" + +msgid "Error loading plugin" +msgstr "កំហុសក្នុងការផ្ទុកកម្មវិធីជំនួយ" + +msgid "The selected file is not a valid plugin." +msgstr "ឯកសារដែលបានជ្រើសមិនមែនជាកម្មវិធីជំនួយត្រឹមត្រូវទេ ។" + +msgid "" +"Please open the debug window and try again to see the exact error message." +msgstr "សូមបើកបង្អួចបំបាត់កំហុស ហើយព្យាយាមមើលសារកំហុសជាក់លាក់ ។" + +msgid "Select plugin to install" +msgstr "ជ្រើសកម្មវិធីជំនួយត្រូវដំឡើង" + +msgid "You can (un)load plugins from the following list." +msgstr "អ្នកអាចផ្ទុក/មិនផ្ទុកកម្មវិធីជំនួយពីបញ្ជីដូចខាងក្រោម ។" + +msgid "Install Plugin..." +msgstr "ដំឡើងកម្មវិធីជំនួយ..." + +msgid "Configure Plugin" +msgstr "កំណត់រចនាសម្ព័ន្ធកម្មវិធីជំនួយ" + +#. copy the preferences to tmp values... +#. * I liked "take affect immediately" Oh well :-( +#. (that should have been "effect," right?) +#. Back to instant-apply! I win! BU-HAHAHA! +#. Create the window +msgid "Preferences" +msgstr "ចំណូលចិត្ត" + +msgid "Please enter a buddy to pounce." +msgstr "សូមបញ្ចូលមិត្តភក្តិទៅក្រុម ។" + +msgid "New Buddy Pounce" +msgstr "ក្រុមមិត្តភក្ដិថ្មី" + +msgid "Edit Buddy Pounce" +msgstr "កែសម្រួលក្រុមមិត្តភក្ដិ" + +msgid "Pounce Who" +msgstr "ក្រុមជានរណា" + +#. Account: +msgid "Account:" +msgstr "គណនី ៖" + +msgid "Buddy name:" +msgstr "ឈ្មោះមិត្តភក្ដិ ៖" + +#. Create the "Pounce When Buddy..." frame. +msgid "Pounce When Buddy..." +msgstr "ដាក់មិត្តភក្តិជាក្រុម..." + +msgid "Signs on" +msgstr "ចូល" + +msgid "Signs off" +msgstr "ចេញទ" + +msgid "Goes away" +msgstr "ចាកឆ្ងាយ" + +msgid "Returns from away" +msgstr "ត្រឡប់ពីការចាកឆ្ងាយ" + +msgid "Becomes idle" +msgstr "ក្លាយជាទំនេរ" + +msgid "Is no longer idle" +msgstr "លែងទំនេរទៀតហើយ" + +msgid "Starts typing" +msgstr "ចាប់ផ្ដើមវាយ" + +msgid "Pauses while typing" +msgstr "ផ្អាកខណៈពេលវាយ" + +msgid "Stops typing" +msgstr "ឈប់វាយ" + +msgid "Sends a message" +msgstr "ផ្ញើសារ" + +#. Create the "Action" frame. +msgid "Action" +msgstr "សកម្មភាពើ" + +msgid "Open an IM window" +msgstr "បើកបង្អួច IM" + +msgid "Pop up a notification" +msgstr "ការជូនដំណឹងពេលលេចឡើង" + +msgid "Send a message" +msgstr "ផ្ញើសារ" + +msgid "Execute a command" +msgstr "ប្រតិបត្តិពាក្យបញ្ជា" + +msgid "Play a sound" +msgstr "ចាក់សំឡេង" + +msgid "Pounce only when my status is not Available" +msgstr "ដាក់ក្រុមនៅពេលដែលស្ថានភាពរបស់ខ្ញុំមិនអាចជជែកបាន" + +msgid "Recurring" +msgstr "កើតឡើងវិញ" + +msgid "Cannot create pounce" +msgstr "មិនអាចបង្កើតក្រុមបានទេ" + +msgid "You do not have any accounts." +msgstr "អ្នកមិនមានគណនីទេ ។" + +msgid "You must create an account first before you can create a pounce." +msgstr "អ្នកត្រូវតែបង្កើតគណនីសិនមុននឹងអ្នកអាចបង្កើតក្រុមបាន ។" + +#, c-format +msgid "Are you sure you want to delete the pounce on %s for %s?" +msgstr "តើអ្នកប្រាកដជាចង់លុបក្រុមនៅលើ %s សម្រាប់ %s ឬ?" + +msgid "Buddy Pounces" +msgstr "ក្រុមមិត្តភក្ដិ" + +#, c-format +msgid "%s has started typing to you (%s)" +msgstr "%s បានចាប់ផ្ដើមវាយទៅឲ្យអ្នក (%s)" + +#, c-format +msgid "%s has paused while typing to you (%s)" +msgstr "%s បានផ្អាក ខណៈពេលវាយទៅឲ្យអ្នក (%s)" + +#, c-format +msgid "%s has signed on (%s)" +msgstr "%s បានចុះហត្ថលេខាលើ (%s)" + +#, c-format +msgid "%s has returned from being idle (%s)" +msgstr "%s បានត្រឡប់ពីស្ថានភាពទំនេរ (%s)" + +#, c-format +msgid "%s has returned from being away (%s)" +msgstr "%s បានត្រឡប់ពីស្ថានភាពចាកឆ្ងាយ (%s)" + +#, c-format +msgid "%s has stopped typing to you (%s)" +msgstr "%s បានឈប់វាយទៅឲ្យអ្នក (%s)" + +#, c-format +msgid "%s has signed off (%s)" +msgstr "%s បានចេញ (%s)" + +#, c-format +msgid "%s has become idle (%s)" +msgstr "%s បានក្លាយជាទំនេរ (%s)" + +#, c-format +msgid "%s has gone away. (%s)" +msgstr "%s មានទៅឆ្ងាយ ។ (%s)" + +#, c-format +msgid "%s has sent you a message. (%s)" +msgstr "%s បានផ្ញើសារឲ្យអ្នក ។ (%s)" + +#, c-format +msgid "Unknown pounce event. Please report this!" +msgstr "មិនស្គាល់ព្រឹត្តិការណ៍ក្រុម ។ សូមរាយការណ៍វា !" + +msgid "Based on keyboard use" +msgstr "មានមូលដ្ឋានលើការប្រើក្ដារចុច" + +msgid "From last sent message" +msgstr "ពីសារដែលបានផ្ញើចុងក្រោយ" + +msgid "Never" +msgstr "មិនដែល" + +msgid "Show Idle Time" +msgstr "បង្ហាញពេលទំនេរ" + +msgid "Show Offline Buddies" +msgstr "បង្ហាញមិត្តភក្ដិដែលនៅក្រៅបណ្ដាញ" + +msgid "Notify buddies when you are typing" +msgstr "ជូនដំណឹងមិត្តភក្តិ នៅពេលអ្នកកំពុងវាយ" + +msgid "Log format" +msgstr "ទ្រង់ទ្រាយកំណត់ហេតុ" + +msgid "Log IMs" +msgstr "ចុះកំណត់ហេតុ IMs" + +msgid "Log chats" +msgstr "ចុះកំណត់ហេតុការជជែក" + +msgid "Log status change events" +msgstr "ចុះកំណត់ហេតុព្រឹត្តិការណ៍ផ្លាស់ប្ដូរ" + +msgid "Report Idle time" +msgstr "រាយការណ៍ពេលវេលាទំនេរ" + +msgid "Change status when idle" +msgstr "ផ្លាស់ប្ដូរស្ថានភាពនៅពេលទំនេរ" + +msgid "Minutes before changing status" +msgstr "ប៉ុន្មាននាទីមុនពេលផ្លាស់ប្ដូរស្ថានភាព" + +msgid "Change status to" +msgstr "ផ្លាស់ប្ដូរស្ថានភាពទៅជា" + +msgid "Conversations" +msgstr "ការសន្ទនា" + +msgid "Logging" +msgstr "ចុះកំណត់ហេតុ" + +msgid "You must fill all the required fields." +msgstr "អ្នកត្រូវតែបំពេញវាលដែលត្រូវការទាំងអស់ ។" + +msgid "The required fields are underlined." +msgstr "វាលដែលត្រូវការត្រូវបានគូសបន្ទាត់ខាងក្រោម ។" + +msgid "Not implemented yet." +msgstr "មិនបានអនុវត្តនៅឡើយទេ ។" + +msgid "Save File..." +msgstr "រក្សាទុកឯកសារ..." + +msgid "Open File..." +msgstr "បើកឯកសារ..." + +msgid "Choose Location..." +msgstr "ជ្រើសទីតាំង..." + +msgid "Hit 'Enter' to find more rooms of this category." +msgstr "ចុចគ្រាប់ចុច 'បញ្ចូល (Enter)' ដើម្បីរកបន្ទប់ផ្សេងៗទៀតនៃប្រភេទនេះ ។" + +msgid "Get" +msgstr "យក" + +#. Create the window. +msgid "Room List" +msgstr "បញ្ជីបន្ទប់" + +msgid "Buddy logs in" +msgstr "មិត្តភក្ដិចូល" + +msgid "Buddy logs out" +msgstr "មិត្តភក្ដិចេញ" + +msgid "Message received" +msgstr "បានទទួលសារ" + +msgid "Message received begins conversation" +msgstr "បានទទួលសារចាប់ផ្ដើមសន្ទនា" + +msgid "Message sent" +msgstr "បានផ្ញើសារ" + +msgid "Person enters chat" +msgstr "មនុស្សចូលក្នុងការជជែក" + +msgid "Person leaves chat" +msgstr "មនុស្សចេញពីការជជែក" + +msgid "You talk in chat" +msgstr "អ្នកនិយាយនៅក្នុងការជជែក" + +msgid "Others talk in chat" +msgstr "អ្នកផ្សេងនិយាយនៅក្នុងការជជែក" + +msgid "Someone says your username in chat" +msgstr "មានមនុស្សម្នាក់និយាយអំពីឈ្មោះអ្នកប្រើរបស់អ្នកនៅក្នុងការជជែក" + +msgid "GStreamer Failure" +msgstr "ភាពបរាជ័យរបស់ GStreamer" + +msgid "GStreamer failed to initialize." +msgstr "GStreamer បានបរាជ័យក្នុងការចាប់ផ្ដើម ។" + +msgid "(default)" +msgstr "(លំនាំដើម)" + +msgid "Select Sound File ..." +msgstr "ជ្រើសឯកសារសំឡេង..." + +msgid "Sound Preferences" +msgstr "ចំណូលចិត្តសំឡេង" + +msgid "Profiles" +msgstr "ទម្រង់" + +msgid "Automatic" +msgstr "ស្វ័យប្រវត្តិ" + +msgid "Console Beep" +msgstr "ប៊ីបកុងសូល" + +msgid "Command" +msgstr "ពាក្យបញ្ជា" + +msgid "No Sound" +msgstr "គ្មានសំឡេង" + +msgid "Sound Method" +msgstr "វិធីសាស្ត្រសំឡេង" + +msgid "Method: " +msgstr "វិធីសាស្ត្រ ៖ " + +#, c-format +msgid "" +"Sound Command\n" +"(%s for filename)" +msgstr "" +"ពាក្យសំឡេង\n" +"(%s សម្រាប់ឈ្មោះឯកសារ)" + +#. Sound options +msgid "Sound Options" +msgstr "ជម្រើសសំឡេង" + +msgid "Sounds when conversation has focus" +msgstr "សំឡេង នៅពេលការសន្ទនាមានការផ្ដោត" + +msgid "Always" +msgstr "ជានិច្ច" + +msgid "Only when available" +msgstr "តែនៅពេលប្រើបាន" + +msgid "Only when not available" +msgstr "តែនៅពេលមិនអាចប្រើបាន" + +msgid "Volume(0-100):" +msgstr "កម្រិតសំឡេង (១-១០០) ៖" + +#. Sound events +msgid "Sound Events" +msgstr "ព្រឹត្តិការណ៍សំឡេង" + +msgid "Event" +msgstr "ព្រឹត្តិការណ៍" + +msgid "File" +msgstr "ឯកសារ" + +msgid "Test" +msgstr "សាកល្បង" + +msgid "Reset" +msgstr "កំណត់ឡើងវិញ" + +msgid "Choose..." +msgstr "ជ្រើស..." + +#, c-format +msgid "Are you sure you want to delete \"%s\"" +msgstr "តើអ្នកប្រាកដជាចង់លុប \"%s\" ឬ" + +msgid "Delete Status" +msgstr "លុបស្ថានភាព" + +msgid "Saved Statuses" +msgstr "ស្ថានភាពដែលបានរក្សាទុក" + +msgid "Title" +msgstr "ចំណងជើង" + +msgid "Type" +msgstr "ប្រភេទ" + +#. Statuses are almost all the same. Define a macro to reduce code repetition. +#. PurpleStatusPrimitive +#. id - use default +#. name - use default +#. saveable +#. user_settable +#. not independent +#. Attributes - each status can have a message. +msgid "Message" +msgstr "សារ" + +#. Use +msgid "Use" +msgstr "ប្រើ" + +msgid "Invalid title" +msgstr "ចំណងជើងមិនត្រឹមត្រូវ" + +msgid "Please enter a non-empty title for the status." +msgstr "សូមបញ្ចូលចំណងជើងដែលសម្រាប់ស្ថានភាព ។" + +msgid "Duplicate title" +msgstr "ស្ទួនចំណងជើង" + +msgid "Please enter a different title for the status." +msgstr "សូមបញ្ចូលចំណងជើងផ្សេងសម្រាប់ស្ថានភាព ។" + +msgid "Substatus" +msgstr "ស្ថានភាពរង" + +msgid "Status:" +msgstr "ស្ថានភាព ៖" + +msgid "Message:" +msgstr "សារ ៖" + +msgid "Edit Status" +msgstr "កែសម្រួលស្ថានភាព" + +msgid "Use different status for following accounts" +msgstr "ប្រើស្ថានភាពផ្សេងសម្រាប់គណនីដូចខាងក្រោម" + +#. Save & Use +msgid "Save & Use" +msgstr "រក្សាទុកការប្រើើ" + +msgid "Certificates" +msgstr "វិញ្ញាបនបត្រ" + +msgid "Sounds" +msgstr "សំឡេង" + +msgid "Statuses" +msgstr "ស្ថានភាព" + +msgid "Error loading the plugin." +msgstr "កំហុសក្នុងការផ្ទុកកម្មវិធីជំនួយ ។" + +msgid "Couldn't find X display" +msgstr "មិនអាចរកការបង្ហាញ X" + +msgid "Couldn't find window" +msgstr "មិនអាចរកបង្អួច" + +msgid "This plugin cannot be loaded because it was not built with X11 support." +msgstr "កម្មវិធីជំនួយនេះមិនអាចត្រូវបានផ្ទុកទេ ពីព្រោះវាមិនត្រូវបានស្ថានបនាដោយមានការគាំទ្រ X11 ។" + +msgid "GntClipboard" +msgstr "GntClipboard" + +msgid "Clipboard plugin" +msgstr "កម្មវិធីជំនួយការតម្បៀតខ្ទាស់" + +msgid "" +"When the gnt clipboard contents change, the contents are made available to " +"X, if possible." +msgstr "នៅពេលផ្លាស់ប្ដូរមាតិកាក្តារតម្បៀតខ្ទាស់ gnt មាតិកាអាចប្រើបានចំពោះX ប្រសិនបើអាច ។" + +#, c-format +msgid "%s just signed on" +msgstr "%s ទើបតែចូល" + +#, c-format +msgid "%s just signed off" +msgstr "%s ទើបតែចេញ" + +#, c-format +msgid "%s sent you a message" +msgstr "%s បានផ្ញើសារឲ្យអ្នក" + +#, c-format +msgid "%s said your nick in %s" +msgstr "%s បាននិយាយសម្មតិនាមរបស់អ្នកនៅក្នុង %s" + +#, c-format +msgid "%s sent a message in %s" +msgstr "%s បានផ្ញើសារនៅក្នុង %s" + +msgid "Buddy signs on/off" +msgstr "មិត្តិភក្តិបិទ/បើក" + +msgid "You receive an IM" +msgstr "អ្នកទទួល IM" + +msgid "Someone speaks in a chat" +msgstr "មនុស្សម្នាក់និយាយនៅក្នុងការជជែក" + +msgid "Someone says your name in a chat" +msgstr "មនុស្សម្នាក់និយាយឈ្មោះរបស់អ្នកនៅក្នុងការជជែក" + +msgid "Notify with a toaster when" +msgstr "ជូនដំណឹងដោយសញ្ញានៅពេល" + +msgid "Beep too!" +msgstr "ប៊ីបដែរ !" + +msgid "Set URGENT for the terminal window." +msgstr "កំណត់ជាបន្ទាន់ សម្រាប់បង្អួចស្ថានីយ ។" + +msgid "GntGf" +msgstr "GntGf" + +msgid "Toaster plugin" +msgstr "កម្មវិធីជំនួយ Toaster" + +#, c-format +msgid "<b>Conversation with %s on %s:</b><br>" +msgstr "<b>ការសន្ទនាជាមួយ %s នៅលើ %s ៖</b><br>" + +msgid "History Plugin Requires Logging" +msgstr "កម្មវិធីជំនួយប្រវត្តិតម្រូវឲ្យចូលសិន" + +msgid "" +"Logging can be enabled from Tools -> Preferences -> Logging.\n" +"\n" +"Enabling logs for instant messages and/or chats will activate history for " +"the same conversation type(s)." +msgstr "" +"ការចូលអាចត្រូវបានបើកតាមរយៈម៉ឺនុយ ឧបករណ៍ -> ចំណូលចិត្ត -> ការចូល ។\n" +"\n" +"ការបើកកំណត់ហេតុសម្រាប់សារបន្ទាន់ និង/ឬការជជែកនឹងធ្វើឲ្យប្រវត្តិសកម្មសម្រាប់ប្រភេទការសន្ទនា" +"ដូចគ្នា ។" + +msgid "GntHistory" +msgstr "GntHistory" + +msgid "Shows recently logged conversations in new conversations." +msgstr "បង្ហាញការសន្ទនាដែលបានចូលបច្ចុប្បន្ននៅក្នុងការសន្ទនាថ្មី ។" + +msgid "" +"When a new conversation is opened this plugin will insert the last " +"conversation into the current conversation." +msgstr "" +"នៅពេលការសន្ទនាថ្មីត្រូវបានបើក កម្មវិធីជំនួយនេះនឹងបញ្ចូលការសន្ទនាចុងក្រោយទៅក្នុងការសន្ទនា" +"បច្ចុប្បន្ន ។" + +msgid "Online" +msgstr "លើបណ្ដាញ" + +msgid "Offline" +msgstr "ក្រៅបណ្តាញ" + +msgid "Online Buddies" +msgstr "មិត្តភក្ដិលើបណ្ដាញ" + +msgid "Offline Buddies" +msgstr "មិត្តភក្ដិក្រៅបណ្តាញ" + +msgid "Online/Offline" +msgstr "លើបណ្ដាញ/ក្រៅបណ្ដាញ" + +msgid "Meebo" +msgstr "Meebo" + +msgid "No Grouping" +msgstr "គ្មានការដាក់ជាក្រុម" + +msgid "Nested Subgroup" +msgstr "ក្រុមរងខាងក្នុង" + +msgid "Nested Grouping (experimental)" +msgstr "ការដាក់ជាក្រុមខាងក្នុង (ពិសោធន៍)" + +msgid "Provides alternate buddylist grouping options." +msgstr "ផ្ដល់នូវជម្រើសដាក់ជាក្រុមនូវបញ្ជីមិត្តភក្ដិជំនួស ។" + +msgid "Lastlog" +msgstr "កំណត់ហេតុចុងក្រោយ" + +#. Translator Note: The "backlog" is the conversation buffer/history. +msgid "lastlog: Searches for a substring in the backlog." +msgstr "កំណត់ហេតុចុងក្រោយ ៖ ស្វែងរកខ្សែអក្សររងនៅក្នុងកំណត់ហេតុខ្មៅ ។" + +msgid "GntLastlog" +msgstr "GntLastlog" + +msgid "Lastlog plugin." +msgstr "កម្មវិធីជំនួយកំណត់ហេតុចុងក្រោយ ។" + +msgid "accounts" +msgstr "គណនី" + +msgid "Password is required to sign on." +msgstr "ត្រូវការពាក្យសម្ងាត់ដើម្បីចូល ។" + +#, c-format +msgid "Enter password for %s (%s)" +msgstr "បញ្ចូលពាក្យសម្ងាត់សម្រាប់ %s (%s)" + +msgid "Enter Password" +msgstr "បញ្ចូលពាក្យសម្ងាត់" + +msgid "Save password" +msgstr "រក្សាទុកពាក្យសម្ងាត់" + +#, c-format +msgid "Missing protocol plugin for %s" +msgstr "កម្មវិធីជំនួយពិធីការដែលបាត់សម្រាប់ %s" + +msgid "Connection Error" +msgstr "កំហុសក្នុងការតភ្ជាប់" + +msgid "New passwords do not match." +msgstr "ពាក្យសម្ងាត់ថ្មីមិនផ្គូផ្គងទេ ។" + +msgid "Fill out all fields completely." +msgstr "បំពេញវាលទាំងអស់ឲ្យចប់ ។" + +msgid "Original password" +msgstr "ពាក្យសម្ងាត់ដើម" + +msgid "New password" +msgstr "ពាក្យសម្ងាត់ថ្មី" + +msgid "New password (again)" +msgstr "ពាក្យសម្ងាត់ថ្មី (ថ្មី)" + +#, c-format +msgid "Change password for %s" +msgstr "ផ្លាស់ប្ដូរពាក្យសម្ងាត់ %s" + +msgid "Please enter your current password and your new password." +msgstr "សូមបញ្ចូលពាក្យសម្ងាត់បច្ចុប្បន្នរបស់អ្នក និងពាក្យសម្ងាត់ថ្មីរបស់អ្នក ។" + +#, c-format +msgid "Change user information for %s" +msgstr "ផ្លាស់ប្ដូរព័ត៌មានអ្នកប្រើសម្រាប់ %s" + +msgid "Set User Info" +msgstr "កំណត់ព័ត៌មានអ្នកប្រើ" + +msgid "Unknown" +msgstr "មិនស្គាល់" + +msgid "Buddies" +msgstr "មិត្តភក្ដិ" + +msgid "buddy list" +msgstr "បញ្ជីមិត្តភក្ដិ" + +msgid "(DOES NOT MATCH)" +msgstr "(មិនផ្គូផ្គង)" + +#. Make messages +#, c-format +msgid "%s has presented the following certificate for just-this-once use:" +msgstr "%s បានបង្ហាញវិញ្ញាបនបត្រសម្រាប់ការប្រើតែម្ដងនេះ ៖" + +#, c-format +msgid "" +"Common name: %s %s\n" +"Fingerprint (SHA1): %s" +msgstr "" +"ឈ្មោះធម្មតា ៖ %s %s\n" +"ស្នាមម្រាមដៃ (SHA1) ៖ %s" + +#. TODO: Find what the handle ought to be +msgid "Single-use Certificate Verification" +msgstr "ការផ្ទៀងផ្ទាត់វិញ្ញាបនបត្រដែលប្រើតែម្ដង" + +#. Scheme name +#. Pool name +msgid "Certificate Authorities" +msgstr "អាជ្ញាធរវិញ្ញាបនបត្រ" + +#. Scheme name +#. Pool name +msgid "SSL Peers Cache" +msgstr "ឃ្លាំងសម្ងាត់គូរ SSL" + +#. Make messages +#, c-format +msgid "Accept certificate for %s?" +msgstr "ទទួលវិញ្ញាបនបត្រសម្រាប់ %s?" + +#. TODO: Find what the handle ought to be +msgid "SSL Certificate Verification" +msgstr "ការផ្ទៀងផ្ទាត់វិញ្ញាបនបត្រ SSL" + +#. Number of actions +msgid "Accept" +msgstr "ទទួលរម" + +msgid "Reject" +msgstr "ច្រានចោលល" + +msgid "_View Certificate..." +msgstr "មើលវិញ្ញាបនបត្រ..." + +#. Prompt the user to authenticate the certificate +#. vrq will be completed by user_auth +#, c-format +msgid "" +"The certificate presented by \"%s\" is self-signed. It cannot be " +"automatically checked." +msgstr "" +"វិញ្ញាបនបត្របានបង្ហាញ \"%s\" ត្រូវបានចុះហត្ថលេខាដោយខ្លួនឯង ។ វាមិនអាចត្រូវបានត្រួតពិនិត្យដោយស្វ័យ" +"ប្រវត្តិទេ ។" + +#, c-format +msgid "The certificate chain presented for %s is not valid." +msgstr "ច្រវាក់វិញ្ញាបនបត្របានបង្ហាញសម្រាប់ %s មិនត្រឹមត្រូវទេ ។" + +#. TODO: Make this error either block the ensuing SSL +#. connection error until the user dismisses this one, or +#. stifle it. +#. TODO: Probably wrong. +#. TODO: Probably wrong +msgid "SSL Certificate Error" +msgstr "កំហុសវិញ្ញាបនបត្រ SSL" + +msgid "Invalid certificate chain" +msgstr "ច្រវាក់វិញ្ញាបនបត្រមិនត្រឹមត្រូវទេ" + +#. vrq will be completed by user_auth +msgid "" +"You have no database of root certificates, so this certificate cannot be " +"validated." +msgstr "" +"អ្នកមិនមានមូលដ្ឋានទិន្នន័យសម្រាប់វិញ្ញាបនបត្រ root ទេ ដូច្នេះវិញ្ញាបនបត្រនេះមិនអាចត្រូវ" +"បានផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវទេ ។" + +#. vrq will be completed by user_auth +msgid "" +"The root certificate this one claims to be issued by is unknown to Pidgin." +msgstr "វិញ្ញាបនបត្រ root មួយនេះទាមទារឲ្យចេញផ្សាយដោយអ្នកស្គាល់ទៅ Pidgin ។" + +#, c-format +msgid "" +"The certificate chain presented by %s does not have a valid digital " +"signature from the Certificate Authority from which it claims to have a " +"signature." +msgstr "" +"ច្រវាក់វិញ្ញាបនបត្របានបង្ហាញដោយ %s មិនមានហត្ថលេខាឌីជីថលត្រឹមត្រូវទេពីអាជ្ញាធរវិញ្ញាបនបត្រ ដែលវា" +"ទាមទារឲ្យមានហត្ថលេខា ។" + +msgid "Invalid certificate authority signature" +msgstr "ហត្ថលេខាអាជ្ញាធរវិញ្ញាបនបត្រមិនត្រឹមត្រូវ" + +#. Prompt the user to authenticate the certificate +#. TODO: Provide the user with more guidance about why he is +#. being prompted +#. vrq will be completed by user_auth +#, c-format +msgid "" +"The certificate presented by \"%s\" claims to be from \"%s\" instead. This " +"could mean that you are not connecting to the service you believe you are." +msgstr "" +"វិញ្ញាបនបត្របានបង្ហាញដោយ \"%s\" ដែលទាមទារពី \"%s\" ជំនួសវិញ ។ វាអាចមានន័យថា អ្នកមិនបាន" +"តភ្ជាប់ទៅកាន់សេវាដែលអ្នកជឿជាក់ ។" + +#. Make messages +#, c-format +msgid "" +"Common name: %s\n" +"\n" +"Fingerprint (SHA1): %s\n" +"\n" +"Activation date: %s\n" +"Expiration date: %s\n" +msgstr "" +"ឈ្មោះធម្មតា ៖ %s\n" +"\n" +"ស្នាមម្រាមដៃ (SHA1) ៖ %s\n" +"\n" +"កាលបរិច្ឆេទធ្វើឲ្យសកម្ម ៖ %s\n" +"កាលបរិច្ឆេទផុតកំណត់ ៖ %s\n" + +#. TODO: Find what the handle ought to be +msgid "Certificate Information" +msgstr "ព័ត៌មានវិញ្ញាបនបត្រ" + +msgid "Registration Error" +msgstr "កំហុសក្នុងការចុះឈ្មោះ" + +msgid "Unregistration Error" +msgstr "កំហុសក្នុងការមិនចុះឈ្មោះ" + +#, c-format +msgid "+++ %s signed on" +msgstr "+++ %s បានចូល" + +#, c-format +msgid "+++ %s signed off" +msgstr "+++ %s បានបិទ" + +msgid "Unknown error" +msgstr "មិនស្គាល់កំហុស" + +msgid "Unable to send message: The message is too large." +msgstr "មិនអាចផ្ញើសារបានទេ ៖ សារធំពេក ។" + +#, c-format +msgid "Unable to send message to %s." +msgstr "មិនអាចផ្ញើសារទៅកាន់ %s ។" + +msgid "The message is too large." +msgstr "សារធំពេក ។" + +msgid "Unable to send message." +msgstr "មិនអាចផ្ញើសារបានទេ ។" + +msgid "Send Message" +msgstr "ផ្ញើសារ" + +msgid "_Send Message" +msgstr "ផ្ញើសារ" + +#, c-format +msgid "%s entered the room." +msgstr "%s បានចូលក្នុងបន្ទប់ ។" + +#, c-format +msgid "%s [<I>%s</I>] entered the room." +msgstr "%s [<I>%s</I>] បានចូលក្នុងបន្ទប់ ។" + +#, c-format +msgid "You are now known as %s" +msgstr "ឥឡូវអ្នកត្រូវបានស្គាល់ជា %s" + +#, c-format +msgid "%s is now known as %s" +msgstr "%s ឥឡូវត្រូវបានស្គាល់ជា %s" + +#, c-format +msgid "%s left the room." +msgstr "%s បានចេញពីបន្ទប់ ។" + +#, c-format +msgid "%s left the room (%s)." +msgstr "%s បានចេញពីបន្ទប់ (%s) ។" + +#, c-format +msgid "Failed to get connection: %s" +msgstr "បានបរាជ័យក្នុងការតភ្ជាប់ ៖ %s" + +#, c-format +msgid "Failed to get name: %s" +msgstr "បានបរាជ័យក្នុងការទទួលឈ្មោះ ៖ %s" + +#, c-format +msgid "Failed to get serv name: %s" +msgstr "បានបរាជ័យក្នុងការបម្រុងទុកឈ្មោះ ៖ %s" + +msgid "Purple's D-BUS server is not running for the reason listed below" +msgstr "ម៉ាស៊ីនបម្រើ D-BUS របស់ Purple មិនកំពុងរត់ទេ ចំពោះហេតុផលរាយនៅខាងក្រោម" + +msgid "No name" +msgstr "គ្មានឈ្មោះ" + +msgid "Unable to create new resolver process\n" +msgstr "មិនអាចបង្កើតដំណើរការរបស់កម្មវិធីដោះស្រាយថ្មីបានទេ\n" + +msgid "Unable to send request to resolver process\n" +msgstr "មិនអាចផ្ញើសំណើទៅកាន់ដំណើរការកម្មវិធីដោះស្រាយ\n" + +#, c-format +msgid "" +"Error resolving %s:\n" +"%s" +msgstr "" +"កំហុសក្នុងការដោះស្រាយ %s ៖\n" +"%s" + +#, c-format +msgid "Error resolving %s: %d" +msgstr "កំហុសក្នុងការដោះស្រាយ %s ៖ %d" + +#, c-format +msgid "" +"Error reading from resolver process:\n" +"%s" +msgstr "" +"កំហុសក្នុងការអានពីដំណើរការកម្មវិធីដោះស្រាយ ៖\n" +"%s" + +#, c-format +msgid "Resolver process exited without answering our request" +msgstr "ដំណើរការរបស់កម្មវិធីដោះស្រាយបានចេញ ដោយមិនបានឆ្លើយសំណើរបស់ពួកយើងទេ" + +#, c-format +msgid "Thread creation failure: %s" +msgstr "បានបរាជ័យក្នុងការបង្កើតខ្សែស្រឡាយ ៖ %s" + +msgid "Unknown reason" +msgstr "មិនស្គាល់ហេតុផល" + +#, c-format +msgid "" +"Error reading %s: \n" +"%s.\n" +msgstr "" +"កំហុសក្នុងការអាន %s ៖ \n" +"%s.\n" + +#, c-format +msgid "" +"Error writing %s: \n" +"%s.\n" +msgstr "" +"កំហុសក្នុងការសរសេរ %s ៖ \n" +"%s.\n" + +#, c-format +msgid "" +"Error accessing %s: \n" +"%s.\n" +msgstr "" +"កំហុសក្នុងការចូលដំណើរការ %s ៖ \n" +"%s.\n" + +msgid "Directory is not writable." +msgstr "ថតមិនអាចសរសេរបានទេ ។" + +msgid "Cannot send a file of 0 bytes." +msgstr "មិនអាចផ្ញើឯកសារប្រភេទសូន្យបានទេ ។" + +msgid "Cannot send a directory." +msgstr "មិនអាចផ្ញើថតបានទេ ។" + +#, c-format +msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n" +msgstr "%s មិនមែនជាឯកសារធម្មតា ។ ដោយកំសាកបដិសេធក្នុងការសរសេរជាន់លើវា ។\n" + +#, c-format +msgid "%s wants to send you %s (%s)" +msgstr "%s ចង់ផ្ញើឲ្យអ្នក %s (%s)" + +#, c-format +msgid "%s wants to send you a file" +msgstr "%s ចង់ផ្ញើឯកសារឲ្យអ្នក" + +#, c-format +msgid "Accept file transfer request from %s?" +msgstr "ទទួលយកសំណើផ្ទេរឯកសារពី %s?" + +#, c-format +msgid "" +"A file is available for download from:\n" +"Remote host: %s\n" +"Remote port: %d" +msgstr "" +"មានឯកសារសម្រាប់ទាញយកពី ៖\n" +"ម៉ាស៊ីនពីចម្ងាយ ៖ %s\n" +"ច្រកពីចម្ងាយ ៖ %d" + +#, c-format +msgid "%s is offering to send file %s" +msgstr "%s កំពុងផ្ដល់ដើម្បីផ្ញើឯកសារ %s" + +#, c-format +msgid "%s is not a valid filename.\n" +msgstr "%s មិនមែនជាឈ្មោះឯកសារត្រឹមត្រូវទេ ។\n" + +#, c-format +msgid "Offering to send %s to %s" +msgstr "ផ្ដល់ដើម្បីផ្ញើ %s ទៅឲ្យ %s" + +#, c-format +msgid "Starting transfer of %s from %s" +msgstr "ចាប់ផ្ដើមផ្ទេរ %s ពី %s" + +#, c-format +msgid "Transfer of file %s complete" +msgstr "ផ្ទេរឯកសារ %s ចប់ហើយ" + +msgid "File transfer complete" +msgstr "ការផ្ទេរឯកសារចប់ហើយ" + +#, c-format +msgid "You canceled the transfer of %s" +msgstr "អ្នកបានបោះបង់ការផ្ទេរ %s" + +msgid "File transfer cancelled" +msgstr "បានបោះបង់ការផ្ទេរឯកសារ" + +#, c-format +msgid "%s canceled the transfer of %s" +msgstr "%s បានបោះបង់ការផ្ទេរ %s" + +#, c-format +msgid "%s canceled the file transfer" +msgstr "%s បានបោះបង់ការផ្ទេរឯកសារ" + +#, c-format +msgid "File transfer to %s failed." +msgstr "បានបរាជ័យក្នុងការផ្ទេរទៅកាន់ %s ។" + +#, c-format +msgid "File transfer from %s failed." +msgstr "បានបរាជ័យក្នុងការផ្ទេរពី %s ។" + +msgid "Run the command in a terminal" +msgstr "រត់ពាក្យបញ្ជានៅក្នុងស្ថានីយ" + +msgid "The command used to handle \"aim\" URLs, if enabled." +msgstr "ពាក្យបញ្ជាបានប្រើដើម្បីគ្រប់គ្រង \"aim\" URLs ប្រសិនបើបានបើក ។" + +msgid "The command used to handle \"gg\" URLs, if enabled." +msgstr "ពាក្យបញ្ជាបានប្រើដើម្បីគ្រប់គ្រង \"gg\" URLs ប្រសិនបើបានបើក ។" + +msgid "The command used to handle \"icq\" URLs, if enabled." +msgstr "ពាក្យបញ្ជាបានប្រើដើម្បីគ្រប់គ្រង \"icq\" URLs ប្រសិនបើបានបើក ។" + +msgid "The command used to handle \"irc\" URLs, if enabled." +msgstr "ពាក្យបញ្ជាបានប្រើដើម្បីគ្រប់គ្រង \"irc\" URLs ប្រសិនបើបានបើក ។" + +msgid "The command used to handle \"msnim\" URLs, if enabled." +msgstr "ពាក្យបញ្ជាបានប្រើដើម្បីគ្រប់គ្រង \"msnim\" URLs ប្រសិនបើបានបើក ។" + +msgid "The command used to handle \"sip\" URLs, if enabled." +msgstr "ពាក្យបញ្ជាបានប្រើដើម្បីគ្រប់គ្រង \"sip\" URLs ប្រសិនបើបានបើក ។" + +msgid "The command used to handle \"xmpp\" URLs, if enabled." +msgstr "ពាក្យបញ្ជាបានប្រើដើម្បីគ្រប់គ្រង \"xmpp\" URLs ប្រសិនបើបានបើក ។" + +msgid "The command used to handle \"ymsgr\" URLs, if enabled." +msgstr "ពាក្យបញ្ជាបានប្រើដើម្បីគ្រប់គ្រង \"ymsgr\" URLs ប្រសិនបើបានបើក ។" + +msgid "The handler for \"aim\" URLs" +msgstr "កម្មវិធីគ្រប់គ្រងសម្រាប់ URLs \"aim\"" + +msgid "The handler for \"gg\" URLs" +msgstr "កម្មវិធីគ្រប់គ្រងសម្រាប់ URLs \"gg\"" + +msgid "The handler for \"icq\" URLs" +msgstr "កម្មវិធីគ្រប់គ្រងសម្រាប់ URLs \"icq\"" + +msgid "The handler for \"irc\" URLs" +msgstr "កម្មវិធីគ្រប់គ្រងសម្រាប់ URLs \"irc\"" + +msgid "The handler for \"msnim\" URLs" +msgstr "កម្មវិធីគ្រប់គ្រងសម្រាប់ URLs \"msnim\"" + +msgid "The handler for \"sip\" URLs" +msgstr "កម្មវិធីគ្រប់គ្រងសម្រាប់ URLs \"sip\"" + +msgid "The handler for \"xmpp\" URLs" +msgstr "កម្មវិធីគ្រប់គ្រងសម្រាប់ URLs \"xmpp\"" + +msgid "The handler for \"ymsgr\" URLs" +msgstr "កម្មវិធីគ្រប់គ្រងសម្រាប់ URLs \"ymsgr\"" + +msgid "" +"True if the command specified in the \"command\" key should handle \"aim\" " +"URLs." +msgstr "ពិត ប្រសិនបើពាក្យបញ្ជាបានបញ្ជាក់នៅគ្រាប់ចុច \"ពាក្យបញ្ជា\" គួរគ្រប់គ្រង URLs \"aim\" ។" + +msgid "" +"True if the command specified in the \"command\" key should handle \"gg\" " +"URLs." +msgstr "ពិត ប្រសិនបើពាក្យបញ្ជាបានបញ្ជាក់នៅគ្រាប់ចុច \"ពាក្យបញ្ជា\" គួរគ្រប់គ្រង URLs \"gg\" ។" + +msgid "" +"True if the command specified in the \"command\" key should handle \"icq\" " +"URLs." +msgstr "ពិត ប្រសិនបើពាក្យបញ្ជាបានបញ្ជាក់នៅគ្រាប់ចុច \"ពាក្យបញ្ជា\" គួរគ្រប់គ្រង URLs \"icq\" ។" + +msgid "" +"True if the command specified in the \"command\" key should handle \"irc\" " +"URLs." +msgstr "ពិត ប្រសិនបើពាក្យបញ្ជាបានបញ្ជាក់នៅគ្រាប់ចុច \"ពាក្យបញ្ជា\" គួរគ្រប់គ្រង URLs \"irc\" ។" + +msgid "" +"True if the command specified in the \"command\" key should handle \"msnim\" " +"URLs." +msgstr "" +"ពិត ប្រសិនបើពាក្យបញ្ជាបានបញ្ជាក់នៅគ្រាប់ចុច \"ពាក្យបញ្ជា\" គួរគ្រប់គ្រង URLs \"msnim\" ។" + +msgid "" +"True if the command specified in the \"command\" key should handle \"sip\" " +"URLs." +msgstr "ពិត ប្រសិនបើពាក្យបញ្ជាបានបញ្ជាក់នៅគ្រាប់ចុច \"ពាក្យបញ្ជា\" គួរគ្រប់គ្រង URLs \"sip\" ។" + +msgid "" +"True if the command specified in the \"command\" key should handle \"xmpp\" " +"URLs." +msgstr "" +"ពិត ប្រសិនបើពាក្យបញ្ជាបានបញ្ជាក់នៅគ្រាប់ចុច \"ពាក្យបញ្ជា\" គួរគ្រប់គ្រង URLs \"xmpp\" ។" + +msgid "" +"True if the command specified in the \"command\" key should handle \"ymsgr\" " +"URLs." +msgstr "" +"ពិត ប្រសិនបើពាក្យបញ្ជាបានបញ្ជាក់នៅគ្រាប់ចុច \"ពាក្យបញ្ជា\" គួរគ្រប់គ្រង URLs \"ymsgr\" ។" + +msgid "" +"True if the command used to handle this type of URL should be run in a " +"terminal." +msgstr "ពិត ប្រសិនបើពាក្យបញ្ជាបានបញ្ជាក់នៅគ្រាប់ចុច \"ពាក្យបញ្ជា\" គួររត់នៅក្នុងស្ថានីយ ។" + +msgid "Whether the specified command should handle \"aim\" URLs" +msgstr "ថាតើ ពាក្យបញ្ជាដែលបានបញ្ជាក់គួរគ្រប់គ្រង URLs \"aim\" ។" + +msgid "Whether the specified command should handle \"gg\" URLs" +msgstr "ថាតើពាក្យបញ្ជាដែលបានបញ្ជាក់គួរគ្រប់គ្រង URLs \"gg\" ។" + +msgid "Whether the specified command should handle \"icq\" URLs" +msgstr "ថាតើ ពាក្យបញ្ជាដែលបានបញ្ជាក់គួរគ្រប់គ្រង URLs \"icq\" ។" + +msgid "Whether the specified command should handle \"irc\" URLs" +msgstr "ថាតើ ពាក្យបញ្ជាដែលបានបញ្ជាក់គួរគ្រប់គ្រង URLs \"irc\" ។" + +msgid "Whether the specified command should handle \"msnim\" URLs" +msgstr "ថាតើ ពាក្យបញ្ជាដែលបានបញ្ជាក់គួរគ្រប់គ្រង URLs \"msnim\" ។" + +msgid "Whether the specified command should handle \"sip\" URLs" +msgstr "ថាតើ ពាក្យបញ្ជាដែលបានបញ្ជាក់គួរគ្រប់គ្រង URLs \"sip\"" + +msgid "Whether the specified command should handle \"xmpp\" URLs" +msgstr "ថាតើ ពាក្យបញ្ជាដែលបានបញ្ជាក់គួរគ្រប់គ្រង URLs \"xmpp\" ។" + +msgid "Whether the specified command should handle \"ymsgr\" URLs" +msgstr "ថាតើ ពាក្យបញ្ជាក់ដែលបានបញ្ជាក់គួរគ្រប់គ្រង URLs \"ymsgr\" ។" + +msgid "<b><font color=\"red\">The logger has no read function</font></b>" +msgstr "<b><font color=\"red\">មិនមានមុខងារអានទៀតទេ</font></b>" + +msgid "HTML" +msgstr "HTML" + +msgid "Plain text" +msgstr "អត្ថបទធម្មតា" + +msgid "Old flat format" +msgstr "ទ្រង់ទ្រាយចាស់" + +msgid "Logging of this conversation failed." +msgstr "បានបរាជ័យក្នុងការចុះកំណត់ហេតុការសន្ទនានេះ ។" + +msgid "XML" +msgstr "XML" + +#, c-format +msgid "" +"<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" +"REPLY>:</b></font> %s<br/>\n" +msgstr "" +"<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" +"REPLY>:</b></font> %s<br/>\n" + +#, c-format +msgid "" +"<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" +"REPLY>:</b></font> %s<br/>\n" +msgstr "" +"<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" +"REPLY>:</b></font> %s<br/>\n" + +msgid "<font color=\"red\"><b>Unable to find log path!</b></font>" +msgstr "<font color=\"red\"><b>មិនអាចរកផ្លូវកំណត់ហេតុបានទេ !</b></font>" + +#, c-format +msgid "<font color=\"red\"><b>Could not read file: %s</b></font>" +msgstr "<font color=\"red\"><b>មិនអាចអានឯកសារបានទេ ៖ %s</b></font>" + +#, c-format +msgid "(%s) %s <AUTO-REPLY>: %s\n" +msgstr "(%s) %s <AUTO-REPLY>: %s\n" + +#, c-format +msgid "You are using %s, but this plugin requires %s." +msgstr "អ្នកកំពុងប្រើ %s ប៉ុន្តែកម្មវិធីជំនួយនេះទាមទារ %s ។" + +msgid "This plugin has not defined an ID." +msgstr "កម្មវិធីជំនួយនេះមិនបានកំណត់លេខសម្គាល់ទេ ។" + +#, c-format +msgid "Plugin magic mismatch %d (need %d)" +msgstr "មិនផ្គូផ្គងកម្មវិធីជំនួយមន្តអាគមន្ត %d (ត្រូវការ %d)" + +#, c-format +msgid "ABI version mismatch %d.%d.x (need %d.%d.x)" +msgstr "មិនផ្គូផ្គងកំណែ ABI %d.%d.x (ត្រូវការ %d.%d.x)" + +msgid "" +"Plugin does not implement all required functions (list_icon, login and close)" +msgstr "កម្មវិធីជំនួយមិនអនុវត្តមុខងារដែលទាមទារទាំងអស់ទេ (list_icon ចូល ហើយបិទ)" + +#, c-format +msgid "" +"The required plugin %s was not found. Please install this plugin and try " +"again." +msgstr "" +"រកមិនឃើញកម្មវិធីជំនួយដែលត្រូវការ %s នោះទេ ។ សូមដំឡើងកម្មវិធីជំនួយនេះ ហើយព្យាយាមម្ដងទៀត ។" + +msgid "Unable to load the plugin" +msgstr "មិនអាចផ្ទុកកម្មវិធីជំនួយបានទេ" + +#, c-format +msgid "The required plugin %s was unable to load." +msgstr "កម្មវិធីជំនួយដែលត្រូវការ %s មិនអាចផ្ទុកបានទេ ។" + +msgid "Unable to load your plugin." +msgstr "មិនអាចផ្ទុកកម្មវិធីជំនួយរបស់អ្នកបានទេ ។" + +#, c-format +msgid "%s requires %s, but it failed to unload." +msgstr "%s ត្រូវការ %s ប៉ុន្តែបានបរាជ័យក្នុងការផ្ទុក ។" + +msgid "Autoaccept" +msgstr "ព្រមទទួលដោយស្វ័យប្រវត្តិ" + +msgid "Auto-accept file transfer requests from selected users." +msgstr "ការផ្ទេរឯកសារដែលព្រមទទួលដោយស្វ័យប្រវត្តិស្នើពីអ្នកប្រើដែលបានជ្រើស ។" + +#, c-format +msgid "Autoaccepted file transfer of \"%s\" from \"%s\" completed." +msgstr "ការផ្ទេរឯកសារដែលព្រមទទួលដោយស្វ័យប្រវត្តិរបស់ \"%s\" ពី \"%s\" បានបញ្ចប់ ។" + +msgid "Autoaccept complete" +msgstr "បញ្ចប់ការព្រមទទួលដោយស្វ័យប្រវត្តិ" + +#, c-format +msgid "When a file-transfer request arrives from %s" +msgstr "នៅពេលសំណើការផ្ទេរឯកសារមកដល់ពី %s" + +msgid "Set Autoaccept Setting" +msgstr "កំណត់ការកំណត់ព្រមទទួលដោយស្វ័យប្រវត្តិ" + +msgid "_Save" +msgstr "រក្សាទុក" + +msgid "_Cancel" +msgstr "បោះបង់" + +msgid "Ask" +msgstr "សួរ" + +msgid "Auto Accept" +msgstr "ព្រមទទួលដោយស្វ័យប្រវត្តិ" + +msgid "Auto Reject" +msgstr "ច្រានចោលដោយស្វ័យប្រវត្តិ" + +msgid "Autoaccept File Transfers..." +msgstr "ការផ្ទេរឯកសារព្រមទទួលដោយស្វ័យប្រវត្តិ..." + +#. XXX: Is there a better way than this? There really should be. +msgid "" +"Path to save the files in\n" +"(Please provide the full path)" +msgstr "" +"ផ្លូវត្រូវរក្សាទុកឯកសារនៅក្នុង\n" +"(សូមផ្ដល់ផ្លូវពេញលេញ)" + +msgid "Automatically reject from users not in buddy list" +msgstr "ច្រានចោលដោយស្វ័យប្រវត្តិពីអ្នកប្រើមិននៅក្នុងបញ្ជីមិត្តភក្ដិទេ" + +msgid "" +"Notify with a popup when an autoaccepted file transfer is complete\n" +"(only when there's no conversation with the sender)" +msgstr "" +"ជូនដំណឹងដោយម៉ឺនុយលេចឡើង នៅពេលការផ្ទេរឯកសារព្រមទទួលដោយស្វ័យប្រវត្តិបានបញ្ចប់\n" +"(តែនៅពេលដែលគ្មានការសន្ទនាជាមួយអ្នកផ្ញើ)" + +msgid "Create a new directory for each user" +msgstr "បង្កើតថតថ្មីសម្រាប់អ្នកប្រើនីមួយៗ" + +msgid "Notes" +msgstr "ចំណាំ" + +msgid "Enter your notes below..." +msgstr "បញ្ចូលចំណាំរបស់អ្នកខាងក្រោម..." + +msgid "Edit Notes..." +msgstr "កែសម្រួលចំណាំ..." + +#. *< major version +#. *< minor version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Buddy Notes" +msgstr "ចំណាំមិត្តភក្ដិ" + +#. *< name +#. *< version +msgid "Store notes on particular buddies." +msgstr "ទុកចំណាំនៅលើមិត្តភក្ដិជាក់លាក់ ។" + +#. *< summary +msgid "Adds the option to store notes for buddies on your buddy list." +msgstr "បន្ថែមជម្រើសដើម្បីទុកចំណាំសម្រាប់មិត្តភក្ដិនៅលើបញ្ជីមិតភក្ដិរបស់អ្នក ។" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Cipher Test" +msgstr "សាកល្បងការសរសេរជាសម្ងាត់" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Tests the ciphers that ship with libpurple." +msgstr "សាកល្បងការសរសេរជាសម្ងាត់ដែលនាំមកជាមួយ libpurple ។" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "DBus Example" +msgstr "គំរូ DBus" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "DBus Plugin Example" +msgstr "គំរូកម្មវិធីជំនួយ DBus" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "File Control" +msgstr "ការត្រួតពិនិត្យឯកសារ" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Allows control by entering commands in a file." +msgstr "អនុញ្ញាតការត្រួតពិនិត្យដោយបញ្ចូលពាក្យបញ្ជានៅក្នុងឯកសារ ។" + +msgid "Minutes" +msgstr "នាទី" + +#. This is a cultural reference. Dy'er Mak'er is a song by Led Zeppelin. +#. If that doesn't translate well into your language, drop the 's before translating. +msgid "I'dle Mak'er" +msgstr "សញ្ញាសម្គាល់ថាទំនេរ" + +msgid "Set Account Idle Time" +msgstr "កំណត់ពេលវេលាទំនេររបស់គណនី" + +msgid "_Set" +msgstr "កំណត់" + +msgid "None of your accounts are idle." +msgstr "គ្មានគណនីណាមួយរបស់អ្នកទំនេរទេ ។" + +msgid "Unset Account Idle Time" +msgstr "មិនកំណត់ពេលវេលាទំនេររបស់គណនីទេ" + +msgid "_Unset" +msgstr "មិនកំណត់" + +msgid "Set Idle Time for All Accounts" +msgstr "កំណត់ពេលវេលាទំនេរសម្រាប់គណនីទាំងអស់" + +msgid "Unset Idle Time for All Idled Accounts" +msgstr "មិនកំណត់ពេលវេលាទំនេរសម្រាប់គណនីទាំងអស់ទេ" + +msgid "Allows you to hand-configure how long you've been idle" +msgstr "អនុញ្ញាតឲ្យអ្នកកំណត់រចនាសម្ព័ន្ធដោយដៃ អំពីរយៈពេលដែលអ្នកនៅទំនេរ" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "IPC Test Client" +msgstr "ម៉ាស៊ីនភ្ញៀវសាកល្បង IPC" + +#. *< name +#. *< version +#. * summary +msgid "Test plugin IPC support, as a client." +msgstr "ការគាំទ្រការសាកល្បងកម្មវិធីជំនួយ IPC ព្រមទាំងម៉ាស៊ីនភ្ញៀវ ។" + +#. * description +msgid "" +"Test plugin IPC support, as a client. This locates the server plugin and " +"calls the commands registered." +msgstr "" +"ការគាំទ្រការសាកល្បងកម្មវិធីជំនួយ IPC ព្រមទាំងម៉ាស៊ីនភ្ញៀវ ។ វាកំណត់ទីតាំងកម្មវិធីជំនួយម៉ាស៊ីនបម្រើ និងហៅ" +"ពាក្យបញ្ជាដែលបានចុះឈ្មោះ ។" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "IPC Test Server" +msgstr "ម៉ាស៊ីនបម្រើសាកល្បង IPC" + +#. *< name +#. *< version +#. * summary +msgid "Test plugin IPC support, as a server." +msgstr "គាំទ្រការសាកល្បងកម្មវិធីជំនួយ IPC ជាម៉ាស៊ីនបម្រើ ។" + +#. * description +msgid "Test plugin IPC support, as a server. This registers the IPC commands." +msgstr "គាំទ្រការសាកល្បងកម្មវិធីជំនួយ IPC ជាម៉ាស៊ីនបម្រើ ។ វាចុះឈ្មោះពាក្យបញ្ជា IPC ។" + +msgid "Join/Part Hiding Configuration" +msgstr "ការកំណត់រចនាសម្ព័ន្ធចូល/លាក់ផ្នែក" + +msgid "Minimum Room Size" +msgstr "បង្រួមទំហំបន្ទប់អប្បបរមា" + +msgid "User Inactivity Timeout (in minutes)" +msgstr "រយៈពេលអសកម្មរបស់អ្នកប្រើ (គិតជានាទី)" + +msgid "Apply hiding rules to buddies" +msgstr "អនុវត្តក្បួនបន្លិចទៅកាន់មិត្តភក្ដិ" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Join/Part Hiding" +msgstr "ចូល/លាក់ផ្នែក" + +#. *< name +#. *< version +#. * summary +msgid "Hides extraneous join/part messages." +msgstr "លាក់សារចូល/ផ្នែកដែលមិនត្រូវកន្លែង ។" + +#. * description +msgid "" +"This plugin hides join/part messages in large rooms, except for those users " +"actively taking part in a conversation." +msgstr "" +"កម្មវិធីជំនួយនេះលាក់សារចូល/ផ្នែកនៅក្នុងបន្ទប់ធំ លើកលែងតែសម្រាប់អ្នកប្រើទាំងនោះដែលកើតឡើងយ៉ាងសកម្ម" +"នៅក្នុងការសន្ទនា ។" + +#. This is used in the place of a timezone abbreviation if the +#. * offset is way off. The user should never really see it, but +#. * it's here just in case. The parens are to make it clear it's +#. * not a real timezone. +msgid "(UTC)" +msgstr "(UTC)" + +msgid "User is offline." +msgstr "អ្នកប្រើនៅក្រៅបណ្ដាញ ។" + +msgid "Auto-response sent:" +msgstr "បានផ្ញើការឆ្លើយតបដោយស្វ័យប្រវត្តិ ៖" + +#, c-format +msgid "%s has signed off." +msgstr "%s បានចេញ ។" + +msgid "One or more messages may have been undeliverable." +msgstr "សារមួយ ឬច្រើនអាចមិនត្រូវបានផ្ដល់ ។" + +msgid "You were disconnected from the server." +msgstr "អ្នកត្រូវបានផ្ដាច់ពីម៉ាស៊ីនបម្រើ ។" + +msgid "" +"You are currently disconnected. Messages will not be received unless you are " +"logged in." +msgstr "អ្នកបច្ចុប្បន្នត្រូវបានផ្ដាច់ ។ សារនឹងមិនត្រូវបានទទួលលុះត្រាតែអ្នកចូល ។" + +msgid "Message could not be sent because the maximum length was exceeded." +msgstr "សារមិនអាចត្រូវបានផ្ញើទេ ដោយសារតែលើសប្រវែងអតិបរមា ។" + +msgid "Message could not be sent." +msgstr "សារមិនអាចត្រូវបានផ្ញើទេ ។" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +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. +msgid "Fire" +msgstr "ភ្លើង" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +msgid "Messenger Plus!" +msgstr "កម្មវិធីផ្ញើសារបន្ថែម !" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +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. +msgid "MSN Messenger" +msgstr "កម្មវិធីផ្ញើសារ MSN" + +#. 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. +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. +msgid "aMSN" +msgstr "aMSN" + +#. Add general preferences. +msgid "General Log Reading Configuration" +msgstr "ការកំណត់រចនាសម្ព័ន្ធអានកំណត់ហេតុទូទៅ" + +msgid "Fast size calculations" +msgstr "ការគណនាទំហំរហ័ស" + +msgid "Use name heuristics" +msgstr "បើវិធានការស្រាវជ្រាវឈ្មោះ" + +#. Add Log Directory preferences. +msgid "Log Directory" +msgstr "ថតកំណត់ហេតុ" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Log Reader" +msgstr "កម្មវិធីអានកំណត់ហេតុ" + +#. *< name +#. *< version +#. * summary +msgid "Includes other IM clients' logs in the log viewer." +msgstr "រួមបញ្ចូលកំណត់ហេតុរបស់ម៉ាស៊ីនភ្ញៀវ IM ផ្សេងៗទៀតនៅក្នុងកម្មវិធីមើលកំណត់ហេតុ ។" + +#. * description +msgid "" +"When viewing logs, this plugin will include logs from other IM clients. " +"Currently, this includes Adium, MSN Messenger, and Trillian.\n" +"\n" +"WARNING: This plugin is still alpha code and may crash frequently. Use it " +"at your own risk!" +msgstr "" +"នៅពេលមើលកំណត់ហេតុ កម្មវិធីជំនួយនេះនឹងរួមបញ្ចូលកំណត់ហេតុពីម៉ាស៊ីនភ្ញៀវ IM ផ្សេងៗ ។បច្ចុប្បន្ន វារួម" +"មានកម្មវិធីផ្ញើសារ Adium, MSN និង Trillian ។\n" +"\n" +"ការព្រមាន ៖ កម្មវិធីជំនួយយនេះនៅតែជាអាល់ហ្វាកូដ ហើយអាចគាំងជាញឹកញាប់ ។ ប្រើវានៅកម្រិត" +"គ្រោះថ្នាក់ផ្ទាល់របស់អ្នក !" + +msgid "Mono Plugin Loader" +msgstr "កម្មវិធីផ្ទុកកម្មវិធីជំនួយរបស់ Mono" + +msgid "Loads .NET plugins with Mono." +msgstr "ផ្ទុកកម្មវិធីជំនួយ .NET ជាមួយ Mono ។" + +msgid "Add new line in IMs" +msgstr "បន្ថែមបន្ទាត់ថ្មីនៅក្នុង IMs" + +msgid "Add new line in Chats" +msgstr "បន្ថែមបន្ទាត់ថ្មីនៅក្នុងគំនូសតាង" + +#. *< magic +#. *< major version +#. *< minor version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "New Line" +msgstr "បន្ទាត់ថ្មី" + +#. *< name +#. *< version +msgid "Prepends a newline to displayed message." +msgstr "បន្ថែមបន្ទាត់ថ្មីខាងចុងទៅកាាន់សារដែលបានបង្ហាញ ។" + +#. *< summary +msgid "" +"Prepends a newline to messages so that the rest of the message appears below " +"the username in the conversation window." +msgstr "" +"បន្ថែមបន្ទាត់ថ្មីទៅសារ ដូច្នេះសារដែលនៅសល់បង្ហាញខាងក្រោមឈ្មោះអ្នកប្រើនៅក្នុងបង្អួចសន្ទនា ។" + +msgid "Offline Message Emulation" +msgstr "ក្លែងធ្វើសារក្រៅបណ្ដាញ" + +msgid "Save messages sent to an offline user as pounce." +msgstr "រក្សាទុកសារដែលបានផ្ញើទៅកាន់អ្នកប្រើក្រៅជាក្រុម ។" + +msgid "" +"The rest of the messages will be saved as pounce. You can edit/delete the " +"pounce from the `Buddy Pounce' dialog." +msgstr "សារដែលនៅសល់នឹងត្រូវបានរក្សាទុកជាក្រុម ។ អ្នកអាចកែសម្រួល/លុបក្រុមពីប្រអប់ `ក្រុមមិត្តភក្ដិ' ។" + +#, c-format +msgid "" +"\"%s\" is currently offline. Do you want to save the rest of the messages in " +"a pounce and automatically send them when \"%s\" logs back in?" +msgstr "" +"\"%s\" ឥឡូវនេះនៅក្រៅបណ្ដាញ ។ តើអ្នកចង់រក្សាទុកសារដែលនៅសល់ជាក្រុម ហើយផ្ញើពួកវាដោយស្វ័យប្រវត្តិ" +"នៅពេលដែល \"%s\" ចូលម្ដងទៀតដែរឬទេ ?" + +msgid "Offline Message" +msgstr "សារក្រៅបណ្ដាញ" + +msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog" +msgstr "អ្នកអាចកែសម្រួល/លុបក្រុមពីប្រអប់ `ក្រុមមិត្តភក្ដិ'" + +msgid "Yes" +msgstr "បាទ/ចាស" + +msgid "No" +msgstr "ទេ" + +msgid "Save offline messages in pounce" +msgstr "រក្សាទុកសារក្រៅបណ្ដាញជាក្រុម" + +msgid "Do not ask. Always save in pounce." +msgstr "កុំសួរ ។ រក្សាទុកជាក្រុមជានិច្ច ។" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Perl Plugin Loader" +msgstr "កម្មវិធីផ្ទុកកម្មវិធីជំនួយរបស់ Perl" + +#. *< name +#. *< version +#. *< summary +msgid "Provides support for loading perl plugins." +msgstr "ផ្ដល់ការគាំទ្រសម្រាប់ផ្ទុកកម្មវិធីជំនួយរបស់ perl ។" + +msgid "Psychic Mode" +msgstr "របៀប Psychic" + +msgid "Psychic mode for incoming conversation" +msgstr "របៀប Psychic សម្រាប់ការសន្ទនាដែលចូល" + +msgid "" +"Causes conversation windows to appear as other users begin to message you. " +"This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" +msgstr "" +"ធ្វើឲ្យបង្អួចសន្ទនាបង្ហាញជាអ្នកប្រើផ្សេងៗ ចាប់ផ្ដើមសរសេរសារឲ្យអ្នក ។ ការងារសម្រាប់ AIM, " +"ICQ, XMPP, Sametime និង Yahoo!" + +msgid "You feel a disturbance in the force..." +msgstr "អ្នកមានអារម្មណ៍ថារំខានក្នុងការបង្ខំ..." + +msgid "Only enable for users on the buddy list" +msgstr "បើកសម្រាប់តែអ្នកប្រើនៅក្នុងបញ្ជីមិត្តភក្ដិតែប៉ុណ្ណោះ" + +msgid "Disable when away" +msgstr "បិទនៅពេលចាកឆ្ងាយ" + +msgid "Display notification message in conversations" +msgstr "បង្ហាញសារជូនដំណឹងនៅក្នុងការសន្ទនា" + +msgid "Raise psychic conversations" +msgstr "លើកការសន្ទនា psychic ឡើង" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Signals Test" +msgstr "សាកល្បងសញ្ញា" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Test to see that all signals are working properly." +msgstr "សាកល្បងដើម្បីដឹងថា សញ្ញាទាំងអស់ដំណើរកាយ៉ារងរលូន ។" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Simple Plugin" +msgstr "កម្មវិធីជំនួយធម្មតា" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Tests to see that most things are working." +msgstr "សាកល្បងដើម្បីដឹងថា អ្វីៗជាច្រើនកំពុងដំណើរការ ។" + +#. Scheme name +msgid "X.509 Certificates" +msgstr "វិញ្ញាបនបត្រ X.509" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "GNUTLS" +msgstr "GNUTLS" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Provides SSL support through GNUTLS." +msgstr "ផ្ដល់នូវការគាំទ្រ SSL តាមរយៈ GNUTLS ។" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "NSS" +msgstr "NSS" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Provides SSL support through Mozilla NSS." +msgstr "ផ្ដល់នូវការគាំទ្រ SSL តាមរយៈ Mozilla NSS ។" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "SSL" +msgstr "SSL" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Provides a wrapper around SSL support libraries." +msgstr "ផ្ដល់នូវការកម្មវិធីរុំជុំវិញបណ្ណាល័យគាំទ្រ SSL ។" + +#, c-format +msgid "%s is no longer away." +msgstr "%s មិនចាកឆ្ងាយទៀតទេ ។" + +#, c-format +msgid "%s has gone away." +msgstr "%s បានទៅឆ្ងាយហើយ ។" + +#, c-format +msgid "%s has become idle." +msgstr "%s បានក្លាយជាទំនេរ ។" + +#, c-format +msgid "%s is no longer idle." +msgstr "%s មិនទំនេរទៀតទេ ។" + +#, c-format +msgid "%s has signed on." +msgstr "%s បានចូល ។" + +msgid "Notify When" +msgstr "ជូនដំណឹងនៅលើ" + +msgid "Buddy Goes _Away" +msgstr "មិត្តភក្ដិទៅឆ្ងាយ" + +msgid "Buddy Goes _Idle" +msgstr "មិត្តភក្ដិទំនេរ" + +msgid "Buddy _Signs On/Off" +msgstr "មិត្តភក្ដិ ចេញ/ចូល" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Buddy State Notification" +msgstr "ស្ថានភាពជូនដំណឹងរបស់មិត្តភក្ដិ" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "" +"Notifies in a conversation window when a buddy goes or returns from away or " +"idle." +msgstr "ជូនដំណឹងនៅក្នុងបង្អួចសន្ទនា នៅពេលដែលមិត្តភក្ដិទៅ ឬត្រឡប់ពីការចាកឆ្ងាយ ឬទំនេរ ។" + +msgid "Tcl Plugin Loader" +msgstr "កម្មវិធីផ្ទុកកម្មវិធីជំនួយ Tcl" + +msgid "Provides support for loading Tcl plugins" +msgstr "ផ្ដល់នូវការគាំទ្រសម្រាប់ផ្ទុកកម្មវិធីជំនួយ Tcl" + +msgid "" +"Unable to detect ActiveTCL installation. If you wish to use TCL plugins, " +"install ActiveTCL from http://www.activestate.com\n" +msgstr "" +"មិនអាចរកឃើញការដំឡើងTCL ដែលសកម្ម ។ ប្រសិនបើអ្នកចង់ប្រើកម្មវិធីជំនួយ TCL ដំឡើង TCL សកម្មពី " +"http://www.activestate.com\n" + +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 សម្រាប់ប្រអប់ឧបករណ៍វីនដូដែលរកមិនឃើញ សូមមើល FAQ នៅ ៖ http://d.pidgin.im/" +"BonjourWindows ចំពោះព័ត៌មានលម្អិត ។" + +msgid "Unable to listen for incoming IM connections\n" +msgstr "មិនអាចស្ដាប់ការតភ្ជាប់ IM ចូល\n" + +msgid "" +"Unable to establish connection with the local mDNS server. Is it running?" +msgstr "មិនអាចបង្កើតការតភ្ជាប់ជាមួយនឹងម៉ាស៊ីនបម្រើ mDNS មូលដ្ឋានទេ ។ តើវាកំពុងរត់ទេ ?" + +msgid "First name" +msgstr "នាមខ្លួន" + +msgid "Last name" +msgstr "នាមត្រកូល" + +msgid "Email" +msgstr "អ៊ីមែល" + +msgid "AIM Account" +msgstr "គណនី AIM" + +msgid "XMPP Account" +msgstr "គណនី XMPP" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "Bonjour Protocol Plugin" +msgstr "កម្មវិធីជំនួយពិធីការ Bonjour" + +msgid "Purple Person" +msgstr "មនុស្សពណ៌ស្វាយ" + +#. Creating the options for the protocol +msgid "Local Port" +msgstr "ច្រក" + +msgid "Bonjour" +msgstr "Bonjour" + +#, c-format +msgid "%s has closed the conversation." +msgstr "%s បានបិទការសន្ទនា ។" + +msgid "Unable to send the message, the conversation couldn't be started." +msgstr "មិនអាចផ្ញើសារបានទេ ការសន្ទនាមិនអាចត្រូវបានចាប់ផ្ដើមទេ ។" + +msgid "Cannot open socket" +msgstr "មិនអាចបើករន្ធបានទេ" + +msgid "Could not bind socket to port" +msgstr "មិនអាចចងរន្ធទៅច្រកបានទេ" + +msgid "Could not listen on socket" +msgstr "មិនអាចស្ដាប់នៅលើរន្ធបានទេ" + +msgid "Error communicating with local mDNSResponder." +msgstr "កំហុសក្នុងការទាក់ទងជាមួយនឹង mDNSResponder មូលដ្ឋាន ។" + +msgid "Invalid proxy settings" +msgstr "ការកំណត់ប្រូកស៊ីមិនត្រឹមត្រូវ" + +msgid "" +"Either the host name or port number specified for your given proxy type is " +"invalid." +msgstr "ឈ្មោះម៉ាស៊ីន ឬលេខច្រកដែលបានបញ្ជាក់សម្រាប់ប្រភេទប្រូកស៊ីដែលបានផ្ដល់មិនត្រឹមត្រូវទេ ។" + +msgid "Token Error" +msgstr "កំហុសថូខឹន" + +msgid "Unable to fetch the token.\n" +msgstr "មិនអាចទៅយកថូខឹនបានទេ ។\n" + +msgid "Save Buddylist..." +msgstr "រក្សាទុកបញ្ជីមិត្តភក្ដិ..." + +msgid "Your buddylist is empty, nothing was written to the file." +msgstr "បញ្ជីមិត្តភក្ដិរបស់អ្នកគឺទទេ គ្មានអ្វីត្រូវបានសរសេរទៅកាន់ឯកសារទេ ។" + +msgid "Buddylist saved successfully!" +msgstr "បានរក្សាទុកបញ្ជីមិត្តភក្ដិដោយជោគជ័យ !" + +#, c-format +msgid "Couldn't write buddy list for %s to %s" +msgstr "មិនអាចសរសេរបញ្ជីមិត្តភក្ដិសម្រាប់ %s ទៅកាន់ %s" + +msgid "Couldn't load buddylist" +msgstr "មិនអាចផ្ទុកបញ្ជីមិត្តភក្ដិបានទេ" + +msgid "Load Buddylist..." +msgstr "ផ្ទុកបញ្ជីមិត្តភក្ដិ..." + +msgid "Buddylist loaded successfully!" +msgstr "បានផ្ទុកបញ្ជីមិត្តភក្ដិដោយជោគជ័យ !" + +msgid "Save buddylist..." +msgstr "រក្សាទុកបញ្ជីមិត្តភក្តិ..." + +msgid "Load buddylist from file..." +msgstr "ផ្ទុកបញ្ជីមិត្តភក្ដិពីឯកសារ..." + +msgid "Fill in the registration fields." +msgstr "បំពេញវាលចុះឈ្មោះ ។" + +msgid "Passwords do not match." +msgstr "ពាក្យសម្ងាត់មិនផ្គូផ្គង ។" + +msgid "Unable to register new account. Error occurred.\n" +msgstr "មិនអាចចុះឈ្មោះគណនីថ្មីទេ ។ កំហុសបានកើតឡើង ។\n" + +msgid "New Gadu-Gadu Account Registered" +msgstr "គណនី Gadu-Gadu ដែលបានចុះឈ្មោះថ្មី" + +msgid "Registration completed successfully!" +msgstr "ការចុះឈ្មោះបានបញ្ចប់ដោយជោគជ័យ !" + +msgid "Password" +msgstr "ពាក្យសម្ងាត់" + +msgid "Password (retype)" +msgstr "ពាក្យសម្ងាត់ (វាយឡើងវិញ)" + +msgid "Enter current token" +msgstr "បញ្ចូលថូខឹនបច្ចុប្បន្ន" + +msgid "Current token" +msgstr "ថូខឹនបច្ចុប្បន្ន" + +msgid "Register New Gadu-Gadu Account" +msgstr "ចុះឈ្មោះគណនី Gadu-Gadu ថ្មី" + +msgid "Please, fill in the following fields" +msgstr "សូមបំពេញវាលដូចខាងក្រោម" + +msgid "City" +msgstr "ទីក្រុង" + +msgid "Year of birth" +msgstr "ឆ្នាំកំណើត" + +msgid "Gender" +msgstr "ភេទ" + +msgid "Male or female" +msgstr "ប្រុស ឬស្រី" + +msgid "Male" +msgstr "ប្រុស" + +msgid "Female" +msgstr "ស្រី" + +msgid "Only online" +msgstr "តែលើបណ្ដាញប៉ុណ្ណោះ" + +msgid "Find buddies" +msgstr "រកមិត្តភក្ដិ" + +msgid "Please, enter your search criteria below" +msgstr "សូមបញ្ចូលលក្ខខណ្ឌស្វែងរករបស់អ្នកខាងក្រោម" + +msgid "Fill in the fields." +msgstr "បំពេញវាល ។" + +msgid "Your current password is different from the one that you specified." +msgstr "ពាក្យសម្ងាត់បច្ចុប្បន្នរបស់អ្នក ខុសពីពាក្យសម្ងាត់ដែលអ្នកបានបញ្ជាក់ ។" + +msgid "Unable to change password. Error occurred.\n" +msgstr "មិនអាចផ្លាស់ប្ដូរពាក្យសម្ងាត់បានទេ ។ កំហុសបានកើតឡើង ។\n" + +msgid "Change password for the Gadu-Gadu account" +msgstr "ផ្លាស់ប្ដូរពាក្យសម្ងាត់សម្រាប់គណនី Gadu-Gadu" + +msgid "Password was changed successfully!" +msgstr "ពាក្យសម្ងាត់ត្រូវបានផ្លាស់ប្ដូរជោគជ័យ !" + +msgid "Current password" +msgstr "ពាក្យសម្ងាត់បច្ចុប្បន្ន" + +msgid "Please, enter your current password and your new password for UIN: " +msgstr "សូមបញ្ចូលពាក្យសម្ងាត់បច្ចុប្បន្ន និងពាក្យសម្ងាត់ថ្មីរបស់អ្នកសម្រាប់ UIN ៖ " + +msgid "Change Gadu-Gadu Password" +msgstr "ផ្លាស់ប្ដូរពាក្យសម្ងាត់ Gadu-Gadu" + +#, c-format +msgid "Select a chat for buddy: %s" +msgstr "ជ្រើសការជជែកសម្រាប់មិត្តភក្ដិ ៖ %s" + +msgid "Add to chat..." +msgstr "បន្ថែមទៅការជជែក..." + +msgid "Available" +msgstr "ដែលអាចប្រើបាន" + +#. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for +#. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message +#. Away stuff +msgid "Away" +msgstr "ចាកឆ្ងាយ" + +msgid "UIN" +msgstr "UIN" + +msgid "First Name" +msgstr "នាមខ្លួន" + +msgid "Birth Year" +msgstr "ឆ្នាំកំណើត" + +msgid "Unable to display the search results." +msgstr "មិនអាចបង្ហាញលទ្ធផលស្វែងរកទេ ។" + +msgid "Gadu-Gadu Public Directory" +msgstr "ថតសាធារណៈរបស់ Gadu-Gadu" + +msgid "Search results" +msgstr "លទ្ធផលស្វែងរក" + +msgid "No matching users found" +msgstr "រកមិនឃើញអ្នកប្រើដែលផ្គូផ្គងទេ" + +msgid "There are no users matching your search criteria." +msgstr "មិនមានអ្នកប្រើដែលផ្គូផ្គងនឹងលក្ខខណ្ឌស្វែងរករបស់អ្នក ។" + +msgid "Unable to read socket" +msgstr "មិនអាចអានរន្ធបានទេ" + +msgid "Buddy list downloaded" +msgstr "បានទាញយកបញ្ជីមិត្តភក្ដិ" + +msgid "Your buddy list was downloaded from the server." +msgstr "បញ្ជីមិត្តភក្ដិរបស់អ្នកត្រូវបានទាញយកពីម៉ាស៊ីនបម្រើ ។" + +msgid "Buddy list uploaded" +msgstr "បានផ្ទុកបញ្ជីមិត្តភក្ដិឡើង" + +msgid "Your buddy list was stored on the server." +msgstr "បញ្ជីមិត្តភក្ដិរបស់អ្នកត្រូវបានទុកនៅលើម៉ាស៊ីនបម្រើ ។" + +msgid "Connection failed." +msgstr "បានបរាជ័យក្នុងការតភ្ជាប់ ។" + +msgid "Add to chat" +msgstr "បន្ថែមទៅកាន់ការជជែក" + +msgid "Chat _name:" +msgstr "ឈ្មោះការជជែក ៖" + +msgid "Chat error" +msgstr "កំហុសក្នុងការជជែក" + +msgid "This chat name is already in use" +msgstr "ឈ្មោះការជជែកនេះកំពុងប្រើរួចហើយ" + +msgid "Not connected to the server." +msgstr "មិនបានតភ្ជាប់ទៅកាន់ម៉ាស៊ីនបម្រើទេ ។" + +msgid "Find buddies..." +msgstr "រកមិត្តភក្ដិ..." + +msgid "Change password..." +msgstr "ផ្លាស់ប្ដូរពាក្យសម្ងាត់..." + +msgid "Upload buddylist to Server" +msgstr "ផ្ទុកបញ្ជីមិត្តភក្ដិឡើងទៅកាន់ម៉ាស៊ីនបម្រើ" + +msgid "Download buddylist from Server" +msgstr "ទាញយកបញ្ជីមិត្តភក្ដិពីម៉ាស៊ីនបម្រើ" + +msgid "Delete buddylist from Server" +msgstr "លុបបញ្ជីមិត្តភក្ដិពីម៉ាស៊ីនបម្រើ" + +msgid "Save buddylist to file..." +msgstr "រក្សាទុកបញ្ជីមិត្តភក្ដិទៅកាន់ឯកសារ..." + +#. magic +#. major_version +#. minor_version +#. plugin type +#. ui_requirement +#. flags +#. dependencies +#. priority +#. id +#. name +#. version +msgid "Gadu-Gadu Protocol Plugin" +msgstr "កម្មវិធីជំនួយពិធីការ Gadu-Gadu" + +#. summary +msgid "Polish popular IM" +msgstr "សម្អាតប្រជាប្រិយភាពរបស់ IM" + +msgid "Gadu-Gadu User" +msgstr "អ្នកប្រើ Gadu-Gadu" + +#, c-format +msgid "Unknown command: %s" +msgstr "មិនស្គាល់ពាក្យបញ្ជា ៖ %s" + +#, c-format +msgid "current topic is: %s" +msgstr "ប្រធានបទបច្ចុប្បន្នគឺ ៖ %s" + +msgid "No topic is set" +msgstr "គ្មានប្រធានបទត្រូវបានកំណត់ទេ" + +msgid "File Transfer Failed" +msgstr "បានបរាជ័យក្នុងការផ្ទេរឯកសារ" + +msgid "Could not open a listening port." +msgstr "មិនអាចបើកច្រកស្ដាប់បានទេ ។" + +msgid "Error displaying MOTD" +msgstr "កំហុសក្នុងការបង្ហាញ MOTD" + +msgid "No MOTD available" +msgstr "មិនមាន MOTD ទេ" + +msgid "There is no MOTD associated with this connection." +msgstr "មិនមាន MOTD បានភ្ជាប់ជាមួយនឹងការតភ្ជាប់នេះទេ ។" + +#, c-format +msgid "MOTD for %s" +msgstr "MOTD សម្រាប់ %s" + +msgid "Server has disconnected" +msgstr "ម៉ាស៊ីនបម្រើបានផ្ដាច់" + +msgid "View MOTD" +msgstr "មើល MOTD" + +msgid "_Channel:" +msgstr "ឆានែល ៖" + +msgid "_Password:" +msgstr "ពាក្យសម្ងាត់ ៖" + +msgid "IRC nicks may not contain whitespace" +msgstr "សម្មតិនាម IRC អាចមិនមានចន្លោះ" + +#. 1. connect to server +#. connect to the server +msgid "Connecting" +msgstr "តភ្ជាប់" + +msgid "SSL support unavailable" +msgstr "មិនមានការគាំទ្រ SSL" + +msgid "Couldn't create socket" +msgstr "មិនអាចបង្កើតរន្ធបានទេ" + +msgid "Couldn't connect to host" +msgstr "មិនអាចតភ្ជាប់ទៅកាន់ម៉ាស៊ីនបានទេ" + +msgid "Read error" +msgstr "កំហុសក្នុងការអាន" + +msgid "Users" +msgstr "អ្នកប្រើ" + +msgid "Topic" +msgstr "ប្រធានបទ" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +msgid "IRC Protocol Plugin" +msgstr "កម្មវិធីជំនួយពិធីការ IRC" + +#. * summary +msgid "The IRC Protocol Plugin that Sucks Less" +msgstr "កម្មវិធីជំនួយពិធីការ IRC ដែល Sucks Less" + +#. host to connect to +msgid "Server" +msgstr "ម៉ាស៊ីនបម្រើ" + +#. port to connect to +msgid "Port" +msgstr "ច្រក" + +msgid "Encodings" +msgstr "ការអ៊ិនកូដ" + +msgid "Auto-detect incoming UTF-8" +msgstr "រកឃើញ UTF-8 ចូលដោយស្វ័យប្រវត្តិ" + +msgid "Real name" +msgstr "ឈ្មោះពិត" + +#. +#. option = purple_account_option_string_new(_("Quit message"), "quitmsg", IRC_DEFAULT_QUIT); +#. prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); +#. +msgid "Use SSL" +msgstr "ប្រើ SSL" + +msgid "Bad mode" +msgstr "របៀបមិនល្អ" + +#, c-format +msgid "Ban on %s by %s, set %s ago" +msgstr "ហាមឃាត់នៅលើ %s ដោយ %s កំណត់ %s កន្លងទៅ" + +#, c-format +msgid "Ban on %s" +msgstr "ហាមឃាត់នៅលើ %s" + +msgid "End of ban list" +msgstr "ចុចបញ្ជីហាមឃាត់" + +#, c-format +msgid "You are banned from %s." +msgstr "អ្នកត្រូវបានហាមឃាត់ពី %s ។" + +msgid "Banned" +msgstr "បានហាមឃាត់" + +#, c-format +msgid "Cannot ban %s: banlist is full" +msgstr "មិនអាចហាមឃាត់ %s ៖ បញ្ជីហាមឃាត់ពេញហើយ" + +msgid " <i>(ircop)</i>" +msgstr " <i>(ircop)</i>" + +msgid " <i>(identified)</i>" +msgstr " <i>(បានបញ្ជាក់អត្តសញ្ញាណ)</i>" + +msgid "Nick" +msgstr "សម្មតិនាម" + +msgid "Currently on" +msgstr "បច្ចុប្បន្នបើក" + +msgid "Idle for" +msgstr "ទំនេរសម្រាប់" + +msgid "Online since" +msgstr "លើបណ្ដាញតាំងពី" + +msgid "<b>Defining adjective:</b>" +msgstr "<b>កំណត់គុណនាម ៖</b>" + +msgid "Glorious" +msgstr "Glorious" + +#, c-format +msgid "%s has changed the topic to: %s" +msgstr "%s បានផ្លាស់ប្ដូរប្រធានបទទៅ ៖ %s" + +#, c-format +msgid "%s has cleared the topic." +msgstr "%s បានជម្រះប្រធានបទ ។" + +#, c-format +msgid "The topic for %s is: %s" +msgstr "ប្រធានបទសម្រាប់ %s គឺ ៖ %s" + +#, c-format +msgid "Unknown message '%s'" +msgstr "មិនស្គាល់សារ '%s'" + +msgid "Unknown message" +msgstr "មិនស្គាល់សារ" + +msgid "The IRC server received a message it did not understand." +msgstr "ម៉ាស៊ីនបម្រើ IRC បានទទួលសារដែលវាមិនយល់ ។" + +#, c-format +msgid "Users on %s: %s" +msgstr "អ្នកប្រើនៅលើ %s ៖ %s" + +msgid "Time Response" +msgstr "ពេលវេលាឆ្លើយ" + +msgid "The IRC server's local time is:" +msgstr "ពេលវេលាមូលដ្ឋានរបស់ម៉ាស៊ីនបម្រើ IRC គឺ ៖" + +msgid "No such channel" +msgstr "គ្មានឆានែលបែបនេះទេ" + +#. does this happen? +msgid "no such channel" +msgstr "គ្មានឆានែលបែបនេះទេ" + +msgid "User is not logged in" +msgstr "អ្នកប្រើមិនបានចូលទេ" + +msgid "No such nick or channel" +msgstr "គ្មានសម្មតិនាម ឬឆានែលទេ" + +msgid "Could not send" +msgstr "មិនអាចផ្ញើ" + +#, c-format +msgid "Joining %s requires an invitation." +msgstr "ចូលរួម %s ត្រូវការការអញ្ជើញ ។" + +msgid "Invitation only" +msgstr "តែការអញ្ជើញប៉ុណ្ណោះ" + +#, c-format +msgid "You have been kicked by %s: (%s)" +msgstr "អ្នកត្រូវបានធាក់ចេញដោយ %s: (%s)" + +#. Remove user from channel +#, c-format +msgid "Kicked by %s (%s)" +msgstr "បានធាក់ចេញដោយ %s (%s)" + +#, c-format +msgid "mode (%s %s) by %s" +msgstr "របៀប (%s %s) ដោយ %s" + +msgid "Invalid nickname" +msgstr "សម្មតិនាមមិនត្រឹមត្រូវ" + +msgid "" +"Your selected nickname was rejected by the server. It probably contains " +"invalid characters." +msgstr "" +"សម្មតិនាមដែលអ្នកបានជ្រើសត្រូវបានបដិសេធដោយម៉ាស៊ីបម្រើ ។ វាប្រហែលជាមានតួអក្សរមិនត្រឹមត្រូវ ។" + +msgid "" +"Your selected account name was rejected by the server. It probably contains " +"invalid characters." +msgstr "" +"ឈ្មោះគណនីដែលអ្នកបានជ្រើសត្រូវបានបដិសេធដោយម៉ាស៊ីនបម្រើ ។ វាប្រហែលជាមានតួអក្សរមិនត្រឹមត្រូវ ។" + +msgid "Cannot change nick" +msgstr "មិនអាចផ្លាស់ប្ដូរសម្មតិនាមបានទេ" + +msgid "Could not change nick" +msgstr "មិនអាចផ្លាស់ប្ដូរសម្មតិនាមបានទេ" + +#, c-format +msgid "You have parted the channel%s%s" +msgstr "អ្នកបានបោះបង់ឆានែល %s%s" + +msgid "Error: invalid PONG from server" +msgstr "កំហុស ៖ PONG មិនត្រឹមត្រូវពីម៉ាស៊ីនបម្រើ" + +#, c-format +msgid "PING reply -- Lag: %lu seconds" +msgstr "PING reply -- Lag ៖ %lu វិនាទី" + +#, c-format +msgid "Cannot join %s: Registration is required." +msgstr "មិនអាចចូល %s ៖ តម្រូវឲ្យចុះឈ្មោះ ។" + +msgid "Cannot join channel" +msgstr "មិនអាចចូលឆានែលបានទេ" + +msgid "Nick or channel is temporarily unavailable." +msgstr "សម្មតិនាម ឬឆានែលមិនអាចប្រើបានជាបណ្ដោះអាសន្ន ។" + +#, c-format +msgid "Wallops from %s" +msgstr "វាយពី %s" + +msgid "action <action to perform>: Perform an action." +msgstr "សកម្មភាព <សកម្មភាពត្រូវអនុវត្ត> ៖ អនុវត្តសកម្មភាព ។" + +msgid "" +"away [message]: Set an away message, or use no message to return from being " +"away." +msgstr "[សារ] ចាកឆ្ងាយ ៖ កំណត់សារចាកឆ្ងាយ ឬប្រើគ្មានសារដើម្បីត្រឡប់ពីការចាកឆ្ងាយ ។" + +msgid "ctcp <nick> <msg>: sends ctcp msg to nick." +msgstr "ctcp <nick> <msg> ៖ ផ្ញើ ctcp msg ទៅកាន់សម្មតិនាម ។" + +msgid "chanserv: Send a command to chanserv" +msgstr "chanserv ៖ ផ្ញើលពាក្យបញ្ជាទៅកាន់ chanserv" + +msgid "" +"deop <nick1> [nick2] ...: Remove channel operator status from " +"someone. You must be a channel operator to do this." +msgstr "" +"deop <nick1> [nick2] ...: យកស្ថានភាពការីឆានែលពីអ្នកណាម្នាក់ ។ អ្នកត្រូវតែជាការី" +"ឆានែលដើម្បីធ្វើវា ។" + +msgid "" +"devoice <nick1> [nick2] ...: Remove channel voice status from " +"someone, preventing them from speaking if the channel is moderated (+m). You " +"must be a channel operator to do this." +msgstr "" +"devoice <nick1> [nick2] ...: យកស្ថានភាពសំឡេងឆានែលពីអ្នកណាម្នាក់ ដោយការពារ" +"ពួកគេពីការនិយាយ ប្រសិនបើឆានែលត្រូវបានប្រតិបត្តិ (+m) ។ អ្នកត្រូវតែជាការីឆានែលដើម្បីធ្វើវា ។" + +msgid "" +"invite <nick> [room]: Invite someone to join you in the specified " +"channel, or the current channel." +msgstr "" +"អញ្ជើញ <សម្មតិនាម> [បន្ទប់] ៖ អញ្ជើញអ្នកណាម្នាក់ឲ្យចូលរួមជាមួយអ្នកនៅក្នុងឆានែលដែលបាន" +"បញ្ជាក់ ឬឆានែលបច្ចុប្បន្ន ។" + +msgid "" +"j <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " +"channels, optionally providing a channel key for each if needed." +msgstr "" +"j <room1>[,room2][,...] [key1[,key2][,...]] ៖ បញ្ចូលឆានែលមួយ ឬច្រើន ជាជម្រើស" +"ផ្ដល់នូវសោឆានែលសម្រាប់ឆានែលនីមួយៗ ប្រសិនបើត្រូវការ ។" + +msgid "" +"join <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " +"channels, optionally providing a channel key for each if needed." +msgstr "" +"join <room1>[,room2][,...] [key1[,key2][,...]] ៖ បញ្ចូលឆានែលមួយ ឬច្រើន ជា" +"ជម្រើសដោយផ្ដល់គ្រាប់ចុចឆានែលសម្រាប់ឆានែលនីមួយៗ ប្រសិនបើត្រូវការ ។" + +msgid "" +"kick <nick> [message]: Remove someone from a channel. You must be a " +"channel operator to do this." +msgstr "" +"kick <nick> [message] ៖ យកអ្នកណាម្នាក់ចេញពីឆានែល ។ អ្នកត្រូវតែជាការីឆានែល" +"ដើម្បីការធ្វើការងារនេះ ។" + +msgid "" +"list: Display a list of chat rooms on the network. <i>Warning, some servers " +"may disconnect you upon doing this.</i>" +msgstr "" +"បញ្ជី ៖ បង្ហាញបញ្ជីបន្ទប់ជជែកនៅលើបណ្ដាញ ។ <i>ការព្រមាន ម៉ាស៊ីនបម្រើមួយចំនួនអាចផ្ដាច់អ្នកពីការធ្វើ" +"ការងារនេះ ។</i>" + +msgid "me <action to perform>: Perform an action." +msgstr "me <action to perform> ៖ អនុវត្តសកម្មភាព ។" + +msgid "memoserv: Send a command to memoserv" +msgstr "memoserv ៖ ផ្ញើពាក្យបញ្ជាទៅកាន់ memoserv" + +msgid "" +"mode <+|-><A-Za-z> <nick|channel>: Set or unset a channel " +"or user mode." +msgstr "" +"របៀប <+|-><A-Za-z> <nick|channel> ៖ កំណត់ ឬមិនកំណត់ឆានែល ឬរបៀប" +"អ្នកប្រើ ។" + +msgid "" +"msg <nick> <message>: Send a private message to a user (as " +"opposed to a channel)." +msgstr "" +"msg <nick> <message> ៖ ផ្ញើសារឯកជនទៅឲ្យអ្នកប្រើ (ដូចបានស្នើទៅ" +"កាន់ឆានែល) ។" + +msgid "names [channel]: List the users currently in a channel." +msgstr "names [channel] ៖ រាយអ្នកប្រើដែលបច្ចុប្បន្ននៅក្នុងឆានែល ។" + +msgid "nick <new nickname>: Change your nickname." +msgstr "nick <new nickname> ៖ ផ្លាស់ប្ដូរសម្មតិនាមរបស់អ្នក ។" + +msgid "nickserv: Send a command to nickserv" +msgstr "nickserv ៖ ផ្ញើពាក្យបញ្ជាទៅ nickserv" + +msgid "notice <target<: Send a notice to a user or channel." +msgstr "ចំណាំ <target< ៖ ផ្ញើការចំណាំទៅអ្នកប្រើ ឬឆានែល ។" + +msgid "" +"op <nick1> [nick2] ...: Grant channel operator status to someone. You " +"must be a channel operator to do this." +msgstr "" +"op <nick1> [nick2] ...: ផ្ដល់ស្ថានភាពការីឆានែលឲ្យអ្នកណាម្នាក់ ។ អ្នកត្រូវតែជាការី" +"ឆានែលដើម្បីធ្វើការងារនេះ ។" + +msgid "" +"operwall <message>: If you don't know what this is, you probably " +"can't use it." +msgstr "" +"operwall <message> ៖ ប្រសិនបើអ្នកមិនដឹងថាវាជាអ្វីទេ អ្នកប្រហែលជាមិនអាចប្រើវា" +"បានទេ ។" + +msgid "operserv: Send a command to operserv" +msgstr "operserv ៖ ផ្ញើពាក្យបញ្ជាទៅកាន់ operserv" + +msgid "" +"part [room] [message]: Leave the current channel, or a specified channel, " +"with an optional message." +msgstr "" +"part [room] [message] ៖ ចាកចេញពីឆានែលបច្ចុប្បន្ន ឬឆានែលដែលបានបញ្ជាក់ ដោយមានសារជា" +"ជម្រើស ។" + +msgid "" +"ping [nick]: Asks how much lag a user (or the server if no user specified) " +"has." +msgstr "" +"ping [nick]៖ សួរថាតើមានអ្នកប្រើយឺតប៉ុន្មាននាក់ (ឬម៉ាស៊ីនបម្រើ ប្រសិនបើគ្មានអ្នកប្រើបានបញ្ជាក់) " +"មាន ។" + +msgid "" +"query <nick> <message>: Send a private message to a user (as " +"opposed to a channel)." +msgstr "" +"សួរ <nick> <message> ៖ ផ្ញើសារឯកជនទៅកាន់អ្នកប្រើ (ដូចបានស្នើទៅឆានែល) ។" + +msgid "quit [message]: Disconnect from the server, with an optional message." +msgstr "quit [message] ៖ ផ្ដាច់ពីម៉ាស៊ីនបម្រើ ជាមួយនឹងសារជាជម្រើស ។" + +msgid "quote [...]: Send a raw command to the server." +msgstr "quote [...] ៖ ផ្ញើពាក្យបញ្ជាដើមថ្មីទៅកាន់ម៉ាស៊ីនបម្រើ ។" + +msgid "" +"remove <nick> [message]: Remove someone from a room. You must be a " +"channel operator to do this." +msgstr "" +"remove <nick> [message] ៖ យកអ្នកណាម្នាក់ចេញពីបន្ទប់ ។ អ្នកត្រូវតែជាការីបណ្ដាញ" +"ដើម្បីធ្វើការងារនេះ ។" + +msgid "time: Displays the current local time at the IRC server." +msgstr "ពេលវេលា ៖ បង្ហាញពេលវេលាមូលដ្ឋានបច្ចុប្បន្ននៅម៉ាស៊ីនបម្រើ IRC ។" + +msgid "topic [new topic]: View or change the channel topic." +msgstr "ប្រធានបទ [ប្រធានបទថ្មី] ៖ មើល ឬផ្លាស់ប្ដូរប្រធានបទរបស់ឆានែល ។" + +msgid "umode <+|-><A-Za-z>: Set or unset a user mode." +msgstr "umode <+|-><A-Za-z> ៖ កំណត់ ឬមិនកំណត់របៀបអ្នកប្រើ ។" + +msgid "version [nick]: send CTCP VERSION request to a user" +msgstr "កំណែ [nick] ៖ ផ្ញើសំណើកំណែរបស់ CTCP ទៅឲ្យអ្នកប្រើ" + +msgid "" +"voice <nick1> [nick2] ...: Grant channel voice status to someone. You " +"must be a channel operator to do this." +msgstr "" +"សំឡេង <nick1> [nick2] ...: ផ្ដល់នូវស្ថានភាពសំឡេងទៅឲ្យអ្នកណាម្នាក់ ។ អ្នកត្រូវតែជា" +"ការីឆានែលដើម្បីធ្វើការងារនេះ ។" + +msgid "" +"wallops <message>: If you don't know what this is, you probably can't " +"use it." +msgstr "" +"វាយ <សារ> ៖ ប្រសិនបើអ្នកមិនដឹងថានេះជាអ្វីទេ អ្នកប្រហែលជាមិនអាចប្រើវាបានទេ ។" + +msgid "whois [server] <nick>: Get information on a user." +msgstr "whois [server] <nick> ៖ យកព័ត៌មានរបស់អ្នកប្រើ ។" + +msgid "whowas <nick>: Get information on a user that has logged off." +msgstr "whowas <nick> ៖ យកព័ត៌មានរបស់អ្នកប្រើដេលបានចេញ ។" + +#, c-format +msgid "Reply time from %s: %lu seconds" +msgstr "ពេលវេលាឆ្លើយតបពី %s ៖ %lu វិនាទី" + +msgid "PONG" +msgstr "PONG" + +msgid "CTCP PING reply" +msgstr "ការឆ្លើយតបរបស់ CTCP PING" + +msgid "Disconnected." +msgstr "បានផ្ដាច់ ។" + +msgid "Unknown Error" +msgstr "មិនស្គាល់កំហុស" + +msgid "Ad-Hoc Command Failed" +msgstr "ពាក្យបញ្ជា Ad-Hoc បានបរាជ័យ" + +msgid "execute" +msgstr "ប្រតិបត្តិ" + +msgid "Server requires TLS/SSL for login. No TLS/SSL support found." +msgstr "ម៉ាស៊ីនបម្រើត្រូវការ TLS/SSL ដើម្បីចូល ។ រកមិនឃើញការគាំទ្រ TLS/SSL នោះទេ ។" + +msgid "You require encryption, but no TLS/SSL support found." +msgstr "អ្នកត្រូវការការអ៊ិនគ្រីប ប៉ុន្តែរកមិនឃើញការគាំទ្រ TLS/SSL ។" + +msgid "Server requires plaintext authentication over an unencrypted stream" +msgstr "ម៉ាស៊ីនបម្រើត្រូវការការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវជាអត្ថបទធម្មតាលើស្ទ្រីមដែលមិនបានអ៊ិនគ្រីប" + +#, c-format +msgid "" +"%s requires plaintext authentication over an unencrypted connection. Allow " +"this and continue authentication?" +msgstr "" +"%s ត្រូវការការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវធម្មតាលើការតភ្ជាប់ដែលមិនបានអ៊ិនគ្រីប ។ អនុញ្ញាតវា ហើយបន្ត" +"ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ?" + +msgid "Plaintext Authentication" +msgstr "ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវធម្មតា" + +msgid "Invalid response from server." +msgstr "ការឆ្លើយតបមិនត្រឹមត្រូវពីម៉ាស៊ីនបម្រើ ។" + +msgid "Server does not use any supported authentication method" +msgstr "ម៉ាស៊ិនបម្រើមិនប្រើវិធីសាស្ត្រផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវដែលបានគាំទ្រណាមួយទេ" + +msgid "Invalid challenge from server" +msgstr "ការប្រខិតខំមិនត្រឹមត្រូវពីម៉ាស៊ីនបម្រើ" + +msgid "SASL error" +msgstr "កំហុស SASL" + +msgid "Full Name" +msgstr "ឈ្មោះពេញ" + +msgid "Family Name" +msgstr "នាមត្រកូល" + +msgid "Given Name" +msgstr "នាមខ្លួន" + +msgid "URL" +msgstr "URL" + +msgid "Street Address" +msgstr "អាសយដ្ឋានផ្លូវ" + +msgid "Extended Address" +msgstr "អាសយដ្ឋានដែលបានពង្រីក" + +msgid "Locality" +msgstr "មូលដ្ឋាន" + +msgid "Region" +msgstr "តំបន់" + +msgid "Postal Code" +msgstr "លេខប្រៃសណីយ៍" + +msgid "Country" +msgstr "ប្រទេស" + +#. lots of clients (including purple) do this, but it's +#. * out of spec +msgid "Telephone" +msgstr "ទូរស័ព្ទ" + +msgid "Organization Name" +msgstr "ឈ្មោះអង្គភាព" + +msgid "Organization Unit" +msgstr "ផ្នែកនៃអង្គភាព" + +msgid "Role" +msgstr "តួនាទី" + +msgid "Birthday" +msgstr "ថ្ងៃកំណើត" + +msgid "Description" +msgstr "សេចក្ដីពិពណ៌នា" + +msgid "Edit XMPP vCard" +msgstr "កែសម្រួល XMPP vCard" + +msgid "" +"All items below are optional. Enter only the information with which you feel " +"comfortable." +msgstr "ធាតុទាំងអស់ខាងក្រោមជាជម្រើស ។ បញ្ចូលតែព័ត៌មានដែលអ្នកគិតថាងាយស្រួល ។" + +msgid "Client" +msgstr "ម៉ាស៊ីនភ្ញៀវ" + +msgid "Operating System" +msgstr "ប្រព័ន្ធប្រតិបត្តិការ" + +msgid "Last Activity" +msgstr "សកម្មភាពចុងក្រោយ" + +msgid "Service Discovery Info" +msgstr "ព័ត៌មានរកឃើញសេវា" + +msgid "Service Discovery Items" +msgstr "ធាតុរកឃើញព័ត៌មាន" + +msgid "Extended Stanza Addressing" +msgstr "កំណត់អាសយដ្ឋាន Stanza ដែលបានពង្រីក" + +msgid "Multi-User Chat" +msgstr "ការជជែកដែលមានអ្នកប្រើច្រើននាក់" + +msgid "Multi-User Chat Extended Presence Information" +msgstr "ព័ត៌មានវត្តមានដែលបានពង្រីកនៃការជជែកដែលមានអ្នកប្រើច្រើននាក់" + +msgid "In-Band Bytestreams" +msgstr "ស្ទ្រីមបៃក្នុងក្រុម" + +msgid "Ad-Hoc Commands" +msgstr "ពាក្យបញ្ជា Ad-Hoc" + +msgid "PubSub Service" +msgstr "សេវា PubSub" + +msgid "SOCKS5 Bytestreams" +msgstr "ស្ទ្រីមបៃ SOCKS5" + +msgid "Out of Band Data" +msgstr "ទិន្នន័យក្រៅក្រុម" + +msgid "XHTML-IM" +msgstr "XHTML-IM" + +msgid "In-Band Registration" +msgstr "ការចុះឈ្មោះក្នុងក្រុម" + +msgid "User Location" +msgstr "ទីតាំងរបស់អ្នកប្រើ" + +msgid "User Avatar" +msgstr "រូបភាពរបស់អ្នក" + +msgid "Chat State Notifications" +msgstr "ការជូនដំណឹងស្ថានភាពជជែក" + +msgid "Software Version" +msgstr "កំណែកម្មវិធី" + +msgid "Stream Initiation" +msgstr "ការចាប់ផ្ដើមស្ទ្រីម" + +msgid "File Transfer" +msgstr "ការផ្ទេរឯកសារ" + +msgid "User Mood" +msgstr "អារម្មណ៍អ្នកប្រើ" + +msgid "User Activity" +msgstr "សកម្មភាពអ្នកប្រើ" + +msgid "Entity Capabilities" +msgstr "សមត្ថភាពអង្គភាព" + +msgid "Encrypted Session Negotiations" +msgstr "ការចរចារសម័យដែលបានអ៊ិនគ្រីប" + +msgid "User Tune" +msgstr "អ្នកប្រើ" + +msgid "Roster Item Exchange" +msgstr "ផ្លាស់ប្ដូរធាតុបញ្ជីឈ្មោះ" + +msgid "Reachability Address" +msgstr "អាសយដ្ឋានដែលអាចចូលបាន" + +msgid "User Profile" +msgstr "ទម្រង់អ្នកប្រើ" + +msgid "Jingle" +msgstr "ឃ្លាខ្លីៗ" + +msgid "Jingle Audio" +msgstr "អូឌីយ៉ូឃ្លាខ្លីៗ" + +msgid "User Nickname" +msgstr "សម្មតិនាមអ្នកប្រើ" + +msgid "Jingle ICE UDP" +msgstr "ឃ្លាខ្លីៗរបស់ ICE UDP" + +msgid "Jingle ICE TCP" +msgstr "ឃ្លាខ្លីៗរបស់ ICE TCP" + +msgid "Jingle Raw UDP" +msgstr "ឃ្លាខ្លីៗរបស់ UDP ដើម" + +msgid "Jingle Video" +msgstr "វីដេអូឃ្លាខ្លីៗ" + +msgid "Jingle DTMF" +msgstr "ឃ្លាខ្លីៗ DTMF" + +msgid "Message Receipts" +msgstr "ទទួលសារ" + +msgid "Public Key Publishing" +msgstr "បោះពុម្ពគ្រាប់ចុចសាធារណៈ" + +msgid "User Chatting" +msgstr "ការជជែករបស់អ្នកប្រើ" + +msgid "User Browsing" +msgstr "ការរុករករបស់អ្នកប្រើ" + +msgid "User Gaming" +msgstr "ការលេងល្បែងរបស់អ្នកប្រើ" + +msgid "User Viewing" +msgstr "ការមើលរបស់អ្នកប្រើ" + +msgid "Ping" +msgstr "Ping" + +msgid "Stanza Encryption" +msgstr "ការអ៊ិនគ្រីប Stanza" + +msgid "Entity Time" +msgstr "ពេលវេលារបស់អង្គភាព" + +msgid "Delayed Delivery" +msgstr "ការបញ្ជូនបានពន្យារពេល" + +msgid "Collaborative Data Objects" +msgstr "វត្ថុទិន្នន័យសហការណ៍" + +msgid "File Repository and Sharing" +msgstr "ឃ្លាំងឯកសារ និងការចែករំលែក" + +msgid "STUN Service Discovery for Jingle" +msgstr "ការរកឃើញសេវា STUN សម្រាប់ឃ្លាខ្លីៗ" + +msgid "Simplified Encrypted Session Negotiation" +msgstr "ការចរចារសម័យដែលបានអ៊ិនគ្រីបសាមញ្ញ" + +msgid "Hop Check" +msgstr "ពិនិត្យមើលដំណាក់" + +msgid "Capabilities" +msgstr "សមត្ថភាព" + +msgid "Priority" +msgstr "អាទិភាព" + +msgid "Resource" +msgstr "ធមធាម" + +msgid "Middle Name" +msgstr "ឈ្មោះកណ្ដាល" + +msgid "Address" +msgstr "អាសយដ្ឋាន" + +msgid "P.O. Box" +msgstr "ប្រអប់សំបុត្រ" + +msgid "Photo" +msgstr "រូបថត" + +msgid "Logo" +msgstr "រូបសញ្ញា" + +msgid "Un-hide From" +msgstr "មិនលាក់ពី" + +msgid "Temporarily Hide From" +msgstr "លាក់ជាបណ្ដោះអាសន្នពី" + +#. && NOT ME +msgid "Cancel Presence Notification" +msgstr "បោះបង់ការជូនដំណឹងបច្ចុប្បន្ន" + +msgid "(Re-)Request authorization" +msgstr "ស្នើផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវឡើងវិញ" + +#. if(NOT ME) +#. shouldn't this just happen automatically when the buddy is +#. removed? +msgid "Unsubscribe" +msgstr "ឈប់ជាវ" + +msgid "Log In" +msgstr "ចូល" + +msgid "Log Out" +msgstr "ចេញ" + +msgid "Chatty" +msgstr "ការជជែក" + +msgid "Extended Away" +msgstr "ការចាកឆ្ងាយបានពន្យារ" + +msgid "Do Not Disturb" +msgstr "កុំរំខាន" + +msgid "JID" +msgstr "JID" + +msgid "Last Name" +msgstr "នាមត្រកូល" + +msgid "The following are the results of your search" +msgstr "ខាងក្រោមនេះជាលទ្ធផលនៃការស្វែងរករបស់អ្នក" + +#. current comment from Jabber User Directory users.jabber.org +msgid "" +"Find a contact by entering the search criteria in the given fields. Note: " +"Each field supports wild card searches (%)" +msgstr "" +"រកទំនាក់ទំនងដោយបញ្ចូលលក្ខខណ្ឌស្វែងរកនៅក្នុងវាលដែលបានផ្ដល់ ។ ចំណាំ ៖ វាលនីមួយៗគាំទ្រការស្វែងរកដោយ" +"អក្សរជំនួស (%)" + +msgid "Directory Query Failed" +msgstr "បានបរាជ័យក្នុងការសួរថត" + +msgid "Could not query the directory server." +msgstr "មិនអាចសួរម៉ាស៊ីនបម្រើថតបានទេ ។" + +#. Try to translate the message (see static message +#. list in jabber_user_dir_comments[]) +#, c-format +msgid "Server Instructions: %s" +msgstr "ការណែនាំម៉ាស៊ីនបម្រើ ៖ %s" + +msgid "Fill in one or more fields to search for any matching XMPP users." +msgstr "បំពេញវាលមួយ ឬច្រើនដើម្បីស្វែងរកអ្នកប្រើ XMPP ដែលផ្គូផ្គង ។" + +msgid "Email Address" +msgstr "អាសយដ្ឋានអ៊ីមែល" + +msgid "Search for XMPP users" +msgstr "ស្វែងរកអ្នកប្រើ XMPP" + +#. "Search" +msgid "Search" +msgstr "ស្វែងរក" + +msgid "Invalid Directory" +msgstr "ថតមិនត្រឹមត្រូវ" + +msgid "Enter a User Directory" +msgstr "បញ្ចូលថតរបស់អ្នកប្រើ" + +msgid "Select a user directory to search" +msgstr "ជ្រើសថតអ្នកប្រើដែលត្រូវស្វែងរក" + +msgid "Search Directory" +msgstr "ថតស្វែងរក" + +msgid "_Room:" +msgstr "បន្ទប់ ៖" + +msgid "_Server:" +msgstr "ម៉ាស៊ីនបម្រើ ៖" + +msgid "_Handle:" +msgstr "គ្រប់គ្រង ៖" + +#, c-format +msgid "%s is not a valid room name" +msgstr "%s មិនមែនជាឈ្មោះបន្ទប់ត្រឹមត្រូវទេ" + +msgid "Invalid Room Name" +msgstr "ឈ្មោះបន្ទប់មិនត្រឹមត្រូវ" + +#, c-format +msgid "%s is not a valid server name" +msgstr "%s មិនមែនជាឈ្មោះម៉ាស៊ីនបម្រើដែលត្រឹមត្រូវទេ" + +msgid "Invalid Server Name" +msgstr "ឈ្មោះម៉ាស៊ីនបម្រើមិនត្រឹមត្រូវ" + +#, c-format +msgid "%s is not a valid room handle" +msgstr "%s មិនមែនជាការគ្រប់គ្រងបន្ទប់ត្រឹមត្រូវទេ" + +msgid "Invalid Room Handle" +msgstr "គ្រប់គ្រងបន្ទប់មិនត្រឹមត្រូវ" + +msgid "Configuration error" +msgstr "កំហុសក្នុងការកំណត់រចនាសម្ព័ន្ធ" + +msgid "Unable to configure" +msgstr "មិនអាចកំណត់រចនាសម្ព័ន្ធបានទេ" + +msgid "Room Configuration Error" +msgstr "កំហុសក្នុងការកំណត់រចនាសម្ព័ន្ធបន្ទប់" + +msgid "This room is not capable of being configured" +msgstr "បន្ទប់នេះមិនអាចត្រូវបានកំណត់រចនាសម្ព័ន្ធទេ" + +msgid "Registration error" +msgstr "កំហុសក្នុងការចុះឈ្មោះ" + +msgid "Nick changing not supported in non-MUC chatrooms" +msgstr "ការផ្លាស់ប្ដូរសម្មតិនាមមិនបានគាំទ្រនៅក្នុងបន្ទប់ជជែកដែលមិនមែនជា MUC" + +msgid "Error retrieving room list" +msgstr "កំហុសក្នុងការទៅយកបញ្ជីបន្ទប់" + +msgid "Invalid Server" +msgstr "ម៉ាស៊ីនបម្រើមិនត្រឹមត្រូវ" + +msgid "Enter a Conference Server" +msgstr "បញ្ចូលម៉ាស៊ីនបម្រើសន្និសីទ" + +msgid "Select a conference server to query" +msgstr "ជ្រើសម៉ាស៊ីនបម្រើសន្និសីទត្រូវសួរ" + +msgid "Find Rooms" +msgstr "រកបន្ទប់" + +msgid "You require encryption, but it is not available on this server." +msgstr "អ្នកត្រូវការការអ៊ិនគ្រីប ប៉ុន្តែមិនអាចប្រើបាននៅលើម៉ាស៊ីនបម្រើនេះទេ ។" + +msgid "Write error" +msgstr "កំហុសក្នុងការសរសេរ" + +msgid "Ping timeout" +msgstr "Ping អស់ពេល" + +msgid "Read Error" +msgstr "កំហុសក្នុងការអាន" + +#, c-format +msgid "" +"Could not establish a connection with the server:\n" +"%s" +msgstr "" +"មិនអាចបង្កើតការតភ្ជាប់ជាមួយម៉ាស៊ីនបម្រើ ៖\n" +"%s" + +msgid "Unable to create socket" +msgstr "មិនអាចបង្កើតរន្ធបានទេ" + +msgid "Invalid XMPP ID" +msgstr "លេខសម្គាល់ XMPP មិនត្រឹមត្រូវ" + +msgid "Invalid XMPP ID. Domain must be set." +msgstr "លេខសម្គាល់ XMPP មិនត្រឹមត្រូវ ។ ដែនត្រូវតែបានកំណត់ ។" + +#, c-format +msgid "Registration of %s@%s successful" +msgstr "ការចុះឈ្មោះ %s@%s ដោយជោគជ័យ" + +#, c-format +msgid "Registration to %s successful" +msgstr "ការចុះឈ្មោះទៅ %s ដោយជោគជ័យ" + +msgid "Registration Successful" +msgstr "ការចុះឈ្មោះបានជោគជ័យ" + +msgid "Registration Failed" +msgstr "បានបរាជ័យក្នុងការចុះឈ្មោះ" + +#, c-format +msgid "Registration from %s successfully removed" +msgstr "បានយកការចុះឈ្មោះពី %s ដោយជោគជ័យចេញ" + +msgid "Unregistration Successful" +msgstr "លុបការចុះឈ្មោះដោយជោគជ័យ" + +msgid "Unregistration Failed" +msgstr "បានបរាជ័យក្នុងការលុបការចុះឈ្មោះ" + +msgid "Already Registered" +msgstr "បានចុះឈ្មោះរួចហើយ" + +msgid "State" +msgstr "ស្ថានភាព" + +msgid "Postal code" +msgstr "លេខប្រៃសណីយ៍" + +msgid "Phone" +msgstr "ទូរស័ព្ទ" + +msgid "Date" +msgstr "កាលបរិច្ឆេទ" + +msgid "Unregister" +msgstr "មិនចុះឈ្មោះ" + +msgid "" +"Please fill out the information below to change your account registration." +msgstr "សូមបំពេញព័ត៌មានខាងក្រោម ដើម្បីផ្លាស់ប្ដូរការចុះឈ្មោះគណនីរបស់អ្នក ។" + +msgid "Please fill out the information below to register your new account." +msgstr "សូមបំពេញព័ត៌មានខាងក្រោម ដើម្បីចុះឈ្មោះគណនីថ្មីរបស់អ្នក ។" + +msgid "Register New XMPP Account" +msgstr "ចុះឈ្មោះគណនី XMPP ថ្មី" + +msgid "Register" +msgstr "ចុះឈ្មោះ" + +#, c-format +msgid "Change Account Registration at %s" +msgstr "ផ្លាស់ប្ដូរការចុះឈ្មោះគណនីនៅ %s" + +#, c-format +msgid "Register New Account at %s" +msgstr "ចុះឈ្មោះគណនីថ្មីនៅ %s" + +msgid "Change Registration" +msgstr "ផ្លាស់ប្តូរការចុះឈ្មោះ" + +msgid "Error unregistering account" +msgstr "កំហុសក្នុងការលុបការចុះឈ្មោះគណនី" + +msgid "Account successfully unregistered" +msgstr "បានលុបការចុះឈ្មោះគណនីដោយជោគជ័យ" + +msgid "Initializing Stream" +msgstr "ចាប់ផ្ដើមស្ទ្រីម" + +msgid "Initializing SSL/TLS" +msgstr "ចាប់ផ្ដើម SSL/TLS" + +msgid "Authenticating" +msgstr "ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +msgid "Re-initializing Stream" +msgstr "ចាប់ផ្ដើមស្ទ្រីមឡើងវិញ" + +msgid "Server doesn't support blocking" +msgstr "ម៉ាស៊ីនបម្រើមិនគាំទ្រការទប់ស្កាត់ទេ" + +msgid "Not Authorized" +msgstr "មិនបានផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវទេ" + +msgid "Both" +msgstr "ទាំងពីរ" + +msgid "From (To pending)" +msgstr "ពី (ដល់មិនទាន់សម្រេច)" + +msgid "From" +msgstr "ពី" + +msgid "To" +msgstr "ទៅ" + +msgid "None (To pending)" +msgstr "គ្មាន (ដល់មិនទាន់សម្រេច)" + +msgid "None" +msgstr "គ្មាន" + +msgid "Subscription" +msgstr "ការជាវ" + +msgid "Mood" +msgstr "អារម្មណ៍" + +msgid "Now Listening" +msgstr "ឥឡូវកំពុងស្ដាប់" + +msgid "Mood Text" +msgstr "អត្ថបទអារម្មណ៍" + +msgid "Allow Buzz" +msgstr "អនុញ្ញាត Buzz" + +msgid "Tune Artist" +msgstr "សិល្បករ Tune" + +msgid "Tune Title" +msgstr "ចំណងជើង Tune" + +msgid "Tune Album" +msgstr "អាល់ប៊ុម Tune" + +msgid "Tune Genre" +msgstr "ប្រភេទ Tune" + +msgid "Tune Comment" +msgstr "អធិប្បាយ Tune" + +msgid "Tune Track" +msgstr "បទ Tune" + +msgid "Tune Time" +msgstr "ពេលវេលា Tune" + +msgid "Tune Year" +msgstr "ឆ្នាំ Tune" + +msgid "Tune URL" +msgstr "URL Tune" + +msgid "Password Changed" +msgstr "បានផ្លាស់ប្ដូរពាក្យសម្ងាត់" + +msgid "Your password has been changed." +msgstr "ពាក្យសម្ងាត់របស់អ្នកត្រូវបានផ្លាស់ប្ដូរ ។" + +msgid "Error changing password" +msgstr "កំហុសក្នុងការផ្លាស់ប្ដូរពាក្យសម្ងាត់" + +msgid "Password (again)" +msgstr "ពាក្យសម្ងាត់ (ម្ដងទៀត)" + +msgid "Change XMPP Password" +msgstr "ផ្លាស់ប្ដូរពាក្យសម្ងាត់ XMPP" + +msgid "Please enter your new password" +msgstr "សូមបញ្ចូលពាក្យសម្ងាត់ថ្មីរបស់អ្នក" + +msgid "Set User Info..." +msgstr "កំណត់ព័ត៌មានរបស់អ្នកប្រើ..." + +#. if (js->protocol_options & CHANGE_PASSWORD) { +msgid "Change Password..." +msgstr "ផ្លាស់ប្ដូរពាក្យសម្ងាត់..." + +#. } +msgid "Search for Users..." +msgstr "ស្វែងរកអ្នកប្រើ..." + +msgid "Bad Request" +msgstr "សំណើមិនល្អ" + +msgid "Conflict" +msgstr "ប៉ះទង្គិច" + +msgid "Feature Not Implemented" +msgstr "លក្ខណៈពិសេសមិនបានអនុវត្ត" + +msgid "Forbidden" +msgstr "បានហាមឃាត់" + +msgid "Gone" +msgstr "បានទៅហើយ" + +msgid "Internal Server Error" +msgstr "កំហុសម៉ាស៊ីនបម្រើខាងក្នុង" + +msgid "Item Not Found" +msgstr "រកមិនឃើញធាតុ" + +msgid "Malformed XMPP ID" +msgstr "លេខសម្គាល់ XMPP មានទ្រង់ទ្រាយ" + +msgid "Not Acceptable" +msgstr "មិនអាចទទួលយកបានទេ" + +msgid "Not Allowed" +msgstr "មិនបានអនុញ្ញាតទេ" + +msgid "Payment Required" +msgstr "ត្រូវការការចំណាយ" + +msgid "Recipient Unavailable" +msgstr "មិនមានអ្នកទទួលទេ" + +msgid "Registration Required" +msgstr "ត្រូវការការចុះឈ្មោះ" + +msgid "Remote Server Not Found" +msgstr "រកមិនឃើញម៉ាស៊ីនបម្រើពីចម្ងាយ" + +msgid "Remote Server Timeout" +msgstr "អស់ពេលម៉ាស៊ីនបម្រើពីចម្ងាយ" + +msgid "Server Overloaded" +msgstr "លើសចំណុះម៉ាស៊ីនបម្រើ" + +msgid "Service Unavailable" +msgstr "មិនមានសេវាទេ" + +msgid "Subscription Required" +msgstr "ត្រូវការការជាវ" + +msgid "Unexpected Request" +msgstr "សំណើដែលមិនរំពឹងទុក" + +msgid "Authorization Aborted" +msgstr "បានបោះបង់ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +msgid "Incorrect encoding in authorization" +msgstr "ការអ៊ិនកូដមិនត្រឹមត្រូវនៅក្នុងការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +msgid "Invalid authzid" +msgstr "ការផ្ទៀងផ្ទាត់មិនត្រឹមត្រូវ" + +msgid "Invalid Authorization Mechanism" +msgstr "យន្ដការផ្ទៀងផ្ទាត់មិនត្រឹមត្រូវ" + +msgid "Authorization mechanism too weak" +msgstr "យន្តការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវខ្សោយពេក" + +msgid "Temporary Authentication Failure" +msgstr "ភាពបរាជ័យក្នុងការផ្ទៀងផ្ទាត់បណ្ដោះអាសន្ន" + +msgid "Authentication Failure" +msgstr "ភាពបរាជ័យក្នុងការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +msgid "Bad Format" +msgstr "ទ្រង់ទ្រាយមិនល្អ" + +msgid "Bad Namespace Prefix" +msgstr "បុព្វបទចន្លោះឈ្មោះមិនល្អ" + +msgid "Resource Conflict" +msgstr "ប៉ះទង្គិចធនធាន" + +msgid "Connection Timeout" +msgstr "អស់ពេលតភ្ជាប់" + +msgid "Host Gone" +msgstr "ម៉ាស៊ីនបានទៅហើយ" + +msgid "Host Unknown" +msgstr "មិនស្គាល់ម៉ាស៊ីន" + +msgid "Improper Addressing" +msgstr "ការដាក់អាសយដ្ឋានមិនត្រឹមត្រូវ" + +msgid "Invalid ID" +msgstr "លេខសម្គាល់មិនត្រឹមត្រូវ" + +msgid "Invalid Namespace" +msgstr "ចន្លោះឈ្មោះមិនត្រឹមត្រូវ" + +msgid "Invalid XML" +msgstr "XML មិនត្រឹមត្រូវ" + +msgid "Non-matching Hosts" +msgstr "គ្មានម៉ាស៊ីនផ្គូផ្គងទេ" + +msgid "Policy Violation" +msgstr "ការបំពានគោលនយោបាយ" + +msgid "Remote Connection Failed" +msgstr "បានបរាជ័យក្នុងការតភ្ជាប់ពីចម្ងាយ" + +msgid "Resource Constraint" +msgstr "ការដាក់កម្រិតធនធាន" + +msgid "Restricted XML" +msgstr "XML ដែលបានដាក់កម្រិត" + +msgid "See Other Host" +msgstr "មើលម៉ាស៊ីនផ្សេង" + +msgid "System Shutdown" +msgstr "បិទប្រព័ន្ធ" + +msgid "Undefined Condition" +msgstr "លក្ខខណ្ឌមិនបានកំណត់" + +msgid "Unsupported Encoding" +msgstr "ការអ៊ិនកូដដែលមិនបានគាំទ្រ" + +msgid "Unsupported Stanza Type" +msgstr "ប្រភេទ Stanza ដែលមិនបានគាំទ្រ" + +msgid "Unsupported Version" +msgstr "កំណែដែលមិនបានគាំទ្រ" + +msgid "XML Not Well Formed" +msgstr "XML មិនបានរៀបចំបានល្អ" + +msgid "Stream Error" +msgstr "កំហុសស្ទ្រីម" + +#, c-format +msgid "Unable to ban user %s" +msgstr "មិនអាចហាមឃាត់អ្នកប្រើ %s" + +#, c-format +msgid "Unknown affiliation: \"%s\"" +msgstr "មិនស្គាល់ការទាក់ទងគ្នា ៖ \"%s\"" + +#, c-format +msgid "Unable to affiliate user %s as \"%s\"" +msgstr "មិនអាចទាក់ទងអ្នកប្រើ %s ជា \"%s\"" + +#, c-format +msgid "Unknown role: \"%s\"" +msgstr "មិនស្គាល់តួនាទី ៖ \"%s\"" + +#, c-format +msgid "Unable to set role \"%s\" for user: %s" +msgstr "មិនអាចកំណត់តួនាទី \"%s\" សម្រាប់អ្នកប្រើ ៖ %s" + +#, c-format +msgid "Unable to kick user %s" +msgstr "មិនអាចធាក់អ្នកប្រើ %s បានទេ" + +#, c-format +msgid "Unable to ping user %s" +msgstr "មិនអាច ping អ្នកប្រើ %s បានទេ" + +#, c-format +msgid "Unable to buzz, because there is nothing known about user %s." +msgstr "មិនអាចកេះកៀវបានទេ ពីព្រោះមិនស្គាល់អំពីអ្នកប្រើ %s ។" + +#, c-format +msgid "Unable to buzz, because user %s might be offline." +msgstr "មិនអាចកេះកៀងបានទេ ពីព្រើអ្នកប្រើ %s នៅក្រៅបណ្ដាញ ។" + +#, c-format +msgid "Unable to buzz, because the user %s does not support it." +msgstr "មិនអាចកេះកៀវបានទេ ពីព្រោះអ្នកប្រើ %s មិនគាំទ្រវាទេ ។" + +#. Yahoo only supports one attention command: the 'buzz'. +#. This is index number YAHOO_BUZZ. +msgid "Buzz" +msgstr "កេះកៀវ" + +#, c-format +msgid "%s has buzzed you!" +msgstr "%s បានកេះកៀវអ្នក !" + +#, c-format +msgid "Buzzing %s..." +msgstr "កំពុងកេះកៀវ %s..." + +msgid "config: Configure a chat room." +msgstr "config ៖ កំណត់រចនាសម្ព័ន្ធបន្ទប់ជជែក ។" + +msgid "configure: Configure a chat room." +msgstr "កំណត់រចនាសម្ព័ន្ធ ៖ កំណត់រចនាសម្ព័ន្ធបន្ទប់ជជែក ។" + +msgid "part [room]: Leave the room." +msgstr "part [room] ៖ ចេញពីបន្ទប់ ។" + +msgid "register: Register with a chat room." +msgstr "ចុះឈ្មោះ ៖ ចុះឈ្មោះក្នុងបន្ទប់ជជែក ។" + +msgid "topic [new topic]: View or change the topic." +msgstr "ប្រធានបទ [ប្រធានបទថ្មី] ៖ មើល ឬផ្លាស់ប្ដូរប្រធានបទ ។" + +msgid "ban <user> [reason]: Ban a user from the room." +msgstr "ហាមឃាត់ <អ្នកប្រើ> [ហេតុផល] ៖ ហាមឃាត់អ្នកប្រើពីបន្ទប់ ។" + +msgid "" +"affiliate <user> <owner|admin|member|outcast|none>: Set a user's " +"affiliation with the room." +msgstr "" +"ទាក់ទង <អ្នកប្រើ> <ម្ចាស់|អ្នកគ្រប់គ្រង|សមាជិក|outcast|គ្មាន> ៖ កំណត់ទំនាក់ទំនង" +"របស់អ្នកប្រើជាមួយនឹងបន្ទប់ ។" + +msgid "" +"role <user> <moderator|participant|visitor|none>: Set a user's " +"role in the room." +msgstr "" +"តួនាទី <អ្នកប្រើ> <អ្នកអន្តរការី|អ្នកចូលរួម|អ្នកទស្សនា|គ្មាន> ៖ កំណត់តួនាទីរបស់អ្នក" +"ប្រើនៅក្នុងបន្ទប់ ។" + +msgid "invite <user> [message]: Invite a user to the room." +msgstr "អញ្ជើញ <អ្នកប្រើ> [សារ] ៖ អញ្ជើញអ្នកប្រើឲ្យចូលបន្ទប់ ។" + +msgid "join: <room> [password]: Join a chat on this server." +msgstr "ចូល ៖ <បន្ទប់> [ពាក្យសម្ងាត់] ៖ ចូលក្នុងការជជែកនៅលើម៉ាស៊ីនបម្រើនេះ ។" + +msgid "kick <user> [reason]: Kick a user from the room." +msgstr "ធាក់ <អ្នកប្រើ> [ហេតុផល] ៖ ធាក់អ្នកប្រើពីបន្ទប់ ។" + +msgid "" +"msg <user> <message>: Send a private message to another user." +msgstr "msg <អ្នកប្រើ> <សារ> ៖ ផ្ញើសារឯកជនទៅអ្នកប្រើផ្សេង ។" + +msgid "ping <jid>:\tPing a user/component/server." +msgstr "ping <jid> ៖ Ping អ្នកប្រើ/សមាសធាតុ/ម៉ាស៊ីនបម្រើ ។" + +msgid "buzz: Buzz a user to get their attention" +msgstr "កេះកៀវ ៖ កេះកៀវអ្នកប្រើដើម្បីទទួលបានការចាប់អារម្មណ៍របស់ពួកគេ" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "XMPP Protocol Plugin" +msgstr "កម្មវិធីជំនួយពិធីការ XMPP" + +#. Translators: 'domain' is used here in the context of Internet domains, e.g. pidgin.im +msgid "Domain" +msgstr "ដែន" + +msgid "Require SSL/TLS" +msgstr "ត្រូវការ SSL/TLS" + +msgid "Force old (port 5223) SSL" +msgstr "បង្ខុះ (ច្រក 5223) SSL ចាស់" + +msgid "Allow plaintext auth over unencrypted streams" +msgstr "អនុញ្ញាតឲ្យអត្ថបទធម្មតាលើស្ទ្រីមដែលមិនបានអ៊ិនគ្រីប" + +msgid "Connect port" +msgstr "ច្រកតភ្ជាប់" + +#. TODO: default to automatically try different ports. Make the user be +#. * able to set the first port to try (like LastConnectedPort in Windows client). +#. Account options +msgid "Connect server" +msgstr "តភ្ជាប់ម៉ាស៊ីនបម្រើ" + +msgid "File transfer proxies" +msgstr "ប្រូកស៊ីការផ្ទេរឯកសារ" + +#. this should probably be part of global smiley theme settings later on, +#. shared with MSN +msgid "Show Custom Smileys" +msgstr "បង្ហាញសញ្ញាណញញឹមផ្ទាល់" + +#, c-format +msgid "%s has left the conversation." +msgstr "%s បានចេញពីការសន្ទនា ។" + +#, c-format +msgid "Message from %s" +msgstr "សារពី %s" + +#, c-format +msgid "%s has set the topic to: %s" +msgstr "%s បានកំណត់ប្រធានបទទៅ ៖ %s" + +#, c-format +msgid "The topic is: %s" +msgstr "ប្រធានបទគឺ ៖ %s" + +#, c-format +msgid "Message delivery to %s failed: %s" +msgstr "បានបរាជ័យក្នុងការបញ្ជូនសារ %s ៖ %s" + +msgid "XMPP Message Error" +msgstr "កំហុសសារ XMPP" + +#, c-format +msgid "(Code %s)" +msgstr "(កូដ %s)" + +msgid "XML Parse error" +msgstr "កំហុសក្នុងការញែក XML" + +msgid "Unknown Error in presence" +msgstr "មិនស្គាល់កំហុសនៅក្នុងវត្តមាន" + +msgid "Create New Room" +msgstr "បង្កើតបន្ទប់ថ្មី" + +msgid "" +"You are creating a new room. Would you like to configure it, or accept the " +"default settings?" +msgstr "អ្នកបង្កើតបន្ទប់ថ្មី ។ តើអ្នកចង់កំណត់រចនាសម្ព័ន្ធវាដែរឬទេ ឬព្រមទទួលការកំណត់លំនាំដើម ?" + +msgid "_Configure Room" +msgstr "កំណត់រចនាសម្ព័ន្ធបន្ទប់" + +msgid "_Accept Defaults" +msgstr "ព្រមទទួលលំនាំដើម" + +#, c-format +msgid "Error joining chat %s" +msgstr "កំហុសក្នុងការចូលក្នុងការជជែក %s" + +#, c-format +msgid "Error in chat %s" +msgstr "កំហុសនៅក្នុងការជជែក %s" + +#, c-format +msgid "Unable to send file to %s, user does not support file transfers" +msgstr "មិនអាចផ្ញើសារទៅកាន់ %s អ្នកប្រើមិនគាំទ្រការផ្ទេរឯកសារទេ" + +msgid "File Send Failed" +msgstr "បានបរាជ័យក្នុងការផ្ញើឯកសារ" + +#, c-format +msgid "Unable to send file to %s, invalid JID" +msgstr "មិនអាចផ្ញើឯកសារទៅកាន់ %s បានទេ ដោយសារតែ JID មិនត្រឹមត្រូវ" + +#, c-format +msgid "Unable to send file to %s, user is not online" +msgstr "មិនអាចផ្ញើឯកសារ %s បានទេ អ្នកប្រើមិននៅលើបណ្ដាញទេ" + +#, c-format +msgid "Unable to send file to %s, not subscribed to user presence" +msgstr "មិនអាចផ្ញើឯកសារ %s បានទេ មិនបានជាវទៅវត្តមានរបស់អ្នកប្រើ" + +#, c-format +msgid "Please select the resource of %s to which you would like to send a file" +msgstr "សូមជ្រើសធនធានរបស់ %s ដែលអ្នកចង់ផ្ញើឯកសារ" + +msgid "Select a Resource" +msgstr "ជ្រើសធនធាន" + +msgid "Edit User Mood" +msgstr "កែសម្រួលអារម្មណ៍អ្នកប្រើ" + +msgid "Please select your mood from the list." +msgstr "សូមជ្រើសអារម្មណ៍របស់អ្នកពីបញ្ជី ។" + +msgid "Set" +msgstr "កំណត់" + +msgid "Set Mood..." +msgstr "កំណត់អារម្មណ៍..." + +msgid "Set User Nickname" +msgstr "កំណត់សម្មតិនាមរបស់អ្នកប្រើ" + +msgid "Please specify a new nickname for you." +msgstr "សូមបញ្ជាក់សម្មតិនាមថ្មីសម្រាប់អ្នក ។" + +msgid "" +"This information is visible to all contacts on your contact list, so choose " +"something appropriate." +msgstr "" +"ព័ត៌មាននេះទំនាក់ទំនងទាំងអស់អាចមើលឃើញនៅក្នុងបញ្ជីទំនាក់ទំនងរបស់អ្នក ដូច្នេះជ្រើសអ្វីដែលសមរម្យ ។" + +msgid "Set Nickname..." +msgstr "កំណត់សម្មតិនាម..." + +msgid "Actions" +msgstr "សកម្មភាព" + +msgid "Select an action" +msgstr "ជ្រើសសកម្មភាព" + +#. only notify the user about problems adding to the friends list +#. * maybe we should do something else for other lists, but it probably +#. * won't cause too many problems if we just ignore it +#, c-format +msgid "Unable to add \"%s\"." +msgstr "មិនអាចបន្ថែម \"%s\" ។" + +msgid "Buddy Add error" +msgstr "កំហុសក្នុងការបន្ថែមមិត្តភក្ដិ" + +msgid "The username specified does not exist." +msgstr "មិនមានឈ្មោះអ្នកប្រើដែលបានបញ្ជាក់ទេ ។" + +#, c-format +msgid "Buddy list synchronization issue in %s (%s)" +msgstr "បញ្ហាក្នុងការធ្វើសមកាលកម្មបញ្ជីមិត្តភក្ដិនៅក្នុង %s (%s)" + +#, c-format +msgid "" +"%s on the local list is inside the group \"%s\" but not on the server list. " +"Do you want this buddy to be added?" +msgstr "" +"%s នៅក្នុងបញ្ជីមូលដ្ឋាន គឺនៅក្នុងក្រុម \"%s\" ប៉ុន្តែមិននៅក្នុងបញ្ជីម៉ាស៊ីនបម្រើទេ ។ តើអ្នកចង់" +"បន្ថែមមិត្តភក្ដិនេះដែរឬទេ ?" + +#, c-format +msgid "" +"%s is on the local list but not on the server list. Do you want this buddy " +"to be added?" +msgstr "" +"%s នៅក្នុងបញ្ជីមូលដ្ឋាន ប៉ុន្តែមិននៅក្នុងបញ្ជីម៉ាស៊ីនបម្រើទេ ។ តើអ្នកចង់បន្ថែមមិត្តភក្ដិនេះដែរឬទេ ?" + +#, c-format +msgid "Unable to parse message" +msgstr "មិនអាចញែកសារបានទេ" + +#, c-format +msgid "Syntax Error (probably a client bug)" +msgstr "កំហុសវាក្យសម្ពន្ធ (ប្រហែលជាកំហុសម៉ាស៊ីនភ្ញៀវ)" + +#, c-format +msgid "Invalid email address" +msgstr "អាសយដ្ឋានអ៊ីមែលមិនត្រឹមត្រូវ" + +#, c-format +msgid "User does not exist" +msgstr "មិនមានអ្នកប្រើទេ" + +#, c-format +msgid "Fully qualified domain name missing" +msgstr "បាត់ឈ្មោះដែលដែលបានបញ្ជាក់ទាំងស្រុង" + +#, c-format +msgid "Already logged in" +msgstr "បានចូលរួចហើយ" + +#, c-format +msgid "Invalid username" +msgstr "ឈ្មោះអ្នកប្រើមិនត្រឹមត្រូវ" + +#, c-format +msgid "Invalid friendly name" +msgstr "ឈ្មោះមិត្តភក្ដិមិនត្រឹមត្រូវ" + +#, c-format +msgid "List full" +msgstr "បញ្ជីពេញហើយ" + +#, c-format +msgid "Already there" +msgstr "នៅទីនោះរួចហើយ" + +#, c-format +msgid "Not on list" +msgstr "មិននៅក្នុងបញ្ជីទេ" + +#, c-format +msgid "User is offline" +msgstr "អ្នកប្រើនៅក្រៅបណ្ដាញ" + +#, c-format +msgid "Already in the mode" +msgstr "មានក្នុងរបៀបនេះរួចហើយ" + +#, c-format +msgid "Already in opposite list" +msgstr "មាននៅក្នុងបញ្ជីនោះរួចហើយ" + +#, c-format +msgid "Too many groups" +msgstr "មានក្រុមច្រើនពេក" + +#, c-format +msgid "Invalid group" +msgstr "ក្រុមមិនត្រឹមត្រូវ" + +#, c-format +msgid "User not in group" +msgstr "អ្នកប្រើមិននៅក្នុងក្រុមទេ" + +#, c-format +msgid "Group name too long" +msgstr "ឈ្មោះក្រុមវែងពេក" + +#, c-format +msgid "Cannot remove group zero" +msgstr "មិនអាចយកក្រុមសូន្យចេញបានទេ" + +#, c-format +msgid "Tried to add a user to a group that doesn't exist" +msgstr "បានព្យាយាមបន្ថែមអ្នកទៅក្រុមដែលមិនទាន់មាន" + +#, c-format +msgid "Switchboard failed" +msgstr "ប៉ាណូបានបរាជ័យ" + +#, c-format +msgid "Notify transfer failed" +msgstr "បានបរាជ័យក្នុងការជូនដំណឹងនៃការផ្ទេរ" + +#, c-format +msgid "Required fields missing" +msgstr "បាត់វាលដែលត្រូវការ" + +#, c-format +msgid "Too many hits to a FND" +msgstr "ចុចគ្រាប់ចុច FND ច្រើនដងពេក" + +#, c-format +msgid "Not logged in" +msgstr "មិនបានចូលទេ" + +#, c-format +msgid "Service temporarily unavailable" +msgstr "សេវាមិនអាចប្រើបានជាបណ្ដោះអាសន្ន" + +#, c-format +msgid "Database server error" +msgstr "កំហុសម៉ាស៊ីនបម្រើមូលដ្ឋានទិន្នន័យ" + +#, c-format +msgid "Command disabled" +msgstr "បានបិទពាក្យបញ្ជា" + +#, c-format +msgid "File operation error" +msgstr "កំហុសក្នុងការប្រតិបត្តិឯកសារ" + +#, c-format +msgid "Memory allocation error" +msgstr "កំហុសក្នុងការបម្រុងទុកសតិ" + +#, c-format +msgid "Wrong CHL value sent to server" +msgstr "តម្លៃ CHL មិនត្រឹមត្រូវបានផ្ញើទៅកាន់ម៉ាស៊ីនបម្រើ" + +#, c-format +msgid "Server busy" +msgstr "ម៉ាស៊ីនបម្រើរវល់" + +#, c-format +msgid "Server unavailable" +msgstr "ម៉ាស៊ីនបម្រើមិនអាចប្រើបានទេ" + +#, c-format +msgid "Peer notification server down" +msgstr "ការជូនដំណឹងម៉ាស៊ីនបម្រើដូចគ្នាបានខូច" + +#, c-format +msgid "Database connect error" +msgstr "កំហុសក្នុងការតភ្ជាប់មូលដ្ឋានទិន្នន័យ" + +#, c-format +msgid "Server is going down (abandon ship)" +msgstr "ម៉ាស៊ីនបម្រើខូចហើយ (មកជាមួយ abandon)" + +#, c-format +msgid "Error creating connection" +msgstr "កំហុសក្នុងការបង្កើតការតភ្ជាប់" + +#, c-format +msgid "CVR parameters are either unknown or not allowed" +msgstr "ប៉ារ៉ាម៉ែត្រដែលត្រូវបានស្គាល់ ឬមិនត្រូវបានដំឡើង" + +#, c-format +msgid "Unable to write" +msgstr "មិនអាចសរសេរ" + +#, c-format +msgid "Session overload" +msgstr "លើសសម័យ" + +#, c-format +msgid "User is too active" +msgstr "អ្នកប្រើសកម្មភាពពេក" + +#, c-format +msgid "Too many sessions" +msgstr "មានសម័យច្រើនពេក" + +#, c-format +msgid "Passport not verified" +msgstr "មិនបានផ្ទៀងផ្ទាត់លិខិតឆ្លងដែនទេ" + +#, c-format +msgid "Bad friend file" +msgstr "ឯកសារមិត្តភក្ដិមិនល្អ" + +#, c-format +msgid "Not expected" +msgstr "ដែលមិនបានរំពឹងទុក" + +#, c-format +msgid "Friendly name changes too rapidly" +msgstr "ការផ្លាស់ប្ដូរឈ្មោះមិត្តភក្ដិបន្តិចម្ដងៗ" + +#, c-format +msgid "Server too busy" +msgstr "ម៉ាស៊ីនបម្រើរវល់ពេក" + +#, c-format +msgid "Authentication failed" +msgstr "បានបរាជ័យក្នុងការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +#, c-format +msgid "Not allowed when offline" +msgstr "មិនបានអនុញ្ញាតនៅពេលនៅក្រៅបណ្ដាញ" + +#, c-format +msgid "Not accepting new users" +msgstr "មិនទទួលយកអ្នកប្រើដែលថ្មីទេ" + +#, c-format +msgid "Kids Passport without parental consent" +msgstr "ពាក្យសម្ងាត់ក្មេងដោយគ្មានការយល់ព្រមពីឳពុកម្ដាយ" + +#, c-format +msgid "Passport account not yet verified" +msgstr "គណនីលិខិតឆ្លងដែនមិនបានផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវទេ" + +msgid "Passport account suspended" +msgstr "បានផ្អាកគណនីលិខិតឆ្លងដែន" + +#, c-format +msgid "Bad ticket" +msgstr "សំបុត្រមិនល្អ" + +#, c-format +msgid "Unknown Error Code %d" +msgstr "មិនស្គាល់កូដកំហុស %d" + +#, c-format +msgid "MSN Error: %s\n" +msgstr "កំហុស MSN ៖ %s\n" + +msgid "Other Contacts" +msgstr "ទំនាក់ទំនងផ្សេងៗ" + +msgid "Non-IM Contacts" +msgstr "ទំនាក់ទំនងដែលមិនមានជា IM" + +msgid "Nudge" +msgstr "ច្រាន" + +#, c-format +msgid "%s has nudged you!" +msgstr "%s បានច្រានអ្នក !" + +#, c-format +msgid "Nudging %s..." +msgstr "កំពុងច្រាន %s..." + +msgid "Email Address..." +msgstr "អាសយដ្ឋានអ៊ីមែល..." + +msgid "Your new MSN friendly name is too long." +msgstr "ឈ្មោះមិត្តភក្ដិ MSN ថ្មីរបស់អ្នកវែងពេក ។" + +msgid "Set your friendly name." +msgstr "កំណត់ឈ្មោះមិត្តភក្ដរបស់អ្នក ។" + +msgid "This is the name that other MSN buddies will see you as." +msgstr "នេះជាឈ្មោះដែលមិត្តភក្ដិ MSN ផ្សេងទៀតនឹងឃើញអ្នក ។" + +msgid "Set your home phone number." +msgstr "កំណត់លេខទូរស័ព្ទផ្ទះរបស់អ្នក ។" + +msgid "Set your work phone number." +msgstr "កំណត់លេខទូរស័ព្ទការងាររបស់អ្នក ។" + +msgid "Set your mobile phone number." +msgstr "កំណត់លេខទូរស័ព្ទចល័តរបស់អ្នក ។" + +msgid "Allow MSN Mobile pages?" +msgstr "អនុញ្ញាតឲ្យមានទំព័រចល័តរបស់ MSN ?" + +msgid "" +"Do you want to allow or disallow people on your buddy list to send you MSN " +"Mobile pages to your cell phone or other mobile device?" +msgstr "" +"តើអ្នកចង់អនុញ្ញាត ឬមិនអនុញ្ញាតមនុស្សនៅក្នុងបញ្ជីមិត្តភក្ដិរបស់អ្នកផ្ញើឲ្យអ្នកនូវទំព័រចល័តរបស់ MSN ទៅកាន់" +"ទូរស័ព្ទចល័តរបស់អ្នក ឬឧបករណ៍ចល័តផ្សេងៗ ?" + +msgid "Allow" +msgstr "អនុញ្ញាត" + +msgid "Disallow" +msgstr "មិនអនុញ្ញាត" + +#, c-format +msgid "Blocked Text for %s" +msgstr "អត្ថបទដែលបានទប់ស្កាត់សម្រាប់ %s" + +msgid "No text is blocked for this account." +msgstr "គ្មានអត្ថបទត្រូវបានទប់ស្កាត់សម្រាប់គណនីនេះ ។" + +#, c-format +msgid "" +"MSN servers are currently blocking the following regular expressions:<br/>%s" +msgstr "ម៉ាស៊ីនបម្រើ MSN បច្ចុប្បន្នកំពុងទប់ស្កាត់កន្សោមធម្មតាដូចខាងក្រោម ៖ <br/>%s" + +msgid "This account does not have email enabled." +msgstr "គណនីនេះមិនមានអាសយដ្ឋានបានបើកទេ ។" + +msgid "Send a mobile message." +msgstr "ផ្ញើសារចល័ត ។" + +msgid "Page" +msgstr "ទំព័រ" + +msgid "Playing a game" +msgstr "លេងល្បែង" + +msgid "Working" +msgstr "ធ្វើការ" + +msgid "Has you" +msgstr "មានអ្នក" + +msgid "Home Phone Number" +msgstr "លេខទូរស័ព្ទផ្ទះ" + +msgid "Work Phone Number" +msgstr "លេខទូរស័ព្ទការងារ" + +msgid "Mobile Phone Number" +msgstr "លេខទូរស័ព្ទចល័ត" + +msgid "Be Right Back" +msgstr "ថយក្រោយ" + +msgid "Busy" +msgstr "រវល់" + +msgid "On the Phone" +msgstr "ជាប់និយាយទូរស័ព្ទ" + +msgid "Out to Lunch" +msgstr "ទៅអាហារថ្ងៃត្រង់នៅក្រៅ" + +#. primitive +#. ID +#. name - use default +#. saveable +#. should be user_settable some day +#. independent +msgid "Artist" +msgstr "សិល្ប" + +msgid "Album" +msgstr "អាល់ប៊ុម" + +msgid "Game Title" +msgstr "ចំណងជើងល្បែង" + +msgid "Office Title" +msgstr "ចំណងជើងការិយាល័យ" + +msgid "Set Friendly Name..." +msgstr "កំណត់ឈ្មោះមិត្តភក្តិ..." + +msgid "Set Home Phone Number..." +msgstr "កំណត់លេខទូរស័ព្ទផ្ទះ..." + +msgid "Set Work Phone Number..." +msgstr "កំណត់លេខទូរស័ព្ទកន្លែងធ្វើការ..." + +msgid "Set Mobile Phone Number..." +msgstr "កំណត់លេខទូរស័ព្ទចល័ត..." + +msgid "Enable/Disable Mobile Devices..." +msgstr "បិទ/បើកឧបករណ៍ចល័ត..." + +msgid "Allow/Disallow Mobile Pages..." +msgstr "អនុញ្ញាត/មិនអនុញ្ញាតទំព័រចល័ត..." + +msgid "View Blocked Text..." +msgstr "មើលអត្ថបទដែលបានទប់ស្កាត់..." + +msgid "Open Hotmail Inbox" +msgstr "បើកប្រអប់ Hotmail" + +msgid "Send to Mobile" +msgstr "ផ្ញើទៅទូរស័ព្ទចល័ត" + +msgid "Initiate _Chat" +msgstr "ចាប់ផ្ដើមជជែក" + +msgid "SSL support is needed for MSN. Please install a supported SSL library." +msgstr "ការគាំទ្រ SSL ត្រូវបានទាមទារសម្រាប់ MSN ។ សូមដំឡើងបណ្ណាល័យ SSL ដែលបានគាំទ្រ ។" + +msgid "Failed to connect to server." +msgstr "បានបរាជ័យក្នុងការតភ្ជាប់ទៅម៉ាស៊ីនបម្រើ ។" + +msgid "Error retrieving profile" +msgstr "កំហុសក្នុងការទៅទទួលយកទម្រង់" + +msgid "General" +msgstr "ទូទៅ" + +msgid "Age" +msgstr "អាយុ" + +msgid "Occupation" +msgstr "មុខរបរ" + +msgid "Location" +msgstr "ទីតាំង" + +msgid "Hobbies and Interests" +msgstr "ចំណូលចិត្ត និងចំណាប់អារម្មណ៍" + +msgid "A Little About Me" +msgstr "បន្តិចបន្តួចអំពីខ្ញុំ" + +msgid "Social" +msgstr "សង្គម" + +msgid "Marital Status" +msgstr "ស្ថានភាពគ្រួសារ" + +msgid "Interests" +msgstr "ចំណាប់អារម្មណ៍" + +msgid "Pets" +msgstr "សត្វស្លាប" + +msgid "Hometown" +msgstr "ទីក្រុង" + +msgid "Places Lived" +msgstr "បន្តផ្ទាល់នៅកន្លែង" + +msgid "Fashion" +msgstr "ម៉ូដ" + +msgid "Humor" +msgstr "អារម្មណ៍" + +msgid "Music" +msgstr "តន្ត្រី" + +msgid "Favorite Quote" +msgstr "សម្រង់សំណព្វ" + +msgid "Contact Info" +msgstr "ព័ត៌មានទំនាក់ទំនង" + +msgid "Personal" +msgstr "ផ្ទាល់ខ្លួន" + +msgid "Significant Other" +msgstr "ការសម្ងាត់ផ្សេងៗ" + +msgid "Home Phone" +msgstr "ទូរស័ព្ទផ្ទះ" + +msgid "Home Phone 2" +msgstr "ទូរស័ព្ទផ្ទះ ២" + +msgid "Home Address" +msgstr "អាសយដ្ឋានផ្ទះ" + +msgid "Personal Mobile" +msgstr "ទូរស័ព្ទចល័តផ្ទាល់ខ្លួន" + +msgid "Home Fax" +msgstr "ទូរសារផ្ទះ" + +msgid "Personal Email" +msgstr "អ៊ីមែលផ្ទាល់ខ្លួន" + +msgid "Personal IM" +msgstr "IM ផ្ទាល់ខ្លួន" + +msgid "Anniversary" +msgstr "ខួបកំណើត" + +#. Business +msgid "Work" +msgstr "ការងារ" + +msgid "Job Title" +msgstr "ងារការងារ" + +msgid "Company" +msgstr "ក្រុមហ៊ុន" + +msgid "Department" +msgstr "នាយកដ្ឋាន" + +msgid "Profession" +msgstr "វិជ្ជាជីវៈ" + +msgid "Work Phone" +msgstr "ទូរស័ព្ទកន្លែងធ្វើការ" + +msgid "Work Phone 2" +msgstr "ទូរស័ព្ទកន្លែងធ្វើការ ២" + +msgid "Work Address" +msgstr "អាសយដ្ឋានកន្លែងធ្វើការ" + +msgid "Work Mobile" +msgstr "ទូរស័ព្ទចល័តកន្លែងធ្វើការ" + +msgid "Work Pager" +msgstr "ភេយ័រកន្លែងធ្វើការ" + +msgid "Work Fax" +msgstr "ទូរសារកន្លែងធ្វើការ" + +msgid "Work Email" +msgstr "អ៊ីមែលកន្លែងធ្វើការ" + +msgid "Work IM" +msgstr "IM កន្លែងធ្វើការ" + +msgid "Start Date" +msgstr "កាលបរិច្ឆេទចាប់ផ្ដើម" + +msgid "Favorite Things" +msgstr "វត្ថុសំណព្វ" + +msgid "Last Updated" +msgstr "បានធ្វើឲ្យទាន់សម័យចុងក្រោយ" + +msgid "Homepage" +msgstr "គេហទំព័រ" + +msgid "The user has not created a public profile." +msgstr "អ្នកប្រើមិនបានបង្កើតទម្រង់សាធារណៈទេ ។" + +msgid "" +"MSN reported not being able to find the user's profile. This either means " +"that the user does not exist, or that the user exists but has not created a " +"public profile." +msgstr "" +"MSN បានរាយការណ៍ថាមិនអាចរកទម្រង់របស់អ្នកប្រើទេ ។ នេះមានន័យថាអ្នកប្រើមិនទាន់មានទេ ឬថាមានអ្នក" +"ប្រើ ប៉ុន្តែមិនបានបង្កើតទម្រង់ជាសាធារណៈទេ ។" + +msgid "" +"Could not find any information in the user's profile. The user most likely " +"does not exist." +msgstr "មិនអាចរកព័ត៌មាននៅក្នុងទម្រង់របស់អ្នកប្រើទេ ។ អ្នកប្រើទំនងជាមិនទាន់មានទេ ។" + +msgid "View web profile" +msgstr "មើលទម្រង់លើបណ្ដាញ" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. *< summary +msgid "Windows Live Messenger Protocol Plugin" +msgstr "កម្មវិធីជំនួយពិធីការរបស់កម្មវិធីផ្ញើសារបន្តផ្ទាល់របស់វីនដូ" + +msgid "Use HTTP Method" +msgstr "ប្រើវិធីសាស្ត្រ HTTP" + +msgid "HTTP Method Server" +msgstr "ម៉ាស៊ីនបម្រើវិធីសាស្ត្រ HTTP" + +msgid "Show custom smileys" +msgstr "បង្ហាញសញ្ញាណអារម្មណ៍ផ្ទាល់ខ្លួន" + +msgid "nudge: nudge a user to get their attention" +msgstr "ច្រានចេញ ៖ ច្រានអ្នកប្រើចេញដើម្បីទទួលបានការចាបអារម្មណ៍របស់ពួកគេ" + +msgid "Windows Live ID authentication:Unable to connect" +msgstr "ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវនៃលេខសម្គាល់របស់ Windows Live ៖ មិនអាចតភ្ជាប់បានទេ" + +msgid "Windows Live ID authentication:Invalid response" +msgstr "ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវនៃលេខសម្គាល់របស់ Windows Live ៖ ការឆ្លើយតបមិនត្រឹមត្រូវ" + +#, c-format +msgid "%s is not a valid group." +msgstr "%s មិនមែនជាក្រុមត្រឹមត្រូវទេ ។" + +msgid "Unknown error." +msgstr "មិនស្គាល់កំហុស ។" + +#, c-format +msgid "%s on %s (%s)" +msgstr "%s នៅលើ %s (%s)" + +#, c-format +msgid "%s just sent you a Nudge!" +msgstr "%s គ្រាន់តែបានផ្ញើឲ្យអ្នកនូវការច្រានចេញ !" + +#. char *adl = g_strndup(payload, len); +#, c-format +msgid "Unknown error (%d)" +msgstr "មិនស្គាល់កំហុស (%d)" + +msgid "Unable to add user" +msgstr "មិនអាចបន្ថែមអ្នកប្រើបានទេ" + +msgid "The following users are missing from your addressbook" +msgstr "អ្នកប្រើដូចខាងក្រោមបាត់ពីសៀវភៅអាសយដ្ឋានរបស់អ្នក" + +#, c-format +msgid "Unable to add user on %s (%s)" +msgstr "មិនអាចបន្ថែមអ្នកប្រើនៅលើ %s (%s) បានទេ" + +#, c-format +msgid "Unable to block user on %s (%s)" +msgstr "មិនអាចទប់ស្កាត់អ្នកប្រើនៅលើ %s (%s)" + +#, c-format +msgid "Unable to permit user on %s (%s)" +msgstr "មិនអាចអនុញ្ញាតអ្នកប្រើនៅលើ %s (%s) បានទេ" + +#, c-format +msgid "%s could not be added because your buddy list is full." +msgstr "%s មិនអាចត្រូវបានបន្ថែមបានទេ ដោយសារតែបញ្ជីមិត្តភក្ដិរបស់អ្នកពេញហើយ ។" + +#, c-format +msgid "%s is not a valid passport account." +msgstr "%s មិនមែនជាគណនីលិខិតឆ្លងដែនត្រឹមត្រូវទេ ។" + +msgid "Service Temporarily Unavailable." +msgstr "សេវាមិនអាចប្រើបានជាបណ្ដោះអាសន្ន ។" + +msgid "Mobile message was not sent because it was too long." +msgstr "សារចល័តមិនត្រូវបានផ្ញើទេ ដោយសារតែវាវែងពេក ។" + +msgid "Unable to rename group" +msgstr "មិនអាចប្ដូរឈ្មោះក្រុមបានទេ" + +msgid "Unable to delete group" +msgstr "មិនអាចលុបក្រុមបានទេ" + +#, c-format +msgid "" +"The MSN server will shut down for maintenance in %d minute. You will " +"automatically be signed out at that time. Please finish any conversations " +"in progress.\n" +"\n" +"After the maintenance has been completed, you will be able to successfully " +"sign in." +msgid_plural "" +"The MSN server will shut down for maintenance in %d minutes. You will " +"automatically be signed out at that time. Please finish any conversations " +"in progress.\n" +"\n" +"After the maintenance has been completed, you will be able to successfully " +"sign in." +msgstr[0] "" +"ម៉ាស៊ីនបម្រើ MSN នឹងបិទដើម្បីថែទាំក្នុងរយៈពេល %d នាទី ។ អ្នកនឹងត្រូវបានចេញដោយស្វ័យប្រវត្តិនៅពេល" +"ណាមួយ ។ សូមបញ្ចប់ការសន្ទនាដែលកំពុងតែសន្ទនា ។\n" +"\n" +"បន្ទាប់ពីការថែទាំចប់ អ្នកនឹងអាចចូលដោយស្វ័យប្រវត្តិបាន ។" + +msgid "" +"Message was not sent because the system is unavailable. This normally " +"happens when the user is blocked or does not exist." +msgstr "" +"សារមិនត្រូវបានផ្ញើទេ ពីព្រោះប្រព័ន្ធមិនអាចប្រើបានទេ ។ តាមធម្មតាវាកើតឡើងនៅពេលដែលអ្នកប្រើត្រូវ" +"បានទប់ស្កាត់ ឬមិនទាន់មាន ។" + +msgid "Message was not sent because messages are being sent too quickly." +msgstr "សារមិនត្រូវបានផ្ញើទេ ពីព្រោះសារកំពុងត្រូវបានផ្ញើរហ័សពេក ។" + +msgid "Message was not sent because an unknown encoding error occurred." +msgstr "សារមិនត្រូវបានផ្ញើទេ ពីព្រោះមានកំហុសអ៊ិនកូដដែលមិនស្គាល់បានកើតឡើង ។" + +msgid "Message was not sent because an unknown error occurred." +msgstr "សារមិនត្រូវបានផ្ញើបានទេ ពីព្រោះមានកំហុសដែលមិនស្គាល់បានកើតឡើង ។" + +msgid "Unable to connect" +msgstr "មិនអាចតភ្ជាប់ទេ" + +msgid "Writing error" +msgstr "កំហុសក្នុងការសរសេរ" + +msgid "Reading error" +msgstr "កំហុសក្នុងការអាន" + +#, c-format +msgid "" +"Connection error from %s server:\n" +"%s" +msgstr "" +"កំហុសក្នុងការតភ្ជាប់ពីម៉ាស៊ីនបម្រើ %s ៖\n" +"%s" + +msgid "Our protocol is not supported by the server." +msgstr "ពិធីការរបស់យើងមិនត្រូវបានគាំទ្រដោយម៉ាស៊ីនបម្រើទេ ។" + +msgid "Error parsing HTTP." +msgstr "កំហុសក្នុងការញែក HTTP ។" + +msgid "You have signed on from another location." +msgstr "អ្នកបានចុះហត្ថលេខាពីទីតាំងផ្សេង ។" + +msgid "The MSN servers are temporarily unavailable. Please wait and try again." +msgstr "ម៉ាស៊ីនបម្រើ MSN មិនអាចប្រើបានជាបណ្ដោះអាសន្ន ។ សូមរង់ចាំ ហើយព្យាយាមម្ដងទៀត ។" + +msgid "The MSN servers are going down temporarily." +msgstr "ម៉ាស៊ីនបម្រើ MSN នឹងខូចជាបណ្ដោះអាសន្ន ។" + +#, c-format +msgid "Unable to authenticate: %s" +msgstr "មិនអាចផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ ៖ %s" + +msgid "" +"Your MSN buddy list is temporarily unavailable. Please wait and try again." +msgstr "បញ្ជីមិត្តភក្ដិរបស់អ្នក MSN មិនអាចប្រើបានជាបណ្ដោះអាសន្ន ។ សូមរង់ចាំ ហើយព្យាយាមម្ដងទៀត ។" + +msgid "Handshaking" +msgstr "ការចាប់ដៃ" + +msgid "Transferring" +msgstr "ការផ្ទេរ" + +msgid "Starting authentication" +msgstr "ចាប់ផ្ដើមផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +msgid "Getting cookie" +msgstr "ទទួលខូគី" + +msgid "Sending cookie" +msgstr "ផ្ញើខូគី" + +msgid "Retrieving buddy list" +msgstr "ទៅយកបញ្ជីមិត្តភក្ដិ" + +msgid "Away From Computer" +msgstr "ចាកឆ្ងាយពីកុំព្យូទ័រ" + +msgid "On The Phone" +msgstr "និយាយទូរស័ព្ទ" + +msgid "Out To Lunch" +msgstr "ចេញទៅហូបអាហារថ្ងៃត្រង់នៅខាងក្រៅ" + +msgid "Message may have not been sent because a timeout occurred:" +msgstr "សារអាចមិនត្រូវបានផ្ញើ ពីព្រោះអស់ពេល ៖" + +msgid "Message could not be sent, not allowed while invisible:" +msgstr "សារមិនអាចត្រូវបានផ្ញើទេ មិនបានអនុញ្ញាតខណៈពេលមើលមិនឃើញ ៖" + +msgid "Message could not be sent because the user is offline:" +msgstr "សារមិនអាចត្រូវបានផ្ញើទេ ពីព្រោះអ្នកប្រើនៅក្រៅបណ្ដាញ ៖" + +msgid "Message could not be sent because a connection error occurred:" +msgstr "សារមិនអាចត្រូវបានផ្ញើទេ ពីព្រោះមានកំហុសក្នុងការតភ្ជាប់បានកើតឡើង ៖" + +msgid "Message could not be sent because we are sending too quickly:" +msgstr "សារមិនអាចត្រូវបានផ្ញើទេ ពីព្រោះយើងកំពុងផ្ញើរហ័សពេក ៖" + +msgid "" +"Message could not be sent because we were unable to establish a session with " +"the server. This is likely a server problem, try again in a few minutes:" +msgstr "" +"សារមិនអាចត្រូវបានផ្ញើទេ ពីព្រោះយើងមិនអាចបង្កើតសម័យជាមួយម៉ាស៊ីនបម្រើ ។ វាទំនងជាបញ្ហាម៉ាស៊ីនបម្រើ " +"ព្យាយាមម្ដងទៀតក្នុងរយៈពេលពីរ បីនាទីទៀត ៖" + +msgid "" +"Message could not be sent because an error with the switchboard occurred:" +msgstr "សារមិនអាចត្រូវបានផ្ញើទេ ពីព្រោះមានកំហុសជាមួយប៉ាណូបានកើតឡើង ៖" + +msgid "Message may have not been sent because an unknown error occurred:" +msgstr "សារមិនអាចត្រូវបានទេ ពីព្រោះមានកំហុសដែលមិនស្គាល់បានកើតឡើង ៖" + +#, c-format +msgid "%s has added you to his or her buddy list." +msgstr "%s បានបន្ថែមអ្នកទៅកាន់បញ្ជីមិត្តភក្ដិរបស់គាត់ ។" + +#, c-format +msgid "%s has removed you from his or her buddy list." +msgstr "%s បានយកអ្នកចេញពីបញ្ជីមិត្តភក្ដិរបស់គាត់ ។" + +msgid "Delete Buddy from Address Book?" +msgstr "លុបមិត្តភក្ដិពីសៀវភៅអាសយដ្ឋាន ?" + +msgid "Do you want to delete this buddy from your address book as well?" +msgstr "តើអ្នកចង់លុបមិត្តភក្ដិនេះពីសៀវភៅអាសយដ្ឋានរបស់អ្នកដែរឬទេ ?" + +msgid "The username specified is invalid." +msgstr "ឈ្មោះអ្នកប្រើដែលបានបញ្ជាក់មិនត្រឹមត្រូវ ។" + +msgid "This Hotmail account may not be active." +msgstr "គណនីរបស់ Hotmail នេះមិនសកម្មទេ ។" + +msgid "Profile URL" +msgstr "ទម្រង់ URL" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "MSN Protocol Plugin" +msgstr "កម្មវិធីជំនួយពិធីការរបស់ MSN" + +#, c-format +msgid "No such user: %s" +msgstr "គ្មានអ្នកប្រើបែបនេះទេ ៖ %s" + +msgid "User lookup" +msgstr "រកមើលអ្នកប្រើ" + +msgid "Reading challenge" +msgstr "អានការប្រកួត" + +msgid "Unexpected challenge length from server" +msgstr "ប្រវែងការប្រកួតដែលមិនរំពឹងទុកពីម៉ាស៊ីនបម្រើ" + +msgid "Logging in" +msgstr "ចូល" + +msgid "MySpaceIM - No Username Set" +msgstr "MySpaceIM - គ្មានឈ្មោះអ្នកប្រើបានកំណត់" + +msgid "You appear to have no MySpace username." +msgstr "អ្នកបង្ហាញថាគ្មានឈ្មោះអ្នកប្រើ MySpace នោះទេ ។" + +msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)" +msgstr "តើអ្នកចង់កំណត់មួយដែរឬទេ ? (ចំណាំ ៖ វាមិនអាចត្រូវបានផ្លាស់ប្ដូរនោះទេ !)" + +msgid "Lost connection with server" +msgstr "បាត់បង់ការតភ្ជាប់ជាមួយម៉ាស៊ីនបម្រើ" + +#. Can't write _()'d strings in array initializers. Workaround. +msgid "New mail messages" +msgstr "សារសំបុត្រថ្មី" + +msgid "New blog comments" +msgstr "មតិយោបល់ប្លុកថ្មី" + +msgid "New profile comments" +msgstr "មិតយោបល់ទម្រង់ថ្មី" + +msgid "New friend requests!" +msgstr "សំណើរបស់មិត្តភក្ដិថ្មី !" + +msgid "New picture comments" +msgstr "មតិយោបល់រូបភាពថ្មី" + +msgid "MySpace" +msgstr "MySpace" + +msgid "IM Friends" +msgstr "មិត្តភក្ដិរបស់ IM" + +#, c-format +msgid "" +"%d buddy was added or updated from the server (including buddies already on " +"the server-side list)" +msgid_plural "" +"%d buddies were added or updated from the server (including buddies already " +"on the server-side list)" +msgstr[0] "" +"មិត្តភក្ដិ %d ត្រូវបានបន្ថែម ឬធ្វើឲ្យទាន់សម័យពីម៉ាស៊ីនបម្រើ (រួមមានមិត្តភក្ដិដែលមាននៅក្នុងបញ្ជីនៅខាង" +"ម៉ាស៊ីនបម្រើរួចហើយ)" + +msgid "Add contacts from server" +msgstr "បន្ថែមទំនាក់ទំនងពីម៉ាស៊ីនបម្រើ" + +#. The session is now set up, ready to be connected. This emits the +#. * signedOn signal, so clients can now do anything with msimprpl, and +#. * we're ready for it (session key, userid, username all setup). +msgid "Connected" +msgstr "បានតភ្ជាប់" + +#, c-format +msgid "Protocol error, code %d: %s" +msgstr "កំហុសពិធីការ កូដ %d: %s" + +#, c-format +msgid "" +"%s Your password is %d characters, greater than the expected maximum length " +"of %d for MySpaceIM. Please shorten your password at http://profileedit." +"myspace.com/index.cfm?fuseaction=accountSettings.changePassword and try " +"again." +msgstr "" +"%s ពាក្យសម្ងាត់របស់អ្នកមាន %d តួអក្សរ ធំជាងប្រវែងអតិបរមាដែលបានរំពឹងទុករបស់ %d សម្រាប់ " +"MySpaceIM ។ សូមធ្វើឲ្យពាក្យសម្ងាត់របស់អ្នកខ្លីនៅ http://profileedit.myspace.com/index." +"cfm?fuseaction=accountSettings ។ ផ្លាស់ប្ដូរពាក្យសម្ងាត់ ហើយព្យាយាមម្ដងទៀត ។" + +msgid "MySpaceIM Error" +msgstr "កំហុស MySpaceIM" + +msgid "Invalid input condition" +msgstr "លក្ខខណ្ឌបញ្ចូលមិនត្រឹមត្រូវ" + +msgid "Read buffer full (2)" +msgstr "អានសតិបណ្ដោះអាសន្នពេញលេញ (២)" + +msgid "Unparseable message" +msgstr "សារដែលមិនអាចញែកបាន" + +#, c-format +msgid "Couldn't connect to host: %s (%d)" +msgstr "មិនអាចតភ្ជាប់ទៅកាន់ម៉ាស៊ីន ៖ %s (%d)" + +msgid "Failed to add buddy" +msgstr "បានបរាជ័យក្នុងការបន្ថែមមិត្តភក្ដិ" + +msgid "'addbuddy' command failed." +msgstr "ពាក្យបញ្ជា 'addbuddy' បានបរាជ័យ ។" + +msgid "persist command failed" +msgstr "បានបរាជ័យក្នុងការព្យាយាមពាក្យបញ្ជា" + +msgid "Failed to remove buddy" +msgstr "បានបរាជ័យក្នុងការយកមិត្តភក្ដិចេញ" + +msgid "'delbuddy' command failed" +msgstr "បានបរាជ័យពាក្យបញ្ជា 'delbuddy'" + +msgid "blocklist command failed" +msgstr "បានបរាជ័យពាក្យបញ្ជាបញ្ជីទប់ស្កាត់" + +msgid "Missing Cipher" +msgstr "បាត់ការសរសេរសម្ងាត់" + +msgid "The RC4 cipher could not be found" +msgstr "រកមិនឃើញការសរសេរសម្ងាត់ RC4" + +msgid "" +"Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will " +"not be loaded." +msgstr "" +"ធ្វើឲ្យប្រសើឡើងទៅ libpurple ដោយមានការគាំទ្រ RC4 (>= 2.0.1) ។ កម្មវិធីជំនួយ MySpaceIM នឹង" +"មិនត្រូវបានផ្ទុក ។" + +msgid "Add friends from MySpace.com" +msgstr "បន្ថែមមិត្តភក្ដិពី MySpace.com" + +msgid "Importing friends failed" +msgstr "បានបរាជ័យក្នុងការនាំមិត្តភក្តិចូល" + +#. TODO: find out how +msgid "Find people..." +msgstr "រកមនុស្ស..." + +msgid "Change IM name..." +msgstr "ផ្លាស់ប្ដូរឈ្មោះ IM..." + +msgid "myim URL handler" +msgstr "កម្មវិធីគ្រប់គ្រង myim URL" + +msgid "No suitable MySpaceIM account could be found to open this myim URL." +msgstr " រកមិនឃើញគណនី MySpaceIM សមរម្យដើម្បីបើក myim URL នេះទេ ។" + +msgid "Enable the proper MySpaceIM account and try again." +msgstr "បើកគណនី MySpaceIM សមរម្យ ហើយព្យាយាមម្ដងទៀត ។" + +msgid "Show display name in status text" +msgstr "បង្ហាញឈ្មោះបង្ហាញនៅក្នុងអត្ថបទស្ថានភាព" + +msgid "Show headline in status text" +msgstr "បង្ហាញពេលកំណត់នៅក្នុងអត្ថបទស្ថានភាព" + +msgid "Send emoticons" +msgstr "ផ្ញើសញ្ញាអារម្មណ៍" + +msgid "Screen resolution (dots per inch)" +msgstr "គុណភាពបង្ហាញអេក្រង់ (ចុច/អ៊ិន្ឈ៍)" + +msgid "Base font size (points)" +msgstr "មានមូលដ្ឋានលើទំហំពុម្ពអក្សរ (ចំណុច)" + +msgid "User" +msgstr "អ្នកប្រើ" + +msgid "Headline" +msgstr "ចំណងជើង" + +msgid "Song" +msgstr "ចម្រៀង" + +msgid "Total Friends" +msgstr "មិត្តភក្ដិសរុប" + +msgid "Client Version" +msgstr "កំណែម៉ាស៊ីនភ្ញៀវ" + +msgid "MySpaceIM - Username Available" +msgstr "MySpaceIM - មានឈ្មោះអ្នកប្រើ" + +msgid "This username is available. Would you like to set it?" +msgstr "មានឈ្មោះអ្នកប្រើនេះ ។ តើអ្នកចង់កំណត់វាដែរឬទេ ?" + +msgid "ONCE SET, THIS CANNOT BE CHANGED!" +msgstr "នៅពេលកំណត់ វាមិនអាចត្រូវបានផ្លាស់ប្ដូរទេ !" + +msgid "MySpaceIM - Please Set a Username" +msgstr "MySpaceIM - សូមកំណត់ឈ្មោះអ្នកប្រើ" + +msgid "This username is unavailable." +msgstr "ឈ្មោះអ្នកប្រើនេះមិនអាចប្រើបានទេ ។" + +msgid "Please try another username:" +msgstr "សូមព្យាយាមឈ្មោះអ្នកប្រើផ្សេងទៀត ៖" + +#. Protocol won't log in now without a username set.. Disconnect +msgid "No username set" +msgstr "គ្មានឈ្មោះអ្នកប្រើត្រូវបានកំណត់" + +msgid "Please enter a username to check its availability:" +msgstr "សូមបញ្ចូលឈ្មោះអ្នកប្រើដើម្បីពិនិត្យមើលភាពអាចប្រើបានរបស់វា ៖" + +#. TODO: icons for each zap +#. Lots of comments for translators: +#. Zap means "to strike suddenly and forcefully as if with a +#. * projectile or weapon." This term often has an electrical +#. * connotation, for example, "he was zapped by electricity when +#. * he put a fork in the toaster." +msgid "Zap" +msgstr "ឆក់" + +#, c-format +msgid "%s has zapped you!" +msgstr "%s បានឆក់អ្នក !" + +#, c-format +msgid "Zapping %s..." +msgstr "កំពុងឆក់ %s..." + +#. Whack means "to hit or strike someone with a sharp blow" +msgid "Whack" +msgstr "ទះ" + +#, c-format +msgid "%s has whacked you!" +msgstr "%s បានទះអ្នក !" + +#, c-format +msgid "Whacking %s..." +msgstr "កំពុងទះ %s..." + +#. 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. +msgid "Torch" +msgstr "ដុត" + +#, c-format +msgid "%s has torched you!" +msgstr "%s បានដុតអ្នក !" + +#, c-format +msgid "Torching %s..." +msgstr "កំពុងដុត %s..." + +#. Smooch means "to kiss someone, often enthusiastically" +msgid "Smooch" +msgstr "ថើបថ្នមៗ" + +#, c-format +msgid "%s has smooched you!" +msgstr "%s បានថើបអ្នកថ្នមៗ !" + +#, c-format +msgid "Smooching %s..." +msgstr "កំពុងថើបថ្នមៗ %s..." + +#. A hug is a display of affection; wrapping your arms around someone +msgid "Hug" +msgstr "អោប" + +#, c-format +msgid "%s has hugged you!" +msgstr "%s បានអោបអ្នក !" + +#, c-format +msgid "Hugging %s..." +msgstr "កំពុងអោប %s..." + +#. Slap means "to hit someone with an open/flat hand" +msgid "Slap" +msgstr "ទះថ្នមៗ" + +#, c-format +msgid "%s has slapped you!" +msgstr "%s បានទះអ្នកថ្នមៗ !" + +#, c-format +msgid "Slapping %s..." +msgstr "កំពុង %s ថ្នមៗ..." + +#. Goose means "to pinch someone on their butt" +msgid "Goose" +msgstr "ចាក់" + +#, c-format +msgid "%s has goosed you!" +msgstr "%s បានចាក់អ្នក !" + +#, c-format +msgid "Goosing %s..." +msgstr "កំពុងចាក់ %s..." + +#. 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. +msgid "High-five" +msgstr "ស្វាគមន៍" + +#, c-format +msgid "%s has high-fived you!" +msgstr "%s បានស្វាគមន៍អ្នក !" + +#, c-format +msgid "High-fiving %s..." +msgstr "កំពុងស្វាគមន៍ %s..." + +#. 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. +msgid "Punk" +msgstr "ប៉ះ" + +#, c-format +msgid "%s has punk'd you!" +msgstr "%s បានប៉ះអ្នក !" + +#, c-format +msgid "Punking %s..." +msgstr "កំពុងប៉ះ %s..." + +#. Raspberry is a slang term for the vibrating sound made +#. * when you stick your tongue out of your mouth with your +#. * lips closed and blow. It is typically done when +#. * gloating or bragging. Nowadays it's a pretty silly +#. * gesture, so it does not carry a harsh negative +#. * connotation. It is generally used in a playful tone +#. * with friends. +msgid "Raspberry" +msgstr "លម្អ" + +#, c-format +msgid "%s has raspberried you!" +msgstr "%s បានលម្អអ្នក !" + +#, c-format +msgid "Raspberrying %s..." +msgstr "កំពុងលម្អ %s..." + +msgid "Required parameters not passed in" +msgstr "ប៉ារ៉ាម៉ែត្រដែលត្រូវការមិនបានចម្លងទេ" + +msgid "Unable to write to network" +msgstr "មិនអាចសរសេរទៅកាន់បណ្ដាញបានទេ" + +msgid "Unable to read from network" +msgstr "មិនអាចអានពីបណ្ដាញបានទេ" + +msgid "Error communicating with server" +msgstr "កំហុសក្នុងការទំនាក់ទំនងជាមួយម៉ាស៊ីនបម្រើ" + +msgid "Conference not found" +msgstr "រកមិនឃើញសន្និសីទ" + +msgid "Conference does not exist" +msgstr "មិនទាន់មានសន្និសីទនៅឡើយទេ" + +msgid "A folder with that name already exists" +msgstr "មានថតដែលមានឈ្មោះនោះរួចហើយ" + +msgid "Not supported" +msgstr "មិនបានគាំទ្រ" + +msgid "Password has expired" +msgstr "ពាក្យសម្ងាត់បានផុតកំណត់" + +msgid "Incorrect password" +msgstr "ពាក្យសម្ងាត់មិនត្រឹមត្រូវ" + +msgid "User not found" +msgstr "រកមិនឃើញអ្នកប្រើ" + +msgid "Account has been disabled" +msgstr "គណនីត្រូវបានបិទ" + +msgid "The server could not access the directory" +msgstr "ម៉ាស៊ីនបម្រើមិនអាចចូលដំណើរការទៅកាន់ថតទេ" + +msgid "Your system administrator has disabled this operation" +msgstr "អ្នកគ្រប់គ្រងប្រព័ន្ធរបស់អ្នកបានបិទប្រតិបត្តិការនេះ" + +msgid "The server is unavailable; try again later" +msgstr "មិនមានម៉ាស៊ីនបម្រើទេ ព្យាយាមម្ដងទៀតពេលក្រោយ" + +msgid "Cannot add a contact to the same folder twice" +msgstr "មិនអាចបន្ថែមទំនាក់ទំនងទៅកានថតដដែលពីរដងបានទេ" + +msgid "Cannot add yourself" +msgstr "មិនអាចបន្ថែមខ្លួនអ្នកផ្ទាល់ទេ" + +msgid "Master archive is misconfigured" +msgstr "ប័ណ្ណសារមេបាត់ misconfigured" + +msgid "Incorrect username or password" +msgstr "ឈ្មោះអ្នកប្រើ ឬពាក្យសម្ងាត់មិនត្រឹមត្រូវ" + +msgid "Could not recognize the host of the username you entered" +msgstr "មិនអាចស្គាល់ឈ្មោះអ្នកប្រើម៉ាស៊ីនដែលអ្នកបានបញ្ចូលទេ" + +msgid "" +"Your account has been disabled because too many incorrect passwords were " +"entered" +msgstr "គណនីរបស់អ្នកត្រូវបានបិទ ពីព្រោះមានពាក្យសម្ងាត់ច្រើនពេកដែលបានបញ្ចូល" + +msgid "You cannot add the same person twice to a conversation" +msgstr "អ្នកមិនអាចបន្ថែមមនុស្សដដែលពីរដងទៅកាន់ការសន្ទនាបានទេ" + +msgid "You have reached your limit for the number of contacts allowed" +msgstr "អ្នកបានដល់កម្រិតរបស់អ្នកសម្រាប់ចំនួនទំនាក់ទំនងដែលបានអនុញ្ញាត" + +msgid "You have entered an incorrect username" +msgstr "អ្នកបានបញ្ចូលឈ្មោះអ្នកប្រើមិនត្រឹមត្រូវ" + +msgid "An error occurred while updating the directory" +msgstr "កំហុសមួយបានកើតឡើងខណៈពេលធ្វើឲ្យថតទាន់សម័យ" + +msgid "Incompatible protocol version" +msgstr "កំណែពិធីការដែលមិនឆបគ្នា" + +msgid "The user has blocked you" +msgstr "អ្នកប្រើបានទប់ស្កាត់អ្នក" + +msgid "" +"This evaluation version does not allow more than ten users to log in at one " +"time" +msgstr "កំណែនៃការវាយតម្លៃនេះមិនអនុញ្ញាតឲ្យមានអ្នកប្រើច្រើនជាង ១០ នាក់ចូលនៅពេលតែមួយទេ" + +msgid "The user is either offline or you are blocked" +msgstr "អ្នកប្រើនៅក្រៅបណ្ដាញ ឬអ្នកត្រូវបានទប់ស្កាត់" + +#, c-format +msgid "Unknown error: 0x%X" +msgstr "មិនស្គាល់កំហុស ៖ 0x%X" + +#, c-format +msgid "Login failed (%s)." +msgstr "បានបរាជ័យក្នុងការចូល (%s) ។" + +#, c-format +msgid "Unable to send message. Could not get details for user (%s)." +msgstr "មិនអាចផ្ញើសារបានទេ ។ មិនអាចយកសេចក្ដីលម្អិតសម្រាប់អ្នកប្រើ (%s) បានទេ ។" + +#, c-format +msgid "Unable to add %s to your buddy list (%s)." +msgstr "មិនអាចបន្ថែម %s ទៅកាន់បញ្ជីមិត្តភក្ដិរបស់អ្នក (%s) បានទេ ។" + +#. TODO: Improve this! message to who or for what conference? +#, c-format +msgid "Unable to send message (%s)." +msgstr "មិនអាចផ្ញើសារទៅកាន់ (%s) បានទេ ។" + +#, c-format +msgid "Unable to invite user (%s)." +msgstr "មិនអាចអញ្ជើញអ្នកប្រើ (%s) បានទេ ។" + +#, c-format +msgid "Unable to send message to %s. Could not create the conference (%s)." +msgstr "មិនអាចផ្ញើសារទៅកាន់ %s បានទេ ។ មិនអាចបង្កើតការសន្និសីទបានទេ (%s) ។" + +#, c-format +msgid "Unable to send message. Could not create the conference (%s)." +msgstr "មិនអាចផ្ញើសារបានទេ ។ មិនអាចបង្កើតសន្និសីទ (%s) បានទេ ។" + +#, c-format +msgid "" +"Unable to move user %s to folder %s in the server side list. Error while " +"creating folder (%s)." +msgstr "" +"មិនអាចផ្លាស់ទីអ្នកប្រើ %s ទៅកាន់ថត %s នៅក្នុងបញ្ជីខាងម៉ាស៊ីនបម្រើ ។ កំហុសខណៈពេលបង្កើតថត (%s) ។" + +#, c-format +msgid "" +"Unable to add %s to your buddy list. Error creating folder in server side " +"list (%s)." +msgstr "" +"មិនអាចបន្ថែម %s ទៅកាន់បញ្ជីមិត្តភក្ដិ ។ កំហុសក្នុងការបង្កើតថតនៅក្នុងបញ្ជីខាងម៉ាស៊ីនបម្រើ (%s) ។" + +#, c-format +msgid "Could not get details for user %s (%s)." +msgstr "មិនអាចទទួលយកសេចក្ដីលម្អិតសម្រាប់អ្នកប្រើ %s (%s) ។" + +#, c-format +msgid "Unable to add user to privacy list (%s)." +msgstr "មិនអាចបន្ថែមអ្នកប្រើទៅកាន់បញ្ជីឯកជន (%s) បានទេ ។" + +#, c-format +msgid "Unable to add %s to deny list (%s)." +msgstr "មិនអាចបន្ថែម %s ទៅកាន់បញ្ជីបដិសេធ (%s) បានទេ ។" + +#, c-format +msgid "Unable to add %s to permit list (%s)." +msgstr "មិនអាចបន្ថែម %s ទៅកាន់បញ្ជីអនុញ្ញាត (%s) បានទេ ។" + +#, c-format +msgid "Unable to remove %s from privacy list (%s)." +msgstr "មិនអាចយក %s ចេញពីបញ្ជីឯកជន (%s) បានទេ ។" + +#, c-format +msgid "Unable to change server side privacy settings (%s)." +msgstr "មិនអាចផ្លាស់ប្ដូរការកំណត់ឯកជនខាងម៉ាស៊ីនបម្រើបានទេ (%s) ។" + +#, c-format +msgid "Unable to create conference (%s)." +msgstr "មិនអាចបង្កើតសិន្និសីទ (%s) បានទេ ។" + +msgid "Error communicating with server. Closing connection." +msgstr "កំហុសក្នុងការតភ្ជាប់ជាមួយម៉ាស៊ីនបម្រើ ។ បិទការតភ្ជាប់ ។" + +msgid "Telephone Number" +msgstr "លេខទូរស័ព្ទ" + +msgid "Personal Title" +msgstr "ចំណងជើងផ្ទាល់ខ្លួន" + +msgid "Mailstop" +msgstr "Mailstop" + +msgid "User ID" +msgstr "លេខសម្គាល់អ្នកប្រើ" + +#. tag = _("DN"); +#. value = nm_user_record_get_dn(user_record); +#. if (value) { +#. purple_notify_user_info_add_pair(user_info, tag, value); +#. } +#. +msgid "Full name" +msgstr "ឈ្មោះពេញ" + +#, c-format +msgid "GroupWise Conference %d" +msgstr "GroupWise សន្និសីទ %d" + +msgid "Authenticating..." +msgstr "កំពុងផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ..." + +msgid "Unable to connect to server." +msgstr "មិនអាចតភ្ជាប់ទៅកាន់ម៉ាស៊ីនបម្រើបានទេ ។" + +msgid "Waiting for response..." +msgstr "កំពុងរង់ចាំការឆ្លើយតប..." + +#, c-format +msgid "%s has been invited to this conversation." +msgstr "%s ត្រូវបានអញ្ជើញឲ្យចូលរួមនៅក្នុងការសន្ទនានេះ ។" + +msgid "Invitation to Conversation" +msgstr "ការអញ្ជើញឲ្យចូលរួមក្នុងការសន្ទនា" + +#, c-format +msgid "" +"Invitation from: %s\n" +"\n" +"Sent: %s" +msgstr "" +"ការអញ្ជើញពី ៖ %s\n" +"\n" +"បានផ្ញើ ៖ %s" + +msgid "Would you like to join the conversation?" +msgstr "តើអ្នកចង់ចូលរួមក្នុងការសន្ទនាដែរឬទេ ?" + +msgid "You have been logged out because you logged in at another workstation." +msgstr "អ្នកត្រូវបានចេញ ដោយសារតែអ្នកបានចូលក្នុងស្ថានីយការងារផ្សេងទៀត ។" + +#, c-format +msgid "" +"%s appears to be offline and did not receive the message that you just sent." +msgstr "%s បង្ហាញថានៅក្រៅបណ្ដាញ ហើយមិនបានទទួលសារដែលអ្នកទើបតែបានផ្ញើនោះទេ ។" + +msgid "" +"Unable to connect to server. Please enter the address of the server you wish " +"to connect to." +msgstr "មិនអាចតភ្ជាប់ទៅកាន់ម៉ាស៊ីនបម្រើបានទេ ។ សូមបញ្ចូលអាសយដ្ឋានម៉ាស៊ីនបម្រើដែលអ្នកចង់តភ្ជាប់ ។" + +msgid "Error. SSL support is not installed." +msgstr "កំហុស ។ ការគាំទ្រ SSL មិនត្រូវបានដំឡើងទេ ។" + +msgid "This conference has been closed. No more messages can be sent." +msgstr "សន្និសីទនេះត្រូវបានបិទ ។ គ្មានសារអាចត្រូវបានផ្ញើទេ ។" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "Novell GroupWise Messenger Protocol Plugin" +msgstr "កម្មវិធីជំនួយពិធីការរបស់កម្មវិធីផ្ញើសារ GroupWise របស់ណូវែល" + +msgid "Server address" +msgstr "អាសយដ្ឋានម៉ាស៊ីនបម្រើ" + +msgid "Server port" +msgstr "ច្រកម៉ាស៊ីនបម្រើ" + +msgid "Could not join chat room" +msgstr "មិនអាចចូលរួមក្នុងបន្ទប់ជជែកបានទេ" + +msgid "Invalid chat room name" +msgstr "ឈ្មោះបន្ទប់ជជែកមិនត្រឹមត្រូវ" + +msgid "Server closed the connection." +msgstr "ម៉ាស៊ីនបម្រើបានបិទការតភ្ជាប់ ។" + +#, c-format +msgid "" +"Lost connection with server:\n" +"%s" +msgstr "" +"បាត់បង់ការតភ្ជាប់ជាមួយម៉ាស៊ីនបម្រើ ៖\n" +"%s" + +msgid "Received invalid data on connection with server." +msgstr "បានទទួលទិន្នន័យមិនត្រឹមត្រូវនៅលើការតភ្ជាប់ជាមួយម៉ាស៊ីនបម្រើ ។ " + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "AIM Protocol Plugin" +msgstr "កម្មវិធីជំនួយពិធីការ AIM" + +msgid "ICQ UIN..." +msgstr "ICQ UIN..." + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "ICQ Protocol Plugin" +msgstr "កម្មវិធីជំនួយពិធីការ ICQ" + +msgid "Encoding" +msgstr "ការអ៊ិនកូដ" + +msgid "The remote user has closed the connection." +msgstr "អ្នកប្រើពីចម្ងាយបានបិទការតភ្ជាប់ ។" + +msgid "The remote user has declined your request." +msgstr "អ្នកប្រើពីចម្ងាយបានបដិសេធសំណើររបស់អ្នក ។" + +#, c-format +msgid "Lost connection with the remote user:<br>%s" +msgstr "បាត់បង់ការតភ្ជាប់ជាមួយអ្នកប្រើពីចម្ងាយ ៖ <br>%s" + +msgid "Received invalid data on connection with remote user." +msgstr "បានទទួលទិន្នន័យមិនត្រឹមត្រូវនៅពេលតភ្ជាប់ជាមួយអ្នកប្រើពីចម្ងាយ ។" + +msgid "Could not establish a connection with the remote user." +msgstr "មិនអាចបង្កើតការតភ្ជាប់ជាមួយអ្នកប្រើពីចម្ងាយបានទេ ។" + +msgid "Direct IM established" +msgstr "បានបង្កើត IM ដោយផ្ទាល់" + +#, c-format +msgid "" +"%s tried to send you a %s file, but we only allow files up to %s over Direct " +"IM. Try using file transfer instead.\n" +msgstr "" +"%s បានព្យាយាមផ្ញើឲ្យអ្នកនូវឯកសារ %s ប៉ុន្តែអនុញ្ញាតតែឯកសារ %s លើ IM ដោយផ្ទាល់ ។ ព្យាយាមប្រើ" +"ការផ្ទេរឯកសារជំនួសវិញ ។\n" + +#, c-format +msgid "File %s is %s, which is larger than the maximum size of %s." +msgstr "ឯកសារ %s គឺជា %s ដែលធំជាងទំហំអតិបរមារបស់ %s ។" + +msgid "Invalid error" +msgstr "កំហុសមិនត្រឹមត្រូវ" + +msgid "Invalid SNAC" +msgstr "SNAC មិនត្រឹមត្រូវ" + +msgid "Rate to host" +msgstr "វាយតម្លៃម៉ាស៊ីន" + +msgid "Rate to client" +msgstr "វាយតម្លៃម៉ាស៊ីនភ្ញៀវ" + +msgid "Service unavailable" +msgstr "សេវាមិនអាចប្រើបាន" + +msgid "Service not defined" +msgstr "សេវាមិនបានកំណត់" + +msgid "Obsolete SNAC" +msgstr "SNAC ពេញលេញ" + +msgid "Not supported by host" +msgstr "មិនបានគាំទ្រដោយម៉ាស៊ីនទេ" + +msgid "Not supported by client" +msgstr "មិនបានគាំទ្រដោយម៉ាស៊ីនភ្ញៀវទេ" + +msgid "Refused by client" +msgstr "បានបដិសេធដោយម៉ាស៊ីនភ្ញៀវ" + +msgid "Reply too big" +msgstr "ការឆ្លើយតបធំពេក" + +msgid "Responses lost" +msgstr "បាត់បង់ការឆ្លើយតប" + +msgid "Request denied" +msgstr "បដិសេធសំណើ" + +msgid "Busted SNAC payload" +msgstr "Busted SNAC payload" + +msgid "Insufficient rights" +msgstr "សិទ្ធិមិនគ្រប់គ្រាន់" + +msgid "In local permit/deny" +msgstr "នៅក្នុងការបដិសេធ/អនុញ្ញាត" + +msgid "Warning level too high (sender)" +msgstr "កម្រិតព្រមានខ្ពស់ពេក (អ្នកផ្ញើ)" + +msgid "Warning level too high (receiver)" +msgstr "កម្រិតព្រមានខ្ពស់ពេក (អ្នកទទួល)" + +msgid "User temporarily unavailable" +msgstr "អ្នកប្រើមិនអាចប្រើបានជាបណ្ដោះអាសន្ន" + +msgid "No match" +msgstr "គ្មានការផ្គូផ្គង" + +msgid "List overflow" +msgstr "បញ្ជីលើសចំណុះ" + +msgid "Request ambiguous" +msgstr "ការស្នើមិនប្រាកដ" + +msgid "Queue full" +msgstr "ជួរពេញ" + +msgid "Not while on AOL" +msgstr "មិនសម្រាកនៅលើ AOL" + +msgid "" +"(There was an error receiving this message. The buddy you are speaking with " +"is probably using a different encoding than expected. If you know what " +"encoding he is using, you can specify it in the advanced account options for " +"your AIM/ICQ account.)" +msgstr "" +"(មានកំហុសមួយក្នុងការទទួលសារនេះ ។ មិត្តភក្ដិដែលអ្នកកំពុងនិយាយជាមួយប្រហែលជាប្រើការអ៊ិនកូដផ្សេងពីអ្វីដែល" +"រំពឹងទុក ។ ប្រសិនបើអ្នកដឹងការអ៊ិនកូដអ្វីដែលអ្នកកំពុងប្រើ អ្នកអាចបញ្ជាក់វានៅក្នុងជម្រើសគណនីកម្រិតខ្ពស់" +"សម្រាប់គណនី AIM/ICQ របស់អ្នក ។)" + +#, c-format +msgid "" +"(There was an error receiving this message. Either you and %s have " +"different encodings selected, or %s has a buggy client.)" +msgstr "" +"(មានកំហុសមួយក្នុងការទទួលសារ ។ អ្នក និង %s បានជ្រើសការការអ៊ិនកូដផ្សេងគ្នា ឬ %s មានម៉ាស៊ីនភ្ញៀវ" +"មិត្តភក្ដិ ។)" + +#. Label +msgid "Buddy Icon" +msgstr "រូបតំណាងមិត្តភក្ដិ" + +msgid "Voice" +msgstr "សំឡេង" + +msgid "AIM Direct IM" +msgstr "AIM នាំ IM" + +msgid "Get File" +msgstr "យកឯកសារ" + +msgid "Games" +msgstr "ល្បែង" + +msgid "Add-Ins" +msgstr "បន្ថែម" + +msgid "Send Buddy List" +msgstr "ផ្ញើបញ្ជីមិត្តភក្ដិ" + +msgid "ICQ Direct Connect" +msgstr "តភ្ជាប់ ICQ ដោយផ្ទាល់" + +msgid "AP User" +msgstr "អ្នកប្រើ AP" + +msgid "ICQ RTF" +msgstr "ICQ RTF" + +msgid "Nihilist" +msgstr "Nihilist" + +msgid "ICQ Server Relay" +msgstr "ពន្យារម៉ាស៊ីនបម្រើ ICQ" + +msgid "Old ICQ UTF8" +msgstr "ICQ UTF8 ចាស់" + +msgid "Trillian Encryption" +msgstr "ការអ៊ិនគ្រីប Trillian" + +msgid "ICQ UTF8" +msgstr "ICQ UTF8" + +msgid "Hiptop" +msgstr "Hiptop" + +msgid "Security Enabled" +msgstr "បានបើកសុវត្ថិភាព" + +msgid "Video Chat" +msgstr "ជជែកតាមវីដេអូ" + +msgid "iChat AV" +msgstr "iChat AV" + +msgid "Live Video" +msgstr "វីដេអូបន្តផ្ទាល់" + +msgid "Camera" +msgstr "ម៉ាស៊ីនថត" + +msgid "Screen Sharing" +msgstr "ការចែករំលែកអេក្រង់" + +msgid "Free For Chat" +msgstr "ទំនេរសម្រាប់ជជែក" + +msgid "Not Available" +msgstr "មិនអាចប្រើបាន" + +msgid "Occupied" +msgstr "កាន់កាប់" + +msgid "Web Aware" +msgstr "ការយល់ដឹងអំពីបណ្ដាញ" + +msgid "Invisible" +msgstr "មើលមិនឃើញ" + +msgid "IP Address" +msgstr "អាសយដ្ឋាន IP" + +msgid "Warning Level" +msgstr "កម្រិតព្រមាន" + +msgid "Buddy Comment" +msgstr "មតិយោបល់មិត្តភក្ដិ" + +#, c-format +msgid "" +"Could not connect to authentication server:\n" +"%s" +msgstr "" +"មិនអាចតភ្ជាប់ទៅកាន់ម៉ាស៊ីនបម្រើផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវបានទេ ៖\n" +"%s" + +#, c-format +msgid "" +"Could not connect to BOS server:\n" +"%s" +msgstr "" +"មិនអាចតភ្ជាប់ទៅកាន់ម៉ាស៊ីនបម្រើ BOS ៖\n" +"%s" + +msgid "Username sent" +msgstr "បានផ្ញើឈ្មោះអ្នកប្រើ" + +msgid "Connection established, cookie sent" +msgstr "បានបង្កើតការតភ្ជាប់ បានផ្ញើខូគី" + +#. TODO: Don't call this with ssi +msgid "Finalizing connection" +msgstr "បញ្ចប់ការតភ្ជាប់" + +#, c-format +msgid "" +"Unable to login: Could not sign on as %s because the username is invalid. " +"Usernames must be a valid email address, or start with a letter and contain " +"only letters, numbers and spaces, or contain only numbers." +msgstr "" +"មិនអាចចូលបានទេ ៖ មិនអាចចូលជា %s ពីព្រោះឈ្មោះអ្នកប្រើមិនត្រឹមត្រូវ ។ អ្នកប្រើត្រូវតែមានអាសយដ្ឋាន" +"អ៊ីមែល ឬចាប់ផ្ដើមដោយអក្សរ និងមានតែអក្សរ លេខ និងចន្លោះ ឬមានតែលេខ ។" + +#. Unregistered screen name +#. uid is not exist +msgid "Invalid username." +msgstr "ឈ្មោះអ្នកប្រើមិនត្រឹមត្រូវ ។" + +msgid "Incorrect password." +msgstr "ពាក្យសម្ងាត់មិនត្រឹមត្រូវ ។" + +#. Suspended account +msgid "Your account is currently suspended." +msgstr "គណនីរបស់អ្នកបច្ចុប្បន្នត្រូវបានផ្អាក ។" + +#. service temporarily unavailable +msgid "The AOL Instant Messenger service is temporarily unavailable." +msgstr "សេវាកម្មវិធីផ្ញើសារបន្ទាន់ AOL បច្ចុប្បន្នប្រើមិនបានទេ ។" + +#. screen name connecting too frequently +#. IP address connecting too frequently +msgid "" +"You have been connecting and disconnecting too frequently. Wait ten minutes " +"and try again. If you continue to try, you will need to wait even longer." +msgstr "" +"អ្នកកំពុងត្រូវបានតភ្ជាប់ និងផ្ដាច់ញឹកញាប់ណាស់ ។ រង់ចាំដប់នាទី ហើយព្យាយាមម្ដងទៀត ។ ប្រសិនបើអ្នកបន្ត" +"ដើម្បីព្យាយាម អ្នកនឹងត្រូវរង់ចាំយូរបន្តិច ។" + +#, c-format +msgid "The client version you are using is too old. Please upgrade at %s" +msgstr "កំណែម៉ាស៊ីនភ្ញៀវដែលអ្នកកំពុងប្រើចាស់ពេក ។ សូមធ្វើឲ្យប្រសើរនៅ %s" + +msgid "Could Not Connect" +msgstr "មិនអាចតភ្ជាប់បានទេ" + +msgid "Received authorization" +msgstr "បានទទួលការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +msgid "The SecurID key entered is invalid." +msgstr "សោ SecurID ដែលបានបញ្ចូលមិនត្រឹមត្រូវ ។" + +msgid "Enter SecurID" +msgstr "បញ្ចូល SecurID" + +msgid "Enter the 6 digit number from the digital display." +msgstr "បញ្ចូលលេខ ៦ តួលេខពីការបង្ហាញឌីជីថល ។" + +#. * +#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons. +#. +msgid "_OK" +msgstr "យល់ព្រម" + +#, c-format +msgid "You may be disconnected shortly. If so, check %s for updates." +msgstr "" +"អ្នកអាចត្រូវបានផ្ដាច់ក្នុងរយៈពេលបន្តិចទៀតនេះ ។ ប្រសិនបើដូច្នេះមែន ពិនិត្យមើលភាពទាន់សម័យ %s ។" + +msgid "Unable to get a valid AIM login hash." +msgstr "មិនអាចយកសញ្ញាចូល AIM ត្រឹមត្រូវទេ ។" + +#, c-format +msgid "You may be disconnected shortly. Check %s for updates." +msgstr "អ្នកអាចត្រូវបានផ្ដាច់ក្នុងរយៈពេលបន្តិចទៀតនេះ ។ ពិនិត្យមើលភាពទាន់សម័យ %s ។" + +msgid "Unable to get a valid login hash." +msgstr "មិនអាចយកសញ្ញាចូលត្រឹមត្រូវបានទេ ។" + +msgid "Password sent" +msgstr "បានផ្ញើពាក្យសម្ងាត់" + +msgid "Unable to initialize connection" +msgstr "មិនអាចចាប់ផ្ដើមការតភ្ជាប់បានទេ" + +msgid "Please authorize me so I can add you to my buddy list." +msgstr "សូមអនុញ្ញាតខ្ញុំ ដូច្នេះខ្ញុំអាចបន្ថែមអ្នកនៅកាន់បញ្ជីមិត្តភក្ដិរបស់ខ្ញុំ ។" + +msgid "Authorization Request Message:" +msgstr "សារសំណើផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ ៖" + +msgid "Please authorize me!" +msgstr "សូមអនុញ្ញាតខ្ញុំ !" + +msgid "No reason given." +msgstr "គ្មានហេតុផលបានផ្ដល់ ។" + +msgid "Authorization Denied Message:" +msgstr "សារបដិសេធការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ ៖" + +#, c-format +msgid "" +"The user %u has denied your request to add them to your buddy list for the " +"following reason:\n" +"%s" +msgstr "" +"អ្នកប្រើ %u បានបដិសេធសំណើរបស់អ្នក ក្នុងការបន្ថែមពួកគេទៅក្នុងបញ្ជីមិត្តភក្ដិរបស់អ្នកដោយសារមានហេតុផល" +"ដូចខាងក្រោម ៖\n" +"%s" + +msgid "ICQ authorization denied." +msgstr "បានបដិសេធការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ ICQ ។" + +#. Someone has granted you authorization +#, c-format +msgid "The user %u has granted your request to add them to your buddy list." +msgstr "អ្នកប្រើ %u បានផ្ដល់សំណើរបស់អ្នក ដើម្បីបន្ថែមពួកគេទៅកាន់បញ្ជីមិត្តភក្ដិរបស់អ្នក ។" + +#, c-format +msgid "" +"You have received a special message\n" +"\n" +"From: %s [%s]\n" +"%s" +msgstr "" +"អ្នកបានទទួលសារពិសេស\n" +"\n" +"ពី ៖ %s [%s]\n" +"%s" + +#, c-format +msgid "" +"You have received an ICQ page\n" +"\n" +"From: %s [%s]\n" +"%s" +msgstr "" +"អ្នកបានទទួលទំព័រ ICQ\n" +"\n" +"ពី ៖ %s [%s]\n" +"%s" + +#, c-format +msgid "" +"You have received an ICQ email from %s [%s]\n" +"\n" +"Message is:\n" +"%s" +msgstr "" +"អ្នកបានទទួលអ៊ីមែល ICQ ពី %s [%s]\n" +"\n" +"សារគឺ ៖\n" +"%s" + +#, c-format +msgid "ICQ user %u has sent you a buddy: %s (%s)" +msgstr "អ្នកប្រើ ICQ %u បានផ្ញើឲ្យអ្នកនូវមិត្តភក្ដិ ៖ %s (%s)" + +msgid "Do you want to add this buddy to your buddy list?" +msgstr "តើអ្នកចង់បន្ថែមមិត្តភក្ដិនេះទៅកាន់បញ្ជីមិត្តភក្តិរបស់អ្នកដែរឬទេ ?" + +msgid "_Add" +msgstr "បន្ថែម" + +msgid "_Decline" +msgstr "បដិសេធ" + +#, 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] "អ្នកបាត់សារ %hu ពី %s ដោយសារតែពួកវាមិនត្រឹមត្រូវ ។" + +#, 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] "អ្នកបាត់សារ %hu ពី %s ពីព្រោះវាធំពេក ។" + +#, c-format +msgid "" +"You missed %hu message from %s because the rate limit has been exceeded." +msgid_plural "" +"You missed %hu messages from %s because the rate limit has been exceeded." +msgstr[0] "អ្នកបាត់សារ %hu ពី %s ដោយសារតែលើសដែនកំណត់អត្រា ។" + +#, 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] "អ្នកបាត់សារ %hu ពី %s ដោយសារតែកម្រិតព្រមានរបស់គាត់ខ្ពស់ពេក ។" + +#, 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] "អ្នកបាត់សារ %hu ពី %s ដោយសារតែកម្រិតព្រមានរបស់អ្នកខ្ពស់ពេក ។" + +#, c-format +msgid "You missed %hu message from %s for an unknown reason." +msgid_plural "You missed %hu messages from %s for an unknown reason." +msgstr[0] "អ្នកបាត់សារ %hu ពី %s ដោយសារហេតុផលដែលមិនស្គាល់ ។" + +#. Data is assumed to be the destination sn +#, c-format +msgid "Unable to send message: %s" +msgstr "មិនអាចផ្ញើសារ ៖ %s" + +msgid "Unknown reason." +msgstr "មិនស្គាល់ហេតុផល ។" + +#, c-format +msgid "Unable to send message to %s:" +msgstr "មិនអាចផ្ញើសារទៅកាន់ %s បានទេ ៖" + +#, c-format +msgid "User information not available: %s" +msgstr "មិនមានព័ត៌មានអ្នកប្រើ ៖ %s" + +msgid "Online Since" +msgstr "លើបណ្ដាញតាំងពី" + +msgid "Member Since" +msgstr "សមាជិកតាំងពី" + +msgid "Profile" +msgstr "ទម្រង់" + +msgid "Your AIM connection may be lost." +msgstr "ការតភ្ជាប់ AIM របស់អ្នកអាចបាត់បង់ ។" + +#. The conversion failed! +msgid "" +"[Unable to display a message from this user because it contained invalid " +"characters.]" +msgstr "[មិនអាចបង្ហាញសារពីអ្នកប្រើនេះបានទេ ពីព្រោះវាមានតួអក្សរមិនត្រឹមត្រូវ ។]" + +msgid "" +"The last action you attempted could not be performed because you are over " +"the rate limit. Please wait 10 seconds and try again." +msgstr "" +"សកម្មភាពចុងក្រោយដែលអ្នកប៉ុនប៉ងមិនអាចត្រូវបានអនុវត្តបានទេ ពីព្រោះអ្នកលើសអត្រាដែនកំណត់ ។ សូមរង់ចាំ " +"១០ វិនាទី ហើយព្យាយាមម្ដងទៀត ។" + +#, c-format +msgid "You have been disconnected from chat room %s." +msgstr "អ្នកត្រូវបានផ្ដាច់ចេញពីបន្ទប់ជជែក %s ។" + +msgid "Mobile Phone" +msgstr "ទូរស័ព្ទចល័ត" + +msgid "Personal Web Page" +msgstr "ទំព័របណ្ដាញផ្ទាល់ខ្លួន" + +#. aim_userinfo_t +#. strip_html_tags +msgid "Additional Information" +msgstr "ព័ត៌មានបន្ថែម" + +msgid "Zip Code" +msgstr "លេខតំបន់" + +msgid "Work Information" +msgstr "ព័ត៌មានការងារ" + +msgid "Division" +msgstr "វិធីចែក" + +msgid "Position" +msgstr "ទីតាំង" + +msgid "Web Page" +msgstr "ទំព័របណ្តាញ" + +msgid "Pop-Up Message" +msgstr "សារលេចឡើង" + +#, c-format +msgid "The following username is associated with %s" +msgid_plural "The following usernames are associated with %s" +msgstr[0] "ឈ្មោះអ្នកប្រើដូចខាងក្រោមត្រូវបានភ្ជាប់ជាមួយ %s" + +#, c-format +msgid "No results found for email address %s" +msgstr "រកមិនឃើញលទ្ធផលសម្រាប់អាសយដ្ឋានអ៊ីមែល %s" + +#, c-format +msgid "You should receive an email asking to confirm %s." +msgstr "អ្នកគួរទទួលអ៊ីមែលមួយ ដោយសួរឲ្យអះអាង %s ។" + +msgid "Account Confirmation Requested" +msgstr "បានស្នើការអះអាងរបស់គណនី" + +#, c-format +msgid "" +"Error 0x%04x: Unable to format username because the requested name differs " +"from the original." +msgstr "កំហុស 0x%04x ៖ មិនអាចធ្វើទ្រង់ទ្រាយឈ្មោះអ្នកប្រើបានទេ ពីព្រោះឈ្មោះខុសពីឈ្មោះដើម ។" + +#, c-format +msgid "Error 0x%04x: Unable to format username because it is invalid." +msgstr "កំហុស 0x%04x ៖ មិនអាចធ្វើទ្រង់ទ្រាយឈ្មោះអ្នកប្រើបានទេ ពីព្រោះវាមិនត្រឹមត្រូវ ។" + +#, c-format +msgid "" +"Error 0x%04x: Unable to format username because the requested name is too " +"long." +msgstr "កំហុស 0x%04x ៖ មិនអាចធ្វើទ្រង់ទ្រាយឈ្មោះអ្នកប្រើបានទេ ពីព្រោះឈ្មោះដែលបានស្នើវែងពេក ។" + +#, c-format +msgid "" +"Error 0x%04x: Unable to change email address because there is already a " +"request pending for this username." +msgstr "" +"កំហុស 0x%04x ៖ មិនអាចផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែលបានទេ ពីព្រោះមានសំណើរួចហើយដែលរង់ចាំសម្រាប់ឈ្មោះ" +"អ្នកប្រើនេះ ។" + +#, c-format +msgid "" +"Error 0x%04x: Unable to change email address because the given address has " +"too many usernames associated with it." +msgstr "" +"កំហុស 0x%04x ៖ មិនអាចផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែលបានទេ ពីព្រោះអាសយដ្ឋានដែលបានផ្ដល់មានឈ្មោះ" +"អ្នកប្រើច្រើនពេកដែលជាប់ជាមួយវា ។" + +#, c-format +msgid "" +"Error 0x%04x: Unable to change email address because the given address is " +"invalid." +msgstr "" +"កំហុស 0x%04x ៖ មិនអាចផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែលបានទេ ពីព្រោះអាសយដ្ឋានដែលបានផ្ដល់មិនត្រឹមត្រូវទេ ។" + +#, c-format +msgid "Error 0x%04x: Unknown error." +msgstr "កំហុស 0x%04x ៖ មិនស្គាល់កំហុស ។" + +msgid "Error Changing Account Info" +msgstr "កំហុសក្នុងការផ្លាស់ប្ដូរព័ត៌មានរបស់គណនី" + +#, c-format +msgid "The email address for %s is %s" +msgstr "អាសយដ្ឋានអ៊ីមែលសម្រាប់ %s គឺ %s" + +msgid "Account Info" +msgstr "ព័ត៌មានគណនី" + +msgid "" +"Your IM Image was not sent. You must be Direct Connected to send IM Images." +msgstr "មិនបានផ្ញើរូបភាព IM របស់ទេ ។ អ្នកត្រូវតែបានតភ្ជាប់ដោយផ្ទាល់ ដើម្បីផ្ញើរូបភាព IM ។" + +msgid "Unable to set AIM profile." +msgstr "មិនអាចកំណត់ទម្រង់ AIM ទេ ។" + +msgid "" +"You have probably requested to set your profile before the login procedure " +"completed. Your profile remains unset; try setting it again when you are " +"fully connected." +msgstr "" +"អ្នកប្រហែលជាបានស្នើ ឲ្យកំណត់ទម្រង់របស់អ្នកមុននឹងបញ្ចប់នីតិវិធីបញ្ចូល ។ ទម្រង់របស់អ្នកនៅតែមិនបានកំណត់ " +"ព្យាយាមកំណត់វាម្ដងទៀត នៅពេលដែលអ្នកបានតភ្ជាប់ពេញលេញ ។" + +#, c-format +msgid "" +"The maximum profile length of %d byte has been exceeded. It has been " +"truncated for you." +msgid_plural "" +"The maximum profile length of %d bytes has been exceeded. It has been " +"truncated for you." +msgstr[0] "ប្រវែងទម្រង់អតិបរមានៃ %d បៃបានលើសដែនកំណត់ហើយ ។ វាត្រូវបានកាត់ឲ្យខ្លីសម្រាប់អ្នក ។" + +msgid "Profile too long." +msgstr "ទម្រង់វែងពេក ។" + +#, c-format +msgid "" +"The maximum away message length of %d byte has been exceeded. It has been " +"truncated for you." +msgid_plural "" +"The maximum away message length of %d bytes has been exceeded. It has been " +"truncated for you." +msgstr[0] "" +"សារចាកឆ្ងាយអតិបរមាប្រវែង %d បៃ បានលើសកំណត់ហើយ ។ វាត្រូវបានកាត់ឲ្យខ្លីសម្រាប់អ្នក ។" + +msgid "Away message too long." +msgstr "សារចាកឆ្ងាយវែងពេក ។" + +#, c-format +msgid "" +"Could not add the buddy %s because the username is invalid. Usernames must " +"be a valid email address, or start with a letter and contain only letters, " +"numbers and spaces, or contain only numbers." +msgstr "" +"មិនអាចបន្ថែមមិត្តភក្ដិ %s បានទេ ពីព្រោះឈ្មោះអ្នកប្រើមិនត្រឹមត្រូវ ។ ឈ្មោះអ្នកប្រើត្រូវតែជា" +"អាសយដ្ឋានអ៊ីមែលត្រឹមត្រូវ ឬចាប់ផ្ដើមដោយអក្សរ ហើយមានតែអក្សរ លេខ និងចន្លោះ ឬមានតែលេខ ។" + +msgid "Unable to Add" +msgstr "មិនអាចបន្ថែម" + +msgid "Unable to Retrieve Buddy List" +msgstr "មិនអាចទៅយកបញ្ជីមិត្តភ្ដិបានទេ" + +msgid "" +"The AIM servers were temporarily unable to send your buddy list. Your buddy " +"list is not lost, and will probably become available in a few minutes." +msgstr "" +"ម៉ាស៊ីនបម្រើ AIM មិនអាចផ្ញើជាបណ្ដោះអាសន្នទៅកាន់បញ្ជីមិត្តភក្ដិរបស់អ្នក ។ បញ្ជីមិត្តភក្ដិរបស់អ្នកមិនបាត់" +"បង់ទេ ហើយប្រហែលជានឹងអាចប្រើក្នុងរយៈពីរ បីនាទី ។" + +msgid "Orphans" +msgstr "កំព្រា" + +#, c-format +msgid "" +"Could not add the buddy %s because you have too many buddies in your buddy " +"list. Please remove one and try again." +msgstr "" +"មិនអាចបន្ថែមមិត្តភក្ដិ %s បានទេ ពីព្រោះអ្នកមានមិត្តភក្ដិជាច្រើននៅក្នុងបញ្ជីមិត្តភក្ដិរបស់អ្នក ។ សូមយក" +"ចេញមួយ ហើយព្យាយាមម្ដងទៀត ។" + +msgid "(no name)" +msgstr "(គ្មានឈ្មោះ)" + +#, c-format +msgid "Could not add the buddy %s for an unknown reason." +msgstr "មិនអាចបន្ថែមមិត្តភក្ដិ %s បានទេ ដោយសារមិនស្គាល់ហេតុផល ។" + +#, c-format +msgid "" +"The user %s has given you permission to add him or her to your buddy list. " +"Do you want to add this user?" +msgstr "" +"អ្នកប្រើ %s បានផ្ដល់សិទ្ធិដើម្បីបន្ថែមគាត់ទៅកាន់បញ្ជីមិត្តភក្ដិរបស់អ្នក ។ តើអ្នកចង់បន្ថែមអ្នកប្រើនេះ" +"ដែរឬទេ ?" + +msgid "Authorization Given" +msgstr "បានផ្ដល់ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +#. Granted +#, c-format +msgid "The user %s has granted your request to add them to your buddy list." +msgstr "អ្នកប្រើ %s បានផ្ដល់សំណើរបស់អ្នក ដើម្បីបន្ថែមពួកគេទៅកាន់បញ្ជីមិត្តភក្ដិរបស់អ្នក ។" + +msgid "Authorization Granted" +msgstr "បានផ្ដល់ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +#. Denied +#, c-format +msgid "" +"The user %s has denied your request to add them to your buddy list for the " +"following reason:\n" +"%s" +msgstr "" +"អ្នកប្រើ %s បានបដិសេធសំណើរបស់អ្នក ដើម្បីបន្ថែមពួកគេទៅក្នុងបញ្ជីមិត្តភក្ដិរបស់អ្នកដោយសារតែមានហេតុផល" +"ដូចខាងក្រោម ៖\n" +"%s" + +msgid "Authorization Denied" +msgstr "បានបដិសេធការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +msgid "_Exchange:" +msgstr "ផ្លាស់ប្ដូរ ៖" + +msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats." +msgstr "" +"រូបភាព IM របស់អ្នកមិនត្រូវបានផ្ញើទេ ។ អ្នកមិនអាចផ្ញើរូបភាព IM នៅក្នុងការជជែករបស់ AIM បានទេ " +"។" + +msgid "iTunes Music Store Link" +msgstr "តំណផ្ទុកតន្ត្រីរបស់ iTunes" + +#, c-format +msgid "Buddy Comment for %s" +msgstr "មតិយោបល់របស់មិត្តភក្ដិសម្រាប់ %s" + +msgid "Buddy Comment:" +msgstr "មតិយោបល់របស់មិត្តភក្ដិ ៖" + +#, c-format +msgid "You have selected to open a Direct IM connection with %s." +msgstr "អ្នកបានជ្រើសដើម្បីបើកការតភ្ជាប់ IM ដោយផ្ទាល់ជាមួយ %s ។" + +msgid "" +"Because this reveals your IP address, it may be considered a security risk. " +"Do you wish to continue?" +msgstr "" +"ពីព្រោះវាដឹងអាសយដ្ឋាន IP របស់អ្នក វាអាចត្រូវបានចាត់ទុកថាមានគ្រោះថ្នាក់ ។ តើអ្នកចង់បន្ត" +"ដែរឬទេ ?" + +msgid "C_onnect" +msgstr "តភ្ជាប់" + +msgid "Get AIM Info" +msgstr "យកព័ត៌មានរបស់ AIM" + +#. We only do this if the user is in our buddy list +msgid "Edit Buddy Comment" +msgstr "កែសម្រួលមតិយោបល់របស់មិត្តភក្ដិ" + +msgid "Get Status Msg" +msgstr "យកស្ថានភាពកម្មវិធីផ្ញើសារ" + +msgid "Direct IM" +msgstr "IM ផ្ទាល់" + +msgid "Re-request Authorization" +msgstr "ស្នើការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវឡើងវិញ" + +msgid "Require authorization" +msgstr "តម្រូវឲ្យមានការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +msgid "Web aware (enabling this will cause you to receive SPAM!)" +msgstr "ការយល់ដឹងអំពីបណ្ដាញ (ការបើកវានឹងធ្វើឲ្យអ្នកទទួល SPAM!)" + +msgid "ICQ Privacy Options" +msgstr "ជម្រើសឯកជនរបស់ ICQ" + +msgid "The new formatting is invalid." +msgstr "ការធ្វើទ្រង់ទ្រាយថ្មីមិនត្រឹមត្រូវទេ ។" + +msgid "Username formatting can change only capitalization and whitespace." +msgstr "ការធ្វើទ្រង់ទ្រាយឈ្មោះអ្នកប្រើអាចផ្លាស់ប្ដូរតែក្នុងករណីមានអក្សរធំ និងចន្លោះមិនឃើញ ។" + +msgid "Change Address To:" +msgstr "ផ្លាស់ប្ដូរអាសយដ្ឋាន ជូនចំពោះ ៖" + +msgid "<i>you are not waiting for authorization</i>" +msgstr "<i>អ្នកមិនកំពុងរង់ចាំការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវទេ</i>" + +msgid "You are awaiting authorization from the following buddies" +msgstr "អ្នកកំពុងរង់ចាំការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវពីមិត្តភក្ដិដូចខាងក្រោម" + +msgid "" +"You can re-request authorization from these buddies by right-clicking on " +"them and selecting \"Re-request Authorization.\"" +msgstr "" +"អ្នកអាចស្នើការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវឡើងវិញពីមិត្តភក្ដិទាំងនេះ ដោយចុចកណ្ដុរស្ដាំលើពួកវា ហើយជ្រើស " +"\"ស្នើការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវឡើងវិញ ។\"" + +msgid "Find Buddy by Email" +msgstr "រកមិត្តភក្ដិតាមអ៊ីមែល" + +msgid "Search for a buddy by email address" +msgstr "រកមិត្តភក្ដិតាមអាសយដ្ឋានអ៊ីមែល" + +msgid "Type the email address of the buddy you are searching for." +msgstr "វាយអាសយដ្ឋានអ៊ីមែលរបស់មិត្តភក្ដិដែលអ្នកកំពុងស្វែងរក ។" + +msgid "_Search" +msgstr "ស្វែងរក" + +msgid "Set User Info (web)..." +msgstr "កំណត់ព័ត៌មានរបស់អ្នកប្រើ (បណ្ដាញ)..." + +msgid "Change Password (web)" +msgstr "ផ្លាស់ប្ដូរពាក្យសម្ងាត់ (បណ្ដាញ)" + +msgid "Configure IM Forwarding (web)" +msgstr "កំណត់រចនាសម្ព័ន្ធការបញ្ជូន IM បន្ត (បណ្ដាញ)" + +#. ICQ actions +msgid "Set Privacy Options..." +msgstr "កំណត់ជម្រើសឯកជន..." + +#. AIM actions +msgid "Confirm Account" +msgstr "អះអាងគណនី" + +msgid "Display Currently Registered Email Address" +msgstr "បង្ហាញអាសយដ្ឋានអ៊ីមែលដែលបានចុះឈ្មោះបច្ចុប្បន្ន" + +msgid "Change Currently Registered Email Address..." +msgstr "ផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែលដែលបានចុះឈ្មោះបច្ចុប្បន្ន..." + +msgid "Show Buddies Awaiting Authorization" +msgstr "បង្ហាញការផ្ទៀងផ្ទាត់រង់ចាំរបស់មិត្តភក្ដិ" + +msgid "Search for Buddy by Email Address..." +msgstr "ស្វែងរកមិត្តភក្ដិតាមអាសយដ្ឋានអ៊ីមែល..." + +msgid "Search for Buddy by Information" +msgstr "ស្វែងរកមិត្តភក្ដិតាមព័ត៌មាន" + +msgid "" +"Always use AIM/ICQ proxy server for\n" +"file transfers and direct IM (slower,\n" +"but does not reveal your IP address)" +msgstr "" +"ប្រើម៉ាស៊ីនបម្រើប្រូកស៊ី AIM/ICQ ជានិច្ចសម្រាប់ការផ្ទេរឯកសារ និង IM ផ្ទាល់ (យឺត ប៉ុន្តែមិនដឹង" +"អាសយដ្ឋាន IP របស់អ្នកទេ)" + +msgid "Allow multiple simultaneous logins" +msgstr "អនុញ្ញាតការចូលច្រើននាក់ដំណាលគ្នា" + +#, c-format +msgid "Asking %s to connect to us at %s:%hu for Direct IM." +msgstr "ស្នើ %s ឲ្យតភ្ជាប់មកយើងនៅ %s:%hu សម្រាប់ IM ដោយផ្ទាល់ ។" + +#, c-format +msgid "Attempting to connect to %s:%hu." +msgstr "ប៉ុនប៉ងតភ្ជាប់ទៅកាន់ %s:%hu ។" + +msgid "Attempting to connect via proxy server." +msgstr "ប៉ុនប៉ងតភ្ជាប់តាមរយៈម៉ាស៊ីនបម្រើប្រូកស៊ី ។" + +#, c-format +msgid "%s has just asked to directly connect to %s" +msgstr "%s ទើបតែបានសួរដើម្បីតភ្ជាប់ដោយផ្ទាល់ទៅ %s" + +msgid "" +"This requires a direct connection between the two computers and is necessary " +"for IM Images. Because your IP address will be revealed, this may be " +"considered a privacy risk." +msgstr "" +"វាត្រូវការការតភ្ជាប់ដោយផ្ទាល់រវាងកុំព្យូទ័រពីរ ហើយចាំបាច់សម្រាប់រូបភាព IM ។ ពីព្រោះអាសយដ្ឋាន IP " +"របស់អ្នកនឹងត្រូវបានដឹង វាអាចចាត់ទុកថាគ្រោះថ្នាក់ ។" + +msgid "Aquarius" +msgstr "Aquarius" + +msgid "Pisces" +msgstr "Pisces" + +msgid "Aries" +msgstr "Aries" + +msgid "Taurus" +msgstr "Taurus" + +msgid "Gemini" +msgstr "Gemini" + +msgid "Cancer" +msgstr "មហារីក" + +msgid "Leo" +msgstr "Leo" + +msgid "Virgo" +msgstr "Virgo" + +msgid "Libra" +msgstr "Libra" + +msgid "Scorpio" +msgstr "Scorpio" + +msgid "Sagittarius" +msgstr "Sagittarius" + +msgid "Capricorn" +msgstr "Capricorn" + +msgid "Rat" +msgstr "កណ្ដុរ" + +msgid "Ox" +msgstr "គោ" + +msgid "Tiger" +msgstr "ខ្លា" + +msgid "Rabbit" +msgstr "ទន្សាយ" + +msgid "Dragon" +msgstr "នាគ" + +msgid "Snake" +msgstr "ពស់" + +msgid "Horse" +msgstr "សេះ" + +msgid "Goat" +msgstr "ពពែ" + +msgid "Monkey" +msgstr "ស្វា" + +msgid "Rooster" +msgstr "មាន់គក" + +msgid "Dog" +msgstr "ឆ្កែ" + +msgid "Pig" +msgstr "ជ្រូក" + +msgid "Other" +msgstr "ផ្សេងៗទៀត" + +msgid "Visible" +msgstr "មើលឃើញ" + +msgid "Friend Only" +msgstr "តែមិត្តភក្ដិ" + +msgid "Private" +msgstr "ឯកជន" + +msgid "QQ Number" +msgstr "ចំនួន QQ" + +msgid "Country/Region" +msgstr "ប្រទេស/តំបន់" + +msgid "Province/State" +msgstr "ខេត្ត/រដ្ឋ" + +msgid "Zipcode" +msgstr "កូដតំបន់" + +msgid "Phone Number" +msgstr "លេខទូរស័ព្ទ" + +msgid "Authorize adding" +msgstr "ផ្ទៀងផ្ទាត់ការបន្ថែម" + +msgid "Cellphone Number" +msgstr "លេខទូរស័ព្ទចល័ត" + +msgid "Personal Introduction" +msgstr "សេចក្ដីណែនាំផ្ទាល់ខ្លួន" + +msgid "City/Area" +msgstr "ទីក្រុង/តំបន់" + +msgid "Publish Mobile" +msgstr "បោះពុម្ពចល័ត" + +msgid "Publish Contact" +msgstr "បោះពុម្ពផ្សាយទំនាក់" + +msgid "College" +msgstr "មហាវិទ្យាល័យ" + +msgid "Horoscope" +msgstr "ផែនចក្ររាសី" + +msgid "Zodiac" +msgstr "រាសីចក្រ" + +msgid "Blood" +msgstr "ឈាម" + +msgid "True" +msgstr "ពិត" + +msgid "False" +msgstr "មិនពិត" + +msgid "Modify Contact" +msgstr "កែប្រែទំនាក់ទំនង" + +msgid "Modify Address" +msgstr "កែប្រែអាសយដ្ឋាន" + +msgid "Modify Extended Information" +msgstr "កែប្រែព័ត៌មានដែលបានពង្រីក" + +msgid "Modify Information" +msgstr "កែប្រែព័ត៌មាន" + +msgid "Update" +msgstr "ធ្វើឲ្យទាន់សម័យ\t" + +msgid "Could not change buddy information." +msgstr "មិនអាចផ្លាស់ប្ដូរព័ត៌មានមិត្តភក្ដិបានទេ ។" + +#, c-format +msgid "%u requires verification" +msgstr "%u ត្រូវការការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +msgid "Add buddy question" +msgstr "បន្ថែមសំណួរមិត្តភក្ដិ" + +msgid "Enter answer here" +msgstr "បញ្ចូលចម្លើយនៅទីនេះ" + +msgid "Send" +msgstr "ផ្ញើ" + +msgid "Invalid answer." +msgstr "ចម្លើយមិនត្រឹមត្រូវ ។" + +msgid "Authorization denied message:" +msgstr "ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវបានបដិសេធសារ ៖" + +msgid "Sorry, you're not my style." +msgstr "សូមអភ័យទោស អ្នកមិនមែនជារចនាប័ទ្មរបស់ខ្ញុំទេ ។" + +#, c-format +msgid "%u needs authorization" +msgstr "%u ត្រូវការការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +msgid "Add buddy authorize" +msgstr "បន្ថែមការផ្ទៀងផ្ទាត់មិត្តភក្ដិ" + +msgid "Enter request here" +msgstr "បញ្ចូលសំណើនៅទីនេះ" + +msgid "Would you be my friend?" +msgstr "តើអ្នកនឹងជាមិត្តភក្ដិរបស់ខ្ញុំ ?" + +msgid "QQ Buddy" +msgstr "មិត្តភក្ដិ QQ" + +msgid "Add buddy" +msgstr "បន្ថែមមិត្តភក្ដិ" + +msgid "Invalid QQ Number" +msgstr "ចំនួន QQ មិនត្រឹមត្រូវ" + +msgid "Failed sending authorize" +msgstr "បានបរាជ័យក្នុងការផ្ញើការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +#, c-format +msgid "Failed removing buddy %u" +msgstr "បានបរាជ័យក្នុងការយកមិត្តភក្ដិ %u ចេញ" + +#, c-format +msgid "Failed removing me from %d's buddy list" +msgstr "បានបរាជ័យក្នុងការយកខ្ញុំចេញពីបញ្ជីមិត្តភក្ដិរបស់ %d" + +msgid "No reason given" +msgstr "គ្មានហេតុផលបានផ្ដល់" + +#. only need to get value +#, c-format +msgid "You have been added by %s" +msgstr "អ្នកត្រូវបានបន្ថែមដោយ %s" + +msgid "Would you like to add him?" +msgstr "តើអ្នកចង់បន្ថែមគាត់ទេ ?" + +#, c-format +msgid "Rejected by %s" +msgstr "បានច្រានចេញដោយ %s" + +#, c-format +msgid "Message: %s" +msgstr "សារ ៖ %s" + +msgid "ID: " +msgstr "លេខសម្គាល់ ៖" + +msgid "Group ID" +msgstr "លេខសម្គាល់ក្រុម" + +msgid "QQ Qun" +msgstr "QQ Qun" + +msgid "Please enter Qun number" +msgstr "សូមបញ្ចូលលេខ Qun" + +msgid "You can only search for permanent Qun\n" +msgstr "អ្នកអាចស្វែងរកសម្រាប់តែ Qun អចិន្ត្រៃយ៍ប៉ុណ្ណោះ\n" + +msgid "(Invalid UTF-8 string)" +msgstr "(ខ្សែអក្សរ UTF-8 មិនត្រឹមត្រូវ)" + +msgid "Not member" +msgstr "មិនចងចាំ" + +msgid "Member" +msgstr "ចងចាំ" + +msgid "Requesting" +msgstr "សំណើ" + +msgid "Admin" +msgstr "គ្រប់គ្រង" + +msgid "Notice" +msgstr "ចំណាំ" + +msgid "Detail" +msgstr "សេចក្ដីលម្អិត" + +msgid "Creator" +msgstr "អ្នកបង្កើត" + +msgid "About me" +msgstr "អំពីខ្ញុំ" + +msgid "Category" +msgstr "ប្រភេទ" + +msgid "The Qun does not allow others to join" +msgstr "Qun មិនអនុញ្ញាតឲ្យអ្នកផ្សេងចូលរួម" + +msgid "Join QQ Qun" +msgstr "ចូលរួម QQ Qun" + +msgid "Input request here" +msgstr "បញ្ចូលសំណើនៅទីនេះ" + +#, c-format +msgid "Successfully joined Qun %s (%u)" +msgstr "បានចូលដោយជោគជ័យ Qun %s (%u)" + +msgid "Successfully joined Qun" +msgstr "បានចូលដោយជោគជ័យ Qun" + +#, c-format +msgid "Qun %u denied from joining" +msgstr "Qun %u បានបដិសេធពីការចូលរួម" + +msgid "QQ Qun Operation" +msgstr "ប្រតិបត្តិការ QQ Qun" + +msgid "Failed:" +msgstr "បានបរាជ័យ ៖" + +msgid "Join Qun, Unknown Reply" +msgstr "ចូលរួម Qun មិនស្គាល់ការឆ្លើយតប" + +msgid "Quit Qun" +msgstr "ចេញពី Qun" + +msgid "" +"Note, if you are the creator, \n" +"this operation will eventually remove this Qun." +msgstr "ចំណាំ ប្រសិនបើអ្នកជាអ្នកបង្កើត ប្រតិបត្តិការនេះនឹងយក Qun នេះចេញ ។" + +msgid "Sorry, you are not our style" +msgstr "សូមអភ័យទោស អ្នកមិនស្ថិតនៅក្នុងរចនាប័ទ្មរបស់យើងទេ" + +msgid "Successfully changed Qun members" +msgstr "បានផ្លាស់ប្ដូរសមាជិក Qun ដោយជោគជ័យ" + +msgid "Successfully changed Qun information" +msgstr "បានផ្លាស់ប្ដូរព័ត៌មាន Qun ដោយជោគជ័យ" + +msgid "You have successfully created a Qun" +msgstr "អ្នកបានបង្កើត Qun ដោយជោគជ័យ" + +msgid "Would you like to set up detailed information now?" +msgstr "តើអ្នកចង់រៀបចំព័ត៌មានលម្អិតឥឡូវដែរឬទេ ?" + +msgid "Setup" +msgstr "រៀបចំ" + +#, c-format +msgid "%u requested to join Qun %u for %s" +msgstr "%u បានស្នើឲ្យចូលរួម Qun %u សម្រាប់ %s" + +#, c-format +msgid "%u request to join Qun %u" +msgstr "%u ស្នើឲ្យចូលរួម Qun %u" + +#, c-format +msgid "Failed to join Qun %u, operated by admin %u" +msgstr "បានបរាជ័យក្នុងការចូលរួម Qun %u បានប្រតិបត្តិដោយអ្នកគ្រប់គ្រង %u" + +#, c-format +msgid "<b>Joining Qun %u is approved by admin %u for %s</b>" +msgstr "<b>ចូលរួម Qun %u ត្រូវបានអនុម័តដោយអ្នកគ្រប់គ្រង %u សម្រាប់ %s</b>" + +#, c-format +msgid "<b>Removed buddy %u.</b>" +msgstr "<b>បានយកមិត្តភក្ដិ %u ចេញ ។</b>" + +#, c-format +msgid "<b>New buddy %u joined.</b>" +msgstr "<b>បានចូលរួមមិត្តភក្ដិថ្មី %u ។</b>" + +#, c-format +msgid "Unknown-%d" +msgstr "មិនស្គាល់ %d" + +msgid "Level" +msgstr "កម្រិត" + +msgid " VIP" +msgstr " VIP" + +msgid " TCP" +msgstr " TCP" + +msgid " FromMobile" +msgstr " FromMobile" + +msgid " BindMobile" +msgstr " BindMobile" + +msgid " Video" +msgstr " វីដែអូ" + +msgid " Zone" +msgstr " តំបន់" + +msgid "Flag" +msgstr "ទង់" + +msgid "Ver" +msgstr "កំណែ" + +msgid "Invalid name" +msgstr "ឈ្មោះមិនត្រឹមត្រូវ" + +msgid "Select icon..." +msgstr "ជ្រើសរូបតំណាង..." + +#, c-format +msgid "<b>Login time</b>: %d-%d-%d, %d:%d:%d<br>\n" +msgstr "<b>ពេលវេលាចូល</b> ៖ %d-%d-%d, %d:%d:%d<br>\n" + +#, c-format +msgid "<b>Total Online Buddies</b>: %d<br>\n" +msgstr "<b>មិត្តភក្ដិលើបណ្ដាញសរុប</b> ៖ %d<br>\n" + +#, c-format +msgid "<b>Last Refresh</b>: %d-%d-%d, %d:%d:%d<br>\n" +msgstr "<b>ធ្វើឲ្យស្រស់ចុងក្រោយ</b> ៖ %d-%d-%d, %d:%d:%d<br>\n" + +#, c-format +msgid "<b>Server</b>: %s<br>\n" +msgstr "<b>ម៉ាស៊ីនបម្រើ</b> ៖ %s<br>\n" + +#, c-format +msgid "<b>Client Tag</b>: %s<br>\n" +msgstr "<b>ទង់ម៉ាស៊ីនភ្ញៀវ</b> ៖ %s<br>\n" + +#, c-format +msgid "<b>Connection Mode</b>: %s<br>\n" +msgstr "<b>របៀបតភ្ជាប់</b> ៖ %s<br>\n" + +#, c-format +msgid "<b>My Internet IP</b>: %s:%d<br>\n" +msgstr "<b>IP អ៊ីនធឺណិតរបស់ខ្ញុំ</b> ៖ %s:%d<br>\n" + +#, c-format +msgid "<b>Sent</b>: %lu<br>\n" +msgstr "<b>បានផ្ញើ</b> ៖ %lu<br>\n" + +#, c-format +msgid "<b>Resend</b>: %lu<br>\n" +msgstr "<b>ផ្ញើឡើងវិញ</b> ៖ %lu<br>\n" + +#, c-format +msgid "<b>Lost</b>: %lu<br>\n" +msgstr "<b>បាត់បង់</b> ៖ %lu<br>\n" + +#, c-format +msgid "<b>Received</b>: %lu<br>\n" +msgstr "<b>បានទទួល</b> ៖ %lu<br>\n" + +#, c-format +msgid "<b>Received Duplicate</b>: %lu<br>\n" +msgstr "<b>បានស្ទួន</b> ៖ %lu<br>\n" + +#, c-format +msgid "<b>Time</b>: %d-%d-%d, %d:%d:%d<br>\n" +msgstr "<b>ពេលវេលា</b> ៖ %d-%d-%d, %d:%d:%d<br>\n" + +#, c-format +msgid "<b>IP</b>: %s<br>\n" +msgstr "<b>IP</b> ៖ %s<br>\n" + +msgid "Login Information" +msgstr "ព័ត៌មានចូល" + +msgid "<p><b>Original Author</b>:<br>\n" +msgstr "<p><b>អ្នកនិពន្ធដើម</b> ៖<br>\n" + +msgid "<p><b>Code Contributors</b>:<br>\n" +msgstr "<p><b>អ្នកចែកចាយកូដ</b> ៖<br>\n" + +msgid "<p><b>Lovely Patch Writers</b>:<br>\n" +msgstr "<p><b>អ្នកសរសេរបំណះដែលជាទីស្រឡាញ់</b> ៖<br>\n" + +msgid "<p><b>Acknowledgement</b>:<br>\n" +msgstr "<p><b>ទទួលស្គាល់</b> ៖<br>\n" + +msgid "<p><b>Scrupulous Testers</b>:<br>\n" +msgstr "<p><b>អ្នកសាកល្បងហ្មតចត់</b> ៖<br>\n" + +msgid "<p><i>And, all the boys in the backroom...</i><br>\n" +msgstr "<p><i>ប្រុសៗទាំងអស់នៅក្នុងបន្ទប់...</i><br>\n" + +msgid "<i>Feel free to join us!</i> :)" +msgstr "<i>ចូលរួមជាមួយយើងដោយសេរី !</i> :)" + +#, c-format +msgid "About OpenQ %s" +msgstr "អំពី OpenQ %s" + +msgid "Change Icon" +msgstr "ផ្លាស់ប្ដូររូបតំណាង" + +msgid "Change Password" +msgstr "ផ្លាស់ប្ដូរពាក្យសម្ងាត់" + +msgid "Account Information" +msgstr "ព័ត៌មានគណនី" + +msgid "Update all QQ Quns" +msgstr "ធ្វើឲ្យ QQ Quns ទាន់សម័យ" + +msgid "About OpenQ" +msgstr "អំពី OpenQ" + +msgid "Modify Buddy Memo" +msgstr "កែប្រែ មិត្តភក្ដិ" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "QQ Protocol Plugin" +msgstr "កម្មវិធីជំនួយពិធីការ QQ" + +msgid "Auto" +msgstr "ស្វ័យប្រវត្តិ" + +msgid "Select Server" +msgstr "ជ្រើសម៉ាស៊ីនបម្រើ" + +msgid "QQ2005" +msgstr "QQ2005" + +msgid "QQ2007" +msgstr "QQ2007" + +msgid "QQ2008" +msgstr "QQ2008" + +msgid "Connect by TCP" +msgstr "តភ្ជាប់តាម TCP" + +msgid "Show server notice" +msgstr "បង្ហាញកំណត់ចំណាំរបស់ម៉ាស៊ីនបម្រើ" + +msgid "Show server news" +msgstr "បង្ហាញព័ត៌មានរបស់ម៉ាស៊ីនបម្រើ" + +msgid "Show chat room when msg comes" +msgstr "បង្ហាញ" + +msgid "Keep alive interval (seconds)" +msgstr "ទុកខាងក្នុង (វិនាទី)" + +msgid "Update interval (seconds)" +msgstr "ធ្វើឲ្យចន្លោះទាន់សម័យ (វិនាទី)" + +msgid "Cannot decrypt server reply" +msgstr "មិនអាចឌិគ្រីបការឆ្លើយតបរបស់ម៉ាស៊ីនបម្រើបានទេ" + +#, c-format +msgid "Failed requesting token, 0x%02X" +msgstr "បានបរាជ័យក្នុងការស្នើថូខឹន 0x%02X" + +#, c-format +msgid "Invalid token len, %d" +msgstr "ថូខឹនមិនត្រឹមត្រូវ %d" + +#. extend redirect used in QQ2006 +msgid "Redirect_EX is not currently supported" +msgstr "Redirect_EX បច្ចុប្បន្នមិនត្រូវបានគាំទ្រទេ" + +#. need activation +#. need activation +#. need activation +msgid "Activation required" +msgstr "ត្រូវការធ្វើឲ្យសកម្ម" + +#, c-format +msgid "Unknown reply code when logging in (0x%02X)" +msgstr "កូដឆ្លើយតបមិនស្គាល់នៅពេលចូល (0x%02X)" + +msgid "Could not decrypt server reply" +msgstr "មិនអាចឌិគ្រីបការឆ្លើយតបរបស់ម៉ាស៊ីនបម្រើបានទេ" + +msgid "Requesting captcha" +msgstr "ស្នើ captcha" + +msgid "Checking captcha" +msgstr "ពិនិត្យមើល captcha" + +msgid "Failed captcha verification" +msgstr "បានបរាជ័យក្នុងការផ្ទៀងផ្ទាត់ captcha" + +msgid "Captcha Image" +msgstr "រូបភាព Captcha" + +msgid "Enter code" +msgstr "បញ្ចូលកូដ" + +msgid "QQ Captcha Verification" +msgstr "ការផ្ទៀងផ្ទាត់ QQ Captcha" + +msgid "Enter the text from the image" +msgstr "បញ្ចូលអត្ថបទពីរូបភាព" + +#, c-format +msgid "Unknown reply when checking password (0x%02X)" +msgstr "មិនស្គាល់ការឆ្លើយតបនៅពេលពិនិត្យមើលពាក្យសម្ងាត់ (0x%02X)" + +#, c-format +msgid "" +"Unknown reply code when logging in (0x%02X):\n" +"%s" +msgstr "" +"កូដឆ្លើយតបមិនស្គាល់ នៅពេលចូល (0x%02X) ៖\n" +"%s" + +#. we didn't successfully connect. tdt->toc_fd is valid here +msgid "Unable to connect." +msgstr "មិនអាចតភ្ជាប់បានទេ ។" + +msgid "Socket error" +msgstr "កំហុសរន្ធ" + +msgid "Unable to read from socket" +msgstr "មិនអាចអានពីរន្ធបានទេ" + +msgid "Write Error" +msgstr "កំហុសក្នុងការសរសេរ" + +msgid "Connection lost" +msgstr "បាត់បង់ការតភ្ជាប់" + +msgid "Getting server" +msgstr "យកម៉ាស៊ីនបម្រើ" + +msgid "Requesting token" +msgstr "ស្នើថូខឹន" + +msgid "Couldn't resolve host" +msgstr "មិនអាចដោះស្រាយម៉ាស៊ីនបានទេ" + +msgid "Invalid server or port" +msgstr "ម៉ាស៊ីនបម្រើ ឬច្រកមិនត្រឹមត្រូវ" + +msgid "Connecting to server" +msgstr "តភ្ជាប់ទៅកាន់ម៉ាស៊ីនបម្រើ" + +msgid "QQ Error" +msgstr "កំហុស QQ" + +#, c-format +msgid "" +"Server News:\n" +"%s\n" +"%s\n" +"%s" +msgstr "" +"ព័ត៌មានម៉ាស៊ីនបម្រើ ៖\n" +"%s\n" +"%s\n" +"%s" + +#, c-format +msgid "%s:%s" +msgstr "%s:%s" + +#, c-format +msgid "From %s:" +msgstr "ពី %s ៖" + +#, c-format +msgid "" +"Server notice From %s: \n" +"%s" +msgstr "" +"កំណត់ចំណាំម៉ាស៊ីនបម្រើពី %s ៖ \n" +"%s" + +msgid "Unknown SERVER CMD" +msgstr "មិនស្គាល់ម៉ាស៊ីនបម្រើ CMD" + +#, c-format +msgid "" +"Error reply of %s(0x%02X)\n" +"Room %u, reply 0x%02X" +msgstr "" +"កំហុសក្នុងការឆ្លើយតប %s(0x%02X)\n" +"បន្ទប់ %u ឆ្លើយតប 0x%02X" + +msgid "QQ Qun Command" +msgstr "ពាក្យបញ្ជា QQ Qun" + +msgid "Could not decrypt login reply" +msgstr "មិនអាចឌិគ្រីបការឆ្លើយតបការចូលបានទេ" + +msgid "Unknown LOGIN CMD" +msgstr "មិនស្គាល់ការចូល CMD" + +msgid "Unknown CLIENT CMD" +msgstr "មិនស្គាល់ម៉ាស៊ីនភ្ញៀវ CMD" + +#, c-format +msgid "%d has declined the file %s" +msgstr "%d បានបដិសេធឯកសារ %s" + +msgid "File Send" +msgstr "ផ្ញើឯកសារ" + +#, c-format +msgid "%d canceled the transfer of %s" +msgstr "%d បានបោះបង់ការផ្ទេរ %s" + +msgid "Connection closed (writing)" +msgstr "បានបិទការតភ្ជាប់ (សរសេរ)" + +#, c-format +msgid "<b>Group Title:</b> %s<br>" +msgstr "<b>ចំណងជ្រើក្រុម ៖</b> %s<br>" + +#, c-format +msgid "<b>Notes Group ID:</b> %s<br>" +msgstr "<b>កំណត់ចំណាំក្រុម ID ៖</b> %s<br>" + +#, c-format +msgid "Info for Group %s" +msgstr "ព័ត៌មានសម្រាប់ក្រុម %s" + +msgid "Notes Address Book Information" +msgstr "កំណត់ចំណាំព័ត៌មានសៀវភៅអាសយដ្ឋាន" + +msgid "Invite Group to Conference..." +msgstr "អញ្ជើញក្រុមឲ្យចូលរួមសន្និសីទ..." + +msgid "Get Notes Address Book Info" +msgstr "យកកំណត់ចំណាំព័ត៌មានសៀវភៅអាសយដ្ឋាន" + +msgid "Sending Handshake" +msgstr "ផ្ញើការចាប់ដៃ" + +msgid "Waiting for Handshake Acknowledgement" +msgstr "រង់ចាំការទទួលស្គាល់ការចាប់ដៃ" + +msgid "Handshake Acknowledged, Sending Login" +msgstr "បានទទួលស្គាល់ការចាប់ដៃ ផ្ញើការចូល" + +msgid "Waiting for Login Acknowledgement" +msgstr "រង់ចាំការទទួលស្គាល់ការចូល" + +msgid "Login Redirected" +msgstr "បានបញ្ចូលការចូលបន្ត" + +msgid "Forcing Login" +msgstr "បង្ខំការចូល" + +msgid "Login Acknowledged" +msgstr "បានទទួលស្គាល់ការចូល" + +msgid "Starting Services" +msgstr "ចាប់ផ្ដើមសេវា" + +#, c-format +msgid "" +"A Sametime administrator has issued the following announcement on server %s" +msgstr "ពេលមួយនោះ អ្នកគ្រប់គ្រងបានចេញផ្សាយនូវសេចក្ដីប្រកាសដូចខាងក្រោមនៅលើម៉ាស៊ីនបម្រើ %s" + +msgid "Sametime Administrator Announcement" +msgstr "ការប្រកាសរបស់អ្នកគ្រប់គ្រងពេលតែមួយ" + +msgid "Connection reset" +msgstr "កំណត់ការតភ្ជាប់ឡើងវិញ" + +#, c-format +msgid "Error reading from socket: %s" +msgstr "កំហុសក្នុងការអានពីរន្ធ ៖ %s" + +#. this is a regular connect, error out +msgid "Unable to connect to host" +msgstr "មិនអាចតភ្ជាប់ទៅកាន់ម៉ាស៊ីនទេ" + +#, c-format +msgid "Announcement from %s" +msgstr "ការប្រកាសពី %s" + +msgid "Conference Closed" +msgstr "បានបិទសន្និសីទ" + +msgid "Unable to send message: " +msgstr "មិនអាចផ្ញើសារបានទេ ៖" + +msgid "Place Closed" +msgstr "បានបិទកន្លែង" + +msgid "Microphone" +msgstr "មេក្រូ" + +msgid "Speakers" +msgstr "ធុងបាស" + +msgid "Video Camera" +msgstr "ម៉ាស៊ីនថតវីដេអូ" + +msgid "Supports" +msgstr "គាំទ្រ" + +msgid "External User" +msgstr "អ្នកប្រើខាងក្រៅ" + +msgid "Create conference with user" +msgstr "បង្កើតសន្និសីទជាមួយអ្នកប្រើ" + +#, c-format +msgid "" +"Please enter a topic for the new conference, and an invitation message to be " +"sent to %s" +msgstr "សូមបញ្ចូលប្រធានបទសម្រាប់សន្និសីទថ្មី ហើយសារអញ្ជើញត្រូវផ្ញើទៅ %s" + +msgid "New Conference" +msgstr "សន្និសីទថ្មី" + +msgid "Create" +msgstr "បង្កើត" + +msgid "Available Conferences" +msgstr "សន្និសីទដែលអាចប្រើបាន" + +msgid "Create New Conference..." +msgstr "បង្កើតសន្និសីទថ្មី..." + +msgid "Invite user to a conference" +msgstr "អញ្ជើញអ្នកប្រើឲ្យចូលរួមសន្និសីទ" + +#, c-format +msgid "" +"Select a conference from the list below to send an invite to user %s. Select " +"\"Create New Conference\" if you'd like to create a new conference to invite " +"this user to." +msgstr "" +"ជ្រើសសន្និសីទពីបញ្ជីខាងក្រោម ដើម្បីផ្ញើការអញ្ជើញទៅអ្នកប្រើ %s ។ ជ្រើស \"បង្កើតសន្និសីទថ្មី\" " +"ប្រសិនបើអ្នកចង់បង្កើតសន្និសីទថ្មីដើម្បីអញ្ជើញង្នកប្រើនេះ ។" + +msgid "Invite to Conference" +msgstr "អញ្ជើញឲ្យចូលរួមក្នុងសន្និសីទ" + +msgid "Invite to Conference..." +msgstr "អញ្ជើញឲ្យចូលរួមក្នុងសន្និសីទ..." + +msgid "Send TEST Announcement" +msgstr "ផ្ញើការប្រកាសសាកល្បង" + +msgid "Topic:" +msgstr "ប្រធានបទ ៖" + +msgid "No Sametime Community Server specified" +msgstr "គ្មានម៉ាស៊ីនបម្រើសហគមន៍បានបញ្ជាក់ទេ" + +#, c-format +msgid "" +"No host or IP address has been configured for the Meanwhile account %s. " +"Please enter one below to continue logging in." +msgstr "" +"គ្មានម៉ាស៊ីន ឬអាសយដ្ឋាន IP ត្រូវបានកំណត់រចនាសម្ព័ន្ធសម្រាប់គណនី %s ។ សូមបញ្ចូលអាសយដ្ឋាន IP មួយ" +"ខាងក្រោមដើម្បីបន្តចូល ។" + +msgid "Meanwhile Connection Setup" +msgstr "រៀបចំការតភ្ជាប់" + +msgid "No Sametime Community Server Specified" +msgstr "គ្មានម៉ាស៊ីនបម្រើសហគមន៍បានបញ្ជាក់ទេ" + +msgid "Connect" +msgstr "តភ្ជាប់" + +#, c-format +msgid "Unknown (0x%04x)<br>" +msgstr "មិនស្គាល់ (0x%04x)<br>" + +msgid "Last Known Client" +msgstr "បានស្គាល់ម៉ាស៊ីនភ្ញៀវចុងក្រោយ" + +msgid "User Name" +msgstr "ឈ្មោះអ្នកប្រើ" + +msgid "Sametime ID" +msgstr "លេខស្គាល់ Sametime" + +msgid "An ambiguous user ID was entered" +msgstr "លេខសម្គាល់អ្នកប្រើត្រូវបានបញ្ចូល" + +#, c-format +msgid "" +"The identifier '%s' may possibly refer to any of the following users. Please " +"select the correct user from the list below to add them to your buddy list." +msgstr "" +"ឧបករណ៍កំណត់អត្តសញ្ញាណ '%s' អាចសំអាងលើអ្នកប្រើដូចខាងក្រោយ ។ សូមជ្រើសអ្នកប្រើដែលត្រឹមត្រូវពីបញ្ជីខាង" +"ក្រោម ដើម្បីបន្ថែមពួកគេទៅក្នុងបញ្ជីមិត្តភក្ដិរបស់អ្នក ។" + +msgid "Select User" +msgstr "ជ្រើសអ្នកប្រើ" + +msgid "Unable to add user: user not found" +msgstr "មិនអាចបន្ថែមអ្នកប្រើបានទេ ៖ រកមិនឃើញអ្នកប្រើ" + +#, c-format +msgid "" +"The identifier '%s' did not match any users in your Sametime community. This " +"entry has been removed from your buddy list." +msgstr "" +"ឧបករណ៍កំណត់អត្តសញ្ញាណ '%s' មិនបានផ្គូផ្គងអ្នកប្រើនៅក្នុងសហគមន៍ Sametime របស់អ្នកទេ ។ ធាតុនេះ" +"ត្រូវបានយកចេញពីបញ្ជីមិត្តភក្ដិរបស់អ្នកហើយ ។" + +#, c-format +msgid "" +"Error reading file %s: \n" +"%s\n" +msgstr "" +"កំហុសក្នុងការអានឯកសារ %s ៖ \n" +"%s\n" + +msgid "Remotely Stored Buddy List" +msgstr "បានទុកបញ្ជីមិត្តភក្ដិពីចម្ងាយ" + +msgid "Buddy List Storage Mode" +msgstr "របៀបផ្ទុកបញ្ជីមិត្តភក្ដិ" + +msgid "Local Buddy List Only" +msgstr "តែបញ្ជីមិត្តភក្ដិមូលដ្ឋានប៉ុណ្ណោះ" + +msgid "Merge List from Server" +msgstr "បញ្ចូលបញ្ជីពីម៉ាស៊ីនបម្រើ" + +msgid "Merge and Save List to Server" +msgstr "បញ្ចូល និងរក្សាទុកបញ្ជីទៅកាន់ម៉ាស៊ីនបម្រើ" + +msgid "Synchronize List with Server" +msgstr "ធ្វើសមកាលកម្មបញ្ជីជាមួយម៉ាស៊ីនបម្រើ" + +#, c-format +msgid "Import Sametime List for Account %s" +msgstr "នាំចូលបញ្ជី Sametime សម្រាប់គណនី %s" + +#, c-format +msgid "Export Sametime List for Account %s" +msgstr "នាំចេញបញ្ជី Sametime សម្រាប់គណនី %s" + +msgid "Unable to add group: group exists" +msgstr "មិនអាចបន្ថែមក្រុម ៖ មានក្រុមរួចហើយ" + +#, c-format +msgid "A group named '%s' already exists in your buddy list." +msgstr "មានក្រុមដែលមានឈ្មោះ '%s' រួចហើយនៅក្នុងបញ្ជីមិត្តភក្ដិរបស់អ្នក ។" + +msgid "Unable to add group" +msgstr "មិនអាចបន្ថែមក្រុមបានទេ" + +msgid "Possible Matches" +msgstr "មានការផ្គូផ្គង" + +msgid "Notes Address Book group results" +msgstr "ចំណាំលទ្ធផលក្រុមសៀវភៅអាសយដ្ឋាន" + +#, c-format +msgid "" +"The identifier '%s' may possibly refer to any of the following Notes Address " +"Book groups. Please select the correct group from the list below to add it " +"to your buddy list." +msgstr "" +"ឧបករណ៍កំណត់អត្តសញ្ញាណ '%s' អាចយោងតាមក្រុមសៀវភៅអាសយដ្ឋានចំណាំ ។ សូមជ្រើសក្រុមត្រឹមត្រូវពីបញ្ជី" +"ខាងក្រោម ដើម្បីបន្ថែមវាទៅកាន់បញ្ជីមិត្តភក្ដិរបស់អ្នក ។" + +msgid "Select Notes Address Book" +msgstr "ជ្រើសសៀវភៅអាសយដ្ឋានចំណាំ" + +msgid "Unable to add group: group not found" +msgstr "មិនអាចបន្ថែមក្រុមបានទេ ៖ រកមិនឃើញក្រុម" + +#, c-format +msgid "" +"The identifier '%s' did not match any Notes Address Book groups in your " +"Sametime community." +msgstr "" +"ឧបករណ៍កំណត់អត្តសញ្ញាណ '%s' មិនផ្គូផ្គងក្រុមសៀវភៅអាសយដ្ឋានចំណាំណាមួយទេនៅក្នុងសហគមន៍ Sametimeរបស់" +"អ្នក ។" + +msgid "Notes Address Book Group" +msgstr "ចំណាំក្រុមសៀវភៅអាសយដ្ឋាន" + +msgid "" +"Enter the name of a Notes Address Book group in the field below to add the " +"group and its members to your buddy list." +msgstr "" +"បញ្ចូលឈ្មោះក្រុមសៀវភៅចំណាំនៅក្នុងវាលខាងក្រោម ដើម្បីបន្ថែមក្រុម និងសមាជិករបស់វាទៅកាន់បញ្ជីមិត្តភក្ដិរបស់" +"អ្នក ។" + +#, c-format +msgid "Search results for '%s'" +msgstr "ស្វែងរកលទ្ធផលសម្រាប់ '%s'" + +#, c-format +msgid "" +"The identifier '%s' may possibly refer to any of the following users. You " +"may add these users to your buddy list or send them messages with the action " +"buttons below." +msgstr "" +"ឧបករណ៍កំណត់អត្តសញ្ញាណ '%s' អាចយោងតាមអ្នកប្រើដូចខាងក្រោម ។ អ្នកអាចបន្ថែមអ្នកប្រើទាំងនេះទៅកាន់" +"បញ្ជីមិត្តភក្ដិរបស់អ្នក ឬផ្ញើសារឲ្យពួកគេដោយប្រើប៊ូតុងសកម្មភាពខាងក្រោម ។" + +msgid "Search Results" +msgstr "ស្វែងរកលទ្ធផល" + +msgid "No matches" +msgstr "គ្មានការផ្គូផ្គង" + +#, c-format +msgid "The identifier '%s' did not match any users in your Sametime community." +msgstr "ឧបករណ៍កំណត់អត្តសញ្ញាណ '%s' មិនបានផ្គូផ្គងអ្នកប្រើនៅក្នុងសហគមន៍ Sametime របស់អ្នក ។" + +msgid "No Matches" +msgstr "គ្មានការផ្គូផ្គង" + +msgid "Search for a user" +msgstr "ស្វែងរកអ្នកប្រើ" + +msgid "" +"Enter a name or partial ID in the field below to search for matching users " +"in your Sametime community." +msgstr "" +"បញ្ចូលឈ្មោះ ឬលេខសម្គាល់ដោយផ្នែកនៅក្នុងវាលខាងក្រោម ដើម្បីស្វែងរកអ្នកប្រើដែលផ្គូផ្គងនៅក្នុងសហគមន៍ " +"Sametime របស់អ្នក ។" + +msgid "User Search" +msgstr "ស្វែងរកអ្នកប្រើ" + +msgid "Import Sametime List..." +msgstr "នាំចូលបញ្ជី Sametime..." + +msgid "Export Sametime List..." +msgstr "នាំចេញបញ្ជី Sametime..." + +msgid "Add Notes Address Book Group..." +msgstr "បន្ថែមក្រុមសៀវភៅអាសយដ្ឋានចំណាំ..." + +msgid "User Search..." +msgstr "ស្វែងរកអ្នកប្រើ..." + +msgid "Force login (ignore server redirects)" +msgstr "បង្ខំឲ្យចូល (មិនអើពោះការបញ្ជូនម៉ាស៊ីនបម្រើត)" + +#. pretend to be Sametime Connect +msgid "Hide client identity" +msgstr "លាក់អត្តសញ្ញាណម៉ាស៊ីនភ្ញៀវ" + +#, c-format +msgid "User %s is not present in the network" +msgstr "អ្នកប្រើ %s មិនបង្ហាញនៅក្នុងបណ្ដាញទេ" + +msgid "Key Agreement" +msgstr "ការព្រមព្រៀងសំខាន់" + +msgid "Cannot perform the key agreement" +msgstr "មិនអាចអនុវត្តការព្រមព្រៀងសំខាន់ទេ" + +msgid "Error occurred during key agreement" +msgstr "កំហុសបានកើតឡើងកំឡុងពេលកិច្ចព្រមព្រៀងសំខាន់" + +msgid "Key Agreement failed" +msgstr "បានបរាជ័យក្នុងការព្រមព្រៀងសំខាន់" + +msgid "Timeout during key agreement" +msgstr "អស់ពេលកំឡុងពេលព្រមព្រៀងសំខាន់4" + +msgid "Key agreement was aborted" +msgstr "ការព្រមព្រៀងសំខាន់ត្រូវបានបោះបង់" + +msgid "Key agreement is already started" +msgstr "ការព្រមព្រៀងសំខាន់បានចាប់ផ្ដើមរួចហើយ" + +msgid "Key agreement cannot be started with yourself" +msgstr "ការព្រមព្រៀងសំខាន់មិនអាចត្រូវចាប់ផ្ដើមជាមួយខ្លួនអ្នកផ្ទាល់" + +msgid "The remote user is not present in the network any more" +msgstr "អ្នកប្រើពីចម្ងាយមិនបង្ហាញនៅក្នុងបណ្ដាញទៀតទេ" + +#, c-format +msgid "" +"Key agreement request received from %s. Would you like to perform the key " +"agreement?" +msgstr "បានទទួលសំណួរការព្រមព្រៀងពី %s ។ តើអ្នកចង់អនុវត្តការព្រមព្រៀងសំខាន់ដែរឬទេ ?" + +#, c-format +msgid "" +"The remote user is waiting key agreement on:\n" +"Remote host: %s\n" +"Remote port: %d" +msgstr "" +"អ្នកប្រើពីចម្ងាយកំពុងរង់ចាំការព្រមព្រៀងសំខាន់នៅលើ ៖\n" +"ម៉ាស៊ីនពីចម្ងាយ ៖ %s\n" +"ច្រកពីចម្ងាយ ៖ %d" + +msgid "Key Agreement Request" +msgstr "សំណើការព្រមព្រៀងសំខាន់" + +msgid "IM With Password" +msgstr "IM មានពាក្យសម្ងាត់" + +msgid "Cannot set IM key" +msgstr "មិនកំណត់សោ IM បានទេ" + +msgid "Set IM Password" +msgstr "កំណត់ពាក្យសម្ងាត់ IM" + +msgid "Get Public Key" +msgstr "យកសោសាធារណៈ" + +msgid "Cannot fetch the public key" +msgstr "មិនអាចទៅយកសោសាធារណៈបានទេ" + +msgid "Show Public Key" +msgstr "បង្ហាញសោសាធារណៈ" + +msgid "Could not load public key" +msgstr "មិនអាចផ្ទុកសោសាធារណៈបានទេ" + +msgid "User Information" +msgstr "ព័ត៌មានអ្នកអ្នកប្រើ" + +msgid "Cannot get user information" +msgstr "មិនអាចយកព័ត៌មានរបស់អ្នកប្រើបានទេ" + +#, c-format +msgid "The %s buddy is not trusted" +msgstr "មិត្តភក្ដិ %s មិនទុកចិត្តទេ" + +msgid "" +"You cannot receive buddy notifications until you import his/her public key. " +"You can use the Get Public Key command to get the public key." +msgstr "" +"អ្នកមិនអាចទទួលការជូនដំណឹងមិត្តភក្ដិទេ រហូតដល់អ្នកនាំចូលសោសាធារណៈរបស់គាត់ ។ អ្នកអាចប្រើពាក្យបញ្ជា" +"សាធារណៈ ដើម្បីទទួលបានសោសាធារណៈ ។" + +#. Open file selector to select the public key. +msgid "Open..." +msgstr "បើក..." + +#, c-format +msgid "The %s buddy is not present in the network" +msgstr "មិត្តភក្ដិ %s មិនបង្ហាញនៅក្នុងបណ្ដាញទេ" + +msgid "" +"To add the buddy you must import his/her public key. Press Import to import " +"a public key." +msgstr "" +"ដើម្បីបន្ថែមមិត្តភក្ដិ អ្នកត្រូវតែនាំចូលសោសាធារណៈរបស់គាត់ ។ ចុចនាំចូល ដើម្បីនាំចូលសោសាធារណៈ ។" + +msgid "_Import..." +msgstr "នាំចូល..." + +msgid "Select correct user" +msgstr "ជ្រើសអ្នកប្រើដែលត្រឹមត្រូវ" + +msgid "" +"More than one user was found with the same public key. Select the correct " +"user from the list to add to the buddy list." +msgstr "" +"រកឃើញអ្នកប្រើច្រើនជាងមួយដែលមានសោសាធារណៈដូចគ្នា ។ ជ្រើសអ្នកប្រើបច្ចុប្បន្នពីបញ្ជី ដើម្បីបន្ថែមទៅ" +"កាន់បញ្ជីមិត្តភក្ដិ ។" + +msgid "" +"More than one user was found with the same name. Select the correct user " +"from the list to add to the buddy list." +msgstr "" +"រកឃើញអ្នកប្រើច្រើនជាងមួយ ដែលមានឈ្មោះដូចគ្នា ។ ជ្រើសអ្នកប្រើត្រឹមត្រូវពីបញ្ជីដើម្បីបន្ថែម" +"ទៅកាន់បញ្ជីមិត្តភក្ដិរបស់អ្នក ។" + +msgid "Detached" +msgstr "ផ្ដាច់" + +msgid "Indisposed" +msgstr "មិនចោល" + +msgid "Wake Me Up" +msgstr "ដាស់ខ្ញុំ" + +msgid "Hyper Active" +msgstr "សកម្មភាព" + +msgid "Robot" +msgstr "មនុស្សយន្ត" + +msgid "Happy" +msgstr "សប្បាយ" + +msgid "Sad" +msgstr "ក្រៀមក្រំ" + +msgid "Angry" +msgstr "ខឹង" + +msgid "Jealous" +msgstr "ច្រណែន" + +msgid "Ashamed" +msgstr "អៀនខ្មាស់" + +msgid "Invincible" +msgstr "មិនចុះចាញ់" + +msgid "In Love" +msgstr "សេចក្តីស្រឡាញ់" + +msgid "Sleepy" +msgstr "ងងុយដេក" + +msgid "Bored" +msgstr "អផ្សុក" + +msgid "Excited" +msgstr "រំភើប" + +msgid "Anxious" +msgstr "រសាប់រសល់" + +msgid "User Modes" +msgstr "របៀបអ្នកប្រើ" + +msgid "Preferred Contact" +msgstr "ទំនាក់ទំនងដែលពេញចិត្ត" + +msgid "Preferred Language" +msgstr "ភាសាដែលពេញចិត្ត" + +msgid "Device" +msgstr "ឧបករណ៍" + +msgid "Timezone" +msgstr "តំបន់ពេលវេលា" + +msgid "Geolocation" +msgstr "ទីតាំងភូមិសាស្ត្រ" + +msgid "Reset IM Key" +msgstr "កំណត់សោ IM ឡើងវិញ" + +msgid "IM with Key Exchange" +msgstr "IM មានការផ្លាស់ប្ដូរសោ" + +msgid "IM with Password" +msgstr "IM មានពាក្យសម្ងាត់" + +msgid "Get Public Key..." +msgstr "យកសោសាធារណៈ..." + +msgid "Kill User" +msgstr "សម្លាប់អ្នកប្រើ" + +msgid "Draw On Whiteboard" +msgstr "គូរលើក្ដារខៀន" + +msgid "_Passphrase:" +msgstr "ឃ្លាសម្ងាត់ ៖" + +#, c-format +msgid "Channel %s does not exist in the network" +msgstr "មិនទាន់មានឆានែល %s នៅក្នុងបណ្ដាញទេ" + +msgid "Channel Information" +msgstr "ព័ត៌មានឆានែល" + +msgid "Cannot get channel information" +msgstr "មិនអាចយកព័ត៌មានឆានែលបានទេ" + +#, c-format +msgid "<b>Channel Name:</b> %s" +msgstr "<b>ឈ្មោះឆានែល ៖</b> %s" + +#, c-format +msgid "<br><b>User Count:</b> %d" +msgstr "<br><b>ចំនួនអ្នកប្រើ ៖</b> %d" + +#, c-format +msgid "<br><b>Channel Founder:</b> %s" +msgstr "<br><b>ស្ថាបនិកឆានែល ៖</b> %s" + +#, c-format +msgid "<br><b>Channel Cipher:</b> %s" +msgstr "<br><b>សរសេរឆានែលជាសម្ងាត់ ៖</b> %s" + +#. Definition of HMAC: http://en.wikipedia.org/wiki/HMAC +#, c-format +msgid "<br><b>Channel HMAC:</b> %s" +msgstr "<br><b>ឆានែល HMAC ៖</b> %s" + +#, c-format +msgid "<br><b>Channel Topic:</b><br>%s" +msgstr "<br><b>ប្រធានបទឆានែល ៖</b><br>%s" + +#, c-format +msgid "<br><b>Channel Modes:</b> " +msgstr "<br><b>របៀបឆានែល ៖</b> " + +#, c-format +msgid "<br><b>Founder Key Fingerprint:</b><br>%s" +msgstr "<br><b>ស្ថាបនិកសោស្នាមម្រាមដៃ ៖</b><br>%s" + +#, c-format +msgid "<br><b>Founder Key Babbleprint:</b><br>%s" +msgstr "<br><b>ស្ថាបនិកសោ Babbleprint ៖</b><br>%s" + +msgid "Add Channel Public Key" +msgstr "បន្ថែមសោសាធារណៈរបស់ឆានែល" + +#. Add new public key +msgid "Open Public Key..." +msgstr "បើកសោសាធារណៈ..." + +msgid "Channel Passphrase" +msgstr "ឃ្លាសម្ងាត់ឆានែល" + +msgid "Channel Public Keys List" +msgstr "បញ្ជីសោសាធារណៈរបស់ឆានែល" + +#, c-format +msgid "" +"Channel authentication is used to secure the channel from unauthorized " +"access. The authentication may be based on passphrase and digital " +"signatures. If passphrase is set, it is required to be able to join. If " +"channel public keys are set then only users whose public keys are listed are " +"able to join." +msgstr "" +"ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ឆានែលត្រូវបានប្រើដើម្បីធ្វើឲ្យឆានែលមានសុវត្ថិភាព ពីការចូលដំណើរការ" +"ដែលមិនបានផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ ។ ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវអាចមានមូលដ្ឋានលើឃ្លាសម្ងាត់ និង" +"ហត្ថលេខាឌីជីថល ។ ប្រសិនបើបានកំណត់ឃ្លាសម្ងាត់ វាតម្រូវឲ្យចូលរួម ។ ប្រសិនបើសោសាធារណៈរបស់ឆានែល " +"បន្ទាប់មកមានតែអ្នកប្រើដែលសោសាធារណៈរបស់វាត្រូវបានរាយដើម្បីអាចចូលរួមបាន ។" + +msgid "Channel Authentication" +msgstr "ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់ឆានែល" + +msgid "Add / Remove" +msgstr "បន្ថែម/យកចេញ" + +msgid "Group Name" +msgstr "ឈ្មោះក្រុម" + +msgid "Passphrase" +msgstr "ឃ្លាសម្ងាត់" + +#, c-format +msgid "Please enter the %s channel private group name and passphrase." +msgstr "សូមបញ្ចូលឈ្មោះក្រុមឯកជនឆានែល %s និងឃ្លាសម្ងាត់ ។" + +msgid "Add Channel Private Group" +msgstr "បន្ថែមក្រុមឯកជនរបស់ឆានែល" + +msgid "User Limit" +msgstr "ដែនកំណត់អ្នកប្រើ" + +msgid "Set user limit on channel. Set to zero to reset user limit." +msgstr "កំណត់ដែនកំណត់របស់អ្នកប្រើនៅលើឆានែល ។ កំណត់សូន្យដើម្បីកំណត់ដែនកំណត់អ្នកប្រើឡើងវិញ ។" + +msgid "Invite List" +msgstr "អញ្ជើញបញ្ជី" + +msgid "Ban List" +msgstr "បញ្ជីហាមឃាត់" + +msgid "Add Private Group" +msgstr "បន្ថែមក្រុមឯកជន" + +msgid "Reset Permanent" +msgstr "កំណត់អចិន្ត្រៃយ៍ឡើងវិញ" + +msgid "Set Permanent" +msgstr "កំណត់អចិន្ត្រៃយ៍" + +msgid "Set User Limit" +msgstr "កំណត់ដែនកំណត់របស់អ្នក" + +msgid "Reset Topic Restriction" +msgstr "កំណត់ការដាក់កម្រិតប្រធានបទឡើងវិញ" + +msgid "Set Topic Restriction" +msgstr "កំណត់ការកម្រិតប្រធានបទ" + +msgid "Reset Private Channel" +msgstr "កំណត់ឆានែលឯកជនឡើងវិញ" + +msgid "Set Private Channel" +msgstr "កំណត់ឆានែលឯកជន" + +msgid "Reset Secret Channel" +msgstr "កំណត់ឆានែលសម្ងាត់" + +msgid "Set Secret Channel" +msgstr "កំណត់ឆានែលសម្ងាត់" + +#, c-format +msgid "" +"You have to join the %s channel before you are able to join the private group" +msgstr "អ្នកបានចូលរួមក្នុងឆានែល %s មុននឹងអ្នកអាចចូលរួមក្នុងក្រុមឯកជន" + +msgid "Join Private Group" +msgstr "ចូលរួមក្នុងក្រុមឯកជន" + +msgid "Cannot join private group" +msgstr "មិនអាចចូលរួមក្នុងក្រុមឯកជនបានទេ" + +msgid "Call Command" +msgstr "ហៅពាក្យបញ្ជា" + +msgid "Cannot call command" +msgstr "មិនអាចហៅពាក្យបញ្ជាបានទេ" + +msgid "Unknown command" +msgstr "មិនស្គាល់ពាក្យបញ្ជា" + +msgid "Secure File Transfer" +msgstr "ការផ្ទេរឯកសារមានសុវត្ថិភាព" + +msgid "Error during file transfer" +msgstr "កំហុសកំឡុងពេលផ្ទេរឯកសារ" + +msgid "Remote disconnected" +msgstr "បានផ្ដាច់ពីចម្ងាយ" + +msgid "Permission denied" +msgstr "បានបដិសេធសិទ្ធិ" + +msgid "Key agreement failed" +msgstr "បានបរាជ័យលើកិច្ចព្រមព្រៀងសំខាន់" + +msgid "Connection timed out" +msgstr "អស់ពេលតភ្ជាប់" + +msgid "Creating connection failed" +msgstr "បានបរាជ័យក្នុងការបង្កើតការតភ្ជាប់" + +msgid "File transfer session does not exist" +msgstr "មិនទាន់មានសម័យផ្ទេរឯកសារទេ" + +msgid "No file transfer session active" +msgstr "គ្មានសម័យផ្ទេរឯកសារសកម្មទេ" + +msgid "File transfer already started" +msgstr "បានចាប់ផ្ដើមការផ្ទេរឯកសាររួចហើយ" + +msgid "Could not perform key agreement for file transfer" +msgstr "មិនអាចអនុវត្តកិច្ចព្រមព្រៀងសំខាន់សម្រាប់ការផ្ទេរឯកសារបានទេ" + +msgid "Could not start the file transfer" +msgstr "មិនអាចចាប់ផ្ដើមការផ្ទេរឯកសារបានទេ" + +msgid "Cannot send file" +msgstr "មិនអាចផ្ញើឯកសារបានទេ" + +msgid "Error occurred" +msgstr "កំហុសបានកើតឡើង" + +#, c-format +msgid "%s has changed the topic of <I>%s</I> to: %s" +msgstr "%s បានផ្លាស់ប្ដូរប្រធានបទរបស់ <I>%s</I> ទៅជា ៖ %s" + +#, c-format +msgid "<I>%s</I> set channel <I>%s</I> modes to: %s" +msgstr "<I>%s</I> កំណត់របៀបឆានែល <I>%s</I> ទៅជា ៖ %s" + +#, c-format +msgid "<I>%s</I> removed all channel <I>%s</I> modes" +msgstr "<I>%s</I> បានយករបៀបឆានែល <I>%s</I> ចេញ" + +#, c-format +msgid "<I>%s</I> set <I>%s's</I> modes to: %s" +msgstr "<I>%s</I> កំណត់របៀប <I>%s</I> ទៅជា ៖ %s" + +#, c-format +msgid "<I>%s</I> removed all <I>%s's</I> modes" +msgstr "<I>%s</I> បានយករបៀបរបស់ <I>%s</I> ទាំងអស់ចេញ" + +#, c-format +msgid "You have been kicked off <I>%s</I> by <I>%s</I> (%s)" +msgstr "អ្នកត្រូវបានធាក់ចេញពី <I>%s</I> ដោយ <I>%s</I> (%s)" + +#, c-format +msgid "You have been killed by %s (%s)" +msgstr "អ្នកត្រូវបានសម្លាប់ដោយ %s (%s)" + +#, c-format +msgid "Killed by %s (%s)" +msgstr "បានសម្លាប់ដោយ %s (%s)" + +msgid "Server signoff" +msgstr "ចេញពីម៉ាស៊ីនបម្រើ" + +msgid "Personal Information" +msgstr "ព័ត៌មានផ្ទាល់ខ្លួន" + +msgid "Birth Day" +msgstr "ថ្ងៃកំណើត" + +msgid "Job Role" +msgstr "តួនាទីការងារ" + +msgid "Organization" +msgstr "អង្គការ" + +msgid "Unit" +msgstr "ផ្នែក" + +msgid "Note" +msgstr "ចំណាំ" + +msgid "Join Chat" +msgstr "ចូលរួមជជែក" + +#, c-format +msgid "You are channel founder on <I>%s</I>" +msgstr "អ្នកជាអ្នកស្ថាបនិកឆានែលនៅលើ <I>%s</I>" + +#, c-format +msgid "Channel founder on <I>%s</I> is <I>%s</I>" +msgstr "ស្ថាបនិកឆានែលនៅលើ <I>%s</I> គឺ <I>%s</I>" + +msgid "Real Name" +msgstr "ឈ្មោះពិត" + +msgid "Status Text" +msgstr "អត្ថបទស្ថានភាព" + +msgid "Public Key Fingerprint" +msgstr "ស្នាមម្រាមដៃសោសាធារណៈ" + +msgid "Public Key Babbleprint" +msgstr "Babbleprint សោសាធារណៈ" + +msgid "_More..." +msgstr "ផ្សេងៗទៀត..." + +msgid "Detach From Server" +msgstr "ផ្ដាច់ពីម៉ាស៊ីនបម្រើ" + +msgid "Cannot detach" +msgstr "មិនអាចផ្ដាច់បានទេ" + +msgid "Cannot set topic" +msgstr "មិនអាចកំណត់ប្រធានបទបានទេ" + +msgid "Failed to change nickname" +msgstr "បានបរាជ័យក្នុងការផ្លាស់ប្ដូរសម្មតិនាម" + +msgid "Roomlist" +msgstr "បញ្ជីបន្ទប់" + +msgid "Cannot get room list" +msgstr "មិនអាចយកបញ្ជីបន្ទប់បានទេ" + +msgid "Network is empty" +msgstr "បណ្ដាញទទេ" + +msgid "No public key was received" +msgstr "មិនបានទទួលសោសាធារណៈទេ" + +msgid "Server Information" +msgstr "ព័ត៌មានម៉ាស៊ីនបម្រើ" + +msgid "Cannot get server information" +msgstr "មិនអាចយកព័ត៌មានម៉ាស៊ីនបម្រើបានទេ" + +msgid "Server Statistics" +msgstr "ស្ថិតិម៉ាស៊ីនបម្រើ" + +msgid "Cannot get server statistics" +msgstr "មិនអាចយកស្ថិតិម៉ាស៊ីនបម្រើបានទេ" + +#, c-format +msgid "" +"Local server start time: %s\n" +"Local server uptime: %s\n" +"Local server clients: %d\n" +"Local server channels: %d\n" +"Local server operators: %d\n" +"Local router operators: %d\n" +"Local cell clients: %d\n" +"Local cell channels: %d\n" +"Local cell servers: %d\n" +"Total clients: %d\n" +"Total channels: %d\n" +"Total servers: %d\n" +"Total routers: %d\n" +"Total server operators: %d\n" +"Total router operators: %d\n" +msgstr "" +"ម៉ាស៊ីនបម្រើមូលដ្ឋានចាប់ផ្ដើមម៉ោង ៖ %s\n" +"ម៉ាស៊ីនបម្រើមូលដ្ឋានដល់ម៉ោង ៖ %s\n" +"ម៉ាស៊ីនភ្ញៀវរបស់ម៉ាស៊ីនបម្រើមូលដ្ឋាន ៖ %d\n" +"ឆានែលម៉ាស៊ីនបម្រើមូលដ្ឋាន ៖ %d\n" +"ការីម៉ាស៊ីនបម្រើមូលដ្ឋាន ៖ %d\n" +"ការីរ៉ោតទ័រមូលដ្ឋាន ៖ %d\n" +"ម៉ាស៊ីនភ្ញើចល័តមូលដ្ឋាន ៖ %d\n" +"ឆានែលចល័តមូលដ្ឋាន ៖ %d\n" +"ម៉ាស៊ីនបម្រើចល័តមូលដ្ឋាន ៖ %d\n" +"ម៉ាស៊ីនភ្ញៀវសរុប ៖ %d\n" +"ឆានែលសរុប ៖ %d\n" +"ម៉ាស៊ីនបម្រើសរុប ៖ %d\n" +"Total routers: %d\n" +"Total server operators: %d\n" +"Total router operators: %d\n" + +msgid "Network Statistics" +msgstr "ស្ថិតិបណ្ដាញ" + +msgid "Ping failed" +msgstr "បានបរាជ័យក្នុងការ Ping" + +msgid "Ping reply received from server" +msgstr "បានទទួលការឆ្លើយតប Ping ពីម៉ាស៊ីនបម្រើ" + +msgid "Could not kill user" +msgstr "មិនអាចសម្លាប់អ្នកប្រើបានទេ" + +msgid "WATCH" +msgstr "ឃ្លាំងមើល" + +msgid "Cannot watch user" +msgstr "មិនអាចឃ្លាំងមើលអ្នកប្រើបានទេ" + +msgid "Resuming session" +msgstr "បន្តសម័យ" + +msgid "Authenticating connection" +msgstr "ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវការតភ្ជាប់" + +msgid "Verifying server public key" +msgstr "ផ្ទៀងផ្ទាត់សោសាធារណៈរបស់ម៉ាស៊ីនបម្រើ" + +msgid "Passphrase required" +msgstr "ត្រូវការឃ្លាសម្ងាត់" + +#, c-format +msgid "" +"Received %s's public key. Your local copy does not match this key. Would you " +"still like to accept this public key?" +msgstr "" +"បានទទួលសោសាធារណៈរបស់ %s ។ ច្បាបចម្លងមូលដ្ឋានរបស់អ្នកមិនផ្គូផ្គងសោនេះទេ ។ តើអ្នកនៅតែទទួលយកសោ" +"សាធារណៈនេះឬ ?" + +#, c-format +msgid "Received %s's public key. Would you like to accept this public key?" +msgstr "បានទទួលសោសាធារណៈរបស់ %s ។ តើអ្នកចង់ទទួលយកសោសាធារណៈនេះដែរឬទេ ?" + +#, c-format +msgid "" +"Fingerprint and babbleprint for the %s key are:\n" +"\n" +"%s\n" +"%s\n" +msgstr "" +"ស្នាមម្រាមដៃ និង babbleprint សម្រាប់សោ %s គឺ ៖\n" +"\n" +"%s\n" +"%s\n" + +msgid "Verify Public Key" +msgstr "ផ្ទៀងផ្ទាត��សោសាធារណៈ" + +msgid "_View..." +msgstr "មើល..." + +msgid "Unsupported public key type" +msgstr "ប្រភេទសោសាធារណៈមិនបានគាំទ្រ" + +msgid "Disconnected by server" +msgstr "បានផ្ដាច់ដោយម៉ាស៊ីនបម្រើ" + +msgid "Error during connecting to SILC Server" +msgstr "កំហុសកំឡុងពេលតភ្ជាប់ទៅកាន់ម៉ាស៊ីនបម្រើ SILC" + +msgid "Key Exchange failed" +msgstr "បានបរាជ័យក្នុងការផ្លាស់ប្ដូរសោ" + +msgid "" +"Resuming detached session failed. Press Reconnect to create new connection." +msgstr "បានបរាជ័យក្នុងការបន្តសម័យដែលបានផ្ដាច់ ។ ចុចតភ្ជាប់ឡើងវិញដើម្បីបង្កើតការតភ្ជាប់ថ្មី ។" + +msgid "Connection failed" +msgstr "បានបរាជ័យក្នុងការតភ្ជាប់" + +msgid "Performing key exchange" +msgstr "អនុវត្តការផ្លាស់ប្ដូរសោ" + +msgid "Unable to create connection" +msgstr "មិនអាចបង្កើតការតភ្ជាប់បានទេ" + +msgid "Could not load SILC key pair" +msgstr "មិនអាចផ្ទុកការផ្គូផ្គងសោ SILC បានទេ" + +#. Progress +msgid "Connecting to SILC Server" +msgstr "តភ្ជាប់ទៅកាន់ម៉ាស៊ីនបម្រើ SILC" + +msgid "Out of memory" +msgstr "អស់សតិOut of memory" + +msgid "Cannot initialize SILC protocol" +msgstr "មិនអាចចាប់ផ្ដើមពិធីការ SILC បានទេ" + +msgid "Error loading SILC key pair" +msgstr "កំហុសក្នុងការផ្ទុកការផ្គូផ្គងសោ SILC" + +#, c-format +msgid "Download %s: %s" +msgstr "ទាញ %s ៖ %s" + +msgid "Your Current Mood" +msgstr "អារម្មណ៍បច្ចុប្បន្នរបស់អ្នក" + +#, c-format +msgid "Normal" +msgstr "ធម្មតា" + +msgid "In love" +msgstr "ស្រឡាញ់" + +msgid "" +"\n" +"Your Preferred Contact Methods" +msgstr "" +"\n" +"វិធីសាស្ត្រទំនាក់ទំនងដែលពេញចិត្តរបស់អ្នក" + +msgid "SMS" +msgstr "SMS" + +msgid "MMS" +msgstr "MMS" + +msgid "Video conferencing" +msgstr "សន្និសីទវីដេអូ" + +msgid "Your Current Status" +msgstr "ស្ថានភាពបច្ចុប្បន្នរបស់អ្នក" + +msgid "Online Services" +msgstr "សេវាលើបណ្ដាញ" + +msgid "Let others see what services you are using" +msgstr "អនុញ្ញាតឲ្យអ្នកផ្សេងមើលសេវាអ្វីដែលអ្នកកំពុងប្រើ" + +msgid "Let others see what computer you are using" +msgstr "អនុញ្ញាតឲ្យអ្នកផ្សេងមើលកុំព្យូទ័រដែលអ្នកកំពុងប្រើ" + +msgid "Your VCard File" +msgstr "ឯកសារ VCard" + +msgid "Timezone (UTC)" +msgstr "តំបន់ពេលវេលា (UTC)" + +msgid "User Online Status Attributes" +msgstr "គុណលក្ខណៈស្ថានភាពលើបណ្ដាញរបស់អ្នកប្រើ" + +msgid "" +"You can let other users see your online status information and your personal " +"information. Please fill the information you would like other users to see " +"about yourself." +msgstr "" +"អ្នកអាចអនុញ្ញាតឲ្យអ្នកផ្សេងមើលព័ត៌មានស្ថានភាពលើបណ្ដាញ និងព័ត៌មានផ្ទាល់ខ្លួនរបស់អ្នក ។ សូមបំពេញ" +"ព័ត៌មានដែលអ្នកចង់ឲ្យអ្នកផ្សេងមើលព័ត៌មានអំពីខ្លួនអ្នកផ្ទាល់ ។" + +msgid "Message of the Day" +msgstr "សារថ្ងៃ" + +msgid "No Message of the Day available" +msgstr "គ្មានសារថ្ងៃនោះទេ" + +msgid "There is no Message of the Day associated with this connection" +msgstr "មិនមានសារថ្ងៃដែលបានភ្ជាប់ជាមួយការតភ្ជាប់នេះទៀតទេ" + +msgid "Create New SILC Key Pair" +msgstr "បង្កើតការផ្គូផ្គងសោ SILC ថ្មី" + +msgid "Passphrases do not match" +msgstr "ឃ្លាសម្ងាត់មិនផ្គូផ្គង" + +msgid "Key Pair Generation failed" +msgstr "បានបរាជ័យក្នុងការបង្កើតគូរសោ" + +msgid "Key length" +msgstr "ប្រវែងសោ" + +msgid "Public key file" +msgstr "ឯកសារសោសាធារណៈ" + +msgid "Private key file" +msgstr "ឯកសារសោឯកជន" + +msgid "Passphrase (retype)" +msgstr "ឃ្លាសម្ងាត់ (វាយម្ដងទៀត)" + +msgid "Generate Key Pair" +msgstr "បង្កើតគូសោ" + +msgid "Online Status" +msgstr "ស្ថានភាពលើបណ្ដាញ" + +msgid "View Message of the Day" +msgstr "មើលសារថ្ងៃ" + +msgid "Create SILC Key Pair..." +msgstr "បង្កើតគូសោ SILC..." + +#, c-format +msgid "User <I>%s</I> is not present in the network" +msgstr "អ្នកប្រើ <I>%s</I> មិនបង្ហាញនៅក្នុងបណ្ដាញទេ" + +msgid "Topic too long" +msgstr "ប្រធានបទវែងពេក" + +msgid "You must specify a nick" +msgstr "អ្នកត្រូវតែបញ្ជាក់សម្មតិនាម" + +#, c-format +msgid "channel %s not found" +msgstr "រកមិនឃើញឆានែល %s" + +#, c-format +msgid "channel modes for %s: %s" +msgstr "របៀបឆានែលពី %s ៖ %s" + +#, c-format +msgid "no channel modes are set on %s" +msgstr "គ្មានរបៀបឆានែលត្រូវបានកំណត់នៅលើ %s" + +#, c-format +msgid "Failed to set cmodes for %s" +msgstr "បានបរាជ័យក្នុងការកំណត់ cmodes សម្រាប់ %s" + +#, c-format +msgid "Unknown command: %s, (may be a client bug)" +msgstr "មិនស្គាល់ពាក្យបញ្ជា ៖ %s (អាចជាកំហុសរបស់ម៉ាស៊ីនភ្ញៀវ)" + +msgid "part [channel]: Leave the chat" +msgstr "ផ្នែក [ឆានែល] ៖ ចេញពីការជជែក" + +msgid "leave [channel]: Leave the chat" +msgstr "ចេញ [ឆានែល] ៖ ចេញពីការជជែក" + +msgid "topic [<new topic>]: View or change the topic" +msgstr "ប្រធានបទ [<ប្រធានបទថ្មី>] ៖ មើល ឬផ្លាស់ប្ដូរប្រធានបទ" + +msgid "join <channel> [<password>]: Join a chat on this network" +msgstr "ចូលរួម <ឆានែល> [<ពាក្យសម្ងាត់>] ៖ ចូលរួមក្នុងការជជែកនៅលើបណ្ដាញនេះ" + +msgid "list: List channels on this network" +msgstr "បញ្ជី ៖ រាយឆានែលនៅលើបណ្ដាញនេះ" + +msgid "whois <nick>: View nick's information" +msgstr "whois <nick> ៖ មើលព័ត៌មានសម្មតិនាម" + +msgid "msg <nick> <message>: Send a private message to a user" +msgstr "msg <nick> <message> ៖ ផ្ញើសារឯកជនឲ្យអ្នកប្រើ" + +msgid "query <nick> [<message>]: Send a private message to a user" +msgstr "សួរ <nick> [<message>] ៖ ផ្ញើសារឯកជនឲ្យអ្នកប្រើ" + +msgid "motd: View the server's Message Of The Day" +msgstr "motd ៖ មើលសាររបស់ម៉ាស៊ីនបម្រើនៃថ្ងៃ" + +msgid "detach: Detach this session" +msgstr "ផ្ដាច់ ៖ ផ្ដាច់សម័យនេះ" + +msgid "quit [message]: Disconnect from the server, with an optional message" +msgstr "ចេញ [សារ] ៖ ផ្ដាច់ពីម៉ាស៊ីនបម្រើ ដោយមានសារជាជម្រើស" + +msgid "call <command>: Call any silc client command" +msgstr "call <command> ៖ ហៅពាក្យបញ្ជាម៉ាស៊ីនភ្ញៀវ silc ណាមួយ" + +msgid "kill <nick> [-pubkey|<reason>]: Kill nick" +msgstr "សម្លាប់ <nick> [-pubkey|<reason>] ៖ សម្លាប់សម្មតិនាម" + +msgid "nick <newnick>: Change your nickname" +msgstr "nick <newnick> ៖ ផ្លាស់ប្ដូរសម្មតិនាមរបស់អ្នក" + +msgid "whowas <nick>: View nick's information" +msgstr "whowas <nick> ៖ មើលព័ត៌មានសម្មតិនាម" + +msgid "" +"cmode <channel> [+|-<modes>] [arguments]: Change or display " +"channel modes" +msgstr "" +"cmode <channel> [+|-<modes>] [arguments] ៖ ផ្លាស់ប្ដូរ ឬបង្ហាញរបៀប" +"ឆានែល" + +msgid "" +"cumode <channel> +|-<modes> <nick>: Change nick's modes " +"on channel" +msgstr "" +"cumode <channel> +|-<modes> <nick> ៖ ផ្លាស់ប្ដូររបៀបសម្មតិនាមនៅ" +"លើឆានែល" + +msgid "umode <usermodes>: Set your modes in the network" +msgstr "umode <usermodes> ៖ កំណត់របៀបរបស់អ្នកនៅក្នុងបណ្ដាញ" + +msgid "oper <nick> [-pubkey]: Get server operator privileges" +msgstr "oper <nick> [-pubkey] ៖ យកសិទ្ធិការីរបស់ម៉ាស៊ីនបម្រើ" + +msgid "" +"invite <channel> [-|+]<nick>: invite nick or add/remove from " +"channel invite list" +msgstr "" +"អញ្ជើញ <channel> [-|+]<nick> ៖ អញ្ជើញសម្មតិនាម ឬបន្ថែម/យកចេញពីបញ្ជីអញ្ជើញ" +"ឆានែល" + +msgid "kick <channel> <nick> [comment]: Kick client from channel" +msgstr "ទាត់ <channel> <nick> [comment] ៖ ចុចម៉ាស៊ីនភ្ញៀវពីឆានែល" + +msgid "info [server]: View server administrative details" +msgstr "ព័ត៌មាន [ម៉ាស៊ីនបម្រើ] ៖ មើលសេចក្ដីលម្អិតគ្រប់គ្រងរបស់ម៉ាស៊ីនបម្រើ" + +msgid "ban [<channel> +|-<nick>]: Ban client from channel" +msgstr "ហាមឃាត់ [<channel> +|-<nick>] ៖ ហាមឃាត់ម៉ាស៊ីនភ្ញៀវពីឆានែល" + +msgid "getkey <nick|server>: Retrieve client's or server's public key" +msgstr "getkey <nick|server> ៖ ទៅយកសោសាធារណៈរបស់ម៉ាស៊ីនបម្រើ ឬម៉ាស៊ីនភ្ញៀវ" + +msgid "stats: View server and network statistics" +msgstr "ស្ថានភាព ៖ មើលស្ថិតិម៉ាស៊ីនបម្រើ និងបណ្ដាញ" + +msgid "ping: Send PING to the connected server" +msgstr "ping ៖ ផ្ញើ PING ទៅកាន់ម៉ាស៊ីនបម្រើដែលបានតភ្ជាប់" + +msgid "users <channel>: List users in channel" +msgstr "អ្នកប្រើ <ឆានែល> ៖ រាយអ្នកប្រើនៅក្នុងឆានែល" + +msgid "" +"names [-count|-ops|-halfops|-voices|-normal] <channel(s)>: List " +"specific users in channel(s)" +msgstr "" +"ឈ្មោះ [-count|-ops|-halfops|-voices|-normal] <channel(s)> ៖ រាយអ្នកប្រើ" +"ជាក់លាក់នៅក្នុងឆានែល" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +msgid "SILC Protocol Plugin" +msgstr "កម្មវិធីជំនួយពិធីការ SILC" + +#. * description +msgid "Secure Internet Live Conferencing (SILC) Protocol" +msgstr "ពិធីការ Secure Internet Live Conferencing (SILC)" + +msgid "Network" +msgstr "បណ្ដាញ" + +msgid "Public Key file" +msgstr "ឯកសារសោសាធារណៈ" + +msgid "Private Key file" +msgstr "ឯកសារសោឯកជន" + +msgid "Cipher" +msgstr "សរសេរសម្ងាត់" + +msgid "HMAC" +msgstr "HMAC" + +msgid "Use Perfect Forward Secrecy" +msgstr "ប្រើភាពសុវត្ថិភាពបញ្ជូនបន្តល្អឥតខ្ចោះ" + +msgid "Public key authentication" +msgstr "ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវសោសាធារណៈ" + +msgid "Block IMs without Key Exchange" +msgstr "ទប់ស្កាត់ IMs ដោយគ្មានការផ្លាស់ប្ដូរសោ" + +msgid "Block messages to whiteboard" +msgstr "ទប់ស្កាត់សារទៅក្ដារខៀន" + +msgid "Automatically open whiteboard" +msgstr "បើកក្ដារខៀនដោយស្វ័យប្រវត្តិ" + +msgid "Digitally sign and verify all messages" +msgstr "ចុះហត្ថលេខាឌីជីថល និងផ្ទៀងផ្ទាត់សារទាំងអស់" + +msgid "Creating SILC key pair..." +msgstr "កំពុងបង្កើតគូសោ SILC..." + +msgid "Cannot create SILC key pair\n" +msgstr "មិនអាចបង្កើតគូសោ SILC\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) +#, c-format +msgid "Real Name: \t%s\n" +msgstr "ឈ្មោះពិត ៖ \t%s\n" + +#, c-format +msgid "User Name: \t%s\n" +msgstr "ឈ្មោះអ្នកប្រើ ៖ \t%s\n" + +#, c-format +msgid "Email: \t\t%s\n" +msgstr "អ៊ីមែល ៖ \t\t%s\n" + +#, c-format +msgid "Host Name: \t%s\n" +msgstr "ឈ្មោះម៉ាស៊ីន ៖ \t%s\n" + +#, c-format +msgid "Organization: \t%s\n" +msgstr "អង្គការ ៖ \t%s\n" + +#, c-format +msgid "Country: \t%s\n" +msgstr "ប្រទេស ៖ \t%s\n" + +#, c-format +msgid "Algorithm: \t%s\n" +msgstr "ក្បួនដោះស្រាយ ៖ \t%s\n" + +#, c-format +msgid "Key Length: \t%d bits\n" +msgstr "ប្រវែងសោ ៖ \t%d ប៊ីត\n" + +#, c-format +msgid "Version: \t%s\n" +msgstr "កំណែ ៖ \t%s\n" + +#, c-format +msgid "" +"Public Key Fingerprint:\n" +"%s\n" +"\n" +msgstr "" +"ស្នាមម្រាមដៃសោសាធារណៈ ៖\n" +"%s\n" +"\n" + +#, c-format +msgid "" +"Public Key Babbleprint:\n" +"%s" +msgstr "" +"Babbleprint សោសាធារណៈ ៖\n" +"%s" + +msgid "Public Key Information" +msgstr "ព័ត៌មានសោសាធារណៈ" + +msgid "Paging" +msgstr "ភេយីង" + +msgid "Video Conferencing" +msgstr "សន្និសីទវីដេអូ" + +msgid "Computer" +msgstr "កុំព្យូទ័រ" + +msgid "PDA" +msgstr "PDA" + +msgid "Terminal" +msgstr "ស្ថានីយ" + +#, c-format +msgid "%s sent message to whiteboard. Would you like to open the whiteboard?" +msgstr "%s បានផ្ញើសារទៅក្ដារខៀន ។ តើអ្នកចង់បើកក្ដារខៀនឬទេ ?" + +#, c-format +msgid "" +"%s sent message to whiteboard on %s channel. Would you like to open the " +"whiteboard?" +msgstr "%s បានផ្ញើសារទៅក្ដារខៀននៅលើឆានែល %s ។ តើអ្នកចង់បើកក្ដារខៀនដែរឬទេ ?" + +msgid "Whiteboard" +msgstr "ក្ដារខៀន" + +msgid "No server statistics available" +msgstr "មិនមានស្ថិតិម៉ាស៊ីនបម្រើ" + +#, c-format +msgid "Failure: Version mismatch, upgrade your client" +msgstr "បរាជ័យ ៖ កំណែមិនផ្គូផ្គង ធ្វើឲ្យម៉ាស៊ីនភ្ញៀវរបស់អ្នកប្រសើរឡើង" + +#, c-format +msgid "Failure: Remote does not trust/support your public key" +msgstr "បរាជ័យ ៖ ការតភ្ជាប់ពីចម្ងាយមិនទុកចិត្ត/គាំទ្រសោសាធារណៈរបស់អ្នកទេ" + +#, c-format +msgid "Failure: Remote does not support proposed KE group" +msgstr "បរាជ័យ ៖ ការតភ្ជាប់ពីចម្ងាយមិនគាំទ្រក្រុម KE ដែលបានស្នើទេ" + +#, c-format +msgid "Failure: Remote does not support proposed cipher" +msgstr "បរាជ័យ ៖ ការតភ្ជាប់ពីចម្ងាយមិនគាំទ្រការសរសេរសម្ងាត់ដែលបានស្នើទេ" + +#, c-format +msgid "Failure: Remote does not support proposed PKCS" +msgstr "បរាជ័យ ៖ ការតភ្ជាប់ពីចម្ងាយមិនគាំទ្រ PKCS ដែលបានស្នើទេ" + +#, c-format +msgid "Failure: Remote does not support proposed hash function" +msgstr "បរាជ័យ ៖ ការតភ្ជាប់ពីចម្ងាយមិនគាំទ្រមុខងារ hash ដែលបានស្នើទេ" + +#, c-format +msgid "Failure: Remote does not support proposed HMAC" +msgstr "បរាជ័យ ៖ ការតភ្ជាប់ពីចម្ងាយមិនគាំទ្រ HMAC ដែលបានស្នើទេ" + +#, c-format +msgid "Failure: Incorrect signature" +msgstr "បរាជ័យ ៖ ហត្ថលេខាមិនត្រឹមត្រូវ" + +#, c-format +msgid "Failure: Invalid cookie" +msgstr "បរាជ័យ ៖ ខូគីមិនត្រឹមត្រូវ" + +#, c-format +msgid "Failure: Authentication failed" +msgstr "បរាជ័យ ៖ បានបរាជ័យក្នុងការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ" + +msgid "Cannot initialize SILC Client connection" +msgstr "មិនអាចចាប់ផ្ដើមការតភ្ជាប់ម៉ាស៊ីនភ្ញៀវ SILC បានទេ" + +msgid "John Noname" +msgstr "John Noname" + +#, c-format +msgid "Could not load SILC key pair: %s" +msgstr "មិនអាចផ្ទុកគូសោ SILC ៖ %s" + +msgid "Could not write" +msgstr "មិនអាចសរសេរបានទេ" + +msgid "Could not connect" +msgstr "មិនអាចតភ្ជាប់" + +msgid "Unknown server response." +msgstr "មិនស្គាល់ការឆ្លើយតបរបស់ម៉ាស៊ីនបម្រើ" + +msgid "Could not create listen socket" +msgstr "មិនអាចបង្កើតរន្ធស្ដាប់បានទេ" + +msgid "Could not resolve hostname" +msgstr "មិនអាចដោះស្រាយឈ្មោះម៉ាស៊ីនបានទេ" + +msgid "SIP usernames may not contain whitespaces or @ symbols" +msgstr "ឈ្មោះអ្នកប្រើ SIP អាចមិនមានចន្លោះមិនឃើញ ឬនិមិត្តសញ្ញា @" + +msgid "SIP connect server not specified" +msgstr "SIP តភ្ជាប់ម៉ាស៊ីនបម្រើមិនបានបញ្ជាក់ទេ" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +msgid "SIP/SIMPLE Protocol Plugin" +msgstr "កម្មវិធីជំនួយពិធីការ SIP/SIMPLE" + +#. * summary +msgid "The SIP/SIMPLE Protocol Plugin" +msgstr "កម្មវិធីជំនួយពិធីការ SIP/SIMPLE" + +msgid "Publish status (note: everyone may watch you)" +msgstr "បោះពុម្ពស្ថានភាព (ចំណាំ ៖ អ្នករាល់គ្នាអាចមើលអ្នកបាន)" + +msgid "Use UDP" +msgstr "ប្រើ UDP" + +msgid "Use proxy" +msgstr "ប្រើប្រូកស៊ី" + +msgid "Proxy" +msgstr "ប្រូកស៊ី" + +msgid "Auth User" +msgstr "ផ្ទៀងផ្ទាត់អ្នកប្រើ" + +msgid "Auth Domain" +msgstr "ផ្ទៀងផ្ទាត់ដែន" + +#, c-format +msgid "Looking up %s" +msgstr "រកមើល %s" + +#, c-format +msgid "Connect to %s failed" +msgstr "បានបរាជ័យក្នុងការតភ្ជាប់ %s" + +#, c-format +msgid "Signon: %s" +msgstr "ចូល ៖ %s" + +#, c-format +msgid "Unable to write file %s." +msgstr "មិនអាចសរសេរឯកសារ %s បាននោះទេ ។" + +#, c-format +msgid "Unable to read file %s." +msgstr "មិនអាចអានឯកសារ %s បានទេ ។" + +#, c-format +msgid "Message too long, last %s bytes truncated." +msgstr "សារវែងពេក បានកាត់ឲ្យខ្លីចុងក្រោយត្រឹម %s បៃ ។" + +#, c-format +msgid "%s not currently logged in." +msgstr "%s បច្ចុប្បន្នមិនបានចូលទេ ។" + +#, c-format +msgid "Warning of %s not allowed." +msgstr "មិនបានអនុញ្ញាតការព្រមានរបស់ %s ទេ ។" + +#, c-format +msgid "A message has been dropped, you are exceeding the server speed limit." +msgstr "សារត្រូវបានទម្លាក់ អ្នកបានលើសដែនកំណត់ល្បឿនរបស់ម៉ាស៊ីនបម្រើ ។" + +#, c-format +msgid "Chat in %s is not available." +msgstr "មិនមានការជជែកនៅក្នុង %s ទេ ។" + +#, c-format +msgid "You are sending messages too fast to %s." +msgstr "អ្នកកំពុងផ្ញើសារយ៉ាងលឿនទៅ %s ។" + +#, c-format +msgid "You missed an IM from %s because it was too big." +msgstr "អ្នកបាត់ IM ពី %s ពីព្រោះវាធំពេក ។" + +#, c-format +msgid "You missed an IM from %s because it was sent too fast." +msgstr "អ្នកបានបាត់ IM ពី %s ពីព្រោះវាលឿនពេក ។" + +#, c-format +msgid "Failure." +msgstr "បរាជ័យ ។" + +#, c-format +msgid "Too many matches." +msgstr "មានការផ្គូផ្គងច្រើនពេក ។" + +#, c-format +msgid "Need more qualifiers." +msgstr "ត្រូវការឧបករណ៍បញ្ជាក់បន្ថែមទៀត ។" + +#, c-format +msgid "Dir service temporarily unavailable." +msgstr "សេវា Dir មិនអាចប្រើបានជាបណ្ដោះអាសន្ន ។" + +#, c-format +msgid "Email lookup restricted." +msgstr "បានដាក់កម្ងិរការរកមើលអ៊ីមែល ។" + +#, c-format +msgid "Keyword ignored." +msgstr "បានមិនអើពើពាក្យគន្លឹះ ។" + +#, c-format +msgid "No keywords." +msgstr "គ្មានពាក្យគន្លឹះ ។" + +#, c-format +msgid "User has no directory information." +msgstr "អ្នកប្រើមិនមានព័ត៌មានថតទៀតទេ ។" + +#, c-format +msgid "Country not supported." +msgstr "មិនបានគាំទ្រប្រទេសទេ ។" + +#, c-format +msgid "Failure unknown: %s." +msgstr "មិនស្គាល់ភាពបរាជ័យ ៖ %s ។" + +#, c-format +msgid "Incorrect username or password." +msgstr "ឈ្មោះអ្នកប្រើ ឬពាក្យសម្ងាត់មិនត្រឹមត្រូវ ។" + +#, c-format +msgid "The service is temporarily unavailable." +msgstr "សេវាមិនអាចប្រើបានជាបណ្ដោះអាសន្ន ។" + +#, c-format +msgid "Your warning level is currently too high to log in." +msgstr "កម្រិតព្រមានរបស់អ្នកបច្ចុប្បន្នខ្ពស់ពេកត្រូវចូល ។" + +#, c-format +msgid "" +"You have been connecting and disconnecting too frequently. Wait ten minutes " +"and try again. If you continue to try, you will need to wait even longer." +msgstr "" +"អ្នកបានតភ្ជាប់ និងផ្ដាច់ញឹកញាប់ពេក ។ រង់ចាំរយៈពេល ១០ នាទី ហើយព្យាយាមម្ដងទៀត ។ ប្រសិនបើអ្នកបន្ត" +"ព្យាយាម អ្នកនឹងត្រូវរង់ចាំយូរជាងនេះ ។" + +#, c-format +msgid "An unknown signon error has occurred: %s." +msgstr "មិនស្គាល់កំហុសក្នុងការចូលបានកើតឡើង ៖ %s ។" + +#, c-format +msgid "An unknown error, %d, has occurred. Info: %s" +msgstr "មិនស្គាល់កំហុស %d ដែលបានកើតឡើង ។ ព័ត៌មាន ៖ %s" + +msgid "Invalid Groupname" +msgstr "ឈ្មោះក្រុមមិនត្រឹមត្រូវ" + +msgid "Connection Closed" +msgstr "បានបិទការតភ្ជាប់" + +msgid "Waiting for reply..." +msgstr "កំពុងរង់ចាំការឆ្លើយតប..." + +msgid "TOC has come back from its pause. You may now send messages again." +msgstr "TOC បានត្រឡប់ពីការផ្អាករបស់វា ។ ឥឡូវអ្នកផ្ញើសារម្ដងទៀត ។" + +msgid "Password Change Successful" +msgstr "ផ្លាស់ប្ដូរពាក្យសម្ងាត់ដោយជោគជ័យ" + +msgid "_Group:" +msgstr " ក្រុម ៖" + +msgid "Get Dir Info" +msgstr "យកព័ត៌មាន Dir" + +msgid "Set Dir Info" +msgstr "កំណត់ព័ត៌មាន Dir" + +#, c-format +msgid "Could not open %s for writing!" +msgstr "មិនអាចបើក %s ដើម្បីសរសេរបានទេ !" + +msgid "File transfer failed; other side probably canceled." +msgstr "បានបរាជ័យក្នុងការផ្ទេរឯកសារ ផ្នែកផ្សេងប្រហែលជាបានបោះបង់ហើយ " + +msgid "Could not connect for transfer." +msgstr "មិនអាចតភ្ជាប់ដើម្បីផ្ទេរបានទេ ។" + +msgid "Could not write file header. The file will not be transferred." +msgstr "មិនអាចសរសេរបឋមកថាឯកសារបានទេ ។ ឯកសារនឹងមិនត្រូវបានផ្ទេរទេ ។" + +msgid "Save As..." +msgstr "រក្សាទុកជា..." + +#, 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 ស្នើ %s ឲ្យទទួលឯកសារ %d ៖ %s (%.2f %s)%s%s" + +#, c-format +msgid "%s requests you to send them a file" +msgstr "%s ស្នើអ្នកឲ្យផ្ញើឯកសារឲ្យពួកវា" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "TOC Protocol Plugin" +msgstr "កម្មវិធីពិធីការ TOC" + +#, c-format +msgid "%s has sent you a webcam invite, which is not yet supported." +msgstr "%s បានផ្ញើការអញ្ជើញអ្នកឲ្យបើកម៉ាស៊ីនថតតាមបណ្ដាញ ដែលមិនត្រូវបានគាំទ្រនៅឡើយទេ ។" + +msgid "Your Yahoo! message did not get sent." +msgstr "យ៉ាហ៊ូរបស់អ្នក ! សារមិនត្រូវបានផ្ញើទេ ។" + +#, c-format +msgid "Yahoo! system message for %s:" +msgstr "យ៉ាហ៊ូ ! សារប្រព័ន្ធសម្រាប់ %s ៖" + +#, c-format +msgid "" +"%s has (retroactively) denied your request to add them to your list for the " +"following reason: %s." +msgstr "" +"%s បាន (ប្រតិសកម្ម) បដិសេធសំណើរបស់អ្នក ដើម្បីបន្ថែមពួកគេទៅក្នុងបញ្ជីរបស់អ្នកដោយមានហេតុផល" +"ដូចខាងក្រោម ៖ %s ។" + +#, c-format +msgid "%s has (retroactively) denied your request to add them to your list." +msgstr "%s បាន (ប្រតិសកម្ម) បដិសេធសំណើរបស់អ្នក ដើម្បីបន្ថែមពួកគេទៅក្នុងបញ្ជីរបស់អ្នក ។" + +msgid "Add buddy rejected" +msgstr "បន្ថែមមិត្តភក្ដិដែលបានច្រានចេញ" + +#, c-format +msgid "" +"The Yahoo server has requested the use of an unrecognized authentication " +"method. You will probably not be able to successfully sign on to Yahoo. " +"Check %s for updates." +msgstr "" +"ម៉ាស៊ីនបម្រើយ៉ាហ៊ូបានស្នើឲ្យប្រើវិធីសាស្ត្រផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវដែលមិនស្គាល់ ។ អ្នកនឹងប្រហែលជាមិនអាច" +"ចូលក្នុងយ៉ាហ៊ូដោយជោគជ័យ ។ ពិនិត្យមើល %s សម្រាប់ភាពទាន់សម័យ ។" + +msgid "Failed Yahoo! Authentication" +msgstr "បានបរាជ័យក្នុងការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវរបស់យ៉ាហ៊ូ !" + +#, c-format +msgid "" +"You have tried to ignore %s, but the user is on your buddy list. Clicking " +"\"Yes\" will remove and ignore the buddy." +msgstr "" +"អ្នកបានព្យាយាមមិនអើពើ %s ប៉ុន្តែអ្នកប្រើនៅក្នុងបញ្ជីមិត្តភក្ដិរបស់អ្នក ។ ចុច \"បាទ/ចាស\" នឹងយក" +"ចេញ ហើយមិនអើពើមិត្តភក្ដិ ។" + +msgid "Ignore buddy?" +msgstr "មិនអើពើមិត្តភក្ដិ !" + +msgid "Your account is locked, please log in to the Yahoo! website." +msgstr "គណនីរបស់អ្នកត្រូវបានចាក់សោ សូំចូលក្នុងតំបន់បណ្ដាញរបស់យ៉ាហ៊ូ !" + +#, c-format +msgid "Unknown error number %d. Logging into the Yahoo! website may fix this." +msgstr "មិនស្គាល់លេខកំហុស %d ។ ចូលក្នុងតំបន់យ៉ាហ៊ូ ! អាចជួសជុលវាបាន ។" + +#, c-format +msgid "Could not add buddy %s to group %s to the server list on account %s." +msgstr "មិនអាចបន្ថែមមិត្តភក្ដិ %s ដើម្បីដាក់ %s ជាក្រុមទៅកាន់បញ្ជីម៉ាស៊ីនបម្រើនៅក្នុងគណនី %s ។" + +msgid "Could not add buddy to server list" +msgstr "មិនអាចបន្ថែមមិត្តភក្ដិទៅកាន់បញ្ជីម៉ាស៊ីនបម្រើទេ" + +#, c-format +msgid "[ Audible %s/%s/%s.swf ] %s" +msgstr "[ Audible %s/%s/%s.swf ] %s" + +msgid "Received unexpected HTTP response from server." +msgstr "បានទទួលការឆ្លើយតប HTTP ពីម៉ាស៊ីនបម្រើ ។" + +msgid "Connection problem" +msgstr "បញ្ហាក្នុងការតភ្ជាប់" + +#, c-format +msgid "" +"Lost connection with %s:\n" +"%s" +msgstr "" +"បាត់បង់ការតភ្ជាប់ជាមួយ %s ៖\n" +"%s" + +#, c-format +msgid "" +"Could not establish a connection with %s:\n" +"%s" +msgstr "" +"មិនអាចបង្កើតការតភ្ជាប់ជាមួយ %s បានទេ ៖\n" +"%s" + +msgid "Not at Home" +msgstr "មិននៅផ្ទះទេ" + +msgid "Not at Desk" +msgstr "មិននៅតុទេ" + +msgid "Not in Office" +msgstr "មិននៅក្នុងការិយាល័យទេ" + +msgid "On Vacation" +msgstr "បវេស្សនកាល" + +msgid "Stepped Out" +msgstr "ចេញ" + +msgid "Not on server list" +msgstr "មិននៅក្នុងបញ្ជីម៉ាស៊ីនបម្រើទេ" + +msgid "Appear Online" +msgstr "បង្ហាញលើបណ្ដាញ" + +msgid "Appear Permanently Offline" +msgstr "បង្ហាញនៅក្រៅបណ្ដាញជាអចិន្ត្រៃយ៍" + +msgid "Presence" +msgstr "វត្តមាន" + +msgid "Appear Offline" +msgstr "បង្ហាញនៅក្រៅបណ្ដាញ" + +msgid "Don't Appear Permanently Offline" +msgstr "កុំបង្ហាញនៅក្រៅបណ្ដាញអចិន្ត្រៃយ៍" + +msgid "Join in Chat" +msgstr "ចូលរួមក្នុងការជជែក" + +msgid "Initiate Conference" +msgstr "ចាប់ផ្ដើមសន្និសីទ" + +msgid "Presence Settings" +msgstr "ការកំណត់វត្តមាន" + +msgid "Start Doodling" +msgstr "ចាប់ផ្ដើម Doodling" + +msgid "Activate which ID?" +msgstr "ធ្វើឲ្យសកម្មនូវលេខសម្គាល់ណាមួយ ?" + +msgid "Join whom in chat?" +msgstr "អ្នកណាចូលរួមក្នុងការជជែក ?" + +msgid "Activate ID..." +msgstr "ធ្វើឲ្យលេខសម្គាល់សកម្ម..." + +msgid "Join User in Chat..." +msgstr "ចូលរួមអ្នកប្រើនៅក្នុងការជជែក..." + +msgid "Open Inbox" +msgstr "បើកប្រអប់" + +msgid "join <room>: Join a chat room on the Yahoo network" +msgstr "ចូលរួម <room> ៖ ចូលរួមបន្ទប់ជជែកនៅក្នុងបណ្ដាញយ៉ាហ៊ូ" + +msgid "list: List rooms on the Yahoo network" +msgstr "បញ្ជី ៖ រាយបន្ទប់នៅក្នុងបណ្ដាញរបស់យ៉ាហ៊ូ" + +msgid "doodle: Request user to start a Doodle session" +msgstr "doodle ៖ ស្នើអ្នកប្រើឲ្យចាប់ផ្ដើមសម័យរបស់ Doodle" + +msgid "Yahoo ID..." +msgstr "លេខសម្គាល់របស់យ៉ាហ៊ូ..." + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "Yahoo Protocol Plugin" +msgstr "កម្មវិធីជំនួយពិធីការរបស់យ៉ាហ៊ូ" + +msgid "Yahoo Japan" +msgstr "យ៉ាហ៊ូ ជប៉ុន" + +msgid "Pager server" +msgstr "ម៉ាស៊ីនបម្រើភេយ័រ" + +msgid "Japan Pager server" +msgstr "ម៉ាស៊ីនបម្រើភេយ័រជប៉ុន" + +msgid "Pager port" +msgstr "ច្រកភេយ័រ" + +msgid "File transfer server" +msgstr "ម៉ាស៊ីនបម្រើផ្ទេរឯកសារ" + +msgid "Japan file transfer server" +msgstr "ម៉ាស៊ីនបម្រើផ្ទេរឯកសារជប៉ុន" + +msgid "File transfer port" +msgstr "ច្រកផ្ទេរឯកសារ" + +msgid "Chat room locale" +msgstr "បន្ទប់ជជែកមូលដ្ឋាន" + +msgid "Ignore conference and chatroom invitations" +msgstr "មិនអើពើសន្និសីទ និងការអញ្ជើញរបស់បន្ទប់ជជែក" + +msgid "Chat room list URL" +msgstr "URL បញ្ជីបន្ទប់ជជែក" + +msgid "Yahoo Chat server" +msgstr "ម៉ាស៊ីនបម្រើជជែកយ៉ាហ៊ូ" + +msgid "Yahoo Chat port" +msgstr "ច្រកជជែកយ៉ាហ៊ូ" + +#. Write a local message to this conversation showing that a request for a +#. * Doodle session has been made +#. +msgid "Sent Doodle request." +msgstr "បានផ្ញើសំណើ Doodle ។" + +msgid "Unable to establish file descriptor." +msgstr "មិនអាចបង្កើតឧបករណ៍ពិពណ៌នាឯកសារបានទេ ។" + +#, c-format +msgid "%s is trying to send you a group of %d files.\n" +msgstr "%s កំពុងព្យាយាមផ្ញើឲ្យអ្នកនូវក្រុមឯកសារ %d ។\n" + +msgid "Yahoo! Japan Profile" +msgstr "ទម្រង់យ៉ាហ៊ូ ជប៉ុន" + +msgid "Yahoo! Profile" +msgstr "ទម្រង់ យ៉ាហ៊ូ !" + +msgid "" +"Sorry, profiles marked as containing adult content are not supported at this " +"time." +msgstr "សូមអភ័យទោស ទម្រង់បានសម្គាល់ថាមានមាតិកាមនុស្សពេញវ័យមិនត្រូវបានគាំទ្រនៅពេលនេះទេ ។" + +msgid "" +"If you wish to view this profile, you will need to visit this link in your " +"web browser:" +msgstr "ប្រសិនបើអ្នកចង់មើលជម្រង់នេះ អ្នកត្រូវតែទស្សនាតំណនេះនៅក្នុងកម្មវិធីរុករកបណ្តាញរបស់អ្នក ៖" + +msgid "Yahoo! ID" +msgstr "លេខសម្គាល់របស់យ៉ាហ៊ូ !" + +msgid "Hobbies" +msgstr "ចំណូលចិត្ត" + +msgid "Latest News" +msgstr "ព័ត៌មានចុងក្រោយ" + +msgid "Home Page" +msgstr "គេហទំព័រ" + +msgid "Cool Link 1" +msgstr "តំណ ១" + +msgid "Cool Link 2" +msgstr "តំណ ២" + +msgid "Cool Link 3" +msgstr "តំណ ៣" + +msgid "Last Update" +msgstr "ភាពទាន់សម័យចុងក្រោយ" + +msgid "" +"This profile is in a language or format that is not supported at this time." +msgstr "ទម្រង់នេះស្ថិតក្នុងភាសា ឬទ្រង់ទ្រាយដែលមិនបានគាំទ្រនៅពេលនេះទេ ។" + +msgid "" +"Could not retrieve the user's profile. This most likely is a temporary " +"server-side problem. Please try again later." +msgstr "" +"មិនអាចទៅយកទម្រង់របស់អ្នកប្រើបានទេ ។ វាទំនងជាបញ្ហាខាងម៉ាស៊ីនបម្រើជាបណ្ដោះអាសន្ន ។ សូមព្យាយាម" +"ម្ដងទៀតពេលក្រោយ ។" + +msgid "" +"Could not retrieve the user's profile. This most likely means that the user " +"does not exist; however, Yahoo! sometimes does fail to find a user's " +"profile. If you know that the user exists, please try again later." +msgstr "" +"មិនអាចទៅ យកទម្រង់របស់អ្នកប្រើបានទេ ។ វាទំនងជាមានន័យថា មិនទាន់មានអ្នកប្រើទេ ទោះជាយ៉ាងណាក៏" +"ដោយ យ៉ាហ៊ូ ពេលខ្លះបានអនុវត្តមិនជោគជ័យដើម្បីរកទម្រង់របស់អ្នកប្រើ ។ ប្រសិនបើអ្នកដឹងថាមានអ្នកប្រើហើយ " +"សូមព្យាយាមម្ដងទៀតនៅពេលក្រោយ ។" + +msgid "The user's profile is empty." +msgstr "ទម្រង់របស់អ្នកប្រើទទេរ ។" + +#, c-format +msgid "%s declined your conference invitation to room \"%s\" because \"%s\"." +msgstr "%s បានបដិសេធការអញ្ជើញសន្និសីទរបស់អ្នកក្នុងបន្ទប់ \"%s\" ដោយសារតែ \"%s\" ។" + +msgid "Invitation Rejected" +msgstr "បានបដិសេធការអញ្ជើញ" + +msgid "Failed to join chat" +msgstr "បានបរាជ័យក្នុងការចូលរួមក្នុងការជជែក" + +#. -6 +msgid "Unknown room" +msgstr "មិនស្គាល់បន្ទប់" + +#. -15 +msgid "Maybe the room is full" +msgstr "ប្រហែលជាបន្ទប់ពេញហើយ" + +#. -35 +msgid "Not available" +msgstr "មិនមាន" + +msgid "" +"Unknown error. You may need to logout and wait five minutes before being " +"able to rejoin a chatroom" +msgstr "មិនស្គាល់កំហុស ។ អ្នកត្រូវតែចេញ ហើយរង់ចាំប្រាំនាទី មុននឹងអាចចូលរួមក្នុងបន្ទប់ជជែកម្ដងទៀត" + +#, c-format +msgid "You are now chatting in %s." +msgstr "ឥឡូវអ្នកកំពុងជជែកនៅក្នុង %s ។" + +msgid "Failed to join buddy in chat" +msgstr "បានបរាជ័យក្នុងការបញ្ចូលមិត្តភក្ដិក្នុងការជជែក" + +msgid "Maybe they're not in a chat?" +msgstr "ប្រហែលជាមិនមាននៅក្នុងការជជែកទេ ?" + +msgid "Fetching the room list failed." +msgstr "បានបរាជ័យក្នុងការទៅយកបញ្ជីបន្ទប់ ។" + +msgid "Voices" +msgstr "សំឡេង" + +msgid "Webcams" +msgstr "ម៉ាស៊ីនថតតាមបណ្ដាញ" + +msgid "Unable to fetch room list." +msgstr "មិនអាចទៅយកបញ្ជីបន្ទប់បានទេ ។" + +msgid "User Rooms" +msgstr "បន្ទប់អ្នកប្រើ" + +msgid "Connection problem with the YCHT server." +msgstr "បញ្ហាក្នុងការតភ្ជាប់ជាមួយម៉ាស៊ីនបម្រើ YCHT ។" + +#, c-format +msgid "" +"Lost connection with server\n" +"%s" +msgstr "" +"បាត់បង់ការតភ្ជាប់ជាមួយម៉ាស៊ីនបម្រើ\n" +"%s" + +msgid "" +"(There was an error converting this message.\t Check the 'Encoding' option " +"in the Account Editor)" +msgstr "(មានកំហុសក្នុងបម្លែងសារនេះ ។ គូសធីកជម្រើស 'ការអ៊ិនកូដ' នៅ ក្នុងកម្មវិធីកែសម្រួលគណនី)" + +#, c-format +msgid "Unable to send to chat %s,%s,%s" +msgstr "មិនអាចផ្ញើទៅកាន់ការជជែក %s,%s,%s បានទេ" + +msgid "Hidden or not logged-in" +msgstr "បានលាក់ ឬមិនបានចូល" + +#, c-format +msgid "<br>At %s since %s" +msgstr "<br>នៅ %s តាំងពី %s" + +msgid "Anyone" +msgstr "អ្នករាល់គ្នា" + +msgid "_Class:" +msgstr "ថ្នាក់" + +msgid "_Instance:" +msgstr "ធាតុ ៖" + +msgid "_Recipient:" +msgstr "អ្នកទទួល ៖" + +#, c-format +msgid "Attempt to subscribe to %s,%s,%s failed" +msgstr "បានបរាជ័យក្នុងការប៉ុនប៉ងជាវ %s,%s,%s" + +msgid "zlocate <nick>: Locate user" +msgstr "zlocate <nick> ៖ កំណត់ទីតាំងអ្នកប្រើ" + +msgid "zl <nick>: Locate user" +msgstr "zl <nick> ៖ កំណត់ទីតាំងអ្នកប្រើ" + +msgid "instance <instance>: Set the instance to be used on this class" +msgstr "ធាតុ <instance> ៖ កំណត់ធាតុត្រូវប្រើនៅក្នុងថ្នាក់នេះ" + +msgid "inst <instance>: Set the instance to be used on this class" +msgstr "inst <instance> ៖ កំណត់ធាតុត្រូវប្រើនៅក្នុងថ្នាក់នេះ" + +msgid "topic <instance>: Set the instance to be used on this class" +msgstr "ប្រធានបទ <instance> ៖ កំណត់ធាតុត្រូវប្រើនៅក្នុងថ្នាក់នេះ" + +msgid "sub <class> <instance> <recipient>: Join a new chat" +msgstr "" +"sub <class> <instance> <recipient> ៖ ចូលរួមក្នុងការជជែកថ្មី" + +msgid "" +"zi <instance>: Send a message to <message,<i>instance</i>,*>" +msgstr "zi <instance> ; ផ្ញើសារទៅ <សារ<i>ធាតុ</i>,*>" + +msgid "" +"zci <class> <instance>: Send a message to <<i>class</i>," +"<i>instance</i>,*>" +msgstr "" +"zci <class> <instance> ៖ ផ្ញើសារទៅ <<i>ថ្នាក់</i>,<i>ធាតុ</i>," +"*>" + +msgid "" +"zcir <class> <instance> <recipient>: Send a message to <" +"<i>class</i>,<i>instance</i>,<i>recipient</i>>" +msgstr "" +"zcir <class> <instance> <recipient> ៖ ផ្ញើសារទៅ <" +"<i>ថ្នាក់</i>,<i>ធាតុ</i>,<i>អ្នកទទួល</i>>" + +msgid "" +"zir <instance> <recipient>: Send a message to <MESSAGE," +"<i>instance</i>,<i>recipient</i>>" +msgstr "" +"zir <instance> <recipient> ៖ ផ្ញើសារទៅ <MESSAGE,<i>instance</" +"i>,<i>recipient</i>>" + +msgid "zc <class>: Send a message to <<i>class</i>,PERSONAL,*>" +msgstr "zc <class> ៖ ផ្ញើសារទៅកាន់ <<i>class</i>,PERSONAL,*>" + +msgid "Resubscribe" +msgstr "ជាវឡើងវិញ" + +msgid "Retrieve subscriptions from server" +msgstr "ទៅយកការជាវពីម៉ាស៊ីនបម្រើ" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#. * summary +#. * description +msgid "Zephyr Protocol Plugin" +msgstr "កម្មវិធីជំនួយពិធីការ Zephyr" + +msgid "Use tzc" +msgstr "ប្រើ tzc" + +msgid "tzc command" +msgstr "ពាក្យបញ្ជា tzc" + +msgid "Export to .anyone" +msgstr "នាំចេញទៅ .anyone" + +msgid "Export to .zephyr.subs" +msgstr "នាំចេញទៅ .zephyr.subs" + +msgid "Import from .anyone" +msgstr "នាំចូលពី .anyone" + +msgid "Import from .zephyr.subs" +msgstr "នាំចូលពី .zephyr.subs" + +msgid "Realm" +msgstr "Realm" + +msgid "Exposure" +msgstr "បង្ហាញ" + +#, c-format +msgid "" +"Unable to create socket:\n" +"%s" +msgstr "" +"មិនអាចបង្កើតរន្ធ ៖\n" +"%s" + +#, c-format +msgid "Unable to parse response from HTTP proxy: %s\n" +msgstr "មិនអាចញែកការឆ្លើយតបពីប្រូកស៊ី HTTP ៖ %s\n" + +#, c-format +msgid "HTTP proxy connection error %d" +msgstr "កំហុសក្នុងការតភ្ជាប់ប្រូកស៊ី HTTP %d" + +#, c-format +msgid "Access denied: HTTP proxy server forbids port %d tunneling." +msgstr "បដិសេធ ៖ ម៉ាស៊ីនបម្រើប្រូកស៊ី HTTP ហាមឃាត់ច្រក %d ។" + +#, c-format +msgid "Error resolving %s" +msgstr "កំហុសក្នុងការដោះស្រាយ %s" + +msgid "Could not resolve host name" +msgstr "មិនអាចដោះស្រាយឈ្មោះម៉ាស៊ីនបានទេ" + +#, c-format +msgid "Requesting %s's attention..." +msgstr "កំពុងស្នើការចាប់អារម្មណ៍របស់ %s..." + +#, c-format +msgid "%s has requested your attention!" +msgstr "%s បានស្នើការចាប់អារម្មណ៍អ្នកប្រើ !" + +#. * +#. * A wrapper for purple_request_action() that uses @c Yes and @c No buttons. +#. +msgid "_Yes" +msgstr "បាទ/ចាស" + +msgid "_No" +msgstr "ទេ" + +#. * +#. * A wrapper for purple_request_action() that uses Accept and Cancel buttons. +#. +msgid "_Accept" +msgstr "យល់ព្រម" + +#. * +#. * The default message to use when the user becomes auto-away. +#. +msgid "I'm not here right now" +msgstr "ខ្ញុំមិននៅទីនេះទេឥឡូវ" + +msgid "saved statuses" +msgstr "បានរក្សាទុស្ថានភាព" + +#, c-format +msgid "%s is now known as %s.\n" +msgstr "%s ឥឡូវត្រូវបានស្គាល់ជា %s ។\n" + +#, c-format +msgid "" +"%s has invited %s to the chat room %s:\n" +"%s" +msgstr "" +"%s បានអញ្ជើញ %s ឲ្យចូលរួមក្នុងបន្ទប់ %s ៖\n" +"%s" + +#, c-format +msgid "%s has invited %s to the chat room %s\n" +msgstr "%s បានអញ្ជើញ %s ឲ្យចូលរួមក្នុងបន្ទប់ជជែក %s\n" + +msgid "Accept chat invitation?" +msgstr "ព្រមទទួលការអញ្ជើញនៃការជជែក ?" + +#. Shortcut +msgid "Shortcut" +msgstr "ផ្លូវកាត់" + +msgid "The text-shortcut for the smiley" +msgstr "ផ្លូវកាត់អត្ថបទសម្រាប់សញ្ញាអារម្មណ៍" + +#. Stored Image +msgid "Stored Image" +msgstr "រូបភាពដែលបានទុក" + +msgid "Stored Image. (that'll have to do for now)" +msgstr "រូបភាពដែលបានទុក ។ (ដែលត្រូវធ្វើឥឡូវ)" + +msgid "SSL Connection Failed" +msgstr "បានបរាជ័យក្នុងការតភ្ជាប់ SSL" + +msgid "SSL Handshake Failed" +msgstr "បានបរាជ័យក្នុងការចាប់ដៃ SSL" + +msgid "SSL peer presented an invalid certificate" +msgstr "គូ SSL បានបង្ហាញវិញ្ញាបនបត្រមិនត្រឹមត្រូវ" + +msgid "Unknown SSL error" +msgstr "មិនស្គាល់កំហុស SSL" + +msgid "Unset" +msgstr "មិនបានកំណត់Unset" + +msgid "Do not disturb" +msgstr "កុំរំខាន" + +msgid "Extended away" +msgstr "បានពង្រីកការចាកឆ្ងាយ" + +msgid "Mobile" +msgstr "ចល័ត" + +msgid "Listening to music" +msgstr "ស្ដាប់តន្ត្រី" + +#, c-format +msgid "%s (%s) changed status from %s to %s" +msgstr "%s (%s) បានផ្លាស់ប្ដូរស្ថានភាពពី %s ទៅជា %s" + +#, c-format +msgid "%s (%s) is now %s" +msgstr "%s (%s) ឥឡូវគឺ %s" + +#, c-format +msgid "%s (%s) is no longer %s" +msgstr "%s (%s) មិនមានទៀតទេ %s" + +#, c-format +msgid "%s became idle" +msgstr "%s ក្លាយជាទំនេរ" + +#, c-format +msgid "%s became unidle" +msgstr "%s ក្លាយជាមិនទំនេរ" + +#, c-format +msgid "+++ %s became idle" +msgstr "+++ %s ក្លាយជាទំនេរ" + +#, c-format +msgid "+++ %s became unidle" +msgstr "+++ %s ក្លាយជាមិនទំនេរ" + +#. +#. * This string determines how some dates are displayed. The default +#. * string "%x %X" shows the date then the time. Translators can +#. * change this to "%X %x" if they want the time to be shown first, +#. * followed by the date. +#. +#, c-format +msgid "%x %X" +msgstr "%x %X" + +#, c-format +msgid "Error Reading %s" +msgstr "កំហុសក្នុងការអាន %s" + +#, c-format +msgid "" +"An error was encountered reading your %s. They have not been loaded, and " +"the old file has been renamed to %s~." +msgstr "" +"មានកំហុសក្នុងការអាន %s របស់អ្នក ។ ពួកវាមិនត្រូវបានផ្ទុកទេ ហើយឯកសារចាស់ត្រូវបានប្ដូរឈ្មោះទៅជា %" +"s~." + +msgid "Calculating..." +msgstr "កំពុងគណនា..." + +msgid "Unknown." +msgstr "មិនស្គាល់ ។" + +#, c-format +msgid "%d second" +msgid_plural "%d seconds" +msgstr[0] "%d វិនាទី" + +#, c-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d ថ្ងៃ" + +#, c-format +msgid "%s, %d hour" +msgid_plural "%s, %d hours" +msgstr[0] "%s, %d ម៉ោង" + +#, c-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d ម៉ោង" + +#, c-format +msgid "%s, %d minute" +msgid_plural "%s, %d minutes" +msgstr[0] "%s, %d នាទី" + +#, c-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d នាទី" + +#, c-format +msgid "Could not open %s: Redirected too many times" +msgstr "មិនអាចបើក %s ៖ បានបញ្ជូនច្រើនដងពេក" + +#, c-format +msgid "Unable to connect to %s" +msgstr "មិនអាចតភ្ជាប់ទៅ %s" + +#, c-format +msgid "Error reading from %s: response too long (%d bytes limit)" +msgstr "កំហុសក្នុងការអានពី %s ៖ ការឆ្លើយតបវែងពេក (ដែនកំណត់ %d បៃ)" + +#, c-format +msgid "" +"Unable to allocate enough memory to hold the contents from %s. The web " +"server may be trying something malicious." +msgstr "" +"មិនអាចបម្រុងទុកសតិគ្រប់គ្រាន់ដើម្បីផ្ទុកមាតិកាពី %s បានទេ ។ ម៉ាស៊ីនបម្រើបណ្ដាញប្រហែលជាព្យាយាមអ្វីដែល" +"មិនល្អ ។" + +#, c-format +msgid "Error reading from %s: %s" +msgstr "កំហុសក្នុងការអានពី %s: %s" + +#, c-format +msgid "Error writing to %s: %s" +msgstr "កំហុសក្នុងការសរសេរទៅកាន់ %s: %s" + +#, c-format +msgid "Unable to connect to %s: %s" +msgstr "មិនអាចតភ្ជាប់ទៅកាន់ %s: %s" + +#, c-format +msgid " - %s" +msgstr " - %s" + +#, c-format +msgid " (%s)" +msgstr " (%s)" + +#. 10053 +#, c-format +msgid "Connection interrupted by other software on your computer." +msgstr "ការតភ្ជាប់បានផ្អាកដោយកម្មវិធីផ្សេងនៅក្នុងកុំព្យូទ័ររបស់ ។" + +#. 10054 +#, c-format +msgid "Remote host closed connection." +msgstr "ការតភ្ជាប់បានបិទពីម៉ាស៊ីនពីចម្ងាយ ។" + +#. 10060 +#, c-format +msgid "Connection timed out." +msgstr "អស់ពេលតភ្ជាប់ ។" + +#. 10061 +#, c-format +msgid "Connection refused." +msgstr "បានបដិសេធការតភ្ជាប់ ។" + +#. 10048 +#, c-format +msgid "Address already in use." +msgstr "អាសយដ្ឋានកំពុងប្រើហើយ ។" + +msgid "Internet Messenger" +msgstr "កម្មវិធីផ្ញើសារអ៊ីនធឺណិត" + +msgid "Pidgin Internet Messenger" +msgstr "កម្មវិធីផ្ញើសារអ៊ីនធឺណិតរបស់ Pidgin" + +msgid "Send instant messages over multiple protocols" +msgstr "ផ្ញើសារបន្ទាន់តាមពិធីការជាច្រើន" + +msgid "Orientation" +msgstr "ទិស" + +msgid "The orientation of the tray." +msgstr "ទិសរបស់ថាស ។" + +#. Build the login options frame. +msgid "Login Options" +msgstr "ជម្រើសចូល" + +msgid "Pro_tocol:" +msgstr "ពិធីការ ៖" + +msgid "_Username:" +msgstr "ឈ្មោះអ្នកប្រើ ៖" + +msgid "Remember pass_word" +msgstr "ចងចាំពាក្យសម្ងាត់" + +#. Build the user options frame. +msgid "User Options" +msgstr "ជម្រើសអ្នកប្រើ" + +msgid "_Local alias:" +msgstr "ឈ្មោះក្លែងក្លាយមូលដ្ឋាន ៖" + +msgid "New _mail notifications" +msgstr "ការជូនដំណឹងសំបុត្រថ្មី" + +#. Buddy icon +msgid "Use this buddy _icon for this account:" +msgstr "ប្រើរូបតំណាងមិត្តភក្ដិនេះសម្រាប់គណនីនេះ ៖" + +#. Build the protocol options frame. +#, c-format +msgid "%s Options" +msgstr "ជម្រើស %s" + +msgid "Use GNOME Proxy Settings" +msgstr "ប្រើការកំណត់ប្រូកស៊ីរបស់ GNOME" + +msgid "Use Global Proxy Settings" +msgstr "ប្រើការកំណត់ប្រូកស៊ីសកល" + +msgid "No Proxy" +msgstr "គ្មានប្រូកស៊ី" + +msgid "HTTP" +msgstr "HTTP" + +msgid "SOCKS 4" +msgstr "SOCKS 4" + +msgid "SOCKS 5" +msgstr "SOCKS 5" + +msgid "Use Environmental Settings" +msgstr "ការកំណត់បរិស្ថានអ្នកប្រើ" + +#. This is an easter egg. +#. It means one of two things, both intended as humourus: +#. A) your network is really slow and you have nothing better to do than +#. look at butterflies. +#. B)You are looking really closely at something that shouldn't matter. +msgid "If you look real closely" +msgstr "ប្រសិនបើអ្នកមើលទៅពិតជាជិតណាស់" + +#. This is an easter egg. See the comment on the previous line in the source. +msgid "you can see the butterflies mating" +msgstr "អ្នកអាចមើល butterflies mating" + +msgid "Proxy Options" +msgstr "ជម្រើសប្រូកស៊ី" + +msgid "Proxy _type:" +msgstr "ប្រភេទប្រូកស៊ី ៖" + +msgid "_Host:" +msgstr "ម៉ាស៊ីន ៖" + +msgid "_Port:" +msgstr "ច្រក ៖" + +msgid "Pa_ssword:" +msgstr "ពាក្យសម្ងាត់ ៖" + +msgid "Unable to save new account" +msgstr "មិនអាចរក្សាទុកគណនីថ្មីបានទេ" + +msgid "An account already exists with the specified criteria." +msgstr "មានគណនីរួចហើយជាមួយនឹងលក្ខខណ្ឌដែលបានបញ្ជាក់ ។" + +msgid "Add Account" +msgstr "បន្ថែមគណនី" + +msgid "_Basic" +msgstr "មូលដ្ឋាន" + +msgid "Create _this new account on the server" +msgstr "បង្កើតគណនីថ្មីនៅលើម៉ាស៊ីនបម្រើ" + +msgid "_Advanced" +msgstr "កម្រិតខ្ពស់" + +msgid "Enabled" +msgstr "បានបើក" + +msgid "Protocol" +msgstr "ពិធីការ" + +#, c-format +msgid "" +"<span size='larger' weight='bold'>Welcome to %s!</span>\n" +"\n" +"You have no IM accounts configured. To start connecting with %s press the " +"<b>Add...</b> button below and configure your first account. If you want %s " +"to connect to multiple IM accounts, press <b>Add...</b> again to configure " +"them all.\n" +"\n" +"You can come back to this window to add, edit, or remove accounts from " +"<b>Accounts->Manage Accounts</b> in the Buddy List window" +msgstr "" +"<span size='larger' weight='bold'>សូមស្វាគមន៍មកកាន់ %s!</span>\n" +"\n" +"អ្នកមិនមានគណនី IM បានកំណត់រចនាសម្ព័ន្ធទេ ។ ដើម្បីចាប់ផ្ដើមការតភ្ជាប់ជាមួយ %s ចុចប៊ូតុង " +"<b>បន្ថែម...</b> ខាងក្រោម និងកំណត់រចនាសម្ព័ន្ធគណនីដំបូងរបស់អ្នក ។ ប្រសិនបើអ្នកចង់ឲ្យ %s តភ្ជាប់ទៅ" +"គណនី IM ជាច្រើន ចុច <b>បន្ថែម...</b> ដើម្បីកំណត់រចនាសម្ព័ន្ធពួកវាទាំងអស់ ។\n" +"\n" +"You can come back to this window to add, edit, or remove accounts from " +"<b>Accounts->Manage Accounts</b> in the Buddy List window" + +#, c-format +msgid "You have %d contact named %s. Would you like to merge them?" +msgid_plural "" +"You currently have %d contacts named %s. Would you like to merge them?" +msgstr[0] "អ្នកបច្ចុប្បន្នមានទំនាក់ទំនង %d ដែលមានឈ្មោះ %s ។ តើអ្នកចង់បញ្ចូលពួកវាដែរឬទេ ?" + +msgid "" +"Merging these contacts will cause them to share a single entry on the buddy " +"list and use a single conversation window. You can separate them again by " +"choosing 'Expand' from the contact's context menu" +msgstr "" +"បញ្ចូលទំនាក់ទំនងទាំងនេះនឹងបណ្ដាលឲ្យពួកវាចែករំលែកធាតុតែមួយនៅក្នុងបញ្ជីមិត្តភក្ដិ ហើយប្រើបង្អួចសន្ទនាតែ" +"មួយ ។ អ្នកអាចបំបែកពួកវាម្ដងទៀត ដោយជ្រើស 'ពង្រីក' ពីម៉ឺនុយបរិបទរបស់ទំនាក់ទំនង" + +msgid "Please update the necessary fields." +msgstr "សូមធ្វើឲ្យវាលដែលចាំបាច់ទាន់សម័យ ។" + +msgid "Room _List" +msgstr "បញ្ជីបន្ទប់" + +msgid "" +"Please enter the appropriate information about the chat you would like to " +"join.\n" +msgstr "សូមបញ្ចូលព័ត៌មានដេលសមរម្យអំពីការជជែកដែលនឹងចូលរួម ។\n" + +msgid "_Account:" +msgstr "គណនី ៖" + +msgid "_Block" +msgstr "ទប់ស្កាត់" + +msgid "Un_block" +msgstr "មិនទប់ស្កាត់" + +msgid "Move to" +msgstr "ផ្លាស់ទីទៅ" + +msgid "Get _Info" +msgstr "យកព័ត៌មាន" + +msgid "I_M" +msgstr "IM" + +msgid "_Send File..." +msgstr "ផ្ញើឯកសារ..." + +msgid "Add Buddy _Pounce..." +msgstr "បន្ថែមក្រុមមិត្តភក្ដិ..." + +msgid "View _Log" +msgstr "កំណត់ហេតុមើល" + +msgid "Hide when offline" +msgstr "លាក់នៅពេលនៅក្រៅបណ្ដាញ" + +msgid "_Alias..." +msgstr "ឈ្មោះក្លែងក្លាយ..." + +msgid "_Remove" +msgstr "យកចេញ" + +msgid "Set Custom Icon" +msgstr "កំណត់រូបតំណាងផ្ទាល់ខ្លួន" + +msgid "Remove Custom Icon" +msgstr "យករូបតំណាងផ្ទាល់ខ្លួនចេញ" + +msgid "Add _Buddy..." +msgstr "បន្ថែមមិត្តភក្ដិ..." + +msgid "Add C_hat..." +msgstr "បន្ថែមការជជែក..." + +msgid "_Delete Group" +msgstr "លុបក្រុម" + +msgid "_Rename" +msgstr "ប្តូរឈ្មោះ" + +#. join button +msgid "_Join" +msgstr "ចូលរួម" + +msgid "Auto-Join" +msgstr "ចូលដោយស្វ័យប្រវត្តិ" + +msgid "Persistent" +msgstr "មិនព្រម" + +msgid "_Edit Settings..." +msgstr "កែសម្រួលការកំណត់..." + +msgid "_Collapse" +msgstr "វេញ" + +msgid "_Expand" +msgstr "ពង្រីក" + +msgid "/Tools/Mute Sounds" +msgstr "/ឧបករណ៍/ស្ងាត់" + +msgid "" +"You are not currently signed on with an account that can add that buddy." +msgstr "អ្នកបច្ចុប្បន្នមិនត្រូវបានចូលដោយប្រើគណនីដែលអាចបន្ថែមមិត្តភក្ដិនោះទេ ។" + +#. I don't believe this can happen currently, I think +#. * everything that calls this function checks for one of the +#. * above node types first. +msgid "Unknown node type" +msgstr "មិនស្គាល់ប្រភេទថ្នាំង" + +#. Buddies menu +msgid "/_Buddies" +msgstr "/មិត្តភក្ដិ" + +msgid "/Buddies/New Instant _Message..." +msgstr "/មិត្តភក្ដិ/សារបន្ទាន់ថ្មី..." + +msgid "/Buddies/Join a _Chat..." +msgstr "/មិត្តភក្ដិ/ចូលរួមក្នុងការជជែក..." + +msgid "/Buddies/Get User _Info..." +msgstr "/មិត្តភក្ដិ/យកព័ត៌មានអ្នកប្រើ..." + +msgid "/Buddies/View User _Log..." +msgstr "/មិត្តភក្ដិ/មើលកំណត់ហេតុអ្នកប្រើ..." + +msgid "/Buddies/Sh_ow" +msgstr "/មិត្តភក្ដិ/បង្ហាញ" + +msgid "/Buddies/Show/_Offline Buddies" +msgstr "/មិត្តភក្ដិ/បង្ហាញ/មិត្តភក្ដិក្រៅបណ្ដាញ" + +msgid "/Buddies/Show/_Empty Groups" +msgstr "/មិត្តភក្ដិ/បង្ហាញ/ក្រុមទទេ" + +msgid "/Buddies/Show/Buddy _Details" +msgstr "/មិត្តភក្ដិ/បង្ហាញ/សេចក្ដីលម្អិតមិត្តភក្ដិ" + +msgid "/Buddies/Show/Idle _Times" +msgstr "/មិត្តភក្ដិ/បង្ហាញ/ពេលវេលាទំនេរ" + +msgid "/Buddies/Show/_Protocol Icons" +msgstr "/មិត្តភក្ដិ/បង្ហាញ/រូបតំណាងពិធីការ" + +msgid "/Buddies/_Sort Buddies" +msgstr "/មិត្តភក្ដិ/តម្រៀបមិត្តភក្ដិ" + +msgid "/Buddies/_Add Buddy..." +msgstr "/មិត្តភក្ដិ/បន្ថែមមិត្តភក្ដិ..." + +msgid "/Buddies/Add C_hat..." +msgstr "/មិត្តភក្ដិ/បន្ថែមការជជែក..." + +msgid "/Buddies/Add _Group..." +msgstr "/មិត្តភក្ដិ/បន្ថែមក្រុម..." + +msgid "/Buddies/_Quit" +msgstr "/មិត្តភក្ដិ/ចេញ" + +#. Accounts menu +msgid "/_Accounts" +msgstr "/គណនី" + +msgid "/Accounts/Manage Accounts" +msgstr "/គណនី/គ្រប់គ្រងគណនី" + +#. Tools +msgid "/_Tools" +msgstr "/ឧបករណ៍" + +msgid "/Tools/Buddy _Pounces" +msgstr "/ឧបករណ៍/ក្រុមមិត្តភក្ដិ" + +msgid "/Tools/_Certificates" +msgstr "/ឧបករណ៍/វិញ្ញាបនបត្រ" + +msgid "/Tools/Plu_gins" +msgstr "/ឧបករណ៍/កម្មវិធីជំនួយ" + +msgid "/Tools/Pr_eferences" +msgstr "/ឧបករណ៍/ចំណូលចិត្ត" + +msgid "/Tools/Pr_ivacy" +msgstr "/ឧបករណ៍/ភាពឯកជន" + +msgid "/Tools/Smile_y" +msgstr "/ឧបករណ៍/សញ្ញាណអារម្មណ៍" + +msgid "/Tools/_File Transfers" +msgstr "/ឧបករណ៍/ការផ្ទេរឯកសារ" + +msgid "/Tools/R_oom List" +msgstr "/ឧបករណ៍/បញ្ជីបន្ទប់" + +msgid "/Tools/System _Log" +msgstr "/ឧបករណ៍/កំណត់ហេតុប្រព័ន្ធ" + +msgid "/Tools/Mute _Sounds" +msgstr "/ឧបករណ៍/ស្ងាត់" + +#. Help +msgid "/_Help" +msgstr "/ជំនួយ" + +msgid "/Help/Online _Help" +msgstr "/ជំនួយ/ជំនួយលើបណ្ដាញ" + +msgid "/Help/_Debug Window" +msgstr "/ជំនួយ/បង្អួចបំបាត់កំហុស" + +msgid "/Help/_About" +msgstr "/ជំនួយ/អំពី" + +#, c-format +msgid "<b>Account:</b> %s" +msgstr "<b>គណនី ៖</b> %s" + +#, c-format +msgid "" +"\n" +"<b>Occupants:</b> %d" +msgstr "" +"\n" +"<b>មុខរបរ ៖</b> %d" + +#, c-format +msgid "" +"\n" +"<b>Topic:</b> %s" +msgstr "" +"\n" +"<b>ប្រធានបទ ៖</b> %s" + +msgid "(no topic set)" +msgstr "(គ្មានប្រធានបទបានកំណត់ទេ)" + +msgid "Buddy Alias" +msgstr "ឈ្មោះក្លែងក្លាយមិត្តភក្ដិ" + +msgid "Logged In" +msgstr "បានចូល" + +msgid "Last Seen" +msgstr "បានឃើញចុងក្រោយ" + +msgid "Spooky" +msgstr "ធ្វើឲ្យឈឺ" + +msgid "Awesome" +msgstr "ខ្លាច" + +msgid "Rockin'" +msgstr "Rockin'" + +msgid "Total Buddies" +msgstr "មិត្តភក្ដិសរុប" + +#, c-format +msgid "Idle %dd %dh %02dm" +msgstr "ទំនេរ %dd %dh %02dm" + +#, c-format +msgid "Idle %dh %02dm" +msgstr "ទំនេរ %dh %02dm" + +#, c-format +msgid "Idle %dm" +msgstr "ទំនេរ %dm" + +msgid "/Buddies/New Instant Message..." +msgstr "/មិត្តភក្ដិ/សារបន្ទាន់ថ្មី..." + +msgid "/Buddies/Join a Chat..." +msgstr "/មិត្តភក្ដិ/ចូលរួមក្នុងការជជែក..." + +msgid "/Buddies/Get User Info..." +msgstr "/មិត្តភក្ដិ/យកព័ត៌មានអ្នកប្រើ..." + +msgid "/Buddies/Add Buddy..." +msgstr "/មិត្តភក្ដិ/បន្ថែមមិត្តភក្ដិ..." + +msgid "/Buddies/Add Chat..." +msgstr "/មិត្តភក្ដិ/បន្ថែមការជជែក..." + +msgid "/Buddies/Add Group..." +msgstr "/មិត្តភក្ដិ/បន្ថែមក្រុម..." + +msgid "/Tools/Privacy" +msgstr "/ឧបករណ៍/ភាពឯកជន" + +msgid "/Tools/Room List" +msgstr "/ឧបករណ៍/បញ្ជីបន្ទប់" + +#, c-format +msgid "%d unread message from %s\n" +msgid_plural "%d unread messages from %s\n" +msgstr[0] "សារមិនអាន %d ពី %s\n" + +msgid "Manually" +msgstr "ដោយដៃ" + +msgid "By status" +msgstr "តាមស្ថានភាព" + +msgid "By log size" +msgstr "តាមទំហំកំណត់ហេតុ" + +#, c-format +msgid "%s disconnected" +msgstr "បានផ្ដាច់ %s" + +#, c-format +msgid "%s disabled" +msgstr "បានបិទ %s" + +msgid "Reconnect" +msgstr "តភ្ជាប់ឡើងវិញ" + +msgid "Re-enable" +msgstr "បើកឡើងវិញ" + +msgid "Welcome back!" +msgstr "សូមស្វាគមន៍ការត្រឡប់មកវិញ !" + +#, c-format +msgid "%d account was disabled because you signed on from another location:" +msgid_plural "" +"%d accounts were disabled because you signed on from another location:" +msgstr[0] "គណនី %d ត្រូវបានបិទ ពីព្រោះអ្នកបានចូលពីទីតាំងផ្សេរ ៖" + +msgid "<b>Username:</b>" +msgstr "<b> ឈ្មោះអ្នកប្រើ ៖</b>" + +msgid "<b>Password:</b>" +msgstr "<b>ពាក្យសម្ងាត់ ៖</b>" + +msgid "_Login" +msgstr "ចូល" + +msgid "/Accounts" +msgstr "/គណនី" + +#. Translators: Please maintain the use of -> and <- to refer to menu heirarchy +#, c-format +msgid "" +"<span weight='bold' size='larger'>Welcome to %s!</span>\n" +"\n" +"You have no accounts enabled. Enable your IM accounts from the <b>Accounts</" +"b> window at <b>Accounts->Manage Accounts</b>. Once you enable accounts, " +"you'll be able to sign on, set your status, and talk to your friends." +msgstr "" +"<span weight='bold' size='larger'>សូមស្វាគមន៍មកកាន់ %s !</span>\n" +"\n" +"អ្នកគ្មានគណនីបានបើកទេ ។ បើកគណនី IM របស់អ្នកពីបង្អួច <b>គណនី</b> នៅ <b>គណនី->គ្រប់គ្រងគណនី</" +"b> ។ នៅពេលអ្នកបើកគណនី អ្នកនឹងអាចចូល កំណត់ស្ថានភាពរបស់អ្នក ហើយនិយាយាជាមួយមិត្តភក្ដិ ។" + +#. set the Show Offline Buddies option. must be done +#. * after the treeview or faceprint gets mad. -Robot101 +#. +msgid "/Buddies/Show/Offline Buddies" +msgstr "/មិត្តភក្ដិ/បង្ហាញ/មិត្តភក្ដិក្រៅបណ្ដាញ" + +msgid "/Buddies/Show/Empty Groups" +msgstr "/មិត្តភក្ដិ/បង្ហាញ/ក្រុមទទេ" + +msgid "/Buddies/Show/Buddy Details" +msgstr "/មិត្តភក្ដិ/បង្ហាញ/សេចក្ដីលម្អិតរបស់មិត្តភក្ដិ" + +msgid "/Buddies/Show/Idle Times" +msgstr "/មិត្តភក្ដិ/បង្ហាញ/ពេលវេលាទំនេរ" + +msgid "/Buddies/Show/Protocol Icons" +msgstr "/មិត្តភក្ដិ/បង្ហាញ/រូបតំណាងពិធីការ" + +msgid "Add a buddy.\n" +msgstr "បន្ថែមមិត្តភក្ដិ ។\n" + +msgid "Buddy's _username:" +msgstr "ឈ្មោះអ្នកប្រើរបស់មិត្តភក្ដិ ៖" + +msgid "(Optional) A_lias:" +msgstr "ឈ្មោះក្លែងក្លាយ (ជម្រើស) ៖" + +msgid "Add buddy to _group:" +msgstr "បន្ថែមមិត្តភក្ដិទៅក្រុម ៖ " + +msgid "This protocol does not support chat rooms." +msgstr "ពិធីការនេះមិនគាំទ្របន្ទប់ជជែកនេះទេ ។" + +msgid "" +"You are not currently signed on with any protocols that have the ability to " +"chat." +msgstr "អ្នកបច្ចុប្បន្នមិនបានចូលជាមួយពិធីការណាមួយដែលមានលទ្ធភាពជជែក ។" + +msgid "" +"Please enter an alias, and the appropriate information about the chat you " +"would like to add to your buddy list.\n" +msgstr "" +"សូមបញ្ចូលឈ្មោះក្លែងក្លាយ និងព័ត៌មានដែលសមរម្យអំពីការជជែក ដែលអ្នកចង់បន្ថែមទៅបញ្ជីមិត្តភក្ដិរបស់អ្នក " +"។\n" + +msgid "A_lias:" +msgstr "ឈ្មោះក្លែងក្លាយ ៖" + +msgid "Auto_join when account becomes online." +msgstr "ចូលដោយស្វ័យប្រវត្តិ នៅពេលគណនីក្លាយជានៅលើបណ្ដាញ ។" + +msgid "_Remain in chat after window is closed." +msgstr "នៅក្នុងការជជែកបន្ទាប់ពីបង្អួចត្រូវបានបិទ ។" + +msgid "Please enter the name of the group to be added." +msgstr "សូមបញ្ចូលឈ្មោះរបសក្រុមដែលត្រូវបន្ថែម ។" + +msgid "Enable Account" +msgstr "បើកគណនី" + +msgid "<PurpleMain>/Accounts/Enable Account" +msgstr "<PurpleMain>/គណនី/បើកគណនី" + +msgid "<PurpleMain>/Accounts/" +msgstr "<PurpleMain>/គណនី/" + +msgid "_Edit Account" +msgstr "កែសម្រួលគណនី" + +msgid "No actions available" +msgstr "គ្មានសកម្មភាព" + +msgid "_Disable" +msgstr "បិទ" + +msgid "/Tools" +msgstr "/ឧបករណ៍" + +msgid "/Buddies/Sort Buddies" +msgstr "/មិត្តភក្ដិ/តម្រៀបមិត្តភក្ដិ" + +#. Widget creation function +msgid "SSL Servers" +msgstr "ម៉ាស៊ីនបម្រើស SSL" + +msgid "Unknown command." +msgstr "មិនស្គាល់ពាក្យបញ្ជា ។" + +msgid "That buddy is not on the same protocol as this chat." +msgstr "មិត្តភក្ដិនេះមិននៅលើពិធីការដដែលដូចម៉ាស៊ីនភ្ញៀវនេះទេ ។" + +msgid "" +"You are not currently signed on with an account that can invite that buddy." +msgstr "អ្នកបច្ចុប្បន្នមិនបានចូលដោយប្រើគណនី ដែលអាចអញ្ជើញមិត្តភក្ដិនោះទេ ។" + +msgid "Invite Buddy Into Chat Room" +msgstr "អញ្ជើញមិត្តភក្ដិទៅក្នុងបន្ទប់ជជែក" + +#. Put our happy label in it. +msgid "" +"Please enter the name of the user you wish to invite, along with an optional " +"invite message." +msgstr "សូមបញ្ចូលឈ្មោះរបស់អ្នកប្រើដែលអ្នកចង់អញ្ជើញ រួមជាមួយនឹងសារអញ្ជើញជាជម្រើស ។" + +msgid "_Buddy:" +msgstr "មិត្តភក្ដិ ៖" + +msgid "_Message:" +msgstr "សារ ៖" + +#, c-format +msgid "<h1>Conversation with %s</h1>\n" +msgstr "<h1>សន្ទនាជាមួយ %s</h1>\n" + +msgid "Save Conversation" +msgstr "រក្សាទុកការសន្ទនា" + +msgid "Find" +msgstr "រក" + +msgid "_Search for:" +msgstr "ស្វែងរក ៖" + +msgid "Un-Ignore" +msgstr "អើពើ" + +msgid "Ignore" +msgstr "មិនអើពើ" + +msgid "Get Away Message" +msgstr "យកសារចាកឆ្ងាយ" + +msgid "Last said" +msgstr "បាននិយាយចុងក្រោយ" + +msgid "Unable to save icon file to disk." +msgstr "មិនអាចរក្សាទុកឯកសាររូបតំណាងទៅថាសបានទេ ។" + +msgid "Save Icon" +msgstr "រក្សាទុករូបតំណាង" + +msgid "Animate" +msgstr "ចលនា" + +msgid "Hide Icon" +msgstr "លាក់រូបតំណាង" + +msgid "Save Icon As..." +msgstr "រក្សាទុករូបតំណាងជា..." + +msgid "Set Custom Icon..." +msgstr "កំណត់រូបតំណាងផ្ទាល់ខ្លួន..." + +msgid "Change Size" +msgstr "ផ្លាស់ប្ដូរទំហំ" + +msgid "Show All" +msgstr "បង្ហាញទាំងអស់" + +#. Conversation menu +msgid "/_Conversation" +msgstr "/សន្ទនា" + +msgid "/Conversation/New Instant _Message..." +msgstr "/សន្ទនា/សារបន្ទាន់ថ្មី..." + +msgid "/Conversation/_Find..." +msgstr "/សន្ទនា/រក..." + +msgid "/Conversation/View _Log" +msgstr "/សន្ទនា/មើលកំណត់ហេតុ" + +msgid "/Conversation/_Save As..." +msgstr "/សន្ទនា/រក្សាទុកជា..." + +msgid "/Conversation/Clea_r Scrollback" +msgstr "/សន្ទនា/ជំម្រះ" + +msgid "/Conversation/Se_nd File..." +msgstr "/សន្ទនា/ផ្ញើឯកសារ..." + +msgid "/Conversation/Add Buddy _Pounce..." +msgstr "/សន្ទនា/បន្ថែមក្រុមមិត្តភក្ដិ..." + +msgid "/Conversation/_Get Info" +msgstr "/សន្ទនា/យកព័ត៌មាន" + +msgid "/Conversation/In_vite..." +msgstr "/សន្ទនា/អញ្ជើញ..." + +msgid "/Conversation/M_ore" +msgstr "/សន្ទនា/ផ្សេងៗទៀត" + +msgid "/Conversation/Al_ias..." +msgstr "/សន្ទនា/ឈ្មោះក្លែងក្លាយ..." + +msgid "/Conversation/_Block..." +msgstr "/សន្ទនា/ទប់ស្កាត់..." + +msgid "/Conversation/_Unblock..." +msgstr "/សន្ទនា/មិនទប់ស្កាត់..." + +msgid "/Conversation/_Add..." +msgstr "/សន្ទនា/បន្ថែម..." + +msgid "/Conversation/_Remove..." +msgstr "/សន្ទនា/យកចេញ..." + +msgid "/Conversation/Insert Lin_k..." +msgstr "/សន្ទនា/បញ្ចូលតំណ..." + +msgid "/Conversation/Insert Imag_e..." +msgstr "/សន្ទនា/បញ្ចូលរូបភាព..." + +msgid "/Conversation/_Close" +msgstr "/សន្ទនា/បិទ" + +#. Options +msgid "/_Options" +msgstr "/ជម្រើស" + +msgid "/Options/Enable _Logging" +msgstr "/ជម្រើស/បើកការចូល" + +msgid "/Options/Enable _Sounds" +msgstr "/ជម្រើស/បើកសំឡេង" + +msgid "/Options/Show Formatting _Toolbars" +msgstr "/ជម្រើស/បង្ហាញរបារឧបករណ៍ធ្វើទ្រង់ទ្រាយ" + +msgid "/Options/Show Ti_mestamps" +msgstr "/ជម្រើស/បង្ហាញត្រាពេលវេលា" + +msgid "/Conversation/More" +msgstr "/សន្ទនា/ផ្សេងៗទៀត" + +msgid "/Options" +msgstr "/ជម្រើស" + +#. The menubar has been deactivated. Make sure the 'More' submenu is regenerated next time +#. * the 'Conversation' menu pops up. +#. Make sure the 'Conversation -> More' menuitems are regenerated whenever +#. * the 'Conversation' menu pops up because the entries can change after the +#. * conversation is created. +msgid "/Conversation" +msgstr "/សន្ទនា" + +msgid "/Conversation/View Log" +msgstr "/សន្ទនា/មើលកំណត់ហេតុ" + +msgid "/Conversation/Send File..." +msgstr "/សន្ទនា/ផ្ញើឯកសារ..." + +msgid "/Conversation/Add Buddy Pounce..." +msgstr "/សន្ទនា/បន្ថែមក្រុមមិត្តភក្ដិ..." + +msgid "/Conversation/Get Info" +msgstr "/សន្ទនា/យកព័ត៌មាន" + +msgid "/Conversation/Invite..." +msgstr "/សន្ទនា/អញ្ជើញ..." + +msgid "/Conversation/Alias..." +msgstr "/សន្ទនា/ឈ្មោះក្លែងក្លាយ..." + +msgid "/Conversation/Block..." +msgstr "/សន្ទនា/ទប់ស្កាត់..." + +msgid "/Conversation/Unblock..." +msgstr "/សន្ទនា/មិនទប់ស្កាត់..." + +msgid "/Conversation/Add..." +msgstr "/សន្ទនា/បន្ថែម..." + +msgid "/Conversation/Remove..." +msgstr "/សន្ទនា/យកចេញ..." + +msgid "/Conversation/Insert Link..." +msgstr "/សន្ទនា/បញ្ចូលតំណ..." + +msgid "/Conversation/Insert Image..." +msgstr "/សន្ទនា/បញ្ចូលរូបភាព..." + +msgid "/Options/Enable Logging" +msgstr "/ជម្រើស/បើកការចូល" + +msgid "/Options/Enable Sounds" +msgstr "/ជម្រើស/បើកសំឡេង" + +msgid "/Options/Show Formatting Toolbars" +msgstr "/ជម្រើស/បង្ហាញរបារឧបករណ៍ធ្វើទ្រង់ទ្រាយ" + +msgid "/Options/Show Timestamps" +msgstr "/ជម្រើស/បង្ហាញត្រាពេលវេលា" + +msgid "User is typing..." +msgstr "អ្នកប្រើកំពុងវាយ..." + +#, c-format +msgid "" +"\n" +"%s has stopped typing" +msgstr "" +"\n" +"%s បានឈប់វាយ" + +#. Build the Send To menu +msgid "S_end To" +msgstr "ផ្ញើទៅ" + +msgid "_Send" +msgstr "ផ្ញើ" + +#. Setup the label telling how many people are in the room. +msgid "0 people in room" +msgstr "គ្មានមនុស្សនៅក្នុងបន្ទប់ទេ" + +#, c-format +msgid "%d person in room" +msgid_plural "%d people in room" +msgstr[0] "មនុស្ស %d នៅក្នុងបន្ទប់" + +msgid "Typing" +msgstr "វាយ" + +msgid "Stopped Typing" +msgstr "ឈប់វាយ" + +msgid "Nick Said" +msgstr "សម្មតិនាមបាននិយាយ" + +msgid "Unread Messages" +msgstr "សារមិនបានអាន" + +msgid "New Event" +msgstr "ព្រឹត្តិការណ៍ថ្មី" + +msgid "clear: Clears all conversation scrollbacks." +msgstr "ជម្រះ ៖ ជម្រះការសន្ទនាទាំងអស់ ។" + +msgid "Confirm close" +msgstr "អះអាងការបិទ" + +msgid "You have unread messages. Are you sure you want to close the window?" +msgstr "អ្នកមានសារមិនទាន់អាន ។ តើអ្នកប្រាកដជាចង់បិទបង្អួចនេះឬ ?" + +msgid "Close other tabs" +msgstr "បិទផ្ទាំងផ្សេងៗទៀត" + +msgid "Close all tabs" +msgstr "បិទផ្ទាំងទាំងអស់" + +msgid "Detach this tab" +msgstr "ផ្ដាច់ផ្ទាំងនេះ" + +msgid "Close this tab" +msgstr "បិទផ្ទាំងនេះ" + +msgid "Close conversation" +msgstr "បិទការសន្ទនា" + +msgid "Last created window" +msgstr "បង្អួចបានបង្កើតចុងក្រោយ" + +msgid "Separate IM and Chat windows" +msgstr "បំបែកបង្អួច IM និងជជែក" + +msgid "New window" +msgstr "បង្អួចថ្មី" + +msgid "By group" +msgstr "តាមក្រុម" + +msgid "By account" +msgstr "តាមគណនី" + +msgid "Save Debug Log" +msgstr "រក្សាទុកកំណត់ហេតុបំបាត់កំហុស" + +msgid "Invert" +msgstr "ដាក់បញ្ច្រាស" + +msgid "Highlight matches" +msgstr "បន្លិចការផ្គូផ្គង" + +msgid "_Icon Only" +msgstr "តែរូបតំណាង" + +msgid "_Text Only" +msgstr "តែអត្ថបទ" + +msgid "_Both Icon & Text" +msgstr "ទាំងរូបតំណាង និងអត្ថបទ" + +msgid "Filter" +msgstr "តម្រង" + +msgid "Right click for more options." +msgstr "ចុចកណ្ដុរខាងស្ដាំដើម្បីមើលជម្រើសជាច្រើនទៀត ។" + +msgid "Level " +msgstr "កម្រិត" + +msgid "Select the debug filter level." +msgstr "ជ្រើសកម្រិតតម្រងបំបាត់កំហុស ។" + +msgid "All" +msgstr "ទាំងអស់" + +msgid "Misc" +msgstr "ផ្សេងៗ" + +msgid "Warning" +msgstr "ការព្រមាន" + +msgid "Error " +msgstr "កំហុស" + +msgid "Fatal Error" +msgstr "កំហុសធ្ងន់ធ្ងរ" + +msgid "bug master" +msgstr "កំហុសមេ" + +msgid "artist" +msgstr "សិល្បករ" + +#. feel free to not translate this +msgid "Ka-Hing Cheung" +msgstr "Ka-Hing Cheung" + +msgid "support" +msgstr "គាំទ្រ" + +msgid "webmaster" +msgstr "ប្រធានបណ្ដាញ" + +msgid "Senior Contributor/QA" +msgstr "អ្នកចែកចាយជាន់ខ្ពស់/QA" + +msgid "win32 port" +msgstr "ច្រក win32" + +msgid "maintainer" +msgstr "អ្នកថែទា" + +msgid "libfaim maintainer" +msgstr "អ្នកថែទាំ libfaim" + +#. If "lazy bum" translates literally into a serious insult, use something else or omit it. +msgid "hacker and designated driver [lazy bum]" +msgstr "អ្នកលួច និងកម្មវិធីបញ្ជាដែលបានជ្រើស [អាល់ប៊ុមកម្ជិល]" + +msgid "support/QA" +msgstr "គាំទ្រ/QA" + +msgid "XMPP" +msgstr "XMPP" + +msgid "original author" +msgstr "អ្នកនិពន្ធដើម" + +msgid "lead developer" +msgstr "ប្រធានអ្នកអភិវឌ្ឍ" + +msgid "Afrikaans" +msgstr "អាហ្វ្រីកាអាន" + +msgid "Arabic" +msgstr "អារ៉ាប់" + +msgid "Belarusian Latin" +msgstr "បេឡារុស្ស ឡាទីន" + +msgid "Bulgarian" +msgstr "ប៊ុលហ្គារី" + +msgid "Bengali" +msgstr "បេន្កាលី" + +msgid "Bosnian" +msgstr "បូស្នី" + +msgid "Catalan" +msgstr "កាតាឡាន" + +msgid "Valencian-Catalan" +msgstr "កាតាឡាន-វ៉ាឡេនហ្សង់" + +msgid "Czech" +msgstr "ឆេក" + +msgid "Danish" +msgstr "ដាណឺម៉ាក" + +msgid "German" +msgstr "អាល្លឺម៉ង់" + +msgid "Dzongkha" +msgstr "ដុងហ្កា" + +msgid "Greek" +msgstr "ក្រិក" + +msgid "Australian English" +msgstr "អង់គ្លេសអូស្ត្រាលី" + +msgid "Canadian English" +msgstr "អង់គ្លេសកាណាដា" + +msgid "British English" +msgstr "អង់គ្លេស អង់គ្លេស" + +msgid "Esperanto" +msgstr "អេស្ពេរ៉ាន់តូ\t" + +msgid "Spanish" +msgstr "អេស៉្បាញ" + +msgid "Estonian" +msgstr "អេស្តូនី" + +msgid "Euskera(Basque)" +msgstr "អឺស្កេរ៉ា (បាស្កេ)" + +msgid "Persian" +msgstr "ប៉ឺស៊ីយ៉ាន" + +msgid "Finnish" +msgstr "ហ្វាំងឡង់" + +msgid "French" +msgstr "បារាំង" + +msgid "Irish" +msgstr "អៀរឡង់" + +msgid "Galician" +msgstr "ហ្គាលីស្យាន" + +msgid "Gujarati" +msgstr "ហ្កុយ៉ារាទី" + +msgid "Gujarati Language Team" +msgstr "ប្រធានក្រុមភាសាហ្កុយ៉ារាទី" + +msgid "Hebrew" +msgstr "ហេប្រូ" + +msgid "Hindi" +msgstr "ហិណ្ឌូ" + +msgid "Hungarian" +msgstr "ហុងគ្រី" + +msgid "Indonesian" +msgstr "ឥណ្ឌូនេស៊ី" + +msgid "Italian" +msgstr "អ៊ីតាលី" + +msgid "Japanese" +msgstr "ជប៉ុន" + +msgid "Georgian" +msgstr "ហ្សកហ្ស៊ី" + +msgid "Ubuntu Georgian Translators" +msgstr "អ្នកប្រើប្រែហ្សកហ្ស៊ីរបស់អូប៊ុនទូ" + +msgid "Kannada" +msgstr "កិណាដា" + +msgid "Kannada Translation team" +msgstr "ក្រុមអ្នកបកប្រែភាសាកិណាដា" + +msgid "Korean" +msgstr "កូរ៉េ" + +msgid "Kurdish" +msgstr "ឃឺដ" + +msgid "Lao" +msgstr "ឡាវ" + +msgid "Lithuanian" +msgstr "លីទុយអានី" + +msgid "Macedonian" +msgstr "ម៉ាសេដូនី" + +msgid "Mongolian" +msgstr "ម៉ុងហ្គោលី" + +msgid "Bokmål Norwegian" +msgstr "ប៊ុកម៉លណរវ៉េ" + +msgid "Nepali" +msgstr "នេប៉ាល់" + +msgid "Dutch, Flemish" +msgstr "ហុល្លង់" + +msgid "Norwegian Nynorsk" +msgstr "ណរវ៉េ នីណ័រ" + +msgid "Occitan" +msgstr "អុកស៊ីតង់" + +msgid "Punjabi" +msgstr "ពូនយ៉ាប៊ី" + +msgid "Polish" +msgstr "ប៉ូឡូញ" + +msgid "Portuguese" +msgstr "ព័រទុយហ្គាល់" + +msgid "Portuguese-Brazil" +msgstr "ព័រទុយហ្គាល់-ប្រេស៊ីល" + +msgid "Pashto" +msgstr "ប៉ាស្តូ" + +msgid "Romanian" +msgstr "រូម៉ានី" + +msgid "Russian" +msgstr "រុស្ស៊ី" + +msgid "Slovak" +msgstr "ស្លូវ៉ាគី" + +msgid "Slovenian" +msgstr "ស្លូវ៉ានី" + +msgid "Albanian" +msgstr "អាល់បានី" + +msgid "Serbian" +msgstr "សែប៊ី" + +msgid "Sinhala" +msgstr "ស៊ីនហាលា" + +msgid "Swedish" +msgstr "ស៊ុយអែដ" + +msgid "Tamil" +msgstr "តាមីល" + +msgid "Telugu" +msgstr "តេលូហ្គូ" + +msgid "Thai" +msgstr "ថៃ" + +msgid "Turkish" +msgstr "ទួរគី" + +msgid "Urdu" +msgstr "អ៊ូរ្ឌូ" + +msgid "Vietnamese" +msgstr "វៀតណាម" + +msgid "T.M.Thanh and the Gnome-Vi Team" +msgstr "T.M.Thanh និងក្រុម Gnome-Vi" + +msgid "Simplified Chinese" +msgstr "ចិនសាមញ្ញ" + +msgid "Hong Kong Chinese" +msgstr "ចិនហុងកុង" + +msgid "Traditional Chinese" +msgstr "ចិនបុរាណ" + +msgid "Amharic" +msgstr "អាមហារីច" + +#, c-format +msgid "About %s" +msgstr "អំពី %s" + +#, c-format +msgid "" +"%s is a graphical modular messaging client based on libpurple which is " +"capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, " +"Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, MySpaceIM, Gadu-Gadu, and " +"QQ all at once. It is written using GTK+.<BR><BR>You may modify and " +"redistribute the program under the terms of the GPL (version 2 or later). A " +"copy of the GPL is contained in the 'COPYING' file distributed with %s. %s " +"is copyrighted by its contributors. See the 'COPYRIGHT' file for the " +"complete list of contributors. We provide no warranty for this program." +"<BR><BR>" +msgstr "" +"%s គឺជាម៉ាស៊ីនភ្ញៀវសារម៉ូឌុលក្រាហ្វិកដែលមានមូលដ្ឋានលើ libpurple ដែលមានសមត្ថភាពតភ្ជាប់ទៅកាន់ " +"AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, Novell GroupWise, Lotus " +"Sametime, Bonjour, Zephyr, MySpaceIM, Gadu-Gadu, and QQ ទាំងអស់នៅពេលតែមួយ ។ វា" +"ត្រូវបានសរសេរដោយប្រើ GTK+ ។<BR><BR>អ្នកអាចកែប្រែ និងចែកចាយឡើងវិញនូវកម្មវិធីក្រោមលក្ខខណ្ឌ " +"GPL (កំណែ ២ ឬខ្ពស់ជាងនេះ) ។ ច្បាប់ចម្លង GPL មានឯកសារ 'COPYING' បានចែកចាយជាមួយ %s ។ " +"%s ត្រូវបានរក្សាសិទ្ធិអ្នកចែកចាយរបស់ខ្លួន ។ សូមមើលឯកសារ 'COPYRIGHT' សម្រាប់បញ្ជីអ្នកចែកចាយ" +"ពេញលេញ ។ យើងមិនធានាលើកម្មវិធីនេះទេ ។<BR><BR>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">FAQ ៖</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">ជួយតាមរយៈអ៊ីមែល ៖</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgstr "<FONT SIZE=\"4\"> ឆានែល</FONT><BR><BR>" + +#, c-format +msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" +msgstr "<FONT SIZE=\"4\"> XMPP</FONT>devel@conference.pidgin.im<BR><BR>" + +msgid "Current Developers" +msgstr "អ្នកអភិវឌ្ឍន៍បច្ចុប្បន្ន" + +msgid "Crazy Patch Writers" +msgstr "អ្នកសរសេរបំណះមិនល្អ" + +msgid "Retired Developers" +msgstr "អ្នកអភិវឌ្ឍន៍ដែលចូលនិវត្តន៍" + +msgid "Retired Crazy Patch Writers" +msgstr "អ្នកសរសេរបំណះដែលចូលនិវត្តន៍" + +msgid "Current Translators" +msgstr "អ្នកបកប្រែបច្ចុប្បន្ន" + +msgid "Past Translators" +msgstr "អ្នកបកប្រែមុន" + +msgid "Debugging Information" +msgstr "ព័ត៌មានបំបាត់កំហុស" + +msgid "_Name" +msgstr "ឈ្មោះ" + +msgid "_Account" +msgstr "គណនី" + +msgid "Get User Info" +msgstr "យកព័ត៌មានអ្នកប្រើ" + +msgid "" +"Please enter the username or alias of the person whose info you would like " +"to view." +msgstr "សូមបញ្ចូលឈ្មោះអ្នកប្រើ ឬឈ្មោះក្លែងក្លាយរបស់មនុស្សដែលអ្នកចង់មើល ។" + +msgid "View User Log" +msgstr "មើលកំណត់ហេតុអ្នកប្រើ" + +msgid "Alias Contact" +msgstr "ទំនាក់ទំនងឈ្មោះក្លែងក្លាយ" + +msgid "Enter an alias for this contact." +msgstr "បញ្ចូលឈ្មោះក្លែងក្លាយសម្រាប់ទំនាក់ទំនងនេះ ។" + +#, c-format +msgid "Enter an alias for %s." +msgstr "បញ្ចូលឈ្មោះក្លែងក្លាយសម្រាប់ %s ។" + +msgid "Alias Buddy" +msgstr "ឈ្មោះក្លែងក្លាយរបស់មិត្តភក្ដិ" + +msgid "Alias Chat" +msgstr "ឈ្មោះក្លែងក្លាយក្នុងការជជែក" + +msgid "Enter an alias for this chat." +msgstr "បញ្ចូលឈ្មោះក្លែងក្លាយសម្រាប់ការជជែកនេះ ។" + +#, c-format +msgid "" +"You are about to remove the contact containing %s and %d other buddy from " +"your buddy list. Do you want to continue?" +msgid_plural "" +"You are about to remove the contact containing %s and %d other buddies from " +"your buddy list. Do you want to continue?" +msgstr[0] "" +"អ្នករៀបនឹងយកទំនាក់ទំនងមិត្តភក្ដិផ្សេងដែលមាន %s និង %d ចេញពីបញ្ជីមិត្តភក្ដិរបស់អ្នក ។ តើអ្នកចង់បន្ត" +"ដែរឬទេ ?" + +msgid "Remove Contact" +msgstr "យកទំនាក់ទំនងចេញ" + +msgid "_Remove Contact" +msgstr "យកទំនាក់ទំនងចេញ" + +#, c-format +msgid "" +"You are about to merge the group called %s into the group called %s. Do you " +"want to continue?" +msgstr "អ្នករៀបនឹងបញ្ចូលក្រុមដែលហៅថា %s ចូលគ្នាទៅក្នុងក្រុមដែលហៅថា %s ។ តើអ្នកចង់បន្តដែរឬទេ ?" + +msgid "Merge Groups" +msgstr "បញ្ចូលក្រុមចូលគ្នា" + +msgid "_Merge Groups" +msgstr "បញ្ចូលក្រុមចូលគ្នា" + +#, 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 "" +"អ្នករៀបនឹងយកក្រុមដែល %s ចេញ ហើយសមាជិករបស់វាទាំងអស់ពីបញ្ជីមិត្តភក្ដិ ។ តើអ្នកចង់បន្តដែរឬទេ ?" + +msgid "Remove Group" +msgstr "យកក្រុមចេញ" + +msgid "_Remove Group" +msgstr "យកក្រុមចេញ" + +#, c-format +msgid "" +"You are about to remove %s from your buddy list. Do you want to continue?" +msgstr "អ្នករៀបនឹងយក %s ពីបញ្ជីមិត្តភក្ដិរបស់អ្នក ។ តើអ្នកចង់បន្តដែរឬទេ ?" + +msgid "Remove Buddy" +msgstr "យកមិត្តភក្ដិចេញ" + +msgid "_Remove Buddy" +msgstr "យកមិត្តភក្ដិចេញ" + +#, c-format +msgid "" +"You are about to remove the chat %s from your buddy list. Do you want to " +"continue?" +msgstr "អ្នករៀបនឹងយកការជជែក %s ចេញពីបញ្ជីមិត្តភក្ដិរបស់អ្នក ។ តើអ្នកចង់បន្តដែរឬទេ ?" + +msgid "Remove Chat" +msgstr "យកការជជែកចេញ" + +msgid "_Remove Chat" +msgstr "យកការជជែកចេញ" + +msgid "Right-click for more unread messages...\n" +msgstr "ចុចកណ្ដុរស្ដាំដើម្បីមើលសារមិនទាន់អានបន្ថែមទៀត...\n" + +msgid "_Change Status" +msgstr "ផ្លាស់ប្ដូរស្ថានភាព" + +msgid "Show Buddy _List" +msgstr "បង្ហាញបញ្ជីមិត្តភក្ដិ" + +msgid "_Unread Messages" +msgstr "សារមិនទាន់អាន" + +msgid "New _Message..." +msgstr "សារថ្មី..." + +msgid "_Accounts" +msgstr "គណនី" + +msgid "Plu_gins" +msgstr "កម្មវិធីជំនួយ" + +msgid "Pr_eferences" +msgstr "ចំណូលចិត្ត" + +msgid "Mute _Sounds" +msgstr "ស្ងាត់" + +msgid "_Blink on New Message" +msgstr "លោតភ្លឹបភ្លែងនៅពេលមានសារថ្មី" + +msgid "_Quit" +msgstr "ចេញ" + +msgid "Not started" +msgstr "មិនបានចាប់ផ្ដើមទេ" + +msgid "<b>Receiving As:</b>" +msgstr "<b>ទទួលជា ៖</b>" + +msgid "<b>Receiving From:</b>" +msgstr "<b>ទទួលពីរ ៖</b>" + +msgid "<b>Sending To:</b>" +msgstr "<b>ផ្ញើទៅ ៖</b>" + +msgid "<b>Sending As:</b>" +msgstr "<b>ផ្ញើជា ៖</b>" + +msgid "There is no application configured to open this type of file." +msgstr "គ្មានកម្មវិធីបានកំណត់រចនាសម្ព័ន្ធទេ ដើម្បីបើកឯកសារប្រភេទនេះ ។" + +msgid "An error occurred while opening the file." +msgstr "កំហុសមួយបានកើតឡើងខណៈពេលបើកឯកសារ ។" + +#, c-format +msgid "Error launching %s: %s" +msgstr "កំហុសក្នុងការចាប់ផ្ដើម %s: %s" + +#, c-format +msgid "Error running %s" +msgstr "កំហុសក្នុងការ %s" + +#, c-format +msgid "Process returned error code %d" +msgstr "ដំណើរការបានត្រឡប់កូដកំហុស %d" + +msgid "Filename:" +msgstr "ឈ្មោះឯកសារ ៖" + +msgid "Local File:" +msgstr "ឯកសារមូលដ្ឋាន ៖" + +msgid "Speed:" +msgstr "ល្បឿន ៖" + +msgid "Time Elapsed:" +msgstr "ពេលវេលាកន្លងទៅ ៖" + +msgid "Time Remaining:" +msgstr "ពេលវេលានៅសល់ ៖" + +msgid "Close this window when all transfers _finish" +msgstr "បិទបង្អួចនេះនៅពេលការផ្ទេរទាំងអស់ចប់" + +msgid "C_lear finished transfers" +msgstr "ជម្រះការផ្ទេរដែលចប់" + +#. "Download Details" arrow +msgid "File transfer _details" +msgstr "សេចក្ដីលម្អិតការផ្ទេរឯកសារ" + +#. Pause button +msgid "_Pause" +msgstr "ផ្អាក" + +#. Resume button +msgid "_Resume" +msgstr "បន្ត" + +msgid "Paste as Plain _Text" +msgstr "បិទភ្ជាប់ជាអត្ថបទធម្មតា" + +msgid "_Reset formatting" +msgstr "កំណត់ការធ្វើទ្រង់ទ្រាយឡើងវិញ" + +msgid "Disable _smileys in selected text" +msgstr "បិទសញ្ញាណអារម្មណ៍នៅក្នុងអត្ថបទដែលបានជ្រើស" + +msgid "Hyperlink color" +msgstr "ពណ៌តំណខ្ពស់" + +msgid "Color to draw hyperlinks." +msgstr "ពណ៌ត្រូវគូតំណខ្ពស់ ។" + +msgid "Hyperlink visited color" +msgstr "ពណ៌ដែលបានទស្សនាតំណខ្ពស់" + +msgid "Color to draw hyperlinks after it has been visited (or activated)." +msgstr "ពណ៌ត្រូវគូតំណខ្ពស់បន្ទាប់ពីវាត្រូវបានទស្សនា (ឬធ្វើឲ្យសកម្ម) ។" + +msgid "Hyperlink prelight color" +msgstr "ពណ៌ពន្លឺមុនតំណខ្ពស់" + +msgid "Color to draw hyperlinks when mouse is over them." +msgstr "ពណ៌ត្រូវគូតំណខ្ពស់នៅពេលដាក់កណ្ដុរលើពួកវា ។" + +msgid "Sent Message Name Color" +msgstr "បានផ្ញើពណ៌ឈ្មោះសារ" + +msgid "Color to draw the name of a message you sent." +msgstr "ពណ៌ត្រូវគូរឈ្មោះសារដែលអ្នកបានផ្ញើ ។" + +msgid "Received Message Name Color" +msgstr "បានទទួលពណ៌ឈ្មោះសារ" + +msgid "Color to draw the name of a message you received." +msgstr "ពណ៌ត្រូវគូរឈ្មោះសារដែលអ្នកបានទទួល ។" + +msgid "\"Attention\" Name Color" +msgstr "\"ប្រយ័ត្ន\" ពណ៌ឈ្មោះ" + +msgid "Color to draw the name of a message you received containing your name." +msgstr "ពណ៌ត្រូវគូរឈ្មោះសារដែលអ្នកបានទទួល មានឈ្មោះរបស់អ្នក ។" + +msgid "Action Message Name Color" +msgstr "សកម្មភាពពណ៌ឈ្មោះសារ" + +msgid "Color to draw the name of an action message." +msgstr "ពណ៌ត្រូវគូរឈ្មោះសារសកម្មភាព ។" + +msgid "Action Message Name Color for Whispered Message" +msgstr "សកម្មភាពពណ៌ឈ្មោះសារសម្រាប់សារដែលខ្សឹប" + +msgid "Whisper Message Name Color" +msgstr "ពណ៌ឈ្មោះសារខ្សឹប" + +msgid "Typing notification color" +msgstr "វាយពណ៌ជូនដំណឹង" + +msgid "The color to use for the typing notification font" +msgstr "ពណ៌ត្រូវប្រើដើម្បីវាយពុម្ពអក្សរជូនដំណឹង" + +msgid "Typing notification font" +msgstr "វាយពុម្ពអក្សរជូនដំណឹង" + +msgid "The font to use for the typing notification" +msgstr "ពុម្ពអក្សរត្រូវប្រើសម្រាប់វាយការជូនដំណឹង" + +msgid "Enable typing notification" +msgstr "អនុញ្ញាតវាយការជូនដំណឹង" + +msgid "_Copy Email Address" +msgstr "ចម្លងអាសយដ្ឋានអ៊ីមែល" + +msgid "_Open Link in Browser" +msgstr "បើកតំណនៅក្នុងកម្មវិធីរុករក" + +msgid "_Copy Link Location" +msgstr "ចម្លងទីតាំងតំណ" + +msgid "" +"<span size='larger' weight='bold'>Unrecognized file type</span>\n" +"\n" +"Defaulting to PNG." +msgstr "" +"<span size='larger' weight='bold'>មិនស្គាល់ប្រភេទឯកសារ</span>\n" +"\n" +"កំណត់លំនាំដើមទៅ PNG ។" + +msgid "" +"Unrecognized file type\n" +"\n" +"Defaulting to PNG." +msgstr "" +"ប្រភេទសារដែលមិនស្គាល់\n" +"\n" +"កំណត់លំនាំដើមទៅ PNG ។" + +#, c-format +msgid "" +"<span size='larger' weight='bold'>Error saving image</span>\n" +"\n" +"%s" +msgstr "" +"<span size='larger' weight='bold'>កំហុសក្នុងការរក្សាទុករូបភាព</span>\n" +"\n" +"%s" + +#, c-format +msgid "" +"Error saving image\n" +"\n" +"%s" +msgstr "" +"កំហុសក្នុងការរក្សាទុករូបភាព\n" +"\n" +"%s" + +msgid "Save Image" +msgstr "រក្សាទុករូបភាព" + +#, c-format +msgid "_Save Image..." +msgstr "រក្សាទុករូបភាព..." + +#, c-format +msgid "_Add Custom Smiley..." +msgstr "បន្ថែមសញ្ញាណអារម្មណ៍ផ្ទាល់ខ្លួន..." + +msgid "Select Font" +msgstr "ជ្រើសពុម្ពអក្សរ" + +msgid "Select Text Color" +msgstr "ជ្រើសពណ៌អត្ថបទ" + +msgid "Select Background Color" +msgstr "ជ្រើសពណ៌ផ្ទៃខាងក្រោយ" + +msgid "_URL" +msgstr "URL" + +msgid "_Description" +msgstr "សេចក្ដីពិពណ៌នា" + +msgid "" +"Please enter the URL and description of the link that you want to insert. " +"The description is optional." +msgstr "សូមបញ្ចូល URL និងសេចក្ដីពិពណ៌នារបស់តំណដែលអ្នកចង់បញ្ចូល ។ សេចក្ដីពិពណ៌នាគឺជាជម្រើស ។" + +msgid "Please enter the URL of the link that you want to insert." +msgstr "សូមបញ្ចូល URL របស់តំណដែលអ្នកចង់បញ្ចូល ។" + +msgid "Insert Link" +msgstr "បញ្ចូលតំណ" + +msgid "_Insert" +msgstr "បញ្ចូល" + +#, c-format +msgid "Failed to store image: %s\n" +msgstr "បានបរាជ័យក្នុងការផ្ទុករូបភាព ៖ %s\n" + +msgid "Insert Image" +msgstr "បញ្ចូលរូបភាព" + +#, c-format +msgid "" +"This smiley is disabled because a custom smiley exists for this shortcut:\n" +" %s" +msgstr "" +"សញ្ញាណអារម្មណ៍ត្រូវបានបិទពីព្រោះមានសញ្ញាណអារម្មណ៍សម្រាប់ផ្លូវកាត់នេះរួចហើយ ៖\n" +" %s" + +msgid "Smile!" +msgstr "សញ្ញាណអារម្មណ៍ !" + +msgid "_Manage custom smileys" +msgstr "គ្រប់គ្រងសញ្ញាណអារម្មណ៍ផ្ទាល់ខ្លួន" + +msgid "This theme has no available smileys." +msgstr "ស្បែកនេះមិនមានសញ្ញាណអារម្មណ៍ទេ ។" + +msgid "_Font" +msgstr "ពុម្ពអក្សរ" + +msgid "Group Items" +msgstr "ដាក់ធាតុជាក្រុម" + +msgid "Ungroup Items" +msgstr "បំបែកក្រុមធាតុ" + +msgid "Bold" +msgstr "ដិត" + +msgid "Italic" +msgstr "ទ្រេត" + +msgid "Underline" +msgstr "គូសបន្ទាត់ក្រោម" + +msgid "Strikethrough" +msgstr "បន្ទាត់ឆូត" + +msgid "Increase Font Size" +msgstr "បង្កើនទំហំពុម្ពអក្សរ" + +msgid "Decrease Font Size" +msgstr "បន្ថយទំហំពុម្ពអក្សរ" + +msgid "Font Face" +msgstr "លក្ខណៈពុម្ពអក្សរ" + +msgid "Background Color" +msgstr "ពណ៌ផ្ទៃខាងក្រោយ" + +msgid "Foreground Color" +msgstr "ពណ៌ផ្ទៃខាងមុខ" + +msgid "Reset Formatting" +msgstr "កំណត់ការធ្វើទ្រង់ទ្រាយឡើងវិញ" + +msgid "Insert IM Image" +msgstr "បញ្ចូលរូបភាព IM" + +msgid "Insert Smiley" +msgstr "បញ្ចូលសញ្ញាណអារម្មណ៍" + +msgid "<b>_Bold</b>" +msgstr "<b>ដិត</b>" + +msgid "<i>_Italic</i>" +msgstr "<i>ទ្រេត</i>" + +msgid "<u>_Underline</u>" +msgstr "<u>គូសបន្ទាត់ក្រោម</u>" + +msgid "<span strikethrough='true'>Strikethrough</span>" +msgstr "<span strikethrough='true'>បន្ទាត់ឆូត</span>" + +msgid "<span size='larger'>_Larger</span>" +msgstr "<span size='larger'>ធំជាង</span>" + +msgid "_Normal" +msgstr "ធម្មតា" + +msgid "<span size='smaller'>_Smaller</span>" +msgstr "<span size='smaller'>តូចជាង</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' +msgid "_Font face" +msgstr "លក្ខណៈពុម្ពអក្សរ" + +msgid "Foreground _color" +msgstr "ពណ៌ផ្ទៃខាងមុខ" + +msgid "Bac_kground color" +msgstr "ពណ៌ផ្ទៃខាងក្រោយ" + +msgid "_Image" +msgstr "រូបភាព" + +msgid "_Link" +msgstr "តំណ" + +msgid "_Horizontal rule" +msgstr "ក្បួនផ្ដេក" + +msgid "_Smile!" +msgstr "សញ្ញាណអារម្មណ៍" + +msgid "Log Deletion Failed" +msgstr "បានបរាជ័យក្នុងការលុបកំណត់ហេតុ" + +msgid "Check permissions and try again." +msgstr "ពិនិត្យមើលសិទ្ធិ ហើយព្យាយាមម្ដងទៀត ។" + +#, c-format +msgid "" +"Are you sure you want to permanently delete the log of the conversation with " +"%s which started at %s?" +msgstr "តើអ្នកប្រាកដជាចង់លុបកំណត់សន្ទនាជាមួយ %s ជាអចិន្ត្រៃយ៍ដែលចាប់ផ្ដើមនៅ %s ដែរឬទេ ?" + +#, c-format +msgid "" +"Are you sure you want to permanently delete the log of the conversation in %" +"s which started at %s?" +msgstr "តើអ្នកប្រាកដជាចង់លុបកំណត់ហេតុសន្ទនានៅក្នុង %s ជាអចិន្ត្រៃយ៍ដែលចាប់ផ្ដើមនៅ %s ដែរឬទេ ?" + +#, c-format +msgid "" +"Are you sure you want to permanently delete the system log which started at %" +"s?" +msgstr "តើអ្នកប្រាកដជាចង់លុបកំណត់ហេតុប្រព័ន្ធដែលចាប់ផ្ដើមនៅ %s ជាអចិន្ត្រៃយ៍ឬ ?" + +msgid "Delete Log?" +msgstr "លុបកំណត់ហេតុ ?" + +msgid "Delete Log..." +msgstr "លុបកំណត់ហេតុ..." + +#, c-format +msgid "<span size='larger' weight='bold'>Conversation in %s on %s</span>" +msgstr "<span size='larger' weight='bold'>សន្ទនានៅក្នុង %s លើ %s</span>" + +#, c-format +msgid "<span size='larger' weight='bold'>Conversation with %s on %s</span>" +msgstr "<span size='larger' weight='bold'>សន្ទនាជាមួយ %s នៅលើ %s</span>" + +#. Steal the "HELP" response and use it to trigger browsing to the logs folder +msgid "_Browse logs folder" +msgstr "រកមើលថតកំណត់ហេតុ" + +#, c-format +msgid "%s %s. Try `%s -h' for more information.\n" +msgstr "%s %s ។ ព្យាយាម `%s -h' សម្រាប់ព័ត៌មានបន្ថែម ។\n" + +#, c-format +msgid "" +"%s %s\n" +"Usage: %s [OPTION]...\n" +"\n" +" -c, --config=DIR use DIR for config files\n" +" -d, --debug print debugging messages to stdout\n" +" -h, --help display this help and exit\n" +" -m, --multiple do not ensure single instance\n" +" -n, --nologin don't automatically login\n" +" -l, --login[=NAME] enable specified account(s) (optional argument NAME\n" +" specifies account(s) to use, separated by commas.\n" +" Without this only the first account will be enabled).\n" +" --display=DISPLAY X display to use\n" +" -v, --version display the current version and exit\n" +msgstr "" +"%s %s\n" +"ការប្រើប្រាស់ ៖ %s [ជម្រើស]...\n" +"\n" +" -c, --config=DIR ប្រើ DIR សម្រាប់ឯកសារកំណត់រចនាសម្ព័ន្ធ\n" +" -d, --debug បោះពុម្ពសារបំបាត់កំហុសទៅ stdout\n" +" -h, --help បង្ហាញជំនួយនេះ ហើយចេញ\n" +" -m, --multiple មិនប្រាកដធាតុតែមួយ\n" +" -n, --nologin កុំចូលដោយស្វ័យប្រវត្តិ\n" +" -l, --login[=NAME] បើកគណនីដែលបានបញ្ជាក់ (អាគុយម៉ងជម្រើស NAME\n" +" បញ្ជាក់គណនីត្រូវប្រើ បំបែកដោយសញ្ញា (,) ។\n" +" ដោយគ្មានគណនីដំបូងនេះនឹងត្រូវបានបើក) ។\n" +" --display=DISPLAY ការបង្ហាញ X ត្រូវប្រើ\n" +" -v, --version បង្ហាញកំណែបច្ចុប្បន្ន ហើយចេញ\n" + +#, c-format +msgid "" +"%s %s\n" +"Usage: %s [OPTION]...\n" +"\n" +" -c, --config=DIR use DIR for config files\n" +" -d, --debug print debugging messages to stdout\n" +" -h, --help display this help and exit\n" +" -m, --multiple do not ensure single instance\n" +" -n, --nologin don't automatically login\n" +" -l, --login[=NAME] enable specified account(s) (optional argument NAME\n" +" specifies account(s) to use, separated by commas.\n" +" Without this only the first account will be enabled).\n" +" -v, --version display the current version and exit\n" +msgstr "" +"%s %s\n" +"ការប្រើប្រាស់ ៖ %s [ជម្រើស]...\n" +"\n" +" -c, --config=DIR ប្រើ DIR សម្រាប់ឯកសារកំណត់រចនាសម្ព័ន្ធ\n" +" -d, --debug បោះពុម្ពសារបំបាត់កំហុសទៅ stdout\n" +" -h, --help បង្ហាញជំនួយនេះ ហើយចេញ\n" +" -m, --multiple កុំប្រាកដធាតុតែមួយ\n" +" -n, --nologin កុំចូលដោយស្វ័យប្រវត្តិ\n" +" -l, --login[=NAME] បើកគណនីដែលបានបញ្ជាក់ (អាគុយម៉ង់ជម្រើស NAME\n" +" បញ្ជាក់គណនីត្រូវប្រើ បំបែកដោយសញ្ញា (,)។\n" +" ដោយគ្មានគណនីដំបូងនឹងត្រូវបានបើក) ។\n" +" -v, --version បង្ហាញកំណែបច្ចុប្បន្ន ហើយចេញ\n" + +#, c-format +msgid "" +"%s %s has segfaulted and attempted to dump a core file.\n" +"This is a bug in the software and has happened through\n" +"no fault of your own.\n" +"\n" +"If you can reproduce the crash, please notify the developers\n" +"by reporting a bug at:\n" +"%ssimpleticket/\n" +"\n" +"Please make sure to specify what you were doing at the time\n" +"and post the backtrace from the core file. If you do not know\n" +"how to get the backtrace, please read the instructions at\n" +"%swiki/GetABacktrace\n" +msgstr "" +"%s %s has segfaulted and attempted to dump a core file.\n" +"This is a bug in the software and has happened through\n" +"no fault of your own.\n" +"\n" +"If you can reproduce the crash, please notify the developers\n" +"by reporting a bug at:\n" +"%ssimpleticket/\n" +"\n" +"Please make sure to specify what you were doing at the time\n" +"and post the backtrace from the core file. If you do not know\n" +"how to get the backtrace, please read the instructions at\n" +"%swiki/GetABacktrace\n" + +#. Translators may want to transliterate the name. +#. It is not to be translated. +msgid "Pidgin" +msgstr "Pidgin" + +#, c-format +msgid "Exiting because another libpurple client is already running.\n" +msgstr "ចេញ ដោយសារតែម៉ាស៊ីនភ្ញើ libpurple ផ្សេងទៀតកំពុងរត់រួចហើយ ។\n" + +msgid "Open All Messages" +msgstr "បើកសារទាំងអស់" + +msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>" +msgstr "<span weight=\"bold\" size=\"larger\">អ្នកមានសំបុត្រ !</span>" + +#, c-format +msgid "%s has %d new message." +msgid_plural "%s has %d new messages." +msgstr[0] "%s មានសារថ្មី %d ។" + +#, c-format +msgid "<b>%d new email.</b>" +msgid_plural "<b>%d new emails.</b>" +msgstr[0] "<b>អ៊ីមែលថ្មី %d ។</b>" + +#, c-format +msgid "The browser command \"%s\" is invalid." +msgstr "ពាក្យបញ្ជាកម្មវិធីរុករក \"%s\" មិនត្រឹមត្រូវ ។" + +msgid "Unable to open URL" +msgstr "មិនអាចបើក URL" + +#, c-format +msgid "Error launching \"%s\": %s" +msgstr "កំហុសក្នុងការចាប់ផ្ដើម \"%s\" ៖ %s" + +msgid "" +"The 'Manual' browser command has been chosen, but no command has been set." +msgstr "ពាក្យបញ្ជាកម្មវិធីរុករក 'ដោយដៃ' ត្រូវបានជ្រើស ប៉ុន្តែគ្មានពាក្យបញ្ជាត្រូវបានជ្រើសទេ ។" + +msgid "The following plugins will be unloaded." +msgstr "កម្មវិធីជំនួយដូចខាងក្រោមនឹងត្រូវបានផ្ទុកឡើង ។" + +msgid "Multiple plugins will be unloaded." +msgstr "កម្មវិធីជំនួយជាច្រើននឹងត្រូវបានផ្ទុកឡើង ។" + +msgid "Unload Plugins" +msgstr "ផ្ទុកឡើងកម្មវិធីជំនួយ" + +msgid "Could not unload plugin" +msgstr "មិនអាចផ្ទុកកម្មវិធីជំនួយឡើងបានទេ" + +msgid "" +"The plugin could not be unloaded now, but will be disabled at the next " +"startup." +msgstr "កម្មវិធីជំនួយមិនអាចត្រូវបានផ្ទុកឡើងឥឡូវទេ ប៉ុន្តែនឹងត្រូវបានបិទនៅពេលចាប់ផ្ដើមលើកក្រោយ ។" + +#, c-format +msgid "" +"<span foreground=\"red\" weight=\"bold\">Error: %s\n" +"Check the plugin website for an update.</span>" +msgstr "" +"<span foreground=\"red\" weight=\"bold\">កំហុស ៖ %s\n" +"ពិនិត្យមើលតំបន់បណ្ដាញកម្មវិធីជំនួយសម្រាប់ភាពទាន់សម័យ ។</span>" + +msgid "Author" +msgstr "អ្នកនិពន្ធ " + +msgid "<b>Written by:</b>" +msgstr "<b>បានសរសេរដោយ ៖</b>" + +msgid "<b>Web site:</b>" +msgstr "<b>តំបន់បណ្ដាញ ៖</b>" + +msgid "<b>Filename:</b>" +msgstr "<b>ឈ្មោះឯកសារ ៖</b>" + +msgid "Configure Pl_ugin" +msgstr "កំណត់រចនាសម្ព័ន្ធកម្មវិធីជំនួយ" + +msgid "<b>Plugin Details</b>" +msgstr "<b>សេចក្ដីលម្អិតកម្មវិធីជំនួយ</b>" + +msgid "Select a file" +msgstr "ជ្រើសឯកសារ" + +#. Create the "Pounce on Whom" frame. +msgid "Pounce on Whom" +msgstr "ក្រុមនៅលើអ្នកណា" + +msgid "_Buddy name:" +msgstr "ឈ្មោះមិត្តភក្ដិ ៖" + +msgid "Si_gns on" +msgstr "ចូល" + +msgid "Signs o_ff" +msgstr "ចេញ" + +msgid "Goes a_way" +msgstr "ចាកឆ្ងាយ" + +msgid "Ret_urns from away" +msgstr "ត្រឡប់ពីការចាកឆ្ងាយ" + +msgid "Becomes _idle" +msgstr "ក្លាយជាទំនេរ" + +msgid "Is no longer i_dle" +msgstr "មិនទំនេរទៀតទេ" + +msgid "Starts _typing" +msgstr "ចាប់ផ្ដើមវាយ" + +msgid "P_auses while typing" +msgstr "ផ្អាកខណៈពេលវាយ" + +msgid "Stops t_yping" +msgstr "ឈប់វាយ" + +msgid "Sends a _message" +msgstr "ផ្ញើសារ" + +msgid "Ope_n an IM window" +msgstr "បើកបង្អួច IM" + +msgid "_Pop up a notification" +msgstr "ការជូនដំណឹងលេចឡើង" + +msgid "Send a _message" +msgstr "ផ្ញើសារ" + +msgid "E_xecute a command" +msgstr "ប្រតិបត្តិពាក្យបញ្ជា" + +msgid "P_lay a sound" +msgstr "ចាក់សំឡេង" + +msgid "Brows_e..." +msgstr "រកមើល..." + +msgid "Br_owse..." +msgstr "រកមើល..." + +msgid "Pre_view" +msgstr "មើលជាមុន" + +msgid "P_ounce only when my status is not Available" +msgstr "តែក្រុមនៅពេលដែលស្ថានភាពខ្ញុំមិនអាចជជែកបាន" + +msgid "_Recurring" +msgstr "កើតឡើងវិញ" + +msgid "Pounce Target" +msgstr "ក្រុមគោលដៅ" + +msgid "Smiley theme failed to unpack." +msgstr "ស្បែកសញ្ញាណអារម្មណ៍បានបរាជ័យក្នុងការស្រាយ ។" + +msgid "Install Theme" +msgstr "ដំឡើងស្បែក" + +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." +msgstr "" +"ជ្រើសស្បែកសញ្ញាណញញឹមដែលអ្នកចង់ប្រើពីបញ្ជីខាងក្រោម ។ ស្បែកថ្មីអាចត្រូវបានអូស និងទម្លាក់ពួកវាទៅក្នុង" +"បញ្ជីស្បែក ។" + +msgid "Icon" +msgstr "រូបតំណាង" + +msgid "Keyboard Shortcuts" +msgstr "ផ្លូវកាត់ក្តារចុច" + +msgid "Cl_ose conversations with the Escape key" +msgstr "បិទការសន្ទនាដោយប្រើគ្រាប់ចុចគេច (Escape)" + +msgid "System Tray Icon" +msgstr "រូបតំណាងថាសប្រព័ន្ធ" + +msgid "_Show system tray icon:" +msgstr "បង្ហាញរូបតំណាងថាសប្រព័ន្ធ ៖" + +msgid "On unread messages" +msgstr "សារមិនទាន់អាន" + +msgid "Conversation Window Hiding" +msgstr "លាក់បង្អួចសន្ទនា" + +msgid "_Hide new IM conversations:" +msgstr "លាក់ការសន្ទនា IM ថ្មី ៖" + +msgid "When away" +msgstr "នៅពេលចាកឆ្ងាយ" + +#. All the tab options! +msgid "Tabs" +msgstr "ថេប" + +msgid "Show IMs and chats in _tabbed windows" +msgstr "បង្ហាញ IMs និងការជជែកនៅក្នុងបង្អួចជាថេប" + +msgid "Show close b_utton on tabs" +msgstr "បង្ហាញប៊ូតុងបិទនៅលើថេប" + +msgid "_Placement:" +msgstr "ការដាក់ ៖" + +msgid "Top" +msgstr "កំពូល" + +msgid "Bottom" +msgstr "បាត" + +msgid "Left" +msgstr "ឆ្វេង" + +msgid "Right" +msgstr "ស្តាំ" + +msgid "Left Vertical" +msgstr "បញ្ឈរឆ្វេង" + +msgid "Right Vertical" +msgstr "បញ្ឈរស្ដាំ" + +msgid "N_ew conversations:" +msgstr "ការសន្ទនាថ្មី ៖" + +msgid "Show _formatting on incoming messages" +msgstr "បង្ហាញការធ្វើទ្រង់ទ្រាយនៅពេលមានសារចូល" + +msgid "Close IMs immediately when the tab is closed" +msgstr "បិទ IMs ភ្លាមៗនៅពេលបិទផ្ទាំង" + +msgid "Show _detailed information" +msgstr "បង្ហាញព័ត៌មានលម្អិត" + +msgid "Enable buddy ic_on animation" +msgstr "បើកចលនារូបតំណាងរបស់មិត្តភក្ដិ" + +msgid "_Notify buddies that you are typing to them" +msgstr "ជូនដំណឹងមិត្តភក្ដិដេលអ្នកកំពុងវាយទៅកាន់ពួកគេ" + +msgid "Highlight _misspelled words" +msgstr "បន្លិចពាក្យដែលខុស" + +msgid "Use smooth-scrolling" +msgstr "ប្រើរមូររលូន" + +msgid "F_lash window when IMs are received" +msgstr "បង្អួច Flash នៅពេលបានទទួល IMs" + +msgid "Minimi_ze new conversation windows" +msgstr "បង្រួមបង្អួចសន្ទនាថ្មីអប្បបរមា" + +msgid "Minimum input area height in lines:" +msgstr "បង្រួមកម្ពស់ផ្ទៃបញ្ចូលគិតជាបន្ទាត់ ៖" + +msgid "Font" +msgstr "ពុម្ពអក្សរ" + +msgid "Use document font from _theme" +msgstr "ប្រើពុម្ពអក្សរឯកសារពីស្បែក" + +msgid "Use font from _theme" +msgstr "ប្រើពុម្ពអក្សរពីស្បែក" + +msgid "Conversation _font:" +msgstr "ពុម្ពអក្សរសន្ទនា ៖" + +msgid "Default Formatting" +msgstr "ការធ្វើទ្រង់ទ្រាយលំនាំដើម" + +msgid "" +"This is how your outgoing message text will appear when you use protocols " +"that support formatting." +msgstr "" +"នេះជាវិធីដែលអត្ថបទសារចេញរបស់នឹងបង្ហាញ នៅពេលដែលអ្នកប្រើពិធីការដែលគាំទ្រការធ្វើទ្រង់ទ្រាយ ។" + +msgid "Cannot start proxy configuration program." +msgstr "មិនអាចចាប់ផ្ដើមកម្មវិធីកំណត់រចនាសម្ព័ន្ធប្រូកស៊ីបានទេ ។" + +msgid "Cannot start browser configuration program." +msgstr "មិនអាចចាប់ផ្ដើមកម្មវិធីកំណត់រចនាសម្ព័ន្ធកម្មវិធីរុករកបានទេ ។" + +msgid "ST_UN server:" +msgstr "ម៉ាស៊ីនបម្រើ STUN ៖" + +msgid "<span style=\"italic\">Example: stunserver.org</span>" +msgstr "<span style=\"italic\">ឧទាហរណ៍ ៖ stunserver.org</span>" + +msgid "_Autodetect IP address" +msgstr "រកឃើញអាសយដ្ឋាន IP ដោយស្វ័យប្រវត្តិ" + +msgid "Public _IP:" +msgstr "IP សាធារណៈ" + +msgid "Ports" +msgstr "ច្រក" + +msgid "_Enable automatic router port forwarding" +msgstr "បើកការបញ្ជូនច្រករ៉ោត័របន្តដោយស្វ័យប្រវត្តិ" + +msgid "_Manually specify range of ports to listen on" +msgstr "បញ្ជាក់ជួរច្រកដែលត្រូវស្ដាប់ដោយដៃ" + +msgid "_Start port:" +msgstr "ច្រកចាប់ផ្ដើម ៖" + +msgid "_End port:" +msgstr "ច្រកបញ្ចប់ ៖" + +msgid "Proxy Server & Browser" +msgstr "ម៉ាស៊ីនបម្រើប្រូកស៊ី & កម្មវិធីរុករក" + +msgid "<b>Proxy configuration program was not found.</b>" +msgstr "<b>រកមិនឃើញកម្មវិធីកំណត់រចនាសម្ព័ន្ធប្រូកស៊ី ។</b>" + +msgid "<b>Browser configuration program was not found.</b>" +msgstr "<b>រកមិនឃើញកម្មវិធីកំណត់រចនាសម្ព័ន្ធរបស់កម្មវិធីរុករកទេ ។</b>" + +msgid "" +"Proxy & Browser preferences are configured\n" +"in GNOME Preferences" +msgstr "បានកំណត់រចនាសម្ព័ន្ធកម្មវិធីរុករក និងប្រូកស៊ីនៅក្នុងចំណូលចិត្តរបស់ GNOME" + +msgid "Configure _Proxy" +msgstr "កំណត់រចនាសម្ព័ន្ធប្រូកស៊ី" + +msgid "Configure _Browser" +msgstr "កំណត់រចនាសម្ព័ន្ធកម្មវិធីរុករក" + +msgid "Proxy Server" +msgstr "ម៉ាស៊ីនបម្រើប្រូកស៊ី" + +msgid "No proxy" +msgstr "គ្មានប្រូកស៊ី" + +#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings +msgid "Use remote DNS with SOCKS4 proxies" +msgstr "ប្រើ" + +msgid "_User:" +msgstr "អ្នកប្រើ ៖" + +msgid "Seamonkey" +msgstr "Seamonkey" + +msgid "Opera" +msgstr "Opera" + +msgid "Netscape" +msgstr "Netscape" + +msgid "Mozilla" +msgstr "Mozilla" + +msgid "Konqueror" +msgstr "Konqueror" + +msgid "Desktop Default" +msgstr "ផ្ទៃតុលំនាំដើម" + +msgid "GNOME Default" +msgstr "GNOME លំនាំដើម" + +msgid "Galeon" +msgstr "Galeon" + +msgid "Firefox" +msgstr "Firefox" + +msgid "Firebird" +msgstr "Firebird" + +msgid "Epiphany" +msgstr "Epiphany" + +msgid "Manual" +msgstr "សៀវភៅដៃ" + +msgid "Browser Selection" +msgstr "ជម្រើសកម្មវិធីរុករក" + +msgid "_Browser:" +msgstr "កម្មវិធីរុករក ៖" + +msgid "_Open link in:" +msgstr "បើកតំណនៅក្នុង ៖" + +msgid "Browser default" +msgstr "កម្មវិធីរុករកលំនាំដើម" + +msgid "Existing window" +msgstr "មានបង្អួចរួចហើយ" + +msgid "New tab" +msgstr "ផ្ទាំងថ្មី" + +#, c-format +msgid "" +"_Manual:\n" +"(%s for URL)" +msgstr "" +"សៀវភៅដៃ ៖\n" +"(%s សម្រាប់ URL)" + +msgid "Log _format:" +msgstr "ទ្រង់ទ្រាយកំណត់ហេតុ ៖" + +msgid "Log all _instant messages" +msgstr "ចុះកំណត់ហេតុសារបន្ទាន់ទាំងអស់" + +msgid "Log all c_hats" +msgstr "ចុះកំណត់ហេតុការជជែកទាំងអស់" + +msgid "Log all _status changes to system log" +msgstr "ចុះកំណត់ហេតុការផ្លាស់ប្ដូរស្ថានភាពទៅកំណត់ហេតុប្រព័ន្ធ" + +msgid "Sound Selection" +msgstr "ការជ្រើសសំឡេង" + +#, c-format +msgid "Quietest" +msgstr "ស្ងាត់បំផុត" + +#, c-format +msgid "Quieter" +msgstr "ស្ងាត់ជាង" + +#, c-format +msgid "Quiet" +msgstr "ស្ងាត់" + +#, c-format +msgid "Loud" +msgstr "ឮ" + +#, c-format +msgid "Louder" +msgstr "ឮខ្លាំងជាង" + +#, c-format +msgid "Loudest" +msgstr "ឮខ្លាំងបំផុត" + +msgid "_Method:" +msgstr "វិធីសាស្ត្រ ៖" + +msgid "Console beep" +msgstr "ប៊ីបរបស់កុងសូល" + +msgid "No sounds" +msgstr "គ្មានសំឡេង" + +#, c-format +msgid "" +"Sound c_ommand:\n" +"(%s for filename)" +msgstr "" +"ពាក្យបញ្ជាសំឡេង ៖\n" +"(%s សម្រាប់ឈ្មោះឯកសារ)" + +msgid "M_ute sounds" +msgstr "ស្ងាត់" + +msgid "Sounds when conversation has _focus" +msgstr "សំឡេងនៅពេលផ្ដោតការសន្ទនា" + +msgid "_Enable sounds:" +msgstr "បើកជម្រើស ៖" + +msgid "V_olume:" +msgstr "កម្រិតសំឡេង ៖" + +msgid "Play" +msgstr "ចាក់" + +msgid "_Browse..." +msgstr "រកមើល..." + +msgid "_Reset" +msgstr "កំណត់ឡើងវិញ" + +msgid "_Report idle time:" +msgstr "រាយការណ៍ពេលវេលាទំនេរ ៖" + +msgid "Based on keyboard or mouse use" +msgstr "មានមូលដ្ឋានលើការប្រើក្ដារចុច ឬកណ្ដុរ" + +msgid "_Auto-reply:" +msgstr "ឆ្លើយតបដោយស្វ័យប្រវត្តិ ៖" + +msgid "When both away and idle" +msgstr "នៅពេលអ្នកទាំងពីរចាកឆ្ងាយ ឬទំនេរ" + +#. Auto-away stuff +msgid "Auto-away" +msgstr "ចាកឆ្ងាយស្វ័យប្រវត្តិ" + +msgid "Change status when _idle" +msgstr "ផ្លាស់ប្ដូរស្ថានភាពនៅពេលទំនេរ" + +msgid "_Minutes before becoming idle:" +msgstr "ប៉ុន្មាននាទីមុននឹងក្លាយជាទំនេរ ៖" + +msgid "Change _status to:" +msgstr "ផ្លាស់ប្ដូរស្ថានភាពទៅជា ៖" + +#. Signon status stuff +msgid "Status at Startup" +msgstr "ស្ថានភាពនៅពេលចាប់ផ្ដើម" + +msgid "Use status from last _exit at startup" +msgstr "ប្រើស្ថានភាពពីការចេញចុងក្រោយនៅពេលចាប់ផ្ដើម" + +msgid "Status to a_pply at startup:" +msgstr "ស្ថានភាពត្រូវអនុវត្តនៅពេលចាប់ផ្ដើម ៖" + +msgid "Interface" +msgstr "ចំណុចប្រទាក់" + +msgid "Smiley Themes" +msgstr "ស្បែកសញ្ញាណអារម្មណ៍" + +msgid "Browser" +msgstr "កម្មវិធីរុករក" + +msgid "Status / Idle" +msgstr "ស្ថានភាព/ទំនេរ" + +msgid "Allow all users to contact me" +msgstr "អនុញ្ញាតឲ្យអ្នកប្រើទាំងអស់ទាក់ទងខ្ញុំ" + +msgid "Allow only the users on my buddy list" +msgstr "អនុញ្ញាតតែអ្នកប្រើនៅក្នុងបញ្ជីមិត្តភក្ដិរបស់ខ្ញុំប៉ុណ្ណោះ" + +msgid "Allow only the users below" +msgstr "អនុញ្ញាតតែអ្នកប្រើខាងក្រោមប៉ុណ្ណោះ" + +msgid "Block all users" +msgstr "ទប់ស្កាត់អ្នកប្រើទាំងអស់" + +msgid "Block only the users below" +msgstr "ទប់ស្កាត់តែអ្នកប្រើខាងក្រោមប៉ុណ្ណោះ" + +msgid "Privacy" +msgstr "ភាពឯកជន" + +msgid "Changes to privacy settings take effect immediately." +msgstr "ផ្លាស់ប្ដូរទៅការកំណត់ភាពឯកជននឹងមានប្រសិទ្ធភាពភ្លាម ។" + +msgid "Set privacy for:" +msgstr "កំណត់ភាពឯកជនសម្រាប់ ៖" + +#. Remove All button +msgid "Remove Al_l" +msgstr "យកចេញទាំងអស់" + +msgid "Permit User" +msgstr "អនុញ្ញាតអ្នកប្រើ" + +msgid "Type a user you permit to contact you." +msgstr "វាយអ្នកប្រើ ដែលអ្នកអនុញ្ញាតឲ្យទាក់ទងអ្នក ។" + +msgid "Please enter the name of the user you wish to be able to contact you." +msgstr "សូមបញ្ចូលឈ្មោះអ្នកប្រើ ដែលអ្នកចង់ឲ្យទាក់ទងអ្នក ។" + +msgid "_Permit" +msgstr "អនុញ្ញាត" + +#, c-format +msgid "Allow %s to contact you?" +msgstr "អនុញ្ញាតឲ្យ %s ទាក់ទងអ្នក ?" + +#, c-format +msgid "Are you sure you wish to allow %s to contact you?" +msgstr "តើអ្នកប្រាកដជាចង់អនុញ្ញាតឲ្យ %s ទាក់ទងអ្នកឬ ?" + +msgid "Block User" +msgstr "ទប់ស្កាត់អ្នកប្រើ" + +msgid "Type a user to block." +msgstr "វាយអ្នកប្រើត្រូវទប់ស្កាត់ ។" + +msgid "Please enter the name of the user you wish to block." +msgstr "សូមបញ្ចូលឈ្មោះអ្នកប្រើដែលអ្នកចង់ទប់ស្កាត់ ។" + +#, c-format +msgid "Block %s?" +msgstr "ទប់ស្កាត់ %s?" + +#, c-format +msgid "Are you sure you want to block %s?" +msgstr "តើអ្នកប្រាកដជាចង់ទប់ស្កាត់ %s ឬ ?" + +msgid "Apply" +msgstr "អនុវត្ត" + +msgid "That file already exists" +msgstr "មានឯកសារនោះរួចហើយ" + +msgid "Would you like to overwrite it?" +msgstr "តើអ្នកចង់សរសេរជាន់លើវាឬ ?" + +msgid "Overwrite" +msgstr "សរសេរជាន់លើ" + +msgid "Choose New Name" +msgstr "ជ្រើសឈ្មោះថ្មី" + +msgid "Select Folder..." +msgstr "ជ្រើសថត ។" + +#. list button +msgid "_Get List" +msgstr "យកបញ្ជី" + +#. add button +msgid "_Add Chat" +msgstr "បន្ថែមការជជែក" + +msgid "Are you sure you want to delete the selected saved statuses?" +msgstr "តើអ្នកប្រាកដជាលុបស្ថានភាពដែលបានរក្សាទុកដែលបានជ្រើសឬ ?" + +#. Use button +msgid "_Use" +msgstr "ប្រើ" + +msgid "Title already in use. You must choose a unique title." +msgstr "មានចំណងជើងរួចហើយ ។ អ្នកត្រូវតែជ្រើសចំណងជើងតែមួយ ។" + +msgid "Different" +msgstr "ខុសគ្នា" + +msgid "_Title:" +msgstr "ចំណងជើង ៖" + +msgid "_Status:" +msgstr "ស្ថានភាព ៖" + +#. Different status message expander +msgid "Use a _different status for some accounts" +msgstr "ប្រើស្ថានភាពផ្សេងសម្រាប់គណនីមួយចំនួន" + +#. Save & Use button +msgid "Sa_ve & Use" +msgstr "រក្សាទុកការប្រើ" + +#, c-format +msgid "Status for %s" +msgstr "ស្ថានភាពសម្រាប់ %s" + +msgid "Custom Smiley" +msgstr "សញ្ញាអារម្មណ៍ផ្ទាល់ខ្លួន" + +msgid "More Data needed" +msgstr "ត្រូវការទិន្នន័យបន្ថែមទៀត" + +msgid "Please provide a shortcut to associate with the smiley." +msgstr "សូមផ្ដល់នូវផ្លូវកាត់ដើម្បីភ្ជាប់ជាមួយនឹងសញ្ញាអារម្មណ៍ ។" + +msgid "Duplicate Shortcut" +msgstr "ផ្លូវកាត់ស្ទួន" + +msgid "" +"A custom smiley for the selected shortcut already exists. Please specify a " +"different shortcut." +msgstr "សញ្ញាអារម្មណ៍ផ្ទាល់ខ្លួនសម្រាប់ផ្លូវកាត់ដែលបានជ្រើសមានរួចហើយ ។ សូមបញ្ជីផ្លូវកាត់ផ្សេង ។" + +msgid "Please select an image for the smiley." +msgstr "សូមជ្រើសរូបភាពសម្រាប់សញ្ញាអារម្មណ៍ ។" + +msgid "Edit Smiley" +msgstr "កែសម្រួលសញ្ញាអារម្មណ៍" + +msgid "Add Smiley" +msgstr "បន្ថែមសញ្ញាអារម្មណ៍" + +msgid "Smiley _Image" +msgstr "រូបភាពសញ្ញាអារម្មណ៍" + +#. Smiley shortcut +msgid "Smiley S_hortcut" +msgstr "ផ្លូវកាត់សញ្ញាអារម្មណ៍" + +msgid "Smiley" +msgstr "សញ្ញាអារម្មណ៍" + +msgid "Custom Smiley Manager" +msgstr "កម្មវិធីគ្រប់គ្រងសញ្ញាអារម្មណ៍ផ្ទាល់ខ្លួន" + +msgid "Click to change your buddyicon for this account." +msgstr "ចុចដើម្បីផ្លាស់ប្ដូររូបតំណាងមិត្តភក្ដិរបស់អ្នកសម្រាប់គណនីនេះ ។" + +msgid "Click to change your buddyicon for all accounts." +msgstr "ចុចដើម្បីផ្លាស់ប្ដូររូបតំណាងមិត្តភក្ដិរបស់អ្នកសម្រាប់គណនីទាំងអស់ ។" + +msgid "Waiting for network connection" +msgstr "រង់ចាំការតភ្ជាប់បណ្ដាញ" + +msgid "New status..." +msgstr "ស្ថានភាពថ្មី..." + +msgid "Saved statuses..." +msgstr "ស្ថានភាពដែលបានរក្សាទុក..." + +msgid "Status Selector" +msgstr "កម្មវិធីជ្រើសស្ថានភាព" + +msgid "Google Talk" +msgstr "Google Talk" + +#, c-format +msgid "The following error has occurred loading %s: %s" +msgstr "កំហុសដូចខាងក្រោមបានកើតឡើងកំឡុងពេលផ្ទុក %s ៖ %s" + +msgid "Failed to load image" +msgstr "បានបរាជ័យក្នុងការផ្ទុករូបភាព" + +#, c-format +msgid "Cannot send folder %s." +msgstr "មិនអាចផ្ញើថត %s បានទេ ។" + +#, c-format +msgid "" +"%s cannot transfer a folder. You will need to send the files within " +"individually." +msgstr "%s មិនអាចផ្ទេរថតបានទេ ។ អ្នកនឹងត្រូវផ្ញើឯកសាររៀងខ្លួនៗ ។" + +msgid "You have dragged an image" +msgstr "អ្នកបានអូសរូបភាព" + +msgid "" +"You can send this image as a file transfer, embed it into this message, or " +"use it as the buddy icon for this user." +msgstr "" +"អ្នកអាចផ្ញើរូបភាពនេះជាការផ្ទេរឯកសារ បង្កប់វាក្នុងសារនេះ ឬប្រើវាជារូបតំណាងមិត្តភក្ដិសម្រាប់ការ" +"ប្រើនេះ ។" + +msgid "Set as buddy icon" +msgstr "កំណត់ជារូបតំណាងមិត្តភក្ដិ" + +msgid "Send image file" +msgstr "ផ្ញើឯកសាររូបភាព" + +msgid "Insert in message" +msgstr "បញ្ចូលក្នុងសារ" + +msgid "Would you like to set it as the buddy icon for this user?" +msgstr "តើអ្នកចង់កំណត់ជារូបតំណាងមិត្តភក្ដិសម្រាប់អ្នកប្រើនេះដែរឬទេ ?" + +msgid "" +"You can send this image as a file transfer, or use it as the buddy icon for " +"this user." +msgstr "អ្នកអាចផ្ញើរូបភាពនេះជាការផ្ទេរឯកសារ ឬប្រើវាជារូបតំណាងមិត្តភក្ដិសម្រាប់អ្នកប្រើនេះ ។" + +msgid "" +"You can insert this image into this message, or use it as the buddy icon for " +"this user" +msgstr "អ្នកអាចបញ្ចូលរូបភាពនេះក្នុងសារនេះ ឬប្រើវាជារូបតំណាងមិត្តភក្ដិសម្រាប់អ្នកប្រើនេះ" + +#. I don't know if we really want to do anything here. Most of the desktop item types are crap like +#. * "MIME Type" (I have no clue how that would be a desktop item) and "Comment"... nothing we can really +#. * send. The only logical one is "Application," but do we really want to send a binary and nothing else? +#. * Probably not. I'll just give an error and return. +#. The original patch sent the icon used by the launcher. That's probably wrong +msgid "Cannot send launcher" +msgstr "មិនអាចផ្ញើកម្មវិធីចាប់ផ្ដើមបានទេ" + +msgid "" +"You dragged a desktop launcher. Most likely you wanted to send whatever this " +"launcher points to instead of this launcher itself." +msgstr "" +"អ្នកបានអូសកម្មវិធីចាប់ផ្ដើមផ្ទៃតុ ។ ទំនងជាអ្នកចង់ផ្ញើអ្វីកម្មវិធីនេះចង្អុលទៅកម្មវិធីចាប់ផ្ដើមនេះជំនួសវិញ " +"។" + +#, c-format +msgid "" +"<b>File:</b> %s\n" +"<b>File size:</b> %s\n" +"<b>Image size:</b> %dx%d" +msgstr "" +"<b>ឯកសារ ៖</b> %s\n" +"<b>ទំហំឯកសារ ៖</b> %s\n" +"<b>ទំហំរូបភាព ៖</b> %dx%d" + +#, c-format +msgid "The file '%s' is too large for %s. Please try a smaller image.\n" +msgstr "ឯកសារ '%s' ធំពេកសម្រាប់ %s ។ សូមព្យាយាមរូបភាពដែលតូចជាងនេះ ។\n" + +msgid "Icon Error" +msgstr "កំហុសរូបតំណាង" + +msgid "Could not set icon" +msgstr "មិនអាចកំណត់រូបតំណាងបានទេ" + +#, c-format +msgid "Failed to open file '%s': %s" +msgstr "បានបរាជ័យក្នុងការបើកឯកសារ '%s' ៖ %s" + +#, c-format +msgid "" +"Failed to load image '%s': reason not known, probably a corrupt image file" +msgstr "បានបរាជ័យក្នុងការផ្ទុករូបភាព '%s' ៖ មិនស្គាល់ហេតុផល ប្រហែលជាឯកសាររូបភាពតូច" + +msgid "Save File" +msgstr "រក្សាទុកឯកសារ" + +msgid "Select color" +msgstr "ជ្រើសពណ៌" + +msgid "_Alias" +msgstr "ឈ្មោះក្លែងក្លាយ" + +msgid "Close _tabs" +msgstr "បិទផ្ទាំង" + +msgid "_Get Info" +msgstr "យកព័ត៌មាន" + +msgid "_Invite" +msgstr "អញ្ជើញ" + +msgid "_Modify..." +msgstr "កែប្រែ..." + +msgid "_Add..." +msgstr "បន្ថែម..." + +msgid "_Open Mail" +msgstr "បើកសំបុត្រ" + +msgid "_Edit" +msgstr "កែសម្រួល" + +msgid "Pidgin Tooltip" +msgstr "ព័ត៌មានជំនួយ Pidgin" + +msgid "Pidgin smileys" +msgstr "សញ្ញាអារម្មណ៍របស់ Pidgin" + +msgid "Penguin Pimps" +msgstr "Penguin Pimps" + +msgid "Selecting this disables graphical emoticons." +msgstr "ជ្រើសសញ្ញាអារម្មណ៍ក្រាហ្វិកដែលបិទនេះ ។" + +msgid "none" +msgstr "គ្មាន" + +msgid "Small" +msgstr "តូច" + +msgid "Smaller versions of the default smilies" +msgstr "កំណែតូចរបស់សញ្ញាអារម្មណ៍លំនាំដើម" + +msgid "Response Probability:" +msgstr "ប្រូបាប៊ីលីតេឆ្លើយតប ៖" + +msgid "Statistics Configuration" +msgstr "ការកំណត់រចនាសម្ព័ន្ធស្ថិតិ" + +#. msg_difference spinner +msgid "Maximum response timeout:" +msgstr "អស់ពេលឆ្លើយតបអតិបរមា ៖" + +msgid "minutes" +msgstr "នាទី" + +#. last_seen spinner +msgid "Maximum last-seen difference:" +msgstr "ភាពខុសគ្នាដែលបានឃើញចុងក្រោយអតិបរមា ៖" + +#. threshold spinner +msgid "Threshold:" +msgstr "កម្រិតពន្លឺ ៖" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Contact Availability Prediction" +msgstr "មានការទាយទំនាក់ទំនង" + +#. *< name +#. *< version +msgid "Contact Availability Prediction plugin." +msgstr "មានកម្មវិធីជំនួយទាយទំនាក់ទំនង ។" + +#. * summary +msgid "Displays statistical information about your buddies' availability" +msgstr "បង្ហាញព័ត៌មានស្ថិតិអំពីភាពអាចប្រើបាននៃមិត្តភក្ដិរបស់អ្នក" + +msgid "Buddy is idle" +msgstr "មិត្តភក្ដិទំនេរ" + +msgid "Buddy is away" +msgstr "មិត្តភក្ដិចាកឆ្ងាយ" + +msgid "Buddy is \"extended\" away" +msgstr "មិត្តភក្ដិត្រូវបាន \"ពន្យារ\" ការចាកឆ្ងាយ" + +#. Not used yet. +msgid "Buddy is mobile" +msgstr "មិត្តភក្ដិចល័ត" + +msgid "Buddy is offline" +msgstr "មិត្តភក្ដិក្រៅបណ្ដាញ" + +msgid "Point values to use when..." +msgstr "ចង្អុលតម្លៃត្រូវប្រើនៅពេល..." + +msgid "" +"The buddy with the <i>largest score</i> is the buddy who will have priority " +"in the contact.\n" +msgstr "មិត្តភក្ដិដែលមាន <i>ពិន្ទុធំ</i> គឺជាមិត្តភក្ដិដែលនឹងមានអាទិភាពនៅក្នុងការជជែក ។\n" + +msgid "Use last buddy when scores are equal" +msgstr "ប្រើមិត្តភក្ដិចុងក្រោយនៅពេលពិន្ទុស្មើគ្នា" + +msgid "Point values to use for account..." +msgstr "ចង្អុលតម្លៃដើម្បីប្រើសម្រាប់គណនី..." + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Contact Priority" +msgstr "អាទិភាពទំនាក់ទំនង" + +#. *< name +#. *< version +#. *< summary +msgid "" +"Allows for controlling the values associated with different buddy states." +msgstr "អនុញ្ញាតសម្រាប់ពិនិត្យតម្លៃដែលភ្ជាប់ជាមួយនឹងស្ថានភាពមិត្តភក្ដិផ្សេងៗ ។" + +#. *< description +msgid "" +"Allows for changing the point values of idle/away/offline states for buddies " +"in contact priority computations." +msgstr "" +"អនុញ្ញាតឲ្យផ្លាស់ប្ដូរតម្លៃចង្អុលនៃស្ថានភាពទំនេរ/ចាកឆ្ងាយ/ក្រៅបណ្ដាញសម្រាប់មិត្តភក្ដិនៅក្នុងការគណនា" +"អាទិភាពទំនាក់ទំនង ។" + +msgid "Conversation Colors" +msgstr "ពណ៌សន្ទនា" + +msgid "Customize colors in the conversation window" +msgstr "ប្ដូរពណ៌តាមបំណងនៅក្នុងបង្អួចសន្ទនា" + +msgid "Error Messages" +msgstr "សារកំហុស" + +msgid "Highlighted Messages" +msgstr "សារដែលបានបន្លិច" + +msgid "System Messages" +msgstr "សារប្រព័ន្ធ" + +msgid "Sent Messages" +msgstr "សារបានផ្ញើ" + +msgid "Received Messages" +msgstr "សារបានទទួល" + +#, c-format +msgid "Select Color for %s" +msgstr "ជ្រើសពណ៌សម្រាប់ %s" + +msgid "Ignore incoming format" +msgstr "មិនអើពើទ្រង់ទ្រាយចូល" + +msgid "Apply in Chats" +msgstr "អនុវត្តក្នុងការជជែក" + +msgid "Apply in IMs" +msgstr "អនុវត្តក្នុង IMs" + +msgid "By conversation count" +msgstr "តាមចំនួនសន្ទនា" + +msgid "Conversation Placement" +msgstr "ការដាក់ការសន្ទនា" + +#. Translators: "New conversations" should match the text in the preferences dialog and "By conversation count" should be the same text used above +msgid "" +"Note: The preference for \"New conversations\" must be set to \"By " +"conversation count\"." +msgstr "ចំណាំ ៖ ចំណូលចិត្តសម្រាប់ \"ការសន្ទនាថ្មី\" ត្រូវតែបានកំណត់ទៅ \"តាមចំនួនសន្ទនា\" ។" + +msgid "Number of conversations per window" +msgstr "ចំនួនសន្ទនាក្នុងមួយបង្អួច" + +msgid "Separate IM and Chat windows when placing by number" +msgstr "បំបែក IM និងបង្អួចជជែកនៅពេលដាក់តាមលេខ" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "ExtPlacement" +msgstr "ExtPlacement" + +#. *< name +#. *< version +msgid "Extra conversation placement options." +msgstr "ជម្រើសដាក់ការសន្ទនាបន្ថែម" + +#. *< summary +#. * description +msgid "" +"Restrict the number of conversations per windows, optionally separating IMs " +"and Chats" +msgstr "ដាក់កម្រិតចំនួនសន្ទនាក្នុងមួយបង្អួច ជាជម្រើសបំបែក IMs និងការជជែក" + +#. Configuration frame +msgid "Mouse Gestures Configuration" +msgstr "ការកំណត់រចនាសម្ព័ន្ធកាយវិការកណ្ដុរ" + +msgid "Middle mouse button" +msgstr "ប៊ូតុងកណ្ដុរកណ្ដាល" + +msgid "Right mouse button" +msgstr "ប៊ូតុងកណ្ដុរស្ដាំ" + +#. "Visual gesture display" checkbox +msgid "_Visual gesture display" +msgstr "បង្ហាញកាយវិការដែលមើលឃើញ" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Mouse Gestures" +msgstr "កាយវិការកណ្ដុរ" + +#. *< name +#. *< version +#. * summary +msgid "Provides support for mouse gestures" +msgstr "ផ្ដល់នូវការគាំទ្រសម្រាប់កាយវិការកណ្ដុរ" + +#. * description +msgid "" +"Allows support for mouse gestures in conversation windows. Drag the middle " +"mouse button to perform certain actions:\n" +" • Drag down and then to the right to close a conversation.\n" +" • Drag up and then to the left to switch to the previous conversation.\n" +" • Drag up and then to the right to switch to the next conversation." +msgstr "" +"អនុញ្ញាតឲ្យគាំទ្រកាយវិការកណ្ដុរនៅក្នុងបង្អួចសន្ទនា ។ អូសប៊ូតុងកណ្ដុរកណ្ដាលដើម្បីអនុវត្តសកម្មភាពមួយចំនួនដូច" +"ខាងក្រោម ៖\n" +" • អូសចុះក្រោម ហើយបន្ទាប់មកទៅស្ដាំដើម្បីបិទការសន្ទនា ។\n" +" • អូសឡើងលើ ហើយបន្ទាប់មកទៅឆ្វេងដើម្បីប្ដូរទៅការសន្ទនាមុន ។\n" +" • អូសឡើងលើ ហើយបន្ទាប់មកទៅស្ដាំដើម្បីប្ដូរទៅការសន្ទនាបន្ទាប់ ។" + +msgid "Instant Messaging" +msgstr "ការផ្ញើសារបន្ទាន់" + +#. Add the label. +msgid "Select a person from your address book below, or add a new person." +msgstr "ជ្រើសមនុស្សពីសៀវភៅអាសយដ្ឋានខាងក្រោម ឬបន្ថែមមនុស្សថ្មី ។" + +msgid "Group:" +msgstr "ក្រុម ៖" + +#. "New Person" button +msgid "New Person" +msgstr "មនុស្សថ្មី" + +#. "Select Buddy" button +msgid "Select Buddy" +msgstr "ជ្រើសមិត្តភក្ដិ" + +#. Add the label. +msgid "" +"Select a person from your address book to add this buddy to, or create a new " +"person." +msgstr "ជ្រើសមនុស្សពីសៀវភៅអាសយដ្ឋានរបស់អ្នក ដើម្បីបន្ថែមមិត្តភក្ដិ ឬបង្កើតមនុស្សថ្មី ។" + +#. Add the expander +msgid "User _details" +msgstr "សេចក្ដីលម្អិតអ្នកប្រើ" + +#. "Associate Buddy" button +msgid "_Associate Buddy" +msgstr "ភ្ជាប់មិត្តភក្ដិ" + +msgid "Unable to send email" +msgstr "មិនអាចផ្ញើអ៊ីមែលបានទេ" + +msgid "The evolution executable was not found in the PATH." +msgstr "រកមិនឃើញ evolution ដែលអាចប្រតិបត្តិបាននៅក្នុង PATH ។" + +msgid "An email address was not found for this buddy." +msgstr "រកមិនឃើញអាសយដ្ឋានអ៊ីមែលសម្រាប់មិត្តភក្ដិនេះទេ ។" + +msgid "Add to Address Book" +msgstr "បន្ថែមទៅសៀវភៅអាសយដ្ឋាន" + +msgid "Send Email" +msgstr "ផ្ញើអ៊ីមែល" + +#. Configuration frame +msgid "Evolution Integration Configuration" +msgstr "ការកំណត់រចនាសម្ព័ន្ធការរួមបញ្ចូល Evolution" + +#. Label +msgid "Select all accounts that buddies should be auto-added to." +msgstr "ជ្រើសគណនីទាំងអស់ដែលមិត្តភក្ដិគួរត្រូវបានបន្ថែមដោយស្វ័យប្រវត្តិ ។" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Evolution Integration" +msgstr "ការរួមបញ្ចូល Evolution" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Provides integration with Evolution." +msgstr "ផ្ដល់នូវការបញ្ចូលជាមួយ Evolution ។" + +msgid "Please enter the person's information below." +msgstr "សូមបញ្ចូលព័ត៌មានរបស់មនុស្សខាងក្រោម ។" + +msgid "Please enter the buddy's username and account type below." +msgstr "សូមបញ្ចូលឈ្មោះអ្នកប្រើរបស់មិត្តភក្ដិ និងប្រភេទគណនីខាងក្រោម ។" + +msgid "Account type:" +msgstr "ប្រភេទគណនី ៖" + +#. Optional Information section +msgid "Optional information:" +msgstr "ព័ត៌មានជម្រើស ៖" + +msgid "First name:" +msgstr "នាមខ្លួន ៖" + +msgid "Last name:" +msgstr "នាមត្រកូល ៖" + +msgid "Email:" +msgstr "អ៊ីមែល ៖" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "GTK Signals Test" +msgstr "ការសាកល្បងសញ្ញា GTK" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Test to see that all ui signals are working properly." +msgstr "សាកល្បងដើម្បីមើលសញ្ញាចំណុចប្រទាក់អ្នកប្រើទាំងអស់ដែលកំពុងដំណើរការយ៉ាងត្រឹមត្រូវ ។" + +#, c-format +msgid "" +"\n" +"<b>Buddy Note</b>: %s" +msgstr "" +"\n" +"<b>ចំណាំមិត្តភក្ដិ</b> ៖ %s" + +msgid "History" +msgstr "ប្រវត្តិ" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Iconify on Away" +msgstr "កំណត់រូបតំណាងនៅពេលចាកឆ្ងាយ" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Iconifies the buddy list and your conversations when you go away." +msgstr "កំណត់រូបតំណាងបញ្ជីមិត្តភក្ដិ និងការសន្ទនារបស់អ្នកនៅពេលចាកឆ្ងាយ ។" + +msgid "Mail Checker" +msgstr "កម្មវិធីពិនិត្យសំបុត្រ" + +msgid "Checks for new local mail." +msgstr "ពិនិត្យមើលសំបុត្រមូលដ្ឋានថ្មី ។" + +msgid "Adds a small box to the buddy list that shows if you have new mail." +msgstr "បន្ថែមប្រអប់តូចទៅកាន់បញ្ជីមិត្តភក្ដិ ដែលបង្ហាញប្រសិនបើអ្នកមានសំបុត្រថ្មី ។" + +msgid "Markerline" +msgstr "បន្ទាត់សញ្ញាសម្គាល់" + +msgid "Draw a line to indicate new messages in a conversation." +msgstr "គូរបន្ទាត់ដើម្បីបង្ហាញសារថ្មីនៅក្នុងកសារសន្ទនា ។" + +msgid "Jump to markerline" +msgstr "លោតទៅបន្ទាត់សញ្ញាសម្គាល់" + +msgid "Draw Markerline in " +msgstr "គូរបន្ទាត់សញ្ញាសម្គាល់នៅក្នុង" + +msgid "_IM windows" +msgstr "បង្អួច IM" + +msgid "C_hat windows" +msgstr "បង្អួចការជជែក" + +msgid "" +"A music messaging session has been requested. Please click the MM icon to " +"accept." +msgstr "បានស្នើសម័យផ្ញើសារតន្ត្រី ។ សូមចុចរូបតំណាង MM ដើម្បីទទួលយក ។" + +msgid "Music messaging session confirmed." +msgstr "បានអះអាងសម័យផ្ញើសារតន្ត្រី ។" + +msgid "Music Messaging" +msgstr "ការផ្ញើសារតន្ត្រី" + +msgid "There was a conflict in running the command:" +msgstr "មានការប៉ះទង្គិចក្នុងការរត់ពាក្យបញ្ជា ៖" + +msgid "Error Running Editor" +msgstr "កំហុសក្នុងការរត់កម្មវិធីកែសម្រួល" + +msgid "The following error has occurred:" +msgstr "កំហុសដូចខាងក្រោមបានកើតឡើង ៖" + +#. Configuration frame +msgid "Music Messaging Configuration" +msgstr "ការកំណត់រចនាសម្ព័ន្ធការផ្ញើសារតន្ត្រី" + +msgid "Score Editor Path" +msgstr "ដាក់ពិន្ទុផ្លូវកម្មវិធីកែសម្រួល" + +msgid "_Apply" +msgstr "អនុវត្ត" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +msgid "Music Messaging Plugin for collaborative composition." +msgstr "កម្មវិធីជំនួយផ្ញើសារតន្ត្រីសម្រាប់ការតែងសហការណ៍ ។" + +#. * summary +msgid "" +"The Music Messaging Plugin allows a number of users to simultaneously work " +"on a piece of music by editting a common score in real-time." +msgstr "" +"កម្មវិធីផ្ញើសារតន្ត្រីអនុញ្ញាតឲ្យអ្នកប្រើជាច្រើនធ្វើការដំណាលគ្នាលើផ្នែកតន្ត្រីដោយកែសម្រួលពិន្ទុធម្មតានៅ" +"ក្នុងពេលវេលាពិតប្រាកដ ។" + +#. ---------- "Notify For" ---------- +msgid "Notify For" +msgstr "ជូនដំណឹងសម្រាប់" + +msgid "\t_Only when someone says your username" +msgstr "\tតែនៅពេលមានអ្នកណាម្នាក់និយាយអំពីឈ្មោះអ្នកប្រើរបស់អ្នក" + +msgid "_Focused windows" +msgstr "បង្អួចបានផ្ដោតអារម្មណ៍" + +#. ---------- "Notification Methods" ---------- +msgid "Notification Methods" +msgstr "វិធីសាស្ត្រជូនដំណឹង" + +msgid "Prepend _string into window title:" +msgstr "បន្ថែមខ្សែអក្សរទៅចំណងជើងបង្អួច ៖" + +#. Count method button +msgid "Insert c_ount of new messages into window title" +msgstr "បញ្ចូលចំនួនសារថ្មីទៅក្នុងចំណងជើងបង្អួច" + +#. Count xprop method button +msgid "Insert count of new message into _X property" +msgstr "បញ្ចូលចំនួនសារថ្មីទៅក្នុងលក្ខណៈសម្បត្តិ X" + +#. Urgent method button +msgid "Set window manager \"_URGENT\" hint" +msgstr "កំណត់ជំនួយកម្មវិធីគ្រប់គ្រងបង្អួច \"_URGENT\"" + +msgid "_Flash window" +msgstr "បញ្ចេញពន្លឺ" + +#. Raise window method button +msgid "R_aise conversation window" +msgstr "លើកបង្អួចសន្ទនាឡើងលើ" + +#. Present conversation method button +msgid "_Present conversation window" +msgstr "បង្ហាញបង្អួចសន្ទនា" + +#. ---------- "Notification Removals" ---------- +msgid "Notification Removal" +msgstr "យកការជូនដំណឹងចេញ" + +#. Remove on focus button +msgid "Remove when conversation window _gains focus" +msgstr "យកចេញនៅពេលមានការផ្ដោតលើបង្អួចសន្ទនា" + +#. Remove on click button +msgid "Remove when conversation window _receives click" +msgstr "យកចេញនៅពេលចុចបង្អួចសន្ទនា" + +#. Remove on type button +msgid "Remove when _typing in conversation window" +msgstr "យកចេញនៅពេលវាយក្នុងបង្អួចសន្ទនា" + +#. Remove on message send button +msgid "Remove when a _message gets sent" +msgstr "យកចេញនៅពេលបានផ្ញើសារ" + +#. Remove on conversation switch button +msgid "Remove on switch to conversation ta_b" +msgstr "យកចេញនៅពេលប្ដូរទៅផ្ទាងសន្ទនា" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Message Notification" +msgstr "ការជូនដំណឹងសារ" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "Provides a variety of ways of notifying you of unread messages." +msgstr "ផ្ដល់នូវវិធីផ្សេងៗនៃការជូនដំណឹងអ្នកអំពីសារមិនទាន់អាន ។" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Pidgin Demonstration Plugin" +msgstr "កម្មវិធីជំនួយបង្ហាញរបស់ Pidgin" + +#. *< name +#. *< version +#. * summary +msgid "An example plugin that does stuff - see the description." +msgstr "កម្មវិធីជំនួយគំរូដែលធ្វើការ - សូមសេចក្ដិពិពណ៌នា ។" + +#. * description +msgid "" +"This is a really cool plugin that does a lot of stuff:\n" +"- It tells you who wrote the program when you log in\n" +"- It reverses all incoming text\n" +"- It sends a message to people on your list immediately when they sign on" +msgstr "" +"នេះគឺជាកម្មវិធីជំនួយពិតជាល្អដែលធ្វើការជាច្រើន ៖\n" +"- វាប្រាប់អ្នកថាអ្នកបានសរសេរកម្មវិធីនៅពេលអ្នកចូល\n" +"- វាបម្រុងទុកអត្ថបទចូលទាំងអស់\n" +"- វាផ្ញើសារទៅមនុស្សនៅក្នុងបញ្ជីរបស់អ្នកភ្លាមៗ នៅពេលពួកគេចូល" + +msgid "Cursor Color" +msgstr "ពណ៌ទស្សន៍ទ្រនិច" + +msgid "Secondary Cursor Color" +msgstr "ពណ៌ទស្សន៍ទ្រនិចទីពីរ" + +msgid "Hyperlink Color" +msgstr "ពណ៌តំណខ្ពស់" + +msgid "Visited Hyperlink Color" +msgstr "ពណ៌តំណខ្ពស់ដែលបានទស្សនា" + +msgid "Highlighted Message Name Color" +msgstr "ពណ៌ឈ្មោះសារដែលបានបន្លិច" + +msgid "GtkTreeView Horizontal Separation" +msgstr "ការបំបែកផ្ដេករបស់ GtkTreeView" + +msgid "Conversation Entry" +msgstr "ធាតុសន្ទនា" + +msgid "Request Dialog" +msgstr "ប្រអប់សំណើ" + +msgid "Notify Dialog" +msgstr "ប្រអប់ជូនដំណឹង" + +msgid "Select Color" +msgstr "ជ្រើសពណ៌" + +#, c-format +msgid "Select Interface Font" +msgstr "ជ្រើសពុម្ពអក្សរចំណុចប្រទាក់" + +#, c-format +msgid "Select Font for %s" +msgstr "ជ្រើសពុម្ពអក្សរសម្រាប់ %s" + +msgid "GTK+ Interface Font" +msgstr "GTK+ ពុម្ពអក្សរចំណុចប្រទាក់" + +msgid "GTK+ Text Shortcut Theme" +msgstr "GTK+ ស្បែកផ្លូវកាត់អត្ថបទ" + +#. +#. for (i = 0; i < G_N_ELEMENTS(widget_bool_prefs); i++) { +#. hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); +#. gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0); +#. +#. check = pidgin_prefs_checkbox(_(widget_bool_names[i]), +#. widget_bool_prefs_set[i], hbox); +#. gtk_size_group_add_widget(labelsg, check); +#. +#. widget_bool_widgets[i] = pidgin_prefs_checkbox("", widget_bool_prefs[i], hbox); +#. * +#. gtk_size_group_add_widget(widgetsb, widget_bool_widgets[i]); +#. * +#. gtk_widget_set_sensitive(widget_bool_widgets[i], +#. purple_prefs_get_bool(widget_bool_prefs_set[i])); +#. g_signal_connect(G_OBJECT(check), "toggled", +#. G_CALLBACK(pidgin_toggle_sensitive), +#. widget_bool_widgets[i]); +#. } +#. +msgid "Interface colors" +msgstr "ពណ៌ចំណុចប្រទាក់" + +msgid "Widget Sizes" +msgstr "ទំហំធាតុក្រាហ្វិក" + +msgid "Fonts" +msgstr "ពុម្ពអក្សរ" + +msgid "Gtkrc File Tools" +msgstr "ឧបករណ៍ឯកសារ Gtkrc" + +#, c-format +msgid "Write settings to %s%sgtkrc-2.0" +msgstr "សរសេរការកំណត់ទៅកាន់ %s%sgtkrc-2.0" + +msgid "Re-read gtkrc files" +msgstr "អានឯកសារ gtkrc ឡើងវិញ" + +msgid "Pidgin GTK+ Theme Control" +msgstr "កម្មវិធីជំនួយ GTK+ ការត្រួតពិនិត្យស្បែក" + +msgid "Provides access to commonly used gtkrc settings." +msgstr "ផ្ដល់នូវការចូលដំណើរការទៅកាន់ការកំណត់ gtkrc ដែលបានប្រើធម្មតា ។" + +msgid "Raw" +msgstr "ដើម" + +msgid "Lets you send raw input to text-based protocols." +msgstr "អនុញ្ញាតឲ្យអ្នកផ្ញើការបញ្ចូលដើមទៅកាន់អត្ថបទដែលមានមូលដ្ឋានលើពិធីការ ។" + +msgid "" +"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit " +"'Enter' in the entry box to send. Watch the debug window." +msgstr "" +"អនុញ្ញាតឲ្យអ្នកផ្ញើការបញ្ចូលដើមទៅអត្ថបទដែលមានមូលដ្ឋានលើពិធីការ (XMPP, MSN, IRC, TOC) ។ ចុច" +"គ្រាប់ចុច 'បញ្ចូល (Enter)' នៅក្នុងប្រអប់ធាតុដើម្បីផ្ញើ ។ មើលបង្អួចបំបាត់កំហុស ។" + +#, c-format +msgid "You can upgrade to %s %s today." +msgstr "អ្នកអាចធ្វើឲ្យប្រសើរទៅ %s %s ថ្ងៃនេះ ។" + +msgid "New Version Available" +msgstr "មានកំណែថ្មី" + +msgid "Later" +msgstr "ពេលក្រោយ" + +msgid "Download Now" +msgstr "ទាញយកឥឡូវ" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Release Notification" +msgstr "ការជូនដំណឹងចេញផ្សាយ" + +#. *< name +#. *< version +#. * summary +msgid "Checks periodically for new releases." +msgstr "ពិនិត្យមើលការចេញផ្សាយតាមកំណត់សម្រាប់ការចេញផ្សាយថ្មី ។" + +#. * description +msgid "" +"Checks periodically for new releases and notifies the user with the " +"ChangeLog." +msgstr "ពិនិត្យមើលកាចេញផ្សាយតាមកំណត់សម្រាប់ការចេញផ្សាយថ្មី និងជូនដំណឹងអ្នកប្រើក្នុង ChangeLog ។" + +#. *< major version +#. *< minor version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Send Button" +msgstr "ផ្ញើប៊ូតុង" + +#. *< name +#. *< version +msgid "Conversation Window Send Button." +msgstr "ប៊ូតុងផ្ញើបង្អួចសន្ទនា ។" + +#. *< summary +msgid "" +"Adds a Send button to the entry area of the conversation window. Intended " +"for when no physical keyboard is present." +msgstr "បន្ថែមប៊ូតុងផ្ញើទៅផ្ទៃធាតុរបស់បង្អួចសន្ទនា ។ បំណងសម្រាប់នៅពេលដែលគ្មានក្ដារចុចពិត ។" + +msgid "Duplicate Correction" +msgstr "ស្ទួនកំណែ" + +msgid "The specified word already exists in the correction list." +msgstr "មានពាក្យដែលបានបញ្ជាក់រួចហើយនៅក្នុងបញ្ជីកែ ។" + +msgid "Text Replacements" +msgstr "ការជំនួសអត្ថបទ" + +msgid "You type" +msgstr "អ្នកវាយ" + +msgid "You send" +msgstr "អ្នកផ្ញើ" + +msgid "Whole words only" +msgstr "តែពាក្យទាំងមូល" + +msgid "Case sensitive" +msgstr "ប្រកាន់អក្សរតូចធំ" + +msgid "Add a new text replacement" +msgstr "បន្ថែមការជំនួសអត្ថបទថ្មី" + +msgid "You _type:" +msgstr "អ្នកវាយ ៖" + +msgid "You _send:" +msgstr "អ្នកផ្ញើ ៖" + +#. Created here so it can be passed to whole_words_button_toggled. +msgid "_Exact case match (uncheck for automatic case handling)" +msgstr "ការផ្គូផ្គងករណីជាក់លាក់ (ដោះធីកសម្រាប់ការគ្រប់គ្រងករណីដោយស្វ័យប្រវត្តិ)" + +msgid "Only replace _whole words" +msgstr "តែការជំនួសពាក្យទាំងមូលប៉ុណ្ណោះ" + +msgid "General Text Replacement Options" +msgstr "ជម្រើសជំនួសអត្ថបទទូទៅ" + +msgid "Enable replacement of last word on send" +msgstr "បើកការជំនួសពាក្យចុងក្រោយនៅពេលផ្ញើ" + +msgid "Text replacement" +msgstr "ការជំនួសអត្ថបទ" + +msgid "Replaces text in outgoing messages according to user-defined rules." +msgstr "ជំនួសអត្ថបទនៅក្នុងសារចេញ ដោយយោងតាមក្បួនកំណត់ដោយអ្នកប្រើ ។" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Buddy Ticker" +msgstr "ការបន្លឺសំឡេងរបស់មិត្តភក្ដិ" + +#. *< name +#. *< version +#. * summary +#. * description +msgid "A horizontal scrolling version of the buddy list." +msgstr "កំណែរមូរផ្ដេករបស់បញ្ជីមិត្តភក្ដិ ។" + +msgid "Display Timestamps Every" +msgstr "បង្ហាញត្រាពេលវេលារៀងរាល់" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Timestamp" +msgstr "ត្រាពេលវេលា" + +#. *< name +#. *< version +#. * summary +msgid "Display iChat-style timestamps" +msgstr "បង្ហាញត្រាពេលវេលារបស់ iChat-style" + +#. * description +msgid "Display iChat-style timestamps every N minutes." +msgstr "បង្ហាញត្រាពេលវេលារបស់ iChat-style រៀងរាល់ N នាទី ។" + +msgid "Timestamp Format Options" +msgstr "ជម្រើសទ្រង់ទ្រាយត្រាពេលវេលា" + +#, c-format +msgid "_Force 24-hour time format" +msgstr "បង្ខំទ្រង់ទ្រាយពេលវេលា ២៤- ម៉ោង" + +msgid "Show dates in..." +msgstr "បង្ហាញកាលបរិច្ឆេទក្នុង..." + +msgid "Co_nversations:" +msgstr "ការសន្ទនា ៖" + +msgid "For delayed messages" +msgstr "សម្រាប់សារដែលបានពន្យារ" + +msgid "For delayed messages and in chats" +msgstr "សម្រាប់សារដែលបានពន្យារ និងក្នុងគំនូសតាង" + +msgid "_Message Logs:" +msgstr "កំណត់ហេតុសារ ៖" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Message Timestamp Formats" +msgstr "ទ្រង់ទ្រាយត្រាពេលវេលាសារ" + +#. *< name +#. *< version +#. * summary +msgid "Customizes the message timestamp formats." +msgstr "ប្ដូរទ្រង់ទ្រាយត្រាពេលវេលាផ្ទាល់ខ្លួន ។" + +#. * description +msgid "" +"This plugin allows the user to customize conversation and logging message " +"timestamp formats." +msgstr "" +"កម្មវិធីជំនួយនេះអនុញ្ញាតឲ្យអ្នកប្រើប្ដូរទ្រង់ទ្រាយការសន្ទនា និងការចុះកំណត់ហេតុសារត្រាពេលវេលា" +"ផ្ទាល់ខ្លួន ។" + +msgid "Opacity:" +msgstr "ភាពស្រអាប់ ៖" + +#. IM Convo trans options +msgid "IM Conversation Windows" +msgstr "បង្អួចសន្ទនា IM" + +msgid "_IM window transparency" +msgstr "ភាពថ្លាបង្អួចរបស់ IM" + +msgid "_Show slider bar in IM window" +msgstr "បង្ហាញរបារគ្រាប់រំកិលនៅក្នុងបង្អួច IM" + +msgid "Remove IM window transparency on focus" +msgstr "យកភាពថ្លារបស់បង្អួច IM ចេញនៅពេលផ្ដោត" + +msgid "Always on top" +msgstr "តែងតែនៅលើជានិច្ច" + +#. Buddy List trans options +msgid "Buddy List Window" +msgstr "បង្អួចបញ្ជីមិត្តភក្ដិ" + +msgid "_Buddy List window transparency" +msgstr "ភាពថ្លារបស់បង្អួចបញ្ជីមិត្តភក្ដិ" + +msgid "Remove Buddy List window transparency on focus" +msgstr "យកភាពថ្លារបស់បង្អួចបញ្ជីមិត្តភក្ដិចេញនៅពេលផ្ដោត" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "Transparency" +msgstr "ភាពថ្លា" + +#. *< name +#. *< version +#. * summary +msgid "Variable Transparency for the buddy list and conversations." +msgstr "ភាពថ្លាដែលមានសម្រាប់បញ្ជីមិត្តភក្ដិ និងការសន្ទនា ។" + +#. * description +msgid "" +"This plugin enables variable alpha transparency on conversation windows and " +"the buddy list.\n" +"\n" +"* Note: This plugin requires Win2000 or greater." +msgstr "" +"កម្មវិធីជំនួយនេះបើកភាពថ្លាអាល់ហ្វាដែលអាចប្រើបាននៅក្នុងបង្អួចសន្ទនា និងបញ្ជីមិត្តភក្ដិ ។\n" +"\n" +"* ចំណាំ ៖ កម្មវិធីជំនួយនេះត្រូវការ Win2000 ឬខ្ពស់ជាងនេះ ។" + +msgid "GTK+ Runtime Version" +msgstr "កំណែ GTK+ Runtime" + +#. Autostart +msgid "Startup" +msgstr "ចាប់ផ្ដើម" + +#, c-format +msgid "_Start %s on Windows startup" +msgstr "ចាប់ផ្ដើម %s នៅពេលបង្អួចចាប់ផ្ដើម" + +msgid "_Dockable Buddy List" +msgstr "បញ្ជីមិត្តភ្ដិដែលអាចចូលផែបាន" + +#. Blist On Top +msgid "_Keep Buddy List window on top:" +msgstr "ទុកបង្អួចបញ្ជីមិត្តភក្ដិនៅកំពូល ៖" + +#. XXX: Did this ever work? +msgid "Only when docked" +msgstr "តែនៅពេលបានចូលផែប៉ុណ្ណោះ" + +msgid "Windows Pidgin Options" +msgstr "ជម្រើសបង្អួចរបស់ Pidgin" + +msgid "Options specific to Pidgin for Windows." +msgstr "ជម្រើសជាក់លាក់ទៅ Pidgin សម្រាប់បង្អួច ។" + +msgid "" +"Provides options specific to Pidgin for Windows , such as buddy list docking." +msgstr "ផ្ដល់នូវជម្រើសជាក់លាក់ទៅ Pidgin សម្រាប់វីនដូចជាបញ្ជីមិត្តភក្ដិចូលផែ ។" + +msgid "<font color='#777777'>Logged out.</font>" +msgstr "<font color='#777777'>បានចេញ ។</font>" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +msgid "XMPP Console" +msgstr "កុងសូល XMPP" + +msgid "Account: " +msgstr "គណនី ៖" + +msgid "<font color='#777777'>Not connected to XMPP</font>" +msgstr "<font color='#777777'>បានតភ្ជាប់ទៅកាន់ XMPP</font>" + +msgid "Insert an <iq/> stanza." +msgstr "បញ្ចូល <iq/> stanza ។" + +msgid "Insert a <presence/> stanza." +msgstr "បញ្ចូល <presence/> stanza ។" + +msgid "Insert a <message/> stanza." +msgstr "បញ្ចូល <message/> stanza ។" + +#. *< name +#. *< version +#. * summary +msgid "Send and receive raw XMPP stanzas." +msgstr "ផ្ញើ និងទទួល XMPP stanzas ដើម ។" + +#. * description +msgid "This plugin is useful for debbuging XMPP servers or clients." +msgstr "កម្មវិធីជំនួយនេះមានប្រយោជន៍សម្រាប់បំបាត់កំហុសម៉ាស៊ីនបម្រើ ឬម៉ាស៊ីនភ្ញៀវ XMPP ។" @@ -14,10 +14,10 @@ msgid "" msgstr "" "Project-Id-Version: nb\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-01-13 09:58-0500\n" -"PO-Revision-Date: 2009-01-14 01:45+0100\n" +"POT-Creation-Date: 2009-02-24 09:57-0500\n" +"PO-Revision-Date: 2009-02-24 18:47+0100\n" "Last-Translator: Hans Fredrik Nordhaug <hans@nordhaug.priv.no>\n" -"Language-Team: Norsk <nb@li.org>\n" +"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.ui.no>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -39,7 +39,7 @@ msgid "" "Usage: %s [OPTION]...\n" "\n" " -c, --config=DIR use DIR for config files\n" -" -d, --debug print debugging messages to stdout\n" +" -d, --debug print debugging messages to stderr\n" " -h, --help display this help and exit\n" " -n, --nologin don't automatically login\n" " -v, --version display the current version and exit\n" @@ -48,14 +48,20 @@ msgstr "" "Bruk: %s [Valg]...\n" "\n" " -c, --config=DIR bruk DIR for konfigurasjonsfiler\n" -" -d, --debug skriv debugging beskjeder til stdout\n" +" -d, --debug skriv feilsøkingsbeskjeder til stderr\n" " -h, --help vis denne hjelpen og avslutt\n" " -n, --nologin ikke logg automatisk inn\n" " -v, --version vis den nåværende versjon og avslutt\n" #, c-format -msgid "%s encountered errors migrating your settings from %s to %s. Please investigate and complete the migration by hand. Please report this error at http://developer.pidgin.im" -msgstr "%s det inntraff en feil i migreringen av ditt oppsett fra %s til %s. Vennligst undersøk og gjør ferdig migreringen for hånd. Vennligst raporter denne feilen på http://developer.pidgin.im" +msgid "" +"%s encountered errors migrating your settings from %s to %s. Please " +"investigate and complete the migration by hand. Please report this error at " +"http://developer.pidgin.im" +msgstr "" +"%s det inntraff en feil i migreringen av ditt oppsett fra %s til %s. " +"Vennligst undersøk og gjør ferdig migreringen for hånd. Vennligst raporter " +"denne feilen på http://developer.pidgin.im" msgid "Error" msgstr "Feil" @@ -293,10 +299,12 @@ msgid "Enter empty string to reset the name." msgstr "Skriv tom streng for å resette navnet." msgid "Removing this contact will also remove all the buddies in the contact" -msgstr "Fjerning av denne kontakten vil også fjerne alle medlemmene i denne kontakten" +msgstr "" +"Fjerning av denne kontakten vil også fjerne alle medlemmene i denne kontakten" msgid "Removing this group will also remove all the buddies in the group" -msgstr "Fjerning av denne gruppen vil også fjerne alle kontaktene i denne gruppa" +msgstr "" +"Fjerning av denne gruppen vil også fjerne alle kontaktene i denne gruppa" #, c-format msgid "Are you sure you want to remove %s?" @@ -352,8 +360,12 @@ msgstr "Blokker" msgid "Unblock" msgstr "Ikke Blokker" -msgid "Please enter the username or alias of the person you would like to Block/Unblock." -msgstr "Skriv inn brukernavnet eller aliaset på den personen du vil blokkere/ikke blokkere." +msgid "" +"Please enter the username or alias of the person you would like to Block/" +"Unblock." +msgstr "" +"Skriv inn brukernavnet eller aliaset på den personen du vil blokkere/ikke " +"blokkere." #. Not multiline #. Not masked? @@ -362,10 +374,12 @@ msgid "OK" msgstr "OK" msgid "New Instant Message" -msgstr "Ny direktemelding" +msgstr "Ny lynmelding" msgid "Please enter the username or alias of the person you would like to IM." -msgstr "Skriv inn brukernavnet eller aliaset på den personen du vil sende direktemelding til." +msgstr "" +"Skriv inn brukernavnet eller aliaset på den personen du vil sende " +"lynmelding til." msgid "Channel" msgstr "Kanal" @@ -379,15 +393,18 @@ msgstr "Skriv inn navnet på den samtalegruppen du vil bli med i." msgid "Join" msgstr "Bli med" -msgid "Please enter the username or alias of the person whose log you would like to view." -msgstr "Skriv inn brukernavnet eller aliaset til den personen du vil se loggen til." +msgid "" +"Please enter the username or alias of the person whose log you would like to " +"view." +msgstr "" +"Skriv inn brukernavnet eller aliaset til den personen du vil se loggen til." #. Create the "Options" frame. msgid "Options" msgstr "Brukervalg" msgid "Send IM..." -msgstr "Send direktemelding..." +msgstr "Send lynmelding..." msgid "Block/Unblock..." msgstr "Blokker/ikke blokker ..." @@ -526,17 +543,23 @@ msgstr "%s koblet fra." msgid "" "%s\n" "\n" -"Finch will not attempt to reconnect the account until you correct the error and re-enable the account." +"Finch will not attempt to reconnect the account until you correct the error " +"and re-enable the account." msgstr "" "%s\n" "\n" -"Finch vil ikke forsøke å koble kontoen til igjen før du har rettet på feilen og slått på kontoen igjen." +"Finch vil ikke forsøke å koble kontoen til igjen før du har rettet på feilen " +"og slått på kontoen igjen." msgid "Re-enable Account" msgstr "Reaktiver konto" -msgid "The account has disconnected and you are no longer in this chat. You will be automatically rejoined in the chat when the account reconnects." -msgstr "Denne kontoen er koblet av og du er ikke lenger med i denne samtalen. Du blir automatisk med i samtalen når kontoen kobler til igjen." +msgid "" +"The account has disconnected and you are no longer in this chat. You will be " +"automatically rejoined in the chat when the account reconnects." +msgstr "" +"Denne kontoen er koblet av og du er ikke lenger med i denne samtalen. Du " +"blir automatisk med i samtalen når kontoen kobler til igjen." msgid "No such command." msgstr "Ingen slik kommando." @@ -548,10 +571,10 @@ msgid "Your command failed for an unknown reason." msgstr "Din kommando feilet av ukjent årsak." msgid "That command only works in chats, not IMs." -msgstr "Den kommandoen virker bare i samtalegrupper, ikke i direktemeldinger." +msgstr "Den kommandoen virker bare i samtalegrupper, ikke i lynmeldinger." msgid "That command only works in IMs, not chats." -msgstr "Den kommandoen virker bare i direktemeldinger, ikke samtalegrupper." +msgstr "Den kommandoen virker bare i lynmeldinger, ikke samtalegrupper." msgid "That command doesn't work on this protocol." msgstr "Denne kommandoen virker ikke på denne protokollen." @@ -579,10 +602,13 @@ msgid "You have left this chat." msgstr "Du har forlatt denne samtalen." msgid "Logging started. Future messages in this conversation will be logged." -msgstr "Innlogging startet. Fremtidige beskjeder i denne samtalen vil bli logget." +msgstr "" +"Innlogging startet. Fremtidige beskjeder i denne samtalen vil bli logget." -msgid "Logging stopped. Future messages in this conversation will not be logged." -msgstr "Logging stoppet. Framtidige beskjeder i denne samtalen vil ikke bli logget." +msgid "" +"Logging stopped. Future messages in this conversation will not be logged." +msgstr "" +"Logging stoppet. Framtidige beskjeder i denne samtalen vil ikke bli logget." msgid "Send To" msgstr "Send til" @@ -644,21 +670,34 @@ msgstr "" "De følgende kommandoer er tilgjengelige i denne sammenhengen:\n" #, c-format -msgid "%s is not a valid message class. See '/help msgcolor' for valid message classes." -msgstr "%s er ingen gyldig beskjedklasse. Se «/help msgcolor» for gyldige beskjedklasser." +msgid "" +"%s is not a valid message class. See '/help msgcolor' for valid message " +"classes." +msgstr "" +"%s er ingen gyldig beskjedklasse. Se «/help msgcolor» for gyldige " +"beskjedklasser." #, c-format msgid "%s is not a valid color. See '/help msgcolor' for valid colors." msgstr "%s er ingen gyldig farge. Se «/help msgcolor» for gyldige farger." -msgid "say <message>: Send a message normally as if you weren't using a command." -msgstr "say <message>: Send en beskjed normalt som om du ikke brukte en kommando." +msgid "" +"say <message>: Send a message normally as if you weren't using a " +"command." +msgstr "" +"say <message>: Send en beskjed normalt som om du ikke brukte en " +"kommando." msgid "me <action>: Send an IRC style action to a buddy or chat." -msgstr "me <action>: Send en IRC stil handling til en kontakt eller samtale." +msgstr "" +"me <action>: Send en IRC stil handling til en kontakt eller samtale." -msgid "debug <option>: Send various debug information to the current conversation." -msgstr "debug <option>: Send diverse debug informasjon til den pågående samtalen." +msgid "" +"debug <option>: Send various debug information to the current " +"conversation." +msgstr "" +"debug <option>: Send diverse debug informasjon til den pågående " +"samtalen." msgid "clear: Clears the conversation scrollback." msgstr "clear: Renser samtale scrollback." @@ -687,8 +726,18 @@ msgstr "prefs: Vis preferanse vindu." msgid "statuses: Show the savedstatuses window." msgstr "statuses: Vis lagrede statuser i vindu." -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 <klasse> <forgrunn> <bakgrunn>: Velg fargene for de forskjellige beskjedklassene i samtalevinduet.<br> <klasse>: receive, send, highlight, action, timestamp<br> <forgrunn/bakgrunn>: black, red, green, blue, white, gray, darkgray, magenta, cyan, default<br><br>EKSEMPEL:<br> msgcolor send cyan default" +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 <klasse> <forgrunn> <bakgrunn>: Velg fargene for " +"de forskjellige beskjedklassene i samtalevinduet.<br> <klasse>: " +"receive, send, highlight, action, timestamp<br> <forgrunn/" +"bakgrunn>: black, red, green, blue, white, gray, darkgray, magenta, cyan, " +"default<br><br>EKSEMPEL:<br> msgcolor send cyan default" msgid "Unable to open file." msgstr "Klarte ikke åpne fil." @@ -790,14 +839,24 @@ msgstr "Samtaler med %s på %s" msgid "%B %Y" msgstr "%B %Y" -msgid "System events will only be logged if the \"Log all status changes to system log\" preference is enabled." -msgstr "System hendelser vil bare bli logget om \"Logg alle status forandringer til system logg\" har blitt slått på." +msgid "" +"System events will only be logged if the \"Log all status changes to system " +"log\" preference is enabled." +msgstr "" +"System hendelser vil bare bli logget om \"Logg alle status forandringer til " +"system logg\" har blitt slått på." -msgid "Instant messages will only be logged if the \"Log all instant messages\" preference is enabled." -msgstr "Direktemeldinger vil bare bli logget om \"Logg alle direktemeldinger\" har blitt slått på." +msgid "" +"Instant messages will only be logged if the \"Log all instant messages\" " +"preference is enabled." +msgstr "" +"Lynmeldinger vil bare bli logget om \"Logg alle lynmeldinger\" har " +"blitt slått på." -msgid "Chats will only be logged if the \"Log all chats\" preference is enabled." -msgstr "Samtaler vil bare bli logget om \"Logg alle samtaler\" har blitt slått på." +msgid "" +"Chats will only be logged if the \"Log all chats\" preference is enabled." +msgstr "" +"Samtaler vil bare bli logget om \"Logg alle samtaler\" har blitt slått på." msgid "No logs were found" msgstr "Ingen logger ble funnet" @@ -855,7 +914,7 @@ msgid "Continue" msgstr "Fortsett" msgid "IM" -msgstr "Direktemelding" +msgstr "Lynmelding" msgid "(none)" msgstr "(uten navn)" @@ -900,8 +959,10 @@ msgstr "Feil under lasting av tillegg" msgid "The selected file is not a valid plugin." msgstr "Den valgte fila er ikke et gyldig tillegg." -msgid "Please open the debug window and try again to see the exact error message." -msgstr "Åpne feilsøkingsvinduet og prøv igjen for å se den eksakte feilmeldingen." +msgid "" +"Please open the debug window and try again to see the exact error message." +msgstr "" +"Åpne feilsøkingsvinduet og prøv igjen for å se den eksakte feilmeldingen." msgid "Select plugin to install" msgstr "Velg tillegg å installere" @@ -981,7 +1042,7 @@ msgid "Action" msgstr "Handling" msgid "Open an IM window" -msgstr "Åpne vindu for direktemelding" +msgstr "Åpne vindu for lynmelding" msgid "Pop up a notification" msgstr "Varslingsvindu spretter opp" @@ -1057,6 +1118,7 @@ msgstr "%s er borte. (%s)" msgid "%s has sent you a message. (%s)" msgstr "%s har sendt deg en beskjed. (%s)" +#, c-format msgid "Unknown pounce event. Please report this!" msgstr "Ukjent varslingshendelse. Vennligst rapporter dette!" @@ -1102,7 +1164,6 @@ msgstr "Antall minutter før fraværsmarkert" msgid "Change status to" msgstr "Endre status til" -#. Conversations msgid "Conversations" msgstr "Samtaler" @@ -1330,7 +1391,8 @@ msgid "Couldn't find window" msgstr "Kan ikke finne vindu" msgid "This plugin cannot be loaded because it was not built with X11 support." -msgstr "Dette tillegget kan ikke bli lastet fordi det ikke var bygd med X11 støtte." +msgstr "" +"Dette tillegget kan ikke bli lastet fordi det ikke var bygd med X11 støtte." msgid "GntClipboard" msgstr "GntClipboard" @@ -1338,8 +1400,12 @@ msgstr "GntClipboard" msgid "Clipboard plugin" msgstr "Utklipstavle tillegg" -msgid "When the gnt clipboard contents change, the contents are made available to X, if possible." -msgstr "Når innholdet i gnt clipboard forandres, vil innholdet bli gjort tilgjengelig for X, om mulig." +msgid "" +"When the gnt clipboard contents change, the contents are made available to " +"X, if possible." +msgstr "" +"Når innholdet i gnt clipboard forandres, vil innholdet bli gjort " +"tilgjengelig for X, om mulig." #, c-format msgid "%s just signed on" @@ -1398,11 +1464,13 @@ msgstr "Historie Tillegg Krever Logging" msgid "" "Logging can be enabled from Tools -> Preferences -> Logging.\n" "\n" -"Enabling logs for instant messages and/or chats will activate history for the same conversation type(s)." +"Enabling logs for instant messages and/or chats will activate history for " +"the same conversation type(s)." msgstr "" "Logging kan slås på gjennom Verktøy -> Innstillinger -> Logging.\n" "\n" -"Å slå på logging for lynmeldinger og/eller prat vil aktivere historie for den samme samtaletypen." +"Å slå på logging for lynmeldinger og/eller prat vil aktivere historie for " +"den samme samtaletypen." msgid "GntHistory" msgstr "GntHistorikk" @@ -1410,8 +1478,12 @@ msgstr "GntHistorikk" msgid "Shows recently logged conversations in new conversations." msgstr "Viser tidligere loggede samtaler i nye samtaler." -msgid "When a new conversation is opened this plugin will insert the last conversation into the current conversation." -msgstr "Når en ny samtale startes, vil dette tillegget sette inn den forrige samtalen i den pågående." +msgid "" +"When a new conversation is opened this plugin will insert the last " +"conversation into the current conversation." +msgstr "" +"Når en ny samtale startes, vil dette tillegget sette inn den forrige " +"samtalen i den pågående." msgid "Online" msgstr "Pålogget" @@ -1570,8 +1642,12 @@ msgstr "_Se på sertfikat..." #. Prompt the user to authenticate the certificate #. vrq will be completed by user_auth #, c-format -msgid "The certificate presented by \"%s\" is self-signed. It cannot be automatically checked." -msgstr "Sertifikatet presentert av \"%s\" er sjøl signert. Det kan ikke bli automatisk sjekket." +msgid "" +"The certificate presented by \"%s\" is self-signed. It cannot be " +"automatically checked." +msgstr "" +"Sertifikatet presentert av \"%s\" er sjøl signert. Det kan ikke bli " +"automatisk sjekket." #, c-format msgid "The certificate chain presented for %s is not valid." @@ -1589,16 +1665,27 @@ msgid "Invalid certificate chain" msgstr "Ugyldig sertifikat lenke" #. vrq will be completed by user_auth -msgid "You have no database of root certificates, so this certificate cannot be validated." -msgstr "Du har ingen database av root sertifikater, så dette sertifikatet kan ikke bli validisert." +msgid "" +"You have no database of root certificates, so this certificate cannot be " +"validated." +msgstr "" +"Du har ingen database av root sertifikater, så dette sertifikatet kan ikke " +"bli validisert." #. vrq will be completed by user_auth -msgid "The root certificate this one claims to be issued by is unknown to Pidgin." -msgstr "Root sertifikatet som denne hevder å bli utstedt av er ukjent for Pidgin." +msgid "" +"The root certificate this one claims to be issued by is unknown to Pidgin." +msgstr "" +"Root sertifikatet som denne hevder å bli utstedt av er ukjent for Pidgin." #, c-format -msgid "The certificate chain presented by %s does not have a valid digital signature from the Certificate Authority from which it claims to have a signature." -msgstr "Sertifikat lenken presentert av %s har ikke en gyldig digital signatur fra Sertifikat Myndigheten der den hevder å ha en signatur." +msgid "" +"The certificate chain presented by %s does not have a valid digital " +"signature from the Certificate Authority from which it claims to have a " +"signature." +msgstr "" +"Sertifikat lenken presentert av %s har ikke en gyldig digital signatur fra " +"Sertifikat Myndigheten der den hevder å ha en signatur." msgid "Invalid certificate authority signature" msgstr "Ugyldig sertifikat myndighet signatur" @@ -1608,8 +1695,12 @@ msgstr "Ugyldig sertifikat myndighet signatur" #. being prompted #. vrq will be completed by user_auth #, c-format -msgid "The certificate presented by \"%s\" claims to be from \"%s\" instead. This could mean that you are not connecting to the service you believe you are." -msgstr "Serifikatet presentert av \"%s\" hevder av være fra \"%s\" istedet. Dette kan bety at du ikke er tilkoblet til den tjenesten du tror du er." +msgid "" +"The certificate presented by \"%s\" claims to be from \"%s\" instead. This " +"could mean that you are not connecting to the service you believe you are." +msgstr "" +"Serifikatet presentert av \"%s\" hevder av være fra \"%s\" istedet. Dette " +"kan bety at du ikke er tilkoblet til den tjenesten du tror du er." #. Make messages #, c-format @@ -1736,6 +1827,7 @@ msgstr "" "Feil under lesing fra oppslagsprosessen:\n" "%s" +#, c-format msgid "Resolver process exited without answering our request" msgstr "Oppslagsprosess avsluttet uten å svare på vår forespørsel" @@ -1781,7 +1873,9 @@ msgstr "Kan ikke sende en katalog." #, c-format msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n" -msgstr "%s er ikke en vanlig fil. Pidgin nekter å overskrive den for å ikke risikere å ødelegge noe.\n" +msgstr "" +"%s er ikke en vanlig fil. Pidgin nekter å overskrive den for å ikke risikere " +"å ødelegge noe.\n" #, c-format msgid "%s wants to send you %s (%s)" @@ -1902,32 +1996,68 @@ msgstr "Håndtereren for «xmpp»-URLer" msgid "The handler for \"ymsgr\" URLs" msgstr "Håndtereren for «ymsgr»-URLer" -msgid "True if the command specified in the \"command\" key should handle \"aim\" URLs." -msgstr "Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «aim»-URLer." +msgid "" +"True if the command specified in the \"command\" key should handle \"aim\" " +"URLs." +msgstr "" +"Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «aim»-" +"URLer." -msgid "True if the command specified in the \"command\" key should handle \"gg\" URLs." -msgstr "Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «gg»-URLer." +msgid "" +"True if the command specified in the \"command\" key should handle \"gg\" " +"URLs." +msgstr "" +"Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «gg»-" +"URLer." -msgid "True if the command specified in the \"command\" key should handle \"icq\" URLs." -msgstr "Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «icq»-URLer." +msgid "" +"True if the command specified in the \"command\" key should handle \"icq\" " +"URLs." +msgstr "" +"Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «icq»-" +"URLer." -msgid "True if the command specified in the \"command\" key should handle \"irc\" URLs." -msgstr "Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «irc»-URLer." +msgid "" +"True if the command specified in the \"command\" key should handle \"irc\" " +"URLs." +msgstr "" +"Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «irc»-" +"URLer." -msgid "True if the command specified in the \"command\" key should handle \"msnim\" URLs." -msgstr "Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «msnim»-URLer." +msgid "" +"True if the command specified in the \"command\" key should handle \"msnim\" " +"URLs." +msgstr "" +"Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «msnim»-" +"URLer." -msgid "True if the command specified in the \"command\" key should handle \"sip\" URLs." -msgstr "Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «sip»-URLer." +msgid "" +"True if the command specified in the \"command\" key should handle \"sip\" " +"URLs." +msgstr "" +"Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «sip»-" +"URLer." -msgid "True if the command specified in the \"command\" key should handle \"xmpp\" URLs." -msgstr "Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «xmpp»-URLer." +msgid "" +"True if the command specified in the \"command\" key should handle \"xmpp\" " +"URLs." +msgstr "" +"Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «xmpp»-" +"URLer." -msgid "True if the command specified in the \"command\" key should handle \"ymsgr\" URLs." -msgstr "Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «ymsgr»-URLer." +msgid "" +"True if the command specified in the \"command\" key should handle \"ymsgr\" " +"URLs." +msgstr "" +"Sann hvis kommandoen spesifisert i «kommando»-nøkkelen skal håndtere «ymsgr»-" +"URLer." -msgid "True if the command used to handle this type of URL should be run in a terminal." -msgstr "Sann hvis kommandoen som skal håndtere denne type URLer skal kjøres i en terminal." +msgid "" +"True if the command used to handle this type of URL should be run in a " +"terminal." +msgstr "" +"Sann hvis kommandoen som skal håndtere denne type URLer skal kjøres i en " +"terminal." msgid "Whether the specified command should handle \"aim\" URLs" msgstr "Om den spesifike kommandoen skal håndtere «aim»-URLer" @@ -1972,12 +2102,20 @@ msgid "XML" msgstr "XML" #, c-format -msgid "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-REPLY>:</b></font> %s<br/>\n" -msgstr "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <STANDARDSVAR>:</b></font> %s<br/>\n" +msgid "" +"<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" +"REPLY>:</b></font> %s<br/>\n" +msgstr "" +"<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <" +"STANDARDSVAR>:</b></font> %s<br/>\n" #, c-format -msgid "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-REPLY>:</b></font> %s<br/>\n" -msgstr "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <STANDARDSVAR>:</b></font> %s<br/>\n" +msgid "" +"<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" +"REPLY>:</b></font> %s<br/>\n" +msgstr "" +"<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <" +"STANDARDSVAR>:</b></font> %s<br/>\n" msgid "<font color=\"red\"><b>Unable to find log path!</b></font>" msgstr "<font color=\"red\"><b>Klarte ikke finne banen til loggen!</b></font>" @@ -2005,12 +2143,19 @@ msgstr "Tillegg magic mismatch %d (trenger %d)" msgid "ABI version mismatch %d.%d.x (need %d.%d.x)" msgstr "ABI versjon mismatch %d.%d.x (trenger %d.%d.x)" -msgid "Plugin does not implement all required functions (list_icon, login and close)" -msgstr "Tillegget implenterer ikke alle funksjoner som kreves (list_icon, login og close)" +msgid "" +"Plugin does not implement all required functions (list_icon, login and close)" +msgstr "" +"Tillegget implenterer ikke alle funksjoner som kreves (list_icon, login og " +"close)" #, c-format -msgid "The required plugin %s was not found. Please install this plugin and try again." -msgstr "Det nødvendige tillegget %s ble ikke funnet. Installer dette tillegget og prøv igjen." +msgid "" +"The required plugin %s was not found. Please install this plugin and try " +"again." +msgstr "" +"Det nødvendige tillegget %s ble ikke funnet. Installer dette tillegget og " +"prøv igjen." msgid "Unable to load the plugin" msgstr "Klarte ikke å laste tillegget" @@ -2112,7 +2257,8 @@ msgstr "Lagre notater på en spesifikk kompis." #. *< summary msgid "Adds the option to store notes for buddies on your buddy list." -msgstr "Legger til muligheten for å lagre notater for kompiser i kompislisten din." +msgstr "" +"Legger til muligheten for å lagre notater for kompiser i kompislisten din." #. *< type #. *< ui_requirement @@ -2210,8 +2356,12 @@ msgid "Test plugin IPC support, as a client." msgstr "Test IPC-støtte for tillegg (som klient)." #. * description -msgid "Test plugin IPC support, as a client. This locates the server plugin and calls the commands registered." -msgstr "Test IPC-støtte for tillegg (som klient). Dette finner tjenertillegget og kaller de registrerte kommandoene." +msgid "" +"Test plugin IPC support, as a client. This locates the server plugin and " +"calls the commands registered." +msgstr "" +"Test IPC-støtte for tillegg (som klient). Dette finner tjenertillegget og " +"kaller de registrerte kommandoene." # #. *< type @@ -2231,7 +2381,8 @@ msgstr "Test IPC-støtte for tillegg (som tjener)." #. * description msgid "Test plugin IPC support, as a server. This registers the IPC commands." -msgstr "Test IPC-støtte for tillegg (som tjener). Dette registrerer IPC-kommandoene." +msgstr "" +"Test IPC-støtte for tillegg (som tjener). Dette registrerer IPC-kommandoene." msgid "Join/Part Hiding Configuration" msgstr "Innstilling for å skjule bli med-/forlat-tilstander" @@ -2261,8 +2412,12 @@ msgid "Hides extraneous join/part messages." msgstr "Skjul fremmede join/part beskjeder." #. * description -msgid "This plugin hides join/part messages in large rooms, except for those users actively taking part in a conversation." -msgstr "Denne plugin skjuler join/part beskjeder i store rom, untatt for de brukerne som aktivt deltar i en samtale." +msgid "" +"This plugin hides join/part messages in large rooms, except for those users " +"actively taking part in a conversation." +msgstr "" +"Denne plugin skjuler join/part beskjeder i store rom, untatt for de brukerne " +"som aktivt deltar i en samtale." #. This is used in the place of a timezone abbreviation if the #. * offset is way off. The user should never really see it, but @@ -2287,8 +2442,12 @@ msgstr "En eller flere beskjeder kunne ikke bli levert." msgid "You were disconnected from the server." msgstr "Du har blitt koblet fra tjeneren." -msgid "You are currently disconnected. Messages will not be received unless you are logged in." -msgstr "Du er for tiden avlogget. Beskjeder vil ikke bli mottatt uten at du er innlogget." +msgid "" +"You are currently disconnected. Messages will not be received unless you are " +"logged in." +msgstr "" +"Du er for tiden avlogget. Beskjeder vil ikke bli mottatt uten at du er " +"innlogget." msgid "Message could not be sent because the maximum length was exceeded." msgstr "Meldingen kunne ikke bli sendt fordi max lengde ble overskredet." @@ -2370,13 +2529,18 @@ msgstr "Inkluderer andre lynmeldingsklienters logger i logg-viseren." #. * description msgid "" -"When viewing logs, this plugin will include logs from other IM clients. Currently, this includes Adium, MSN Messenger, and Trillian.\n" +"When viewing logs, this plugin will include logs from other IM clients. " +"Currently, this includes Adium, MSN Messenger, and Trillian.\n" "\n" -"WARNING: This plugin is still alpha code and may crash frequently. Use it at your own risk!" +"WARNING: This plugin is still alpha code and may crash frequently. Use it " +"at your own risk!" msgstr "" -"Når man ser på logger, vil dette tillegget inkludere logger fra andre lynmeldingsklienter. For tiden inkluderer dette Adium, MSN Messenger og Trillian.\n" +"Når man ser på logger, vil dette tillegget inkludere logger fra andre " +"lynmeldingsklienter. For tiden inkluderer dette Adium, MSN Messenger og " +"Trillian.\n" "\n" -"ADVARSEL: Dette tillegget er enda alpha kode og kan krasje ofte. Bruk den på egen risiko!" +"ADVARSEL: Dette tillegget er enda alpha kode og kan krasje ofte. Bruk den " +"på egen risiko!" # msgid "Mono Plugin Loader" @@ -2386,7 +2550,7 @@ msgid "Loads .NET plugins with Mono." msgstr "Laster .NET tillegg med Mono." msgid "Add new line in IMs" -msgstr "Legg til linjeskift i direktemeldinger." +msgstr "Legg til linjeskift i lynmeldinger." msgid "Add new line in Chats" msgstr "Legg til linjeskift i samtaler" @@ -2409,8 +2573,12 @@ msgid "Prepends a newline to displayed message." msgstr "Setter inn en ny linje foran viste beskjeder." #. *< summary -msgid "Prepends a newline to messages so that the rest of the message appears below the username in the conversation window." -msgstr "Setter inn en ny linje foran beskjeder sånn at resten av teksten kommer frem under brukernavnet i samtalevinduet." +msgid "" +"Prepends a newline to messages so that the rest of the message appears below " +"the username in the conversation window." +msgstr "" +"Setter inn en ny linje foran beskjeder sånn at resten av teksten kommer frem " +"under brukernavnet i samtalevinduet." msgid "Offline Message Emulation" msgstr "Emulering av avlogget-beskjed" @@ -2418,12 +2586,20 @@ msgstr "Emulering av avlogget-beskjed" msgid "Save messages sent to an offline user as pounce." msgstr "Lagre beskjeder sendt til en avlogget bruker som pounce." -msgid "The rest of the messages will be saved as pounce. You can edit/delete the pounce from the `Buddy Pounce' dialog." -msgstr "Resten av beskjedene vil bli lagret som varsling. Du kan forandre/slette varslingen fra kontaktvarslingsdialogen." +msgid "" +"The rest of the messages will be saved as pounce. You can edit/delete the " +"pounce from the `Buddy Pounce' dialog." +msgstr "" +"Resten av beskjedene vil bli lagret som varsling. Du kan forandre/slette " +"varslingen fra kontaktvarslingsdialogen." #, c-format -msgid "\"%s\" is currently offline. Do you want to save the rest of the messages in a pounce and automatically send them when \"%s\" logs back in?" -msgstr "\"%s\" er for tiden avlogget. Vil du lagre resten av beskjeden i en varsling og automatisk sende den når \"%s\" logger inn igjen?" +msgid "" +"\"%s\" is currently offline. Do you want to save the rest of the messages in " +"a pounce and automatically send them when \"%s\" logs back in?" +msgstr "" +"\"%s\" er for tiden avlogget. Vil du lagre resten av beskjeden i en varsling " +"og automatisk sende den når \"%s\" logger inn igjen?" msgid "Offline Message" msgstr "Avlogget beskjed" @@ -2464,8 +2640,12 @@ msgstr "Synsk Modus" msgid "Psychic mode for incoming conversation" msgstr "Synsk modus for innkommende samtale" -msgid "Causes conversation windows to appear as other users begin to message you. This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" -msgstr "Gjør at samtalevinduet dukker opp idet andre brukere begynner å sende beskjed til deg. Dette fungerer for AIM, ICQ, XMPP, Sametime og Yahoo!" +msgid "" +"Causes conversation windows to appear as other users begin to message you. " +"This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" +msgstr "" +"Gjør at samtalevinduet dukker opp idet andre brukere begynner å sende " +"beskjed til deg. Dette fungerer for AIM, ICQ, XMPP, Sametime og Yahoo!" msgid "You feel a disturbance in the force..." msgstr "You feel a disturbance in the force..." @@ -2612,8 +2792,12 @@ msgstr "Varsle når kontakt endrer tilstand" #. *< version #. * summary #. * description -msgid "Notifies in a conversation window when a buddy goes or returns from away or idle." -msgstr "Varsler i et samtalevindu når en kontakt blir borte/inaktiv, eller returnerer." +msgid "" +"Notifies in a conversation window when a buddy goes or returns from away or " +"idle." +msgstr "" +"Varsler i et samtalevindu når en kontakt blir borte/inaktiv, eller " +"returnerer." # msgid "Tcl Plugin Loader" @@ -2623,19 +2807,28 @@ msgstr "Tcl-tilleggslaster" msgid "Provides support for loading Tcl plugins" msgstr "Lar deg laste Tcl-tillegg" -msgid "Unable to detect ActiveTCL installation. If you wish to use TCL plugins, install ActiveTCL from http://www.activestate.com\n" -msgstr "Klarte ikke finne en ActiveTCL installasjon. Om du ønsker å bruke TCL tillegg, installer ActiveTCL fra http://www.activestate.com\n" +msgid "" +"Unable to detect ActiveTCL installation. If you wish to use TCL plugins, " +"install ActiveTCL from http://www.activestate.com\n" +msgstr "" +"Klarte ikke finne en ActiveTCL installasjon. Om du ønsker å bruke TCL " +"tillegg, installer ActiveTCL fra http://www.activestate.com\n" -msgid "The Apple Bonjour For Windows toolkit wasn't found, see the FAQ at: http://d.pidgin.im/BonjourWindows for more information." -msgstr "Fant ikke verktøysamlingen til Apple Bonjour for Windows. Du finner flere opplysninger på adressa http://d.pidgin.im/BonjourWindows." +msgid "" +"The Apple Bonjour For Windows toolkit wasn't found, see the FAQ at: http://d." +"pidgin.im/BonjourWindows for more information." +msgstr "" +"Fant ikke verktøysamlingen til Apple Bonjour for Windows. Du finner flere " +"opplysninger på adressa http://d.pidgin.im/BonjourWindows." msgid "Unable to listen for incoming IM connections\n" msgstr "Klarte ikke lage ny tilkobling\n" -msgid "Unable to establish connection with the local mDNS server. Is it running?" -msgstr "Klarte ikke etablere kontakt med den lokale mDNS serveren. Er den igang?" +msgid "" +"Unable to establish connection with the local mDNS server. Is it running?" +msgstr "" +"Klarte ikke etablere kontakt med den lokale mDNS serveren. Er den igang?" -#. Creating the options for the protocol msgid "First name" msgstr "Fornavn" @@ -2668,6 +2861,10 @@ msgstr "Bonjour-protokolltillegg" msgid "Purple Person" msgstr "Purple-person" +#. Creating the options for the protocol +msgid "Local Port" +msgstr "Lokal port" + msgid "Bonjour" msgstr "Bonjour" @@ -2693,7 +2890,9 @@ msgstr "Feil i kommunikasjonen med lokal mDNSResponder." msgid "Invalid proxy settings" msgstr "Ugyldige proxyinnstilinger" -msgid "Either the host name or port number specified for your given proxy type is invalid." +msgid "" +"Either the host name or port number specified for your given proxy type is " +"invalid." msgstr "Det spesifiserte maskinnavnet eller portnummeret for proxy er ugyldig." msgid "Token Error" @@ -3154,11 +3353,19 @@ msgstr "mode (%s %s) av %s" msgid "Invalid nickname" msgstr "Ugyldig brukernavn" -msgid "Your selected nickname was rejected by the server. It probably contains invalid characters." -msgstr "Ditt valgte kallenavn ble avvist av tjeneren. Sannsynligvis inneholder det ugyldige tegn." +msgid "" +"Your selected nickname was rejected by the server. It probably contains " +"invalid characters." +msgstr "" +"Ditt valgte kallenavn ble avvist av tjeneren. Sannsynligvis inneholder det " +"ugyldige tegn." -msgid "Your selected account name was rejected by the server. It probably contains invalid characters." -msgstr "Ditt valgte kontonavn ble avvist av tjeneren. Sannsynligvis inneholder det ugyldige tegn." +msgid "" +"Your selected account name was rejected by the server. It probably contains " +"invalid characters." +msgstr "" +"Ditt valgte kontonavn ble avvist av tjeneren. Sannsynligvis inneholder det " +"ugyldige tegn." msgid "Cannot change nick" msgstr "Kan ikke endre kallenavn" @@ -3194,8 +3401,12 @@ msgstr "Wallops fra %s" msgid "action <action to perform>: Perform an action." msgstr "action <action to perform>: Utfør noe." -msgid "away [message]: Set an away message, or use no message to return from being away." -msgstr "away [melding]: Sett en melding som skal vises når du er fraværende, eller ikke sett noen for å returnere." +msgid "" +"away [message]: Set an away message, or use no message to return from being " +"away." +msgstr "" +"away [melding]: Sett en melding som skal vises når du er fraværende, eller " +"ikke sett noen for å returnere." msgid "ctcp <nick> <msg>: sends ctcp msg to nick." msgstr "ctcp <kallenavn> <beskjed>: sender ctcp beskjed til kallenavn." @@ -3203,26 +3414,56 @@ msgstr "ctcp <kallenavn> <beskjed>: sender ctcp beskjed til kallenavn." msgid "chanserv: Send a command to chanserv" msgstr "chanserv: Send en kommando til chanserv" -msgid "deop <nick1> [nick2] ...: Remove channel operator status from someone. You must be a channel operator to do this." -msgstr "deop <nick1> [nick2] ...: Fjern kanal OP status fra noen. Du må være kanal OP for å gjøre dette." +msgid "" +"deop <nick1> [nick2] ...: Remove channel operator status from " +"someone. You must be a channel operator to do this." +msgstr "" +"deop <nick1> [nick2] ...: Fjern kanal OP status fra noen. Du må være " +"kanal OP for å gjøre dette." -msgid "devoice <nick1> [nick2] ...: Remove channel voice status from someone, preventing them from speaking if the channel is moderated (+m). You must be a channel operator to do this." -msgstr "devoice <nick1> [nick2] ...: Fjern kanal voice status fra noen, hindre de fra å snakke om kanalen er moderert (+m). Du må være kanal OP for å gjøre dette." +msgid "" +"devoice <nick1> [nick2] ...: Remove channel voice status from " +"someone, preventing them from speaking if the channel is moderated (+m). You " +"must be a channel operator to do this." +msgstr "" +"devoice <nick1> [nick2] ...: Fjern kanal voice status fra noen, " +"hindre de fra å snakke om kanalen er moderert (+m). Du må være kanal OP for " +"å gjøre dette." -msgid "invite <nick> [room]: Invite someone to join you in the specified channel, or the current channel." -msgstr "invite <nick> [room]: Inviter noen til å joine deg i spsifisert kanel eller den nåværende kanalen." +msgid "" +"invite <nick> [room]: Invite someone to join you in the specified " +"channel, or the current channel." +msgstr "" +"invite <nick> [room]: Inviter noen til å joine deg i spsifisert kanel " +"eller den nåværende kanalen." -msgid "j <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more channels, optionally providing a channel key for each if needed." -msgstr "j <room1>[,room2][,...] [key1[,key2][,...]]: Fyll inn en eller flere kanaler, alternativt gi en nøkkel for hver om nødvendig." +msgid "" +"j <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " +"channels, optionally providing a channel key for each if needed." +msgstr "" +"j <room1>[,room2][,...] [key1[,key2][,...]]: Fyll inn en eller flere " +"kanaler, alternativt gi en nøkkel for hver om nødvendig." -msgid "join <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more channels, optionally providing a channel key for each if needed." -msgstr "join <room1>[,room2][,...] [key1[,key2][,...]]: Fyll inn en eller flere kanaler, alternativt gi en nøkkel for hver om nødvendig." +msgid "" +"join <room1>[,room2][,...] [key1[,key2][,...]]: Enter one or more " +"channels, optionally providing a channel key for each if needed." +msgstr "" +"join <room1>[,room2][,...] [key1[,key2][,...]]: Fyll inn en eller " +"flere kanaler, alternativt gi en nøkkel for hver om nødvendig." -msgid "kick <nick> [message]: Remove someone from a channel. You must be a channel operator to do this." -msgstr "kick <nick> [message]: Fjern noen fra en kanal. Du må være kanal OP for å gjøre dette." +msgid "" +"kick <nick> [message]: Remove someone from a channel. You must be a " +"channel operator to do this." +msgstr "" +"kick <nick> [message]: Fjern noen fra en kanal. Du må være kanal OP " +"for å gjøre dette." -msgid "list: Display a list of chat rooms on the network. <i>Warning, some servers may disconnect you upon doing this.</i>" -msgstr "list: Vis en liste over samtalerom på nettverket. <i>Advarsel, noen tjenere kan koble fra om du gjør dette.</i>" +msgid "" +"list: Display a list of chat rooms on the network. <i>Warning, some servers " +"may disconnect you upon doing this.</i>" +msgstr "" +"list: Vis en liste over samtalerom på nettverket. <i>Advarsel, noen tjenere " +"kan koble fra om du gjør dette.</i>" msgid "me <action to perform>: Perform an action." msgstr "me <action to perform>: Utfør noe." @@ -3230,11 +3471,18 @@ msgstr "me <action to perform>: Utfør noe." msgid "memoserv: Send a command to memoserv" msgstr "memoserv: Send en kommando til memoserv" -msgid "mode <+|-><A-Za-z> <nick|channel>: Set or unset a channel or user mode." -msgstr "mode <+|-><A-Za-z> <nick|channel>: Sett er fjern en kanal eller bruker modus." +msgid "" +"mode <+|-><A-Za-z> <nick|channel>: Set or unset a channel " +"or user mode." +msgstr "" +"mode <+|-><A-Za-z> <nick|channel>: Sett er fjern en kanal " +"eller bruker modus." -msgid "msg <nick> <message>: Send a private message to a user (as opposed to a channel)." -msgstr "msg <nick> <message>: Send en privat beskjed til en bruker." +msgid "" +"msg <nick> <message>: Send a private message to a user (as " +"opposed to a channel)." +msgstr "" +"msg <nick> <message>: Send en privat beskjed til en bruker." msgid "names [channel]: List the users currently in a channel." msgstr "names [channel]: Vis brukere i denne kanalen." @@ -3248,23 +3496,41 @@ msgstr "nickserv: Send en kommando til nickserv" msgid "notice <target<: Send a notice to a user or channel." msgstr "notice <mål>: Send en varsling til en bruker eller kanal." -msgid "op <nick1> [nick2] ...: Grant channel operator status to someone. You must be a channel operator to do this." -msgstr "op <nick1> [nick2] ...: Tillat OP status til noen. Du må være kanal OP for å gjøre dette." +msgid "" +"op <nick1> [nick2] ...: Grant channel operator status to someone. You " +"must be a channel operator to do this." +msgstr "" +"op <nick1> [nick2] ...: Tillat OP status til noen. Du må være kanal " +"OP for å gjøre dette." -msgid "operwall <message>: If you don't know what this is, you probably can't use it." -msgstr "operwall <message>: Om du ikke vet hva dette er, kan du sannsynligvis ikke bruke dette." +msgid "" +"operwall <message>: If you don't know what this is, you probably " +"can't use it." +msgstr "" +"operwall <message>: Om du ikke vet hva dette er, kan du sannsynligvis " +"ikke bruke dette." msgid "operserv: Send a command to operserv" msgstr "operserv: Send en kommando til operserv" -msgid "part [room] [message]: Leave the current channel, or a specified channel, with an optional message." -msgstr "part [room] [message]: Forlat nåværende kanal eller en spesifisert kanal med en beskjed." +msgid "" +"part [room] [message]: Leave the current channel, or a specified channel, " +"with an optional message." +msgstr "" +"part [room] [message]: Forlat nåværende kanal eller en spesifisert kanal " +"med en beskjed." -msgid "ping [nick]: Asks how much lag a user (or the server if no user specified) has." +msgid "" +"ping [nick]: Asks how much lag a user (or the server if no user specified) " +"has." msgstr "ping [nick]: Send ping til en bruker." -msgid "query <nick> <message>: Send a private message to a user (as opposed to a channel)." -msgstr "query <nick> <message>: Send en privat beskjed til en bruker (vises ikke i kanal)." +msgid "" +"query <nick> <message>: Send a private message to a user (as " +"opposed to a channel)." +msgstr "" +"query <nick> <message>: Send en privat beskjed til en bruker " +"(vises ikke i kanal)." msgid "quit [message]: Disconnect from the server, with an optional message." msgstr "quit [message]: Disconnect fra server, med evt. beskjed." @@ -3272,8 +3538,12 @@ msgstr "quit [message]: Disconnect fra server, med evt. beskjed." msgid "quote [...]: Send a raw command to the server." msgstr "quote [...]: Send en rå kommando til serveren." -msgid "remove <nick> [message]: Remove someone from a room. You must be a channel operator to do this." -msgstr "remove <nick> [message]: Fjern noen fra et rom. Du må være kanal OP for å gjøre dette." +msgid "" +"remove <nick> [message]: Remove someone from a room. You must be a " +"channel operator to do this." +msgstr "" +"remove <nick> [message]: Fjern noen fra et rom. Du må være kanal OP " +"for å gjøre dette." msgid "time: Displays the current local time at the IRC server." msgstr "time: Vis nåværende lokaltid på IRC serveren." @@ -3287,17 +3557,26 @@ msgstr "umode <+|-><A-Za-z>: Sett eller fjern en bruker modus." msgid "version [nick]: send CTCP VERSION request to a user" msgstr "versjon [nick]: send CTCP VERSION forespørsel til en bruker" -msgid "voice <nick1> [nick2] ...: Grant channel voice status to someone. You must be a channel operator to do this." -msgstr "voice <nick1> [nick2] ...: Gi voice til noen. Du må være kanal OP for å gjøre dette." +msgid "" +"voice <nick1> [nick2] ...: Grant channel voice status to someone. You " +"must be a channel operator to do this." +msgstr "" +"voice <nick1> [nick2] ...: Gi voice til noen. Du må være kanal OP for " +"å gjøre dette." -msgid "wallops <message>: If you don't know what this is, you probably can't use it." -msgstr "wallops <message>: Om du ikke vet hva dette er, kan du sannsynligvis ikke bruke det." +msgid "" +"wallops <message>: If you don't know what this is, you probably can't " +"use it." +msgstr "" +"wallops <message>: Om du ikke vet hva dette er, kan du sannsynligvis " +"ikke bruke det." msgid "whois [server] <nick>: Get information on a user." msgstr "whois [server] <nick>: Hent informasjon om en bruker." msgid "whowas <nick>: Get information on a user that has logged off." -msgstr "whowas <kallenavn>: Hent informasjon om en bruker som har logget av." +msgstr "" +"whowas <kallenavn>: Hent informasjon om en bruker som har logget av." #, c-format msgid "Reply time from %s: %lu seconds" @@ -3322,17 +3601,25 @@ msgid "execute" msgstr "utfør" msgid "Server requires TLS/SSL for login. No TLS/SSL support found." -msgstr "Tjeneren krever TLS/SSL for å logge inn, men støtte for dette ble ikke funnet." +msgstr "" +"Tjeneren krever TLS/SSL for å logge inn, men støtte for dette ble ikke " +"funnet." msgid "You require encryption, but no TLS/SSL support found." msgstr "Du krever kryptering, men ingen støtte for TLS/SSL ble funnet." msgid "Server requires plaintext authentication over an unencrypted stream" -msgstr "Tjeneren forlanger identitetsbekreftelse i ren tekst over en ukryptert forbindelse" +msgstr "" +"Tjeneren forlanger identitetsbekreftelse i ren tekst over en ukryptert " +"forbindelse" #, c-format -msgid "%s requires plaintext authentication over an unencrypted connection. Allow this and continue authentication?" -msgstr "%s krever autentisering i klartekst over eit ukryptert samband. Vil du tillate dette og fortsett med autentiseringen?" +msgid "" +"%s requires plaintext authentication over an unencrypted connection. Allow " +"this and continue authentication?" +msgstr "" +"%s krever autentisering i klartekst over eit ukryptert samband. Vil du " +"tillate dette og fortsett med autentiseringen?" msgid "Plaintext Authentication" msgstr "Identitetsbekreftelse i ren tekst" @@ -3402,8 +3689,12 @@ msgstr "Beskrivelse" msgid "Edit XMPP vCard" msgstr "Rediger vCard for XMPP" -msgid "All items below are optional. Enter only the information with which you feel comfortable." -msgstr "Alle feltene nedenfor er valgfrie. Du trenger bare å skrive den informasjonen du ønsker." +msgid "" +"All items below are optional. Enter only the information with which you feel " +"comfortable." +msgstr "" +"Alle feltene nedenfor er valgfrie. Du trenger bare å skrive den " +"informasjonen du ønsker." msgid "Client" msgstr "Klient" @@ -3632,8 +3923,12 @@ msgid "The following are the results of your search" msgstr "Følgende resultat fra ditt søk" #. current comment from Jabber User Directory users.jabber.org -msgid "Find a contact by entering the search criteria in the given fields. Note: Each field supports wild card searches (%)" -msgstr "Finn en kontakt ved å skrive inn søkekriterier i gitte felter. NB: Hvert felt har støtte for wild card søk (%)" +msgid "" +"Find a contact by entering the search criteria in the given fields. Note: " +"Each field supports wild card searches (%)" +msgstr "" +"Finn en kontakt ved å skrive inn søkekriterier i gitte felter. NB: Hvert " +"felt har støtte for wild card søk (%)" msgid "Directory Query Failed" msgstr "Mappeforespørsel feilet" @@ -3740,7 +4035,8 @@ msgid "Find Rooms" msgstr "Finn samtalerom" msgid "You require encryption, but it is not available on this server." -msgstr "Du krever kryptering, men det er ikke støtte for det på denne serveren." +msgstr "" +"Du krever kryptering, men det er ikke støtte for det på denne serveren." msgid "Write error" msgstr "Feil ved skriving" @@ -3810,7 +4106,8 @@ msgstr "Dato" msgid "Unregister" msgstr "Avregistrer" -msgid "Please fill out the information below to change your account registration." +msgid "" +"Please fill out the information below to change your account registration." msgstr "Fyll ut feltene under for å endre din kontoregistrering." msgid "Please fill out the information below to register your new account." @@ -4168,11 +4465,19 @@ msgstr "topic [nytt emne]: Vis eller endre emnet." msgid "ban <user> [reason]: Ban a user from the room." msgstr "ban <bruker> [grunn]: Forby en bruker fra rommet." -msgid "affiliate <user> <owner|admin|member|outcast|none>: Set a user's affiliation with the room." -msgstr "Knytt <bruker> <eier|admin|medlem|utstøtt|ingen>: Sett en brukers tilknyting til rommet." +msgid "" +"affiliate <user> <owner|admin|member|outcast|none>: Set a user's " +"affiliation with the room." +msgstr "" +"Knytt <bruker> <eier|admin|medlem|utstøtt|ingen>: Sett en " +"brukers tilknyting til rommet." -msgid "role <user> <moderator|participant|visitor|none>: Set a user's role in the room." -msgstr "rolle <user> <moderator|deltaker|besøkende|ingen>: Sett en brukers rolle i rommet." +msgid "" +"role <user> <moderator|participant|visitor|none>: Set a user's " +"role in the room." +msgstr "" +"rolle <user> <moderator|deltaker|besøkende|ingen>: Sett en " +"brukers rolle i rommet." msgid "invite <user> [message]: Invite a user to the room." msgstr "invite <bruker> [rom]: Inviter en bruker til rommet." @@ -4183,8 +4488,11 @@ msgstr "join: <rom> [passord]: Bli med i en samtale på denne tjeneren." msgid "kick <user> [reason]: Kick a user from the room." msgstr "kick <bruker> [grunn]: Spark en bruker ut av rommet." -msgid "msg <user> <message>: Send a private message to another user." -msgstr "msg <bruker> <melding>: Send en privatmelding til en annen bruker." +msgid "" +"msg <user> <message>: Send a private message to another user." +msgstr "" +"msg <bruker> <melding>: Send en privatmelding til en annen " +"bruker." msgid "ping <jid>:\tPing a user/component/server." msgstr "ping <jid>:\tPing en bruker/komponent/server." @@ -4272,8 +4580,12 @@ msgstr "Ukjent feil i tilstedeværelse" msgid "Create New Room" msgstr "Skap nytt samtalerom" -msgid "You are creating a new room. Would you like to configure it, or accept the default settings?" -msgstr "Du er i ferd med å lage et nytt rom. Ønsker du å endre innstillingene, eller bruke standardinnstillingene?" +msgid "" +"You are creating a new room. Would you like to configure it, or accept the " +"default settings?" +msgstr "" +"Du er i ferd med å lage et nytt rom. Ønsker du å endre innstillingene, eller " +"bruke standardinnstillingene?" msgid "_Configure Room" msgstr "_Konfigurer rom" @@ -4333,8 +4645,12 @@ msgstr "Sett brukerens kallenavn" msgid "Please specify a new nickname for you." msgstr "Oppgi et nytt kallenavn for deg." -msgid "This information is visible to all contacts on your contact list, so choose something appropriate." -msgstr "Denne informasjonen vises til alle dine kontakter i kontaktlisten din, så velg noe passende." +msgid "" +"This information is visible to all contacts on your contact list, so choose " +"something appropriate." +msgstr "" +"Denne informasjonen vises til alle dine kontakter i kontaktlisten din, så " +"velg noe passende." msgid "Set Nickname..." msgstr "Sett Nick..." @@ -4345,9 +4661,6 @@ msgstr "Handlinger" msgid "Select an action" msgstr "Velg en handling" -msgid "Unable to retrieve MSN Address Book" -msgstr "Klarte ikke hente MSN-adressebok" - #. 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 @@ -4366,172 +4679,233 @@ msgid "Buddy list synchronization issue in %s (%s)" msgstr "Synkronisasjonsproblem med kontaktlisten i %s (%s)" #, c-format -msgid "%s on the local list is inside the group \"%s\" but not on the server list. Do you want this buddy to be added?" -msgstr "%s er på den lokale lista innenfor gruppa \"%s\", men ikke på tjenerlista. Ønsker du at denne kontakten skal bli lagt til?" +msgid "" +"%s on the local list is inside the group \"%s\" but not on the server list. " +"Do you want this buddy to be added?" +msgstr "" +"%s er på den lokale lista innenfor gruppa \"%s\", men ikke på tjenerlista. " +"Ønsker du at denne kontakten skal bli lagt til?" #, c-format -msgid "%s is on the local list but not on the server list. Do you want this buddy to be added?" -msgstr "%s er på den lokale lista, men ikke på tjenerlista. Ønsker du at denne kontakten skal bli lagt til?" +msgid "" +"%s is on the local list but not on the server list. Do you want this buddy " +"to be added?" +msgstr "" +"%s er på den lokale lista, men ikke på tjenerlista. Ønsker du at denne " +"kontakten skal bli lagt til?" +#, c-format msgid "Unable to parse message" msgstr "Klarte ikke tolke beskjed" +#, c-format msgid "Syntax Error (probably a client bug)" msgstr "Syntaksfeil (sannsynligvis en Pidgin-bug)" +#, c-format msgid "Invalid email address" msgstr "Ugyldig epostadresse" +#, c-format msgid "User does not exist" msgstr "Brukeren eksisterer ikke" +#, c-format msgid "Fully qualified domain name missing" msgstr "Fullstending domenenavn mangler" +#, c-format msgid "Already logged in" msgstr "Allerede logget inn" +#, c-format msgid "Invalid username" msgstr "Ugyldig brukernavn" +#, c-format msgid "Invalid friendly name" msgstr "Ugyldig vennlig navn" +#, c-format msgid "List full" msgstr "Listen er full" +#, c-format msgid "Already there" msgstr "Du er allerede der" +#, c-format msgid "Not on list" msgstr "Ikke på listen" +#, c-format msgid "User is offline" msgstr "Brukeren er avlogget" +#, c-format msgid "Already in the mode" msgstr "Du er allerede i modusen" +#, c-format msgid "Already in opposite list" msgstr "Du er allerede i den andre listen" +#, c-format msgid "Too many groups" msgstr "For mange grupper" +#, c-format msgid "Invalid group" msgstr "Ugyldig gruppe" +#, c-format msgid "User not in group" msgstr "Brukeren er ikke i gruppen" +#, c-format msgid "Group name too long" msgstr "Gruppenavnet er for langt" +#, c-format msgid "Cannot remove group zero" msgstr "Kan ikke fjerne gruppe null" +#, c-format msgid "Tried to add a user to a group that doesn't exist" msgstr "Prøvde å legge en bruker til i en ikke-eksisterende gruppe" +#, c-format msgid "Switchboard failed" msgstr "Feil med switchboard-tjenesten" +#, c-format msgid "Notify transfer failed" msgstr "Overføring av varsling feilet" +#, c-format msgid "Required fields missing" msgstr "Du har ikke fylt inn alle nødvendige felt" +#, c-format msgid "Too many hits to a FND" msgstr "For mange treff på en FND" +#, c-format msgid "Not logged in" msgstr "Ikke pålogget" +#, c-format msgid "Service temporarily unavailable" msgstr "Tjenesten midlertidig uttilgjengelig" +#, c-format msgid "Database server error" msgstr "Feil på databasetjeneren" +#, c-format msgid "Command disabled" msgstr "Kommando deaktivert" +#, c-format msgid "File operation error" msgstr "Filoperasjonsfeil" +#, c-format msgid "Memory allocation error" msgstr "Feil ved minneallokering" +#, c-format msgid "Wrong CHL value sent to server" msgstr "Feil CHL-verdi sendt til tjener" +#, c-format msgid "Server busy" msgstr "Tjeneren er opptatt" +#, c-format msgid "Server unavailable" msgstr "Tjeneren er ikke tilgjengelig" +#, c-format msgid "Peer notification server down" msgstr "Varslingstjeneren er ikke tilgjengelig" +#, c-format msgid "Database connect error" msgstr "Klarte ikke koble til databasen" +#, c-format msgid "Server is going down (abandon ship)" msgstr "Tjeneren er på vei nei (redde seg den som kan)" +#, c-format msgid "Error creating connection" msgstr "Feil: kunne ikke koble til" +#, c-format msgid "CVR parameters are either unknown or not allowed" msgstr "CVR-parametre er enten ukjent eller ikke tillatt" +#, c-format msgid "Unable to write" msgstr "Klarte ikke skrive" +#, c-format msgid "Session overload" msgstr "Sesjonsoverlast" +#, c-format msgid "User is too active" msgstr "Brukeren er for aktiv" +#, c-format msgid "Too many sessions" msgstr "For mange sesjoner" +#, c-format msgid "Passport not verified" msgstr "Passport-konto er ikke blitt verifisert" +#, c-format msgid "Bad friend file" msgstr "Ugyldig 'friend'-fil" +#, c-format msgid "Not expected" msgstr "Uventet" +#, c-format msgid "Friendly name changes too rapidly" msgstr "Visningsnavnet endres for raskt" +#, c-format msgid "Server too busy" msgstr "Tjeneren er for opptatt" +#, c-format msgid "Authentication failed" msgstr "Autentisering feilet" +#, c-format msgid "Not allowed when offline" msgstr "Ikke tillatt når avlogget" +#, c-format msgid "Not accepting new users" msgstr "Nye brukere vil ikke bli godtatt" +#, c-format msgid "Kids Passport without parental consent" msgstr "Passport for barn, men har ikke foreldregodkjenning" +#, c-format msgid "Passport account not yet verified" msgstr "Passport-konto er ikke blitt verifisert enda" msgid "Passport account suspended" msgstr "Passport-konto inndratt" +#, c-format msgid "Bad ticket" msgstr "Bad ticket" @@ -4548,7 +4922,7 @@ msgid "Other Contacts" msgstr "Andre kontakter" msgid "Non-IM Contacts" -msgstr "Ikke-direktemeldingskontakter" +msgstr "Ikke-lynmeldingskontakter" msgid "Nudge" msgstr "Dytt" @@ -4585,8 +4959,11 @@ msgstr "Sett ditt mobiltelefonnummer." msgid "Allow MSN Mobile pages?" msgstr "Tillat tekstmeldinger via MSN?" -msgid "Do you want to allow or disallow people on your buddy list to send you MSN Mobile pages to your cell phone or other mobile device?" -msgstr "Ønsker du å tillate eller forby kontakter å sende deg tekstmeldinger via MSN?" +msgid "" +"Do you want to allow or disallow people on your buddy list to send you MSN " +"Mobile pages to your cell phone or other mobile device?" +msgstr "" +"Ønsker du å tillate eller forby kontakter å sende deg tekstmeldinger via MSN?" msgid "Allow" msgstr "Tillat" @@ -4602,7 +4979,8 @@ msgid "No text is blocked for this account." msgstr "Ingen tekst blokkert for denne kontoen." #, c-format -msgid "MSN servers are currently blocking the following regular expressions:<br/>%s" +msgid "" +"MSN servers are currently blocking the following regular expressions:<br/>%s" msgstr "MSN-tjenere blokkerer for øyeblikket følgende regulære uttrykk:<br/>%s" msgid "This account does not have email enabled." @@ -4693,7 +5071,8 @@ msgid "Initiate _Chat" msgstr "Start gruppesamtale" msgid "SSL support is needed for MSN. Please install a supported SSL library." -msgstr "SSL-støtte kreves for MSN. Vennligst installer et støttet SSL-bibliotek." +msgstr "" +"SSL-støtte kreves for MSN. Vennligst installer et støttet SSL-bibliotek." msgid "Failed to connect to server." msgstr "Klarte ikke koble til tjener." @@ -4808,19 +5187,19 @@ msgid "Work Address" msgstr "Arbeidsadresse" msgid "Work Mobile" -msgstr "Mobil Jobb" +msgstr "Mobil arbeid" msgid "Work Pager" -msgstr "Telefonsøker Jobb" +msgstr "Telefonsøker arbeid" msgid "Work Fax" -msgstr "Fax Jobb" +msgstr "Fax arbeid" msgid "Work Email" -msgstr "E-post Arbeid" +msgstr "E-post arbeid" msgid "Work IM" -msgstr "Lynmelding Arbeid" +msgstr "Lynmelding arbeid" msgid "Start Date" msgstr "Startdato" @@ -4837,11 +5216,20 @@ msgstr "Hjemmeside" msgid "The user has not created a public profile." msgstr "Brukeren har ikke opprettet en offentlig profil." -msgid "MSN reported not being able to find the user's profile. This either means that the user does not exist, or that the user exists but has not created a public profile." -msgstr "MSN klarte ikke å finne brukerens profil. Dette betyr enten at brukeren ikke eksisterer, eller at brukeren ikke har opprettet en offentlig profil." +msgid "" +"MSN reported not being able to find the user's profile. This either means " +"that the user does not exist, or that the user exists but has not created a " +"public profile." +msgstr "" +"MSN klarte ikke å finne brukerens profil. Dette betyr enten at brukeren ikke " +"eksisterer, eller at brukeren ikke har opprettet en offentlig profil." -msgid "Could not find any information in the user's profile. The user most likely does not exist." -msgstr "Pidgin klarte ikke finne noen informasjon i brukerens profil. Antakelig eksisterer brukeren ikke." +msgid "" +"Could not find any information in the user's profile. The user most likely " +"does not exist." +msgstr "" +"Pidgin klarte ikke finne noen informasjon i brukerens profil. Antakelig " +"eksisterer brukeren ikke." msgid "View web profile" msgstr "Vis nettprofil" @@ -4917,7 +5305,8 @@ msgstr "Klarte ikke tillate bruker på %s (%s)" #, c-format msgid "%s could not be added because your buddy list is full." -msgstr "%s kunne ikke bli lagt til kontaktlista, fordi din kontaktliste er full." +msgstr "" +"%s kunne ikke bli lagt til kontaktlista, fordi din kontaktliste er full." #, c-format msgid "%s is not a valid passport account." @@ -4937,24 +5326,36 @@ msgstr "Klarte ikke slette gruppe" #, c-format msgid "" -"The MSN server will shut down for maintenance in %d minute. You will automatically be signed out at that time. Please finish any conversations in progress.\n" +"The MSN server will shut down for maintenance in %d minute. You will " +"automatically be signed out at that time. Please finish any conversations " +"in progress.\n" "\n" -"After the maintenance has been completed, you will be able to successfully sign in." +"After the maintenance has been completed, you will be able to successfully " +"sign in." msgid_plural "" -"The MSN server will shut down for maintenance in %d minutes. You will automatically be signed out at that time. Please finish any conversations in progress.\n" +"The MSN server will shut down for maintenance in %d minutes. You will " +"automatically be signed out at that time. Please finish any conversations " +"in progress.\n" "\n" -"After the maintenance has been completed, you will be able to successfully sign in." +"After the maintenance has been completed, you will be able to successfully " +"sign in." msgstr[0] "" -"MSN-tjeneren vil stenge ned pga. vedlikeholdsarbeid i løpet av %d minutt. Du vil da bli frakoblet, så vennligst avslutt eventuelle samtaler før det.\n" +"MSN-tjeneren vil stenge ned pga. vedlikeholdsarbeid i løpet av %d minutt. Du " +"vil da bli frakoblet, så vennligst avslutt eventuelle samtaler før det.\n" "\n" "Etter at vedlikeholdsarbeidet er ferdig, kan du logge på igjen." msgstr[1] "" -"MSN-tjeneren vil stenge ned pga. vedlikeholdsarbeid i løpet av %d minutter. Du vil da bli frakoblet, så vennligst avslutt eventuelle samtaler før det.\n" +"MSN-tjeneren vil stenge ned pga. vedlikeholdsarbeid i løpet av %d minutter. " +"Du vil da bli frakoblet, så vennligst avslutt eventuelle samtaler før det.\n" "\n" "Etter at vedlikeholdsarbeidet er ferdig, kan du logge på igjen." -msgid "Message was not sent because the system is unavailable. This normally happens when the user is blocked or does not exist." -msgstr "Beskjeden ble ikke sendt fordi system er utilgjengelig. Dette skjer normalt når brukeren er blokkert eller ikke eksisterer." +msgid "" +"Message was not sent because the system is unavailable. This normally " +"happens when the user is blocked or does not exist." +msgstr "" +"Beskjeden ble ikke sendt fordi system er utilgjengelig. Dette skjer normalt " +"når brukeren er blokkert eller ikke eksisterer." msgid "Message was not sent because messages are being sent too quickly." msgstr "Meldingen ble ikke sendt fordi meldinger blir sendt for raskt." @@ -4992,7 +5393,8 @@ msgid "You have signed on from another location." msgstr "Du ble logget av fordi du har logget på et annet sted." msgid "The MSN servers are temporarily unavailable. Please wait and try again." -msgstr "MSN-tjenerene er midlertidig utilgjengelig.Vennligst prøv igjen senere." +msgstr "" +"MSN-tjenerene er midlertidig utilgjengelig.Vennligst prøv igjen senere." msgid "The MSN servers are going down temporarily." msgstr "MSN-tjenerne vil bli utilgjengelig en liten stund." @@ -5001,8 +5403,11 @@ msgstr "MSN-tjenerne vil bli utilgjengelig en liten stund." msgid "Unable to authenticate: %s" msgstr "Klarte ikke autentisere: %s" -msgid "Your MSN buddy list is temporarily unavailable. Please wait and try again." -msgstr "Din MSN-kontaktliste er midlertidig utilgjengelig. Vennligst prøv igjen senere." +msgid "" +"Your MSN buddy list is temporarily unavailable. Please wait and try again." +msgstr "" +"Din MSN-kontaktliste er midlertidig utilgjengelig. Vennligst prøv igjen " +"senere." msgid "Handshaking" msgstr "Håndtrykk" @@ -5035,7 +5440,8 @@ msgid "Message may have not been sent because a timeout occurred:" msgstr "Meldingen ble kanskje ikke sendt, et tidsavbrudd inntraff:" msgid "Message could not be sent, not allowed while invisible:" -msgstr "Meldingen ble ikke sendt, du ikke kan sende meldinger når du er usynlig:" +msgstr "" +"Meldingen ble ikke sendt, du ikke kan sende meldinger når du er usynlig:" msgid "Message could not be sent because the user is offline:" msgstr "Meldingen kunne ikke bli sendt, brukeren er frakoblet:" @@ -5046,11 +5452,18 @@ msgstr "Meldingen kunne ikke bli sendt på grunn av en tilkoblingfeil:" msgid "Message could not be sent because we are sending too quickly:" msgstr "Meldingen ble ikke sendt fordi vi sender for raskt:" -msgid "Message could not be sent because we were unable to establish a session with the server. This is likely a server problem, try again in a few minutes:" -msgstr "Beskjeden kunne ikke bli sendt fordi vi kunne ikke opprette en økt med serveren. Dette er sannsynligvis et server problem, prøv igjen om noen minutter:" +msgid "" +"Message could not be sent because we were unable to establish a session with " +"the server. This is likely a server problem, try again in a few minutes:" +msgstr "" +"Beskjeden kunne ikke bli sendt fordi vi kunne ikke opprette en økt med " +"serveren. Dette er sannsynligvis et server problem, prøv igjen om noen " +"minutter:" -msgid "Message could not be sent because an error with the switchboard occurred:" -msgstr "Meldingen kunne ikke bli sendt, da det skjedde en feil med sentralbordet:" +msgid "" +"Message could not be sent because an error with the switchboard occurred:" +msgstr "" +"Meldingen kunne ikke bli sendt, da det skjedde en feil med sentralbordet:" msgid "Message may have not been sent because an unknown error occurred:" msgstr "Meldingen kunne ikke bli sendt på grunn av en ukjent feil:" @@ -5142,10 +5555,18 @@ msgid "IM Friends" msgstr "Lynmeldingsvenner" #, c-format -msgid "%d buddy was added or updated from the server (including buddies already on the server-side list)" -msgid_plural "%d buddies were added or updated from the server (including buddies already on the server-side list)" -msgstr[0] "%d kontakt ble lagt til eller oppdatert fra serveren (inkludert kontakter allerede på tjenerside-listen)" -msgstr[1] "%d kontakter ble lagt til eller oppdatert fra serveren (inkludert kontakter allerede på tjenerside-listen)" +msgid "" +"%d buddy was added or updated from the server (including buddies already on " +"the server-side list)" +msgid_plural "" +"%d buddies were added or updated from the server (including buddies already " +"on the server-side list)" +msgstr[0] "" +"%d kontakt ble lagt til eller oppdatert fra serveren (inkludert kontakter " +"allerede på tjenerside-listen)" +msgstr[1] "" +"%d kontakter ble lagt til eller oppdatert fra serveren (inkludert kontakter " +"allerede på tjenerside-listen)" msgid "Add contacts from server" msgstr "Ugyldig svar fra tjener" @@ -5161,8 +5582,15 @@ msgid "Protocol error, code %d: %s" msgstr "Protokoll feil, kode %d: %s" #, c-format -msgid "%s Your password is %d characters, greater than the expected maximum length of %d for MySpaceIM. Please shorten your password at http://profileedit.myspace.com/index.cfm?fuseaction=accountSettings.changePassword and try again." -msgstr "%s Passordet ditt er på %d tegn. MySpaceIM godtar bare %d tegn. Gjør passordet ditt kortere på nettsiden http://profileedit.myspace.com/index.cfm?fuseaction=accountSettings.changePassword og prøv på nytt." +msgid "" +"%s Your password is %d characters, greater than the expected maximum length " +"of %d for MySpaceIM. Please shorten your password at http://profileedit." +"myspace.com/index.cfm?fuseaction=accountSettings.changePassword and try " +"again." +msgstr "" +"%s Passordet ditt er på %d tegn. MySpaceIM godtar bare %d tegn. Gjør " +"passordet ditt kortere på nettsiden http://profileedit.myspace.com/index.cfm?" +"fuseaction=accountSettings.changePassword og prøv på nytt." msgid "MySpaceIM Error" msgstr "MySpaceIM-feil" @@ -5204,8 +5632,12 @@ msgstr "Manglende Summering" msgid "The RC4 cipher could not be found" msgstr "RC4 summeringen kunne ikke bli funnet" -msgid "Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will not be loaded." -msgstr "Oppgrader til en libpurple med RC4 støtte (>= 2.0.1). MySpaceIM tillegg vil ikke bli lastet." +msgid "" +"Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will " +"not be loaded." +msgstr "" +"Oppgrader til en libpurple med RC4 støtte (>= 2.0.1). MySpaceIM tillegg vil " +"ikke bli lastet." msgid "Add friends from MySpace.com" msgstr "Legg til venner fra MySpace.com" @@ -5481,8 +5913,12 @@ msgstr "Feil brukernavn eller passord" msgid "Could not recognize the host of the username you entered" msgstr "Klarte ikke kjenne igjen verten til det brukernavnet du tastet inn" -msgid "Your account has been disabled because too many incorrect passwords were entered" -msgstr "Kontoen din har blitt deaktivert på grunn av for mange ugyldige inntastede passord" +msgid "" +"Your account has been disabled because too many incorrect passwords were " +"entered" +msgstr "" +"Kontoen din har blitt deaktivert på grunn av for mange ugyldige inntastede " +"passord" msgid "You cannot add the same person twice to a conversation" msgstr "Du kan ikke legge til den samme personen to ganger til en samtale" @@ -5502,8 +5938,11 @@ msgstr "Inkompatibel protokollversjon" msgid "The user has blocked you" msgstr "Brukeren har blokkert deg" -msgid "This evaluation version does not allow more than ten users to log in at one time" -msgstr "Denne testversjonen tillater ikke mer enn ti samtidige innloggede brukere" +msgid "" +"This evaluation version does not allow more than ten users to log in at one " +"time" +msgstr "" +"Denne testversjonen tillater ikke mer enn ti samtidige innloggede brukere" msgid "The user is either offline or you are blocked" msgstr "Brukeren er enten frakoplet, eller så er du blokkert" @@ -5535,19 +5974,28 @@ msgstr "Klarte ikke invitere bruker (%s)." #, c-format msgid "Unable to send message to %s. Could not create the conference (%s)." -msgstr "Klarte ikke sende beskjed til %s. Klarte ikke sette opp konferansen (%s)." +msgstr "" +"Klarte ikke sende beskjed til %s. Klarte ikke sette opp konferansen (%s)." #, c-format msgid "Unable to send message. Could not create the conference (%s)." msgstr "Klarte ikke sende beskjed. Klarte ikke sette opp konferansen (%s)." #, c-format -msgid "Unable to move user %s to folder %s in the server side list. Error while creating folder (%s)." -msgstr "Klarte ikke flytte brukeren %s til mappe %s i lista på tjenersiden. En feil oppsto under opprettelse av mappe (%s)." +msgid "" +"Unable to move user %s to folder %s in the server side list. Error while " +"creating folder (%s)." +msgstr "" +"Klarte ikke flytte brukeren %s til mappe %s i lista på tjenersiden. En feil " +"oppsto under opprettelse av mappe (%s)." #, c-format -msgid "Unable to add %s to your buddy list. Error creating folder in server side list (%s)." -msgstr "Klarte ikke legge til %s i kontaktlista. En feil oppsto under opprettelse i lista på tjenersiden (%s)." +msgid "" +"Unable to add %s to your buddy list. Error creating folder in server side " +"list (%s)." +msgstr "" +"Klarte ikke legge til %s i kontaktlista. En feil oppsto under opprettelse i " +"lista på tjenersiden (%s)." #, c-format msgid "Could not get details for user %s (%s)." @@ -5636,20 +6084,27 @@ msgid "Would you like to join the conversation?" msgstr "Ønsker du å bli med i samtalen?" msgid "You have been logged out because you logged in at another workstation." -msgstr "Du ble logget av fordi du har logget på med dette skjermnavnet et annet sted." +msgstr "" +"Du ble logget av fordi du har logget på med dette skjermnavnet et annet sted." #, c-format -msgid "%s appears to be offline and did not receive the message that you just sent." +msgid "" +"%s appears to be offline and did not receive the message that you just sent." msgstr "%s ser ut til å være frakoplet, og mottok ikke meldingen du sendte." -msgid "Unable to connect to server. Please enter the address of the server you wish to connect to." -msgstr "Klarte ikke kople til tjener, skriv inn adressen til tjeneren du ønsker å kople til." +msgid "" +"Unable to connect to server. Please enter the address of the server you wish " +"to connect to." +msgstr "" +"Klarte ikke kople til tjener, skriv inn adressen til tjeneren du ønsker å " +"kople til." msgid "Error. SSL support is not installed." msgstr "Feil: SSL-støtte er ikke installert." msgid "This conference has been closed. No more messages can be sent." -msgstr "Denne konferansen har blitt stengt, ingen flere meldinger kan bli sendt." +msgstr "" +"Denne konferansen har blitt stengt, ingen flere meldinger kan bli sendt." #. *< type #. *< ui_requirement @@ -5742,8 +6197,12 @@ msgid "Direct IM established" msgstr "Direkte lynmelding opprettet" #, c-format -msgid "%s tried to send you a %s file, but we only allow files up to %s over Direct IM. Try using file transfer instead.\n" -msgstr "%s prøvde å sende deg en %s fil, men vi tillater kun filer opp til %s over Direct IM. Prøv å bruke filoverføring istedenfor.\n" +msgid "" +"%s tried to send you a %s file, but we only allow files up to %s over Direct " +"IM. Try using file transfer instead.\n" +msgstr "" +"%s prøvde å sende deg en %s fil, men vi tillater kun filer opp til %s over " +"Direct IM. Prøv å bruke filoverføring istedenfor.\n" #, c-format msgid "File %s is %s, which is larger than the maximum size of %s." @@ -5821,12 +6280,24 @@ msgstr "Køen er full" msgid "Not while on AOL" msgstr "Ikke mens du er på AOL" -msgid "(There was an error receiving this message. The buddy you are speaking with is probably using a different encoding than expected. If you know what encoding he is using, you can specify it in the advanced account options for your AIM/ICQ account.)" -msgstr "(Det oppsto en feil i mottak av denne beskjeden. Kontakten du snakker med bruker sannsynligvis en annen koding enn forventet. Om du vet hvilken koding han bruker, kan du spesifisere dette i avanserte kontoinstillinger for din AIM/ICQ konto.)" +msgid "" +"(There was an error receiving this message. The buddy you are speaking with " +"is probably using a different encoding than expected. If you know what " +"encoding he is using, you can specify it in the advanced account options for " +"your AIM/ICQ account.)" +msgstr "" +"(Det oppsto en feil i mottak av denne beskjeden. Kontakten du snakker med " +"bruker sannsynligvis en annen koding enn forventet. Om du vet hvilken " +"koding han bruker, kan du spesifisere dette i avanserte kontoinstillinger " +"for din AIM/ICQ konto.)" #, c-format -msgid "(There was an error receiving this message. Either you and %s have different encodings selected, or %s has a buggy client.)" -msgstr "(Det oppstod en feil under mottaket av denne beskjeden. Enten har du og %s valgt ulike tegnkoding, eller så bruker %s en klient med feil i.)" +msgid "" +"(There was an error receiving this message. Either you and %s have " +"different encodings selected, or %s has a buggy client.)" +msgstr "" +"(Det oppstod en feil under mottaket av denne beskjeden. Enten har du og %s " +"valgt ulike tegnkoding, eller så bruker %s en klient med feil i.)" #. Label msgid "Buddy Icon" @@ -5946,8 +6417,15 @@ msgid "Finalizing connection" msgstr "Fullfører tilkobling" #, c-format -msgid "Unable to login: Could not sign on as %s because the username is invalid. Usernames must be a valid email address, or start with a letter and contain only letters, numbers and spaces, or contain only numbers." -msgstr "Får ikke til å logge inn: Klarte ikke logge på som %s fordi brukernavnet er ugyldig. Brukernavn må være en gyldig e-postadresse, eller begynna med en bokstav og bare inneholde bokstaver, tall og mellomrom, eller bare inneholde tall." +msgid "" +"Unable to login: Could not sign on as %s because the username is invalid. " +"Usernames must be a valid email address, or start with a letter and contain " +"only letters, numbers and spaces, or contain only numbers." +msgstr "" +"Får ikke til å logge inn: Klarte ikke logge på som %s fordi brukernavnet er " +"ugyldig. Brukernavn må være en gyldig e-postadresse, eller begynna med en " +"bokstav og bare inneholde bokstaver, tall og mellomrom, eller bare inneholde " +"tall." #. Unregistered screen name #. uid is not exist @@ -5967,8 +6445,12 @@ msgstr "AOL Instant Messenger-tjenesten er midlertidig utilgjengelig." #. screen name connecting too frequently #. IP address connecting too frequently -msgid "You have been connecting and disconnecting too frequently. Wait ten minutes and try again. If you continue to try, you will need to wait even longer." -msgstr "Du har koblet til og koblet fra for hurtig. Vent ti minutter og prøv igjen. Hvis du fortsetter å prøve nå, vil du måtte vente enda lenger." +msgid "" +"You have been connecting and disconnecting too frequently. Wait ten minutes " +"and try again. If you continue to try, you will need to wait even longer." +msgstr "" +"Du har koblet til og koblet fra for hurtig. Vent ti minutter og prøv igjen. " +"Hvis du fortsetter å prøve nå, vil du måtte vente enda lenger." #, c-format msgid "The client version you are using is too old. Please upgrade at %s" @@ -5997,7 +6479,9 @@ msgstr "_OK" #, c-format msgid "You may be disconnected shortly. If so, check %s for updates." -msgstr "Du kan bli frakoblet ganske snart. Hvis det skjer, sjekk %s for oppdateringer." +msgstr "" +"Du kan bli frakoblet ganske snart. Hvis det skjer, sjekk %s for " +"oppdateringer." msgid "Unable to get a valid AIM login hash." msgstr "Klarte ikke å motta gyldig AIM-påloggingshash." @@ -6016,7 +6500,8 @@ msgid "Unable to initialize connection" msgstr "Klarte ikke lage ny tilkobling" msgid "Please authorize me so I can add you to my buddy list." -msgstr "Vennligst godkjenn meg slik at jeg kan legge deg til i kontaktlisten min." +msgstr "" +"Vennligst godkjenn meg slik at jeg kan legge deg til i kontaktlisten min." msgid "Authorization Request Message:" msgstr "Beskjed i godkjenningsforespørsel:" @@ -6032,10 +6517,12 @@ msgstr "Godkjenning nektet, grunn:" #, c-format msgid "" -"The user %u has denied your request to add them to your buddy list for the following reason:\n" +"The user %u has denied your request to add them to your buddy list for the " +"following reason:\n" "%s" msgstr "" -"Brukeren %u har avslått din forespørsel om å bli lagt til i din kontaktliste med følgende grunn:\n" +"Brukeren %u har avslått din forespørsel om å bli lagt til i din kontaktliste " +"med følgende grunn:\n" "%s" msgid "ICQ authorization denied." @@ -6044,7 +6531,9 @@ msgstr "ICQ-godkjenning avslått." #. Someone has granted you authorization #, c-format msgid "The user %u has granted your request to add them to your buddy list." -msgstr "Brukeren %u har godtatt din forespørsel om å bli lagt til i kontaktlisten din." +msgstr "" +"Brukeren %u har godtatt din forespørsel om å bli lagt til i kontaktlisten " +"din." #, c-format msgid "" @@ -6108,22 +6597,37 @@ msgstr[0] "Du har gått glipp av %hu beskjed fra %s fordi den var for stor." msgstr[1] "Du har gått glipp av %hu beskjeder fra %s fordi de var for store." #, c-format -msgid "You missed %hu message from %s because the rate limit has been exceeded." -msgid_plural "You missed %hu messages from %s because the rate limit has been exceeded." -msgstr[0] "Du har gått glipp av %hu beskjed fra %s fordi hastighetsgrensen har blitt overskredet." -msgstr[1] "Du har gått glipp av %hu beskjeder fra %s fordi hastighetsgrensen har blitt overskredet." +msgid "" +"You missed %hu message from %s because the rate limit has been exceeded." +msgid_plural "" +"You missed %hu messages from %s because the rate limit has been exceeded." +msgstr[0] "" +"Du har gått glipp av %hu beskjed fra %s fordi hastighetsgrensen har blitt " +"overskredet." +msgstr[1] "" +"Du har gått glipp av %hu beskjeder fra %s fordi hastighetsgrensen har blitt " +"overskredet." #, 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] "Du har gått glipp av %hu beskjed fra %s fordi hans/hennes advarselsnivå er for høyt." -msgstr[1] "Du har gått glipp av %hu beskjeder fra %s fordi hans/hennes advarselsnivå er for høyt." +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] "" +"Du har gått glipp av %hu beskjed fra %s fordi hans/hennes advarselsnivå er " +"for høyt." +msgstr[1] "" +"Du har gått glipp av %hu beskjeder fra %s fordi hans/hennes advarselsnivå er " +"for høyt." #, 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] "Du har gått glipp av %hu beskjed fra %s fordi ditt advarselsnivå er for høyt." -msgstr[1] "Du har gått glipp av %hu beskjed fra %s fordi ditt advarselsnivå er for høyt." +msgid_plural "" +"You missed %hu messages from %s because your warning level is too high." +msgstr[0] "" +"Du har gått glipp av %hu beskjed fra %s fordi ditt advarselsnivå er for høyt." +msgstr[1] "" +"Du har gått glipp av %hu beskjed fra %s fordi ditt advarselsnivå er for høyt." #, c-format msgid "You missed %hu message from %s for an unknown reason." @@ -6160,11 +6664,19 @@ msgid "Your AIM connection may be lost." msgstr "AIM-tilkoblingen kan være brutt." #. The conversion failed! -msgid "[Unable to display a message from this user because it contained invalid characters.]" -msgstr "[Klarte ikke vise en melding fra denne brukeren da den inneholdt ugyldige tegn.]" +msgid "" +"[Unable to display a message from this user because it contained invalid " +"characters.]" +msgstr "" +"[Klarte ikke vise en melding fra denne brukeren da den inneholdt ugyldige " +"tegn.]" -msgid "The last action you attempted could not be performed because you are over the rate limit. Please wait 10 seconds and try again." -msgstr "Den siste kommandoen ble ikke utført fordi du har overskredet hastighetsgrensen. Vennligst vent 10 sekunder og prøv igjen." +msgid "" +"The last action you attempted could not be performed because you are over " +"the rate limit. Please wait 10 seconds and try again." +msgstr "" +"Den siste kommandoen ble ikke utført fordi du har overskredet " +"hastighetsgrensen. Vennligst vent 10 sekunder og prøv igjen." #, c-format msgid "You have been disconnected from chat room %s." @@ -6217,28 +6729,48 @@ msgid "Account Confirmation Requested" msgstr "Kontobekreftelse forespurt" #, c-format -msgid "Error 0x%04x: Unable to format username because the requested name differs from the original." -msgstr "Feil 0x%04x: Klarte ikke formatere brukernavnet fordi det forespurte navnet er forskjellig fra det opprinnelige." +msgid "" +"Error 0x%04x: Unable to format username because the requested name differs " +"from the original." +msgstr "" +"Feil 0x%04x: Klarte ikke formatere brukernavnet fordi det forespurte navnet " +"er forskjellig fra det opprinnelige." #, c-format msgid "Error 0x%04x: Unable to format username because it is invalid." msgstr "Feil 0x%04x: Klarte ikke formatere brukernavnet fordi det er ugyldig." #, c-format -msgid "Error 0x%04x: Unable to format username because the requested name is too long." -msgstr "Feil 0x%04x: Klarte ikke formatere brukernavnet fordi det forespurte navnet er for langt." +msgid "" +"Error 0x%04x: Unable to format username because the requested name is too " +"long." +msgstr "" +"Feil 0x%04x: Klarte ikke formatere brukernavnet fordi det forespurte navnet " +"er for langt." #, c-format -msgid "Error 0x%04x: Unable to change email address because there is already a request pending for this username." -msgstr "Feil 0x%04x: Klarte ikke endre e-postadressen fordi det finnes en pågående forespørsel for dette brukernavnet." +msgid "" +"Error 0x%04x: Unable to change email address because there is already a " +"request pending for this username." +msgstr "" +"Feil 0x%04x: Klarte ikke endre e-postadressen fordi det finnes en pågående " +"forespørsel for dette brukernavnet." #, c-format -msgid "Error 0x%04x: Unable to change email address because the given address has too many usernames associated with it." -msgstr "Feil 0x%04x: Klarte ikke endre e-postadressen fordi den gitte adressen har for mange brukernavn assosiert ved seg." +msgid "" +"Error 0x%04x: Unable to change email address because the given address has " +"too many usernames associated with it." +msgstr "" +"Feil 0x%04x: Klarte ikke endre e-postadressen fordi den gitte adressen har " +"for mange brukernavn assosiert ved seg." #, c-format -msgid "Error 0x%04x: Unable to change email address because the given address is invalid." -msgstr "Feil 0x%04x: Klarte ikke endre e-postadressen fordi den gitte adressen er ugyldig." +msgid "" +"Error 0x%04x: Unable to change email address because the given address is " +"invalid." +msgstr "" +"Feil 0x%04x: Klarte ikke endre e-postadressen fordi den gitte adressen er " +"ugyldig." #, c-format msgid "Error 0x%04x: Unknown error." @@ -6254,36 +6786,67 @@ msgstr "E-postadressen for %s er %s" msgid "Account Info" msgstr "Kontoinformasjon" -msgid "Your IM Image was not sent. You must be Direct Connected to send IM Images." -msgstr "Ditt direktemeldingsbilde ble ikke sendt. Du må være direkte tilkoblet for å sende direktemeldingsbilder." +msgid "" +"Your IM Image was not sent. You must be Direct Connected to send IM Images." +msgstr "" +"Ditt lynmeldingsbilde ble ikke sendt. Du må være direkte tilkoblet for å " +"sende lynmeldingsbilder." msgid "Unable to set AIM profile." msgstr "Klarte ikke sette AIM-profil." -msgid "You have probably requested to set your profile before the login procedure completed. Your profile remains unset; try setting it again when you are fully connected." -msgstr "Du har antakeligvis prøvd å lagre profilinformasjon før innloggingsprosedyren var ferdig. Din profil er ennå ikke blitt lagret. Prøv å lagre den igjen når du er ferdig pålogget." +msgid "" +"You have probably requested to set your profile before the login procedure " +"completed. Your profile remains unset; try setting it again when you are " +"fully connected." +msgstr "" +"Du har antakeligvis prøvd å lagre profilinformasjon før " +"innloggingsprosedyren var ferdig. Din profil er ennå ikke blitt lagret. Prøv " +"å lagre den igjen når du er ferdig pålogget." #, c-format -msgid "The maximum profile length of %d byte has been exceeded. It has been truncated for you." -msgid_plural "The maximum profile length of %d bytes has been exceeded. It has been truncated for you." -msgstr[0] "Maksimum profillengde på %d byte har blitt overskredet. Pidgin har avkortet den før den ble lagret." -msgstr[1] "Maksimum profillengde på %d bytes har blitt overskredet. Pidgin har avkortet den før den ble lagret." +msgid "" +"The maximum profile length of %d byte has been exceeded. It has been " +"truncated for you." +msgid_plural "" +"The maximum profile length of %d bytes has been exceeded. It has been " +"truncated for you." +msgstr[0] "" +"Maksimum profillengde på %d byte har blitt overskredet. Pidgin har avkortet " +"den før den ble lagret." +msgstr[1] "" +"Maksimum profillengde på %d bytes har blitt overskredet. Pidgin har avkortet " +"den før den ble lagret." msgid "Profile too long." msgstr "Profilen er for stor." #, c-format -msgid "The maximum away message length of %d byte has been exceeded. It has been truncated for you." -msgid_plural "The maximum away message length of %d bytes has been exceeded. It has been truncated for you." -msgstr[0] "Maksimumslengden på %d bytes for fraværsbeskjeder har blitt overskredet. Pidgin har avkortet den." -msgstr[1] "Maksimumslengden på %d bytes for fraværsbeskjeder har blitt overskredet. Pidgin har avkortet den." +msgid "" +"The maximum away message length of %d byte has been exceeded. It has been " +"truncated for you." +msgid_plural "" +"The maximum away message length of %d bytes has been exceeded. It has been " +"truncated for you." +msgstr[0] "" +"Maksimumslengden på %d bytes for fraværsbeskjeder har blitt overskredet. " +"Pidgin har avkortet den." +msgstr[1] "" +"Maksimumslengden på %d bytes for fraværsbeskjeder har blitt overskredet. " +"Pidgin har avkortet den." msgid "Away message too long." msgstr "Fraværsbeskjeden er for lang." #, c-format -msgid "Could not add the buddy %s because the username is invalid. Usernames must be a valid email address, or start with a letter and contain only letters, numbers and spaces, or contain only numbers." -msgstr "Klarte ikke legge til kontakten %s fordi brukernavnet er ugyldig. Brukernavn må enten være en gyldig e-postadresse eller starte med en bokstav og inneholde kun bokstaver, tall og mellomrom, eller bare inneholde nummer." +msgid "" +"Could not add the buddy %s because the username is invalid. Usernames must " +"be a valid email address, or start with a letter and contain only letters, " +"numbers and spaces, or contain only numbers." +msgstr "" +"Klarte ikke legge til kontakten %s fordi brukernavnet er ugyldig. Brukernavn " +"må enten være en gyldig e-postadresse eller starte med en bokstav og " +"inneholde kun bokstaver, tall og mellomrom, eller bare inneholde nummer." msgid "Unable to Add" msgstr "Klarte ikke legge til" @@ -6291,15 +6854,23 @@ msgstr "Klarte ikke legge til" msgid "Unable to Retrieve Buddy List" msgstr "Klarte ikke hente kontaktliste" -msgid "The AIM servers were temporarily unable to send your buddy list. Your buddy list is not lost, and will probably become available in a few minutes." -msgstr "Klarte ikke å hente kontaktlisten din fra AIM-tjenerne. Kontaktlisten er ikke tapt, og vil sannsynligvis bli tilgjengelig i løpet av få minutter." +msgid "" +"The AIM servers were temporarily unable to send your buddy list. Your buddy " +"list is not lost, and will probably become available in a few minutes." +msgstr "" +"Klarte ikke å hente kontaktlisten din fra AIM-tjenerne. Kontaktlisten er " +"ikke tapt, og vil sannsynligvis bli tilgjengelig i løpet av få minutter." msgid "Orphans" msgstr "Ugrupperte" #, c-format -msgid "Could not add the buddy %s because you have too many buddies in your buddy list. Please remove one and try again." -msgstr "Klarte ikke legge til kontakten %s fordi du har for mange kontakter i listen. Vennligst fjern en og prøv igjen." +msgid "" +"Could not add the buddy %s because you have too many buddies in your buddy " +"list. Please remove one and try again." +msgstr "" +"Klarte ikke legge til kontakten %s fordi du har for mange kontakter i " +"listen. Vennligst fjern en og prøv igjen." msgid "(no name)" msgstr "(uten navn)" @@ -6309,8 +6880,12 @@ msgid "Could not add the buddy %s for an unknown reason." msgstr "Klarte ikke legge til kontakten %s pga ukjent årsak." #, c-format -msgid "The user %s has given you permission to add him or her to your buddy list. Do you want to add this user?" -msgstr "Brukeren %s har gitt deg tillatelse til å legge han eller henne til i kontaktlisten din. Ønsker du å legge til denne brukeren?" +msgid "" +"The user %s has given you permission to add him or her to your buddy list. " +"Do you want to add this user?" +msgstr "" +"Brukeren %s har gitt deg tillatelse til å legge han eller henne til i " +"kontaktlisten din. Ønsker du å legge til denne brukeren?" msgid "Authorization Given" msgstr "Godkjent" @@ -6318,7 +6893,9 @@ msgstr "Godkjent" #. Granted #, c-format msgid "The user %s has granted your request to add them to your buddy list." -msgstr "Brukeren %s har akseptert din forespørsel om å bli lagt til i kontaktlisten din." +msgstr "" +"Brukeren %s har akseptert din forespørsel om å bli lagt til i kontaktlisten " +"din." msgid "Authorization Granted" msgstr "Godkjent" @@ -6326,10 +6903,12 @@ msgstr "Godkjent" #. Denied #, c-format msgid "" -"The user %s has denied your request to add them to your buddy list for the following reason:\n" +"The user %s has denied your request to add them to your buddy list for the " +"following reason:\n" "%s" msgstr "" -"Brukeren %s har avslått din forespørsel om å bli lagt til i din kontaktliste med følgende grun:\n" +"Brukeren %s har avslått din forespørsel om å bli lagt til i din kontaktliste " +"med følgende grun:\n" "%s" msgid "Authorization Denied" @@ -6339,7 +6918,9 @@ msgid "_Exchange:" msgstr "_Utveksling:" msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats." -msgstr "Ditt direktemeldingsbilde ble ikke sendt. Du kan ikke sende direktemeldingsbilder i AIM-samtalegrupper." +msgstr "" +"Ditt lynmeldingsbilde ble ikke sendt. Du kan ikke sende " +"lynmeldingsbilder i AIM-samtalegrupper." msgid "iTunes Music Store Link" msgstr "iTunes Music Store Link" @@ -6353,10 +6934,14 @@ msgstr "Kontaktkommentar:" #, c-format msgid "You have selected to open a Direct IM connection with %s." -msgstr "Du har valgt å åpne en direktemelding til %s." +msgstr "Du har valgt å åpne en lynmelding til %s." -msgid "Because this reveals your IP address, it may be considered a security risk. Do you wish to continue?" -msgstr "Fordi dette avslører IP-adressen din, kan det betraktes som en (minimal) sikkerhetsrisiko. Ønsker du å fortsette?" +msgid "" +"Because this reveals your IP address, it may be considered a security risk. " +"Do you wish to continue?" +msgstr "" +"Fordi dette avslører IP-adressen din, kan det betraktes som en (minimal) " +"sikkerhetsrisiko. Ønsker du å fortsette?" msgid "C_onnect" msgstr "K_oble til" @@ -6390,7 +6975,8 @@ msgid "The new formatting is invalid." msgstr "Den nye formateringen er ugyldig." msgid "Username formatting can change only capitalization and whitespace." -msgstr "Brukernavn-formatering kan bare endre på store/små bokstaver og mellomrom." +msgstr "" +"Brukernavn-formatering kan bare endre på store/små bokstaver og mellomrom." msgid "Change Address To:" msgstr "Endre adresse til:" @@ -6401,8 +6987,12 @@ msgstr "<i>du venter ikke på godkjenning</i>" msgid "You are awaiting authorization from the following buddies" msgstr "Du venter på godkjenning fra disse kontaktene" -msgid "You can re-request authorization from these buddies by right-clicking on them and selecting \"Re-request Authorization.\"" -msgstr "Du kan spørre om godkjenning på nytt hos disse kontaktene ved å høyreklikke på dem og velge «Spør på nytt om godkjenning»." +msgid "" +"You can re-request authorization from these buddies by right-clicking on " +"them and selecting \"Re-request Authorization.\"" +msgstr "" +"Du kan spørre om godkjenning på nytt hos disse kontaktene ved å høyreklikke " +"på dem og velge «Spør på nytt om godkjenning»." msgid "Find Buddy by Email" msgstr "Finn kontakt utifra e-post" @@ -6427,7 +7017,7 @@ msgstr "Sette opp beskjedvideresending (nett)" #. ICQ actions msgid "Set Privacy Options..." -msgstr "Sett Privatliv Instillinger..." +msgstr "Sett personvernvalg" #. AIM actions msgid "Confirm Account" @@ -6475,8 +7065,14 @@ msgstr "Prøver å kopla til via mellomtjener." msgid "%s has just asked to directly connect to %s" msgstr "%s har akkurat spurt om direkte tilkobling til %s" -msgid "This requires a direct connection between the two computers and is necessary for IM Images. Because your IP address will be revealed, this may be considered a privacy risk." -msgstr "Dette krever at det opprettes en direkte tilkobling mellom de to datamaskinene, men er nødvendig for å sende bilder. Dette kan være en (minimal) sikkerhetsrisiko fordi mottakeren da ser IP-adressen din." +msgid "" +"This requires a direct connection between the two computers and is necessary " +"for IM Images. Because your IP address will be revealed, this may be " +"considered a privacy risk." +msgstr "" +"Dette krever at det opprettes en direkte tilkobling mellom de to " +"datamaskinene, men er nødvendig for å sende bilder. Dette kan være en " +"(minimal) sikkerhetsrisiko fordi mottakeren da ser IP-adressen din." msgid "Aquarius" msgstr "Vannmannen" @@ -6940,6 +7536,9 @@ msgstr "<p><b>Herlige Patch-skribenter</b>:<br>\n" msgid "<p><b>Acknowledgement</b>:<br>\n" msgstr "<p><b>Takk til</b>:<br>\n" +msgid "<p><b>Scrupulous Testers</b>:<br>\n" +msgstr "<p><b>Nøyaktige testere</b>:<br>\n" + msgid "<p><i>And, all the boys in the backroom...</i><br>\n" msgstr "<p><i>Og, alle guttene på bakrommet ...</i><br>\n" @@ -6965,6 +7564,9 @@ msgstr "Oppdater alle QQ Qun" msgid "About OpenQ" msgstr "Om OpenQ" +msgid "Modify Buddy Memo" +msgstr "Endre kontaktmemo" + #. *< type #. *< ui_requirement #. *< flags @@ -7003,6 +7605,9 @@ msgstr "Vis tjenervarsel" msgid "Show server news" msgstr "Vis tjenernytt" +msgid "Show chat room when msg comes" +msgstr "Vis praterommet når meldinga kommer" + msgid "Keep alive interval (seconds)" msgstr "Intervall vedlikeholdstilkobling (sekund)" @@ -7218,7 +7823,8 @@ msgid "Starting Services" msgstr "Starter tjenester" #, c-format -msgid "A Sametime administrator has issued the following announcement on server %s" +msgid "" +"A Sametime administrator has issued the following announcement on server %s" msgstr "En Sametime administrator har satt følgende kunngjøring på tjeneren %s" msgid "Sametime Administrator Announcement" @@ -7268,8 +7874,12 @@ msgid "Create conference with user" msgstr "Opprett konferanse med bruker" #, c-format -msgid "Please enter a topic for the new conference, and an invitation message to be sent to %s" -msgstr "Vennligst sett topic for en ny konferanse, og en invitasjons beskjed vil bli sendt til %s" +msgid "" +"Please enter a topic for the new conference, and an invitation message to be " +"sent to %s" +msgstr "" +"Vennligst sett topic for en ny konferanse, og en invitasjons beskjed vil bli " +"sendt til %s" msgid "New Conference" msgstr "Ny konferanse" @@ -7287,8 +7897,14 @@ msgid "Invite user to a conference" msgstr "Inviter bruker til en konferanse" #, c-format -msgid "Select a conference from the list below to send an invite to user %s. Select \"Create New Conference\" if you'd like to create a new conference to invite this user to." -msgstr "Velg en konferanse fra listen under for å sende en invitasjon til bruker %s. Velg \"Start Ny Konferanse\" om du vil starte en ny konferanse og invitere denne brukeren til." +msgid "" +"Select a conference from the list below to send an invite to user %s. Select " +"\"Create New Conference\" if you'd like to create a new conference to invite " +"this user to." +msgstr "" +"Velg en konferanse fra listen under for å sende en invitasjon til bruker %s. " +"Velg \"Start Ny Konferanse\" om du vil starte en ny konferanse og invitere " +"denne brukeren til." msgid "Invite to Conference" msgstr "Innviter til Konferanse" @@ -7306,8 +7922,12 @@ msgid "No Sametime Community Server specified" msgstr "Ingen Sametime fellesskapstjener oppgitt " #, c-format -msgid "No host or IP address has been configured for the Meanwhile account %s. Please enter one below to continue logging in." -msgstr "Ingen vert eller IP adresse har blitt konfigurert for Meanwhile kontoen %s. Skriv inn en under for å fortsette innloggingen." +msgid "" +"No host or IP address has been configured for the Meanwhile account %s. " +"Please enter one below to continue logging in." +msgstr "" +"Ingen vert eller IP adresse har blitt konfigurert for Meanwhile kontoen %s. " +"Skriv inn en under for å fortsette innloggingen." msgid "Meanwhile Connection Setup" msgstr "Meanwhile tilkoblingsinnstillinger" @@ -7335,8 +7955,12 @@ msgid "An ambiguous user ID was entered" msgstr "En ugyldig bruker ID ble skrevet" #, c-format -msgid "The identifier '%s' may possibly refer to any of the following users. Please select the correct user from the list below to add them to your buddy list." -msgstr "Men enn en bruker ble funnet med det samme navnet %s. Velg den korrekte brukeren fra lista for å legge til kontaktlista." +msgid "" +"The identifier '%s' may possibly refer to any of the following users. Please " +"select the correct user from the list below to add them to your buddy list." +msgstr "" +"Men enn en bruker ble funnet med det samme navnet %s. Velg den korrekte " +"brukeren fra lista for å legge til kontaktlista." msgid "Select User" msgstr "Velg bruker" @@ -7345,8 +7969,12 @@ msgid "Unable to add user: user not found" msgstr "Klarte ikke legge til bruker - bruker ikke funnet" #, c-format -msgid "The identifier '%s' did not match any users in your Sametime community. This entry has been removed from your buddy list." -msgstr "Brukeren %s matchet ikke noen av brukerne i ditt Sametime nettverk. Denne oppføringen har blitt fjernet fra kontaktlisten din." +msgid "" +"The identifier '%s' did not match any users in your Sametime community. This " +"entry has been removed from your buddy list." +msgstr "" +"Brukeren %s matchet ikke noen av brukerne i ditt Sametime nettverk. Denne " +"oppføringen har blitt fjernet fra kontaktlisten din." #, c-format msgid "" @@ -7399,8 +8027,14 @@ msgid "Notes Address Book group results" msgstr "Noterer Adressebok resultater for gruppe" #, c-format -msgid "The identifier '%s' may possibly refer to any of the following Notes Address Book groups. Please select the correct group from the list below to add it to your buddy list." -msgstr "'%s' kan referere til hvilken som helst av Notat Adressebok gruppene. Vennligst velg den rette gruppen fra listen under for å legge den til i kontaktlisten din." +msgid "" +"The identifier '%s' may possibly refer to any of the following Notes Address " +"Book groups. Please select the correct group from the list below to add it " +"to your buddy list." +msgstr "" +"'%s' kan referere til hvilken som helst av Notat Adressebok gruppene. " +"Vennligst velg den rette gruppen fra listen under for å legge den til i " +"kontaktlisten din." msgid "Select Notes Address Book" msgstr "Velg Notes adressebok" @@ -7409,22 +8043,35 @@ msgid "Unable to add group: group not found" msgstr "Klarte ikke legge til gruppe: gruppa finnes ikke" #, c-format -msgid "The identifier '%s' did not match any Notes Address Book groups in your Sametime community." -msgstr "'%s' matchet inne noen Notat Adressebok gruppe i ditt Sametime nettverk." +msgid "" +"The identifier '%s' did not match any Notes Address Book groups in your " +"Sametime community." +msgstr "" +"'%s' matchet inne noen Notat Adressebok gruppe i ditt Sametime nettverk." msgid "Notes Address Book Group" msgstr "Notes adressebokgruppe" -msgid "Enter the name of a Notes Address Book group in the field below to add the group and its members to your buddy list." -msgstr "Skriv inn navnet på en Notat Adressebok gruppe i feltet nedenfor, for å legge til gruppen og dens medlemmer til kontaktlisten din." +msgid "" +"Enter the name of a Notes Address Book group in the field below to add the " +"group and its members to your buddy list." +msgstr "" +"Skriv inn navnet på en Notat Adressebok gruppe i feltet nedenfor, for å " +"legge til gruppen og dens medlemmer til kontaktlisten din." #, c-format msgid "Search results for '%s'" msgstr "Søkeresultater for «%s»" #, c-format -msgid "The identifier '%s' may possibly refer to any of the following users. You may add these users to your buddy list or send them messages with the action buttons below." -msgstr "'%s' kan referere til hvilken som helst av de følgende brukerne. Du kan legge til disse brukerne til kontaktlisten din eller sende dem beskjeder med handlings knappene under." +msgid "" +"The identifier '%s' may possibly refer to any of the following users. You " +"may add these users to your buddy list or send them messages with the action " +"buttons below." +msgstr "" +"'%s' kan referere til hvilken som helst av de følgende brukerne. Du kan " +"legge til disse brukerne til kontaktlisten din eller sende dem beskjeder med " +"handlings knappene under." msgid "Search Results" msgstr "Søkeresultater" @@ -7443,8 +8090,12 @@ msgstr "Ingen treff" msgid "Search for a user" msgstr "Søk etter en bruker" -msgid "Enter a name or partial ID in the field below to search for matching users in your Sametime community." -msgstr "Skriv inn et navn eller delvis ID i feltet under for å søke etter matchende brukere i ditt Sametime nettverk." +msgid "" +"Enter a name or partial ID in the field below to search for matching users " +"in your Sametime community." +msgstr "" +"Skriv inn et navn eller delvis ID i feltet under for å søke etter matchende " +"brukere i ditt Sametime nettverk." msgid "User Search" msgstr "Bruker Søk" @@ -7500,8 +8151,11 @@ msgid "The remote user is not present in the network any more" msgstr "Fjerntliggende bruker kan ikke nås over nettverket lenger" #, c-format -msgid "Key agreement request received from %s. Would you like to perform the key agreement?" -msgstr "Nøkkelavtaleforespørsel motatt fra %s. Ønsker du å gjennomføre nøkkelavtalen?" +msgid "" +"Key agreement request received from %s. Would you like to perform the key " +"agreement?" +msgstr "" +"Nøkkelavtaleforespørsel motatt fra %s. Ønsker du å gjennomføre nøkkelavtalen?" #, c-format msgid "" @@ -7517,13 +8171,13 @@ msgid "Key Agreement Request" msgstr "Nøkkelavtaleforespørsel" msgid "IM With Password" -msgstr "Direktemelding med passord" +msgstr "Lynmelding med passord" msgid "Cannot set IM key" -msgstr "Klarer ikke sette direktemeldingsnøkkel" +msgstr "Klarer ikke sette lynmeldingsnøkkel" msgid "Set IM Password" -msgstr "Sett direktemeldingspassord" +msgstr "Sett lynmeldingspassord" msgid "Get Public Key" msgstr "Hent offentlig nøkkel" @@ -7547,8 +8201,13 @@ msgstr "Kan ikke hente brukerinformasjon" msgid "The %s buddy is not trusted" msgstr "Ikke tillit til kontakten %s" -msgid "You cannot receive buddy notifications until you import his/her public key. You can use the Get Public Key command to get the public key." -msgstr "Du kan ikke motta kontaktvarslinger før du importerer hans/hennes offentlige nøkkel. Du kan bruke Hent offentlig nøkkel-kommandoen for å få den offentlige nøkkelen." +msgid "" +"You cannot receive buddy notifications until you import his/her public key. " +"You can use the Get Public Key command to get the public key." +msgstr "" +"Du kan ikke motta kontaktvarslinger før du importerer hans/hennes offentlige " +"nøkkel. Du kan bruke Hent offentlig nøkkel-kommandoen for å få den " +"offentlige nøkkelen." #. Open file selector to select the public key. msgid "Open..." @@ -7558,8 +8217,12 @@ msgstr "Åpne..." msgid "The %s buddy is not present in the network" msgstr "Kontakten %s er ikke tilgjengelig på nettverket" -msgid "To add the buddy you must import his/her public key. Press Import to import a public key." -msgstr "For å legge til kontakten må du importere hans/hennes offentlige nøkkel. Trykk Import for å importere en offentlig nøkkel." +msgid "" +"To add the buddy you must import his/her public key. Press Import to import " +"a public key." +msgstr "" +"For å legge til kontakten må du importere hans/hennes offentlige nøkkel. " +"Trykk Import for å importere en offentlig nøkkel." msgid "_Import..." msgstr "_Importer..." @@ -7567,11 +8230,19 @@ msgstr "_Importer..." msgid "Select correct user" msgstr "Velg korrekt bruker" -msgid "More than one user was found with the same public key. Select the correct user from the list to add to the buddy list." -msgstr "Mer enn en bruker ble funnet med den samme offentlige nøkkelen. Velg den korrekte brukeren fra lista for å legge til kontaktlista." +msgid "" +"More than one user was found with the same public key. Select the correct " +"user from the list to add to the buddy list." +msgstr "" +"Mer enn en bruker ble funnet med den samme offentlige nøkkelen. Velg den " +"korrekte brukeren fra lista for å legge til kontaktlista." -msgid "More than one user was found with the same name. Select the correct user from the list to add to the buddy list." -msgstr "Men enn en bruker ble funnet med det samme navnet. Velg den korrekte brukeren fra lista for å legge til kontaktlista." +msgid "" +"More than one user was found with the same name. Select the correct user " +"from the list to add to the buddy list." +msgstr "" +"Men enn en bruker ble funnet med det samme navnet. Velg den korrekte " +"brukeren fra lista for å legge til kontaktlista." msgid "Detached" msgstr "Løsnet" @@ -7642,13 +8313,13 @@ msgid "Geolocation" msgstr "Sted" msgid "Reset IM Key" -msgstr "Nullstill direktemeldingsnøkkel" +msgstr "Nullstill lynmeldingsnøkkel" msgid "IM with Key Exchange" -msgstr "Direktemelding med nøkkelsentral" +msgstr "Lynmelding med nøkkelsentral" msgid "IM with Password" -msgstr "Direktemelding med passord" +msgstr "Lynmelding med passord" msgid "Get Public Key..." msgstr "Hent offentlig nøkkel ..." @@ -7698,6 +8369,7 @@ msgstr "<br><b>Kanal HMAC:</b> %s" msgid "<br><b>Channel Topic:</b><br>%s" msgstr "<br><b>Kanaltema:</b><br> %s" +#, c-format msgid "<br><b>Channel Modes:</b> " msgstr "<br><b>Kanaltilstander:</b> " @@ -7722,8 +8394,19 @@ msgstr "Kanalens nøkkelsetning" msgid "Channel Public Keys List" msgstr "Liste over kanalen sine offentlige nøkler" -msgid "Channel authentication is used to secure the channel from unauthorized access. The authentication may be based on passphrase and digital signatures. If passphrase is set, it is required to be able to join. If channel public keys are set then only users whose public keys are listed are able to join." -msgstr "Kanalgodkjenning er brukt for å sikre kanalen fra uautorisert tilgang. Autentifikasjonen kan være basert på en nøkkelsetning og digitale signaturer. Dersom nøkkelsetning er valgt, er dette krevd for å bli med. Dersom digitale signaturer er valgt, så kan kun brukere hvis offentlige nøkkler er listet bli med." +#, c-format +msgid "" +"Channel authentication is used to secure the channel from unauthorized " +"access. The authentication may be based on passphrase and digital " +"signatures. If passphrase is set, it is required to be able to join. If " +"channel public keys are set then only users whose public keys are listed are " +"able to join." +msgstr "" +"Kanalgodkjenning er brukt for å sikre kanalen fra uautorisert tilgang. " +"Autentifikasjonen kan være basert på en nøkkelsetning og digitale " +"signaturer. Dersom nøkkelsetning er valgt, er dette krevd for å bli med. " +"Dersom digitale signaturer er valgt, så kan kun brukere hvis offentlige " +"nøkkler er listet bli med." msgid "Channel Authentication" msgstr "Kanalautentifikasjon" @@ -7748,7 +8431,8 @@ msgid "User Limit" msgstr "Brukergrense" msgid "Set user limit on channel. Set to zero to reset user limit." -msgstr "Velg brukergrense til kanalen. Velg null for å nullstille brukergrense." +msgstr "" +"Velg brukergrense til kanalen. Velg null for å nullstille brukergrense." msgid "Invite List" msgstr "Inviteringsliste" @@ -7787,7 +8471,8 @@ msgid "Set Secret Channel" msgstr "Velg hemmelig kanal" #, c-format -msgid "You have to join the %s channel before you are able to join the private group" +msgid "" +"You have to join the %s channel before you are able to join the private group" msgstr "Du må bli med i %s-kanalen før du kan bli med i den private gruppa" msgid "Join Private Group" @@ -8028,8 +8713,12 @@ msgid "Passphrase required" msgstr "Nøkkelsetning kreves" #, c-format -msgid "Received %s's public key. Your local copy does not match this key. Would you still like to accept this public key?" -msgstr "Mottok %s's offentlige nøkkel, men din lokale kopi stemmer ikke overens med denne nøkkelen. Ønsker du fremdeles å akseptere denne nøkkelen?" +msgid "" +"Received %s's public key. Your local copy does not match this key. Would you " +"still like to accept this public key?" +msgstr "" +"Mottok %s's offentlige nøkkel, men din lokale kopi stemmer ikke overens med " +"denne nøkkelen. Ønsker du fremdeles å akseptere denne nøkkelen?" #, c-format msgid "Received %s's public key. Would you like to accept this public key?" @@ -8066,8 +8755,11 @@ msgid "Key Exchange failed" msgstr "Nøkkelutveksling feilet" # Er det virkelig "kople til på nytt"? -msgid "Resuming detached session failed. Press Reconnect to create new connection." -msgstr "Fortsettelse av løsnet økt misslyktes. Trykk Kople til på nytt for å lage en ny forbindelse." +msgid "" +"Resuming detached session failed. Press Reconnect to create new connection." +msgstr "" +"Fortsettelse av løsnet økt misslyktes. Trykk Kople til på nytt for å lage en " +"ny forbindelse." msgid "Connection failed" msgstr "Tilkobling feilet" @@ -8101,6 +8793,7 @@ msgstr "Last ned %s: %s" msgid "Your Current Mood" msgstr "Dit nåværende humør" +#, c-format msgid "Normal" msgstr "Normal" @@ -8147,8 +8840,14 @@ msgstr "Tidssone (UTC)" msgid "User Online Status Attributes" msgstr "Brukeren sine tilkoblingsstatusattributt" -msgid "You can let other users see your online status information and your personal information. Please fill the information you would like other users to see about yourself." -msgstr "Du kan la andre brukere se din tilkoblingsstatusinformasjon og din personlige informasjon. Fyll inn informasjonen du ønsker at andre skal se om deg." +msgid "" +"You can let other users see your online status information and your personal " +"information. Please fill the information you would like other users to see " +"about yourself." +msgstr "" +"Du kan la andre brukere se din tilkoblingsstatusinformasjon og din " +"personlige informasjon. Fyll inn informasjonen du ønsker at andre skal se om " +"deg." msgid "Message of the Day" msgstr "Dagens melding" @@ -8232,7 +8931,8 @@ msgid "topic [<new topic>]: View or change the topic" msgstr "topic [<new topic>]: Vis eller forandre topic" msgid "join <channel> [<password>]: Join a chat on this network" -msgstr "join <channel> [<password>]: Join en samtale på dette nettverket" +msgstr "" +"join <channel> [<password>]: Join en samtale på dette nettverket" msgid "list: List channels on this network" msgstr "list: Vis kanaler på dette nettverket" @@ -8241,10 +8941,12 @@ msgid "whois <nick>: View nick's information" msgstr "whois <nick>: Vis nick'ets info" msgid "msg <nick> <message>: Send a private message to a user" -msgstr "msg <nick> <message>: Send en privat beskjed til en bruker" +msgstr "" +"msg <nick> <message>: Send en privat beskjed til en bruker" msgid "query <nick> [<message>]: Send a private message to a user" -msgstr "query <nick> [<message>]: Send en privat beskjed til en bruker" +msgstr "" +"query <nick> [<message>]: Send en privat beskjed til en bruker" msgid "motd: View the server's Message Of The Day" msgstr "motd: Vis serverens Message Of The Day" @@ -8267,11 +8969,19 @@ msgstr "nick <newnick>: Forandre nick'et ditt" msgid "whowas <nick>: View nick's information" msgstr "whowas <nick>: Vis nick info" -msgid "cmode <channel> [+|-<modes>] [arguments]: Change or display channel modes" -msgstr "cmode <channel> [+|-<modes>] [arguments]: Forandre eller vis kanal modus" +msgid "" +"cmode <channel> [+|-<modes>] [arguments]: Change or display " +"channel modes" +msgstr "" +"cmode <channel> [+|-<modes>] [arguments]: Forandre eller vis " +"kanal modus" -msgid "cumode <channel> +|-<modes> <nick>: Change nick's modes on channel" -msgstr "cumode <channel> +|-<modes> <nick>: Forandre nick modus på kanal" +msgid "" +"cumode <channel> +|-<modes> <nick>: Change nick's modes " +"on channel" +msgstr "" +"cumode <channel> +|-<modes> <nick>: Forandre nick modus " +"på kanal" msgid "umode <usermodes>: Set your modes in the network" msgstr "umode <usermodes>: Sett modusene dine i nettverket" @@ -8279,8 +8989,12 @@ msgstr "umode <usermodes>: Sett modusene dine i nettverket" msgid "oper <nick> [-pubkey]: Get server operator privileges" msgstr "oper <nick> [-pubkey]: Få server OP rettigheter" -msgid "invite <channel> [-|+]<nick>: invite nick or add/remove from channel invite list" -msgstr "invite <channel> [-|+]<nick>: inviter nick eller legg til/fjern fra kanalens invitasjonsliste" +msgid "" +"invite <channel> [-|+]<nick>: invite nick or add/remove from " +"channel invite list" +msgstr "" +"invite <channel> [-|+]<nick>: inviter nick eller legg til/fjern " +"fra kanalens invitasjonsliste" msgid "kick <channel> <nick> [comment]: Kick client from channel" msgstr "kick <channel> <nick> [comment]: Kick klient fra kanal" @@ -8292,7 +9006,8 @@ msgid "ban [<channel> +|-<nick>]: Ban client from channel" msgstr "ban [<channel> +|-<nick>]: Bannlys klient fra kanal" msgid "getkey <nick|server>: Retrieve client's or server's public key" -msgstr "getkey <nick|server>: Få klientens eller serverens offentlige nøkkel" +msgstr "" +"getkey <nick|server>: Få klientens eller serverens offentlige nøkkel" msgid "stats: View server and network statistics" msgstr "stats: Vis server og nettverk statistikk" @@ -8303,8 +9018,12 @@ msgstr "ping: Send PING til tilkoblet server" msgid "users <channel>: List users in channel" msgstr "users <channel>: Vis brukere i kanal" -msgid "names [-count|-ops|-halfops|-voices|-normal] <channel(s)>: List specific users in channel(s)" -msgstr "names [-count|-ops|-halfops|-voices|-normal] <channel(s)>: Vis spesifiserte brukere i kanalen/kanlaene" +msgid "" +"names [-count|-ops|-halfops|-voices|-normal] <channel(s)>: List " +"specific users in channel(s)" +msgstr "" +"names [-count|-ops|-halfops|-voices|-normal] <channel(s)>: Vis " +"spesifiserte brukere i kanalen/kanlaene" #. *< type #. *< ui_requirement @@ -8344,7 +9063,7 @@ msgid "Public key authentication" msgstr "Offentlig nøkkel autentisering" msgid "Block IMs without Key Exchange" -msgstr "Blokker direktemeldinger uten nøkkelutveksling" +msgstr "Blokker lynmeldinger uten nøkkelutveksling" msgid "Block messages to whiteboard" msgstr "Blokker beskjeder til tavle" @@ -8441,7 +9160,9 @@ msgid "%s sent message to whiteboard. Would you like to open the whiteboard?" msgstr "%s sendte beskjed til tavle. Vil du åpne tavlen?" #, c-format -msgid "%s sent message to whiteboard on %s channel. Would you like to open the whiteboard?" +msgid "" +"%s sent message to whiteboard on %s channel. Would you like to open the " +"whiteboard?" msgstr "%s sendte en beskjed til tavle på kanal %s. Vil du åpne tavlen?" msgid "Whiteboard" @@ -8450,33 +9171,44 @@ msgstr "Tavle" msgid "No server statistics available" msgstr "Ingen tjenerstatistikk tilgjengelig" +#, c-format msgid "Failure: Version mismatch, upgrade your client" msgstr "Feil: Versjonskonflikt, oppgrader din klient" +#, c-format msgid "Failure: Remote does not trust/support your public key" -msgstr "Fjernliggende part støtter eller stoler ikke på ikke din offentlige nøkkel" +msgstr "" +"Fjernliggende part støtter eller stoler ikke på ikke din offentlige nøkkel" +#, c-format msgid "Failure: Remote does not support proposed KE group" msgstr "Feil: Fjerntliggende part støtter ikke foreslått KE-gruppe" +#, c-format msgid "Failure: Remote does not support proposed cipher" msgstr "Fjerntliggende part støtter ikke foreslått krypteringsmetode" +#, c-format msgid "Failure: Remote does not support proposed PKCS" msgstr "Feil: Fjerntliggende part støtter ikke foreslått PKCS" +#, c-format msgid "Failure: Remote does not support proposed hash function" msgstr "Feil: Fjerntliggende part støtter ikke foreslått nøkkelfunksjon" +#, c-format msgid "Failure: Remote does not support proposed HMAC" msgstr "Fjerntliggende part støtter ikke foreslått HMAC" +#, c-format msgid "Failure: Incorrect signature" msgstr "Ugyldig signatur" +#, c-format msgid "Failure: Invalid cookie" msgstr "Ugyldig informasjonskapsel" +#, c-format msgid "Failure: Authentication failed" msgstr "Autentisering feilet" @@ -8576,6 +9308,7 @@ msgstr "%s er ikke pålogget." msgid "Warning of %s not allowed." msgstr "Advarsel %s er ikke tillatt." +#, c-format msgid "A message has been dropped, you are exceeding the server speed limit." msgstr "En beskjed ble forkastet. Du overskrider tjenerens fartsgrense." @@ -8595,30 +9328,39 @@ msgstr "Du gikk glipp av en beskjed fra %s fordi den var for stor." msgid "You missed an IM from %s because it was sent too fast." msgstr "Du gikk glipp av en beskjed fra %s fordi den ble sendt for raskt." +#, c-format msgid "Failure." msgstr "Feil." +#, c-format msgid "Too many matches." msgstr "For mange treff." +#, c-format msgid "Need more qualifiers." msgstr "Trenger flere parametre." +#, c-format msgid "Dir service temporarily unavailable." msgstr "Katalogtjenesten er midlertidig utilgjengelig." +#, c-format msgid "Email lookup restricted." msgstr "E-postoppslag er begrenset." +#, c-format msgid "Keyword ignored." msgstr "Nøkkelord ignorert." +#, c-format msgid "No keywords." msgstr "Ingen nøkkelord." +#, c-format msgid "User has no directory information." msgstr "Brukeren har ingen kataloginformasjon." +#, c-format msgid "Country not supported." msgstr "Land ikke støttet." @@ -8626,17 +9368,25 @@ msgstr "Land ikke støttet." msgid "Failure unknown: %s." msgstr "Ukjent feil: %s." +#, c-format msgid "Incorrect username or password." msgstr "Feil brukernavn eller passord." +#, c-format msgid "The service is temporarily unavailable." msgstr "Tjenesten er midlertidig utilgjengelig." +#, c-format msgid "Your warning level is currently too high to log in." msgstr "Advarselsnivået ditt er satt for høyt for å logge inn." -msgid "You have been connecting and disconnecting too frequently. Wait ten minutes and try again. If you continue to try, you will need to wait even longer." -msgstr "Du har koblet til og koblet fra for hurtig. Vent ti minutter og prøv igjen. Hvis du fortsetter å prøve nå, vil du måtte vente enda lenger." +#, c-format +msgid "" +"You have been connecting and disconnecting too frequently. Wait ten minutes " +"and try again. If you continue to try, you will need to wait even longer." +msgstr "" +"Du har koblet til og koblet fra for hurtig. Vent ti minutter og prøv igjen. " +"Hvis du fortsetter å prøve nå, vil du måtte vente enda lenger." #, c-format msgid "An unknown signon error has occurred: %s." @@ -8721,26 +9471,42 @@ msgid "Yahoo! system message for %s:" msgstr "Yahoo! systemmelding for %s:" #, c-format -msgid "%s has (retroactively) denied your request to add them to your list for the following reason: %s." -msgstr "%s har (tilbakevirkende) avslått din forespørsel om å bli lagt til i kontaktlisten med følgende grunn: %s." +msgid "" +"%s has (retroactively) denied your request to add them to your list for the " +"following reason: %s." +msgstr "" +"%s har (tilbakevirkende) avslått din forespørsel om å bli lagt til i " +"kontaktlisten med følgende grunn: %s." #, c-format msgid "%s has (retroactively) denied your request to add them to your list." -msgstr "%s har (tilbakevirkende) avslått din forespørsel om å bli lagt til i kontaktlisten din." +msgstr "" +"%s har (tilbakevirkende) avslått din forespørsel om å bli lagt til i " +"kontaktlisten din." msgid "Add buddy rejected" msgstr "Legge til kontakt avslått" #, c-format -msgid "The Yahoo server has requested the use of an unrecognized authentication method. You will probably not be able to successfully sign on to Yahoo. Check %s for updates." -msgstr "Yahoo-tjeneren har forespurt bruk av en ukjent autentiseringsmetode. Denne versjonen av Pidgin vil antakeligvis ikke være i stand til å logge på Yahoo. Sjekk %s for oppdateringer." +msgid "" +"The Yahoo server has requested the use of an unrecognized authentication " +"method. You will probably not be able to successfully sign on to Yahoo. " +"Check %s for updates." +msgstr "" +"Yahoo-tjeneren har forespurt bruk av en ukjent autentiseringsmetode. Denne " +"versjonen av Pidgin vil antakeligvis ikke være i stand til å logge på Yahoo. " +"Sjekk %s for oppdateringer." msgid "Failed Yahoo! Authentication" msgstr "Yahoo!-autentisering feilet" #, c-format -msgid "You have tried to ignore %s, but the user is on your buddy list. Clicking \"Yes\" will remove and ignore the buddy." -msgstr "Du forsøkte å ignorere %s, men vedkommende er i kontaktlisten din. Hvis du klikker på \"Ja\" vil kontakten fjernes og ignoreres." +msgid "" +"You have tried to ignore %s, but the user is on your buddy list. Clicking " +"\"Yes\" will remove and ignore the buddy." +msgstr "" +"Du forsøkte å ignorere %s, men vedkommende er i kontaktlisten din. Hvis du " +"klikker på \"Ja\" vil kontakten fjernes og ignoreres." msgid "Ignore buddy?" msgstr "Ignorere kontakt?" @@ -8750,11 +9516,13 @@ msgstr "Din konto har blitt låst, vennligst logg inn på Yahoo!-nettsiden." #, c-format msgid "Unknown error number %d. Logging into the Yahoo! website may fix this." -msgstr "Ukjent feilkode %d. Å logge inn på Yahoo!s nettside, kan kanskje løse dette." +msgstr "" +"Ukjent feilkode %d. Å logge inn på Yahoo!s nettside, kan kanskje løse dette." #, c-format msgid "Could not add buddy %s to group %s to the server list on account %s." -msgstr "Klarte ikke legge til kontakt %s i gruppen %s i tjenerlisten på konto %s." +msgstr "" +"Klarte ikke legge til kontakt %s i gruppen %s i tjenerlisten på konto %s." msgid "Could not add buddy to server list" msgstr "Klarte ikke legge kontakt til tjenerens kontaktliste" @@ -8925,11 +9693,18 @@ msgstr "Yahoo! Japan-profil" msgid "Yahoo! Profile" msgstr "Yahoo!-profil" -msgid "Sorry, profiles marked as containing adult content are not supported at this time." -msgstr "Beklager, profiler som er markert med vokseninnhold er for tiden ikke støttet." +msgid "" +"Sorry, profiles marked as containing adult content are not supported at this " +"time." +msgstr "" +"Beklager, profiler som er markert med vokseninnhold er for tiden ikke " +"støttet." -msgid "If you wish to view this profile, you will need to visit this link in your web browser:" -msgstr "Hvis du ønsker å vise denne profilen, må du åpne denne lenken i en nettleser:" +msgid "" +"If you wish to view this profile, you will need to visit this link in your " +"web browser:" +msgstr "" +"Hvis du ønsker å vise denne profilen, må du åpne denne lenken i en nettleser:" msgid "Yahoo! ID" msgstr "Yahoo! ID" @@ -8955,14 +9730,27 @@ msgstr "Kul lenke 3" msgid "Last Update" msgstr "Sist oppdatert" -msgid "This profile is in a language or format that is not supported at this time." -msgstr "Denne profilen er i et språk eller format som for øyeblikket ikke er støttet." +msgid "" +"This profile is in a language or format that is not supported at this time." +msgstr "" +"Denne profilen er i et språk eller format som for øyeblikket ikke er støttet." -msgid "Could not retrieve the user's profile. This most likely is a temporary server-side problem. Please try again later." -msgstr "Klarte ikke hente ned brukerens profil. Dette er mest sannsynlig et midlertidig server-problem. Prøv igjen senere." +msgid "" +"Could not retrieve the user's profile. This most likely is a temporary " +"server-side problem. Please try again later." +msgstr "" +"Klarte ikke hente ned brukerens profil. Dette er mest sannsynlig et " +"midlertidig server-problem. Prøv igjen senere." -msgid "Could not retrieve the user's profile. This most likely means that the user does not exist; however, Yahoo! sometimes does fail to find a user's profile. If you know that the user exists, please try again later." -msgstr "Klarte ikke hente ned brukerens profil. Dette betyr sannsynligvis at brukeren ikke eksisterer, men merk at Yahoo! noen ganger ikke greier å finne en brukers profil. Om du vet at brukeren eksisterer, vennligst prøv igjen senere." +msgid "" +"Could not retrieve the user's profile. This most likely means that the user " +"does not exist; however, Yahoo! sometimes does fail to find a user's " +"profile. If you know that the user exists, please try again later." +msgstr "" +"Klarte ikke hente ned brukerens profil. Dette betyr sannsynligvis at " +"brukeren ikke eksisterer, men merk at Yahoo! noen ganger ikke greier å finne " +"en brukers profil. Om du vet at brukeren eksisterer, vennligst prøv igjen " +"senere." msgid "The user's profile is empty." msgstr "Brukerens profil er tom." @@ -8989,8 +9777,12 @@ msgstr "Kanskje rommet er fullt" msgid "Not available" msgstr "Ikke tilgjengelig" -msgid "Unknown error. You may need to logout and wait five minutes before being able to rejoin a chatroom" -msgstr "Ukjent feil. Det kan hende du må logge ut og vente fem minutter før du kan entre samtalerommet igjen" +msgid "" +"Unknown error. You may need to logout and wait five minutes before being " +"able to rejoin a chatroom" +msgstr "" +"Ukjent feil. Det kan hende du må logge ut og vente fem minutter før du kan " +"entre samtalerommet igjen" #, c-format msgid "You are now chatting in %s." @@ -9028,8 +9820,12 @@ msgstr "" "Du har blitt koblet fra tjeneren\n" "%s" -msgid "(There was an error converting this message.\t Check the 'Encoding' option in the Account Editor)" -msgstr "(En feil oppstod under konverteringen av denne beskjeden.\t Kontroller «Tegnkoding»-valget i kontohåndteren)" +msgid "" +"(There was an error converting this message.\t Check the 'Encoding' option " +"in the Account Editor)" +msgstr "" +"(En feil oppstod under konverteringen av denne beskjeden.\t Kontroller " +"«Tegnkoding»-valget i kontohåndteren)" #, c-format msgid "Unable to send to chat %s,%s,%s" @@ -9065,28 +9861,45 @@ msgid "zl <nick>: Locate user" msgstr "zl <nick>: Finn bruker" msgid "instance <instance>: Set the instance to be used on this class" -msgstr "instance <instance>: Sett hendelse som skal brukes for denne klassen" +msgstr "" +"instance <instance>: Sett hendelse som skal brukes for denne klassen" msgid "inst <instance>: Set the instance to be used on this class" msgstr "inst <instance>: Sett hendelse som skal brukes for denne klassen" msgid "topic <instance>: Set the instance to be used on this class" -msgstr "topic <instance>: Sett hendelse som skal brukes for denne klassen" +msgstr "" +"topic <instance>: Sett hendelse som skal brukes for denne klassen" msgid "sub <class> <instance> <recipient>: Join a new chat" -msgstr "ub <class> <instance> <recipient>: Join en ny samtale" +msgstr "" +"ub <class> <instance> <recipient>: Join en ny samtale" -msgid "zi <instance>: Send a message to <message,<i>instance</i>,*>" -msgstr "zi <instance>: Send en beskjed til <beskjed,<i>instance</i>,*>" +msgid "" +"zi <instance>: Send a message to <message,<i>instance</i>,*>" +msgstr "" +"zi <instance>: Send en beskjed til <beskjed,<i>instance</i>,*>" -msgid "zci <class> <instance>: Send a message to <<i>class</i>,<i>instance</i>,*>" -msgstr "zci <class> <instance>: Send en beskjed til <<i>class</i>,<i>instance</i>,*>" +msgid "" +"zci <class> <instance>: Send a message to <<i>class</i>," +"<i>instance</i>,*>" +msgstr "" +"zci <class> <instance>: Send en beskjed til <<i>class</i>," +"<i>instance</i>,*>" -msgid "zcir <class> <instance> <recipient>: Send a message to <<i>class</i>,<i>instance</i>,<i>recipient</i>>" -msgstr "zcir <class> <instance> <recipient>: Send en beskjed til <<i>class</i>,<i>instance</i>,<i>recipient</i>>" +msgid "" +"zcir <class> <instance> <recipient>: Send a message to <" +"<i>class</i>,<i>instance</i>,<i>recipient</i>>" +msgstr "" +"zcir <class> <instance> <recipient>: Send en beskjed til " +"<<i>class</i>,<i>instance</i>,<i>recipient</i>>" -msgid "zir <instance> <recipient>: Send a message to <MESSAGE,<i>instance</i>,<i>recipient</i>>" -msgstr "zir <instance> <recipient>: Send en beskjed til <MESSAGE,<i>instance</i>,<i>recipient</i>>" +msgid "" +"zir <instance> <recipient>: Send a message to <MESSAGE," +"<i>instance</i>,<i>recipient</i>>" +msgstr "" +"zir <instance> <recipient>: Send en beskjed til <MESSAGE," +"<i>instance</i>,<i>recipient</i>>" msgid "zc <class>: Send a message to <<i>class</i>,PERSONAL,*>" msgstr "zc <class>: Send en beskjed til <<i>class</i>,PERSONAL,*>" @@ -9296,8 +10109,12 @@ msgid "Error Reading %s" msgstr "Feil ved lesing av %s" #, c-format -msgid "An error was encountered reading your %s. They have not been loaded, and the old file has been renamed to %s~." -msgstr "Det oppstod en feil under lesing av %s. Den har ikke blitt lastet, og den gamle filen ble flyttet til %s~." +msgid "" +"An error was encountered reading your %s. They have not been loaded, and " +"the old file has been renamed to %s~." +msgstr "" +"Det oppstod en feil under lesing av %s. Den har ikke blitt lastet, og den " +"gamle filen ble flyttet til %s~." msgid "Calculating..." msgstr "Beregner..." @@ -9354,8 +10171,12 @@ msgid "Error reading from %s: response too long (%d bytes limit)" msgstr "Klarte ikke lese fra %s: for langt svar (%d bytes-grense)" #, c-format -msgid "Unable to allocate enough memory to hold the contents from %s. The web server may be trying something malicious." -msgstr "Klarte ikke allokere nok minne til å holde på innholdet fra %s. Det kan hende web serveren prøver på noe ondskapsfullt." +msgid "" +"Unable to allocate enough memory to hold the contents from %s. The web " +"server may be trying something malicious." +msgstr "" +"Klarte ikke allokere nok minne til å holde på innholdet fra %s. Det kan " +"hende web serveren prøver på noe ondskapsfullt." #, c-format msgid "Error reading from %s: %s" @@ -9378,22 +10199,27 @@ msgid " (%s)" msgstr "(%s)" #. 10053 +#, c-format msgid "Connection interrupted by other software on your computer." msgstr "Forbindelsen ble avbrutt av annen programvare på din datamaskin." #. 10054 +#, c-format msgid "Remote host closed connection." msgstr "Fjern vert lukket forbindelsen." #. 10060 +#, c-format msgid "Connection timed out." msgstr "Tilkoblingen lyktes ikke innenfor tidsgrensen." #. 10061 +#, c-format msgid "Connection refused." msgstr "Tilkoblingen avvist." #. 10048 +#, c-format msgid "Address already in use." msgstr "Adressen er allerede i bruk" @@ -9520,24 +10346,39 @@ msgstr "Protokoll" msgid "" "<span size='larger' weight='bold'>Welcome to %s!</span>\n" "\n" -"You have no IM accounts configured. To start connecting with %s press the <b>Add...</b> button below and configure your first account. If you want %s to connect to multiple IM accounts, press <b>Add...</b> again to configure them all.\n" +"You have no IM accounts configured. To start connecting with %s press the " +"<b>Add...</b> button below and configure your first account. If you want %s " +"to connect to multiple IM accounts, press <b>Add...</b> again to configure " +"them all.\n" "\n" -"You can come back to this window to add, edit, or remove accounts from <b>Accounts->Manage Accounts</b> in the Buddy List window" +"You can come back to this window to add, edit, or remove accounts from " +"<b>Accounts->Manage Accounts</b> in the Buddy List window" msgstr "" "<span size='larger' weight='bold'>Velkommen til %s!</span>\n" "\n" -"Du har ikke satt opp noen lynmeldingskontoer. For å starte tilkobling til %s trykk <b>Legg til ...</b>-knappen nedenfor og sett opp kontoen din først. Om du vil at %s skal koble til flere lynmeldingskontoer, trykk <b>Legg til ...</b> igjen for å sette opp alle sammen.\n" +"Du har ikke satt opp noen lynmeldingskontoer. For å starte tilkobling til %s " +"trykk <b>Legg til ...</b>-knappen nedenfor og sett opp kontoen din først. Om " +"du vil at %s skal koble til flere lynmeldingskontoer, trykk <b>Legg til ...</" +"b> igjen for å sette opp alle sammen.\n" "\n" -"Du kan komme tilbake til dette vinduet for å legge til, redigere eller fjerne kontoer fra <b>Kontoer->Håndter kontoer</b> i kontaktliste-vinduet." +"Du kan komme tilbake til dette vinduet for å legge til, redigere eller " +"fjerne kontoer fra <b>Kontoer->Håndter kontoer</b> i kontaktliste-vinduet." #, c-format msgid "You have %d contact named %s. Would you like to merge them?" -msgid_plural "You currently have %d contacts named %s. Would you like to merge them?" +msgid_plural "" +"You currently have %d contacts named %s. Would you like to merge them?" msgstr[0] "Du har kontakten %d som %s. Vil du flette dem sammen?" msgstr[1] "Du har kontaktene %d som %s. Vil du flette dem sammen?" -msgid "Merging these contacts will cause them to share a single entry on the buddy list and use a single conversation window. You can separate them again by choosing 'Expand' from the contact's context menu" -msgstr "Sammenfletting av disse kontaktene vil føre til at de deler en enkelt oppføring i kontaktlisten og bruker ett enkelt samtalevindu. Du kan separere dem igjen ved å velge Utvid fra kontaktens meny i kontaktlisten" +msgid "" +"Merging these contacts will cause them to share a single entry on the buddy " +"list and use a single conversation window. You can separate them again by " +"choosing 'Expand' from the contact's context menu" +msgstr "" +"Sammenfletting av disse kontaktene vil føre til at de deler en enkelt " +"oppføring i kontaktlisten og bruker ett enkelt samtalevindu. Du kan separere " +"dem igjen ved å velge Utvid fra kontaktens meny i kontaktlisten" msgid "Please update the necessary fields." msgstr "Oppdater de nødvendige feltene." @@ -9545,7 +10386,9 @@ msgstr "Oppdater de nødvendige feltene." msgid "Room _List" msgstr "Rom_liste" -msgid "Please enter the appropriate information about the chat you would like to join.\n" +msgid "" +"Please enter the appropriate information about the chat you would like to " +"join.\n" msgstr "Skriv inn informasjon om samtalegruppen du ønsker å bli med i.\n" msgid "_Account:" @@ -9624,7 +10467,8 @@ msgstr "_Utvid" msgid "/Tools/Mute Sounds" msgstr "/Verktøy/Skru av lyder" -msgid "You are not currently signed on with an account that can add that buddy." +msgid "" +"You are not currently signed on with an account that can add that buddy." msgstr "Du er ikke pålogget med noen kontoer som kan legge til den kontakten." #. I don't believe this can happen currently, I think @@ -9638,7 +10482,7 @@ msgid "/_Buddies" msgstr "/_Kontakter" msgid "/Buddies/New Instant _Message..." -msgstr "/Kontakter/_Ny direktemelding..." +msgstr "/Kontakter/_Ny lynmelding..." msgid "/Buddies/Join a _Chat..." msgstr "/Kontakter/_Bli med i samtalegruppe..." @@ -9793,7 +10637,7 @@ msgid "Idle %dm" msgstr "Inaktiv %dm" msgid "/Buddies/New Instant Message..." -msgstr "/Kontakter/Ny direktemelding..." +msgstr "/Kontakter/Ny lynmelding..." msgid "/Buddies/Join a Chat..." msgstr "/Kontakter/Bli med i samtalegruppe..." @@ -9811,7 +10655,7 @@ msgid "/Buddies/Add Group..." msgstr "/Kontakter/Legg til gruppe..." msgid "/Tools/Privacy" -msgstr "/Verktøy/Blokkeringer" +msgstr "/Verktøy/Personvern" msgid "/Tools/Room List" msgstr "/Verktøy/Romliste" @@ -9850,7 +10694,8 @@ msgstr "Velkommen tilbake!" #, c-format msgid "%d account was disabled because you signed on from another location:" -msgid_plural "%d accounts were disabled because you signed on from another location:" +msgid_plural "" +"%d accounts were disabled because you signed on from another location:" msgstr[0] "%d konto ble deaktivert fordi du har logget på et annet sted:" msgstr[1] "%d kontoer ble deaktivert fordi du har logget på et annet sted:" @@ -9871,11 +10716,16 @@ msgstr "/Kontoer" msgid "" "<span weight='bold' size='larger'>Welcome to %s!</span>\n" "\n" -"You have no accounts enabled. Enable your IM accounts from the <b>Accounts</b> window at <b>Accounts->Manage Accounts</b>. Once you enable accounts, you'll be able to sign on, set your status, and talk to your friends." +"You have no accounts enabled. Enable your IM accounts from the <b>Accounts</" +"b> window at <b>Accounts->Manage Accounts</b>. Once you enable accounts, " +"you'll be able to sign on, set your status, and talk to your friends." msgstr "" "<span weight='bold' size='larger'>Velkommen til %s!</span>\n" "\n" -"Du har ingen kontoer aktivert. Aktiver dine lynmeldingskontoer fra <b>Kontoer</b>-vinduet ved <b>Kontoer->Håndter kontoer</b>. Når du har aktivert kontoene, kan du logge inn, sette din status og snakke med dine venner." +"Du har ingen kontoer aktivert. Aktiver dine lynmeldingskontoer fra " +"<b>Kontoer</b>-vinduet ved <b>Kontoer->Håndter kontoer</b>. Når du har " +"aktivert kontoene, kan du logge inn, sette din status og snakke med dine " +"venner." #. set the Show Offline Buddies option. must be done #. * after the treeview or faceprint gets mad. -Robot101 @@ -9910,10 +10760,14 @@ msgstr "Legg til kontakten i _gruppe:" msgid "This protocol does not support chat rooms." msgstr "Denne protokollversjonen støtter ikke samtalerom." -msgid "You are not currently signed on with any protocols that have the ability to chat." +msgid "" +"You are not currently signed on with any protocols that have the ability to " +"chat." msgstr "Du er ikke pålogget med noen protokoller som støtter samtalegrupper." -msgid "Please enter an alias, and the appropriate information about the chat you would like to add to your buddy list.\n" +msgid "" +"Please enter an alias, and the appropriate information about the chat you " +"would like to add to your buddy list.\n" msgstr "Skriv inn et aliasnavn og annen informasjon for samtalegruppen.\n" msgid "A_lias:" @@ -9960,17 +10814,24 @@ msgid "Unknown command." msgstr "Ukjent kommando." msgid "That buddy is not on the same protocol as this chat." -msgstr "Denne kontakten er ikke på den samme protokollen som denne samtalegruppa." +msgstr "" +"Denne kontakten er ikke på den samme protokollen som denne samtalegruppa." -msgid "You are not currently signed on with an account that can invite that buddy." -msgstr "Du er ikke pålogget pålogget med en konto som kan invitere denne kontakten." +msgid "" +"You are not currently signed on with an account that can invite that buddy." +msgstr "" +"Du er ikke pålogget pålogget med en konto som kan invitere denne kontakten." msgid "Invite Buddy Into Chat Room" msgstr "Inviter kontakten inn i samtalerom" #. Put our happy label in it. -msgid "Please enter the name of the user you wish to invite, along with an optional invite message." -msgstr "Skriv inn navnet på brukeren som du vil invitere, og en eventuell invitasjonsbeskjed." +msgid "" +"Please enter the name of the user you wish to invite, along with an optional " +"invite message." +msgstr "" +"Skriv inn navnet på brukeren som du vil invitere, og en eventuell " +"invitasjonsbeskjed." msgid "_Buddy:" msgstr "_Kontakt:" @@ -10235,7 +11096,7 @@ msgid "Last created window" msgstr "Sist opprettede vindu" msgid "Separate IM and Chat windows" -msgstr "Skill direktemeldings- og gruppesamtalevinduer" +msgstr "Skill lynmeldings- og gruppesamtalevinduer" msgid "New window" msgstr "Nytt vindu" @@ -10445,7 +11306,7 @@ msgid "Kannada" msgstr "Kannada" msgid "Kannada Translation team" -msgstr "Kannada Translation team" +msgstr "Kannada oversettelseslag" msgid "Korean" msgstr "Koreansk" @@ -10460,7 +11321,10 @@ msgid "Lithuanian" msgstr "Litauisk" msgid "Macedonian" -msgstr "Makedons" +msgstr "Makedonsk" + +msgid "Mongolian" +msgstr "Mongolsk" msgid "Bokmål Norwegian" msgstr "Norsk Bokmål" @@ -10555,11 +11419,50 @@ msgid "About %s" msgstr "Om %s" #, c-format -msgid "%s is a graphical modular messaging client based on libpurple which is capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, MySpaceIM, Gadu-Gadu, and QQ all at once. It is written using GTK+.<BR><BR>You may modify and redistribute the program under the terms of the GPL (version 2 or later). A copy of the GPL is contained in the 'COPYING' file distributed with %s. %s is copyrighted by its contributors. See the 'COPYRIGHT' file for the complete list of contributors. We provide no warranty for this program.<BR><BR>" -msgstr "%s er en modulær grafisk samtaleklient basert på libpurple som kan koble til AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC,SIP/SIMPLE, Novell GroupWise, Lotus Sametime, Bonjour, Zephyr,MySpaceIM, Gadu-Gadu, og QQ samtidig. Den er skravet ved bruk av GTK+.<BR><BR>Du kan modifisere og redistribuere programmet under GPL (versjon 2 eller senere) En kopi av GPL er plassert i COPYING filen distribuert med %s. %s er kopibeskyttet av utgiverne. Se COPYRIGHT filen for en komplett liste av utgivere. Vi gir ingen garanti for dette programmet.<BR><BR>" +msgid "" +"%s is a graphical modular messaging client based on libpurple which is " +"capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, " +"Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, MySpaceIM, Gadu-Gadu, and " +"QQ all at once. It is written using GTK+.<BR><BR>You may modify and " +"redistribute the program under the terms of the GPL (version 2 or later). A " +"copy of the GPL is contained in the 'COPYING' file distributed with %s. %s " +"is copyrighted by its contributors. See the 'COPYRIGHT' file for the " +"complete list of contributors. We provide no warranty for this program." +"<BR><BR>" +msgstr "" +"%s er en modulær grafisk samtaleklient basert på libpurple som kan koble til " +"AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC,SIP/SIMPLE, Novell GroupWise, Lotus " +"Sametime, Bonjour, Zephyr,MySpaceIM, Gadu-Gadu, og QQ samtidig. Den er " +"skravet ved bruk av GTK+.<BR><BR>Du kan modifisere og redistribuere " +"programmet under GPL (versjon 2 eller senere) En kopi av GPL er plassert i " +"COPYING filen distribuert med %s. %s er kopibeskyttet av utgiverne. Se " +"COPYRIGHT filen for en komplett liste av utgivere. Vi gir ingen garanti for " +"dette programmet.<BR><BR>" -msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" -msgstr "<FONT SIZE=\"4\">IRC:</FONT> #pidgin på irc.freenode.net<BR><BR>" +#, c-format +msgid "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">OSS:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">Hjelp per e-post:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgstr "<FONT SIZE=\"4\">IRC-kanal:</FONT> #pidgin på irc.freenode.net<BR><BR>" + +#, c-format +msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" +msgstr "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" msgid "Current Developers" msgstr "Tidligere utviklere" @@ -10591,8 +11494,12 @@ msgstr "_Konto" msgid "Get User Info" msgstr "Hent brukerinfo" -msgid "Please enter the username or alias of the person whose info you would like to view." -msgstr "Skriv inn brukernavnet eller aliaset til den personen du vil se informasjon om." +msgid "" +"Please enter the username or alias of the person whose info you would like " +"to view." +msgstr "" +"Skriv inn brukernavnet eller aliaset til den personen du vil se informasjon " +"om." msgid "View User Log" msgstr "Se på brukerlogg" @@ -10617,10 +11524,18 @@ msgid "Enter an alias for this chat." msgstr "Skriv inn aliasnavn for denne samtalegruppa." #, c-format -msgid "You are about to remove the contact containing %s and %d other buddy from your buddy list. Do you want to continue?" -msgid_plural "You are about to remove the contact containing %s and %d other buddies from your buddy list. Do you want to continue?" -msgstr[0] "Du er i ferd med å fjerne kontakten som inneholder %s og %d annen kontakt fra kontaktlista di. Ønsker du å fortsette?" -msgstr[1] "Du er i ferd med å fjerne kontakten som inneholder %s og %d andre kontakter fra kontaktlista di. Ønsker du å fortsette?" +msgid "" +"You are about to remove the contact containing %s and %d other buddy from " +"your buddy list. Do you want to continue?" +msgid_plural "" +"You are about to remove the contact containing %s and %d other buddies from " +"your buddy list. Do you want to continue?" +msgstr[0] "" +"Du er i ferd med å fjerne kontakten som inneholder %s og %d annen kontakt " +"fra kontaktlista di. Ønsker du å fortsette?" +msgstr[1] "" +"Du er i ferd med å fjerne kontakten som inneholder %s og %d andre kontakter " +"fra kontaktlista di. Ønsker du å fortsette?" msgid "Remove Contact" msgstr "Fjern kontakt" @@ -10629,8 +11544,12 @@ msgid "_Remove Contact" msgstr "_Fjern kontakt" #, c-format -msgid "You are about to merge the group called %s into the group called %s. Do you want to continue?" -msgstr "Du er i ferd med å slå gruppa med navnet %s sammen med gruppa %s. Øsnker du å fortsette?" +msgid "" +"You are about to merge the group called %s into the group called %s. Do you " +"want to continue?" +msgstr "" +"Du er i ferd med å slå gruppa med navnet %s sammen med gruppa %s. Øsnker du " +"å fortsette?" msgid "Merge Groups" msgstr "Slå sammen grupper" @@ -10639,8 +11558,12 @@ msgid "_Merge Groups" msgstr "_Slå sammen grupper" #, 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 "Er du sikker på at du vil fjerne gruppen %s med alle medlemmer fra kontaktlisten din?" +msgid "" +"You are about to remove the group %s and all its members from your buddy " +"list. Do you want to continue?" +msgstr "" +"Er du sikker på at du vil fjerne gruppen %s med alle medlemmer fra " +"kontaktlisten din?" msgid "Remove Group" msgstr "Fjern gruppe" @@ -10649,7 +11572,8 @@ msgid "_Remove Group" msgstr "_Fjern gruppe" #, c-format -msgid "You are about to remove %s from your buddy list. Do you want to continue?" +msgid "" +"You are about to remove %s from your buddy list. Do you want to continue?" msgstr "Er du sikker på at du vil fjerne %s fra kontaktlisten din?" msgid "Remove Buddy" @@ -10659,8 +11583,11 @@ msgid "_Remove Buddy" msgstr "_Fjern kontakt" #, c-format -msgid "You are about to remove the chat %s from your buddy list. Do you want to continue?" -msgstr "Er du sikker på at du vil fjerne samtalegruppen %s fra kontaktlisten din?" +msgid "" +"You are about to remove the chat %s from your buddy list. Do you want to " +"continue?" +msgstr "" +"Er du sikker på at du vil fjerne samtalegruppen %s fra kontaktlisten din?" msgid "Remove Chat" msgstr "Fjern samtalegruppe" @@ -10810,7 +11737,8 @@ msgid "\"Attention\" Name Color" msgstr "Farge for navn på «oppmerksomhet» " msgid "Color to draw the name of a message you received containing your name." -msgstr "Farge for å tegne navnet på en beskjed du mottok som innholdt navnet ditt." +msgstr "" +"Farge for å tegne navnet på en beskjed du mottok som innholdt navnet ditt." msgid "Action Message Name Color" msgstr "Farge for navn på handlingsbeskjed" @@ -10889,9 +11817,11 @@ msgstr "" msgid "Save Image" msgstr "Lagre bilde" +#, c-format msgid "_Save Image..." msgstr "_Lagre bilde..." +#, c-format msgid "_Add Custom Smiley..." msgstr "_Legg til tilpassede smilefjes" @@ -10910,11 +11840,17 @@ msgstr "_URL" msgid "_Description" msgstr "_Beskrivelse" -msgid "Please enter the URL and description of the link that you want to insert. The description is optional." -msgstr "Skriv inn URL og beskrivelse av lenka du vil sette inn. Beskrivelsesfeltet er valgfritt." +msgid "" +"Please enter the URL and description of the link that you want to insert. " +"The description is optional." +msgstr "" +"Skriv inn URL og beskrivelse av lenka du vil sette inn. Beskrivelsesfeltet " +"er valgfritt." msgid "Please enter the URL of the link that you want to insert." -msgstr "Skriv inn URL og beskrivelse av lenka du vil sette inn. Beskrivelsesfeltet er valgfritt." +msgstr "" +"Skriv inn URL og beskrivelse av lenka du vil sette inn. Beskrivelsesfeltet " +"er valgfritt." msgid "Insert Link" msgstr "Sett inn lenke" @@ -10934,7 +11870,8 @@ msgid "" "This smiley is disabled because a custom smiley exists for this shortcut:\n" " %s" msgstr "" -"Smilefjeset er deaktivert fordi et tilpasset smilefjes eksisterer for denne snarveien:\n" +"Smilefjeset er deaktivert fordi et tilpasset smilefjes eksisterer for denne " +"snarveien:\n" "%s" msgid "Smile!" @@ -10986,7 +11923,7 @@ msgid "Reset Formatting" msgstr "Nullstill formatering" msgid "Insert IM Image" -msgstr "Sett inn direktemeldingsbilde" +msgstr "Sett inn lynmeldingsbilde" msgid "Insert Smiley" msgstr "Sett inn smilefjes" @@ -11043,16 +11980,27 @@ msgid "Check permissions and try again." msgstr "Undersøk rettigheter og prøv igjen." #, c-format -msgid "Are you sure you want to permanently delete the log of the conversation with %s which started at %s?" -msgstr "Er du sikker på at du vil fjerne loggen permanent fra samtalen med %s som startet på %s?" +msgid "" +"Are you sure you want to permanently delete the log of the conversation with " +"%s which started at %s?" +msgstr "" +"Er du sikker på at du vil fjerne loggen permanent fra samtalen med %s som " +"startet på %s?" #, c-format -msgid "Are you sure you want to permanently delete the log of the conversation in %s which started at %s?" -msgstr "Er du sikker på at du vil fjerne loggen permanent fra samtalen med %s som startet på %s?" +msgid "" +"Are you sure you want to permanently delete the log of the conversation in %" +"s which started at %s?" +msgstr "" +"Er du sikker på at du vil fjerne loggen permanent fra samtalen med %s som " +"startet på %s?" #, c-format -msgid "Are you sure you want to permanently delete the system log which started at %s?" -msgstr "Er du sikker på at du for alltid vil slette systemloggen som starte på %s?" +msgid "" +"Are you sure you want to permanently delete the system log which started at %" +"s?" +msgstr "" +"Er du sikker på at du for alltid vil slette systemloggen som starte på %s?" msgid "Delete Log?" msgstr "Slette logg?" @@ -11101,7 +12049,8 @@ msgstr "" " -m, --multiple Ikke garantere en enkelt instans\n" " -n, --nologin Ikke logg inn automatisk\n" " -l, --login[=NAVN] Logg inn automatisk (Valgfritt argument NAVN \n" -" angir hvilke kontoer som skal brukes med komma som skilletegn.\n" +" angir hvilke kontoer som skal brukes med komma som " +"skilletegn.\n" " Uten dette brukes kun den første kontoen.)\n" " --display=DISPLAY X display for bruk\n" " -v, --version Vis den nårværende versjon og avslutt\n" @@ -11130,7 +12079,8 @@ msgstr "" " -m, --multiple Ikke garantere en enkelt instans\n" " -n, --nologin Ikke logg inn automatisk\n" " -l, --login[=NAVN] Logg inn automatisk (Valgfritt argument NAVN \n" -" angir hvilke kontoer som skal brukes med komma som skilletegn.\n" +" angir hvilke kontoer som skal brukes med komma som " +"skilletegn.\n" " Uten dette brukes kun den første kontoen.)\n" " -v, --version Vis den nårværende versjon og avslutt\n" @@ -11167,6 +12117,10 @@ msgstr "" msgid "Pidgin" msgstr "Pidgin" +#, c-format +msgid "Exiting because another libpurple client is already running.\n" +msgstr "Avslutter fordi en annen libpurple-klient allerede kjører.\n" + msgid "Open All Messages" msgstr "Åpne alle beskjeder" @@ -11196,8 +12150,11 @@ msgstr "Klarte ikke åpne URL" msgid "Error launching \"%s\": %s" msgstr "Feil under starting av «%s</b>:%s" -msgid "The 'Manual' browser command has been chosen, but no command has been set." -msgstr "Klarte ikke å starte en nettleser fordi 'Manuell' nettleserkommando er valgt, men ingen kommando for denne har blitt satt." +msgid "" +"The 'Manual' browser command has been chosen, but no command has been set." +msgstr "" +"Klarte ikke å starte en nettleser fordi 'Manuell' nettleserkommando er " +"valgt, men ingen kommando for denne har blitt satt." msgid "The following plugins will be unloaded." msgstr "Følgende tillegg kunne ikke losses." @@ -11211,7 +12168,9 @@ msgstr "Losse Tillegg" msgid "Could not unload plugin" msgstr "Klarte ikke fjerne tillegget" -msgid "The plugin could not be unloaded now, but will be disabled at the next startup." +msgid "" +"The plugin could not be unloaded now, but will be disabled at the next " +"startup." msgstr "Tillegget kan ikke fjernes nå, men blir deaktivert ved neste oppstart." #, c-format @@ -11281,7 +12240,7 @@ msgid "Sends a _message" msgstr "Sender en _beskjed" msgid "Ope_n an IM window" -msgstr "Åpn_e vindu for direktemelding" +msgstr "Åpn_e vindu for lynmelding" msgid "_Pop up a notification" msgstr "_Varslingsvindu spretter opp" @@ -11319,8 +12278,12 @@ msgstr "Smiley tema feilet å pakke ut." msgid "Install Theme" msgstr "Installer tema" -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." -msgstr "Velg smilefjes-temaet du vil bruke fra listen nedenfor. Nye temaer kan installeres ved å dra og slippe dem over temalisten." +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." +msgstr "" +"Velg smilefjes-temaet du vil bruke fra listen nedenfor. Nye temaer kan " +"installeres ved å dra og slippe dem over temalisten." msgid "Icon" msgstr "Ikon" @@ -11344,7 +12307,7 @@ msgid "Conversation Window Hiding" msgstr "Skjuling av samtalevindu" msgid "_Hide new IM conversations:" -msgstr "_Gjem nye direktemeldingssamtaler:" +msgstr "_Gjem nye lynmeldingssamtaler:" msgid "When away" msgstr "Når fraværende" @@ -11354,7 +12317,7 @@ msgid "Tabs" msgstr "Faner" msgid "Show IMs and chats in _tabbed windows" -msgstr "Vis direktemeldinger og samtalegrupper i _faner" +msgstr "Vis lynmeldinger og samtalegrupper i _faner" msgid "Show close b_utton on tabs" msgstr "Vis _lukkeknapp på faner" @@ -11387,7 +12350,7 @@ msgid "Show _formatting on incoming messages" msgstr "Vis _formateringsverktøy på innkommende beskjeder" msgid "Close IMs immediately when the tab is closed" -msgstr "Lukk direktemeldinger straks når fanen er lukket" +msgstr "Lukk lynmeldinger straks når fanen er lukket" msgid "Show _detailed information" msgstr "Vis _detaljert informasjon" @@ -11405,7 +12368,7 @@ msgid "Use smooth-scrolling" msgstr "Bruk behagelig scrolling" msgid "F_lash window when IMs are received" -msgstr "B_link vinduet når nye direktemeldinger mottas" +msgstr "B_link vinduet når nye lynmeldinger mottas" msgid "Minimi_ze new conversation windows" msgstr "Mini_mer nye samtalevinduer" @@ -11428,8 +12391,12 @@ msgstr "Samtle _font:" msgid "Default Formatting" msgstr "Standardformatering" -msgid "This is how your outgoing message text will appear when you use protocols that support formatting." -msgstr "Slik vil dine utgående meldinger se ut når du bruker protokoller som støtter formatering." +msgid "" +"This is how your outgoing message text will appear when you use protocols " +"that support formatting." +msgstr "" +"Slik vil dine utgående meldinger se ut når du bruker protokoller som støtter " +"formatering." msgid "Cannot start proxy configuration program." msgstr "Klarte ikke starte innstillingsprogrammet for mellomlageret." @@ -11492,6 +12459,10 @@ msgstr "Proxytjener" msgid "No proxy" msgstr "Ingen proxy" +#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings +msgid "Use remote DNS with SOCKS4 proxies" +msgstr "Bruk fjern DNS med SOCKS4-mellomtenarar" + msgid "_User:" msgstr "_Bruker:" @@ -11572,21 +12543,27 @@ msgstr "Logg alle _status endinger til systemlogg" msgid "Sound Selection" msgstr "Lydvalg" +#, c-format msgid "Quietest" msgstr "Stillest" +#, c-format msgid "Quieter" msgstr "Stillere" +#, c-format msgid "Quiet" msgstr "Stille" +#, c-format msgid "Loud" msgstr "Høy" +#, c-format msgid "Louder" msgstr "Høyere" +#, c-format msgid "Loudest" msgstr "Høyest" @@ -11690,14 +12667,14 @@ msgstr "Blokker alle brukere" msgid "Block only the users below" msgstr "Blokker kun brukerne vist nedenfor" -msgid "Privacy" +msgid "Personvern" msgstr "Sikkerhet" msgid "Changes to privacy settings take effect immediately." msgstr "Endringer i sikkerhetsinnstillingene skjer umiddelbart." msgid "Set privacy for:" -msgstr "Sett sikkerhet for:" +msgstr "Sett personvern for:" #. Remove All button msgid "Remove Al_l" @@ -11809,8 +12786,12 @@ msgstr "Oppgi en snarvei som skal forbindes med smilefjeset." msgid "Duplicate Shortcut" msgstr "Duplikat snarvei" -msgid "A custom smiley for the selected shortcut already exists. Please specify a different shortcut." -msgstr "Et tilpasset smilefjes finnes allerede for den valgte snarveien. Oppgi en annen snarvei." +msgid "" +"A custom smiley for the selected shortcut already exists. Please specify a " +"different shortcut." +msgstr "" +"Et tilpasset smilefjes finnes allerede for den valgte snarveien. Oppgi en " +"annen snarvei." msgid "Please select an image for the smiley." msgstr "Velg et bilde for smilefjeset." @@ -11867,14 +12848,20 @@ msgid "Cannot send folder %s." msgstr "Kan ikke sende mappe %s." #, c-format -msgid "%s cannot transfer a folder. You will need to send the files within individually." +msgid "" +"%s cannot transfer a folder. You will need to send the files within " +"individually." msgstr "%s kan ikke overføre en mappe. Du må sende filene inni hver for seg." msgid "You have dragged an image" msgstr "Du har dratt et bilde" -msgid "You can send this image as a file transfer, embed it into this message, or use it as the buddy icon for this user." -msgstr "Du kan sende dette bildet som filoverføring, sett det inn i denne bekjeden eller bruk det som kontaktikon for denne brukeren." +msgid "" +"You can send this image as a file transfer, embed it into this message, or " +"use it as the buddy icon for this user." +msgstr "" +"Du kan sende dette bildet som filoverføring, sett det inn i denne bekjeden " +"eller bruk det som kontaktikon for denne brukeren." msgid "Set as buddy icon" msgstr "Sett som kontaktikon" @@ -11888,11 +12875,19 @@ msgstr "Sett inn i beskjed" msgid "Would you like to set it as the buddy icon for this user?" msgstr "Vil du sette dette som kontaktikon for denne brukeren?" -msgid "You can send this image as a file transfer, or use it as the buddy icon for this user." -msgstr "Du kan sende dette bildet som filoverføring, sett det inn i denne bekjeden eller bruk det som kontaktikon for denne brukeren." +msgid "" +"You can send this image as a file transfer, or use it as the buddy icon for " +"this user." +msgstr "" +"Du kan sende dette bildet som filoverføring, sett det inn i denne bekjeden " +"eller bruk det som kontaktikon for denne brukeren." -msgid "You can insert this image into this message, or use it as the buddy icon for this user" -msgstr "Du kan sette inn dette bildet i beskjed eller bruke det som kontaktikon for denne brukeren" +msgid "" +"You can insert this image into this message, or use it as the buddy icon for " +"this user" +msgstr "" +"Du kan sette inn dette bildet i beskjed eller bruke det som kontaktikon for " +"denne brukeren" #. I don't know if we really want to do anything here. Most of the desktop item types are crap like #. * "MIME Type" (I have no clue how that would be a desktop item) and "Comment"... nothing we can really @@ -11902,8 +12897,12 @@ msgstr "Du kan sette inn dette bildet i beskjed eller bruke det som kontaktikon msgid "Cannot send launcher" msgstr "Klarte ikke sende lasteren" -msgid "You dragged a desktop launcher. Most likely you wanted to send whatever this launcher points to instead of this launcher itself." -msgstr "Du dro en skrivebordstarter. Sannsynligvis ville du sende det som starteren peker til og ikke selve starteren." +msgid "" +"You dragged a desktop launcher. Most likely you wanted to send whatever this " +"launcher points to instead of this launcher itself." +msgstr "" +"Du dro en skrivebordstarter. Sannsynligvis ville du sende det som starteren " +"peker til og ikke selve starteren." #, c-format msgid "" @@ -11930,8 +12929,10 @@ msgid "Failed to open file '%s': %s" msgstr "Klarte ikke å åpne fil '%s': %s" #, c-format -msgid "Failed to load image '%s': reason not known, probably a corrupt image file" -msgstr "Feilet å laste bilde '%s': grunn ukjent, sannsynligvis en korrupt bilde fil" +msgid "" +"Failed to load image '%s': reason not known, probably a corrupt image file" +msgstr "" +"Feilet å laste bilde '%s': grunn ukjent, sannsynligvis en korrupt bilde fil" msgid "Save File" msgstr "Lagre fil" @@ -12042,8 +13043,12 @@ msgstr "Kontakt er avlogget" msgid "Point values to use when..." msgstr "Verdier for bruk når..." -msgid "The buddy with the <i>largest score</i> is the buddy who will have priority in the contact.\n" -msgstr "Kontakten med den <i>største score</i> er kontakten som vil ha prioritet i kontakten.\n" +msgid "" +"The buddy with the <i>largest score</i> is the buddy who will have priority " +"in the contact.\n" +msgstr "" +"Kontakten med den <i>største score</i> er kontakten som vil ha prioritet i " +"kontakten.\n" msgid "Use last buddy when scores are equal" msgstr "Bruk den siste kontakten når resultatene er lik" @@ -12063,12 +13068,18 @@ msgstr "Kontaktprioritet" #. *< name #. *< version #. *< summary -msgid "Allows for controlling the values associated with different buddy states." -msgstr "Lar deg kontrollere verdiene for de ulike tilstandene kontakter kan være i." +msgid "" +"Allows for controlling the values associated with different buddy states." +msgstr "" +"Lar deg kontrollere verdiene for de ulike tilstandene kontakter kan være i." #. *< description -msgid "Allows for changing the point values of idle/away/offline states for buddies in contact priority computations." -msgstr "Lar deg endre vektingen for inaktiv/borte/avlogget for kontakter i kontaktprioritetsutregninger." +msgid "" +"Allows for changing the point values of idle/away/offline states for buddies " +"in contact priority computations." +msgstr "" +"Lar deg endre vektingen for inaktiv/borte/avlogget for kontakter i " +"kontaktprioritetsutregninger." msgid "Conversation Colors" msgstr "Samtalefarger" @@ -12102,7 +13113,7 @@ msgid "Apply in Chats" msgstr "Legg til i Samtaler" msgid "Apply in IMs" -msgstr "Legg til i Direktemeldinger" +msgstr "Legg til i Lynmeldinger" msgid "By conversation count" msgstr "Etter samtaleantall" @@ -12111,14 +13122,20 @@ msgid "Conversation Placement" msgstr "Samtaleplassering" #. Translators: "New conversations" should match the text in the preferences dialog and "By conversation count" should be the same text used above -msgid "Note: The preference for \"New conversations\" must be set to \"By conversation count\"." -msgstr "NB: Preferansene for \"Nye samtaler\" må være satt til \"By conversation count\"." +msgid "" +"Note: The preference for \"New conversations\" must be set to \"By " +"conversation count\"." +msgstr "" +"NB: Preferansene for \"Nye samtaler\" må være satt til \"By conversation " +"count\"." msgid "Number of conversations per window" msgstr "Antall samtaler per vindu" msgid "Separate IM and Chat windows when placing by number" -msgstr "Separere direktemeldings- og chattevinduer når programet plasserer etter nummer" +msgstr "" +"Separere lynmeldings- og chattevinduer når programet plasserer etter " +"nummer" #. *< type #. *< ui_requirement @@ -12136,8 +13153,12 @@ msgstr "Flere plasseringsmuligheter for samtaler." #. *< summary #. * description -msgid "Restrict the number of conversations per windows, optionally separating IMs and Chats" -msgstr "Begrens det maksimale antallet samtaler per vindu, og eventuelt separering av direktemeldinger og chat" +msgid "" +"Restrict the number of conversations per windows, optionally separating IMs " +"and Chats" +msgstr "" +"Begrens det maksimale antallet samtaler per vindu, og eventuelt separering " +"av lynmeldinger og chat" #. Configuration frame msgid "Mouse Gestures Configuration" @@ -12170,22 +13191,26 @@ msgstr "Lar deg bruke musbevegelser" #. * description msgid "" -"Allows support for mouse gestures in conversation windows. Drag the middle mouse button to perform certain actions:\n" +"Allows support for mouse gestures in conversation windows. Drag the middle " +"mouse button to perform certain actions:\n" " • Drag down and then to the right to close a conversation.\n" " • Drag up and then to the left to switch to the previous conversation.\n" " • Drag up and then to the right to switch to the next conversation." msgstr "" -"Gir støtte til musebevegelser i samtalevinduer. Dra midtknappen på musa for å utføre enkelte handlinger:\n" +"Gir støtte til musebevegelser i samtalevinduer. Dra midtknappen på musa for " +"å utføre enkelte handlinger:\n" " • dra ned og til høyre: lar deg lukke en samtale.\n" " • dra opp og til venstre: bytter til forrige samtale.\n" " • dra opp og til høyre: bytter til neste samtale." msgid "Instant Messaging" -msgstr "Direktemeldinger" +msgstr "Lynmeldinger" #. Add the label. msgid "Select a person from your address book below, or add a new person." -msgstr "Velg en person fra adresseboken som er vist under, eller legg til en ny person." +msgstr "" +"Velg en person fra adresseboken som er vist under, eller legg til en ny " +"person." msgid "Group:" msgstr "Gruppe:" @@ -12199,8 +13224,12 @@ msgid "Select Buddy" msgstr "Velg kontakt" #. Add the label. -msgid "Select a person from your address book to add this buddy to, or create a new person." -msgstr "Velg en person fra adresseboka for å legge til denne kontakten, eller lag en ny kontakt." +msgid "" +"Select a person from your address book to add this buddy to, or create a new " +"person." +msgstr "" +"Velg en person fra adresseboka for å legge til denne kontakten, eller lag en " +"ny kontakt." #. Add the expander msgid "User _details" @@ -12223,7 +13252,7 @@ msgid "Add to Address Book" msgstr "Legg til i adresseboka" msgid "Send Email" -msgstr "Send E-post" +msgstr "Send e-post" #. Configuration frame msgid "Evolution Integration Configuration" @@ -12322,7 +13351,8 @@ msgid "Checks for new local mail." msgstr "Sjekker for ny lokal e-post." msgid "Adds a small box to the buddy list that shows if you have new mail." -msgstr "Legger til en liten boks i kontaktlista som viser om du har fått e-post." +msgstr "" +"Legger til en liten boks i kontaktlista som viser om du har fått e-post." msgid "Markerline" msgstr "Markeringslinje" @@ -12337,14 +13367,18 @@ msgid "Draw Markerline in " msgstr "Tegn Understrek i " msgid "_IM windows" -msgstr "Vinduer for direktemeldinger" +msgstr "Vinduer for lynmeldinger" # msgid "C_hat windows" msgstr "_Samtalevinduer" -msgid "A music messaging session has been requested. Please click the MM icon to accept." -msgstr "En musikk samtale økt har blitt forespurt. Vennligst klikk på MM ikonet for å akseptere." +msgid "" +"A music messaging session has been requested. Please click the MM icon to " +"accept." +msgstr "" +"En musikk samtale økt har blitt forespurt. Vennligst klikk på MM ikonet for " +"å akseptere." msgid "Music messaging session confirmed." msgstr "Musikk samtale økt bekreftet." @@ -12383,8 +13417,12 @@ msgid "Music Messaging Plugin for collaborative composition." msgstr "Musikk Samtale Tillegg for samarbeids komposisjon." #. * summary -msgid "The Music Messaging Plugin allows a number of users to simultaneously work on a piece of music by editting a common score in real-time." -msgstr "Musikk Samtale Tillegg tillater flere brukere å arbeide på et stykke musikk samtidig ved å redigere et felles resultat i samtid." +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." +msgstr "" +"Musikk Samtale Tillegg tillater flere brukere å arbeide på et stykke musikk " +"samtidig ved å redigere et felles resultat i samtid." #. ---------- "Notify For" ---------- msgid "Notify For" @@ -12527,6 +13565,7 @@ msgstr "Varslingsdialog" msgid "Select Color" msgstr "Velg farge" +#, c-format msgid "Select Interface Font" msgstr "Velg Grensesnitt Font" @@ -12591,8 +13630,12 @@ msgstr "Direkte" msgid "Lets you send raw input to text-based protocols." msgstr "Lar deg sende direktekommandoer til tekstbaserte protokoller." -msgid "Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit 'Enter' in the entry box to send. Watch the debug window." -msgstr "Lar deg sende direktekommandoer til tekstbaserte protokoller (XMPP, MSN, IRC, TOC). Trykk «Enter» for å sende og sjekk feilsøkingsvinduet." +msgid "" +"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit " +"'Enter' in the entry box to send. Watch the debug window." +msgstr "" +"Lar deg sende direktekommandoer til tekstbaserte protokoller (XMPP, MSN, " +"IRC, TOC). Trykk «Enter» for å sende og sjekk feilsøkingsvinduet." #, c-format msgid "You can upgrade to %s %s today." @@ -12623,8 +13666,11 @@ msgid "Checks periodically for new releases." msgstr "Sjekker periodisk for nye utgaver." #. * description -msgid "Checks periodically for new releases and notifies the user with the ChangeLog." -msgstr "Sjekker periodisk for nye versjoner, og gir endringslista til brukeren." +msgid "" +"Checks periodically for new releases and notifies the user with the " +"ChangeLog." +msgstr "" +"Sjekker periodisk for nye versjoner, og gir endringslista til brukeren." #. *< major version #. *< minor version @@ -12643,8 +13689,12 @@ msgid "Conversation Window Send Button." msgstr "Send-knapp i samtalevindu" #. *< summary -msgid "Adds a Send button to the entry area of the conversation window. Intended for when no physical keyboard is present." -msgstr "Legg til en Send-knapp i samtalevinduet. Tenkt brukt når intet fysisk tastatur er tilgjengelig." +msgid "" +"Adds a Send button to the entry area of the conversation window. Intended " +"for when no physical keyboard is present." +msgstr "" +"Legg til en Send-knapp i samtalevinduet. Tenkt brukt når intet fysisk " +"tastatur er tilgjengelig." msgid "Duplicate Correction" msgstr "Dupliserings Korrigering" @@ -12736,6 +13786,7 @@ msgstr "Vis tidsstempel i iChat-stil hvert Nte minutt." msgid "Timestamp Format Options" msgstr "Innstillinger for Tidsstempel Format" +#, c-format msgid "_Force 24-hour time format" msgstr "_Tving 24-timers format" @@ -12771,24 +13822,28 @@ msgid "Customizes the message timestamp formats." msgstr "Lager egne tidsstempel formater for beskjeder." #. * description -msgid "This plugin allows the user to customize conversation and logging message timestamp formats." -msgstr "Dette tillegget tillater brukeren å lage egne samtale og loggings tidsstempler." +msgid "" +"This plugin allows the user to customize conversation and logging message " +"timestamp formats." +msgstr "" +"Dette tillegget tillater brukeren å lage egne samtale og loggings " +"tidsstempler." msgid "Opacity:" msgstr "Ugjennomsiktighet:" #. IM Convo trans options msgid "IM Conversation Windows" -msgstr "Samtalevinduer for direktemeldinger" +msgstr "Samtalevinduer for lynmeldinger" msgid "_IM window transparency" -msgstr "Gjennomsiktige vinduer for direktemeldinger" +msgstr "Gjennomsiktige vinduer for lynmeldinger" msgid "_Show slider bar in IM window" -msgstr "Vis _glideknapp i direktemeldingsvindu" +msgstr "Vis _glideknapp i lynmeldingsvindu" msgid "Remove IM window transparency on focus" -msgstr "Ta vekk transparens i direktemeldingsvindu ved fokus" +msgstr "Ta vekk transparens i lynmeldingsvindu ved fokus" # msgid "Always on top" @@ -12821,11 +13876,13 @@ msgstr "Variabel gjennomsiktighet for kontaktlisten og samtaler." #. * description msgid "" -"This plugin enables variable alpha transparency on conversation windows and the buddy list.\n" +"This plugin enables variable alpha transparency on conversation windows and " +"the buddy list.\n" "\n" "* Note: This plugin requires Win2000 or greater." msgstr "" -"Dette programtillegget gir variabel alfa-transparens i samtalevindu og kontaktlisten.\n" +"Dette programtillegget gir variabel alfa-transparens i samtalevindu og " +"kontaktlisten.\n" "\n" "*Merk: Tillegget krever Windows 2000 eller senere utgaver." @@ -12851,17 +13908,17 @@ msgstr "_Hold kontaktlistevinduet øverst:" msgid "Only when docked" msgstr "Kun når skjult i systemstatusfeltet" -msgid "_Flash window when chat messages are received" -msgstr "La vinduet _blinke når det kommer nye beskjeder" - msgid "Windows Pidgin Options" msgstr "Valg for Windows Pidgin" msgid "Options specific to Pidgin for Windows." msgstr "Innstillinger som er spesifikke for Pidgin på Windows." -msgid "Provides options specific to Pidgin for Windows , such as buddy list docking." -msgstr "Gir spesifikke innstillinger for Pidgin på Windows, slik som skjuling av kontaktliste i systemstatusfeltet." +msgid "" +"Provides options specific to Pidgin for Windows , such as buddy list docking." +msgstr "" +"Gir spesifikke innstillinger for Pidgin på Windows, slik som skjuling av " +"kontaktliste i systemstatusfeltet." msgid "<font color='#777777'>Logged out.</font>" msgstr "<font color='#777777'>Logget ut.</font>" @@ -12898,7 +13955,14 @@ msgstr "Send og motta direkte XMPP vers." #. * description msgid "This plugin is useful for debbuging XMPP servers or clients." -msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter." +msgstr "" +"Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter." + +#~ msgid "Unable to retrieve MSN Address Book" +#~ msgstr "Klarte ikke hente MSN-adressebok" + +#~ msgid "_Flash window when chat messages are received" +#~ msgstr "La vinduet _blinke når det kommer nye beskjeder" #, fuzzy #~ msgid "Connection to server lost (no data received within %d second)" @@ -12908,6 +13972,7 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #~ "Tilkobling til server mistet (ingen data mottatt iløpet av %d sekunder)" #~ msgstr[1] "" #~ "Tilkobling til server mistet (ingen data mottatt iløpet av %d sekunder)" + #~ msgid "" #~ "You may be disconnected shortly. You may want to use TOC until this is " #~ "fixed. Check %s for updates." @@ -12922,6 +13987,7 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #, fuzzy #~ msgid "Can not decrypt get server reply" #~ msgstr "Kan ikke hente tjenerinformasjon" + #~ msgid "Keep alive error" #~ msgstr "Hold i livet feil" @@ -12936,16 +14002,20 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #, fuzzy #~ msgid "Connecting server ..." #~ msgstr "Koble til tjener" + #~ msgid "Failed to send IM." -#~ msgstr "Feilet i å sende direktemelding." +#~ msgstr "Feilet i å sende lynmelding." + #~ msgid "User information for %s unavailable" #~ msgstr "Brukerinformasjon for %s er ikke tilgjengelig" + #~ msgid "A group with the name already exists." #~ msgstr "En gruppe med dette navnet eksisterer allerede." #, fuzzy #~ msgid "Primary Information" #~ msgstr "Profilinformasjon" + #~ msgid "Blood Type" #~ msgstr "Blodtype" @@ -12956,6 +14026,7 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #, fuzzy #~ msgid "Successed:" #~ msgstr "Hastighet:" + #~ msgid "" #~ "Setting custom faces is not currently supported. Please choose an image " #~ "from %s." @@ -12970,6 +14041,7 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #, fuzzy #~ msgid "You rejected %d's request" #~ msgstr "Uventet forespørsel" + #~ msgid "Reject request" #~ msgstr "Avslå forespørsel" @@ -12984,12 +14056,14 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #, fuzzy #~ msgid "QQ Number Error" #~ msgstr "QQ Nummer" + #~ msgid "Group Description" #~ msgstr "Gruppebeskrivelse" #, fuzzy #~ msgid "Auth" #~ msgstr "Godkjenn" + #~ msgid "Approve" #~ msgstr "Godkjenn" @@ -13005,20 +14079,24 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #, fuzzy #~ msgid "[%d] added to Qun \"%d\"" #~ msgstr "Du [%d] har blitt lagt til i gruppen \"%d\"" + #~ msgid "I am a member" #~ msgstr "Jeg er en medlem" #, fuzzy #~ msgid "I am requesting" #~ msgstr "Ugyldig forespørsel" + #~ msgid "I am the admin" #~ msgstr "Jeg er admin" + #~ msgid "Unknown status" #~ msgstr "Ukjent status" #, fuzzy #~ msgid "Remove from Qun" #~ msgstr "Fjern gruppe" + #~ msgid "You entered a group ID outside the acceptable range" #~ msgstr "Du tastet inn en gruppe ID utenfor den aksepterte rekkevidden" @@ -13059,6 +14137,7 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #, fuzzy #~ msgid "Leave the QQ Qun" #~ msgstr "Forlat denne QQ Qun" + #~ msgid "Block this buddy" #~ msgstr "Blokker denne kontakten" @@ -13091,6 +14170,7 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #, fuzzy #~ msgid "QQ Budy" #~ msgstr "Legg til kontakt" + #~ msgid "%s wants to add you [%s] as a friend" #~ msgstr "%s ønsker å legge deg [%s] som en venn" @@ -13109,32 +14189,42 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #, fuzzy #~ msgid "Network disconnected" #~ msgstr "Frakoblet" + #~ msgid "developer" #~ msgstr "utvikler" + #~ msgid "XMPP developer" #~ msgstr "XMPP-utvikler" + #~ msgid "Artists" #~ msgstr "Artister" + #~ msgid "" #~ "You are using %s version %s. The current version is %s. You can get it " #~ "from <a href=\"%s\">%s</a><hr>" #~ msgstr "" #~ "Du bruker %s versjon %s. Den nåværende versjonen er %s. Du kan hente den " #~ "fra <a href=\"%s\">%s</a><hr>" + #~ msgid "<b>ChangeLog:</b><br>%s" #~ msgstr "<b>Endringslogg:</b><br>%s" + #~ msgid "Screen name:" #~ msgstr "Skjermnavn:" + #~ msgid "Pounce only when my status is not available" #~ msgstr "Pounce kun når min status er ikke tilgjengelig" + #~ msgid "Someone says your screen name in chat" #~ msgstr "Noen roper skjermnavnet ditt i en samtale" + #~ msgid "EOF while reading from resolver process" #~ msgstr "Feil under lesing fra socket" #, fuzzy #~ msgid "Error setting socket options" #~ msgstr "Feil: kunne ikke koble til" + #~ msgid "" #~ "This server requires plaintext authentication over an unencrypted " #~ "connection. Allow this and continue authentication?" @@ -13153,10 +14243,12 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #, fuzzy #~ msgid "Windows Live ID authentication Failed" #~ msgstr "Autentisering feilet" + #~ msgid "" #~ "Sorry, passwords over %d characters in length (yours is %d) are not " #~ "supported by MySpace." #~ msgstr "Sorry, passord over %d tegn (du har %d) er ikke støttet av MySpace." + #~ msgid "" #~ "Please go to http://editprofile.myspace.com/index.cfm?fuseaction=profile." #~ "username and choose a username and try to login again." @@ -13164,73 +14256,99 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #~ "Vennligst gå til http://editprofile.myspace.com/index.cfm?" #~ "fuseaction=profile.username og velg et brukernavn og prøv å logge inn " #~ "igjen." + #~ msgid "Too evil (sender)" #~ msgstr "Altfor ond (sender)" + #~ msgid "Too evil (receiver)" #~ msgstr "Altfor ond (mottaker)" + #~ msgid "Screen name sent" #~ msgstr "Skjermnavn sendt" + #~ msgid "Invalid screen name." #~ msgstr "Ugyldig brukernavn." + #~ msgid "Available Message" #~ msgstr "Tilstedebeskjed" + #~ msgid "Screen name" #~ msgstr "Skjermnavn" + #~ msgid "Away Message" #~ msgstr "Fraværsbeskjed" + #~ msgid "<i>(retrieving)</i>" #~ msgstr "<i>(mottar)</i>" #, fuzzy #~ msgid "Use recent buddies group" #~ msgstr "Brukeren er ikke i gruppen" + #~ msgid "Show how long you have been idle" #~ msgstr "Vis hvor lenge du har vært inaktiv" + #~ msgid "Your information has been updated" #~ msgstr "Din informasjon har blitt oppdatert" + #~ msgid "Input your reason:" #~ msgstr "Sett inn din grunn:" + #~ msgid "You have successfully removed a buddy" #~ msgstr "Fjerning av kompis var vellykket" + #~ msgid "You have successfully removed yourself from your friend's buddy list" #~ msgstr "Fjerning av deg selv fra kompisen dins venneliste var vellykket" + #~ msgid "You have added %d to buddy list" #~ msgstr "Legg til brukeren %d i kontaktlisten din" #, fuzzy #~ msgid "Invalid QQid" #~ msgstr "Ugyldig authzid" + #~ msgid "Please enter external group ID" #~ msgstr "Skriv ekstern gruppe ID" + #~ msgid "Your request to join group %d has been approved by admin %d" #~ msgstr "" #~ "Din forespørsel til å bli med i gruppen %d har blitt godkjent av admin %d" + #~ msgid "This group has been added to your buddy list" #~ msgstr "Denne gruppen har blitt lagt til kontaktlisten din" + #~ msgid "I am applying to join" #~ msgstr "Jeg søker om å bli med" + #~ msgid "You have successfully left the group" #~ msgstr "Du har forlatt gruppen" + #~ msgid "QQ Group Auth" #~ msgstr "QQ Group Auth" + #~ msgid "Your authorization request has been accepted by the QQ server" #~ msgstr "Din autoriserings forespørsel har blitt godtatt av QQ serveren" + #~ msgid "Code [0x%02X]: %s" #~ msgstr "Kode [0x%02X]: %s" #, fuzzy #~ msgid "Group Operation Error" #~ msgstr "Filoperasjonsfeil" + #~ msgid "Enter your reason:" #~ msgstr "Skriv din grunn:" #, fuzzy #~ msgid "Error requesting login token" #~ msgstr "Feil: kunne ikke koble til" + #~ msgid "Unable to login, check debug log" #~ msgstr "Klarte ikke logge inn, sjekk debug logg" + #~ msgid "TCP Address" #~ msgstr "TCP-adresse" + #~ msgid "UDP Address" #~ msgstr "UDP-adresse" @@ -13241,16 +14359,22 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #, fuzzy #~ msgid "Login failed, no reply" #~ msgstr "Pålogging feilet (%s)" + #~ msgid "User %s rejected your request" #~ msgstr "Buker %s har avslått din forespørsel" + #~ msgid "User %s approved your request" #~ msgstr "Buker %s har godkjent din forespørsel" + #~ msgid "Cannot find/access ~/.silc directory" #~ msgstr "Kan ikke finne/åpne ~/.silc katalog" + #~ msgid "Screen _name:" #~ msgstr "Skjerm_navn:" + #~ msgid "_Merge" #~ msgstr "_Flette" + #~ msgid "" #~ "Please enter the screen name of the person you would like to add to your " #~ "buddy list. You may optionally enter an alias, or nickname, for the " @@ -13261,14 +14385,19 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #~ "kontaktlisten din. I tillegg kan du skrive inn et alias, eller kallenavn, " #~ "for kontakten. Aliaset vil bli vist i stedet for skjermnavnet der det er " #~ "mulig.\n" + #~ msgid "A_ccount:" #~ msgstr "K_onto:" + #~ msgid "_Screen name:" #~ msgstr "_Skjermnavn:" + #~ msgid "User has typed something and stopped" #~ msgstr "Brukeren har skrevet noe og pauset" + #~ msgid "S_mile!" #~ msgstr "S_mil!" + #~ msgid "" #~ "%s%s<span weight=\"bold\">Written by:</span>\t%s\n" #~ "<span weight=\"bold\">Website:</span>\t\t%s\n" @@ -13281,34 +14410,47 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #, fuzzy #~ msgid "Display Statistics" #~ msgstr "Vis advarsler om tidsavbrudd" + #~ msgid "" #~ "The contact availability plugin (cap) is used to display statistical " #~ "information about buddies in a users contact list." #~ msgstr "" #~ "Forutsigelse av Kontaktens Tilgjengelighet tillegg (cap) er brukt for å " #~ "vise statistisk informasjon om kontakter i en brukers kontaktliste." + #~ msgid "There were errors unloading the plugin." #~ msgstr "Det oppsto feil i lossing av tillegget." + #~ msgid "Couldn't open file" #~ msgstr "Klarte ikke åpne filen" + #~ msgid "Error initializing session" #~ msgstr "Feil under oppretting av sesjon" + #~ msgid "Unable to connect to contact server" #~ msgstr "Kan ikke koble til tjener" + #~ msgid "Unable to connect to OIM server" #~ msgstr "Kan ikke koble til OIM server" + #~ msgid "Unable to make SSL connection to server." #~ msgstr "Klarte ikke opprette SSL-forbindelse med tjeneren." + #~ msgid "Invalid chat name specified." #~ msgstr "Ugyldig gruppesamtalenavn oppgitt." + #~ msgid "%s changed status from %s to %s" #~ msgstr "%s har endret status fra %s til %s" + #~ msgid "%s is now %s" #~ msgstr "%s er nå %s" + #~ msgid "%s is no longer %s" #~ msgstr "%s er ikke lenger %s" + #~ msgid "<span color=\"red\">%s disconnected: %s</span>" #~ msgstr "<span color=\"red\">%s koblet fra: %s</span>" + #~ msgid "" #~ "%s\n" #~ "\n" @@ -13319,10 +14461,13 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #~ "\n" #~ "%s vil ikke prøve og koble til kontoen igjen for du har rettet på feilen " #~ "og slått på kontoen igjen." + #~ msgid "Filter: " #~ msgstr "Filter: " + #~ msgid "The dependent plugin %s failed to unload." #~ msgstr "Det nødvendige tillegget %s kunne ikke lastes." + #~ 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 hours." @@ -13330,14 +14475,16 @@ msgstr "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter #~ "Pidgin klarte ikke å hente kontaktlisten din fra AIM-tjenerne. " #~ "Kontaktlisten er ikke tapt, og vil sannsynligvis bli tilgjengelig i løpet " #~ "av få timer." + #~ msgid "" #~ "Always use ICQ proxy server for file transfers\n" #~ "(slower, but does not reveal your IP address)" #~ msgstr "" #~ "Alltid bruk ICQ proxy server for filoverføring\n" #~ "(saktere, men avslører ikke din IP adresse)" + #~ msgid "/Buddies/Show" #~ msgstr "/Kontakter/Vis" + #~ msgid "Autojoin when account becomes online." #~ msgstr "Autotilknytt når konto er tilkoblet." - @@ -1,22 +1,21 @@ -# translation of pidin.po to Punjabi +# translation of pa.po to Punjabi # This file is distributed under the same license as the PACKAGE package. # Copyright (C) 2007 THE PACKAGE'S COPYRIGHT HOLDER. # -# Amanpreet Singh Alam[ਆਲਮ] <aalam@redhat.com>, 2005. -# A S Alam <apbrar@gmail.com>, 2006, 2007. -# A S Alam <aalam@users.sf.net>, 2007. +# A S Alam <aalam@users.sf.net>, 2005,2006, 2007, 2009. +# Amanpreet Singh Alam <aalam@users.sf.net>, 2009. msgid "" msgstr "" -"Project-Id-Version: pidin\n" +"Project-Id-Version: pa\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-01 15:52-0800\n" -"PO-Revision-Date: 2007-11-10 06:25+0530\n" -"Last-Translator: A S Alam <apbrar@gmail.com>\n" -"Language-Team: Punjabi <punjabi-l10n@users.sf.net>\n" +"POT-Creation-Date: 2009-02-22 09:57-0500\n" +"PO-Revision-Date: 2009-02-26 22:23+0530\n" +"Last-Translator: Amanpreet Singh Alam <aalam@users.sf.net>\n" +"Language-Team: Punjabi <punjabi-users@lists.sf.net>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "\n" "\n" "X-Generator: KBabel 1.11.4\n" @@ -36,7 +35,7 @@ msgid "" "Usage: %s [OPTION]...\n" "\n" " -c, --config=DIR use DIR for config files\n" -" -d, --debug print debugging messages to stdout\n" +" -d, --debug print debugging messages to stderr\n" " -h, --help display this help and exit\n" " -n, --nologin don't automatically login\n" " -v, --version display the current version and exit\n" @@ -45,7 +44,7 @@ msgstr "" "ਵਰਤੋਂ: %s [OPTION]...\n" "\n" " -c, --config=DIR use DIR for config files\n" -" -d, --debug print debugging messages to stdout\n" +" -d, --debug print debugging messages to stderr\n" " -h, --help display this help and exit\n" " -n, --nologin don't automatically login\n" " -v, --version display the current version and exit\n" @@ -64,19 +63,17 @@ msgid "Error" msgstr "ਗਲਤੀ" msgid "Account was not added" -msgstr "ਅਕਾਊਂਟ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ" +msgstr "ਅਕਾਊਂਟ ਸ਼ਾਮਲ ਨਹੀਂ ਕੀਤਾ ਗਿਆ" -#, fuzzy msgid "Username of an account must be non-empty." -msgstr "ਇੱਕ ਅਕਾਊਂਟ ਦਾ ਸਕਰੀਨ ਨਾਂ ਖਾਲੀ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।" +msgstr "ਇੱਕ ਅਕਾਊਂਟ ਦਾ ਯੂਜ਼ਰ ਨਾਂ ਖਾਲੀ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ" msgid "New mail notifications" -msgstr "ਨਵੀਂ ਚਿੱਠੀ ਸੂਚਨਾ" +msgstr "ਨਵੀਂ ਮੇਲ ਨੋਟੀਫਿਕੇਸ਼ਨ" msgid "Remember password" msgstr "ਪਾਸਵਰਡ ਯਾਦ ਰੱਖੋ" -#, fuzzy msgid "There are no protocol plugins installed." msgstr "ਕੋਈ ਪਰੋਟੋਕਾਲ ਪਲੱਗਇਨ ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ।" @@ -92,9 +89,8 @@ msgstr "ਨਵਾਂ ਅਕਾਊਂਟ" msgid "Protocol:" msgstr "ਪ੍ਰੋਟੋਕਾਲ:" -#, fuzzy msgid "Username:" -msgstr "ਯੂਜ਼ਰ ਨਾਂ(_U):" +msgstr "ਯੂਜ਼ਰ ਨਾਂ:" msgid "Password:" msgstr "ਪਾਸਵਰਡ:" @@ -103,7 +99,6 @@ msgid "Alias:" msgstr "ਏਲੀਆਸ:" #. Register checkbox -#, fuzzy msgid "Create this account on the server" msgstr "ਸਰਵਰ ਉੱਤੇ ਇਹ ਨਵਾਂ ਅਕਾਊਂਟ ਬਣਾਓ" @@ -185,9 +180,8 @@ msgstr "" msgid "Default" msgstr "ਡਿਫਾਲਟ" -#, fuzzy msgid "You must provide a username for the buddy." -msgstr "ਤੁਹਾਨੂੰ ਬੱਡੀ ਲਈ ਇੱਕ ਸਕਰੀਨ ਨਾਂ ਦੇਣਾ ਚਾਹੀਦਾ ਹੈ।" +msgstr "ਤੁਹਾਨੂੰ ਬੱਡੀ ਲਈ ਯੂਜ਼ਰ ਨਾਂ ਦੇਣਾ ਚਾਹੀਦਾ ਹੈ।" msgid "You must provide a group." msgstr "ਤੁਹਾਨੂੰ ਇੱਕ ਗਰੁੱਪ ਦੇਣਾ ਚਾਹੀਦਾ ਹੈ।" @@ -204,13 +198,11 @@ msgstr "ਬੱਡੀ ਸ਼ਾਮਲ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ" msgid "Username" msgstr "ਯੂਜ਼ਰ ਨਾਂ" -#, fuzzy msgid "Alias (optional)" -msgstr "ਉਪ ਨਾਂ ਸੰਪਰਕ" +msgstr "ਏਲੀਆਸ (ਚੋਣਵਾਂ)" -#, fuzzy msgid "Add in group" -msgstr "ਗਰੁੱਪ ਸ਼ਾਮਿਲ" +msgstr "ਗਰੁੱਪ ਵਿੱਚ ਸ਼ਾਮਲ" msgid "Account" msgstr "ਅਕਾਊਂਟ" @@ -352,9 +344,8 @@ msgstr "ਸੰਭਾਲਿਆ ਗਿਆ..." msgid "Plugins" msgstr "ਪਲੱਗਇਨ" -#, fuzzy msgid "Block/Unblock" -msgstr "ਪਾਬੰਦੀ ਹਟਾਓ" +msgstr "ਪਾਬੰਦੀ ਲਗਾਓ/ਹਟਾਓ" msgid "Block" msgstr "ਪਾਬੰਦੀ" @@ -362,11 +353,10 @@ msgstr "ਪਾਬੰਦੀ" msgid "Unblock" msgstr "ਪਾਬੰਦੀ ਹਟਾਓ" -#, fuzzy msgid "" "Please enter the username or alias of the person you would like to Block/" "Unblock." -msgstr "ਵਿਅਕਤੀ ਦਾ ਸਕਰੀਨ ਨਾਂ ਜਾਂ ਏਲੀਆਸ ਦਿਓ ਜੀ, ਜਿਸ ਨਾਲ ਤੁਸੀਂ IM ਚਾਹੁੰਦੇ ਹੋ।" +msgstr "ਵਿਅਕਤੀ ਦਾ ਯੂਜ਼ਰ ਨਾਂ ਜਾਂ ਏਲੀਆਸ ਦਿਓ ਜੀ, ਜਿਸ ਲਈ ਤੁਸੀਂ ਪਾਬੰਦੀ ਲਗਾਉਣੀ/ਹਟਾਉਣੀ ਚਾਹੁੰਦੇ ਹੋ।" #. Not multiline #. Not masked? @@ -377,9 +367,8 @@ msgstr "ਠੀਕ ਹੈ" msgid "New Instant Message" msgstr "ਨਵਾਂ ਤਰੁੰਤ ਸੁਨੇਹਾ" -#, fuzzy msgid "Please enter the username or alias of the person you would like to IM." -msgstr "ਵਿਅਕਤੀ ਦਾ ਸਕਰੀਨ ਨਾਂ ਜਾਂ ਏਲੀਆਸ ਦਿਓ ਜੀ, ਜਿਸ ਨਾਲ ਤੁਸੀਂ IM ਚਾਹੁੰਦੇ ਹੋ।" +msgstr "ਵਿਅਕਤੀ ਦਾ ਯੂਜ਼ਰ ਨਾਂ ਜਾਂ ਏਲੀਆਸ ਦਿਓ ਜੀ, ਜਿਸ ਨਾਲ ਤੁਸੀਂ IM ਚਾਹੁੰਦੇ ਹੋ।" msgid "Channel" msgstr "ਚੈਨਲ" @@ -393,11 +382,10 @@ msgstr "ਜੁਆਇੰਨ ਕਰਨ ਵਾਸਤੇ ਚੈਟ ਦਾ ਨਾਂ msgid "Join" msgstr "ਦਾਖਲ" -#, fuzzy msgid "" "Please enter the username or alias of the person whose log you would like to " "view." -msgstr "ਉਸ ਵਿਅਕਤੀ ਦਾ ਸਕਰੀਨ ਨਾਂ ਜਾਂ ਏਲੀਆਸ ਦਿਓ ਜੀ, ਜਿਸ ਦਾ ਲਾਗ ਤੁਸੀਂ ਵੇਖਣਾ ਚਾਹੁੰਦੇ ਹੋ।" +msgstr "ਉਸ ਵਿਅਕਤੀ ਦਾ ਯੂਜ਼ਰ ਨਾਂ ਜਾਂ ਏਲੀਆਸ ਦਿਓ ਜੀ, ਜਿਸ ਦਾ ਲਾਗ ਤੁਸੀਂ ਵੇਖਣਾ ਚਾਹੁੰਦੇ ਹੋ।" #. Create the "Options" frame. msgid "Options" @@ -406,20 +394,17 @@ msgstr "ਚੋਣਾਂ" msgid "Send IM..." msgstr "IM ਭੇਜੋ..." -#, fuzzy msgid "Block/Unblock..." -msgstr "ਪਾਬੰਦੀ ਹਟਾਓ" +msgstr "ਪਾਬੰਦੀ ਲਗਾਓ/ਹਟਾਓ..." msgid "Join Chat..." -msgstr "ਚੈਟ 'ਚ ਜੁਆਇੰਨ..." +msgstr "ਗੱਲਬਾਤ 'ਚ ਦਾਖਲ..." -#, fuzzy msgid "View Log..." -msgstr "ਲਾਗ ਵੇਖੋ" +msgstr "ਲਾਗ ਵੇਖੋ..." -#, fuzzy msgid "View All Logs" -msgstr "ਲਾਗ ਵੇਖੋ" +msgstr "ਸਭ ਲਾਗ ਵੇਖੋ" msgid "Show" msgstr "ਵੇਖੋ" @@ -442,16 +427,14 @@ msgstr "ਵਰਣਨਮਾਲਾ ਅਨੁਸਾਰ" msgid "By Log Size" msgstr "ਲਾਗ ਸਾਈਜ਼ ਰਾਹੀਂ" -#, fuzzy msgid "Buddy" -msgstr "ਬੱਡੀ(_B):" +msgstr "ਬੱਡੀ" msgid "Chat" msgstr "ਗੱਲਬਾਤ" -#, fuzzy msgid "Grouping" -msgstr "ਗਰੁੱਪ" +msgstr "ਗਰੁੱਪਿੰਗ" msgid "Certificate Import" msgstr "ਸਰਟੀਫਿਕੇਟ ਇੰਪੋਰਟ" @@ -562,7 +545,7 @@ msgstr "ਅਕਾਊਂਟ ਮੁੜ-ਯੋਗ" msgid "" "The account has disconnected and you are no longer in this chat. You will be " "automatically rejoined in the chat when the account reconnects." -msgstr "" +msgstr "ਅਕਾਊਂਟ ਡਿਸ-ਕੁਨੈਕਟ ਹੋ ਗਿਆ ਹੈ ਅਤੇ ਤੁਸੀਂ ਇਹ ਗੱਲਬਾਤ ਨਹੀਂ ਕਰ ਸਕਦੇ ਹੋ। ਤੁਸੀਂ ਅਕਾਊਂਟ ਮੁੜ-ਕੁਨੈਕਟ ਹੋਣ ਨਾਲ ਆਟੋਮੈਟਿਕ ਹੀ ਮੁੜ-ਕੁਨੈਕਟ ਹੋ ਜਾਉਗੇ।" msgid "No such command." msgstr "ਕੋਈ ਕਮਾਂਡ ਨਹੀਂ ਹੈ।" @@ -607,25 +590,24 @@ msgstr "ਤੁਸੀਂ ਇਹ ਗੱਲਬਾਤ ਛੱਡੀ।" msgid "Logging started. Future messages in this conversation will be logged." msgstr "ਲਾਗ ਕਰਨਾ ਸ਼ੁਰੂ ਕੀਤਾ ਹੈ। ਇਨ੍ਹਾਂ ਗੱਲਾਂ ਲਈ ਅਗਲੇ ਸੁਨੇਹੇ ਲਾਗ ਕੀਤੇ ਜਾਣਗੇ।" -msgid "" -"Logging stopped. Future messages in this conversation will not be logged." +msgid "Logging stopped. Future messages in this conversation will not be logged." msgstr "ਲਾਗ ਕਰਨਾ ਬੰਦ ਕੀਤਾ। ਇਨ੍ਹਾਂ ਗੱਲਾਂ ਲਈ ਅਗਲੇ ਸੁਨੇਹੇ ਲਾਗ ਨਹੀਂ ਕੀਤੇ ਜਾਣਗੇ।" msgid "Send To" msgstr "ਭੇਜੋ" -#, fuzzy msgid "Invite message" -msgstr "ਸਨੇਹੇ 'ਚ ਸ਼ਾਮਿਲ" +msgstr "ਸੱਦਾ ਸੁਨੇਹਾ" msgid "Invite" msgstr "ਸੱਦਾ" -#, fuzzy msgid "" "Please enter the name of the user you wish to invite,\n" "along with an optional invite message." -msgstr "ਸੱਦਾ ਭੇਜਣ ਲਈ ਯੂਜ਼ਰ ਦਾ ਨਾਂ ਦਿਓ, ਚੋਣਵੇਂ ਰੂਪ ਵਿੱਚ ਸੱਦਾ ਸੁਨੇਹਾ ਵੀ ਦਿੱਤਾ ਜਾ ਸਕਦਾ ਹੈ।" +msgstr "" +"ਸੱਦਾ ਭੇਜਣ ਲਈ ਯੂਜ਼ਰ ਦਾ ਨਾਂ ਦਿਓ, ਜਿਸ ਨੂੰ ਤੁਸੀਂ ਸੱਦਾ ਭੇਜਣਾ ਚਾਹੁੰਦੇ ਹੋ,\n" +"ਚੋਣਵੇਂ ਰੂਪ ਵਿੱਚ ਸੱਦਾ ਸੁਨੇਹਾ ਵੀ ਦਿੱਤਾ ਜਾ ਸਕਦਾ ਹੈ।" msgid "Conversation" msgstr "ਗੱਲਾਂਬਾਤਾਂ" @@ -639,9 +621,8 @@ msgstr "ਟਾਈਮ-ਸਟੈਂਪ ਵੇਖੋ" msgid "Add Buddy Pounce..." msgstr "ਬੱਡੀ ਪਉਨਸ ਸ਼ਾਮਲ..." -#, fuzzy msgid "Invite..." -msgstr "ਸੱਦਾ" +msgstr "ਸੱਦਾ..." msgid "Enable Logging" msgstr "ਲਾਗ ਰੱਖਣ ਯੋਗ" @@ -652,11 +633,11 @@ msgstr "ਸਾਊਂਡ ਯੋਗ" msgid "<AUTO-REPLY> " msgstr "<AUTO-REPLY> " -#, fuzzy, c-format +#, c-format msgid "List of %d user:\n" msgid_plural "List of %d users:\n" -msgstr[0] "ਯੂਜ਼ਰਾਂ ਦੀ ਲਿਸਟ:\n" -msgstr[1] "ਯੂਜ਼ਰਾਂ ਦੀ ਲਿਸਟ:\n" +msgstr[0] "%d ਯੂਜ਼ਰ ਦੀ ਲਿਸਟ:\n" +msgstr[1] "%d ਯੂਜ਼ਰਾਂ ਦੀ ਲਿਸਟ:\n" msgid "Supported debug options are: version" msgstr "ਸਹਿਯੋਗੀ ਡੀਬੱਗ ਚੋਣਾਂ ਹਨ: version" @@ -675,11 +656,11 @@ msgstr "" msgid "" "%s is not a valid message class. See '/help msgcolor' for valid message " "classes." -msgstr "" +msgstr "%s ਇੱਕ ਵੈਧ ਸੁਨੇਹਾ ਕਲਾਸ ਨਹੀਂ ਹੈ। ਵੈਧ ਸੁਨੇਹਾ ਕਲਾਸਾਂ ਲਈ '/help msgcolor' ਵੇਖੋ।" #, c-format msgid "%s is not a valid color. See '/help msgcolor' for valid colors." -msgstr "" +msgstr "%s ਇੱਕ ਵੈਧ ਰੰਗ ਨਹੀਂ ਹੈ। ਵੈਧ ਰੰਗਾਂ ਲਈ '/help msgcolor' ਵੇਖੋ।" msgid "" "say <message>: Send a message normally as if you weren't using a " @@ -728,6 +709,9 @@ msgid "" "background>: black, red, green, blue, white, gray, darkgray, magenta, " "cyan, default<br><br>EXAMPLE:<br> msgcolor send cyan default" msgstr "" +"msgcolor <class> <foreground> <background>: ਗੱਲਬਾਤ ਵਿੰਡੋ ਵਿੱਚ ਸੁਨੇਹਿਆਂ ਦੀਆਂ ਵੱਖ ਵੱਖ ਕਲਾਸਾਂ ਲਈ ਰੰਗ ਸੈੱਟ ਕਰੋ। <br> <" +"class>: receive, send, highlight, action, timestamp<br> <foreground/" +"background>: ਕਾਲਾ, ਲਾਲ, ਹਰਾ, ਨੀਲਾ, ਚਿੱਟਾ, ਗਰੇ, ਗੂੜਾ-ਗਰੇ, ਮੈਗਨਿਟਾ, ਕਿਰਮਚੀ, ਡਿਫਾਲਟ<br><br>ਜਿਵੇਂ:<br> msgcolor send cyan default" msgid "Unable to open file." msgstr "ਫਾਇਲ ਖੋਲਣ ਲਈ ਅਸਫਲ ਹੈ।" @@ -748,11 +732,11 @@ msgstr "ਫਿਲਟਰ: " msgid "Pause" msgstr "ਵਿਰਾਮ" -#, fuzzy, c-format +# , c-format msgid "File Transfers - %d%% of %d file" msgid_plural "File Transfers - %d%% of %d files" -msgstr[0] "ਫਾਇਲ ਟਰਾਂਸਫਰ - %d%% ਫਾਇਲਾਂ %d ਵਿੱਚੋਂ" -msgstr[1] "ਫਾਇਲ ਟਰਾਂਸਫਰ - %d%% ਫਾਇਲਾਂ %d ਵਿੱਚੋਂ" +msgstr[0] "ਫਾਇਲ ਟਰਾਂਸਫਰ - %2$d ਵਿੱਚੋਂ %1$d%% ਫਾਇਲ" +msgstr[1] "ਫਾਇਲ ਟਰਾਂਸਫਰ - %2$d ਵਿੱਚੋਂ %1$d%% ਫਾਇਲਾਂ" #. Create the window. msgid "File Transfers" @@ -799,13 +783,11 @@ msgstr "ਅਸਫ਼ਲ" msgid "%.2f KiB/s" msgstr "%.2f KiB/s" -#, fuzzy msgid "Sent" -msgstr "ਸੈੱਟ" +msgstr "ਭੇਜੇ" -#, fuzzy msgid "Received" -msgstr "ਪ੍ਰਾਪਤ ਹੋਏ ਸੁਨੇਹੇ" +msgstr "ਮਿਲੇ" msgid "Finished" msgstr "ਮੁਕੰਮਲ" @@ -814,21 +796,19 @@ msgstr "ਮੁਕੰਮਲ" msgid "The file was saved as %s." msgstr "ਫਾਇਲ ਨੂੰ %s ਵਾਂਗ ਸੰਭਾਲਿਆ ਗਿਆ।" -#, fuzzy msgid "Sending" -msgstr "ਭੇਜੋ" +msgstr "ਭੇਜਿਆ ਜਾ ਰਿਹਾ ਹੈ" -#, fuzzy msgid "Receiving" -msgstr "ਬਾਕੀ" +msgstr "ਮਿਲਿਆ" -#, fuzzy, c-format +# , c-format msgid "Conversation in %s on %s" -msgstr "%s ਨਾਲ ਗੱਲਾਂ-ਬਾਤਾਂ" +msgstr "%2$s ਉੱਤੇ %1$s ਗੱਲਬਾਤ" -#, fuzzy, c-format +#, c-format msgid "Conversation with %s on %s" -msgstr "%s ਨਾਲ ਗੱਲਬਾਤ" +msgstr "%2$s ਉੱਤੇ %1$s ਨਾਲ ਗੱਲਾਂ" msgid "%B %Y" msgstr "%B %Y" @@ -847,8 +827,7 @@ msgstr "" "ਤੁਰੰਤ ਸੁਨੇਹੇ (IM) ਕੇਵਲ ਤਾਂ ਹੀ ਲਾਗ ਕੀਤੇ ਜਾਣਗੇ, ਜੇ \"ਸਭ ਤੁਰੰਤ ਸੁਨੇਹੇ ਲਾਗ ਕਰੋ\" ਪਸੰਦ ਨੂੰ ਯੋਗ ਕੀਤਾ " "ਹੋਵੇਗਾ।" -msgid "" -"Chats will only be logged if the \"Log all chats\" preference is enabled." +msgid "Chats will only be logged if the \"Log all chats\" preference is enabled." msgstr "ਗੱਲਾਂ ਦੀ ਲਾਗ ਤਾਂ ਹੀ ਰੱਖਿਆ ਜਾਵੇਗਾ, ਜੇ \"ਸਭ ਗੱਲਾਂ ਦਾ ਲਾਗ ਰੱਖੋ\" ਪਸੰਦ ਯੋਗ ਕੀਤੀ ਹੋਵੇਗੀ।" msgid "No logs were found" @@ -859,7 +838,7 @@ msgstr "ਕੁੱਲ ਲਾਗ ਆਕਾਰ:" #. Search box ********* msgid "Scroll/Search: " -msgstr "" +msgstr "ਸਕਰੋਲ/ਖੋਜ:" #, c-format msgid "Conversations in %s" @@ -869,9 +848,8 @@ msgstr "%s ਨਾਲ ਗੱਲਾਂ-ਬਾਤਾਂ" msgid "Conversations with %s" msgstr "%s ਨਾਲ ਗੱਲਬਾਤ" -#, fuzzy msgid "All Conversations" -msgstr "ਗੱਲਾਂ-ਬਾਤਾਂ" +msgstr "ਸਭ ਗੱਲਾਂ-ਬਾਤਾਂ" msgid "System Log" msgstr "ਸਿਸਟਮ ਲਾਗ" @@ -913,9 +891,8 @@ msgstr "IM" msgid "(none)" msgstr "(ਕੋਈ ਨਹੀਂ)" -#, fuzzy msgid "URI" -msgstr "UIN" +msgstr "URI" msgid "ERROR" msgstr "ਗਲਤੀ" @@ -954,8 +931,7 @@ msgstr "ਪਲੱਗਇਨ ਲੋਡ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ" msgid "The selected file is not a valid plugin." msgstr "ਚੁਣੀ ਫਾਇਲ ਇੱਕ ਠੀਕ ਪਲੱਗਇਨ ਨਹੀਂ ਹੈ।" -msgid "" -"Please open the debug window and try again to see the exact error message." +msgid "Please open the debug window and try again to see the exact error message." msgstr "ਡੀਬੱਗ ਵਿੰਡੋ ਖੋਲ੍ਹੋ ਅਤੇ ਠੀਕ ਗਲਤੀ ਸੁਨੇਹਾ ਵੇਖਣ ਦੀ ਮੁੜ-ਟਰਾਈ ਕਰੋ।" msgid "Select plugin to install" @@ -1050,9 +1026,8 @@ msgstr "ਇੱਕ ਕਮਾਂਡ ਚਲਾਓ" msgid "Play a sound" msgstr "ਇੱਕ ਆਵਾਜ਼ ਚਲਾਓ" -#, fuzzy msgid "Pounce only when my status is not Available" -msgstr "ਜਦੋਂ ਮੇਰਾ ਸਟੇਟਸ ਉਪਲੱਬਧ ਨਾ ਹੋਵੇ ਤਾਂ ਹੀ ਪਉਨਸ ਕਰੋ(_o)" +msgstr "ਜਦੋਂ ਮੇਰਾ ਸਟੇਟਸ ਉਪਲੱਬਧ ਨਾ ਹੋਵੇ ਤਾਂ ਹੀ ਪਉਨਸ ਕਰੋ" msgid "Recurring" msgstr "ਆਵਿਰਤੀ" @@ -1113,7 +1088,6 @@ msgstr "%s ਦੂਰ ਚੱਲਿਆ ਗਿਆ ਹੈ (%s)" msgid "%s has sent you a message. (%s)" msgstr "%s ਨੇ ਤੁਹਾਨੂੰ ਸੁਨੇਹਾ ਭੇਜਿਆ ਹੈ। (%s)" -#, c-format msgid "Unknown pounce event. Please report this!" msgstr "ਅਣਜਾਣ ਪਉਨਸ ਘਟਨਾ ਹੈ। ਸੂਚਨਾ ਦਿਓ ਜੀ!" @@ -1159,20 +1133,17 @@ msgstr "ਹਾਲਤ ਬਦਲਣ ਤੋਂ ਪਹਿਲਾਂ ਮਿੰਟ" msgid "Change status to" msgstr "ਹਾਲਤ ਬਦਲੋ" -#. Conversations msgid "Conversations" msgstr "ਗੱਲਾਂ-ਬਾਤਾਂ" msgid "Logging" msgstr "ਲਾਗਇਨ" -#, fuzzy msgid "You must fill all the required fields." -msgstr "ਰਜਿਸਟਰੇਸ਼ਨ ਖੇਤਰ ਭਰੋ।" +msgstr "ਤੁਹਾਨੂੰ ਸਭ ਲੋੜੀਦੇ ਖੇਤਰ ਭਰਨੇ ਪੈਣੇ ਹਨ" -#, fuzzy msgid "The required fields are underlined." -msgstr "ਲੋੜੀਦੀ ਪਲੱਗਇਨ %s ਨੂੰ ਲੋਡ ਕਰਨ ਲਈ ਅਸਫਲ ਹੈ।" +msgstr "ਲਾਜ਼ਮੀ ਖੇਤਰਾਂ ਹੇਠ ਲਾਈਨਾਂ ਲੱਗੀਆਂ ਹਨ।" msgid "Not implemented yet." msgstr "ਹਾਲੇ ਬਣਾਇਆ ਨਹੀਂ ਗਿਆ।" @@ -1183,16 +1154,14 @@ msgstr "ਫਾਇਲ ਸੰਭਾਲੋ..." msgid "Open File..." msgstr "ਫਾਇਲ ਖੋਲੋ......." -#, fuzzy msgid "Choose Location..." -msgstr "ਯੂਜ਼ਰ ਟਿਕਾਣਾ" +msgstr "ਟਿਕਾਣਾ ਚੁਣੋ..." msgid "Hit 'Enter' to find more rooms of this category." -msgstr "" +msgstr "ਇਸ ਕੈਟਾਗਰੀ ਦੇ ਹੋਰ ਰੂਮ ਲੱਭਣ ਵਾਸਤੇ 'Enter' ਦੱਬੋ।" -#, fuzzy msgid "Get" -msgstr "ਸੈੱਟ" +msgstr "ਲਵੋ" #. Create the window. msgid "Room List" @@ -1225,7 +1194,6 @@ msgstr "ਤੁਸੀਂ ਗੱਲਬਾਤ ਵਿੱਚ ਬੋਲੇ" msgid "Others talk in chat" msgstr "ਗੱਲਬਾਤ ਵਿੱਚ ਹੋਰ ਵਿਸ਼ੇ" -#, fuzzy msgid "Someone says your username in chat" msgstr "ਕਿਸੇ ਨੇ ਤੁਹਾਡਾ ਨਾਂ ਗੱਲਬਾਤ ਦੌਰਾਨ ਲਿਆ ਹੈ" @@ -1480,44 +1448,37 @@ msgstr "ਨਵੀਂ ਗੱਲਬਾਤ ਵਿੱਚ ਤਾਜ਼ੀ ਗੱਲ msgid "" "When a new conversation is opened this plugin will insert the last " "conversation into the current conversation." -msgstr "" -"ਜਦੋਂ ਇੱਕ ਨਵੀਂ ਗੱਲਬਾਤ ਖੁੱਲ੍ਹਦੀ ਹੈ ਤਾਂ ਇਹ ਪਲੱਗਇਨ ਮੌਜੂਦਾ ਗੱਲਬਾਤ ਵਿੱਚ ਆਖਰੀ ਗੱਲਬਾਤ ਨੂੰ ਸ਼ਾਮਲ ਕਰਦੀ ਹੈ।" +msgstr "ਜਦੋਂ ਇੱਕ ਨਵੀਂ ਗੱਲਬਾਤ ਖੁੱਲ੍ਹਦੀ ਹੈ ਤਾਂ ਇਹ ਪਲੱਗਇਨ ਮੌਜੂਦਾ ਗੱਲਬਾਤ ਵਿੱਚ ਆਖਰੀ ਗੱਲਬਾਤ ਨੂੰ ਸ਼ਾਮਲ ਕਰਦੀ ਹੈ।" -#, c-format msgid "Online" -msgstr "ਆਨਲਾਇਨ" +msgstr "ਆਨਲਾਈਨ" msgid "Offline" -msgstr "ਆਫਲਾਇਨ" +msgstr "ਆਫਲਾਈਨ" -#, fuzzy msgid "Online Buddies" -msgstr "ਆਫਲਾਇਨ ਬੇਲੀ" +msgstr "ਆਨਲਾਈਨ ਬੱਡੀ" -#, fuzzy msgid "Offline Buddies" -msgstr "ਆਫਲਾਇਨ ਬੇਲੀ" +msgstr "ਆਫਲਾਈਨ ਬੇਲੀ" -#, fuzzy msgid "Online/Offline" -msgstr "ਆਨਾਲਾਇਨ" +msgstr "ਆਨਲਾਈਨ/ਆਫਲਾਈਨ" msgid "Meebo" -msgstr "" +msgstr "ਮੀਬੋ" -#, fuzzy msgid "No Grouping" -msgstr "ਸਾਊਂਡ ਨਹੀਂ" +msgstr "ਗਰੁੱਪਿੰਗ ਨਹੀਂ" msgid "Nested Subgroup" -msgstr "" +msgstr "ਅੰਦਰੂਨੀ ਸਬ-ਗਰੁੱਪ" msgid "Nested Grouping (experimental)" -msgstr "" +msgstr "ਅੰਦਰੂਨੀ ਗਰੁੱਪਿੰਗ (ਤਰਜਬੇ ਅਧੀਨ)" -#, fuzzy msgid "Provides alternate buddylist grouping options." -msgstr "ਈਵੇਲੂਸ਼ਨ ਨਾਲ ਸਬੰਧ ਉਪਲੱਬਧ ਕਰਵਾਉਦਾ ਹੈ।" +msgstr "ਬਦਲਵੀਂ ਬੱਡੀ-ਲਿਸਟ ਗਰੁੱਪਿੰਗ ਚੋਣਾਂ ਦਿੰਦਾ ਹੈ।" msgid "Lastlog" msgstr "ਆਖਰੀ-ਲਾਗ" @@ -1648,8 +1609,7 @@ msgstr "ਸਰਟੀਫਿਕੇਟ ਵੇਖੋ(_V)..." msgid "" "The certificate presented by \"%s\" is self-signed. It cannot be " "automatically checked." -msgstr "" -"ਸਰਟੀਫਿਕੇਟ \"%s\" ਨੂੰ ਖੁਦ-ਸਾਇਨ ਨਾਲ ਪੇਸ਼ ਕੀਤਾ ਗਿਆ ਹੈ। ਇਹ ਆਟੋਮੈਟਿਕ ਚੈੱਕ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।" +msgstr "ਸਰਟੀਫਿਕੇਟ \"%s\" ਨੂੰ ਖੁਦ-ਸਾਇਨ ਨਾਲ ਪੇਸ਼ ਕੀਤਾ ਗਿਆ ਹੈ। ਇਹ ਆਟੋਮੈਟਿਕ ਚੈੱਕ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।" #, c-format msgid "The certificate chain presented for %s is not valid." @@ -1670,12 +1630,10 @@ msgstr "ਗਲਤ ਸਰਟੀਫਿਕੇਟ ਚੇਨ" msgid "" "You have no database of root certificates, so this certificate cannot be " "validated." -msgstr "" -"ਤੁਹਾਡੇ ਕੋਲ root ਸਰਟੀਫਿਕੇਟ ਲਈ ਕੋਈ ਡਾਟਾਬੇਸ ਨਹੀਂ ਹੈ, ਇਸਕਰਕੇ ਇਹ ਸਰਟੀਫਿਕੇਟ ਵੈਧ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ।" +msgstr "ਤੁਹਾਡੇ ਕੋਲ root ਸਰਟੀਫਿਕੇਟ ਲਈ ਕੋਈ ਡਾਟਾਬੇਸ ਨਹੀਂ ਹੈ, ਇਸਕਰਕੇ ਇਹ ਸਰਟੀਫਿਕੇਟ ਵੈਧ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ।" #. vrq will be completed by user_auth -msgid "" -"The root certificate this one claims to be issued by is unknown to Pidgin." +msgid "The root certificate this one claims to be issued by is unknown to Pidgin." msgstr "ਇਹ root ਸਰਟੀਫਿਕੇਟ ਇੱਕ ਅਣਜਾਣ ਵਲੋਂ ਪਿਡਗਿਨ ਨੂੰ ਦਿੱਤਾ ਗਿਆ ਜਾਪਦਾ ਹੈ।" #, c-format @@ -1827,9 +1785,8 @@ msgstr "" "ਰਿਜ਼ੋਲਵਰ ਪਰੋਸੈੱਸ ਤੋਂ ਪੜ੍ਹਨ ਦੌਰਾਨ ਗਲਤੀ:\n" "%s" -#, c-format msgid "Resolver process exited without answering our request" -msgstr "" +msgstr "ਸਾਡੀ ਮੰਗ ਦਾ ਜਵਾਬ ਦਿੱਤੇ ਬਿਨਾਂ ਰਿਜ਼ਾਲਵਰ ਕਾਰਵਾਈ ਬੰਦ ਹੋ ਗਈ ਹੈ।" #, c-format msgid "Thread creation failure: %s" @@ -1917,7 +1874,6 @@ msgstr "%2$s ਤੋਂ %1$s ਦੀ ਟਰਾਂਸਫਰ ਸ਼ੁਰੂ ਹੋ msgid "Transfer of file %s complete" msgstr "ਫਾਇਲ %s ਦਾ ਟਰਾਂਸਫਰ ਮੁਕੰਮਲ ਹੋਇਆ" -#, c-format msgid "File transfer complete" msgstr "ਫਾਇਲ ਟਰਾਂਸਫਰ ਮੁਕੰਮਲ" @@ -1925,7 +1881,6 @@ msgstr "ਫਾਇਲ ਟਰਾਂਸਫਰ ਮੁਕੰਮਲ" msgid "You canceled the transfer of %s" msgstr "ਤੁਸੀਂ %s ਲਈ ਟਰਾਂਸਫਰ ਰੱਦ ਕੀਤਾ" -#, c-format msgid "File transfer cancelled" msgstr "ਫਾਇਲ ਟਰਾਂਸਫਰ ਰੱਦ ਕੀਤਾ" @@ -2114,7 +2069,6 @@ msgstr "(%s) %s <AUTO-REPLY>: %s\n" msgid "You are using %s, but this plugin requires %s." msgstr "ਤੁਸੀਂ %s ਵਰਤੇ ਰਹੇ ਹੋ, ਪਰ ਇਹ ਪਲੱਗਇਨ ਲਈ %s ਲੋੜੀਦਾ ਹੈ।" -#, c-format msgid "This plugin has not defined an ID." msgstr "ਇਹ ਪਲੱਗਇਨ ਕੋਈ ID ਨਹੀਂ ਹੈ।" @@ -2126,10 +2080,8 @@ msgstr "ਪਲੱਗਇਨ ਮੈਜ਼ਿਕ %d ਨਹੀਂ ਮਿਲਦੀ (% msgid "ABI version mismatch %d.%d.x (need %d.%d.x)" msgstr "ABI ਵਰਜਨ %d.%d.x ਮਿਲਦਾ ਨਹੀਂ (%d.%d.x ਦੀ ਲੋੜ)" -#, fuzzy -msgid "" -"Plugin does not implement all required functions (list_icon, login and close)" -msgstr "ਪਲੱਗਇਨ ਨੇ ਸਭ ਲੋੜੀਦੇ ਫੰਕਸ਼ਨ ਸਥਾਪਿਤ ਨਹੀਂ ਕੀਤੇ ਹਨ" +msgid "Plugin does not implement all required functions (list_icon, login and close)" +msgstr "ਪਲੱਗਇਨ ਨੇ ਸਭ ਲੋੜੀਦੇ ਫੰਕਸ਼ਨ ਸਥਾਪਿਤ ਨਹੀਂ ਕੀਤੇ ਹਨ (list_icon, login ਅਤੇ close)" #, c-format msgid "" @@ -2147,9 +2099,9 @@ msgstr "ਲੋੜੀਦੀ ਪਲੱਗਇਨ %s ਨੂੰ ਲੋਡ ਕਰਨ msgid "Unable to load your plugin." msgstr "ਤੁਹਾਡੀ ਪਲੱਗਇਨ ਲੋਡ ਕਰਨ ਲਈ ਅਸਮਰੱਥ" -#, fuzzy, c-format +# , c-format msgid "%s requires %s, but it failed to unload." -msgstr "ਨਿਰਭਰ ਪਲੱਗਇਨ %s ਲੋਡ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ।" +msgstr "%s ਨੂੰ %s ਚਾਹੀਦਾ ਸੀ, ਪਰ ਇਹ ਲੋਡ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ" msgid "Autoaccept" msgstr "ਆਟੋ-ਮਨਜ਼ੂਰ ਕਰੋ" @@ -2207,18 +2159,17 @@ msgstr "" "ਪੋਪਅੱਪ ਨਾਲ ਨੋਟੀਫਾਈ ਕਰੋ, ਜਦੋਂ ਵੀ ਇੱਕ ਆਟੋ-ਮਨਜ਼ੂਰ ਫਾਇਲ ਟਰਾਂਸਫਰ ਪੂਰੀ ਹੋ ਜਾਵੇ\n" "(ਕੇਵਲ ਜਦੋਂ ਭੇਜਣ ਵਾਲੇ ਨਾਲ ਕੋਈ ਸੰਵਾਦ ਨਾ ਹੋਵੇ)" -#, fuzzy msgid "Create a new directory for each user" -msgstr "ਖੋਜ ਲਈ ਇੱਕ ਯੂਜ਼ਰ ਡਾਇਰੈਕਟਰੀ ਚੁਣੋ" +msgstr "ਹਰੇਕ ਯੂਜ਼ਰ ਲਈ ਵੱਖਰੀ ਡਾਇਰੈਕਟਰੀ ਬਣਾਓ" msgid "Notes" -msgstr "ਸੂਚਨਾ" +msgstr "ਨੋਟਿਸ" msgid "Enter your notes below..." -msgstr "ਆਪਣੀ ਸੂਚਨਾ ਹੇਠਾਂ ਦਿਓ..." +msgstr "ਆਪਣੇ ਨੋਟਿਸ ਹੇਠਾਂ ਦਿਓ..." msgid "Edit Notes..." -msgstr "ਸੂਚਨਾ ਸੋਧ..." +msgstr "ਨੋਟਿਸ ਸੋਧ..." #. *< major version #. *< minor version @@ -2229,7 +2180,7 @@ msgstr "ਸੂਚਨਾ ਸੋਧ..." #. *< priority #. *< id msgid "Buddy Notes" -msgstr "ਬੱਡੀ ਨੋਟ" +msgstr "ਬੱਡੀ ਨੋਟਿਸ" #. *< name #. *< version @@ -2372,7 +2323,7 @@ msgid "User Inactivity Timeout (in minutes)" msgstr "ਯੂਜ਼ਰ ਇਨ-ਐਕਟੀਵਿਟੀ ਟਾਈਮ-ਆਉਟ (ਮਿੰਟਾਂ ਵਿੱਚ)" msgid "Apply hiding rules to buddies" -msgstr "" +msgstr "ਬੱਡੀ ਲਈ ਲੁਕਵਾਂ ਨਿਯਮ ਲਾਗੂ ਕਰੋ" #. *< type #. *< ui_requirement @@ -2423,8 +2374,7 @@ msgstr "ਤੁਹਾਡਾ ਸਰਵਰ ਨਾਲ ਕੁਨੈਕਸ਼ਨ ਟ msgid "" "You are currently disconnected. Messages will not be received unless you are " "logged in." -msgstr "" -"ਇਸ ਸਮੇਂ ਤੁਸੀਂ ਡਿਸ-ਕੁਨੈਕਟ ਹੋ। ਸੁਨੇਹੇ ਉਦੋਂ ਤੱਕ ਨਹੀਂ ਮਿਲਣਗੇ, ਜਦੋਂ ਤੱਕ ਕਿ ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕਰਦੇ ਹੋ।" +msgstr "ਇਸ ਸਮੇਂ ਤੁਸੀਂ ਡਿਸ-ਕੁਨੈਕਟ ਹੋ। ਸੁਨੇਹੇ ਉਦੋਂ ਤੱਕ ਨਹੀਂ ਮਿਲਣਗੇ, ਜਦੋਂ ਤੱਕ ਕਿ ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕਰਦੇ ਹੋ।" msgid "Message could not be sent because the maximum length was exceeded." msgstr "ਲੰਬਾਈ ਵੱਧ ਹੋਣ ਕਰਕੇ ਸੁਨੇਹਾ ਭੇਜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਹੈ।" @@ -2523,11 +2473,10 @@ msgid "Loads .NET plugins with Mono." msgstr "ਮੋਨੋ ਨਾਲ .NET ਪਲੱਗਇਨ ਲੋਡ ਕਰੋ" msgid "Add new line in IMs" -msgstr "" +msgstr "IM ਵਿੱਚ ਨਵੀਂ ਲਾਈਨ ਸ਼ਾਮਲ" -#, fuzzy msgid "Add new line in Chats" -msgstr "ਗੱਲਬਾਤ ਵਿੱਚ ਲਾਗੂ ਕਰੋ" +msgstr "ਗੱਲਾਬਾਤਾਂ ਵਿੱਚ ਨਵੀਆਂ ਲਾਈਨਾਂ ਸ਼ਾਮਲ" #. *< magic #. *< major version @@ -2539,7 +2488,7 @@ msgstr "ਗੱਲਬਾਤ ਵਿੱਚ ਲਾਗੂ ਕਰੋ" #. *< priority #. *< id msgid "New Line" -msgstr "ਨਵੀਂ ਲਾਇਨ" +msgstr "ਨਵੀਂ ਲਾਈਨ" #. *< name #. *< version @@ -2547,16 +2496,15 @@ msgid "Prepends a newline to displayed message." msgstr "ਸੁਨੇਹਾ ਵੇਖਾਉਣ ਲਈ ਇੱਕ ਨਵੀਂ ਲਾਇਨ ਜੋੜੋ।" #. *< summary -#, fuzzy msgid "" "Prepends a newline to messages so that the rest of the message appears below " "the username in the conversation window." msgstr "" -"ਸੁਨੇਹਿਆਂ ਵਿੱਚ ਇੱਕ ਨਵੀਂ-ਲਾਈਨ ਜੋੜਦੀ ਹੈ, ਤਾਂ ਕਿ ਨਵੇਂ ਸੁਨੇਹੇ ਗੱਲਬਾਤ ਵਿੰਡੋ ਵਿੱਚ ਸਕਰੀਨ ਨਾਂ ਦੇ ਹੇਠ ਵੇਖਾਈ " +"ਸੁਨੇਹਿਆਂ ਵਿੱਚ ਇੱਕ ਨਵੀਂ-ਲਾਈਨ ਜੋੜਦੀ ਹੈ, ਤਾਂ ਕਿ ਨਵੇਂ ਸੁਨੇਹੇ ਗੱਲਬਾਤ ਵਿੰਡੋ ਵਿੱਚ ਯੂਜ਼ਰ ਨਾਂ ਦੇ ਹੇਠ ਵੇਖਾਈ " "ਦੇਣ।" msgid "Offline Message Emulation" -msgstr "ਆਫ਼-ਲਾਈਨ ਸੁਨੇਹੇ ਵਾਂਗ" +msgstr "ਆਫਲਾਈਨ ਸੁਨੇਹਾ ਸਮਰੂਪ" msgid "Save messages sent to an offline user as pounce." msgstr "ਇੱਕ ਆਫਲਾਈਨ ਯੂਜ਼ਰ ਨੂੰ ਭੇਜੇ ਸੁਨੇਹੇ ਪਉਨਸ ਵਾਂਗ ਸੰਭਾਲੋ।" @@ -2782,23 +2730,19 @@ msgstr "" "ActiveTCL ਇੰਸਟਾਲੇਸ਼ਨ ਖੋਜਣ ਲਈ ਅਸਮਰੱਥ ਹੈ। ਜੇ ਤੁਸੀਂ TCL ਪਲੱਗਇਨ ਵਰਤਣੀਆਂ ਚਾਹੁੰਦੇ ਹੋ ਤਾਂ http://" "www.activestate.com ਤੋਂ ActiveTCL ਇੰਸਟਾਲ ਕਰੋ।\n" -#, fuzzy msgid "" "The Apple Bonjour For Windows toolkit wasn't found, see the FAQ at: http://d." "pidgin.im/BonjourWindows for more information." msgstr "" -"Windows ਟੂਲਕਿੱਟ ਲਈ ਐਪਸ ਬੋਨਜੋਉਰ ਨਹੀਂ ਲੱਭਿਆ ਸਵਾਲ-ਜਵਾਬ ਵੇਖੋ: ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ http://" -"developer.pidgin.im/wiki/Using%20Pidgin#CanIusePidginforBonjourLink-" -"LocalMessaging ਵੇਖੋ।" +"Windows ਟੂਲਕਿੱਟ ਲਈ ਐਪਸ ਬੋਨਜੋਉਰ ਨਹੀਂ ਲੱਭਿਆ ਸਵਾਲ-ਜਵਾਬ ਵੇਖੋ: ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ http://d." +"pidgin.im/BonjourWindows ਵੇਖੋ।" msgid "Unable to listen for incoming IM connections\n" msgstr "ਆ ਰਹੇ IM ਕੁਨੈਕਸ਼ਨ ਸੁਣਨ ਤੋਂ ਅਸਮੱਰਥ ਹੈ\n" -msgid "" -"Unable to establish connection with the local mDNS server. Is it running?" +msgid "Unable to establish connection with the local mDNS server. Is it running?" msgstr "ਇੱਕ ਲੋਕਲ mDNS ਸਰਵਰ ਨਾਲ ਕੁਨੈਕਸ਼ਨ ਬਣਾਉਣ ਲਈ ਅਸਮਰੱਥ ਹੈ। ਕੀ ਇਹ ਚੱਲਦਾ ਹੈ?" -#. Creating the options for the protocol msgid "First name" msgstr "ਪਹਿਲਾਂ ਨਾਂ" @@ -2830,6 +2774,10 @@ msgstr "ਬੋਨਜੁਉਰ ਪਰੋਟੋਕਾਲ ਪਲੱਗਇਨ" msgid "Purple Person" msgstr "ਪਰਪਲ ਵਿਅਕਤੀ" +#. Creating the options for the protocol +msgid "Local Port" +msgstr "ਲੋਕਲ ਪੋਰਟ" + msgid "Bonjour" msgstr "ਬੋਨਜੁਉਰ" @@ -2849,9 +2797,8 @@ msgstr "ਸਾਕਟ ਪੋਰਟ ਨਾਲ ਜੋੜੀ ਨਹੀਂ ਜਾ ਸ msgid "Could not listen on socket" msgstr "ਸਾਕਟ ਉੱਤੇ ਸੁਣਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ" -#, fuzzy msgid "Error communicating with local mDNSResponder." -msgstr "ਸਰਵਰ ਨਾਲ ਸੰਪਰਕ ਦੌਰਾਨ ਗਲਤੀ" +msgstr "mDNSResponder ਨਾਲ ਸੰਚਾਰ ਦੌਰਾਨ ਗਲਤੀ ਹੈ।" msgid "Invalid proxy settings" msgstr "ਗਲਤ ਪਰਾਕਸੀ ਸੈਟਿੰਗ" @@ -2876,9 +2823,9 @@ msgstr "ਤੁਹਾਡੀ ਬੱਡੀ-ਲਿਸਟ ਖਾਲੀ ਹੈ, ਫਾ msgid "Buddylist saved successfully!" msgstr "ਬੱਡੀ-ਲਿਸਟ ਠੀਕ ਤਰ੍ਹਾਂ ਸੰਭਾਲੀ ਗਈ!" -#, fuzzy, c-format +# , c-format msgid "Couldn't write buddy list for %s to %s" -msgstr "ਬੱਡੀ-ਲਿਸਟ ਲੋਡ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ" +msgstr "%s ਲਈ %s ਉੱਤੇ ਬੱਡੀ ਲਿਸਟ ਲਿਖਣ ਲਈ ਅਸਮਰੱਥ" msgid "Couldn't load buddylist" msgstr "ਬੱਡੀ-ਲਿਸਟ ਲੋਡ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ" @@ -2992,7 +2939,6 @@ msgstr "ਉਪਲੱਬਧ" #. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for #. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message #. Away stuff -#, c-format msgid "Away" msgstr "ਦੂਰ" @@ -3187,7 +3133,7 @@ msgid "Encodings" msgstr "ਇੰਕੋਡਿੰਗ" msgid "Auto-detect incoming UTF-8" -msgstr "" +msgstr "ਆ ਰਹੀ UTF-8 ਆਟੋਮੈਟਿਕ ਖੋਜ" msgid "Real name" msgstr "ਅਸਲੀ ਨਾਂ" @@ -3204,15 +3150,14 @@ msgstr "ਗਲਤ ਢੰਗ" #, c-format msgid "Ban on %s by %s, set %s ago" -msgstr "" +msgstr "%s ਉੱਤੇ %s ਵਲੋਂ ਪਾਬੰਦੀ, %s ਚਿਰ ਪਹਿਲਾਂ" -#, fuzzy, c-format +#, c-format msgid "Ban on %s" -msgstr "ਕਾਰਨ: %s" +msgstr "%s ਉੱਤੇ ਪਾਬੰਦੀ" -#, fuzzy msgid "End of ban list" -msgstr "ਲਿਸਟ ਉੱਤੇ ਨਹੀਂ" +msgstr "ਪਾਬੰਦੀ ਲਿਸਟ ਦਾ ਅੰਤ" #, c-format msgid "You are banned from %s." @@ -3372,7 +3317,7 @@ msgstr "" "away." msgid "ctcp <nick> <msg>: sends ctcp msg to nick." -msgstr "" +msgstr "ctcp <nick> <msg>: sends ctcp msg to nick." msgid "chanserv: Send a command to chanserv" msgstr "chanserv: Send a command to chanserv" @@ -3457,9 +3402,8 @@ msgstr "nick <new nickname>: Change your nickname." msgid "nickserv: Send a command to nickserv" msgstr "nickserv: Send a command to nickserv" -#, fuzzy msgid "notice <target<: Send a notice to a user or channel." -msgstr "me <action>: ਇੱਕ ਬੱਡੀ ਜਾਂ ਗੱਲਬਾਤ ਲਈ IRC ਸਟਾਈਲ ਐਕਸ਼ਨ ਭੇਜੋ" +msgstr "notice <target<: ਯੂਜ਼ਰ ਜਾਂ ਚੈਨਲ ਨੂੰ ਨੋਟਿਸ ਭੇਜੋ।" msgid "" "op <nick1> [nick2] ...: Grant channel operator status to someone. You " @@ -3569,9 +3513,8 @@ msgstr "ਚਲਾਓ" msgid "Server requires TLS/SSL for login. No TLS/SSL support found." msgstr "ਲਾਗਇਨ ਲਈ ਸਰਵਰ ਨੂੰ TLS/SSL ਲੋੜੀਦਾ ਹੈ। ਕੋਈ TLS/SSL ਸਹਿਯੋਗ ਨਹੀਂ ਹੈ।" -#, fuzzy msgid "You require encryption, but no TLS/SSL support found." -msgstr "ਲਾਗਇਨ ਲਈ ਸਰਵਰ ਨੂੰ TLS/SSL ਲੋੜੀਦਾ ਹੈ। ਕੋਈ TLS/SSL ਸਹਿਯੋਗ ਨਹੀਂ ਹੈ।" +msgstr "ਤੁਹਾਨੂੰ ਇੰਕ੍ਰਿਪਸ਼ਨ ਦੀ ਲੋੜ ਹੈ, ਪਰ ਕੋਈ TLS/SSL ਸਹਿਯੋਗ ਨਹੀਂ ਲੱਭਿਆ।" msgid "Server requires plaintext authentication over an unencrypted stream" msgstr "ਸਰਵਰ ਨੂੰ ਇੱਕ ਗ਼ੈਰ-ਇੰਕ੍ਰਿਪਟਡ ਸਟਰੀਮ ਲਈ ਪਲੇਨ-ਟੈਕਸਟ ਪਰਮਾਣਕਿਤਾ ਦੀ ਲੋੜ ਹੈ।" @@ -3868,7 +3811,6 @@ msgstr "ਚੈਟੀ" msgid "Extended Away" msgstr "ਪਹੁੰਚ ਤੋਂ ਦੂਰ" -#, c-format msgid "Do Not Disturb" msgstr "ਤੰਗ ਨਾ ਕਰੋ" @@ -3995,12 +3937,11 @@ msgstr "ਤੁਹਾਨੂੰ ਇੰਕ੍ਰਿਪਸ਼ਨ ਦੀ ਲੋੜ msgid "Write error" msgstr "ਲਿਖਣ ਵਿੱਚ ਗਲਤੀ" -#, fuzzy msgid "Ping timeout" -msgstr "ਪਲੇਨ ਟੈਕਸਟ" +msgstr "ਪਿੰਗ ਟਾਈਮ-ਆਉਟ" msgid "Read Error" -msgstr "ਪੜਨ ਗਲਤੀ" +msgstr "ਪੜ੍ਹਨ ਗਲਤੀ" #, c-format msgid "" @@ -4061,8 +4002,7 @@ msgstr "ਮਿਤੀ" msgid "Unregister" msgstr "ਅਣ-ਰਜਿਸਟਰ" -msgid "" -"Please fill out the information below to change your account registration." +msgid "Please fill out the information below to change your account registration." msgstr "ਆਪਣੀ ਅਕਾਊਂਟ ਰਜਿਸਟਰੇਸ਼ਨ ਬਦਲਣ ਵਾਸਤੇ ਹੇਠਾਂ ਜਾਣਕਾਰੀ ਭਰੋ ਜੀ।" msgid "Please fill out the information below to register your new account." @@ -4103,6 +4043,9 @@ msgstr "ਪਰਮਾਣਿਤ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ" msgid "Re-initializing Stream" msgstr "ਸਟਰੀਮ ਮੁੜ-ਸ਼ੁਰੂ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ" +msgid "Server doesn't support blocking" +msgstr "ਸਰਵਰ ਪਾਬੰਦੀ ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹੈ" + msgid "Not Authorized" msgstr "ਪਰਮਾਣਤ ਨਹੀਂ" @@ -4131,7 +4074,7 @@ msgid "Mood" msgstr "ਮੂਡ" msgid "Now Listening" -msgstr "" +msgstr "ਹੁਣ ਸੁਣ ਰਿਹਾ ਹੈ" msgid "Mood Text" msgstr "ਮੂਡ ਟੈਕਸਟ" @@ -4410,9 +4353,8 @@ msgstr "register: Register with a chat room." msgid "topic [new topic]: View or change the topic." msgstr "topic [new topic]: View or change the topic." -#, fuzzy msgid "ban <user> [reason]: Ban a user from the room." -msgstr "ban <user> [room]: Ban a user from the room." +msgstr "ban <user> [reason]: Ban a user from the room." msgid "" "affiliate <user> <owner|admin|member|outcast|none>: Set a user's " @@ -4431,18 +4373,14 @@ msgstr "" msgid "invite <user> [message]: Invite a user to the room." msgstr "invite <user> [room]: ਯੂਜ਼ਰ ਨੂੰ ਰੂਮ 'ਚ ਸੱਦੋ।" -#, fuzzy msgid "join: <room> [password]: Join a chat on this server." -msgstr "join: <room> [server]: Join a chat on this server." +msgstr "join: <room> [password]: Join a chat on this server." -#, fuzzy msgid "kick <user> [reason]: Kick a user from the room." -msgstr "kick <user> [room]: Kick a user from the room." +msgstr "kick <user> [reason]: Kick a user from the room." -msgid "" -"msg <user> <message>: Send a private message to another user." -msgstr "" -"msg <user> <message>: Send a private message to another user." +msgid "msg <user> <message>: Send a private message to another user." +msgstr "msg <user> <message>: Send a private message to another user." msgid "ping <jid>:\tPing a user/component/server." msgstr "ping <jid>:\tਇੱਕ ਯੂਜ਼ਰ/ਭਾਗ/ਸਰਵਰ ਪਿੰਗ ਕਰੋ।" @@ -4485,13 +4423,11 @@ msgstr "ਕੁਨੈਕਟ ਪੋਰਟ" msgid "Connect server" msgstr "ਸਰਵਰ ਨਾਲ ਜੋੜੋ" -#, fuzzy msgid "File transfer proxies" -msgstr "ਫਾਇਲ ਟਰਾਂਸਫਰ ਪੋਰਟ" +msgstr "ਫਾਇਲ ਟਰਾਂਸਫਰ ਪਰਾਕਸੀ" #. this should probably be part of global smiley theme settings later on, #. shared with MSN -#, fuzzy msgid "Show Custom Smileys" msgstr "ਕਸਟਮ ਸਮਾਇਲੀ ਵੇਖੋ" @@ -4518,9 +4454,9 @@ msgstr "%s ਨੂੰ ਸੁਨੇਹਾ ਡਿਲਵਰੀ ਲਈ ਫੇਲ੍ msgid "XMPP Message Error" msgstr "XMPP ਗਲਤੀ ਸੁਨੇਹਾ" -#, fuzzy, c-format +#, c-format msgid "(Code %s)" -msgstr " (ਕੋਡ %s)" +msgstr "(ਕੋਡ %s)" msgid "XML Parse error" msgstr "XML ਪਾਰਸ ਗਲਤੀ" @@ -4571,7 +4507,7 @@ msgstr "%s ਨੂੰ ਫਾਇਲ ਭੇਜਣ ਲਈ ਅਸਮਰੱਥ, ਯੂ msgid "Unable to send file to %s, not subscribed to user presence" msgstr "%s ਨੂੰ ਫਾਇਲ ਭੇਜਣ ਲਈ ਅਸਮਰੱਥ ਹੈ, ਯੂਜ਼ਰ ਮੌਜੂਦਗੀ ਲਈ ਮੈਂਬਰ ਨਹੀਂ" -#, fuzzy, c-format +# , c-format msgid "Please select the resource of %s to which you would like to send a file" msgstr "ਚੁਣੋ ਕਿ ਕਿਹੜੇ %s ਦੇ ਸਰੋਤ ਤੁਸੀਂ ਇੱਕ ਫਾਇਲ ਤੋਂ ਤੁਸੀਂ ਭੇਜਣੇ ਚਾਹੁੰਦੇ ਹੋ" @@ -4612,8 +4548,18 @@ msgstr "ਐਕਸ਼ਨ" msgid "Select an action" msgstr "ਇੱਕ ਐਕਸ਼ਨ ਚੁਣੋ" -msgid "Unable to retrieve MSN Address Book" -msgstr "MSN ਐਡਰੈੱਸ ਬੁੱਕ ਲੈਣ ਲਈ ਅਸਮਰੱਥ" +#. 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 +#, c-format +msgid "Unable to add \"%s\"." +msgstr "\"%s\" ਜੋੜਨ ਲਈ ਅਸਫ਼ਲ ਹੈ।" + +msgid "Buddy Add error" +msgstr "ਬੱਡੀ ਸ਼ਾਮਲ ਗਲਤੀ" + +msgid "The username specified does not exist." +msgstr "ਦਿੱਤਾ ਯੂਜ਼ਰ ਨਾਂ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।" #, c-format msgid "Buddy list synchronization issue in %s (%s)" @@ -4631,222 +4577,167 @@ msgstr "" msgid "" "%s is on the local list but not on the server list. Do you want this buddy " "to be added?" -msgstr "" -"%s ਲੋਕਲ ਲਿਸਟ ਉੱਤੇ ਹੈ, ਪਰ ਸਰਵਰ ਲਿਸਟ ਉੱਤੇ ਨਹੀਂ। ਕੀ ਤੁਸੀਂ ਇਹ ਬੱਡੀ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?" +msgstr "%s ਲੋਕਲ ਲਿਸਟ ਉੱਤੇ ਹੈ, ਪਰ ਸਰਵਰ ਲਿਸਟ ਉੱਤੇ ਨਹੀਂ। ਕੀ ਤੁਸੀਂ ਇਹ ਬੱਡੀ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?" -#, c-format msgid "Unable to parse message" msgstr "ਸੁਨੇਹਾ ਪਾਰਸ ਕਰਨ ਲਈ ਅਸਫ਼ਲ" -#, c-format msgid "Syntax Error (probably a client bug)" msgstr "ਸੰਟੈਕਸ ਗਤੀ (ਇੱਕ ਕਲਾਇਟ ਬੱਗ ਹੈ)" -#, c-format msgid "Invalid email address" msgstr "ਗਲਤ ਈਮੇਲ ਐਡਰੈੱਸ" -#, c-format msgid "User does not exist" msgstr "ਯੂਜ਼ਰ ਮੌਜੂਦ ਨਹੀਂ ਹੈ" -#, c-format msgid "Fully qualified domain name missing" msgstr "ਫੂਲ ਕੁਆਲੀਫਾਇਡ ਡੋਮੇਨ ਨਾਂ (FQDN) ਗੁੰਮ ਹੈ" -#, c-format msgid "Already logged in" msgstr "ਪਹਿਲਾਂ ਹੀ ਲਾਗਇਨ ਹੈ" -#, fuzzy, c-format msgid "Invalid username" -msgstr "ਗਲਤ ਨਾਂ" +msgstr "ਗਲਤ ਯੂਜ਼ਰ ਨਾਂ" -#, c-format msgid "Invalid friendly name" msgstr "ਗਲਤ ਦੋਸਤਾਨਾ ਨਾਂ" -#, c-format msgid "List full" msgstr "ਲਿਸਟ ਭਰ ਗਈ" -#, c-format msgid "Already there" msgstr "ਪਹਿਲਾਂ ਹੀ ਉਥੇ ਹੈ" -#, c-format msgid "Not on list" msgstr "ਲਿਸਟ ਉੱਤੇ ਨਹੀਂ" -#, c-format msgid "User is offline" msgstr "ਯੂਜ਼ਰ ਆਫਲਾਇਨ ਹੈ" -#, c-format msgid "Already in the mode" msgstr "ਪਹਿਲਾਂ ਹੀ ਮੋਡ 'ਚ ਹੈ" -#, c-format msgid "Already in opposite list" msgstr "ਪਹਿਲਾਂ ਹੀ ਉਲਟ ਲਿਸਟ ਵਿੱਚ ਹੈ" -#, c-format msgid "Too many groups" msgstr "ਕਈ ਗਰੁੱਪ ਹਨ" -#, c-format msgid "Invalid group" msgstr "ਗਲਤ ਗਰੁੱਪ" -#, c-format msgid "User not in group" msgstr "ਯੂਜ਼ਰ ਗਰੁੱਪ 'ਚ ਨਹੀਂ ਹੈ" -#, c-format msgid "Group name too long" msgstr "ਗਰੁੱਪ ਨਾਂ ਬਹੁਤ ਵੱਡਾ ਹੈ" -#, c-format msgid "Cannot remove group zero" msgstr "ਗਰੁੱਪ ਜ਼ੀਰੋ ਹਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ ਹੈ" -#, c-format msgid "Tried to add a user to a group that doesn't exist" msgstr "ਇੱਕ ਯੂਜ਼ਰ ਨੂੰ ਇੱਕ ਗਰੁੱਪ ਵਿੱਚ ਜੋੜਨ ਦੀ ਕੋਸ਼ਿਸ਼, ਜੋ ਕਿ ਮੌਜੂਦ ਹੀ ਨਹੀ ਹੈ।" -#, c-format msgid "Switchboard failed" msgstr "ਸਵਿੱਚਬੋਰਡ ਫੇਲ੍ਹ ਹੋਇਆ" -#, c-format msgid "Notify transfer failed" msgstr "ਨੋਟੀਫਾਈ ਟਰਾਂਸਫਰ ਫੇਲ੍ਹ" -#, c-format msgid "Required fields missing" msgstr "ਲੋੜੀਦੇ ਖੇਤਰ ਗੁੰਮ ਹਨ" -#, c-format msgid "Too many hits to a FND" msgstr "ਇੱਕ FND ਲਈ ਬਹੁਤੀਆਂ ਹਿੱਟਾਂ" -#, c-format msgid "Not logged in" msgstr "ਲਾਗਇਨ ਨਹੀਂ ਹੈ" -#, c-format msgid "Service temporarily unavailable" msgstr "ਸਰਵਿਸ ਆਰਜ਼ੀ ਰੂਪ 'ਚ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ" -#, c-format msgid "Database server error" msgstr "ਡਾਟਾਬੇਸ ਸਰਵਰ ਗਲਤੀ" -#, c-format msgid "Command disabled" msgstr "ਕਮਾਂਡ ਆਯੋਗ" -#, c-format msgid "File operation error" msgstr "ਫਾਇਲ ਕਾਰਵਾਈ ਗਲਤੀ" -#, c-format msgid "Memory allocation error" msgstr "ਮੈਮੋਰੀ ਜਾਰੀ ਗਲਤੀ" -#, c-format msgid "Wrong CHL value sent to server" msgstr "ਗਲਤ CHL ਮੁੱਲ ਸਰਵਰ ਨੂੰ ਭੇਜਿਆ" -#, c-format msgid "Server busy" msgstr "ਸਰਵਰ ਰੁੱਝਿਆ ਹੈ" -#, c-format msgid "Server unavailable" msgstr "ਸਰਵਰ ਉਪਲੱਬਧ ਨਹੀਂ" -#, c-format msgid "Peer notification server down" msgstr "ਪੀਰੀਅਰ ਨੋਟੀਫਿਕੇਸ਼ਨ ਸਰਵਰ ਬੰਦ ਹੈ" -#, c-format msgid "Database connect error" msgstr "ਡਾਟਾਬੇਸ ਕੁਨੈਕਸ਼ਨ ਗਲਤੀ" -#, c-format msgid "Server is going down (abandon ship)" msgstr "ਸਰਵਰ ਬੰਦ ਹੋ ਰਿਹਾ ਹੈ (ਡੁੱਬਦਾ ਜਹਾਜ਼)" -#, c-format msgid "Error creating connection" msgstr "ਕੁਨੈਕਸ਼ਨ ਬਣਾਉਣ ਦੌਰਾਨ ਗਲਤੀ" -#, c-format msgid "CVR parameters are either unknown or not allowed" msgstr "CVR ਪੈਰਾਮੀਟਰ ਜਾਂ ਤਾਂ ਅਣਜਾਣ ਹੈ ਜਾਂ ਮਨਜ਼ੂਰ ਨਹੀਂ ਹੈ।" -#, c-format msgid "Unable to write" msgstr "ਲਿਖਣ ਲਈ ਅਸਫਲ" -#, c-format msgid "Session overload" msgstr "ਸ਼ੈਸ਼ਨ ਓਵਰ-ਲੋਡ ਹੋ ਗਿਆ" -#, c-format msgid "User is too active" msgstr "ਯੂਜ਼ਰ ਬਹੁਤ ਛੋਟਾ ਹੈ" -#, c-format msgid "Too many sessions" msgstr "ਕਈ ਸ਼ੈਸ਼ਨ ਹਨ" -#, c-format msgid "Passport not verified" msgstr "ਪਾਸਪੋਰਟ ਜਾਂਚਿਆ ਨਹੀਂ ਹੈ" -#, c-format msgid "Bad friend file" msgstr "ਗਲਤ ਮਿੱਤਰ ਫਾਇਲ" -#, c-format msgid "Not expected" msgstr "ਲੋੜ ਨਹੀਂ ਸੀ" -#, c-format msgid "Friendly name changes too rapidly" msgstr "ਦੋਸਤਾਨਾ ਨਾਂ ਬਹੁਤ ਤੇਜ਼ੀ ਨਾਲ ਬਦਲਿਆ" -#, c-format msgid "Server too busy" msgstr "ਸਰਵਰ ਰੁਝਿਆ" -#, c-format msgid "Authentication failed" msgstr "ਪ੍ਰਮਾਣਿਕਤਾ ਅਸਫਲ" -#, c-format msgid "Not allowed when offline" msgstr "ਜਦੋਂ ਆਫਲਾਇਨ ਹੋਵੇ ਤਾਂ ਮਨਜ਼ੂਰ ਨਹੀਂ" -#, c-format msgid "Not accepting new users" msgstr "ਨਵੇਂ ਯੂਜ਼ਰ ਮਨਜ਼ੂਰ ਨਹੀਂ ਹਨ" -#, c-format msgid "Kids Passport without parental consent" msgstr "ਬੱਚਾ ਪਾਸਪੋਰਟ ਬਿਨਾਂ ਮਾਪਿਆਂ ਦੀ ਸਹਿਮਤੀ ਦੇ" -#, c-format msgid "Passport account not yet verified" msgstr "ਪਾਸਪੋਰਟ ਅਕਾਊਂਟ ਹਾਲੇ ਜਾਂਚਿਆ ਨਹੀਂ ਗਿਆ" -#, fuzzy, c-format msgid "Passport account suspended" -msgstr "ਪਾਸਪੋਰਟ ਅਕਾਊਂਟ ਹਾਲੇ ਜਾਂਚਿਆ ਨਹੀਂ ਗਿਆ" +msgstr "ਪਾਸਪੋਰਟ ਅਕਾਊਂਟ ਸਸਪੈਂਡ ਕੀਤਾ" -#, c-format msgid "Bad ticket" msgstr "ਗਲਤ ਟਿਕਟ" @@ -4858,16 +4749,14 @@ msgstr "ਅਣਜਾਣ ਗਲਤੀ ਕੋਡ %d" msgid "MSN Error: %s\n" msgstr "MSN ਗਲਤੀ: %s\n" -#, fuzzy msgid "Other Contacts" -msgstr "ਪਸੰਦੀਦਾ ਸੰਪਰਕ" +msgstr "ਹੋਰ ਸੰਪਰਕ" -#, fuzzy msgid "Non-IM Contacts" -msgstr "ਸੰਪਰਕ ਹਟਾਓ" +msgstr "ਗ਼ੈਰ-IM ਸੰਪਰਕ" msgid "Nudge" -msgstr "ਸੈਨਤ (ਨੱਜ)" +msgstr "ਸੈਨਤ" #, c-format msgid "%s has nudged you!" @@ -4875,11 +4764,10 @@ msgstr "%s ਨੇ ਤੁਹਾਨੂੰ ਸੈਨਤ ਮਾਰੀ ਹੈ!" #, c-format msgid "Nudging %s..." -msgstr "%s ਨੂੰ ਸੈਨਤ ਮਾਰੋ..." +msgstr "%s ਨੂੰ ਸੈਨਤ ਮਾਰੀ ਜਾ ਰਹੀ ਹੈ..." -#, fuzzy msgid "Email Address..." -msgstr "ਈਮੇਲ ਐਡਰੈੱਸ" +msgstr "ਈਮੇਲ ਐਡਰੈੱਸ..." msgid "Your new MSN friendly name is too long." msgstr "ਤੁਹਾਡਾ ਨਵਾਂ MSN ਦੋਸਤਾਨਾ ਨਾਂ ਬਹੁਤ ਲੰਮਾ ਹੈ।" @@ -4915,22 +4803,19 @@ msgstr "ਸਵੀਕਾਰ" msgid "Disallow" msgstr "ਪਾਬੰਦੀ" -#, fuzzy, c-format +#, c-format msgid "Blocked Text for %s" -msgstr "%s ਲਈ ਬੱਡੀ ਟਿੱਪਣੀ" +msgstr "%s ਲਈ ਬੱਡੀ ਟੈਕਸਟ" -#, fuzzy msgid "No text is blocked for this account." -msgstr "ਇਹ ਅਕਾਊਂਟ ਲਈ ਇਹ ਬੱਡੀ ਆਈਕਾਨ ਵਰਤੋਂ(_i):" +msgstr "ਇਸ ਅਕਾਊਂਟ ਲਈ ਕੋਈ ਟੈਕਸਟ ਬਲਾਕ ਨਹੀਂ ਹੈ।" #, c-format -msgid "" -"MSN servers are currently blocking the following regular expressions:<br/>%s" -msgstr "" +msgid "MSN servers are currently blocking the following regular expressions:<br/>%s" +msgstr "MSN ਸਰਵਰਾਂ ਉੱਤੇ ਹੇਠ ਦਿੱਤੇ ਨਿਯਮਤ ਸਮੀਕਰਨ ਪਾਬੰਦੀ ਲਗਾਏ ਗਏ ਹਨ: <br/>%s" -#, fuzzy msgid "This account does not have email enabled." -msgstr "ਇਹ ਹਾਟਮੇਲ ਅਕਾਊਂਟ ਹਾਲੇ ਸਰਗਰਮ ਨਹੀਂ ਹੈ।" +msgstr "ਇਹ ਅਕਾਊਂਟ ਲਈ ਈਮੇਲ ਚਾਲੂ ਨਹੀਂ ਹੈ।" msgid "Send a mobile message." msgstr "ਮੋਬਾਇਲ ਸੁਨੇਹਾ ਭੇਜੋ।" @@ -4938,20 +4823,23 @@ msgstr "ਮੋਬਾਇਲ ਸੁਨੇਹਾ ਭੇਜੋ।" msgid "Page" msgstr "ਸਫ਼ਾ" +msgid "Playing a game" +msgstr "ਇੱਕ ਖੇਡ ਖੇਡੀ ਜਾ ਰਹੀ ਹੈ" + +msgid "Working" +msgstr "ਕੰਮ ਕਰ ਰਿਹਾ/ਰਹੀ ਹਾਂ" + msgid "Has you" -msgstr "" +msgstr "ਤੁਸੀਂ ਹੋ" -#, fuzzy msgid "Home Phone Number" -msgstr "ਘਰ ਫੋਨ ਨੰਬਰ ਦਿਓ..." +msgstr "ਘਰ ਫੋਨ ਨੰਬਰ" -#, fuzzy msgid "Work Phone Number" -msgstr "ਕੰਮ ਫੋਨ ਨੰਬਰ ਦਿਓ..." +msgstr "ਕੰਮ ਫੋਨ ਨੰਬਰ" -#, fuzzy msgid "Mobile Phone Number" -msgstr "ਮੋਬਾਇਲ ਨੰਬਰ ਦਿਓ..." +msgstr "ਮੋਬਾਇਲ ਫੋਨ ਨੰਬਰ" msgid "Be Right Back" msgstr "ਆਉਨਾਂ" @@ -4971,13 +4859,17 @@ msgstr "ਦੁਪੈਹਰ ਦੇ ਖਾਣੇ ਲਈ ਬਾਹਰ" #. saveable #. should be user_settable some day #. independent -#, fuzzy msgid "Artist" msgstr "ਕਲਾਕਾਰ" -#, fuzzy msgid "Album" -msgstr "ਟਿਊਨ ਐਲਬਮ" +msgstr "ਐਲਬਮ" + +msgid "Game Title" +msgstr "ਖੇਡ ਟਾਈਟਲ" + +msgid "Office Title" +msgstr "ਆਫਿਸ ਟਾਈਟਲ" msgid "Set Friendly Name..." msgstr "ਦੋਸਤਾਨਾ ਨਾਂ ਦਿਓ..." @@ -4998,7 +4890,7 @@ msgid "Allow/Disallow Mobile Pages..." msgstr "ਮੋਬਾਇਲ ਸਫ਼ੇ ਮੰਨਜ਼ੂਰ/ਨਾ-ਮਨਜ਼ੂਰ..." msgid "View Blocked Text..." -msgstr "" +msgstr "ਪਾਬੰਦੀਸ਼ੁਦਾ ਟੈਕਸਟ ਵੇਖੋ..." msgid "Open Hotmail Inbox" msgstr "ਹਾਟਮੇਲ ਇਨ-ਬਾਕਸ ਖੋਲ੍ਹੋ" @@ -5167,8 +5059,8 @@ msgid "" "does not exist." msgstr "ਯੂਜ਼ਰ ਪ੍ਰੋਫਾਇਲ ਵਿੱਚ ਕੋਈ ਜਾਣਕਾਰੀ ਨਹੀਂ ਮਿਲੀ ਹੈ। ਯੂਜ਼ਰ ਮੌਜੂਦ ਨਹੀਂ ਜਾਪਦਾ ਹੈ।" -msgid "Profile URL" -msgstr "ਪ੍ਰੋਫਾਇਲ URL" +msgid "View web profile" +msgstr "ਵੈੱਬ ਪਰੋਫਾਇਲ ਵੇਖੋ" #. *< type #. *< ui_requirement @@ -5197,9 +5089,8 @@ msgstr "nudge: ਯੂਜ਼ਰ ਦਾ ਧਿਆਨ ਖਿੱਚਣ ਵਾਸਤ msgid "Windows Live ID authentication:Unable to connect" msgstr "ਵਿੰਡੋ ਲਾਇਵ ID ਪਰਮਾਣਕਿਤਾ: ਕੁਨੈਕਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ" -#, fuzzy msgid "Windows Live ID authentication:Invalid response" -msgstr "ਵਿੰਡੋ ਲਾਇਵ ID ਪਰਮਾਣਕਿਤਾ: ਕੁਨੈਕਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ" +msgstr "ਵਿੰਡੋ ਲਾਇਵ ID ਪਰਮਾਣਕਿਤਾ: ਗਲਤ ਜਵਾਬ" #, c-format msgid "%s is not a valid group." @@ -5224,9 +5115,8 @@ msgstr "ਅਣਜਾਣੀ ਗਲਤੀ (%d)" msgid "Unable to add user" msgstr "ਯੂਜ਼ਰ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ" -#, fuzzy msgid "The following users are missing from your addressbook" -msgstr "ਤੁਹਾਡੀ ਖੋਜ ਦੇ ਹੇਠ ਦਿੱਤੇ ਨਤੀਜੇ ਹਨ" +msgstr "ਤੁਹਾਡੀ ਐਡਰੈੱਸਬੁੱਕ ਵਿੱਚੋਂ ਹੇਠ ਦਿੱਤੇ ਯੂਜ਼ਰ ਗੁੰਮ ਹਨ" #, c-format msgid "Unable to add user on %s (%s)" @@ -5251,9 +5141,8 @@ msgstr "%s ਲਈ ਗਲਤ ਪਾਸਪੋਰਟ ਅਕਾਊਂਟ ਹੈ" msgid "Service Temporarily Unavailable." msgstr "ਸਰਵਿਸ ਆਰਜ਼ੀ ਰੂਪ 'ਚ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ।" -#, fuzzy msgid "Mobile message was not sent because it was too long." -msgstr "ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ ਗਿਆ, ਕਿਉਂਕਿ ਤੁਸੀਂ ਸਾਇਨ-ਆਨ ਨਹੀਂ ਹੋ।" +msgstr "ਮੋਬਾਇਲ ਸੁਨੇਹਾ ਭੇਜਿਆ ਨਹੀਂ ਗਿਆ, ਕਿਉਂਕਿ ਇਹ ਬਹੁਤ ਲੰਮਾ ਸੀ।" msgid "Unable to rename group" msgstr "ਗਰੁੱਪ ਨਾਂ-ਤਬਦੀਲੀ ਲਈ ਅਸਫਲ" @@ -5261,7 +5150,7 @@ msgstr "ਗਰੁੱਪ ਨਾਂ-ਤਬਦੀਲੀ ਲਈ ਅਸਫਲ" msgid "Unable to delete group" msgstr "ਗਰੁੱਪ ਹਟਾਉਣ ਲਈ ਅਸਫਲ" -#, fuzzy, c-format +#, c-format msgid "" "The MSN server will shut down for maintenance in %d minute. You will " "automatically be signed out at that time. Please finish any conversations " @@ -5277,38 +5166,31 @@ msgid_plural "" "After the maintenance has been completed, you will be able to successfully " "sign in." msgstr[0] "" -"MSN ਸਰਵਰ ਦੇਖਭਾਲਈ ਲਈ %d ਮਿੰਟ ਵਿੱਚ ਬੰਦ ਕੀਤਾ ਜਾਵੇਗਾ। ਤੁਸੀਂ ਉਸ ਸਮੇਂ ਆਟੋਮੈਟਿਕ ਹੀ ਸਾਇਨ-ਆਉਟ ਹੋ " +"MSN ਸਰਵਰ ਦੇਖਭਾਲ ਲਈ %d ਮਿੰਟ ਵਿੱਚ ਬੰਦ ਕੀਤਾ ਜਾਵੇਗਾ। ਤੁਸੀਂ ਉਸ ਸਮੇਂ ਆਟੋਮੈਟਿਕ ਹੀ ਸਾਇਨ-ਆਉਟ ਹੋ " "ਜਾਉਗੇ। ਜਾਰੀ ਗੱਲਾਬਾਤਾਂ ਛੇਤੀ ਖਤਮ ਕਰੋ ਜੀ!\n" "\n" -"ਦੇਖਭਾਲ ਖਤਮ ਹੋਣ ਬਾਅਦ, ਤੁਸੀਂ ਫੇਰ ਲਾਗਇਨ ਕਰ ਸਕਦੇ ਹੋ। MSN ਸਰਵਰ ਲਈ %d ਮਿੰਟਾਂ ਵਿੱਚ ਬੰਦ ਕੀਤਾ " -"ਜਾਵੇਗਾ। ਤੁਸੀਂ ਉਸ ਸਮੇਂ ਆਟੋਮੈਟਿਕ ਹੀ ਸਾਇਨ-ਆਉਟ ਹੋ ਜਾਉਗੇ। ਜਾਰੀ ਗੱਲਾਬਾਤਾਂ ਛੇਤੀ ਖਤਮ ਕਰੋ ਜੀ!\n" -"\n" "ਦੇਖਭਾਲ ਖਤਮ ਹੋਣ ਬਾਅਦ, ਤੁਸੀਂ ਫੇਰ ਲਾਗਇਨ ਕਰ ਸਕਦੇ ਹੋ।" msgstr[1] "" -"MSN ਸਰਵਰ ਦੇਖਭਾਲਈ ਲਈ %d ਮਿੰਟ ਵਿੱਚ ਬੰਦ ਕੀਤਾ ਜਾਵੇਗਾ। ਤੁਸੀਂ ਉਸ ਸਮੇਂ ਆਟੋਮੈਟਿਕ ਹੀ ਸਾਇਨ-ਆਉਟ ਹੋ " +"MSN ਸਰਵਰ ਦੇਖਭਾਲਈ ਲਈ %d ਮਿੰਟਾਂ ਵਿੱਚ ਬੰਦ ਕੀਤਾ ਜਾਵੇਗਾ। ਤੁਸੀਂ ਉਸ ਸਮੇਂ ਆਟੋਮੈਟਿਕ ਹੀ ਸਾਇਨ-ਆਉਟ ਹੋ " "ਜਾਉਗੇ। ਜਾਰੀ ਗੱਲਾਬਾਤਾਂ ਛੇਤੀ ਖਤਮ ਕਰੋ ਜੀ!\n" "\n" -"ਦੇਖਭਾਲ ਖਤਮ ਹੋਣ ਬਾਅਦ, ਤੁਸੀਂ ਫੇਰ ਲਾਗਇਨ ਕਰ ਸਕਦੇ ਹੋ। MSN ਸਰਵਰ ਲਈ %d ਮਿੰਟਾਂ ਵਿੱਚ ਬੰਦ ਕੀਤਾ " -"ਜਾਵੇਗਾ। ਤੁਸੀਂ ਉਸ ਸਮੇਂ ਆਟੋਮੈਟਿਕ ਹੀ ਸਾਇਨ-ਆਉਟ ਹੋ ਜਾਉਗੇ। ਜਾਰੀ ਗੱਲਾਬਾਤਾਂ ਛੇਤੀ ਖਤਮ ਕਰੋ ਜੀ!\n" -"\n" "ਦੇਖਭਾਲ ਖਤਮ ਹੋਣ ਬਾਅਦ, ਤੁਸੀਂ ਫੇਰ ਲਾਗਇਨ ਕਰ ਸਕਦੇ ਹੋ।" msgid "" "Message was not sent because the system is unavailable. This normally " "happens when the user is blocked or does not exist." msgstr "" +"ਸੁਨੇਹਾ ਭੇਜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ, ਕਿਉਂਕਿ ਸਿਸਟਮ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ। ਇਹ ਅਕਸਰ ਤਾਂ ਹੁੰਦਾ ਹੈ, ਜਦੋਂ " +"ਯੂਜ਼ਰ ਉੱਤੇ ਪਾਬੰਦੀ ਹੋਵੇ ਜਾਂ ਮੌਜੂਦ ਨਾ ਹੋਵੇ।" -#, fuzzy msgid "Message was not sent because messages are being sent too quickly." -msgstr "ਸੁਨੇਹਾ ਭੇਜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ, ਕਿਉਂਕਿ ਅਸੀਂ ਬਹੁਤ ਤੇਜ਼ੀ ਨਾਲ ਭੇਜ ਰਹੇ ਹਾਂ:" +msgstr "ਸੁਨੇਹਾ ਭੇਜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ, ਕਿਉਂਕਿ ਸੁਨੇਹੇ ਬਹੁਤ ਤੇਜ਼ੀ ਨਾਲ ਭੇਜੇ ਜਾ ਰਹੇ ਹਨ।" -#, fuzzy msgid "Message was not sent because an unknown encoding error occurred." -msgstr "ਇੱਕ ਅਣਜਾਣੀ ਗਲਤੀ ਆਉਣ ਕਰਕੇ ਸੁਨੇਹਾ ਭੇਜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਹੈ:" +msgstr "ਇੱਕ ਅਣਜਾਣੀ ਇੰਕੋਡਿੰਗ ਗਲਤੀ ਆਉਣ ਕਰਕੇ ਸੁਨੇਹਾ ਭੇਜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਹੈ।" -#, fuzzy msgid "Message was not sent because an unknown error occurred." -msgstr "ਇੱਕ ਅਣਜਾਣੀ ਗਲਤੀ ਆਉਣ ਕਰਕੇ ਸੁਨੇਹਾ ਭੇਜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਹੈ:" +msgstr "ਇੱਕ ਅਣਜਾਣੀ ਗਲਤੀ ਆਉਣ ਕਰਕੇ ਸੁਨੇਹਾ ਭੇਜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਹੈ।" msgid "Unable to connect" msgstr "ਕੁਨੈਕਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ" @@ -5346,8 +5228,7 @@ msgstr "MSN ਸਰਵਰ ਆਰਜ਼ੀ ਤੌਰ ਤੇ ਬੰਦ ਹੋ ਰ msgid "Unable to authenticate: %s" msgstr "ਪ੍ਰਮਾਣਿਕਤਾ ਲਈ ਅਸਫਲ: %s" -msgid "" -"Your MSN buddy list is temporarily unavailable. Please wait and try again." +msgid "Your MSN buddy list is temporarily unavailable. Please wait and try again." msgstr "ਤੁਹਾਡਾ MSN ਬੱਡੀ ਆਰਜ਼ੀ ਤੌਰ ਉੱਤੇ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ। ਉਡੀਕ ਕਰਕੇ ਮੁੜ ਕੋਸ਼ਿਸ ਕਰੋ ਜੀ।" msgid "Handshaking" @@ -5399,8 +5280,7 @@ msgstr "" "ਸੁਨੇਹਾ ਭੇਜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ, ਕਿਉਂਕਿ ਅਸੀਂ ਸਰਵਰ ਨਾਲ ਸ਼ੈਸ਼ਨ ਬਣਾਉਣ ਲਈ ਅਸਮਰੱਥ ਹਾਂ। ਇਹ ਇੱਕ ਸਮੱਸਿਆ " "ਜਾਪਦੀ ਹੈ, ਕੁਝ ਮਿੰਟ ਬਾਅਦ ਟਰਾਈ ਕਰੋ ਜੀ:" -msgid "" -"Message could not be sent because an error with the switchboard occurred:" +msgid "Message could not be sent because an error with the switchboard occurred:" msgstr "ਸਵਿੱਚਬੋਰਡ ਗਲਤੀ ਆਉਣ ਕਰਕੇ ਸੁਨੇਹਾ ਭੇਜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਹੈ:" msgid "Message may have not been sent because an unknown error occurred:" @@ -5414,28 +5294,21 @@ msgstr "%s ਨੇ ਤੁਹਾਨੂੰ ਆਪਣੀ ਬੱਡੀ ਲਿਸਟ ' msgid "%s has removed you from his or her buddy list." msgstr "%s ਨੇ ਤੁਹਾਨੂੰ ਆਪਣੀ ਬੱਡੀ ਲਿਸਟ 'ਚੋਂ ਹਟਾ ਦਿੱਤਾ ਹੈ।" -#, fuzzy msgid "Delete Buddy from Address Book?" -msgstr "ਐਡਰੈੱਸ ਕਿਤਾਬ ਵਿੱਚ ਸ਼ਾਮਿਲ" +msgstr "ਕੀ ਐਡਰੈੱਸਬੁੱਕ ਵਿੱਚੋਂ ਬੱਡੀ ਹਟਾਉਣਾ ਹੈ?" -#, fuzzy msgid "Do you want to delete this buddy from your address book as well?" -msgstr "ਕੀ ਤੁਸੀਂ ਇਸ ਬੱਡੀ ਨੂੰ ਆਪਣੇ ਬੱਡੀ ਦੀ ਲਿਸਟ ਵਿੱਚ ਸ਼ਾਮਿਲ ਕਰਨਾ ਚਾਹੋਗੇ?" - -#. only notify the user about problems adding to the friends list -#. * maybe we should do something else for other lists, but it probably -#. * won't cause too many problems if we just ignore it -#, c-format -msgid "Unable to add \"%s\"." -msgstr "\"%s\" ਜੋੜਨ ਲਈ ਅਸਫ਼ਲ ਹੈ।" +msgstr "ਕੀ ਤੁਸੀਂ ਇਸ ਬੱਡੀ ਨੂੰ ਆਪਣੀ ਐਡਰੈੱਸਬੁੱਕ ਵਿੱਚੋਂ ਵੀ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?" -#, fuzzy msgid "The username specified is invalid." -msgstr "ਦਿੱਤਾ ਸਕਰੀਨ ਨਾਂ ਗਲਤ ਹੈ।" +msgstr "ਦਿੱਤਾ ਯੂਜ਼ਰ-ਨਾਂ ਗਲਤ ਹੈ" msgid "This Hotmail account may not be active." msgstr "ਇਹ ਹਾਟਮੇਲ ਅਕਾਊਂਟ ਹਾਲੇ ਸਰਗਰਮ ਨਹੀਂ ਹੈ।" +msgid "Profile URL" +msgstr "ਪ੍ਰੋਫਾਇਲ URL" + #. *< type #. *< ui_requirement #. *< flags @@ -5446,22 +5319,15 @@ msgstr "ਇਹ ਹਾਟਮੇਲ ਅਕਾਊਂਟ ਹਾਲੇ ਸਰਗਰ #. *< version #. * summary #. * description -#, fuzzy msgid "MSN Protocol Plugin" -msgstr "AIM ਪਰੋਟੋਕਾਲ ਪਲੱਗਇਨ" +msgstr "MSN ਪਰੋਟੋਕਾਲ ਪਲੱਗਇਨ" -msgid "Missing Cipher" -msgstr "ਸੀਫ਼ਰ ਗੁੰਮ ਹੈ" - -msgid "The RC4 cipher could not be found" -msgstr "RC4 ਸੀਫ਼ਰ ਨਹੀਂ ਲੱਭਿਆ" +#, c-format +msgid "No such user: %s" +msgstr "ਕੋਈ ਯੂਜ਼ਰ ਨਹੀਂ: %s" -msgid "" -"Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will " -"not be loaded." -msgstr "" -"RC4 ਸਹਿਯੋਗ (>=2.0.1) ਨਾਲ libpurple ਲਈ ਅੱਪਗਰੇਡ ਕਰੋ। MySpaceIM ਪਲੱਗਇਨ ਲੋਡ ਨਹੀਂ ਕੀਤੀ " -"ਜਾ ਸਕੇਗੀ।" +msgid "User lookup" +msgstr "ਯੂਜਰ ਖੋਜ" msgid "Reading challenge" msgstr "ਚੈਲੰਜ਼ ਪੜ੍ਹਿਆ ਜਾ ਰਿਹਾ ਹੈ" @@ -5472,11 +5338,17 @@ msgstr "ਸਰਵਰ ਵਲੋਂ ਗਲਤ ਚੈਲੰਜ਼ ਲੰਬਾਈ" msgid "Logging in" msgstr "ਲਾਗਇਨ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" -#, fuzzy, 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] "ਸਰਵਰ ਨਾਲ ਕੁਨੈਕਸ਼ਨ ਖਤਮ ਹੋਇਆ (%d ਸਕਿੰਟਾਂ ਤੋਂ ਕੋਈ ਡਾਟਾ ਨਹੀਂ ਮਿਲਿਆ)" -msgstr[1] "ਸਰਵਰ ਨਾਲ ਕੁਨੈਕਸ਼ਨ ਖਤਮ ਹੋਇਆ (%d ਸਕਿੰਟਾਂ ਤੋਂ ਕੋਈ ਡਾਟਾ ਨਹੀਂ ਮਿਲਿਆ)" +msgid "MySpaceIM - No Username Set" +msgstr "MySpaceIM - ਕੋਈ ਯੂਜ਼ਰ ਨਾਂ ਨਹੀਂ ਦਿੱਤਾ" + +msgid "You appear to have no MySpace username." +msgstr "ਤੁਹਾਡੇ ਕੋਲ ਕੋਈ MySpace ਯੂਜ਼ਰ ਨਾਂ ਨਹੀਂ ਜਾਪਦਾ ਹੈ।" + +msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)" +msgstr "ਕੀ ਤੁਸੀਂ ਹੁਣ ਸੈੱਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ? (ਯਾਦ ਰੱਖੋ ਕਿ ਇਹ ਬਦਲਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ!)" + +msgid "Lost connection with server" +msgstr "ਸਰਵਰ ਨਾਲ ਕੁਨੈਕਸ਼ਨ ਖਤਮ" #. Can't write _()'d strings in array initializers. Workaround. msgid "New mail messages" @@ -5497,15 +5369,25 @@ msgstr "ਨਵੀਂ ਤਸਵੀਰ ਟਿੱਪਣੀ" msgid "MySpace" msgstr "MySpace" -#, fuzzy -msgid "MySpaceIM - No Username Set" -msgstr "ਕੋਈ ਯੂਜ਼ਰ-ਨਾਂ ਸੈੱਟ" +msgid "IM Friends" +msgstr "IM ਦੋਸਤ" -msgid "You appear to have no MySpace username." -msgstr "" +#, c-format +msgid "" +"%d buddy was added or updated from the server (including buddies already on " +"the server-side list)" +msgid_plural "" +"%d buddies were added or updated from the server (including buddies already " +"on the server-side list)" +msgstr[0] "" +"%d ਬੱਡੀ ਨੂੰ ਸਰਵਰ ਤੋਂ ਸ਼ਾਮਲ ਜਾਂ ਅੱਪਡੇਟ ਕੀਤੇ ਗਏ ਹਨ (ਸਰਵਰ-ਸਾਈਡ ਲਿਸਟ ਉੱਤੋਂ ਬੱਡੀ ਪਹਿਲਾਂ ਹੀ ਸ਼ਾਮਲ " +"ਕੀਤੇ)" +msgstr[1] "" +"%d ਬੱਡੀਆਂ ਨੂੰ ਸਰਵਰ ਤੋਂ ਸ਼ਾਮਲ ਜਾਂ ਅੱਪਡੇਟ ਕੀਤੇ ਗਏ ਹਨ (ਸਰਵਰ-ਸਾਈਡ ਲਿਸਟ ਉੱਤੋਂ ਬੱਡੀ ਪਹਿਲਾਂ ਹੀ ਸ਼ਾਮਲ " +"ਕੀਤੇ)" -msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)" -msgstr "" +msgid "Add contacts from server" +msgstr "ਸਰਵਰ ਤੋਂ ਸੰਪਰਕ ਸ਼ਾਮਲ ਕਰੋ" #. The session is now set up, ready to be connected. This emits the #. * signedOn signal, so clients can now do anything with msimprpl, and @@ -5524,10 +5406,25 @@ msgid "" "myspace.com/index.cfm?fuseaction=accountSettings.changePassword and try " "again." msgstr "" +"%s ਤੁਹਾਡਾ ਪਾਸਵਰਡ %d ਅੱਖਰਾਂ ਦਾ ਹੈ, ਜੋ ਕਿ MySpaceIM ਲਈ %d ਦੀ ਲੰਬਾਈ ਤੋਂ ਵੱਧ ਗਿਆ ਹੈ। ਆਪਣਾ ਪਾਸਵਰਡ http://profileedit." +"myspace.com/index.cfm?fuseaction=accountSettings.changePassword ਉੱਤੇ ਛੋਟਾ ਕਰਕੇ ਮੁੜ-ਟਰਾਈ ਕਰੋ ਜੀ।" msgid "MySpaceIM Error" msgstr "MySpaceIM ਗਲਤੀ" +msgid "Invalid input condition" +msgstr "ਗਲਤ ਇੰਪੁੱਟ ਹਾਲਤ" + +msgid "Read buffer full (2)" +msgstr "ਪੜ੍ਹਨ ਬਫ਼ਰ ਭਰਿਆ (2)" + +msgid "Unparseable message" +msgstr "ਨਾ-ਪਾਰਸਯੋਗ ਸੁਨੇਹਾ" + +#, c-format +msgid "Couldn't connect to host: %s (%d)" +msgstr "ਹੋਸਟ ਨਾਲ ਕੁਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ: %s (%d)" + msgid "Failed to add buddy" msgstr "ਬੱਡੀ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਫੇਲ੍ਹ" @@ -5537,13 +5434,6 @@ msgstr "'addbuddy' ਕਮਾਂਡ ਫੇਲ੍ਹ ਹੋਈ।" msgid "persist command failed" msgstr "persist ਕਮਾਂਡ ਫੇਲ੍ਹ ਹੋਈ।" -#, c-format -msgid "No such user: %s" -msgstr "ਕੋਈ ਯੂਜ਼ਰ ਨਹੀਂ: %s" - -msgid "User lookup" -msgstr "ਯੂਜਰ ਖੋਜ" - msgid "Failed to remove buddy" msgstr "ਬੱਡੀ ਹਟਾਉਣ ਲਈ ਫੇਲ੍ਹ" @@ -5553,39 +5443,18 @@ msgstr "'delbuddy' ਕਮਾਂਡ ਫੇਲ੍ਹ ਹੋਈ" msgid "blocklist command failed" msgstr "blocklist ਕਮਾਂਡ ਫੇਲ੍ਹ ਹੋਈ" -msgid "Invalid input condition" -msgstr "ਗਲਤ ਇੰਪੁੱਟ ਹਾਲਤ" - -#, fuzzy -msgid "Read buffer full (2)" -msgstr "ਪੜ੍ਹਨ ਬਫ਼ਰ ਭਰਿਆ" - -msgid "Unparseable message" -msgstr "ਨਾ-ਪਾਰਸਯੋਗ ਸੁਨੇਹਾ" - -#, c-format -msgid "Couldn't connect to host: %s (%d)" -msgstr "ਹੋਸਟ ਨਾਲ ਕੁਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ: %s (%d)" +msgid "Missing Cipher" +msgstr "ਸੀਫ਼ਰ ਗੁੰਮ ਹੈ" -msgid "IM Friends" -msgstr "IM ਦੋਸਤ" +msgid "The RC4 cipher could not be found" +msgstr "RC4 ਸੀਫ਼ਰ ਨਹੀਂ ਲੱਭਿਆ" -#, fuzzy, c-format msgid "" -"%d buddy was added or updated from the server (including buddies already on " -"the server-side list)" -msgid_plural "" -"%d buddies were added or updated from the server (including buddies already " -"on the server-side list)" -msgstr[0] "" -"%d ਬੱਡੀ ਨੂੰ ਸਰਵਰ ਤੋਂ ਸ਼ਾਮਲ ਜਾਂ ਅੱਪਡੇਟ ਕੀਤੇ ਗਏ ਹਨ (ਸਰਵਰ-ਸਾਈਡ ਲਿਸਟ ਉੱਤੋਂ ਬੱਡੀ ਪਹਿਲਾਂ ਹੀ ਸ਼ਾਮਲ " -"ਕੀਤੇ)" -msgstr[1] "" -"%d ਬੱਡੀ ਨੂੰ ਸਰਵਰ ਤੋਂ ਸ਼ਾਮਲ ਜਾਂ ਅੱਪਡੇਟ ਕੀਤੇ ਗਏ ਹਨ (ਸਰਵਰ-ਸਾਈਡ ਲਿਸਟ ਉੱਤੋਂ ਬੱਡੀ ਪਹਿਲਾਂ ਹੀ ਸ਼ਾਮਲ " -"ਕੀਤੇ)" - -msgid "Add contacts from server" -msgstr "ਸਰਵਰ ਤੋਂ ਸੰਪਰਕ ਸ਼ਾਮਲ ਕਰੋ" +"Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will " +"not be loaded." +msgstr "" +"RC4 ਸਹਿਯੋਗ (>=2.0.1) ਨਾਲ libpurple ਲਈ ਅੱਪਗਰੇਡ ਕਰੋ। MySpaceIM ਪਲੱਗਇਨ ਲੋਡ ਨਹੀਂ ਕੀਤੀ " +"ਜਾ ਸਕੇਗੀ।" msgid "Add friends from MySpace.com" msgstr "MySpace.com ਤੋਂ ਦੋਸਤ ਸ਼ਾਮਲ ਕਰੋ" @@ -5627,9 +5496,6 @@ msgstr "ਬੇਸ ਫੋਂਟ ਸਾਈਜ਼ (ਪੁਆਇੰਟ)" msgid "User" msgstr "ਯੂਜ਼ਰ" -msgid "Profile" -msgstr "ਪ੍ਰੋਫਾਇਲ" - msgid "Headline" msgstr "ਹੈੱਡਲਾਈਨ" @@ -5642,34 +5508,30 @@ msgstr "ਕੁੱਲ ਦੋਸਤ" msgid "Client Version" msgstr "ਕਲਾਇਟ ਵਰਜਨ" -#. Protocol won't log in now without a username set.. Disconnect -msgid "No username set" -msgstr "ਕੋਈ ਯੂਜ਼ਰ-ਨਾਂ ਸੈੱਟ" - -msgid "MySpaceIM - Please Set a Username" -msgstr "" - -msgid "Please enter a username to check its availability:" -msgstr "" - -#, fuzzy msgid "MySpaceIM - Username Available" -msgstr "ਸਰਵਿਸ ਉਪਲਬੱਧ ਨਹੀਂ" +msgstr "MySpaceIM - ਯੂਜ਼ਰ ਨਾਂ ਉਪਲੱਬਧ ਹੈ" -#, fuzzy msgid "This username is available. Would you like to set it?" -msgstr "%s ਨੇ ਵਾਇਟਬੋਰਡ ਉੱਤੇ ਸੁਨੇਹਾ ਭੇਜਿਆ। ਕੀ ਤੁਸੀਂ ਵਾਇਟਬੋਰਡ ਖੋਲ੍ਹਣਾ ਚਾਹੁੰਦੇ ਹੋ?" +msgstr "ਇਹ ਯੂਜ਼ਰ ਨਾਂ ਉਪਲੱਬਧ ਹੈ। ਕੀ ਤੁਸੀਂ ਸੈੱਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?" msgid "ONCE SET, THIS CANNOT BE CHANGED!" -msgstr "" +msgstr "ਇੱਕ ਵਾਰ ਸੈੱਟ ਕੀਤਾ ਤਾਂ ਮੁੜ-ਬਦਲਿਆ ਨਹੀਂ ਜਾ ਸਕੇਗਾ!" + +msgid "MySpaceIM - Please Set a Username" +msgstr "MySpaceIM - ਯੂਜ਼ਰ ਨਾਂ ਸੈੱਟ ਕਰੋ" -#, fuzzy msgid "This username is unavailable." -msgstr "ਇਸ ਸਰੂਪ ਵਿੱਚ ਕੋਈ ਸਮਾਈਲ ਨਹੀਂ ਹਨ।" +msgstr "ਇਹ ਯੂਜ਼ਰ ਨਾਂ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ।" -#, fuzzy msgid "Please try another username:" -msgstr "%s ਲਈ ਨਵਾਂ ਨਾਂ ਦਿਓ ਜੀ" +msgstr "ਹੋਰ ਯੂਜ਼ਰ ਨਾਂ ਨਾਲ ਟਰਾਈ ਕਰੋ ਜੀ:" + +#. Protocol won't log in now without a username set.. Disconnect +msgid "No username set" +msgstr "ਕੋਈ ਯੂਜ਼ਰ-ਨਾਂ ਸੈੱਟ" + +msgid "Please enter a username to check its availability:" +msgstr "ਕਿਸੇ ਦੀ ਉਪਲੱਬਧਤਾ ਵੇਖਣ ਲਈ ਯੂਜ਼ਰ ਨਾਂ ਦਿਓ ਜੀ:" #. TODO: icons for each zap #. Lots of comments for translators: @@ -5862,13 +5724,11 @@ msgstr "ਆਪਣੇ ਆਪ ਨੂੰ ਸ਼ਾਮਿਲ ਨਹੀਂ ਕਰ ਸ msgid "Master archive is misconfigured" msgstr "ਮਾਸਟਰ ਭੰਡਾਰ ਗਲਤ ਸੰਰਚਿਤ ਹੈ" -#, fuzzy msgid "Incorrect username or password" -msgstr "ਗਲਤ ਸਕਰੀਨ ਨਾਂ ਜਾਂ ਪਾਸਵਰਡ" +msgstr "ਗਲਤ ਯੂਜ਼ਰ ਨਾਂ ਜਾਂ ਪਾਸਵਰਡ" -#, fuzzy msgid "Could not recognize the host of the username you entered" -msgstr "ਤੁਹਾਡੇ ਰਾਹੀਂ ਦਿੱਤੇ ਸਕਰੀਨ ਨਾਂ ਲਈ ਹੋਸਟ ਖੋਜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਹੈ" +msgstr "ਤੁਹਾਡੇ ਰਾਹੀਂ ਦਿੱਤੇ ਯੂਜ਼ਰ ਨਾਂ ਲਈ ਹੋਸਟ ਖੋਜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਹੈ" msgid "" "Your account has been disabled because too many incorrect passwords were " @@ -5881,9 +5741,8 @@ msgstr "ਤੁਸੀਂ ਗੱਲਬਾਤ ਲਈ ਇੱਕ ਹੀ ਵਿਅਕ msgid "You have reached your limit for the number of contacts allowed" msgstr "ਤੁਸੀਂ ਵੱਧ ਤੋਂ ਵੱਧ ਸਵੀਕਾਰ ਸੰਪਰਕਾਂ ਦੀ ਸੀਮਾ ਤੱਕ ਅੱਪੜ ਗਏ ਹੋ" -#, fuzzy msgid "You have entered an incorrect username" -msgstr "ਤੁਸੀਂ ਇੱਕ ਗਲਤ ਸਕਰੀਨ ਨਾਂ ਦਿੱਤਾ ਹੈ" +msgstr "ਤੁਸੀਂ ਇੱਕ ਗਲਤ ਯੂਜ਼ਰ ਨਾਂ ਦਿੱਤਾ ਹੈ" msgid "An error occurred while updating the directory" msgstr "ਡਾਇਰੈਕਟਰੀ ਦੇ ਨਵੀਨੀਕਰਨ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ" @@ -6040,8 +5899,7 @@ msgid "You have been logged out because you logged in at another workstation." msgstr "ਤੁਸੀਂ ਲਾਗ ਆਉਟ ਹੋ ਗਏ ਹੋ, ਕਿਉਕਿ ਤੁਸੀਂ ਕਿਸੇ ਹੋਰ ਵਰਕਸਟੇਸ਼ਨ ਉੱਤੇ ਲਾਗਇਨ ਹੋ ਗਏ ਹੋ।" #, c-format -msgid "" -"%s appears to be offline and did not receive the message that you just sent." +msgid "%s appears to be offline and did not receive the message that you just sent." msgstr "%s ਮੌਜੂਦ ਨਹੀਂ (ਆਫਲਾਇਨ) ਹੈ ਅਤੇ ਤੁਹਾਡੇ ਰਾਹੀਂ ਭੇਜੇ ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕਰ ਸਕੇਗਾ।" msgid "" @@ -6052,7 +5910,6 @@ msgstr "ਸਰਵਰ ਨਾਲ ਜੁੜਨ ਲਈ ਅਸਫਲ ਹੈ। ਜੁ msgid "Error. SSL support is not installed." msgstr "ਗਲਤੀ ਹੈ। SSL ਸਹਿਯੋਗ ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ।" -#, c-format msgid "This conference has been closed. No more messages can be sent." msgstr "ਇਹ ਕਾਨਫਰੰਸ ਬੰਦ ਕਰ ਦਿੱਤੀ ਗਈ ਹੈ। ਕੋਈ ਹੋਰ ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ ਜਾ ਸਕਦਾ ਹੈ।" @@ -6075,13 +5932,11 @@ msgstr "ਸਰਵਰ ਐਡਰੈੱਸ" msgid "Server port" msgstr "ਸਰਵਰ ਪੋਰਟ" -#, fuzzy msgid "Could not join chat room" -msgstr "ਜੁੜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ" +msgstr "ਚੈਟ ਰੂਮ ਵਿੱਚ ਦਾਖਲ ਨਹੀਂ ਹੋਇਆ ਜਾ ਸਕਿਆ" -#, fuzzy msgid "Invalid chat room name" -msgstr "ਗਲਤ ਰੂਮ ਨਾਂ" +msgstr "ਗਲਤ ਚੈਟ ਰੂਮ ਨਾਂ" msgid "Server closed the connection." msgstr "ਸਰਵਰ ਕੁਨੈਕਸ਼ਨ ਬੰਦ ਕੀਤਾ ਗਿਆ ਹੈ।" @@ -6111,7 +5966,7 @@ msgid "AIM Protocol Plugin" msgstr "AIM ਪਰੋਟੋਕਾਲ ਪਲੱਗਇਨ" msgid "ICQ UIN..." -msgstr "" +msgstr "ICQ UIN..." #. *< type #. *< ui_requirement @@ -6209,10 +6064,10 @@ msgid "In local permit/deny" msgstr "ਲੋਕਲ ਇਜ਼ਾਜਤ/ਪਾਬੰਦੀ" msgid "Warning level too high (sender)" -msgstr "" +msgstr "ਚੇਤਾਵਨੀ ਲੈਵਲ ਬਹੁਤ ਵੱਧ ਹੈ (ਭੇਜਣ ਵਾਲਾ)" msgid "Warning level too high (receiver)" -msgstr "" +msgstr "ਚੇਤਾਵਨੀ ਲੈਵਲ ਬਹੁਤ ਵੱਧ ਹੈ (ਲੈਣ ਵਾਲਾ)" msgid "User temporarily unavailable" msgstr "ਯੂਜ਼ਰ ਆਰਜ਼ੀ ਤੌਰ ਤੇ ਉਪਲੱਬਧ ਨਹੀਂ" @@ -6314,27 +6169,21 @@ msgstr "ਸਿੱਧੀ ਵੀਡਿਓ" msgid "Camera" msgstr "ਕੈਮਰਾ" -#, fuzzy msgid "Screen Sharing" -msgstr "ਸਕਰੀਨ ਨਾਂ" +msgstr "ਸਕਰੀਨ ਸਾਂਝੀ" -#, c-format msgid "Free For Chat" msgstr "ਗੱਲਬਾਤ ਕਰਨ ਲਈ ਵੇਹਲਾ" -#, c-format msgid "Not Available" msgstr "ਉਪਲੱਬਧ ਨਹੀਂ" -#, c-format msgid "Occupied" msgstr "ਰੁਝਿਆ" -#, c-format msgid "Web Aware" msgstr "ਵੈਬ ਜਾਣਕਾਰ" -#, c-format msgid "Invisible" msgstr "ਅਦਿੱਖ" @@ -6363,9 +6212,8 @@ msgstr "" "BOS ਸਰਵਰ ਨਾਲ ਜੁੜਨ ਨਹੀਂ ਸਕਿਆ:\n" "%s" -#, fuzzy msgid "Username sent" -msgstr "ਕੋਈ ਯੂਜ਼ਰ-ਨਾਂ ਸੈੱਟ" +msgstr "ਯੂਜ਼ਰ ਨਾਂ ਭੇਜਿਆ" msgid "Connection established, cookie sent" msgstr "ਕੁਨੈਕਸ਼ਨ ਬਣ ਗਿਆ ਹੈ, ਕੂਕੀ ਭੇਜਿਆ ਗਿਆ" @@ -6374,21 +6222,20 @@ msgstr "ਕੁਨੈਕਸ਼ਨ ਬਣ ਗਿਆ ਹੈ, ਕੂਕੀ ਭੇਜ msgid "Finalizing connection" msgstr "ਕੁਨੈਕਸ਼ਨ ਤਿਆਰ" -#, fuzzy, c-format +#, c-format msgid "" "Unable to login: Could not sign on as %s because the username is invalid. " "Usernames must be a valid email address, or start with a letter and contain " "only letters, numbers and spaces, or contain only numbers." msgstr "" -"ਲਾਗਇਨ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: %s ਵਾਂਗ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ, ਕਿਉਂਕਿ ਸਕਰੀਨ-ਨਾਂ ਗਲਤ ਹੈ। " -"ਸਕਰੀਨ ਨਾਂ ਇੱਕ ਵੈਧ ਈਮੇਲ ਐਡਰੈੱਸ ਚਾਹੀਦਾ ਹੈ, ਜਾਂ ਇੱਕ ਅੱਖਰ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਕੇਵਲ " +"ਲਾਗਇਨ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: %s ਵਾਂਗ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ, ਕਿਉਂਕਿ ਯੂਜ਼ਰ-ਨਾਂ ਗਲਤ ਹੈ। " +"ਯੂਜ਼ਰ ਨਾਂ ਇੱਕ ਵੈਧ ਈਮੇਲ ਐਡਰੈੱਸ ਚਾਹੀਦਾ ਹੈ, ਜਾਂ ਇੱਕ ਅੱਖਰ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਕੇਵਲ " "ਅੱਖਰ, ਨੰਬਰ, ਖਾਲੀ ਥਾਂ ਜਾਂ ਕੁਝ ਨੰਬਰ ਹੀ ਹੋ ਸਕਦੇ ਹਨ।" #. Unregistered screen name #. uid is not exist -#, fuzzy msgid "Invalid username." -msgstr "ਗਲਤ ਨਾਂ" +msgstr "ਗਲਤ ਯੂਜ਼ਰ-ਨਾਂ ਹੈ।" msgid "Incorrect password." msgstr "ਗਲਤ ਪਾਸਵਰਡ ਹੈ।" @@ -6436,12 +6283,8 @@ msgid "_OK" msgstr "ਠੀਕ ਹੈ(_O)" #, c-format -msgid "" -"You may be disconnected shortly. You may want to use TOC until this is " -"fixed. Check %s for updates." -msgstr "" -"ਤੁਹਾਡਾ ਕੁਨੈਕਸ਼ਨ ਛੇਤੀ ਹੀ ਬੰਦ ਹੋ ਸਕਦਾ ਹੈ। ਤੁਸੀਂ ਸਥਿਰ ਹੋਣ ਤੱਕ TOC ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਚਾਹੁੰਦੇ ਹੋ। ਨਵੇਂ ਲਈ " -"%s ਵੇਖੋ।" +msgid "You may be disconnected shortly. If so, check %s for updates." +msgstr "ਤੁਹਾਡਾ ਕੁਨੈਕਸ਼ਨ ਛੇਤੀ ਹੀ ਬੰਦ ਹੋ ਸਕਦਾ ਹੈ। ਇਸਕਰਕੇ ਅੱਪਡੇਟ ਲਈ %s ਵੇਖੋ।" msgid "Unable to get a valid AIM login hash." msgstr "ਇੱਕ ਠੀਕ AIM ਲਾਗਇਨ ਹੈਂਸ਼ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਅਸਫ਼ਲ।" @@ -6553,27 +6396,22 @@ msgstr[0] "ਤੁਸੀਂ %hu ਸੁਨੇਹਾ %s ਵਲੋਂ ਗੁਆ ਲ msgstr[1] "ਤੁਸੀਂ %hu ਸੁਨੇਹਿਆਂ %s ਵਲੋਂ ਨੂੰ ਗੁਆ ਲਿਆ ਹੈ, ਕਿਉਕਿ ਇਹ ਬਹੁਤ ਵੱਡੇ ਹਨ।" #, c-format -msgid "" -"You missed %hu message from %s because the rate limit has been exceeded." -msgid_plural "" -"You missed %hu messages from %s because the rate limit has been exceeded." +msgid "You missed %hu message from %s because the rate limit has been exceeded." +msgid_plural "You missed %hu messages from %s because the rate limit has been exceeded." msgstr[0] "ਤੁਸੀਂ %hu ਸੁਨੇਹਾ %s ਵਲੋਂ ਗੁਆ ਲਿਆ ਹੈ, ਕਿਉਕਿ ਦਰ ਸੀਮਾ ਹੱਦ ਟੱਪ ਗਈ ਹੈ।" msgstr[1] "ਤੁਸੀਂ %hu ਸੁਨੇਹਿਆਂ %s ਵਲੋਂ ਨੂੰ ਗੁਆ ਲਿਆ ਹੈ, ਕਿਉਕਿ ਦਰ ਸੀਮਾ ਹੱਦ ਟੱਪ ਗਈ ਹੈ।" -#, fuzzy, c-format -msgid "" -"You missed %hu message from %s because his/her warning level is too high." -msgid_plural "" -"You missed %hu messages from %s because his/her warning level is too high." -msgstr[0] "ਤੁਸੀਂ %hu ਸੁਨੇਹਾ %s ਵਲੋਂ ਗੁਆ ਲਿਆ ਹੈ, ਕਿਉਕਿ ਉਹ ਬੁਰਾ ਹੈ।" -msgstr[1] "ਤੁਸੀਂ %hu ਸੁਨੇਹਿਆਂ %s ਵਲੋਂ ਨੂੰ ਗੁਆ ਲਿਆ ਹੈ, ਕਿਉਕਿ ਉਹ ਬੁਰਾ ਹੈ।" +#, 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] "ਤੁਸੀਂ %hu ਸੁਨੇਹਾ %s ਵਲੋਂ ਗੁਆ ਲਿਆ ਹੈ, ਕਿਉਂਕਿ ਉਸ ਦਾ ਚੇਤਾਵਨੀ ਲੈਵਲ ਵੱਧ ਹੈ।" +msgstr[1] "ਤੁਸੀਂ %hu ਸੁਨੇਹਿਆਂ %s ਵਲੋਂ ਨੂੰ ਗੁਆ ਲਿਆ ਹੈ, ਕਿਉਂਕਿ ਉਸ ਦਾ ਚੇਤਾਵਨੀ ਲੈਵਲ ਵੱਧ ਹੈ।" -#, fuzzy, c-format +#, 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] "ਤੁਸੀਂ %hu ਸੁਨੇਹਾ %s ਵਲੋਂ ਗੁਆ ਲਿਆ ਹੈ, ਕਿਉਕਿ ਤੁਸੀਂ ਬੁਰੇ ਹੋ।" -msgstr[1] "ਤੁਸੀਂ %hu ਸੁਨੇਹਿਆਂ %s ਵਲੋਂ ਨੂੰ ਗੁਆ ਲਿਆ ਹੈ, ਕਿਉਕਿ ਤੁਸੀਂ ਬੁਰੇ ਹੋ।" +msgid_plural "You missed %hu messages from %s because your warning level is too high." +msgstr[0] "ਤੁਸੀਂ %hu ਸੁਨੇਹਾ %s ਵਲੋਂ ਗੁਆ ਲਿਆ ਹੈ, ਕਿਉਂਕਿ ਤੁਹਾਡਾ ਚੇਤਾਵਨੀ ਲੈਵਲ ਵੱਧ ਹੈ।" +msgstr[1] "ਤੁਸੀਂ %hu ਸੁਨੇਹਿਆਂ %s ਵਲੋਂ ਨੂੰ ਗੁਆ ਲਿਆ ਹੈ, ਕਿਉਂਕਿ ਤੁਹਾਡਾ ਚੇਤਾਵਨੀ ਲੈਵਲ ਵੱਧ ਹੈ" #, c-format msgid "You missed %hu message from %s for an unknown reason." @@ -6603,6 +6441,9 @@ msgstr "ਆਨਲਾਇਨ ਹੈ" msgid "Member Since" msgstr "ਮੈਂਬਰ ਹੈ" +msgid "Profile" +msgstr "ਪ੍ਰੋਫਾਇਲ" + msgid "Your AIM connection may be lost." msgstr "ਤੁਹਾਡਾ AIM ਕੁਨੈਕਸ਼ਨ ਟੁੱਟ ਗਿਆ ਹੋ ਸਕਦਾ ਹੈ।" @@ -6652,11 +6493,11 @@ msgstr "ਵੈਬ ਸਫਾ" msgid "Pop-Up Message" msgstr "ਪੋਪਅੱਪ ਸੁਨੇਹਾ" -#, fuzzy, c-format +#, c-format msgid "The following username is associated with %s" msgid_plural "The following usernames are associated with %s" -msgstr[0] "ਹੇਠ ਦਿੱਤੀ ਸਕਰੀਨ ਨਾਂ %s ਨਾਲ ਸਬੰਧਿਤ ਹਨ" -msgstr[1] "ਹੇਠ ਦਿੱਤੇ ਸਕਰੀਨ ਨਾਂ %s ਨਾਲ ਸਬੰਧਿਤ ਹਨ" +msgstr[0] "ਹੇਠ ਦਿੱਤਾ ਯੂਜ਼ਰ ਨਾਂ %s ਨਾਲ ਸਬੰਧਿਤ ਹੈ" +msgstr[1] "ਹੇਠ ਦਿੱਤੇ ਯੂਜ਼ਰ ਨਾਂ %s ਨਾਲ ਸਬੰਧਿਤ ਹਨ" #, c-format msgid "No results found for email address %s" @@ -6669,38 +6510,35 @@ msgstr "ਤੁਸੀਂ %s ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਇੱਕ msgid "Account Confirmation Requested" msgstr "ਅਕਾਊਂਟ ਪੁਸ਼ਟੀ ਮੰਗ" -#, fuzzy, c-format +#, c-format msgid "" "Error 0x%04x: Unable to format username because the requested name differs " "from the original." -msgstr "" -"ਗਲਤੀ 0x%04x: ਸਕਰੀਨ ਨਾਂ ਫਾਰਮਿਟ ਲਈ ਅਸਫਲ ਹੈ, ਕਿਉਕਿ ਦਿੱਤਾ ਸਕਰੀਨ ਨਾਂ ਅਸਲੀ ਨਾਲੋਂ ਵੱਖਰਾ ਹੈ।" +msgstr "ਗਲਤੀ 0x%04x: ਯੂਜ਼ਰ-ਨਾਂ ਫਾਰਮੈਟ ਲਈ ਅਸਮਰੱਥ ਹੈ, ਕਿਉਕਿ ਦਿੱਤਾ ਯੂਜ਼ਰ ਨਾਂ ਅਸਲੀ ਨਾਲੋਂ ਵੱਖਰਾ ਹੈ।" -#, fuzzy, c-format +#, c-format msgid "Error 0x%04x: Unable to format username because it is invalid." -msgstr "ਗਲਤੀ 0x%04x: ਸਕਰੀਨ ਨਾਂ ਫਾਰਮੈਟ ਲਈ ਅਸਫਲ ਹੈ, ਕਿਉਂਕਿ ਇਹ ਗਲਤ ਹੈ।" +msgstr "ਗਲਤੀ 0x%04x: ਯੂਜ਼ਰ-ਨਾਂ ਫਾਰਮੈਟ ਲਈ ਅਸਫਲ ਹੈ, ਕਿਉਂਕਿ ਇਹ ਗਲਤ ਹੈ।" -#, fuzzy, c-format +#, c-format msgid "" "Error 0x%04x: Unable to format username because the requested name is too " "long." -msgstr "ਗਲਤੀ 0x%04x: ਸਕਰੀਨ ਨਾਂ ਫਾਰਮਿਟ ਲਈ ਅਸਫਲ ਹੈ, ਕਿਉਕਿ ਦਿੱਤਾ ਸਕਰੀਨ ਨਾਂ ਬਹੁਤ ਵੱਡਾ ਹੈ।" +msgstr "ਗਲਤੀ 0x%04x: ਯੂਜ਼ਰ-ਨਾਂ ਫਾਰਮੈਟ ਲਈ ਅਸਫਲ ਹੈ, ਕਿਉਕਿ ਦਿੱਤਾ ਯੂਜ਼ਰ-ਨਾਂ ਬਹੁਤ ਵੱਡਾ ਹੈ।" -#, fuzzy, c-format +#, c-format msgid "" "Error 0x%04x: Unable to change email address because there is already a " "request pending for this username." msgstr "" -"ਗਲਤੀ 0x%04x: ਈਮੇਲ ਐਡਰੈੱਸ ਤਬਦੀਲ ਕਰਨ ਲਈ ਅਸਫਲ ਹੈ, ਕਿਉਕਿ ਦਿੱਤਾ ਸਿਰਨਾਵੇਂ ਲਈ ਪਹਿਲਾਂ ਹੀ ਇੱਕ " +"ਗਲਤੀ 0x%04x: ਈਮੇਲ ਐਡਰੈੱਸ ਬਦਲਣ ਲਈ ਅਸਫਲ ਹੈ, ਕਿਉਕਿ ਇਸ ਯੂਜ਼ਰ-ਨਾਂ ਲਈ ਪਹਿਲਾਂ ਹੀ ਇੱਕ " "ਬੇਨਤੀ ਬਕਾਇਆ ਪਈ ਹੈ।" -#, fuzzy, c-format +#, c-format msgid "" "Error 0x%04x: Unable to change email address because the given address has " "too many usernames associated with it." -msgstr "" -"ਗਲਤੀ 0x%04x: ਈਮੇਲ ਐਡਰੈੱਸ ਤਬਦੀਲ ਕਰਨ ਲਈ ਅਸਫਲ ਹੈ, ਕਿਉਕਿ ਦਿੱਤੇ ਐਡਰੈੱਸ ਨਾਲ ਬਹੁਤ ਸਾਰੇ ਸਕਰੀਨ " -"ਨਾਂ ਸਬੰਧਤ ਹਨ।" +msgstr "ਗਲਤੀ 0x%04x: ਈਮੇਲ ਐਡਰੈੱਸ ਬਦਲਣ ਲਈ ਅਸਫਲ ਹੈ, ਕਿਉਕਿ ਦਿੱਤੇ ਐਡਰੈੱਸ ਨਾਲ ਬਹੁਤ ਸਾਰੇ ਯੂਜ਼ਰ-ਨਾਂ ਸਬੰਧਤ ਹਨ।" #, c-format msgid "" @@ -6713,7 +6551,7 @@ msgid "Error 0x%04x: Unknown error." msgstr "ਗਲਤੀ 0x%04x: ਅਣਜਾਣੀ ਗਲਤੀ ਹੈ।" msgid "Error Changing Account Info" -msgstr "ਅਕਾਊਂਟ ਜਾਣਕਾਰੀ ਤਬਦੀਲ ਕਰਨ ਲਈ ਗਲਤੀ" +msgstr "ਅਕਾਊਂਟ ਜਾਣਕਾਰੀ ਬਦਲਣ ਦੌਰਾਨ ਗਲਤੀ" #, c-format msgid "The email address for %s is %s" @@ -6722,8 +6560,7 @@ msgstr "%s ਦਾ ਈਮੇਲ ਐਡਰੈੱਸ %s ਹੈ" msgid "Account Info" msgstr "ਅਕਾਊਂਟ ਜਾਣਕਾਰੀ" -msgid "" -"Your IM Image was not sent. You must be Direct Connected to send IM Images." +msgid "Your IM Image was not sent. You must be Direct Connected to send IM Images." msgstr "ਤੁਹਾਡਾ IM ਭੇਜਿਆ ਨਹੀਂ ਸੀ ਗਿਆ। ਤੁਹਾਨੂੰ IM ਚਿੱਤਰ ਭੇਜਣ ਲਈ ਸਿੱਧਾ ਜੁੜਨਾ ਚਾਹੀਦਾ ਹੈ।" msgid "Unable to set AIM profile." @@ -6738,7 +6575,7 @@ msgstr "" "ਤੁਹਾਡਾ ਪਰੋਫਾਇਲ ਅਣ-ਸੈੱਟ ਹੀ ਰਹੇਗਾ, ਜਦੋਂ ਤੁਸੀਂ ਪੂਰੀ ਤਰ੍ਹਾਂ ਕੁਨੈਕਟ ਹੋ ਜਾਵੋ ਤਾਂ ਫੇਰ ਸੈਟਿੰਗ ਕਰਨ ਦੀ " "ਟਰਾਈ ਕਰਨੀ।" -#, fuzzy, c-format +#, c-format msgid "" "The maximum profile length of %d byte has been exceeded. It has been " "truncated for you." @@ -6746,51 +6583,43 @@ msgid_plural "" "The maximum profile length of %d bytes has been exceeded. It has been " "truncated for you." msgstr[0] "" -"ਪ੍ਰੋਫਾਇਲ ਦੀ ਵੱਧੋ-ਵੱਧ ਲੰਬਾਈ %d ਬਾਇਟ ਤੋਂ ਵੱਧ ਗਈ ਹੈ। ਤੁਹਾਡੇ ਲਈ ਇਸ ਨੂੰ ਛਾਂਗ (ਛੋਟਾ ਕਰ) ਦਿੱਤਾ " -"ਹੈ।ਪ੍ਰੋਫਾਇਲ ਦੀ ਵੱਧੋ-ਵੱਧ ਲੰਬਾਈ %d ਬਾਇਟਾਂ ਤੋਂ ਵੱਧ ਗਈ ਹੈ। ਗੇਮ ਨੇ ਤੁਹਾਡੇ ਲਈ ਇਸ ਨੂੰ ਛਾਂਗ (ਛੋਟਾ ਕਰ) " -"ਦਿੱਤਾ ਹੈ।" +"ਪਰੋਫਾਇਲ ਦੀ ਵੱਧੋ-ਵੱਧ ਲੰਬਾਈ %d ਬਾਇਟ ਤੋਂ ਵੱਧ ਗਈ ਹੈ। ਤੁਹਾਡੇ ਲਈ ਇਸ ਨੂੰ ਛਾਂਗ (ਛੋਟਾ ਕਰ) ਦਿੱਤਾ " +"ਹੈ।" msgstr[1] "" -"ਪ੍ਰੋਫਾਇਲ ਦੀ ਵੱਧੋ-ਵੱਧ ਲੰਬਾਈ %d ਬਾਇਟ ਤੋਂ ਵੱਧ ਗਈ ਹੈ। ਤੁਹਾਡੇ ਲਈ ਇਸ ਨੂੰ ਛਾਂਗ (ਛੋਟਾ ਕਰ) ਦਿੱਤਾ " -"ਹੈ।ਪ੍ਰੋਫਾਇਲ ਦੀ ਵੱਧੋ-ਵੱਧ ਲੰਬਾਈ %d ਬਾਇਟਾਂ ਤੋਂ ਵੱਧ ਗਈ ਹੈ। ਗੇਮ ਨੇ ਤੁਹਾਡੇ ਲਈ ਇਸ ਨੂੰ ਛਾਂਗ (ਛੋਟਾ ਕਰ) " +"ਪਰੋਫਾਇਲ ਦੀ ਵੱਧੋ-ਵੱਧ ਲੰਬਾਈ %d ਬਾਇਟਾਂ ਤੋਂ ਵੱਧ ਗਈ ਹੈ।ਤੁਹਾਡੇ ਲਈ ਇਸ ਨੂੰ ਛਾਂਗ (ਛੋਟਾ ਕਰ) " "ਦਿੱਤਾ ਹੈ।" msgid "Profile too long." -msgstr "ਪ੍ਰੋਫਾਇਲ ਬਹੁਤ ਲੰਮਾ ਹੈ।" +msgstr "ਪਰੋਫਾਇਲ ਬਹੁਤ ਲੰਮਾ ਹੈ।" -#, fuzzy, c-format +#, c-format msgid "" "The maximum away message length of %d byte has been exceeded. It has been " "truncated for you." msgid_plural "" "The maximum away message length of %d bytes has been exceeded. It has been " "truncated for you." -msgstr[0] "" -"ਸੁਨੇਹੇ ਦੀ ਵੱਧੋ-ਵੱਧ ਲੰਬਾਈ %d ਬਾਇਟ ਤੋਂ ਵੱਧ ਗਈ ਹੈ। ਤੁਹਾਡੇ ਲਈ ਇਸ ਨੂੰ ਛਾਂਗ (ਛੋਟਾ ਕਰ) ਦਿੱਤਾ ਹੈ।ਸੁਨੇਹੇ ਦੀ " -"ਵੱਧੋ-ਵੱਧ ਲੰਬਾਈ %d ਬਾਇਟਾਂ ਤੋਂ ਵੱਧ ਗਈ ਹੈ। ਗੇਮ ਨੇ ਤੁਹਾਡੇ ਲਈ ਇਸ ਨੂੰ ਛਾਂਗ (ਛੋਟਾ ਕਰ) ਦਿੱਤਾ ਹੈ।" -msgstr[1] "" -"ਸੁਨੇਹੇ ਦੀ ਵੱਧੋ-ਵੱਧ ਲੰਬਾਈ %d ਬਾਇਟ ਤੋਂ ਵੱਧ ਗਈ ਹੈ। ਤੁਹਾਡੇ ਲਈ ਇਸ ਨੂੰ ਛਾਂਗ (ਛੋਟਾ ਕਰ) ਦਿੱਤਾ ਹੈ।ਸੁਨੇਹੇ ਦੀ " -"ਵੱਧੋ-ਵੱਧ ਲੰਬਾਈ %d ਬਾਇਟਾਂ ਤੋਂ ਵੱਧ ਗਈ ਹੈ। ਗੇਮ ਨੇ ਤੁਹਾਡੇ ਲਈ ਇਸ ਨੂੰ ਛਾਂਗ (ਛੋਟਾ ਕਰ) ਦਿੱਤਾ ਹੈ।" +msgstr[0] "ਸੁਨੇਹੇ ਦੀ ਵੱਧੋ-ਵੱਧ ਲੰਬਾਈ %d ਬਾਇਟ ਤੋਂ ਵੱਧ ਗਈ ਹੈ। ਤੁਹਾਡੇ ਲਈ ਇਸ ਨੂੰ ਛਾਂਗ (ਛੋਟਾ ਕਰ) ਦਿੱਤਾ ਹੈ।" +msgstr[1] "ਸੁਨੇਹੇ ਦੀ ਵੱਧੋ-ਵੱਧ ਲੰਬਾਈ %d ਬਾਇਟਾਂ ਤੋਂ ਵੱਧ ਗਈ ਹੈ। ਗੇਮ ਨੇ ਤੁਹਾਡੇ ਲਈ ਇਸ ਨੂੰ ਛਾਂਗ (ਛੋਟਾ ਕਰ) ਦਿੱਤਾ ਹੈ।" msgid "Away message too long." msgstr "ਦੂਰ ਸੁਨੇਹਾ ਬਹੁਤ ਲੰਮਾ ਹੈ।" -#, fuzzy, c-format +#, c-format msgid "" "Could not add the buddy %s because the username is invalid. Usernames must " "be a valid email address, or start with a letter and contain only letters, " "numbers and spaces, or contain only numbers." msgstr "" -"ਬੱਡੀ %s ਸ਼ਾਮਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ, ਕਿਉਂਕਿ ਸਕਰੀਨ ਨਾਂ ਗਲਤ ਹੈ। ਸਕਰੀਨ ਨਾਂ ਇੱਕ ਵੈਧ ਈਮੇਲ ਐਡਰੈੱਸ " +"ਬੱਡੀ %s ਸ਼ਾਮਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ, ਕਿਉਂਕਿ ਯੂਜ਼ਰ-ਨਾਂ ਗਲਤ ਹੈ। ਯੂਜ਼ਰ-ਨਾਂ ਇੱਕ ਵੈਧ ਈਮੇਲ ਐਡਰੈੱਸ " "ਚਾਹੀਦਾ ਹੈ, ਜਾਂ ਇੱਕ ਅੱਖਰ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਕੇਵਲ ਅੱਖਰ, ਨੰਬਰ, ਖਾਲੀ ਥਾਂ ਜਾਂ ਕੁਝ " "ਨੰਬਰ ਹੀ ਹੋ ਸਕਦੇ ਹਨ।" -#, fuzzy msgid "Unable to Add" -msgstr "ਸ਼ਾਮਿਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ" +msgstr "ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ" -#, fuzzy msgid "Unable to Retrieve Buddy List" -msgstr "ਬੱਡੀ ਲਿਸਟ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਅਸਫਲ" +msgstr "ਬੱਡੀ ਲਿਸਟ ਲੈਣ ਲਈ ਅਸਮਰੱਥ" msgid "" "The AIM servers were temporarily unable to send your buddy list. Your buddy " @@ -6817,7 +6646,7 @@ msgstr "(ਨਾਂ ਨਹੀਂ)" msgid "Could not add the buddy %s for an unknown reason." msgstr "ਅਣਜਾਣੇ ਕਾਰਨ ਕਰਨੇ ਬੱਡੀ %s ਨੂੰ ਸ਼ਾਮਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।" -#, fuzzy, c-format +#, c-format msgid "" "The user %s has given you permission to add him or her to your buddy list. " "Do you want to add this user?" @@ -6831,10 +6660,10 @@ msgstr "ਪ੍ਰਮਾਣਿਕਤਾ ਦਿੱਤੀ" #. Granted #, c-format msgid "The user %s has granted your request to add them to your buddy list." -msgstr "ਯੂਜ਼ਰ %s ਨੇ ਤੁਹਾਨੂੰ ਆਪਣੀ ਬੱਡੀ ਲਿਸਟ ਵਿੱਚ ਸ਼ਾਮਿਲ ਕਰਨ ਦੀ ਮੰਗ ਨੂੰ ਸਵੀਕਾਰ ਕਰ ਲਿਆ ਹੈ।" +msgstr "ਯੂਜ਼ਰ %s ਨੇ ਤੁਹਾਨੂੰ ਆਪਣੀ ਬੱਡੀ ਲਿਸਟ ਵਿੱਚ ਸ਼ਾਮਿਲ ਕਰਨ ਦੀ ਮੰਗ ਮੰਨ ਲਈ ਹੈ।" msgid "Authorization Granted" -msgstr "ਪ੍ਰਮਾਣਕਿਤਾ ਸਵੀਕਾਰ" +msgstr "ਆਗਿਆ ਦਿੱਤੀ" #. Denied #, c-format @@ -6843,7 +6672,7 @@ msgid "" "following reason:\n" "%s" msgstr "" -"ਯੂਜ਼ਰ %s ਨੇ ਤੁਹਾਨੂੰ ਆਪਣੀ ਬੱਡੀ ਲਿਸਟ ਵਿੱਚ ਸ਼ਾਮਿਲ ਕਰਨ ਦੀ ਬੇਨਤੀ ਨੂੰ ਇਸ ਕਰਕੇ ਠੁਕਰਾ ਦਿੱਤਾ ਹੈ:\n" +"ਯੂਜ਼ਰ %s ਨੇ ਤੁਹਾਨੂੰ ਆਪਣੀ ਬੱਡੀ ਲਿਸਟ ਵਿੱਚ ਸ਼ਾਮਿਲ ਕਰਨ ਦੀ ਬੇਨਤੀ ਹੇਠ ਦਿੱਤੇ ਕਾਰਨ ਕਰਕੇ ਠੁਕਰਾ ਦਿੱਤੀ ਹੈ:\n" "%s" msgid "Authorization Denied" @@ -6882,6 +6711,7 @@ msgstr "ਕੁਨੈਕਟ ਕਰੋ(_o)" msgid "Get AIM Info" msgstr "AIM ਜਾਣਕਾਰੀ ਲਵੋ" +#. We only do this if the user is in our buddy list msgid "Edit Buddy Comment" msgstr "ਬੱਡੀ ਟਿੱਪਣੀ ਸੋਧ" @@ -6901,23 +6731,22 @@ msgid "Web aware (enabling this will cause you to receive SPAM!)" msgstr "ਵੈੱਬ ਉੱਤੇ ਉਪਲੱਬਧ (ਇਹ ਯੋਗ ਕਰਨ ਨਾਲ ਤੁਹਾਨੂੰ ਸਪਮ (SPAM) ਆਉਣ ਦਾ ਖਤਰਾ!)" msgid "ICQ Privacy Options" -msgstr "ICQ ਰਹੱਸ ਚੋਣਾਂ" +msgstr "ICQ ਪਰਾਈਵੇਸੀ ਚੋਣਾਂ" msgid "The new formatting is invalid." -msgstr "ਨਵਾਂ ਫਾਰਮਿਟ ਗਲਤ ਹੈ।" +msgstr "ਨਵਾਂ ਫਾਰਮੈਟ ਗਲਤ ਹੈ।" -#, fuzzy msgid "Username formatting can change only capitalization and whitespace." -msgstr "ਸਕਰੀਨ ਨਾਂ ਫਾਰਮਿਟ ਵਿੱਚ ਵੱਡੇ ਅੱਖਰ ਅਤੇ ਖਾਲੀ ਥਾਂ ਹੀ ਤਬਦੀਲ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ।" +msgstr "ਯੂਜ਼ਰ-ਨਾਂ ਫਾਰਮੈਟ ਵਿੱਚ ਵੱਡੇ ਅੱਖਰ ਅਤੇ ਖਾਲੀ ਥਾਂ ਹੀ ਬਦਲਿਆ ਜਾ ਸਕਦਾ ਹੈ।" msgid "Change Address To:" -msgstr "ਐਡਰੈੱਸ ਤਬਦੀਲ:" +msgstr "ਐਡਰੈੱਸ ਬਦਲੋ:" msgid "<i>you are not waiting for authorization</i>" msgstr "<i>ਤੁਸੀਂ ਪ੍ਰਮਾਣਿਕਤਾ ਦੀ ਉਡੀਕ ਨਹੀਂ ਕਰ ਰਹੇ ਹੋ</i>" msgid "You are awaiting authorization from the following buddies" -msgstr "ਤੁਸੀਂ ਇਹਨਾਂ ਬੱਡੀ ਵਲੋਂ ਪ੍ਰਮਾਣਿਕਤਾ ਦੀ ਉਡੀਕ ਕਰ ਰਹੇ ਹੋ" +msgstr "ਤੁਸੀਂ ਇਹਨਾਂ ਬੱਡੀਆਂ ਵਲੋਂ ਪ੍ਰਮਾਣਿਕਤਾ ਦੀ ਉਡੀਕ ਕਰ ਰਹੇ ਹੋ" msgid "" "You can re-request authorization from these buddies by right-clicking on " @@ -6938,21 +6767,18 @@ msgstr "ਬੱਡੀ ਖੋਜਣ ਲਈ ਈਮੇਲ ਐਡਰੈੱਸ ਦਿ msgid "_Search" msgstr "ਖੋਜ(_S)" -#, fuzzy msgid "Set User Info (web)..." -msgstr "ਯੂਜ਼ਰ ਜਾਣਕਾਰੀ ਦਿਓ (URL)..." +msgstr "ਯੂਜ਼ਰ ਜਾਣਕਾਰੀ ਦਿਓ (ਵੈੱਬ)..." -#, fuzzy msgid "Change Password (web)" -msgstr "ਪਾਸਵਰਡ ਤਬਦੀਲ (URL)" +msgstr "ਪਾਸਵਰਡ ਬਦਲੋ (ਵੈੱਬ)" -#, fuzzy msgid "Configure IM Forwarding (web)" -msgstr "IM ਫਾਰਵਿਡਿੰਗ (URL) ਸੰਰਚਨਾ" +msgstr "IM ਫਾਰਵਿਡਿੰਗ ਸੰਰਚਨਾ (ਵੈੱਬ)" #. ICQ actions msgid "Set Privacy Options..." -msgstr "ਰਹੱਸ ਚੋਣਾਂ ਦਿਓ..." +msgstr "ਪਰਾਈਵੇਸੀ ਚੋਣਾਂ ਦਿਓ..." #. AIM actions msgid "Confirm Account" @@ -6973,17 +6799,16 @@ msgstr "ਈ-ਮੇਲ ਰਾਹੀਂ ਬੱਡੀ ਖੋਜ..." msgid "Search for Buddy by Information" msgstr "ਜਾਣਕਾਰੀ ਰਾਹੀਂ ਬੱਡੀ ਖੋਜ" -#, fuzzy msgid "" "Always use AIM/ICQ proxy server for\n" "file transfers and direct IM (slower,\n" "but does not reveal your IP address)" msgstr "" -"ਫਾਇਲ ਟਰਾਂਸਫਰ ਲਈ ICQ ਪਰਾਕਸੀ ਸਰਵਰ ਹਮੇਸ਼ਾਂ ਵਰਤੋਂ\n" -"(ਹੌਲੀ ਹੈ, ਪਰ ਤੁਹਾਡਾ IP ਐਡਰੈੱਸ ਵੇਖਾਉਦਾ ਨਹੀਂ ਹੈ)" +"ਫਾਇਲ ਟਰਾਂਸਫਰ ਅਤੇ ਸਿੱਧਾ IM ਲਈ ICQ ਪਰਾਕਸੀ ਸਰਵਰ\n" +"ਹਮੇਸ਼ਾਂ ਵਰਤੋਂ ਹੌਲੀ ਹੈ, ਪਰ ਤੁਹਾਡਾ IP ਐਡਰੈੱਸ ਵੇਖਾਉਦਾ ਨਹੀਂ ਹੈ)" msgid "Allow multiple simultaneous logins" -msgstr "" +msgstr "ਇੱਕੋ ਵਾਰ ਕਈ ਲਾਗਇਨ ਮਨਜ਼ੂਰ" #, c-format msgid "Asking %s to connect to us at %s:%hu for Direct IM." @@ -6993,7 +6818,6 @@ msgstr "%s ਨੂੰ ਸਾਨੂੰ %s:%hu ਉੱਤੇ ਸਿੱਧੀ IM ਲ msgid "Attempting to connect to %s:%hu." msgstr "%s ਨਾਲ ਜੁੜਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਜਾਰੀ: %hu" -#, c-format msgid "Attempting to connect via proxy server." msgstr "ਪਰਾਕਸੀ ਸਰਵਰ ਨਾਲ ਕੁਨੈਕਟ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼।" @@ -7084,16 +6908,14 @@ msgstr "ਸੂਰ" msgid "Other" msgstr "ਹੋਰ" -#, fuzzy msgid "Visible" -msgstr "ਅਦਿੱਖ" +msgstr "ਦਿੱਖ" -msgid "Firend Only" -msgstr "" +msgid "Friend Only" +msgstr "ਕੇਵਲ ਦੋਸਤ ਹੀ" -#, fuzzy msgid "Private" -msgstr "ਰਹੱਸ" +msgstr "ਪ੍ਰਾਈਵੇਟ" msgid "QQ Number" msgstr "QQ ਨੰਬਰ" @@ -7110,9 +6932,8 @@ msgstr "ਜ਼ਿਪ ਕੋਡ" msgid "Phone Number" msgstr "ਫੋਨ ਨੰਬਰ" -#, fuzzy msgid "Authorize adding" -msgstr "ਕੀ ਬੱਡੀ ਮਨਜ਼ੂਰ ਹੈ?" +msgstr "ਪਰਮਾਣਿਕਤਾ ਸ਼ਾਮਲ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ" msgid "Cellphone Number" msgstr "ਸੈਲਫੋਨ ਨੰਬਰ" @@ -7120,130 +6941,106 @@ msgstr "ਸੈਲਫੋਨ ਨੰਬਰ" msgid "Personal Introduction" msgstr "ਨਿੱਜੀ ਜਾਣ ਪਛਾਣ" -#, fuzzy msgid "City/Area" -msgstr "ਸ਼ਹਿਰ" +msgstr "ਸ਼ਹਿਰ/ਖੇਤਰ" -#, fuzzy msgid "Publish Mobile" -msgstr "ਨਿੱਜੀ ਮੋਬਾਇਲ" +msgstr "ਮੋਬਾਇਲ ਪਬਲਿਸ਼" -#, fuzzy msgid "Publish Contact" -msgstr "ਉਪ ਨਾਂ ਸੰਪਰਕ" +msgstr "ਸੰਪਰਕ ਪਬਲਿਸ਼" msgid "College" msgstr "ਕਾਲਜ" -#, fuzzy msgid "Horoscope" -msgstr "ਜੋਤਿਸ਼ ਨਿਸ਼ਾਨ" +msgstr "ਜੋਤਿਸ਼" -#, fuzzy msgid "Zodiac" -msgstr "ਰਾਸ਼ੀ ਨਿਸ਼ਾਨ" +msgstr "ਰਾਸ਼ੀ" -#, fuzzy msgid "Blood" -msgstr "ਪਾਬੰਦੀ" +msgstr "ਖੂਨ" -#, fuzzy msgid "True" -msgstr "ਟੋਰਅਸ" +msgstr "ਸਹੀਂ" -#, fuzzy msgid "False" -msgstr "ਅਸਫ਼ਲ" +msgstr "ਗਲਤ" -#, fuzzy msgid "Modify Contact" -msgstr "ਅਕਾਊਂਟ ਸੋਧ" +msgstr "ਸੰਪਰਕ ਸੋਧ" -#, fuzzy msgid "Modify Address" -msgstr "ਘਰ ਐਡਰੈੱਸ" +msgstr "ਐਡਰੈੱਸ ਸੋਧ" -#, fuzzy msgid "Modify Extended Information" -msgstr "ਮੇਰੀ ਜਾਣਕਾਰੀ ਸੋਧੋ" +msgstr "ਵਾਧੂ ਜਾਣਕਾਰੀ ਸੋਧ" -#, fuzzy msgid "Modify Information" -msgstr "ਮੇਰੀ ਜਾਣਕਾਰੀ ਸੋਧੋ" +msgstr "ਜਾਣਕਾਰੀ ਸੋਧ" -#, fuzzy msgid "Update" -msgstr "ਆਖਰੀ ਅੱਪਡੇਟ" +msgstr "ਅੱਪਡੇਟ" -#, fuzzy msgid "Could not change buddy information." -msgstr "ਬੱਡੀ ਜਾਣਕਾਰੀ ਦਿਓ ਜੀ।" +msgstr "ਬੱਡੀ ਜਾਣਕਾਰੀ ਬਦਲੀ ਨਹੀਂ ਜਾ ਸਕੀ" #, c-format -msgid "%d needs Q&A" -msgstr "" +msgid "%u requires verification" +msgstr "%u ਲਈ ਪਰਮਾਣਿਕਤਾ ਦੀ ਲੋੜ" -#, fuzzy -msgid "Add buddy Q&A" -msgstr "ਬੱਡੀ ਸ਼ਾਮਿਲ" +msgid "Add buddy question" +msgstr "ਬੱਡੀ ਸਵਾਲ ਸ਼ਾਮਲ" -#, fuzzy -msgid "Input answer here" -msgstr "ਇੰਪੁੱਟ ਮੰਗ ਇੱਥੇ" +msgid "Enter answer here" +msgstr "ਇੱਥੇ ਜਵਾਬ ਦਿਓ" msgid "Send" msgstr "ਭੇਜੋ" -#, fuzzy msgid "Invalid answer." -msgstr "ਗਲਤ ਨਾਂ" +msgstr "ਗਲਤ ਜਵਾਬ ਹੈ।" msgid "Authorization denied message:" msgstr "ਪ੍ਰਮਾਣਿਕਤਾ ਪਾਬੰਦੀ ਸੁਨੇਹਾ:" -#, fuzzy -msgid "Sorry, You are not my style." -msgstr "ਅਫਸੋਸ, ਤੁਸੀਂ ਮੇਰੀ ਟਾਈਪ ਦੇ ਨਹੀਂ..." +msgid "Sorry, you're not my style." +msgstr "ਅਫਸੋਸ, ਤੁਸੀਂ ਮੇਰੀ ਟਾਈਪ ਦੇ ਨਹੀਂ ਹੋ।" -#, fuzzy, c-format -msgid "%d needs authentication" -msgstr "ਯੂਜ਼ਰ %d ਨੂੰ ਪਰਮਾਣਕਿਤਾ ਦੀ ਲੋੜ ਹੈ" +#, c-format +msgid "%u needs authorization" +msgstr "%u ਨੂੰ ਪਰਮਾਣਕਿਤਾ ਦੀ ਲੋੜ ਹੈ" -#, fuzzy msgid "Add buddy authorize" -msgstr "ਕੀ ਬੱਡੀ ਆਪਣੀ ਲਿਸਟ ਵਿੱਚ ਸ਼ਾਮਿਲ?" +msgstr "ਬੱਡੀ ਪਰਮਾਣਕਿਤਾ ਸ਼ਾਮਲ" -msgid "Input request here" -msgstr "ਇੰਪੁੱਟ ਮੰਗ ਇੱਥੇ" +msgid "Enter request here" +msgstr "ਮੰਗ ਇੱਥੇ ਦਿਓ" msgid "Would you be my friend?" msgstr "ਕੀ ਤੁਸੀਂ ਮੇਰੇ ਦੋਸਤ ਬਣਨਾ ਚਾਹੁੰਦੇ ਹੋ?" -#, fuzzy msgid "QQ Buddy" -msgstr "ਬੱਡੀ ਸ਼ਾਮਿਲ" +msgstr "QQ ਬੱਡੀ" -#, fuzzy msgid "Add buddy" -msgstr "ਬੱਡੀ ਸ਼ਾਮਿਲ" +msgstr "ਬੱਡੀ ਸ਼ਾਮਲ" -#, fuzzy msgid "Invalid QQ Number" -msgstr "ਗਲਤ QQ ਮੁੱਖ" +msgstr "ਗਲਤ QQ ਨੰਬਰ" -#, fuzzy msgid "Failed sending authorize" -msgstr "ਮੈਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰੋ ਜੀ!" +msgstr "ਪਰਮਾਣਕਿਤਾ ਭੇਜਣ ਲਈ ਫੇਲ੍ਹ ਹੈ" -#, fuzzy, c-format -msgid "Failed removing buddy %d" -msgstr "ਬੱਡੀ ਹਟਾਉਣ ਲਈ ਫੇਲ੍ਹ" +#, c-format +msgid "Failed removing buddy %u" +msgstr "ਬੱਡੀ %u ਹਟਾਉਣ ਲਈ ਫੇਲ੍ਹ" -#, fuzzy, c-format +#, c-format msgid "Failed removing me from %d's buddy list" -msgstr "%s ਨੇ ਤੁਹਾਨੂੰ ਆਪਣੀ ਬੱਡੀ ਲਿਸਟ 'ਚੋਂ ਹਟਾ ਦਿੱਤਾ ਹੈ।" +msgstr "%d ਦੀ ਬੱਡੀ ਲਿਸਟ ਤੋਂ ਮੈਨੂੰ ਹਟਾਉਣ ਲਈ ਫੇਲ੍ਹ" -#, fuzzy msgid "No reason given" msgstr "ਕੋਈ ਕਾਰਨ ਨਹੀਂ ਦਿੱਤਾ ਹੈ।" @@ -7255,9 +7052,9 @@ msgstr "ਤੁਹਾਨੂੰ %s ਵਲੋਂ ਸ਼ਾਮਲ ਕੀਤਾ ਗ msgid "Would you like to add him?" msgstr "ਕੀ ਤੁਸੀਂ ਉਸ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?" -#, fuzzy, c-format +#, c-format msgid "Rejected by %s" -msgstr "ਰੱਦ ਕਰੋ" +msgstr "%s ਵਲੋਂ ਰੱਦ ਕਰੋ" #, c-format msgid "Message: %s" @@ -7272,82 +7069,73 @@ msgstr "ਗਰੁੱਪ ID" msgid "QQ Qun" msgstr "QQ Qun" -#, fuzzy msgid "Please enter Qun number" -msgstr "%s ਲਈ ਨਵਾਂ ਨਾਂ ਦਿਓ ਜੀ" +msgstr "Qun ਨੰਬਰ ਦਿਓ ਜੀ" -#, fuzzy msgid "You can only search for permanent Qun\n" -msgstr "ਤੁਸੀਂ ਕੇਵਲ ਪੱਕੇ QQ ਗਰੁੱਪ ਲਈ ਹੀ ਖੋਜ ਕਰ ਸਕਦੇ ਹੋ\n" +msgstr "ਤੁਸੀਂ ਕੇਵਲ ਪੱਕੇ Qun ਹੀ ਖੋਜ ਕਰ ਸਕਦੇ ਹੋ\n" + +msgid "(Invalid UTF-8 string)" +msgstr "(ਗਲਤ UTF-8 ਲਾਇਨ)" -#, fuzzy msgid "Not member" -msgstr "ਮੈਂ ਮੈਂਬਰ ਨਹੀਂ ਹਾਂ" +msgstr "ਮੈਂਬਰ ਨਹੀਂ" -#, fuzzy msgid "Member" -msgstr "ਮੈਂਬਰ ਹੈ" +msgstr "ਮੈਂਬਰ ਹੋ" -#, fuzzy msgid "Requesting" -msgstr "ਮੰਗ ਡਾਈਲਾਗ" +msgstr "ਮੰਗ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ" -#, fuzzy msgid "Admin" -msgstr "Adium" +msgstr "ਐਡਮਿਨ" -#, fuzzy msgid "Notice" -msgstr "ਨੋਟ" +msgstr "ਨੋਟਿਸ" -#, fuzzy msgid "Detail" -msgstr "ਡਿਫਾਲਟ" +msgstr "ਵੇਰਵਾ" msgid "Creator" msgstr "ਨਿਰਮਾਤਾ" -#, fuzzy msgid "About me" -msgstr "%s ਬਾਰੇ" +msgstr "ਮੇਰੇ ਬਾਰੇ" -#, fuzzy msgid "Category" -msgstr "ਗੱਲ ਗਲਤੀ" +msgstr "ਕੈਟਾਗਰੀ" -#, fuzzy msgid "The Qun does not allow others to join" -msgstr "ਇਹ ਗਰੁੱਪ ਹੋਰਾਂ ਨੂੰ ਜੁਆਇੰਨ ਕਰਨ ਲਈ ਮਨਜ਼ੂਰੀ ਨਹੀਂ ਦਿੰਦਾ ਹੈ" +msgstr "Qun ਹੋਰਾਂ ਨੂੰ ਜੁਆਇੰਨ ਕਰਨ ਲਈ ਮਨਜ਼ੂਰੀ ਨਹੀਂ ਦਿੰਦਾ ਹੈ" -#, fuzzy msgid "Join QQ Qun" -msgstr "ਚੈਟ ਜੁਆਇੰਨ" +msgstr "QQ Qun ਜੁਆਇੰਨ ਕਰੋ" + +msgid "Input request here" +msgstr "ਇੰਪੁੱਟ ਮੰਗ ਇੱਥੇ" #, c-format -msgid "Successfully joined Qun %s (%d)" -msgstr "" +msgid "Successfully joined Qun %s (%u)" +msgstr "Qun %s (%u) ਠੀਕ ਤਰ੍ਹਾਂ ਜੁਆਇੰਨ ਕੀਤਾ ਗਿਆ" -#, fuzzy msgid "Successfully joined Qun" -msgstr "ਤੁਸੀਂ ਕਿਊਨ ਮੈਂਬਰ ਸੋਧਿਆ ਹੈ।" +msgstr "Qun ਠੀਕ ਤਰ੍ਹਾਂ ਜੁਆਇੰਨ ਕੀਤਾ" #, c-format -msgid "Qun %d denied to join" -msgstr "" +msgid "Qun %u denied from joining" +msgstr "ਕੁਆਇੰਨ %u ਨੇ ਜੁਆਇੰਨ ਕਰਵਾਉਣ ਤੇ ਰੋਕ ਲਾਈ" msgid "QQ Qun Operation" -msgstr "QQ Qun ਕਾਰਵਾਈ" +msgstr "QQ Qun ਓਪਰੇਸ਼ਨ" -#, fuzzy msgid "Failed:" -msgstr "ਅਸਫ਼ਲ" +msgstr "ਅਸਫ਼ਲ:" -msgid "Join Qun, Unknow Reply" -msgstr "" +msgid "Join Qun, Unknown Reply" +msgstr "Qun ਜੁਆਇੰਨ, ਅਣਜਾਣ ਜਵਾਬ" -#, fuzzy msgid "Quit Qun" -msgstr "QQ Qun" +msgstr "Qun ਬੰਦ ਕਰੋ" msgid "" "Note, if you are the creator, \n" @@ -7356,194 +7144,180 @@ msgstr "" "ਨੋਟ, ਜੇ ਤੁਸੀਂ ਬਣਾਉਣ ਵਾਲੇ ਹੋ ਤਾਂ,\n" "ਇਸ ਓਪਰੇਸ਼ਨ ਨਾਲ ਇਹ ਕਿਊਨ ਵੀ ਹਟਾਇਆ ਜਾਵੇਗਾ।" -#, fuzzy -msgid "Sorry, you are not our style ..." -msgstr "ਅਫਸੋਸ, ਤੁਸੀਂ ਮੇਰੀ ਟਾਈਪ ਦੇ ਨਹੀਂ..." +msgid "Sorry, you are not our style" +msgstr "ਅਫਸੋਸ, ਤੁਸੀਂ ਮੇਰੀ ਸਟਾਈਲ ਦੇ ਨਹੀਂ" -#, fuzzy -msgid "Successfully changed Qun member" -msgstr "ਤੁਸੀਂ ਕਿਊਨ ਮੈਂਬਰ ਸੋਧਿਆ ਹੈ।" +msgid "Successfully changed Qun members" +msgstr "ਕਿਊਨ ਮੈਂਬਰ ਠੀਕ ਤਰ੍ਹਾਂ ਬਦਲਿਆ" -#, fuzzy msgid "Successfully changed Qun information" -msgstr "ਤੁਸੀਂ ਕਿਊਨ ਜਾਣਕਾਰੀ ਸੋਧੀ ਹੈ" +msgstr "Qun ਜਾਣਕਾਰੀ ਠੀਕ ਤਰ੍ਹਾਂ ਬਦਲੀ ਗਈ" msgid "You have successfully created a Qun" -msgstr "ਤੁਸੀਂ ਇੱਕ ਕਿਊਨ ਬਣਾਇਆ ਹੈ" +msgstr "ਤੁਸੀਂ ਇੱਕ Qun ਠੀਕ ਤਰ੍ਹਾਂ ਬਣਾਇਆ" -#, fuzzy -msgid "Would you like to set detailed information now?" -msgstr "ਕੀ ਤੁਸੀਂ ਕਿਊਨ ਲਈ ਵੇਰਵਾ ਹੁਣੇ ਸੈੱਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?" +msgid "Would you like to set up detailed information now?" +msgstr "ਕੀ ਤੁਸੀਂ ਵੇਰਵੇ ਸਮੇਤ ਸੈੱਟਅੱਪ ਜਾਣਕਾਰੀ ਅੱਪਡੇਟ ਕਰਨੀ ਚਾਹੁੰਦੇ ਹੋ?" msgid "Setup" msgstr "ਸੈੱਟਅੱਪ" -#, fuzzy, c-format -msgid "%d requested to join Qun %d for %s" -msgstr "ਯੂਜ਼ਰ %d ਨੇ ਗਰੁੱਪ %d ਸ਼ਾਮਲ ਕਰਨ ਵਾਸਤੇ ਮੰਗ ਕੀਤੀ" +#, c-format +msgid "%u requested to join Qun %u for %s" +msgstr "%u ਨੇ Qun %u ਨੂੰ %s ਲਈ ਜੁਆਇੰਨ ਕਰਨ ਦੀ ਮੰਗ ਕੀਤੀ ਹੈ" -#, fuzzy, c-format -msgid "%d request to join Qun %d" -msgstr "ਯੂਜ਼ਰ %d ਨੇ ਗਰੁੱਪ %d ਸ਼ਾਮਲ ਕਰਨ ਵਾਸਤੇ ਮੰਗ ਕੀਤੀ" +#, c-format +msgid "%u request to join Qun %u" +msgstr "%u ਨੇ Qun %u ਜੁਆਇੰਨ ਕਰਨ ਦੀ ਮੰਗ ਕੀਤੀ" -#, fuzzy, c-format -msgid "Failed to join Qun %d, operated by admin %d" -msgstr "ਗੱਲਬਾਤ ਵਿੱਚ ਬੱਡੀ ਆਉਣ ਲਈ ਅਸਫਲ" +#, c-format +msgid "Failed to join Qun %u, operated by admin %u" +msgstr "Qun %u ਜੁਆਇੰਨ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ, ਐਡਮਿਨ %u ਵਲੋਂ ਕਾਰਵਾਈ ਕੀਤੀ" #, c-format -msgid "<b>Joining Qun %d is approved by admin %d for %s</b>" -msgstr "" +msgid "<b>Joining Qun %u is approved by admin %u for %s</b>" +msgstr "<b>Qun %u ਜੁਆਇੰਨ ਕਰਨ ਨੂੰ ਐਡਮਿਨ %u ਵਲੋਂ %s ਲਈ ਮਨਜ਼ੂਰ ਹੈ।</b>" -#, fuzzy, c-format -msgid "<b>Removed buddy %d.</b>" -msgstr "ਬੱਡੀ ਹਟਾਓ" +#, c-format +msgid "<b>Removed buddy %u.</b>" +msgstr "<b>%u ਬੱਡੀ ਹਟਾਓ।</b>" #, c-format -msgid "<b>New buddy %d joined.</b>" -msgstr "" +msgid "<b>New buddy %u joined.</b>" +msgstr "<b>ਨਵਾਂ ਬੱਡੀ %u ਜੁਆਇੰਨ ਕੀਤਾ।</b>" #, c-format msgid "Unknown-%d" msgstr "ਅਣਜਾਣ-%d" msgid "Level" -msgstr "ਪੱਧਰ" +msgstr "ਲੈਵਲ" msgid " VIP" -msgstr "" +msgstr " VIP" msgid " TCP" -msgstr "" +msgstr " TCP" -#, fuzzy msgid " FromMobile" -msgstr "ਮੋਬਾਇਲ" +msgstr " ਮੋਬਾਇਲ-ਤੋਂ" -#, fuzzy msgid " BindMobile" -msgstr "ਮੋਬਾਇਲ" +msgstr " ਬਾਈਡ-ਮੋਬਾਇਲ" -#, fuzzy msgid " Video" -msgstr "ਸਿੱਧੀ ਵੀਡਿਓ" +msgstr " ਵੀਡਿਓ" -#, fuzzy msgid " Zone" -msgstr "ਕੋਈ ਨਹੀਂ" +msgstr " ਜ਼ੋਨ" msgid "Flag" -msgstr "" +msgstr "ਫਲੈਗ" msgid "Ver" -msgstr "" +msgstr "Ver" msgid "Invalid name" msgstr "ਗਲਤ ਨਾਂ" -#, fuzzy msgid "Select icon..." -msgstr "ਫੋਲਡਰ ਚੁਣੋ..." +msgstr "ਆਈਕਾਨ ਚੁਣੋ..." -#, fuzzy, c-format +#, c-format msgid "<b>Login time</b>: %d-%d-%d, %d:%d:%d<br>\n" -msgstr "<b>ਲਾਗਇਨ ਸਮਾਂ</b>: %s<br>\n" +msgstr "<b>ਲਾਗਇਨ ਸਮਾਂ</b>: %d-%d-%d, %d:%d:%d<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Total Online Buddies</b>: %d<br>\n" -msgstr "<b>ਹੁਣ ਆਫਲਾਇਨ</b>: %d<br>\n" +msgstr "<b>ਕੁੱਲ ਆਨਲਾਈਨ ਬੱਡੀ</b>: %d<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Last Refresh</b>: %d-%d-%d, %d:%d:%d<br>\n" -msgstr "<b>ਆਖਰੀ ਤਾਜ਼ਾ</b>: %s<br>\n" +msgstr "<b>ਆਖਰੀ ਤਾਜ਼ਾ</b>: %d-%d-%d, %d:%d:%d<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Server</b>: %s<br>\n" -msgstr "<b>ਸਰਵਰ IP</b>: %s: %d<br>\n" +msgstr "<b>ਸਰਵਰ</b>: %s<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Client Tag</b>: %s<br>\n" -msgstr "<b>ਲਾਗਇਨ ਸਮਾਂ</b>: %s<br>\n" +msgstr "<b>ਕਲਾਇਟ ਟੈਗ</b>: %s<br>\n" #, c-format msgid "<b>Connection Mode</b>: %s<br>\n" msgstr "<b>ਕੁਨੈਕਸ਼ਨ ਢੰਗ</b>: %s<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>My Internet IP</b>: %s:%d<br>\n" -msgstr "<b>ਕੁਨੈਕਸ਼ਨ ਢੰਗ</b>: %s<br>\n" +msgstr "<b>ਮੇਰਾ ਇੰਟਰਨੈੱਟ IP</b>: %s:%d<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Sent</b>: %lu<br>\n" -msgstr "<b>ਹੁਣ ਆਫਲਾਇਨ</b>: %d<br>\n" +msgstr "<b>ਭੇਜੇ</b>: %lu<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Resend</b>: %lu<br>\n" -msgstr "<b>ਆਖਰੀ ਤਾਜ਼ਾ</b>: %s<br>\n" +msgstr "<b>ਮੁੜ-ਭੇਜੋ</b>: %lu<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Lost</b>: %lu<br>\n" -msgstr "<b>ਆਖਰੀ ਤਾਜ਼ਾ</b>: %s<br>\n" +msgstr "<b>ਗੁਆਚੇ</b>: %lu<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Received</b>: %lu<br>\n" -msgstr "<b>ਆਖਰੀ ਤਾਜ਼ਾ</b>: %s<br>\n" +msgstr "<b>ਲਏ</b>: %lu<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Received Duplicate</b>: %lu<br>\n" -msgstr "<b>ਮੇਰਾ ਪਬਲਿਕ IP</b>: %s<br>\n" +msgstr "<b>ਡੁਪਲੀਕੇਟ ਮਿਲੇ</b>: %lu<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Time</b>: %d-%d-%d, %d:%d:%d<br>\n" -msgstr "<b>ਲਾਗਇਨ ਸਮਾਂ</b>: %s<br>\n" +msgstr "<b>ਸਮਾਂ</b>: %d-%d-%d, %d:%d:%d<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>IP</b>: %s<br>\n" -msgstr "<b>ਸਰਵਰ IP</b>: %s: %d<br>\n" +msgstr "<b>IP</b>: %s<br>\n" msgid "Login Information" msgstr "ਲਾਗਇਨ ਜਾਣਕਾਰੀ" msgid "<p><b>Original Author</b>:<br>\n" -msgstr "" +msgstr "<p><b>ਅਸਲੀ ਲੇਖਕ</b>:<br>\n" msgid "<p><b>Code Contributors</b>:<br>\n" -msgstr "" +msgstr "<p><b>ਕੋਡ ਯੋਗਦਾਨ</b>:<br>\n" -#, fuzzy msgid "<p><b>Lovely Patch Writers</b>:<br>\n" -msgstr "<b>ਆਖਰੀ ਤਾਜ਼ਾ</b>: %s<br>\n" +msgstr "<p><b>ਪਿਆਰੇ ਪੈਚ ਲੇਖਕ</b>:<br>\n" -#, fuzzy msgid "<p><b>Acknowledgement</b>:<br>\n" -msgstr "<b>ਹੁਣ ਆਫਲਾਇਨ</b>: %d<br>\n" +msgstr "<p><b>ਰਸੀਦ</b>:<br>\n" msgid "<p><i>And, all the boys in the backroom...</i><br>\n" -msgstr "" +msgstr "<p><i>ਅਤੇ ਸਾਰੇ ਮੁੰਡੇ ਪਿਛਲੇ ਕਮਰੇ ਵਿੱਚ ਹਨ...</i><br>\n" msgid "<i>Feel free to join us!</i> :)" -msgstr "" +msgstr "<i>ਸਾਡੇ ਨਾਲ ਹੱਥ ਵਟਾਉਣ ਲਈ ਆ ਜਾਓ!</i> :)" -#, fuzzy, c-format -msgid "About OpenQ r%s" -msgstr "%s ਬਾਰੇ" +#, c-format +msgid "About OpenQ %s" +msgstr "OpenQ %s ਬਾਰੇ" -#, fuzzy msgid "Change Icon" -msgstr "ਆਈਕਾਨ ਸੰਭਾਲੋ" +msgstr "ਆਈਕਾਨ ਬਦਲੋ" msgid "Change Password" -msgstr "ਪਾਸਵਰਡ ਤਬਦੀਲ" +msgstr "ਪਾਸਵਰਡ ਬਦਲੋ" -#, fuzzy msgid "Account Information" -msgstr "ਲਾਗਇਨ ਜਾਣਕਾਰੀ" +msgstr "ਅਕਾਊਂਟ ਜਾਣਕਾਰੀ" msgid "Update all QQ Quns" -msgstr "" +msgstr "ਸਭ QQ ਕਉਨ ਅੱਪਡੇਟ ਕਰੋ" -#, fuzzy msgid "About OpenQ" -msgstr "%s ਬਾਰੇ" +msgstr "OpenQ ਬਾਰੇ" #. *< type #. *< ui_requirement @@ -7555,132 +7329,110 @@ msgstr "%s ਬਾਰੇ" #. *< version #. * summary #. * description -#, fuzzy msgid "QQ Protocol Plugin" -msgstr "QQ ਪਰੋਟੋਕਾਲ\tਪਲੱਗਇਨ" +msgstr "QQ ਪਰੋਟੋਕਾਲ ਪਲੱਗਇਨ" -#, fuzzy msgid "Auto" -msgstr "ਪਰਮਾ" +msgstr "ਆਟੋ" -#, fuzzy msgid "Select Server" -msgstr "ਯੂਜ਼ਰ ਚੁਣੋ" +msgstr "ਸਰਵਰ ਚੁਣੋ" msgid "QQ2005" -msgstr "" +msgstr "QQ2005" msgid "QQ2007" -msgstr "" +msgstr "QQ2007" msgid "QQ2008" -msgstr "" +msgstr "QQ2008" -#. #endif -#, fuzzy msgid "Connect by TCP" msgstr "TCP ਰਾਹੀਂ ਕੁਨੈਕਟ" -#, fuzzy msgid "Show server notice" -msgstr "ਸਰਵਰ ਪੋਰਟ" +msgstr "ਸਰਵਰ ਨੋਟਿਸ ਵੇਖੋ" -#, fuzzy msgid "Show server news" -msgstr "ਸਰਵਰ ਐਡਰੈੱਸ" +msgstr "ਸਰਵਰ ਨਿਊਜ਼ ਵੇਖੋ" + +msgid "Show chat room when msg comes" +msgstr "ਜਦੋਂ msg ਆਵੇ ਤਾਂ ਗੱਲਬਾਤ ਰੂਮ ਵੇਖੋ" -#, fuzzy msgid "Keep alive interval (seconds)" -msgstr "ਚਾਲੂ ਰੱਖਣ ਗਲਤੀ" +msgstr "ਚਾਲੂ ਅੰਤਰਾਲ ਰੱਖੋ (ਸਕਿੰਟ)" -#, fuzzy msgid "Update interval (seconds)" -msgstr "ਚਾਲੂ ਰੱਖਣ ਗਲਤੀ" +msgstr "ਅੱਪਡੇਟ ਅੰਤਰਾਲ (ਸਕਿੰਟ)" -#, fuzzy -msgid "Can not decrypt server reply" -msgstr "ਸਰਵਰ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਨਹੀਂ ਹੋ ਸਕੀ" - -#, fuzzy -msgid "Can not decrypt get server reply" -msgstr "ਸਰਵਰ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਨਹੀਂ ਹੋ ਸਕੀ" +msgid "Cannot decrypt server reply" +msgstr "ਸਰਵਰ ਜਵਾਬ ਡਿਕ੍ਰਿਪਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ" #, c-format msgid "Failed requesting token, 0x%02X" -msgstr "" +msgstr "ਟੋਕਨ ਮੰਗ ਫੇਲ੍ਹ ਹੋਈ, 0x%02X" -#, fuzzy, c-format +#, c-format msgid "Invalid token len, %d" -msgstr "ਗਲਤ ਟਾਇਟਲ" +msgstr "ਗਲਤ ਟੋਕਨ ਲੰਬਾਈ, %d" #. extend redirect used in QQ2006 msgid "Redirect_EX is not currently supported" -msgstr "" +msgstr "Redirect_EX ਹਾਲੇ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।" #. need activation #. need activation #. need activation -#, fuzzy msgid "Activation required" -msgstr "ਰਜਿਸਟਰੇਸ਼ਨ ਲੋੜੀਦੀ ਹੈ" +msgstr "ਐਕਟੀਵੇਸ਼ਨ ਲੋੜੀਦੀ" #, c-format -msgid "Unknow reply code when login (0x%02X)" -msgstr "" +msgid "Unknown reply code when logging in (0x%02X)" +msgstr "ਲਾਗਇਨ ਕਰਨ ਦੌਰਾਨ ਅਣਜਾਣ ਜਵਾਬ ਕੋਡ (0x%02X)" -msgid "Keep alive error" -msgstr "ਚਾਲੂ ਰੱਖਣ ਗਲਤੀ" +msgid "Could not decrypt server reply" +msgstr "ਸਰਵਰ ਜਵਾਬ ਡਿਕ੍ਰਿਪਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ" -#, fuzzy -msgid "Requesting captcha ..." -msgstr "%s ਦੇ ਧਿਆਨ ਦੀ ਮੰਗ ਕੀਤੀ ਗਈ ਹੈ..." +msgid "Requesting captcha" +msgstr "ਕੈਪਟਚਾ ਦੀ ਮੰਗ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ" -msgid "Checking code of captcha ..." -msgstr "" +msgid "Checking captcha" +msgstr "ਕੈਪਟਚਾ ਚੈੱਕ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" -msgid "Failed captcha verify" -msgstr "" +msgid "Failed captcha verification" +msgstr "ਕੈਪਟਚਾ ਜਾਂਚ ਲਈ ਫੇਲ੍ਹ" -#, fuzzy msgid "Captcha Image" -msgstr "ਚਿੱਤਰ ਸੰਭਾਲੋ" +msgstr "ਕੈਪਟਚਾ ਚਿੱਤਰ" -#, fuzzy msgid "Enter code" -msgstr "ਪਾਸਵਰਡ ਦਿਓ" +msgstr "ਕੋਡ ਦਿਓ" -msgid "QQ Captcha Verifing" -msgstr "" +msgid "QQ Captcha Verification" +msgstr "QQ ਕੈਪਟਚਾ ਜਾਂਚ" -#, fuzzy msgid "Enter the text from the image" -msgstr "ਗਰੁੱਪ ਦਾ ਨਾਂ ਦਿਓ" +msgstr "ਚਿੱਤਰ ਤੋਂ ਟੈਕਸਟ ਦਿਓ" #, c-format -msgid "Unknow reply code when checking password (0x%02X)" -msgstr "" +msgid "Unknown reply when checking password (0x%02X)" +msgstr "ਪਾਸਵਰਡ ਚੈੱਕ ਕਰਨ ਦੌਰਾਨ ਅਣਜਾਣ ਜਵਾਬ (0x%02X)" #, c-format msgid "" -"Unknow reply code when login (0x%02X):\n" +"Unknown reply code when logging in (0x%02X):\n" "%s" msgstr "" +"ਲਾਗਇਨ ਕਰਨ ਦੌਰਾਨ ਅਣਜਾਣ ਜਵਾਬ ਕੋਡ (0x%02X):\n" +"%s" #. we didn't successfully connect. tdt->toc_fd is valid here msgid "Unable to connect." -msgstr "ਜੁੜਨ ਤੋਂ ਆਯੋਗ" +msgstr "ਕੁਨੈਕਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ ਹੈ।" msgid "Socket error" msgstr "ਸਾਕਟ ਗਲਤੀ" -#, fuzzy, c-format -msgid "" -"Lost connection with server:\n" -"%d, %s" -msgstr "" -"ਸਰਵਰ ਨਾਲ ਆਖਰੀ ਕੁਨੈਕਸ਼ਨ ਬੰਦ ਕੀਤਾ:\n" -"%s" - msgid "Unable to read from socket" msgstr "ਸਾਕਟ ਤੋਂ ਤਾਜ਼ਾ ਕਰਨ ਲਈ ਅਸਮਰੱਥ" @@ -7690,77 +7442,74 @@ msgstr "ਲਿਖਣ ਗਲਤੀ" msgid "Connection lost" msgstr "ਕੁਨੈਕਸ਼ਨ ਖਤਮ ਹੋਇਆ" -#, fuzzy -msgid "Get server ..." -msgstr "ਯੂਜ਼ਰ ਜਾਣਕਾਰੀ ਦਿਓ..." +msgid "Getting server" +msgstr "ਸਰਵਰ ਜਾਣਕਾਰੀ ਲਈ ਜਾ ਰਹੀ ਹੈ" -#, fuzzy -msgid "Request token" -msgstr "ਬੇਨਤੀ ਪਾਬੰਦੀ" +msgid "Requesting token" +msgstr "ਟੋਕਨ ਲਈ ਮੰਗ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ" msgid "Couldn't resolve host" msgstr "ਹੋਸਟ ਲੱਭਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ" -#, fuzzy msgid "Invalid server or port" -msgstr "ਗਲਤੀ" +msgstr "ਗਲਤ ਸਰਵਰ ਜਾਂ ਪੋਰਟ" -#, fuzzy -msgid "Connecting server ..." -msgstr "ਸਰਵਰ ਨਾਲ ਜੋੜੋ" +msgid "Connecting to server" +msgstr "ਸਰਵਰ ਨਾਲ ਕੁਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" -#, fuzzy msgid "QQ Error" -msgstr "QQid ਗਲਤੀ" - -msgid "Failed to send IM." -msgstr "IM ਭੇਜਣ ਲਈ ਫੇਲ੍ਹ।" +msgstr "QQ ਗਲਤੀ" -#, fuzzy, c-format +#, c-format msgid "" "Server News:\n" "%s\n" "%s\n" "%s" -msgstr "ICQ Server Relay" +msgstr "" +"ਸਰਵਰ ਨਿਊਜ਼:\n" +"%s\n" +"%s\n" +"%s" -#, fuzzy, c-format +#, c-format +msgid "%s:%s" +msgstr "%s:%s" + +#, c-format msgid "From %s:" -msgstr "ਵੱਲੋਂ" +msgstr "%s ਵੱਲੋਂ:" -#, fuzzy, c-format +#, c-format msgid "" "Server notice From %s: \n" "%s" -msgstr "ਸਰਵਰ ਹਦਾਇਤਾਂ: %s" - -msgid "Unknow SERVER CMD" msgstr "" +"%s ਵਲੋਂ ਸਰਵਰ ਨੋਟਿਸ: \n" +" %s" + +msgid "Unknown SERVER CMD" +msgstr "ਅਣਜਾਣ ਸਰਵਰ CMD" #, c-format msgid "" "Error reply of %s(0x%02X)\n" -"Room %d, reply 0x%02X" +"Room %u, reply 0x%02X" msgstr "" +"%s ਦਾ ਜਵਾਬ ਗਲਤੀ(0x%02X)\n" +"ਰੂਮ %u, ਜਵਾਬ 0x%02X" -#, fuzzy msgid "QQ Qun Command" -msgstr "ਕਮਾਂਡ" +msgstr "QQ ਕਿਉਨ ਕਮਾਂਡ" -#, c-format -msgid "Not a member of room \"%s\"\n" -msgstr "" - -msgid "Can not decrypt login reply" -msgstr "" +msgid "Could not decrypt login reply" +msgstr "ਲਾਗਇਨ ਜਵਾਬ ਡਿਕ੍ਰਿਪਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ" -#, fuzzy -msgid "Unknow LOGIN CMD" -msgstr "ਅਣਜਾਣ ਕਾਰਨ" +msgid "Unknown LOGIN CMD" +msgstr "ਅਣਜਾਣ ਲਾਗਇਨ CMD" -#, fuzzy -msgid "Unknow CLIENT CMD" -msgstr "ਅਣਜਾਣ ਕਾਰਨ" +msgid "Unknown CLIENT CMD" +msgstr "ਅਣਜਾਣ CLIENT CMD" #, c-format msgid "%d has declined the file %s" @@ -7782,20 +7531,20 @@ msgstr "<b>ਗਰੁੱਪ ਟਾਇਟਲ:</b> %s<br>" #, c-format msgid "<b>Notes Group ID:</b> %s<br>" -msgstr "<b>ਸੂਚਨਾ ਗਰੁੱਪ ID:</b> %s<br>" +msgstr "<b>ਨੋਟਿਸ ਗਰੁੱਪ ID:</b> %s<br>" #, c-format msgid "Info for Group %s" msgstr "ਗਰੁੱਪ %s ਲਈ ਜਾਣਕਾਰੀ" msgid "Notes Address Book Information" -msgstr "ਸੂਚਨਾ ਐਡਰੈੱਸ ਕਿਤਾਬ ਜਾਣਕਾਰੀ" +msgstr "ਨੋਟਿਸ ਐਡਰੈੱਸ ਬੁੱਕ ਜਾਣਕਾਰੀ" msgid "Invite Group to Conference..." msgstr "ਗਰੁੱਪ ਨੂੰ ਕਾਨਫਰੰਸ ਲਈ ਸੱਦਾ..." msgid "Get Notes Address Book Info" -msgstr "ਸੂਚਨਾ ਐਡਰੈੱਸ ਕਿਤਾਬ ਜਾਣਕਾਰੀ ਲਵੋ" +msgstr "ਨੋਟਿਸ ਐਡਰੈੱਸ ਬੁੱਕ ਜਾਣਕਾਰੀ ਲਵੋ" msgid "Sending Handshake" msgstr "ਹੈਂਡਸ਼ੇਕ ਭੇਜਿਆ ਜਾ ਰਿਹਾ ਹੈ" @@ -7822,8 +7571,7 @@ msgid "Starting Services" msgstr "ਸਰਵਿਸਾਂ ਸ਼ੁਰੂ ਕਰੋ" #, c-format -msgid "" -"A Sametime administrator has issued the following announcement on server %s" +msgid "A Sametime administrator has issued the following announcement on server %s" msgstr "ਇੱਕ ਸੇਮ-ਟਾਈਮ ਐਡਮਿਨਸਟੇਟਰ ਨੇ %s ਸਰਵਰ ਉੱਤੇ ਅੱਗੇ ਦਿੱਤੇ ਐਲਾਨ ਕੀਤਾ ਹੈ" msgid "Sametime Administrator Announcement" @@ -7920,8 +7668,7 @@ msgstr "ਕੋਈ ਸੇਮਟਾਈਮ ਕਮਿਊਨਟੀ ਸਰਵਰ ਦ msgid "" "No host or IP address has been configured for the Meanwhile account %s. " "Please enter one below to continue logging in." -msgstr "" -"ਮੀਨਵਾਇਲ ਅਕਾਊਂਟ %s ਲਈ ਕੋਈ ਹੋਸਟ ਜਾਂ IP ਐਡਰੈੱਸ ਸੰਰਚਿਤ ਨਹੀਂ ਹੈ। ਲਾਗਇਨ ਕਰਨ ਵਾਸਤੇ ਹੇਠਾਂ ਇੱਕ ਦਿਓ।" +msgstr "ਮੀਨਵਾਇਲ ਅਕਾਊਂਟ %s ਲਈ ਕੋਈ ਹੋਸਟ ਜਾਂ IP ਐਡਰੈੱਸ ਸੰਰਚਿਤ ਨਹੀਂ ਹੈ। ਲਾਗਇਨ ਕਰਨ ਵਾਸਤੇ ਹੇਠਾਂ ਇੱਕ ਦਿਓ।" msgid "Meanwhile Connection Setup" msgstr "ਮੀਨਵਾਇਲ ਕੁਨੈਕਸ਼ਨ ਸੈੱਟਅੱਪ" @@ -8039,8 +7786,7 @@ msgstr "ਗਰੁੱਪ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: ਗ msgid "" "The identifier '%s' did not match any Notes Address Book groups in your " "Sametime community." -msgstr "" -"ਪਛਾਣਕਰਤਾ '%s' ਤੁਹਾਡੀ ਸੇਮ-ਟਾਈਮ ਕਮਿਊਨਟੀ ਵਿੱਚ ਕਿਸੇ ਨੋਟ ਐਡਰੈੱਸ ਬੁੱਕ ਗਰੁੱਪ ਨਾਲ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ ਹੈ।" +msgstr "ਪਛਾਣਕਰਤਾ '%s' ਤੁਹਾਡੀ ਸੇਮ-ਟਾਈਮ ਕਮਿਊਨਟੀ ਵਿੱਚ ਕਿਸੇ ਨੋਟ ਐਡਰੈੱਸ ਬੁੱਕ ਗਰੁੱਪ ਨਾਲ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ ਹੈ।" msgid "Notes Address Book Group" msgstr "ਨੋਟ ਐਡਰੈੱਸ ਕਿਤਾਬ ਗਰੁੱਪ" @@ -8084,8 +7830,7 @@ msgstr "ਇੱਕ ਯੂਜ਼ਰ ਲਈ ਖੋਜ" msgid "" "Enter a name or partial ID in the field below to search for matching users " "in your Sametime community." -msgstr "" -"ਆਪਣੀ ਸੇਮ-ਟਾਈਮ ਕਮਿਊਨਟੀ ਵਿੱਚ ਰਲਦੇ ਯੂਜ਼ਰ ਖੋਜਣ ਵਾਸਤੇ ਅੱਗੇ ਖੇਤਰ ਵਿੱਚ ਨਾਂ ਜਾਂ ਅਧੂਰਾ ID ਦਿਓ।" +msgstr "ਆਪਣੀ ਸੇਮ-ਟਾਈਮ ਕਮਿਊਨਟੀ ਵਿੱਚ ਰਲਦੇ ਯੂਜ਼ਰ ਖੋਜਣ ਵਾਸਤੇ ਅੱਗੇ ਖੇਤਰ ਵਿੱਚ ਨਾਂ ਜਾਂ ਅਧੂਰਾ ID ਦਿਓ।" msgid "User Search" msgstr "ਯੂਜ਼ਰ ਖੋਜ" @@ -8221,14 +7966,12 @@ msgstr "ਠੀਕ ਯੂਜ਼ਰ ਚੁਣੋ" msgid "" "More than one user was found with the same public key. Select the correct " "user from the list to add to the buddy list." -msgstr "" -"ਇੱਕ ਤੋਂ ਵਧੇਰੇ ਯੂਜ਼ਰ ਇੱਕ ਪਬਲਿਕ ਕੁੰਜੀ ਨਾਲ ਮਿਲੇ ਹਨ। ਲਿਸਟ ਵਿੱਚ ਬੱਡੀ ਨੂੰ ਸ਼ਾਮਿਲ ਕਰਨ ਲਈ ਠੀਕ ਯੂਜ਼ਰ ਚੁਣੋ।" +msgstr "ਇੱਕ ਤੋਂ ਵਧੇਰੇ ਯੂਜ਼ਰ ਇੱਕ ਪਬਲਿਕ ਕੁੰਜੀ ਨਾਲ ਮਿਲੇ ਹਨ। ਲਿਸਟ ਵਿੱਚ ਬੱਡੀ ਨੂੰ ਸ਼ਾਮਿਲ ਕਰਨ ਲਈ ਠੀਕ ਯੂਜ਼ਰ ਚੁਣੋ।" msgid "" "More than one user was found with the same name. Select the correct user " "from the list to add to the buddy list." -msgstr "" -"ਇੱਕ ਤੋਂ ਵਧੇਰੇ ਯੂਜ਼ਰ ਇਸੇ ਨਾਂ ਨਾਲ ਹੀ ਲੱਭੇ ਹਨ। ਲਿਸਟ ਵਿੱਚ ਬੱਡੀ ਨੂੰ ਸ਼ਾਮਿਲ ਕਰਨ ਲਈ ਠੀਕ ਯੂਜ਼ਰ ਚੁਣੋ।" +msgstr "ਇੱਕ ਤੋਂ ਵਧੇਰੇ ਯੂਜ਼ਰ ਇਸੇ ਨਾਂ ਨਾਲ ਹੀ ਲੱਭੇ ਹਨ। ਲਿਸਟ ਵਿੱਚ ਬੱਡੀ ਨੂੰ ਸ਼ਾਮਿਲ ਕਰਨ ਲਈ ਠੀਕ ਯੂਜ਼ਰ ਚੁਣੋ।" msgid "Detached" msgstr "ਅੱਡ" @@ -8352,7 +8095,6 @@ msgstr "<br><b>ਚੈਨਲ HMAC:</b> %s" msgid "<br><b>Channel Topic:</b><br>%s" msgstr "<br><b>ਚੈਨਲ ਵਿਸ਼ਾ:</b><br>%s" -#, c-format msgid "<br><b>Channel Modes:</b> " msgstr "<br><b>ਚੈਨਲ ਮੋਡ:</b> " @@ -8377,7 +8119,6 @@ msgstr "ਚੈਨਲ ਪ੍ਹੈਰਾ" msgid "Channel Public Keys List" msgstr "ਚੈਨਲ ਪਬਲਿਕ ਕੁੰਜੀ ਲਿਸਟ" -#, c-format msgid "" "Channel authentication is used to secure the channel from unauthorized " "access. The authentication may be based on passphrase and digital " @@ -8452,8 +8193,7 @@ msgid "Set Secret Channel" msgstr "ਗੁਪਤ ਚੈਨਲ ਸੈੱਟ ਕਰੋ" #, c-format -msgid "" -"You have to join the %s channel before you are able to join the private group" +msgid "You have to join the %s channel before you are able to join the private group" msgstr "ਤੁਹਾਨੂੰ ਪ੍ਰਾਈਵੇਟ ਗਰੁੱਪ ਵਿੱਚ ਦਾਖਲ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ %s ਚੈਨਲ ਵਿੱਚ ਦਾਖਲ ਹੋਣਾ ਪਵੇਗਾ" msgid "Join Private Group" @@ -8734,8 +8474,7 @@ msgstr "SILC ਸਰਵਰ ਨਾਲ ਜੁੜਨ ਲਈ ਸਮੱਸਿਆ ਹ msgid "Key Exchange failed" msgstr "ਕੁੰਜੀ ਤਬਾਦਲਾ ਅਸਫਲ" -msgid "" -"Resuming detached session failed. Press Reconnect to create new connection." +msgid "Resuming detached session failed. Press Reconnect to create new connection." msgstr "ਮੁੜ-ਜੁੜਨ ਸਮੇਂ ਸ਼ੈਸ਼ਨ ਅਸਫਲ ਹੈ। ਨਵਾਂ ਕੁਨੈਕਸ਼ਨ ਬਣਾਉਣ ਲਈ ਮੁੜ-ਜੁੜੋ ਨੂੰ ਦਬਾਓ।" msgid "Connection failed" @@ -8763,14 +8502,13 @@ msgstr "SILC ਪਰੋਟੋਕਾਲ ਸ਼ੁਰੂ ਨਹੀਂ ਕੀਤਾ msgid "Error loading SILC key pair" msgstr "SILC ਕੁੰਜੀ ਜੋੜਾ ਲੋਡ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ" -#, fuzzy, c-format +#, c-format msgid "Download %s: %s" -msgstr "%s 'ਤੇ ਯੂਜ਼ਰ: %s" +msgstr "%s ਡਾਊਨਲੋਡ: %s" msgid "Your Current Mood" -msgstr "ਤੁਹਾਡਾ ਮੌਜੂਦਾ ਚਿੱਤ(ਮੂਡ)" +msgstr "ਤੁਹਾਡਾ ਮੌਜੂਦਾ ਚਿੱਤ" -#, c-format msgid "Normal" msgstr "ਸਧਾਰਨ" @@ -8794,10 +8532,10 @@ msgid "Video conferencing" msgstr "ਵੀਡਿਓ ਕਾਨਫਰੰਸ" msgid "Your Current Status" -msgstr "ਤੁਹਾਡਾ ਮੌਜੂਦਾ ਸਥਿਤੀ" +msgstr "ਤੁਹਾਡੀ ਮੌਜੂਦਾ ਹਾਲਤ" msgid "Online Services" -msgstr "ਆਨਲਾਇਨ ਸਰਵਿਸਾਂ" +msgstr "ਆਨਲਾਈਨ ਸਰਵਿਸਾਂ" msgid "Let others see what services you are using" msgstr "ਹੋਰਾਂ ਨੂੰ ਇਹ ਵੇਖਣ ਦਿਓ ਕਿ ਤੁਸੀਂ ਕਿਹੜੀਆਂ ਸਰਵਿਸਾਂ ਵਰਤ ਰਹੇ ਹੋ" @@ -8916,8 +8654,7 @@ msgid "msg <nick> <message>: Send a private message to a user" msgstr "msg <nick> <message>: Send a private message to a user" msgid "query <nick> [<message>]: Send a private message to a user" -msgstr "" -"query <nick> [<message>]: Send a private message to a user" +msgstr "query <nick> [<message>]: Send a private message to a user" msgid "motd: View the server's Message Of The Day" msgstr "motd: ਸਰਵਰ ਦਾ ਦਿਨ ਦਾ ਸੁਨੇਹਾ ਵੇਖੋ" @@ -9141,43 +8878,33 @@ msgstr "ਵਾਇਟਬੋਰਡ" msgid "No server statistics available" msgstr "ਕੋਈ ਸਰਵਰ ਅੰਕੜੇ ਉਪਲੱਬਧ ਨਹੀਂ" -#, c-format msgid "Failure: Version mismatch, upgrade your client" msgstr "ਅਸਫਲ: ਵਰਜਨ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ ਹੈ, ਤੁਹਾਨੂੰ ਨਵੇਂ ਕਲਾਇਟ ਦੀ ਲੋੜ ਹੈ" -#, c-format msgid "Failure: Remote does not trust/support your public key" msgstr "ਅਸਫਲ: ਰਿਮੋਟ ਤੁਹਾਡੀ ਪਬਲਿਕ ਕੁੰਜੀ ਉੱਤੇ ਭਰੋਸਾ/ਸਹਾਇਕ ਨਹੀਂ ਹੈ" -#, c-format msgid "Failure: Remote does not support proposed KE group" msgstr "ਅਸਫਲ: ਰਿਮੋਟ ਦਿੱਤੇ KE ਗਰੁੱਪ ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹੈ" -#, c-format msgid "Failure: Remote does not support proposed cipher" msgstr "ਅਸਫਲ: ਰਿਮੋਟ ਦਿੱਤੇ ਸੀਫ਼ਰ ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹੈ" -#, c-format msgid "Failure: Remote does not support proposed PKCS" msgstr "ਅਸਫਲ: ਰਿਮੋਟ ਦਿੱਤੇ PKCS ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹੈ" -#, c-format msgid "Failure: Remote does not support proposed hash function" msgstr "ਅਸਫਲ: ਰਿਮੋਟ ਦਿੱਤੇ ਹੈਂਸ ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹੈ" -#, c-format msgid "Failure: Remote does not support proposed HMAC" msgstr "ਅਸਫਲ: ਰਿਮੋਟ ਦਿੱਤੇ HMAC ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹੈ" -#, c-format msgid "Failure: Incorrect signature" msgstr "ਗਲਸ: ਗਲਤ ਦਸਤਖਤ" -#, c-format msgid "Failure: Invalid cookie" msgstr "ਅਸਫਲ: ਗਲਤ ਕੂਕੀ" -#, c-format msgid "Failure: Authentication failed" msgstr "ਅਸਫ਼ਲ: ਪ੍ਰਮਾਣਕਿਤਾ ਅਸਫ਼ਲ" @@ -9206,10 +8933,12 @@ msgstr "ਸੁਣਨ ਸਾਕਟ ਬਣ ਨਹੀਂ ਸਕੀ ਹੈ" msgid "Could not resolve hostname" msgstr "ਹੋਸਟ-ਨਾਂ ਹੱਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ" -#, fuzzy msgid "SIP usernames may not contain whitespaces or @ symbols" msgstr "SIP ਸਕਰੀਨ ਨਾਂ ਵਿੱਚ ਖਾਲੀ ਥਾਂ ਜਾਂ @ ਨਿਸ਼ਾਨ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ" +msgid "SIP connect server not specified" +msgstr "SIP ਕੁਨੈਕਟ ਸਰਵਰ ਨਹੀਂ ਦਿੱਤਾ" + #. *< type #. *< ui_requirement #. *< flags @@ -9219,11 +8948,11 @@ msgstr "SIP ਸਕਰੀਨ ਨਾਂ ਵਿੱਚ ਖਾਲੀ ਥਾਂ ਜਾ #. *< name #. *< version msgid "SIP/SIMPLE Protocol Plugin" -msgstr "SIP/SIMPLE ਪ੍ਰੋਟੋਕਾਲ ਪਲੱਗਇਨ" +msgstr "SIP/SIMPLE ਪਰੋਟੋਕਾਲ ਪਲੱਗਇਨ" #. * summary msgid "The SIP/SIMPLE Protocol Plugin" -msgstr "SIP/SIMPLE ਪ੍ਰੋਟੋਕਾਲ ਪਲੱਗਇਨ" +msgstr "SIP/SIMPLE ਪਰੋਟੋਕਾਲ ਪਲੱਗਇਨ" msgid "Publish status (note: everyone may watch you)" msgstr "ਸਟੇਟਸ ਦਿਓ (ਨੋਟ: ਹਰੇਕ ਤੁਹਾਨੂੰ ਵੇਖ ਸਕਦਾ ਹੈ)" @@ -9275,7 +9004,6 @@ msgstr "%s ਇਸ ਸਮੇਂ ਲਾਗਇਨ ਨਹੀਂ ਹੈ।" msgid "Warning of %s not allowed." msgstr "%s ਲਈ ਉਡੀਕ ਸਵੀਕਾਰ ਨਹੀਂ ਹੈ।" -#, c-format msgid "A message has been dropped, you are exceeding the server speed limit." msgstr "ਇੱਕ ਸੁਨੇਹਾ ਗੁਆ ਦਿੱਤਾ ਗਿਆ ਹੈ, ਤੁਸੀਂ ਸਰਵਰ ਗਤੀ ਸੀਮਾ ਤੋਂ ਵੱਧ ਗਏ ਹੋ।" @@ -9295,39 +9023,30 @@ msgstr "ਤੁਸੀਂ %s ਤੋਂ ਇੱਕ IM ਗੁਆ ਲਿਆ ਹੈ, msgid "You missed an IM from %s because it was sent too fast." msgstr "ਤੁਸੀਂ %s ਤੋਂ ਇੱਕ IM ਗੁਆ ਲਿਆ ਹੈ, ਕਿਉਕਿ ਇਹ ਬਹੁਤ ਤੇਜ਼ੀ ਨਾਲ ਭੇਜਿਆ ਗਿਆ ਹੈ।" -#, c-format msgid "Failure." msgstr "ਅਸਫਲ ਹੈ।" -#, c-format msgid "Too many matches." msgstr "ਬਹੁਤ ਮੇਲ ਹਨ।" -#, c-format msgid "Need more qualifiers." msgstr "ਹੋਰ ਯੋਗਤਾ ਦੀ ਲੋੜ ਹੈ।" -#, c-format msgid "Dir service temporarily unavailable." msgstr "ਡਾਈ ਸਰਵਿਸ ਆਰਜ਼ੀ ਤੌਰ ਤੇ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ।" -#, c-format msgid "Email lookup restricted." msgstr "ਈਮੇਲ ਖੋਜ ਪਾਬੰਦੀ ਹੈ।" -#, c-format msgid "Keyword ignored." msgstr "ਸ਼ਬਦ ਅਣਡਿੱਠਾ" -#, c-format msgid "No keywords." msgstr "ਕੋਈ ਸ਼ਬਦ ਨਹੀਂ ਹੈ।" -#, c-format msgid "User has no directory information." msgstr "ਯੂਜ਼ਰ ਦੀ ਕੋਈ ਡਾਇਰੈਕਟਰੀ ਜਾਣਕਾਰੀ ਨਹੀਂ ਹੈ।" -#, c-format msgid "Country not supported." msgstr "ਦੇਸ਼ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।" @@ -9335,19 +9054,15 @@ msgstr "ਦੇਸ਼ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।" msgid "Failure unknown: %s." msgstr "ਅਣਜਾਣੀ ਅਸਫਲਤਾ: %s" -#, fuzzy, c-format msgid "Incorrect username or password." -msgstr "ਗਲਤ ਸਕਰੀਨ ਨਾਂ ਜਾਂ ਪਾਸਵਰਡ।" +msgstr "ਗਲਤ ਯੂਜ਼ਰ-ਨਾਂ ਜਾਂ ਪਾਸਵਰਡ।" -#, c-format msgid "The service is temporarily unavailable." msgstr "ਸਰਵਿਸ ਆਰਜ਼ੀ ਤੌਰ ਉੱਤੇ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ।" -#, c-format msgid "Your warning level is currently too high to log in." msgstr "ਤੁਹਾਡਾ ਚੇਤਾਵਨੀ ਲੈਵਲ ਇੰਨਾ ਜ਼ਿਆਦਾ ਹੈ ਕਿ ਲਾਗਇਨ ਨਹੀਂ ਹੋਇਆ ਜਾਂਦਾ ਹੈ।" -#, c-format 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." @@ -9480,13 +9195,11 @@ msgstr "ਤੁਹਾਡਾ ਅਕਾਊਂਟ ਤਾਲਾਬੰਦ ਹੈ, Yaho #, c-format msgid "Unknown error number %d. Logging into the Yahoo! website may fix this." -msgstr "" -"ਅਣਜਾਣੀ ਗਲਤੀ ਨੰਬਰ %d ਹੈ। Yahoo! ਵੈਬਸਾਇਟ ਉੱਤੇ ਲਾਗਇਨ ਕਰਨ ਨਾਲ ਸਮੱਸਿਆ ਹੱਲ ਹੋ ਸਕਦੀ ਹੈ।" +msgstr "ਅਣਜਾਣੀ ਗਲਤੀ ਨੰਬਰ %d ਹੈ। Yahoo! ਵੈਬਸਾਇਟ ਉੱਤੇ ਲਾਗਇਨ ਕਰਨ ਨਾਲ ਸਮੱਸਿਆ ਹੱਲ ਹੋ ਸਕਦੀ ਹੈ।" #, c-format msgid "Could not add buddy %s to group %s to the server list on account %s." -msgstr "" -"ਸੁਨੇਹੀ %s ਨੂੰ ਗਰੁੱਪ %s ਵਿੱਚ ਸਰਵਰ ਲਿਸਟ ਉੱਤੇ ਅਕਾਊਂਟ %s ਲਈ ਸ਼ਾਮਿਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ ਹੈ।" +msgstr "ਸੁਨੇਹੀ %s ਨੂੰ ਗਰੁੱਪ %s ਵਿੱਚ ਸਰਵਰ ਲਿਸਟ ਉੱਤੇ ਅਕਾਊਂਟ %s ਲਈ ਸ਼ਾਮਿਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ ਹੈ।" msgid "Could not add buddy to server list" msgstr "ਸਰਵਰ ਲਿਸਟ ਵਿੱਚ ਬੱਡੀ ਸ਼ਾਮਿਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ" @@ -9586,9 +9299,8 @@ msgstr "list: ਯਾਹੂ ਨੈੱਟਵਰਕ ਉੱਤੇ ਰੂਮ ਲਿ msgid "doodle: Request user to start a Doodle session" msgstr "ਡੂਡਲ: ਯੂਜ਼ਰ ਨੂੰ ਇੱਕ ਘੁੱਗੂ ਘਾਂਘੜੇ (ਡੂਡਲ) ਸ਼ੈਸ਼ਨ ਸ਼ੁਰੂ ਕਰਨ ਦੀ ਮੰਗ" -#, fuzzy msgid "Yahoo ID..." -msgstr "Yahoo! ID" +msgstr "Yahoo ID..." #. *< type #. *< ui_requirement @@ -9601,7 +9313,7 @@ msgstr "Yahoo! ID" #. * summary #. * description msgid "Yahoo Protocol Plugin" -msgstr "Yahoo ਪ੍ਰੋਟੋਕਾਲ ਪਲੱਗਇਨ" +msgstr "Yahoo ਪਰੋਟੋਕਾਲ ਪਲੱਗਇਨ" msgid "Yahoo Japan" msgstr "Yahoo ਜਾਪਾਨ" @@ -9648,9 +9360,9 @@ msgstr "ਘੁੱਗੂ ਘਾਂਘੜੇ (ਡੂਡਲ) ਮੰਗ ਭੇਜੋ msgid "Unable to establish file descriptor." msgstr "ਫਾਇਲ ਵੇਰਵਾ ਬਣਾਉਣ ਲਈ ਅਸਫਲ ਹੈ।" -#, fuzzy, c-format +#, c-format msgid "%s is trying to send you a group of %d files.\n" -msgstr "%s %s ਫਾਇਲ ਭੇਜਣ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰ ਰਿਹਾ ਹੈ" +msgstr "%s ਤੁਹਾਨੂੰ %d ਫਾਇਲਾਂ ਦਾ ਗਰੁੱਪ ਭੇਜਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਿਹਾ ਹੈ।।\n" msgid "Yahoo! Japan Profile" msgstr "Yahoo! ਜਾਪਾਨ ਪ੍ਰੋਫਾਇਲ" @@ -9689,19 +9401,13 @@ msgid "Cool Link 2" msgstr "ਸਬੰਧ 2" msgid "Cool Link 3" -msgstr "ਸਬੰਧ 3" +msgstr "ਵਧੀਆ ਲਿੰਕ 3" msgid "Last Update" msgstr "ਆਖਰੀ ਅੱਪਡੇਟ" -#, c-format -msgid "User information for %s unavailable" -msgstr "%s ਲਈ ਯੂਜ਼ਰ ਜਾਣਕਾਰੀ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ" - -msgid "" -"Sorry, this profile seems to be in a language or format that is not " -"supported at this time." -msgstr "ਅਫਸੋਸ ਹੈ, ਪਰ ਇਹ ਪ੍ਰੋਫਾਇਲ ਉਸ ਭਾਸ਼ਾ ਵਿੱਚ ਹੈ, ਜੋ ਕਿ ਅਜੇ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।" +msgid "This profile is in a language or format that is not supported at this time." +msgstr "ਇਹ ਪ੍ਰੋਫਾਇਲ ਉਸ ਭਾਸ਼ਾ ਜਾਂ ਫਾਰਮੈਟ ਵਿੱਚ ਹੈ, ਜੋ ਕਿ ਅਜੇ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।" msgid "" "Could not retrieve the user's profile. This most likely is a temporary " @@ -9835,11 +9541,9 @@ msgid "topic <instance>: Set the instance to be used on this class" msgstr "topic <instance>: Set the instance to be used on this class" msgid "sub <class> <instance> <recipient>: Join a new chat" -msgstr "" -"sub <class> <instance> <recipient>: ਗੱਲਬਾਤ ਵਿੱਚ ਦਾਖਲ ਹੋਇਆ" +msgstr "sub <class> <instance> <recipient>: ਗੱਲਬਾਤ ਵਿੱਚ ਦਾਖਲ ਹੋਇਆ" -msgid "" -"zi <instance>: Send a message to <message,<i>instance</i>,*>" +msgid "zi <instance>: Send a message to <message,<i>instance</i>,*>" msgstr "zi <instance>: <message,<i>instance</i>,* ਨੂੰ ਸੁਨੇਹਾ ਭੇਜਿਆ ਹੈ>" msgid "" @@ -9988,21 +9692,18 @@ msgid "Accept chat invitation?" msgstr "ਕੀ ਗੱਲਬਾਤ ਸੱਦਾ ਮੰਨਜ਼ੂਰ ਕਰਨਾ ਹੈ?" #. Shortcut -#, fuzzy msgid "Shortcut" -msgstr "ਲੜੀਬੱਧ" +msgstr "ਸ਼ਾਰਟਕੱਟ" -#, fuzzy msgid "The text-shortcut for the smiley" -msgstr "GTK+ ਪਾਠ ਸ਼ਾਰਟਕੱਟ ਥੀਮ" +msgstr "ਸਮਾਈਲੀ ਲਈ ਟੈਕਸਟ-ਸ਼ਾਰਟਕੱਟ" #. Stored Image -#, fuzzy msgid "Stored Image" -msgstr "ਚਿੱਤਰ ਸੰਭਾਲੋ" +msgstr "ਸੰਭਾਲਿਆ ਚਿੱਤਰ" msgid "Stored Image. (that'll have to do for now)" -msgstr "" +msgstr "ਸੰਭਾਲਿਆ ਚਿੱਤਰ।(ਉਹ ਹੁਣ ਕਰਨਾ ਹੋਵੇਗਾ)" msgid "SSL Connection Failed" msgstr "SSL ਕੁਨੈਕਸ਼ਨ ਫੇਲ੍ਹ" @@ -10029,7 +9730,7 @@ msgid "Mobile" msgstr "ਮੋਬਾਇਲ" msgid "Listening to music" -msgstr "" +msgstr "ਸੰਗੀਤ ਸੁਣ ਰਿਹਾ/ਰਹੀ ਹਾਂ" #, c-format msgid "%s (%s) changed status from %s to %s" @@ -10082,7 +9783,7 @@ msgstr "" "ਨਾਂ %s~ ਬਦਲਿਆ ਗਿਆ ਹੈ।" msgid "Calculating..." -msgstr "ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ...." +msgstr "ਗਿਣਤੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ..." msgid "Unknown." msgstr "ਅਣਜਾਣ" @@ -10131,9 +9832,9 @@ msgstr "%s ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ: ਕਈ ਵਾ msgid "Unable to connect to %s" msgstr "%s ਨਾਲ ਜੁੜਨ ਲਈ ਅਸਮਰੱਥ" -#, fuzzy, c-format +#, c-format msgid "Error reading from %s: response too long (%d bytes limit)" -msgstr "%s ਤੋਂ ਪੜ੍ਹਨ ਦੌਰਾਨ ਗਲਤੀ: %s" +msgstr "%s ਤੋਂ ਪੜ੍ਹਨ ਦੌਰਾਨ ਗਲਤੀ: ਜਵਾਬ ਬਹੁਤ ਲੰਮਾ ਹੈ (%d ਬਾਈਟ ਲਿਮਟ)" #, c-format msgid "" @@ -10157,36 +9858,31 @@ msgstr "%s ਨਾਲ ਜੁੜਨ ਲਈ ਅਸਮਰੱਥ: %s" #, c-format msgid " - %s" -msgstr "" +msgstr " - %s" -#, fuzzy, c-format +#, c-format msgid " (%s)" -msgstr "%s (%s)" +msgstr " (%s)" #. 10053 -#, c-format msgid "Connection interrupted by other software on your computer." -msgstr "" +msgstr "ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ ਉੱਤੇ ਕੁਨੈਕਸ਼ਨ ਨੂੰ ਹੋਰ ਸਾਫਟਵੇਅਰਾਂ ਵਲੋਂ ਰੋਕਿਆ।" #. 10054 -#, fuzzy, c-format msgid "Remote host closed connection." -msgstr "ਰਿਮੋਟ ਯੂਜ਼ਰ ਨੇ ਕੁਨੈਕਸ਼ਨ ਬੰਦ ਕਰ ਦਿੱਤਾ ਹੈ।" +msgstr "ਰਿਮੋਟ ਹੋਸਟ ਨੇ ਕੁਨੈਕਸ਼ਨ ਬੰਦ ਕਰ ਦਿੱਤਾ ਹੈ।" #. 10060 -#, fuzzy, c-format msgid "Connection timed out." -msgstr "ਕੁਨੈਕਸ਼ਨ ਟਾਈਮ-ਆਉਟ" +msgstr "ਕੁਨੈਕਸ਼ਨ ਟਾਈਮ-ਆਉਟ ਹੋਇਆ।" #. 10061 -#, fuzzy, c-format msgid "Connection refused." -msgstr "ਕੁਨੈਕਸ਼ਨ ਮੁੜ-ਸੈੱਟ ਕੀਤਾ ਗਿਆ" +msgstr "ਕੁਨੈਕਸ਼ਨ ਤੋਂ ਇਨਕਾਰ ਕੀਤਾ।" #. 10048 -#, fuzzy, c-format msgid "Address already in use." -msgstr "ਇਹ ਗੱਲ ਨਾਂ ਪਹਿਲਾਂ ਹੀ ਵਰਤੋਂ 'ਚ ਹੈ" +msgstr "ਐਡਰੈੱਸ ਪਹਿਲਾਂ ਹੀ ਵਰਤੋਂ ਅਧੀਨ ਹੈ।" msgid "Internet Messenger" msgstr "ਇੰਟਰਨੈਟ ਮੈਸੰਜ਼ਰ" @@ -10295,9 +9991,8 @@ msgstr "ਅਕਾਊਂਟ ਸ਼ਾਮਲ" msgid "_Basic" msgstr "ਬੇਸਿਕ(_B)" -#, fuzzy msgid "Create _this new account on the server" -msgstr "ਸਰਵਰ ਉੱਤੇ ਇਹ ਨਵਾਂ ਅਕਾਊਂਟ ਬਣਾਓ" +msgstr "ਸਰਵਰ ਉੱਤੇ ਇਹ ਨਵਾਂ ਅਕਾਊਂਟ ਬਣਾਓ(_t)" msgid "_Advanced" msgstr "ਤਕਨੀਕੀ(_A)" @@ -10308,7 +10003,7 @@ msgstr "ਯੋਗ ਕੀਤਾ" msgid "Protocol" msgstr "ਪਰੋਟੋਕਾਲ" -#, fuzzy, c-format +#, c-format msgid "" "<span size='larger' weight='bold'>Welcome to %s!</span>\n" "\n" @@ -10322,17 +10017,16 @@ msgid "" msgstr "" "<span size='larger' weight='bold'>%s ਵਲੋਂ ਜੀ ਆਇਆਂ ਨੂੰ!</span>\n" "\n" -"ਤੁਹਾਡੇ ਕੋਲ ਕੋਈ ਵੀ IM ਅਕਾਊਂਟ ਸੰਰਚਿਤ ਨਹੀਂ ਹੈ। %s ਨਾਲ ਕੁਨੈਕਟ ਕਰਨ ਵਾਸਤੇ ਹੇਠਾਂ <b>ਸ਼ਾਮਲ</b> ਬਟਨ " +"ਤੁਹਾਡੇ ਕੋਲ ਕੋਈ ਵੀ IM ਅਕਾਊਂਟ ਸੰਰਚਿਤ ਨਹੀਂ ਹੈ। %s ਨਾਲ ਕੁਨੈਕਟ ਕਰਨ ਵਾਸਤੇ ਹੇਠਾਂ <b>ਸ਼ਾਮਲ...</b> ਬਟਨ " "ਦੱਬੋ ਅਤੇ ਆਪਣਾ ਪਹਿਲਾਂ ਅਕਾਊਂਟ ਸੰਰਚਿਤ ਕਰੋ। ਜੇ ਤੁਸੀਂ %s ਨੂੰ ਕਈ IM ਅਕਾਊਂਟਾਂ ਨਾਲ ਕੁਨੈਕਟ ਕਰਨਾ ਚਾਹੁੰਦੇ " -"ਹੋ ਤਾਂ ਸਭ ਦੀ ਸੰਰਚਨਾ ਲਈ <b>ਸ਼ਾਮਲ</b> ਨੂੰ ਫੇਰ ਦੱਬੋ।\n" +"ਹੋ ਤਾਂ ਸਭ ਦੀ ਸੰਰਚਨਾ ਲਈ <b>ਸ਼ਾਮਲ...</b> ਨੂੰ ਫੇਰ ਦੱਬੋ।\n" "\n" -"ਤੁਸੀਂ ਇਹ ਵਿੰਡੋ ਉੱਤੇ ਬੱਡ ਲਿਸਟ ਵਿੰਡੋ ਵਿੱਚ <b>ਅਕਾਊਂਟ->ਸ਼ਾਮਲ/ਸੋਧ</b> ਰਾਹੀਂ ਅਕਾਊਂਟ ਸ਼ਾਮਲ, ਸੋਧਣ ਜਾਂ " +"ਤੁਸੀਂ ਇਹ ਵਿੰਡੋ ਉੱਤੇ ਬੇਲੀ (ਬੱਡੀ) ਲਿਸਟ ਵਿੰਡੋ ਵਿੱਚ <b>ਅਕਾਊਂਟ->ਅਕਾਊਂਟ ਪਰਬੰਧ</b> ਰਾਹੀਂ ਅਕਾਊਂਟ ਸ਼ਾਮਲ, ਸੋਧਣ ਜਾਂ " "ਹਟਾਉਣ ਵਾਸਤੇ ਆ ਸਕਦੇ ਹੋ।" #, c-format msgid "You have %d contact named %s. Would you like to merge them?" -msgid_plural "" -"You currently have %d contacts named %s. Would you like to merge them?" +msgid_plural "You currently have %d contacts named %s. Would you like to merge them?" msgstr[0] "ਤੁਹਾਡੇ ਕੋਲ %d ਸੰਪਰਕ %s ਨਾਂ ਨਾਲ ਹਨ। ਕੀ ਤੁਸੀਂ ਮਿਲਾਉਣੇ ਚਾਹੁੰਦੇ ਹੋ?" msgstr[1] "ਤੁਹਾਡੇ ਕੋਲ ਇਸ ਸਮੇਂ %d ਸੰਪਰਕ %s ਨਾਂ ਨਾਲ ਹਨ। ਕੀ ਤੁਸੀਂ ਮਿਲਾਉਣੇ ਚਾਹੁੰਦੇ ਹੋ?" @@ -10345,13 +10039,11 @@ msgstr "" "ਗੱਲਬਾਤ ਵਿੰਡੋ ਵਰਤਣ ਲਈ ਸਹਾਇਕ ਹੈ। ਤੁਸੀਂ ਉਨ੍ਹਾਂ ਨੂੰ ਸੰਪਰਕ ਦੇ ਮੇਨੂ ਤੋਂ 'ਫੈਲਾਓ' ਚੁਣ ਕੇ ਫੇਰ ਅੱਡ ਅੱਡ ਕਰ " "ਸਕਦੇ ਹੋ।" -#, fuzzy msgid "Please update the necessary fields." msgstr "ਲੋੜੀਦੇ ਖੇਤਰ ਅੱਪਡੇਟ ਕਰੋ ਜੀ।" -#, fuzzy msgid "Room _List" -msgstr "ਰੂਮ ਲਿਸਟ" +msgstr "ਰੂਮ ਲਿਸਟ(_L)" msgid "" "Please enter the appropriate information about the chat you would like to " @@ -10394,9 +10086,8 @@ msgstr "ਏਲੀਆਸ(_A)..." msgid "_Remove" msgstr "ਹਟਾਓ(_R)" -#, fuzzy msgid "Set Custom Icon" -msgstr "ਕਸਟਮ ਆਈਕਾਨ ਸੈੱਟ..." +msgstr "ਕਸਟਮ ਆਈਕਾਨ ਸੈੱਟ ਕਰੋ" msgid "Remove Custom Icon" msgstr "ਕਸਟਮ ਆਈਕਾਨ ਹਟਾਓ" @@ -10423,9 +10114,8 @@ msgstr "ਆਟੋ-ਜੁਆਇੰਨ" msgid "Persistent" msgstr "ਪੱਕਾ" -#, fuzzy msgid "_Edit Settings..." -msgstr "ਸੈਟਿੰਗ ਸੋਧ" +msgstr "ਸੈਟਿੰਗ ਸੋਧ(_E)..." msgid "_Collapse" msgstr "ਸਮੇਟੋ(_C)" @@ -10436,16 +10126,14 @@ msgstr "ਫੈਲਾਓ(_E)" msgid "/Tools/Mute Sounds" msgstr "/ਟੂਲ/ਆਵਾਜ਼ ਚੁੱਪ ਰੱਖੋ" -msgid "" -"You are not currently signed on with an account that can add that buddy." +msgid "You are not currently signed on with an account that can add that buddy." msgstr "ਤੁਸੀਂ ਇਸ ਸਮੇਂ ਇੱਕ ਅਕਾਊਂਟ ਨਾਲ ਲਾਗਇਨ ਨਹੀਂ ਹੋ, ਤਾਂ ਕਿ ਬੱਡੀ ਨੂੰ ਸ਼ਾਮਿਲ ਕੀਤਾ ਜਾ ਸਕੇ।" #. I don't believe this can happen currently, I think #. * everything that calls this function checks for one of the #. * above node types first. -#, fuzzy msgid "Unknown node type" -msgstr "ਅਣਜਾਣ ਗਲਤੀ ਕੋਡ %d" +msgstr "ਅਣਜਾਣ ਨੋਡ ਟਾਈਪ" #. Buddies menu msgid "/_Buddies" @@ -10467,7 +10155,7 @@ msgid "/Buddies/Sh_ow" msgstr "/ਬੱਡੀ/ਵੇਖੋ(_o)" msgid "/Buddies/Show/_Offline Buddies" -msgstr "/ਬੱਡੀ/ਵੇਖੋ/ਆਫਲਾਇਨ ਬੱਡੀ(_O)" +msgstr "/ਬੱਡੀ/ਵੇਖੋ/ਆਫਲਾਈਨ ਬੱਡੀ(_O)" msgid "/Buddies/Show/_Empty Groups" msgstr "/ਬੱਡੀ/ਵੇਖੋ/ਖਾਲੀ ਗਰੁੱਪ(_E)" @@ -10485,13 +10173,13 @@ msgid "/Buddies/_Sort Buddies" msgstr "/ਬੱਡੀ/ਬੱਡੀ ਕ੍ਰਮਬੱਧ(_S)" msgid "/Buddies/_Add Buddy..." -msgstr "/ਬੱਡੀ/ਬੱਡੀ ਸ਼ਾਮਿਲ(_A)..." +msgstr "/ਬੱਡੀ/ਬੱਡੀ ਸ਼ਾਮਲ(_A)..." msgid "/Buddies/Add C_hat..." msgstr "/ਬੱਡੀ/ਗੱਲਬਾਤ ਸ਼ਾਮਿਲ(_h)..." msgid "/Buddies/Add _Group..." -msgstr "/ਬੱਡੀ/ਗਰੁੱਪ ਸ਼ਾਮਿਲ(_G)..." +msgstr "/ਬੱਡੀ/ਗਰੁੱਪ ਸ਼ਾਮਲ(_G)..." msgid "/Buddies/_Quit" msgstr "/ਬੱਡੀ/ਬੰਦ ਕਰੋ(_Q)" @@ -10500,9 +10188,8 @@ msgstr "/ਬੱਡੀ/ਬੰਦ ਕਰੋ(_Q)" msgid "/_Accounts" msgstr "/ਅਕਾਊਂਟ(_A)" -#, fuzzy msgid "/Accounts/Manage Accounts" -msgstr "/ਅਕਾਊਂਟ/ਪਰਬੰਧ" +msgstr "/ਅਕਾਊਂਟ/ਅਕਾਊਂਟ ਪਰਬੰਧ" #. Tools msgid "/_Tools" @@ -10521,14 +10208,13 @@ msgid "/Tools/Pr_eferences" msgstr "/ਟੂਲ/ਮੇਰੀ ਪਸੰਦ(_e)" msgid "/Tools/Pr_ivacy" -msgstr "/ਟੂਲ/ਰਹੱਸ(_i)" +msgstr "/ਟੂਲ/ਪਰਾਈਵੇਸੀ(_i)" -#, fuzzy msgid "/Tools/Smile_y" -msgstr "/ਟੂਲ/ਪਰਾਈਵੇਸੀ" +msgstr "/ਟੂਲ/ਸਮਾਈਲੀ(_y)" msgid "/Tools/_File Transfers" -msgstr "/ਟੂਲ/ਫਾਇਲ ਸੰਚਾਰ(_F)" +msgstr "/ਟੂਲ/ਫਾਇਲ ਟਰਾਂਸਫਰ(_F)" msgid "/Tools/R_oom List" msgstr "/ਟੂਲ/ਰੂਮ ਲਿਸਟ(_o)" @@ -10544,7 +10230,7 @@ msgid "/_Help" msgstr "/ਮੱਦਦ(_H)" msgid "/Help/Online _Help" -msgstr "/ਮੱਦਦ/ਆਨਲਾਇਨ ਮੱਦਦ(_H)" +msgstr "/ਮੱਦਦ/ਆਨਲਾਈਨ ਮੱਦਦ(_H)" msgid "/Help/_Debug Window" msgstr "/ਮੱਦਦ/ਡੀਬੱਗ ਵਿੰਡੋ(_D)" @@ -10552,31 +10238,28 @@ msgstr "/ਮੱਦਦ/ਡੀਬੱਗ ਵਿੰਡੋ(_D)" msgid "/Help/_About" msgstr "/ਮੱਦਦ/ਇਸ ਬਾਰੇ(_A)" -#, fuzzy, c-format +#, c-format msgid "<b>Account:</b> %s" -msgstr "" -"\n" -"<b>ਅਕਾਊਂਟ:</b> %s" +msgstr "<b>ਅਕਾਊਂਟ:</b> %s" -#, fuzzy, c-format +#, c-format msgid "" "\n" "<b>Occupants:</b> %d" msgstr "" "\n" -"<b>ਅਕਾਊਂਟ:</b> %s" +"<b>ਨਿਵਾਸ:</b> %d " -#, fuzzy, c-format +#, c-format msgid "" "\n" "<b>Topic:</b> %s" msgstr "" "\n" -"<b>ਅਕਾਊਂਟ:</b> %s" +"<b>ਵਿਸ਼ਾ:</b> %s" -#, fuzzy msgid "(no topic set)" -msgstr "ਕੋਈ ਵਿਸ਼ਾ ਨਹੀਂ ਦਿੱਤਾ ਹੈ" +msgstr "(ਕੋਈ ਵਿਸ਼ਾ ਨਹੀਂ ਦਿੱਤਾ ਹੈ)" msgid "Buddy Alias" msgstr "ਬੱਡੀ ਏਲੀਆਸ" @@ -10596,9 +10279,8 @@ msgstr "ਭਿਆਨਕ" msgid "Rockin'" msgstr "ਰਾਕਇਨ'" -#, fuzzy msgid "Total Buddies" -msgstr "ਬੱਡੀ" +msgstr "ਕੁੱਲ ਬੱਡੀ" #, c-format msgid "Idle %dd %dh %02dm" @@ -10655,27 +10337,24 @@ msgstr "ਲਾਗ ਅਕਾਰ" msgid "%s disconnected" msgstr "%s ਕੁਨੈਕਸ਼ਨ ਖਤਮ ਕੀਤਾ" -#, fuzzy, c-format +#, c-format msgid "%s disabled" -msgstr "ਕਮਾਂਡ ਆਯੋਗ" +msgstr "%s ਆਯੋਗ" -#, fuzzy msgid "Reconnect" -msgstr "ਕੁਨੈਕਟ ਕਰੋ" +msgstr "ਮੁੜ-ਕੁਨੈਕਟ ਕਰੋ" -#, fuzzy msgid "Re-enable" -msgstr "ਅਕਾਊਂਟ ਮੁੜ-ਯੋਗ" +msgstr "ਮੁੜ-ਚਾਲੂ" msgid "Welcome back!" -msgstr "" +msgstr "ਫੇਰ ਜੀ ਆਇਆਂ ਨੂੰ!" -#, fuzzy, c-format +#, c-format msgid "%d account was disabled because you signed on from another location:" -msgid_plural "" -"%d accounts were disabled because you signed on from another location:" -msgstr[0] "ਤੁਸੀਂ ਕਿਸੇ ਹੋਰ ਥਾਂ ਤੋਂ ਲਾਗਇਨ ਹੋਏ" -msgstr[1] "ਤੁਸੀਂ ਕਿਸੇ ਹੋਰ ਥਾਂ ਤੋਂ ਲਾਗਇਨ ਹੋਏ" +msgid_plural "%d accounts were disabled because you signed on from another location:" +msgstr[0] "%d ਅਕਾਊਂਟ ਆਯੋਗ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ, ਕਿਉਂਕਿ ਤੁਸੀਂ ਹੋਰ ਟਿਕਾਣੇ ਤੋਂ ਸਾਇਨ ਹੋ ਗਏ ਹੋ:" +msgstr[1] "%d ਅਕਾਊਂਟ ਆਯੋਗ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ, ਕਿਉਂਕਿ ਤੁਸੀਂ ਹੋਰ ਟਿਕਾਣੇ ਤੋਂ ਸਾਇਨ ਹੋ ਗਏ ਹੋ:" msgid "<b>Username:</b>" msgstr "<b>ਯੂਜ਼ਰ ਨਾਂ:</b>" @@ -10690,7 +10369,7 @@ msgid "/Accounts" msgstr "/ਅਕਾਊਂਟ" #. Translators: Please maintain the use of -> and <- to refer to menu heirarchy -#, fuzzy, c-format +#, c-format msgid "" "<span weight='bold' size='larger'>Welcome to %s!</span>\n" "\n" @@ -10700,7 +10379,7 @@ msgid "" msgstr "" "<span weight='bold' size='larger'>%s ਵਲੋਂ ਜੀ ਆਇਆਂ ਨੂੰ!</span>\n" "\n" -"ਤੁਹਾਡੇ ਕੋਲ ਕੋਈ ਅਕਾਊਂਟ ਯੋਗ ਨਹੀਂ ਹੈ। ਆਪਣੇ IM ਅਕਾਊਂਟ <b>ਅਕਾਊਂਟ->ਪਰਬੰਧ</b> ਰਾਹੀਂ <b>ਅਕਾਊਂਟ</b> " +"ਤੁਹਾਡੇ ਕੋਲ ਕੋਈ ਅਕਾਊਂਟ ਯੋਗ ਨਹੀਂ ਹੈ। ਆਪਣੇ IM ਅਕਾਊਂਟ <b>ਅਕਾਊਂਟ->ਅਕਾਊਂਟ ਪਰਬੰਧ</b> ਰਾਹੀਂ <b>ਅਕਾਊਂਟ</b> " "ਤੋਂ ਯੋਗ ਕਰੋ। ਜਦੋਂ ਤੁਸੀਂ ਅਕਾਊਂਟ ਯੋਗ ਕੀਤੇ ਤਾਂ ਤੁਸੀਂ ਸਾਇਨ-ਆਨ ਕਰ ਸਕਦੇ ਹੋ, ਆਪਣਾ ਸਟੇਟਸ ਸੈੱਟ ਕਰ ਸਕਦੇ ਹੋ " "ਅਤੇ ਆਪਣੇ ਦੋਸਤਾਂ-ਮਿੱਤਰਾਂ ਨਾਲ ਗੱਲਾਂ ਮਾਰ ਸਕਦੇ ਹੋ।" @@ -10708,7 +10387,7 @@ msgstr "" #. * after the treeview or faceprint gets mad. -Robot101 #. msgid "/Buddies/Show/Offline Buddies" -msgstr "/ਬੱਡੀ/ਵੇਖੋ/ਆਫਲਾਇਨ ਬੱਡੀ" +msgstr "/ਬੱਡੀ/ਵੇਖੋ/ਆਫਲਾਈਨ ਬੱਡੀ" msgid "/Buddies/Show/Empty Groups" msgstr "/ਬੱਡੀ/ਵੇਖੋ/ਖਾਲੀ ਗਰੁੱਪ" @@ -10722,21 +10401,17 @@ msgstr "/ਬੱਡੀ/ਵੇਖੋ/ਵੇਹਲਾ ਟਾਈਮ" msgid "/Buddies/Show/Protocol Icons" msgstr "/ਬੱਡੀ/ਵੇਖੋ/ਪਰੋਟੋਕਾਲ ਆਈਕਾਨ" -#, fuzzy msgid "Add a buddy.\n" -msgstr "ਬੱਡੀ ਸ਼ਾਮਿਲ" +msgstr "ਬੱਡੀ ਸ਼ਾਮਿਲ ਕਰੋ।\n" -#, fuzzy msgid "Buddy's _username:" -msgstr "ਬੱਡੀ ਨਾਂ:" +msgstr "ਬੱਡੀ ਦਾ ਯੂਜ਼ਰ ਨਾਂ(_u):" -#, fuzzy msgid "(Optional) A_lias:" -msgstr "ਚੋਣਵੀਂ ਜਾਣਕਾਰੀ:" +msgstr "(ਚੋਣਵਾਂ) ਏਲੀਆਸ(_l):" -#, fuzzy msgid "Add buddy to _group:" -msgstr "ਕੀ ਬੱਡੀ ਆਪਣੀ ਲਿਸਟ ਵਿੱਚ ਸ਼ਾਮਿਲ?" +msgstr "ਬੱਡੀ ਗਰੁੱਪ ਵਿੱਚ ਸ਼ਾਮਲ(_g):" msgid "This protocol does not support chat rooms." msgstr "ਇਹ ਪ੍ਰੋਟੋਕਾਲ ਗੱਲਬਾਤ ਰੂਮ ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।" @@ -10749,25 +10424,22 @@ msgstr "ਤੁਸੀਂ ਇਸ ਸਮੇਂ ਕਿਸੇ ਪ੍ਰੋਟੋਕ msgid "" "Please enter an alias, and the appropriate information about the chat you " "would like to add to your buddy list.\n" -msgstr "" -"ਇੱਕ ਏਲੀਆਸ ਅਤੇ ਗੱਲਬਾਤ ਲਈ ਠੀਕ ਨਾਂ ਦਿਓ ਜੀ, ਜਿਸ ਲਈ ਤੁਸੀਂ ਬੱਡੀ ਲਿਸਟ ਸ਼ਾਮਿਲ ਕਰਨੀ ਚਾਹੁੰਦੇ ਹੋ।\n" +msgstr "ਇੱਕ ਏਲੀਆਸ ਅਤੇ ਗੱਲਬਾਤ ਲਈ ਠੀਕ ਨਾਂ ਦਿਓ ਜੀ, ਜਿਸ ਲਈ ਤੁਸੀਂ ਬੱਡੀ ਲਿਸਟ ਸ਼ਾਮਿਲ ਕਰਨੀ ਚਾਹੁੰਦੇ ਹੋ।\n" msgid "A_lias:" msgstr "ਏਲੀਆਸ(_l):" -#, fuzzy msgid "Auto_join when account becomes online." -msgstr "ਜਦੋਂ ਅਕਾਊਂਟ ਆਨਲਾਇਨ ਹੋਵੇ ਤਾਂ ਆਟੋ-ਜੁਆਇੰਨ ਕਰੋ।" +msgstr "ਜਦੋਂ ਅਕਾਊਂਟ ਆਨਲਾਈਨ ਹੋਵੇ ਤਾਂ ਆਟੋ-ਜੁਆਇੰਨ ਕਰੋ(_j)।" -#, fuzzy msgid "_Remain in chat after window is closed." -msgstr "ਜਦੋਂ ਵਿੰਡੋ ਬੰਦ ਕੀਤੀ ਜਾਵੇ ਤਾਂ ਗੱਲਬਾਤ ਓਹਲੇ।" +msgstr "ਜਦੋਂ ਵਿੰਡੋ ਬੰਦ ਕੀਤੀ ਜਾਵੇ ਤਾਂ ਗੱਲਬਾਤ ਵਿੱਚ ਰਹੋ(_R)|" msgid "Please enter the name of the group to be added." msgstr "ਗਰੁੱਪ ਸ਼ਾਮਿਲ ਕਰਨ ਲਈ ਨਾਂ ਦਿਓ ਜੀ।" msgid "Enable Account" -msgstr "ਅਕਾਊਂਟ ਯੋਗ" +msgstr "ਅਕਾਊਂਟ ਚਾਲੂ" msgid "<PurpleMain>/Accounts/Enable Account" msgstr "<PurpleMain>/ਅਕਾਊਂਟ/ਅਕਾਊਂਟ ਯੋਗ" @@ -10800,8 +10472,7 @@ msgstr "ਅਣਜਾਣ ਕਮਾਂਡ ਹੈ।" msgid "That buddy is not on the same protocol as this chat." msgstr "ਉਸ ਬੱਡੀ ਕੋਈ ਉਹ ਪ੍ਰੋਟੋਕਾਲ ਨਹੀਂ ਹੈ, ਜੋ ਕਿ ਇਸ ਗੱਲਬਾਤ ਦਾ" -msgid "" -"You are not currently signed on with an account that can invite that buddy." +msgid "You are not currently signed on with an account that can invite that buddy." msgstr "ਤੁਸੀਂ ਇਸ ਸਮੇਂ ਇਸ ਅਕਾਊਂਟ ਨਾਲ ਲਾਗਇਨ ਨਹੀਂ ਹੋ, ਜਿਸ ਨਾਲ ਬੱਡੀ ਨੂੰ ਸੱਦਿਆ ਜਾ ਸਕੇ।" msgid "Invite Buddy Into Chat Room" @@ -10862,9 +10533,8 @@ msgstr "ਆਈਕਾਨ ਇੰਝ ਸੰਭਾਲੋ..." msgid "Set Custom Icon..." msgstr "ਕਸਟਮ ਆਈਕਾਨ ਸੈੱਟ..." -#, fuzzy msgid "Change Size" -msgstr "ਹਾਲਤ ਬਦਲੋ" +msgstr "ਸਾਈਜ਼ ਬਦਲੋ" msgid "Show All" msgstr "ਸਭ ਵੇਖੋ" @@ -10929,25 +10599,25 @@ msgstr "/ਗੱਲਬਾਤ/ਬੰਦ ਕਰੋ(_C)" #. Options msgid "/_Options" -msgstr "/ਚੋਣ(_O)" +msgstr "/ਚੋਣਾਂ(_O)" msgid "/Options/Enable _Logging" -msgstr "/ਚੋਣ/ਲਾਗ ਯੋਗ(_L)" +msgstr "/ਚੋਣਾਂ/ਲਾਗ ਯੋਗ(_L)" msgid "/Options/Enable _Sounds" -msgstr "/ਚੋਣ/ਸਾਊਂਡ ਯੋਗ(_S)" +msgstr "/ਚੋਣਾਂ/ਸਾਊਂਡ ਯੋਗ(_S)" msgid "/Options/Show Formatting _Toolbars" -msgstr "/ਚੋਣ/ਫਾਰਮੈਟ ਟੂਲਬਾਰ ਵੇਖੋ(_T)" +msgstr "/ਚੋਣਾਂ/ਫਾਰਮੈਟ ਟੂਲਬਾਰ ਵੇਖੋ(_T)" msgid "/Options/Show Ti_mestamps" -msgstr "/ਚੋਣ/ਟਾਈਮ-ਸਟੈਂਪ ਵੇਖੋ(_M)" +msgstr "/ਚੋਣਾਂ/ਟਾਈਮ-ਸਟੈਂਪ ਵੇਖੋ(_M)" msgid "/Conversation/More" msgstr "/ਗੱਲਬਾਤ/ਹੋਰ" msgid "/Options" -msgstr "/ਚੋਣ" +msgstr "/ਚੋਣਾਂ" #. The menubar has been deactivated. Make sure the 'More' submenu is regenerated next time #. * the 'Conversation' menu pops up. @@ -10994,25 +10664,27 @@ msgid "/Conversation/Insert Image..." msgstr "/ਗੱਲਬਾਤ/ਚਿੱਤਰ ਸ਼ਾਮਲ..." msgid "/Options/Enable Logging" -msgstr "/ਚੋਣ/ਲਾਗ ਰੱਖੋ" +msgstr "/ਚੋਣਾਂ/ਲਾਗ ਰੱਖੋ" msgid "/Options/Enable Sounds" -msgstr "/ਚੋਣ/ਆਵਾਜ਼ ਯੋਗ" +msgstr "/ਚੋਣਾਂ/ਆਵਾਜ਼ ਯੋਗ" msgid "/Options/Show Formatting Toolbars" -msgstr "/ਚੋਣ/ਫਾਰਮੈਟ ਟੂਲਬਾਰ ਵੇਖੋ" +msgstr "/ਚੋਣਾਂ/ਫਾਰਮੈਟ ਟੂਲਬਾਰ ਵੇਖੋ" msgid "/Options/Show Timestamps" -msgstr "/ਚੋਣ/ਟਾਈਮ ਸਟੈਂਪ ਵੇਖੋ" +msgstr "/ਚੋਣਾਂ/ਟਾਈਮ ਸਟੈਂਪ ਵੇਖੋ" msgid "User is typing..." msgstr "ਯੂਜ਼ਰ ਲਿਖਦਾ/ਲਿਖਦੀ ਹੈ..." -#, fuzzy, c-format +#, c-format msgid "" "\n" "%s has stopped typing" -msgstr "%s ਨੇ ਤੁਹਾਡੇ (%s) ਲਈ ਲਿਖਿਆ ਛੱਡਿਆ ਹੈ" +msgstr "" +"\n" +"%s ਲਿਖਣੋਂ ਹਟਿਆ/ਹਟੀ" #. Build the Send To menu msgid "S_end To" @@ -11131,22 +10803,20 @@ msgid "Fatal Error" msgstr "ਘਾਤਕ ਗਲਤੀ" msgid "bug master" -msgstr "" +msgstr "ਬੱਗ ਮਾਸਟਰ" -#, fuzzy msgid "artist" msgstr "ਕਲਾਕਾਰ" #. feel free to not translate this msgid "Ka-Hing Cheung" -msgstr "" +msgstr "ਕਾ-ਹਿੰਗ ਚੀਉਂਗ" msgid "support" msgstr "ਸਹਿਯੋਗ" -#, fuzzy msgid "webmaster" -msgstr "ਖੋਜੀ ਤੇ ਵੈਬ ਮਾਸਟਰ" +msgstr "ਵੈੱਬਮਾਸਟਰ" msgid "Senior Contributor/QA" msgstr "ਸੀਨੀਅਰ ਯੋਗਦਾਨੀ/QA" @@ -11168,7 +10838,7 @@ msgid "support/QA" msgstr "ਸਹਿਯੋਗ/QA" msgid "XMPP" -msgstr "" +msgstr "XMPP" msgid "original author" msgstr "ਅਸਲੀ ਲੇਖਕ" @@ -11245,9 +10915,8 @@ msgstr "ਫੈਨਿਸ਼" msgid "French" msgstr "ਫਰੈਂਚ" -#, fuzzy msgid "Irish" -msgstr "ਕੁਰਦ" +msgstr "ਆਈਰਸ਼" msgid "Galician" msgstr "ਗਾਲਿਸਿਕ" @@ -11303,6 +10972,9 @@ msgstr "ਲੀਥੂਵਨੀਆਈ" msgid "Macedonian" msgstr "ਮੈਕਡੋਨੀਆਈ" +msgid "Mongolian" +msgstr "ਮੰਗੋਲੀਆਈ" + msgid "Bokmål Norwegian" msgstr "ਬੋਕਮਾਲ ਨਾਰਵੇਗਆਈ" @@ -11316,10 +10988,10 @@ msgid "Norwegian Nynorsk" msgstr "ਨਾਰਵੇਗੀਅਨ ਨਯਨੋਰਸਕ" msgid "Occitan" -msgstr "" +msgstr "ਅੱਸੀਟਾਨ" msgid "Punjabi" -msgstr "" +msgstr "ਪੰਜਾਬੀ" msgid "Polish" msgstr "ਪੋਲੈਂਡੀ" @@ -11351,9 +11023,8 @@ msgstr "ਅਲਬਨੀਆਈ" msgid "Serbian" msgstr "ਸਰਬੀਆਈ" -#, fuzzy msgid "Sinhala" -msgstr "ਸਮਾਜਿਕ" +msgstr "ਸਿੰਹਾਲਾ" msgid "Swedish" msgstr "ਸਵੀਡਸ਼" @@ -11371,7 +11042,7 @@ msgid "Turkish" msgstr "ਤੁਰਕ" msgid "Urdu" -msgstr "" +msgstr "ਉਰਦੂ" msgid "Vietnamese" msgstr "ਵੀਅਤਨਾਮੀ" @@ -11415,9 +11086,25 @@ msgstr "" "ਇਸ ਦੇ ਯੋਗਦਾਨੀਆਂ ਕੋਲ ਕਾਪੀ-ਰਾਈਟ ਹੈ। ਯੋਗਦਾਨੀਆਂ ਦੀ ਲਿਸਟ ਵੇਖਣ ਵਾਸਤੇ 'COPYRIGHT' ਫਾਇਲ ਵੇਖੋ। " "ਇਸ ਪਰੋਗਰਾਮ ਬਾਰੇ ਤੁਹਾਨੂੰ ਅਸੀਂ ਕੋਈ ਵਾਰੰਟੀ ਨਹੀਂ ਦਿੰਦੇ ਹਾਂ।<BR><BR>" -#, c-format -msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" -msgstr "<FONT SIZE=\"4\">IRC:</FONT>irc.freenode.net ਉੱਤੇ #pidgin<BR><BR>" +msgid "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">ਸਵਾਲ-ਜਵਾਬ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" + +msgid "" +"<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">ਈਮੇਲ ਰਾਹੀਂ ਮੱਦਦ:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" + +msgid "<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgstr "<FONT SIZE=\"4\">IRC ਚੈਨਲ:</FONT>irc.freenode.net ਉੱਤੇ #pidgin<BR><BR>" + +msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" +msgstr "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" msgid "Current Developers" msgstr "ਮੌਜੂਦਾ ਡੀਵੈਲਪਰ" @@ -11449,11 +11136,10 @@ msgstr "ਅਕਾਊਂਟ(_A)" msgid "Get User Info" msgstr "ਯੂਜ਼ਰ ਜਾਣਕਾਰੀ ਲਵੋ" -#, fuzzy msgid "" "Please enter the username or alias of the person whose info you would like " "to view." -msgstr "ਵਿਅਕਤੀ ਦਾ ਸਕਰੀਨ ਨਾਂ ਜਾਂ ਏਲੀਆਸ ਦਿਓ ਜੀ , ਜਿਸ ਦੀ ਜਾਣਕਾਰੀ ਤੁਸੀਂ ਵੇਖਣੀ ਚਾਹੁੰਦੇ ਹੋ।" +msgstr "ਵਿਅਕਤੀ ਦਾ ਯੂਜ਼ਰ ਨਾਂ ਜਾਂ ਏਲੀਆਸ ਦਿਓ ਜੀ , ਜਿਸ ਦੀ ਜਾਣਕਾਰੀ ਤੁਸੀਂ ਵੇਖਣੀ ਚਾਹੁੰਦੇ ਹੋ।" msgid "View User Log" msgstr "ਯੂਜ਼ਰ ਲਾਗ ਵੇਖੋ" @@ -11477,17 +11163,15 @@ msgstr "ਗੱਲਬਾਤ ਏਲੀਆਸ" msgid "Enter an alias for this chat." msgstr "ਇਸ ਗੱਲਬਾਤ ਲਈ ਉਪ ਨਾਂ ਦਿਓ।" -#, fuzzy, c-format +#, c-format msgid "" "You are about to remove the contact containing %s and %d other buddy from " "your buddy list. Do you want to continue?" msgid_plural "" "You are about to remove the contact containing %s and %d other buddies from " "your buddy list. Do you want to continue?" -msgstr[0] "" -"ਤੁਸੀਂ ਆਪਣੀ ਬੱਡੀ ਲਿਸਟ ਵਿੱਚ %s ਗੱਲਬਾਤ ਹਟਾਉਣ ਜਾ ਰਹੇ ਹੋ। ਕੀ ਤੁਸੀਂ ਜਾਰੀ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ।" -msgstr[1] "" -"ਤੁਸੀਂ ਆਪਣੀ ਬੱਡੀ ਲਿਸਟ ਵਿੱਚ %s ਗੱਲਬਾਤ ਹਟਾਉਣ ਜਾ ਰਹੇ ਹੋ। ਕੀ ਤੁਸੀਂ ਜਾਰੀ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ।" +msgstr[0] "ਤੁਸੀਂ ਆਪਣੀ ਬੱਡੀ ਲਿਸਟ ਵਿੱਚੋਂ %s ਰੱਖਣ ਵਾਲਾ ਸੰਪਰਕ ਅਤੇ %d ਹੋਰ ਬੱਡੀ ਹਟਾਉਣ ਜਾ ਰਹੇ ਹੋ। ਕੀ ਤੁਸੀਂ ਜਾਰੀ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?" +msgstr[1] "ਤੁਸੀਂ ਆਪਣੀ ਬੱਡੀ ਲਿਸਟ ਵਿੱਚੋਂ %s ਰੱਖਣ ਵਾਲਾ ਸੰਪਰਕ ਅਤੇ %d ਹੋਰ ਬੱਡੀ ਹਟਾਉਣ ਜਾ ਰਹੇ ਹੋ। ਕੀ ਤੁਸੀਂ ਜਾਰੀ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?" msgid "Remove Contact" msgstr "ਸੰਪਰਕ ਹਟਾਓ" @@ -11522,8 +11206,7 @@ msgid "_Remove Group" msgstr "ਗਰੁੱਪ ਹਟਾਓ(_R)" #, c-format -msgid "" -"You are about to remove %s from your buddy list. Do you want to continue?" +msgid "You are about to remove %s from your buddy list. Do you want to continue?" msgstr "ਤੁਸੀਂ %s ਨੂੰ ਆਪਣੀ ਸੁਨੇਹੀ ਲਿਸਟ ਵਿੱਚੋਂ ਹਟਾਉਣ ਜਾ ਰਹੇ ਹੋ। ਕੀ ਤੁਸੀਂ ਜਾਰੀ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?" msgid "Remove Buddy" @@ -11547,45 +11230,35 @@ msgstr "ਗੱਲਬਾਤ ਹਟਾਓ(_R)" msgid "Right-click for more unread messages...\n" msgstr "ਹੋਰ ਨਾ-ਪੜ੍ਹੇ ਸੁਨੇਹਿਆਂ ਲਈ ਸੱਜਾ-ਕਲਿੱਕ...\n" -#, fuzzy msgid "_Change Status" -msgstr "ਹਾਲਤ ਬਦਲੋ" +msgstr "ਹਾਲਤ ਬਦਲੋ(_C)" -#, fuzzy msgid "Show Buddy _List" -msgstr "ਬੱਡੀ ਲਿਸਟ ਵੇਖੋ" +msgstr "ਬੱਡੀ ਲਿਸਟ ਵੇਖੋ(_L)" -#, fuzzy msgid "_Unread Messages" -msgstr "ਅਣ-ਪੜ੍ਹੇ ਸੁਨੇਹੇ" +msgstr "ਅਣ-ਪੜ੍ਹੇ ਸੁਨੇਹੇ(_U)" -#, fuzzy msgid "New _Message..." -msgstr "ਨਵਾਂ ਸੁਨੇਹਾ..." +msgstr "ਨਵਾਂ ਸੁਨੇਹਾ(_M)..." -#, fuzzy msgid "_Accounts" -msgstr "/ਅਕਾਊਂਟ(_A)" +msgstr "ਅਕਾਊਂਟ(_A)" -#, fuzzy msgid "Plu_gins" -msgstr "ਪਲੱਗਇਨ" +msgstr "ਪਲੱਗਇਨ(_g)" -#, fuzzy msgid "Pr_eferences" -msgstr "ਮੇਰੀ ਪਸੰਦ" +msgstr "ਮੇਰੀ ਪਸੰਦ(_e)" -#, fuzzy msgid "Mute _Sounds" -msgstr "ਆਵਾਜ਼ ਚੁੱਪ ਰੱਖੋ" +msgstr "ਆਵਾਜ਼ ਚੁੱਪ ਰੱਖੋ(_S)" -#, fuzzy msgid "_Blink on New Message" -msgstr "ਨਵੇਂ ਸੁਨੇਹੇ ਉੱਤੇ ਝਪਕੋ" +msgstr "ਨਵੇਂ ਸੁਨੇਹੇ ਉੱਤੇ ਝਪਕੋ(_B)" -#, fuzzy msgid "_Quit" -msgstr "ਬਾਹਰ" +msgstr "ਬਾਹਰ(_Q)" msgid "Not started" msgstr "ਸ਼ੁਰੂ ਨਹੀਂ" @@ -11660,77 +11333,70 @@ msgid "_Reset formatting" msgstr "ਫਾਰਮੈਟਿੰਗ ਮੁੜ-ਸੈੱਟ ਕਰੋ(_R)" msgid "Disable _smileys in selected text" -msgstr "" +msgstr "ਚੁਣੇ ਟੈਕਸਟ ਵਿੱਚ ਸਮਾਈਲੀ ਆਯੋਗ(_s)" msgid "Hyperlink color" -msgstr "ਹਾਇਪਰਲਿੰਕ ਰੰਗ" +msgstr "ਹਾਈਪਰਲਿੰਕ ਰੰਗ" msgid "Color to draw hyperlinks." -msgstr "ਹਾਇਪਰਲਿੰਕ ਲਈ ਰੰਗ ਦਿਓ।" +msgstr "ਹਾਈਪਰਲਿੰਕ ਲਈ ਰੰਗ ਦਿਓ।" -#, fuzzy msgid "Hyperlink visited color" -msgstr "ਹਾਇਪਰਲਿੰਕ ਰੰਗ" +msgstr "ਖੋਲ੍ਹੋ ਹਾਈਪਰਲਿੰਕ ਰੰਗ" -#, fuzzy msgid "Color to draw hyperlinks after it has been visited (or activated)." -msgstr "ਹਾਇਪਰਲਿੰਕ ਲਈ ਰੰਗ, ਜਦੋਂ ਮਾਊਂਸ ਉਨ੍ਹਾਂ ਉੱਤੇ ਹੋਵੇ।" +msgstr "ਹਾਈਪਰਲਿੰਕ ਖੋਲ੍ਹਣ ਤੋਂ ਬਾਅਦ ਵਰਤਣ ਲਈ ਰੰਗ (ਜਾਂ ਐਕਟੀਵੇਟ ਹੋਣ ਤੋਂ ਬਾਅਦ)" msgid "Hyperlink prelight color" -msgstr "ਹਾਇਪਰਲਿੰਕ ਪ੍ਰੀ-ਲਾਇਟ ਰੰਗ" +msgstr "ਹਾਈਪਰਲਿੰਕ ਪ੍ਰੀ-ਲਾਇਟ ਰੰਗ" msgid "Color to draw hyperlinks when mouse is over them." -msgstr "ਹਾਇਪਰਲਿੰਕ ਲਈ ਰੰਗ, ਜਦੋਂ ਮਾਊਂਸ ਉਨ੍ਹਾਂ ਉੱਤੇ ਹੋਵੇ।" +msgstr "ਹਾਈਪਰਲਿੰਕ ਲਈ ਰੰਗ, ਜਦੋਂ ਮਾਊਂਸ ਉਨ੍ਹਾਂ ਉੱਤੇ ਹੋਵੇ।" -#, fuzzy msgid "Sent Message Name Color" -msgstr "ਭੇਜੇ ਸੁਨੇਹੇ" +msgstr "ਭੇਜਿਆ ਸੁਨੇਹਾ ਨਾਂ ਰੰਗ" msgid "Color to draw the name of a message you sent." -msgstr "" +msgstr "ਤੁਹਾਡੇ ਵਲੋਂ ਭੇਜੇ ਸੁਨੇਹੇ ਨਾਂ ਲਈ ਰੰਗ ਹੈ।" -#, fuzzy msgid "Received Message Name Color" -msgstr "ਪ੍ਰਾਪਤ ਹੋਏ ਸੁਨੇਹੇ" +msgstr "ਮਿਲਿਆ ਸੁਨੇਹਾ ਨਾਂ ਰੰਗ" msgid "Color to draw the name of a message you received." -msgstr "" +msgstr "ਤੁਹਾਡੇ ਮਿਲੇ ਸੁਨੇਹੇ ਦੇ ਨਾਂ ਲਈ ਰੰਗ ਹੈ।" msgid "\"Attention\" Name Color" -msgstr "" +msgstr "\"ਸਾਵਧਾਨ\" ਨਾਂ ਰੰਗ" msgid "Color to draw the name of a message you received containing your name." -msgstr "" +msgstr "ਤੁਹਾਡਾ ਨਾਂ ਰੱਖਣ ਵਾਲੇ ਇੱਕ ਸੁਨੇਹੇ, ਜੋ ਤੁਹਾਨੂੰ ਮਿਲਿਆ ਹੈ, ਦੇ ਨਾਂ ਲਈ ਰੰਗ" msgid "Action Message Name Color" -msgstr "" +msgstr "ਕਾਰਵਾਈ ਸੁਨੇਹਾ ਨਾਂ ਰੰਗ" msgid "Color to draw the name of an action message." -msgstr "" +msgstr "ਇੱਕ ਕਾਰਵਾਈ ਸੁਨੇਹੇ ਲਈ ਨਾਂ ਲਿਖਣ ਲਈ ਰੰਗ ਹੈ।" msgid "Action Message Name Color for Whispered Message" -msgstr "" +msgstr "ਘੁਸਰ-ਮੁਸਰ ਸੁਨੇਹੇ ਲਈ ਐਕਟਿਵ ਸੁਨੇਹਾ ਨਾਂ ਰੰਗ" msgid "Whisper Message Name Color" -msgstr "" +msgstr "ਘੁਸਰ-ਮੁਸਰ ਸੁਨੇਹਾ ਨਾਂ ਰੰਗ" -#, fuzzy msgid "Typing notification color" -msgstr "ਨੋਟੀਫਿਕੇਸ਼ਨ ਹਟਾਓ" +msgstr "ਟਾਈਪ ਕਰਨ ਸੂਚਨਾ ਰੰਗ" msgid "The color to use for the typing notification font" -msgstr "" +msgstr "ਟਾਈਪ ਕਰਨ ਸੂਚਨਾ ਲਈ ਫੋਂਟ ਵਾਸਤੇ ਵਰਤਣ ਲਈ ਰੰਗ" -#, fuzzy msgid "Typing notification font" -msgstr "ਇੱਕ ਸੂਚਨਾ ਦਿਓ" +msgstr "ਟਾਈਪ ਕਰਨ ਸੂਚਨਾ ਫੋਂਟ" msgid "The font to use for the typing notification" -msgstr "" +msgstr "ਟਾਈਪ ਕਰਨ ਦੀ ਸੂਚਨਾ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਫੋਂਟ" -#, fuzzy msgid "Enable typing notification" -msgstr "ਨਵੀਂ ਚਿੱਠੀ ਸੂਚਨਾ" +msgstr "ਟਾਈਪ ਕਰਨ ਦੀ ਸੂਚਨਾ ਚਾਲੂ" msgid "_Copy Email Address" msgstr "ਈਮੇਲ ਐਡਰੈੱਸ ਨਕਲ(_C)" @@ -11782,22 +11448,20 @@ msgstr "" msgid "Save Image" msgstr "ਚਿੱਤਰ ਸੰਭਾਲੋ" -#, c-format msgid "_Save Image..." msgstr "ਚਿੱਤਰ ਸੰਭਾਲੋ(_S)..." -#, fuzzy, c-format msgid "_Add Custom Smiley..." -msgstr "ਕਸਟਮ ਸਮਾਇਲੀ ਵੇਖੋ" +msgstr "ਕਸਟਮ ਸਮਾਇਲੀ ਸ਼ਾਮਲ(_A)..." msgid "Select Font" msgstr "ਫੋਂਟ ਚੁਣੋ" msgid "Select Text Color" -msgstr "ਪਾਠ ਰੰਗ ਚੁਣੋ" +msgstr "ਟੈਕਸਟ ਰੰਗ ਚੁਣੋ" msgid "Select Background Color" -msgstr "ਪਿੱਠਭੂਮੀ ਰੰਗ ਚੁਣੋ" +msgstr "ਬੈਕਗਰਾਊਂਡ ਰੰਗ ਚੁਣੋ" msgid "_URL" msgstr "_URL" @@ -11808,13 +11472,13 @@ msgstr "ਵੇਰਵਾ(_D)" msgid "" "Please enter the URL and description of the link that you want to insert. " "The description is optional." -msgstr "ਸ਼ਾਮਿਲ ਕਰਨ ਵਾਲੇ ਸੰਬੰਧ ਦਾ URL ਅਤੇ ਵੇਰਵਾ ਦਿਓ। ਵੇਰਵਾ ਚੋਣਵਾਂ ਹੈ।" +msgstr "ਸ਼ਾਮਿਲ ਕਰਨ ਵਾਲੇ ਲਿੰਕ ਦਾ URL ਅਤੇ ਵੇਰਵਾ ਦਿਓ। ਵੇਰਵਾ ਚੋਣਵਾਂ ਹੈ।" msgid "Please enter the URL of the link that you want to insert." -msgstr "ਸ਼ਾਮਿਲ ਕਰਨ ਵਾਲੇ ਸੰਬੰਧ ਦਾ URL ਦਿਓ।" +msgstr "ਸ਼ਾਮਿਲ ਕਰਨ ਵਾਲੇ ਲਿੰਕ ਦਾ URL ਦਿਓ।" msgid "Insert Link" -msgstr "ਸਬੰਧ ਸ਼ਾਮਿਲ" +msgstr "ਲਿੰਕ ਸ਼ਾਮਲ" msgid "_Insert" msgstr "ਸ਼ਾਮਿਲ(_I)" @@ -11831,13 +11495,14 @@ msgid "" "This smiley is disabled because a custom smiley exists for this shortcut:\n" " %s" msgstr "" +"ਇਹ ਸਮਾਈਲੀ ਬੰਦ ਹੈ, ਕਿਉਂਕਿ ਕਸਟਮ ਸਮਾਈਲੀ ਇਸ ਸ਼ਾਰਟਕੱਟ ਲਈ ਮੌਜੂਦ ਹੈ:\n" +" %s" msgid "Smile!" msgstr "ਸਮਾਈਲ!" -#, fuzzy msgid "_Manage custom smileys" -msgstr "ਕਸਟਮ ਸਮਾਇਲੀ ਵੇਖੋ" +msgstr "ਕਸਟਮ ਸਮਾਇਲੀ ਪਰਬੰਧ(_M)" msgid "This theme has no available smileys." msgstr "ਇਸ ਸਰੂਪ ਵਿੱਚ ਕੋਈ ਸਮਾਈਲ ਨਹੀਂ ਹਨ।" @@ -11932,12 +11597,11 @@ msgstr "ਹਰੀਜ਼ਟਲ ਰੂਲ(_H)" msgid "_Smile!" msgstr "ਸਮਾਇਲ(_S)!" -#, fuzzy msgid "Log Deletion Failed" -msgstr "SSL ਕੁਨੈਕਸ਼ਨ ਫੇਲ੍ਹ" +msgstr "ਲਾਗਇਨ ਹਟਾਉਣ ਲਈ ਫੇਲ੍ਹ" msgid "Check permissions and try again." -msgstr "" +msgstr "ਅਧਿਕਾਰਾਂ ਦੀ ਜਾਂਚ ਕਰਕੇ ਮੁੜ-ਟਰਾਈ ਕਰੋ।" #, c-format msgid "" @@ -11957,13 +11621,11 @@ msgid "" "s?" msgstr "ਕੀ ਤੁਸੀਂ %s ਉੱਤੇ ਸ਼ੁਰੂ ਕੀਤੇ ਸਿਸਟਮ ਲਾਗ ਨੂੰ ਪੱਕੇ ਤੌਰ ਉੱਤੇ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?" -#, fuzzy msgid "Delete Log?" -msgstr "ਹਟਾਓ" +msgstr "ਲਾਗ ਹਟਾਉਣਾ ਹੈ?" -#, fuzzy msgid "Delete Log..." -msgstr "ਹਟਾਓ" +msgstr "ਲਾਗ ਹਟਾਓ..." #, c-format msgid "<span size='larger' weight='bold'>Conversation in %s on %s</span>" @@ -11981,7 +11643,7 @@ msgstr "ਲਾਗ ਫੋਲਡਰ ਝਲਕ(_B)" msgid "%s %s. Try `%s -h' for more information.\n" msgstr "%s %s। ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ `%s -h' ਵੇਖੋ।\n" -#, fuzzy, c-format +#, c-format msgid "" "%s %s\n" "Usage: %s [OPTION]...\n" @@ -12005,12 +11667,13 @@ msgstr "" " -h, --help display this help and exit\n" " -m, --multiple do not ensure single instance\n" " -n, --nologin don't automatically login\n" -" -l, --login[=NAME] automatically login (optional argument NAME specifies\n" -" account(s) to use, separated by commas)\n" +" -l, --login[=NAME] enable specified account(s) (optional argument NAME\n" +" specifies account(s) to use, separated by commas.\n" +" Without this only the first account will be enabled).\n" " --display=DISPLAY X display to use\n" " -v, --version display the current version and exit\n" -#, fuzzy, c-format +#, c-format msgid "" "%s %s\n" "Usage: %s [OPTION]...\n" @@ -12033,12 +11696,12 @@ msgstr "" " -h, --help display this help and exit\n" " -m, --multiple do not ensure single instance\n" " -n, --nologin don't automatically login\n" -" -l, --login[=NAME] automatically login (optional argument NAME specifies\n" -" account(s) to use, separated by commas)\n" -" --display=DISPLAY X display to use\n" +" -l, --login[=NAME] enable specified account(s) (optional argument NAME\n" +" specifies account(s) to use, separated by commas.\n" +" Without this only the first account will be enabled).\n" " -v, --version display the current version and exit\n" -#, fuzzy, c-format +#, c-format msgid "" "%s %s has segfaulted and attempted to dump a core file.\n" "This is a bug in the software and has happened through\n" @@ -12065,17 +11728,15 @@ msgstr "" "ਵੀ ਦੇਣਾ ਨਾ ਭੁੱਲੋ। ਜੇ ਤੁਸੀਂ ਇਹ ਨਹੀਂ ਜਾਣਦੇ ਹੋ ਕਿ ਬੈਕਟਰੈਕ ਕਿਵੇਂ ਲੈਣਾ ਹੈ ਤਾਂ,\n" "ਇਸ ਵਾਸਤੇ ਹਦਾਇਤਾਂ ਲਈ ਵੇਖੋ\n" "%swiki/GetABacktrace\n" -"\n" -"ਜੇ ਤੁਹਾਨੂੰ ਹੋਰ ਵੀ ਮੱਦਦ ਦੀ ਲੋੜ ਹੈ ਤਾਂ SeanEgn ਜਾਂ LSchiere (AIM ਰਾਹੀਂ) ਨਾਲ IM\n" -" ਕਰੋ ਜੀ। ਸੀਨ ਅਤੇ ਲੁਕੀ ਬਾਰੇ ਹੋਰ ਪਰੋਟੋਕਾਲਾਂ ਰਾਹੀਂ ਸੰਪਰਕ ਜਾਣਕਾਰੀ\n" -"ਲਈ ਵੇਖੋ:\n" -"%swiki/DeveloperPages\n" #. Translators may want to transliterate the name. #. It is not to be translated. msgid "Pidgin" msgstr "ਪਿਡਗਿਨ" +msgid "Exiting because another libpurple client is already running.\n" +msgstr "ਬੰਦ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ, ਕਿਉਂਕਿ ਇੱਕ ਹੋਰ libpurple ਕਲਾਇਟ ਪਹਿਲਾਂ ਹੀ ਚੱਲ ਰਿਹਾ ਹੈ।\n" + msgid "Open All Messages" msgstr "ਸਭ ਸੁਨੇਹੇ ਖੋਲ੍ਹੋ" @@ -12105,8 +11766,7 @@ msgstr "URL ਖੋਲਣ ਲਈ ਅਸਫਲ ਹੈ" msgid "Error launching \"%s\": %s" msgstr "\"%s\" ਚਲਾਉਣ ਦੌਰਾਨ ਗਲਤੀ: %s" -msgid "" -"The 'Manual' browser command has been chosen, but no command has been set." +msgid "The 'Manual' browser command has been chosen, but no command has been set." msgstr "'ਦਸਤੀ' ਝਲਕਾਰਾ ਕਮਾਂਡ ਚੁਣੀ ਗਈ ਹੈ, ਪਰ ਕੋਈ ਕਮਾਂਡ ਨਹੀਂ ਦਿੱਤੀ ਗਈ ਹੈ।" msgid "The following plugins will be unloaded." @@ -12118,39 +11778,33 @@ msgstr "ਮਲਟੀਪਲ ਪਲੱਗਇਨਾਂ ਨੂੰ ਅਣ-ਲੋਡ msgid "Unload Plugins" msgstr "ਪਲੱਗਇਨ ਅਣ-ਲੋਡ" -#, fuzzy msgid "Could not unload plugin" -msgstr "ਪਬਲਿਕ ਕੁੰਜੀ ਲੋਡ ਨਹੀਂ ਹੋ ਸਕਦੀ ਹੈ" +msgstr "ਪਲੱਗਇਨ ਅਣਲੋਡ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ" msgid "" "The plugin could not be unloaded now, but will be disabled at the next " "startup." -msgstr "" +msgstr "ਪਲੱਗਇਨ ਨੂੰ ਅਨ-ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ, ਪਰ ਇਸ ਨੂੰ ਅਗਲੀ ਵਾਰ ਚਾਲੂ ਹੋਣ ਸਮੇਂ ਬੰਦ ਕਰ ਦਿੱਤਾ ਜਾਵੇਗਾ।" -#, fuzzy, c-format +#, c-format msgid "" "<span foreground=\"red\" weight=\"bold\">Error: %s\n" "Check the plugin website for an update.</span>" msgstr "" -"%s\n" "<span foreground=\"#ff0000\" weight=\"bold\">ਗਲਤੀ: %s\n" "ਇੱਕ ਅੱਪਡੇਟ ਲਈ ਪਲੱਗਇਨ ਵੈੱਬਸਾਇਟ ਵੇਖੋ।</span>" -#, fuzzy msgid "Author" -msgstr "ਪ੍ਰਮਾਣਿਤ" +msgstr "ਲੇਖਕ" -#, fuzzy msgid "<b>Written by:</b>" -msgstr "<b>ਨੂੰ ਭੇਜੀ ਜਾਦੀ ਹੈ:</b>" +msgstr "<b>ਵਲੋਂ ਲਿਖਿਆ:</b>" -#, fuzzy msgid "<b>Web site:</b>" -msgstr "<b>ਏਦਾਂ ਭੇਜੀ ਜਾਦੀ ਹੈ:</b>" +msgstr "<b>ਵੈੱਬਸਾਈਟ:</b>" -#, fuzzy msgid "<b>Filename:</b>" -msgstr "<b>ਯੂਜ਼ਰ ਨਾਂ:</b>" +msgstr "<b>ਫਾਇਲ ਨਾਂ:</b>" msgid "Configure Pl_ugin" msgstr "ਪਲੱਗਇਨ ਸੰਰਚਨਾ(_u)" @@ -12248,11 +11902,10 @@ msgid "Icon" msgstr "ਆਈਕਾਨ" msgid "Keyboard Shortcuts" -msgstr "" +msgstr "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ" -#, fuzzy msgid "Cl_ose conversations with the Escape key" -msgstr "%s ਨਾਲ ਗੱਲਬਾਤ" +msgstr "ਈਸਕੇਸ (Esc) ਸਵਿੱਚ ਨਾਲ ਗੱਲਾਬਾਤਾਂ ਬੰਦ ਕਰੋ(_o)" msgid "System Tray Icon" msgstr "ਸਿਸਟਮ ਟਰੇ ਆਈਕਾਨ" @@ -12334,7 +11987,7 @@ msgid "Minimi_ze new conversation windows" msgstr "ਨਵੀਆਂ ਗੱਲਬਾਤ ਵਿੰਡੋਜ਼ ਘੱਟੋ-ਘੱਟ(_z)" msgid "Minimum input area height in lines:" -msgstr "" +msgstr "ਲਾਈਨਾਂ ਵਿੱਚ ਘੱਟੋ-ਘੱਟੋ ਇੰਪੁੱਟ ਏਰੀਆ ਹਾਈਲਾਈਟ:" msgid "Font" msgstr "ਫੋਂਟ" @@ -12380,7 +12033,7 @@ msgid "Ports" msgstr "ਪੋਰਟ" msgid "_Enable automatic router port forwarding" -msgstr "" +msgstr "ਆਟੋਮੈਟਿਕ ਰਾਊਟਰ ਪੋਰਟ ਫਾਰਵਰਡਿੰਗ ਚਾਲੂ ਕਰੋ(_E)" msgid "_Manually specify range of ports to listen on" msgstr "ਸੁਣਨ ਲਈ ਦਸਤੀ ਪੋਰਟ ਸੀਮਾ ਦਿਓ(_M)" @@ -12419,6 +12072,10 @@ msgstr "ਪਰਾਕਸੀ ਸਰਵਰ" msgid "No proxy" msgstr "ਕੋਈ ਪਰਾਕਸੀ ਨਹੀਂ" +#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings +msgid "Use remote DNS with SOCKS4 proxies" +msgstr "ਰਿਮੋਟ DNS SOCKS4 ਪਰਾਕਸੀ ਨਾਲ ਵਰਤੋਂ" + msgid "_User:" msgstr "ਯੂਜ਼ਰ(_U):" @@ -12432,14 +12089,13 @@ msgid "Netscape" msgstr "ਨੈੱਟਸਕੇਪ" msgid "Mozilla" -msgstr "ਮੌਜੀਲਾ" +msgstr "ਮੋਜ਼ੀਲਾ" msgid "Konqueror" msgstr "ਕੌਨਕਿਉਰੋਰ" -#, fuzzy msgid "Desktop Default" -msgstr "ਮੂਲ ਮਨਜ਼ੂਰ ਕਰੋ(_A)" +msgstr "ਵੇਹੜਾ (ਡੈਸਕਟਾਪ) ਡਿਫਾਲਟ" msgid "GNOME Default" msgstr "ਗਨੋਮ ਮੂਲ" @@ -12500,27 +12156,21 @@ msgstr "ਸਭ ਹਾਲਤ ਤਬਦੀਲੀਆਂ ਸਿਸਟਮ ਲਾਗ ' msgid "Sound Selection" msgstr "ਆਵਾਜ਼ ਚੋਣ" -#, c-format msgid "Quietest" msgstr "ਸਭ ਤੋਂ ਖਾਮੋਸ਼" -#, c-format msgid "Quieter" msgstr "ਬਹੁਤ ਖਾਮੋਸ਼" -#, c-format msgid "Quiet" msgstr "ਖਾਮੋਸ਼" -#, c-format msgid "Loud" msgstr "ਉੱਚੀ" -#, c-format msgid "Louder" msgstr "ਹੋਰ ਉੱਚੀ" -#, c-format msgid "Loudest" msgstr "ਸਭ ਤੋਂ ਉੱਚੀ" @@ -12541,31 +12191,26 @@ msgstr "" "Sound c_ommand:\n" "(ਫਾਇਲ ਨਾਂ ਲਈ %s)" -#, fuzzy msgid "M_ute sounds" -msgstr "ਆਵਾਜ਼ ਚੁੱਪ ਰੱਖੋ" +msgstr "ਆਵਾਜ਼ ਚੁੱਪ ਰੱਖੋ(_u)" msgid "Sounds when conversation has _focus" msgstr "ਗੱਲਬਾਤ ਉੱਤੇ ਕੇਂਦਰਿਤ ਹੋਣ ਸਮੇਂ ਆਵਾਜ਼(_f)" -#, fuzzy msgid "_Enable sounds:" -msgstr "ਸਾਊਂਡ ਯੋਗ:" +msgstr "ਸਾਊਂਡ ਯੋਗ(_E):" -#, fuzzy msgid "V_olume:" -msgstr "ਵਾਲੀਅਮ:" +msgstr "ਵਾਲੀਅਮ(_o):" msgid "Play" msgstr "ਚਲਾਓ" -#, fuzzy msgid "_Browse..." -msgstr "ਝਲਕ(_e)..." +msgstr "ਝਲਕ(_B)..." -#, fuzzy msgid "_Reset" -msgstr "ਮੁੜ-ਨਿਰਧਾਰਨ" +msgstr "ਮੁੜ-ਸੈੱਟ(_R)" msgid "_Report idle time:" msgstr "ਵੇਹਲਾ ਸਮਾਂ ਗਿਣਾਓ(_R):" @@ -12639,12 +12284,11 @@ msgid "Set privacy for:" msgstr "ਰਹੱਸ ਦਿਓ:" #. Remove All button -#, fuzzy msgid "Remove Al_l" -msgstr "ਹਟਾਓ" +msgstr "ਸਭ ਹਟਾਓ(_l)" msgid "Permit User" -msgstr "ਸਵੀਕਾਰ ਵਿਅਕਤੀ" +msgstr "ਮਨਜ਼ੂਰ ਯੂਜ਼ਰ" msgid "Type a user you permit to contact you." msgstr "ਵਿਅਕਤੀ ਨਾਂ ਦਿਓ, ਜਿਸ ਨਾਲ ਤੁਸੀਂ ਸੰਪਰਕ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ।" @@ -12664,10 +12308,10 @@ msgid "Are you sure you wish to allow %s to contact you?" msgstr "ਕੀ ਤੁਸੀਂ %s ਨੂੰ ਤੁਹਾਡੇ ਨਾਲ ਸੰਪਰਕ ਕਰਨ ਦੇਣ ਦੀ ਪੁਸ਼ਟੀ ਕਰਦੇ ਹੋ?" msgid "Block User" -msgstr "ਵਿਅਕਤੀ ਪਾਬੰਦੀ" +msgstr "ਯੂਜ਼ਰ ਪਾਬੰਦੀ" msgid "Type a user to block." -msgstr "ਪਾਬੰਦੀ ਲਗਾਉਣ ਲਈ ਵਿਅਕਤੀ ਲਿਖੋ।" +msgstr "ਪਾਬੰਦੀ ਲਗਾਉਣ ਲਈ ਯੂਜ਼ਰ ਦਿਓ" msgid "Please enter the name of the user you wish to block." msgstr "ਉਸ ਵਿਅਕਤੀ ਦਾ ਨਾਂ ਦਿਓ ਜੀ, ਜਿਸ ਉੱਤੇ ਤੁਸੀਂ ਪਾਬੰਦੀ ਲਗਾਉਣੀ ਚਾਹੁੰਦੇ ਹੋ।" @@ -12707,20 +12351,20 @@ msgid "_Add Chat" msgstr "ਗੱਲਬਾਤ ਸ਼ਾਮਲ(_A)" msgid "Are you sure you want to delete the selected saved statuses?" -msgstr "ਕੀ ਤੁਸੀਂ ਚੁਣੇ ਸੰਭਾਲੇ ਸਟੇਟਸ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?" +msgstr "ਕੀ ਤੁਸੀਂ ਚੁਣੇ ਸੰਭਾਲੀ ਹਾਲਤ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?" #. Use button msgid "_Use" msgstr "ਵਰਤੋਂ(_U)" msgid "Title already in use. You must choose a unique title." -msgstr "ਟਾਇਟਲ ਪਹਿਲਾਂ ਹੀ ਵਰਤੋਂ ਅਧੀਨ ਹੈ। ਤੁਹਾਨੂੰ ਵਿਲੱਖਣ ਟਾਇਟਲ ਚੁਣਨਾ ਚਾਹੀਦਾ ਹੈ।" +msgstr "ਟਾਈਟਲ ਪਹਿਲਾਂ ਹੀ ਵਰਤੋਂ ਅਧੀਨ ਹੈ। ਤੁਹਾਨੂੰ ਵਿਲੱਖਣ ਟਾਈਟਲ ਚੁਣਨਾ ਚਾਹੀਦਾ ਹੈ।" msgid "Different" msgstr "ਵੱਖਰਾ" msgid "_Title:" -msgstr "ਟਾਇਟਲ(_T):" +msgstr "ਟਾਈਟਲ(_T):" msgid "_Status:" msgstr "ਹਾਲਤ(_S):" @@ -12737,75 +12381,62 @@ msgstr "ਸੰਭਾਲੋ ਅਤੇ ਵਰਤੋਂ(_v)" msgid "Status for %s" msgstr "%s ਲਈ ਹਾਲਤ" -#, fuzzy msgid "Custom Smiley" -msgstr "ਸਮਾਇਲੀ ਸ਼ਾਮਲ ਕਰੋ" +msgstr "ਪਸੰਦੀਦਾ ਸਮਾਈਲੀ" msgid "More Data needed" -msgstr "" +msgstr "ਹੋਰ ਡਾਟਾ ਚਾਹੀਦਾ ਹੈ" msgid "Please provide a shortcut to associate with the smiley." -msgstr "" +msgstr "ਸਮਾਈਲੀ ਨਾਲ ਸਬੰਧਿਤ ਸ਼ਾਰਟਕੱਟ ਦਿਓ ਜੀ।" -#, fuzzy msgid "Duplicate Shortcut" -msgstr "ਡੁਪਲੀਕੇਟ ਸੋਧ" +msgstr "ਡੁਪਲੀਕੇਟ ਸ਼ਾਰਟਕੱਟ" msgid "" "A custom smiley for the selected shortcut already exists. Please specify a " "different shortcut." -msgstr "" +msgstr "ਚੁਣੇ ਸ਼ਾਰਟਕੱਟ ਲਈ ਪਹਿਲਾਂ ਹੀ ਇੱਕ ਕਸਟਮ ਸਮਾਈਲੀ ਮੌਜੂਦ ਹੈ। ਵੱਖਰੇ ਸ਼ਾਰਟਕੱਟ ਨਾਲ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।" -#, fuzzy msgid "Please select an image for the smiley." -msgstr "ਲਿਸਤ ਤੋਂ ਆਪਣਾ ਮੂਡ ਚੁਣੋ ਜੀ।" +msgstr "ਸਮਾਈਲੀ ਲਈ ਚਿੱਤਰ ਚੁਣੋ ਜੀ।" -#, fuzzy msgid "Edit Smiley" -msgstr "ਸਮਾਇਲੀ ਸ਼ਾਮਲ ਕਰੋ" +msgstr "ਸਮਾਈਲੀ ਸੋਧ" -#, fuzzy msgid "Add Smiley" -msgstr "ਸਮਾਈਲ!" +msgstr "ਸਮਾਈਲੀ ਸ਼ਾਮਲ" -#, fuzzy msgid "Smiley _Image" -msgstr "ਚਿੱਤਰ ਸੰਭਾਲੋ" +msgstr "ਸਮਾਈਲੀ ਚਿੱਤਰ(_I)" #. Smiley shortcut msgid "Smiley S_hortcut" -msgstr "" +msgstr "ਸਮਾਈਲੀ ਸ਼ਾਰਟਕੱਟ(_h)" -#, fuzzy msgid "Smiley" -msgstr "ਸਮਾਈਲ!" +msgstr "ਸਮਾਈਲੀ" -#, fuzzy msgid "Custom Smiley Manager" -msgstr "ਸਰਟੀਫਿਕੇਟ ਮੈਨੇਜਰ" +msgstr "ਪਸੰਦੀਦਾ ਸਮਾਈਲੀ ਮੈਨੇਜਰ" -#, fuzzy msgid "Click to change your buddyicon for this account." -msgstr "ਇਹ ਅਕਾਊਂਟ ਲਈ ਇਹ ਬੱਡੀ ਆਈਕਾਨ ਵਰਤੋਂ(_i):" +msgstr "ਇਸ ਅਕਾਊਂਟ ਲਈ ਆਪਣਾ ਬੱਡੀ-ਆਈਕਾਨ ਬਦਲਣ ਲਈ ਕਲਿੱਕ ਕਰੋ।" -#, fuzzy msgid "Click to change your buddyicon for all accounts." -msgstr "ਇਹ ਅਕਾਊਂਟ ਲਈ ਇਹ ਬੱਡੀ ਆਈਕਾਨ ਵਰਤੋਂ(_i):" +msgstr "ਸਭ ਅਕਾਊਂਟਾਂ ਲਈ ਆਪਣਾ ਬੱਡੀ-ਆਈਖਾਨ ਬਦਲਣ ਲਈ ਕਲਿੱਕ ਕਰੋ।" msgid "Waiting for network connection" msgstr "ਨੈੱਟਵਰਕ ਕੁਨੈਕਸ਼ਨ ਲਈ ਉਡੀਕ ਜਾਰੀ" -#, fuzzy msgid "New status..." -msgstr "ਨਵਾਂ ਸੁਨੇਹਾ..." +msgstr "ਨਵੀਂ ਹਾਲਤ..." -#, fuzzy msgid "Saved statuses..." -msgstr "ਸੰਭਾਲੇ ਹਾਲਤ" +msgstr "ਸੰਭਾਲੇ ਹਾਲਤ..." -#, fuzzy msgid "Status Selector" -msgstr "ਹਾਲਤ ਸ਼ਬਦ" +msgstr "ਹਾਲਤ ਚੋਣਕਾਰ" msgid "Google Talk" msgstr "ਗੂਗਲ ਟਾਕ" @@ -12859,8 +12490,7 @@ msgstr "" msgid "" "You can insert this image into this message, or use it as the buddy icon for " "this user" -msgstr "" -"ਤੁਸੀਂ ਇਹ ਚਿੱਤਰ ਨੂੰ ਇਹ ਸੁਨੇਹੇ 'ਚ ਸ਼ਾਮਿਲ ਕਰਨ ਸਕਦੇ ਹੋ ਜਾਂ ਇਸ ਯੂਜ਼ਰ ਲਈ ਬੱਡੀ ਆਈਕਾਨ ਵਾਂਗ ਵਰਤ ਸਕਦੇ ਹੋ।" +msgstr "ਤੁਸੀਂ ਇਹ ਚਿੱਤਰ ਨੂੰ ਇਹ ਸੁਨੇਹੇ 'ਚ ਸ਼ਾਮਿਲ ਕਰਨ ਸਕਦੇ ਹੋ ਜਾਂ ਇਸ ਯੂਜ਼ਰ ਲਈ ਬੱਡੀ ਆਈਕਾਨ ਵਾਂਗ ਵਰਤ ਸਕਦੇ ਹੋ।" #. I don't know if we really want to do anything here. Most of the desktop item types are crap like #. * "MIME Type" (I have no clue how that would be a desktop item) and "Comment"... nothing we can really @@ -12902,10 +12532,8 @@ msgid "Failed to open file '%s': %s" msgstr "ਫਾਇਲ '%s' ਖੋਲ੍ਹਣ ਲਈ ਫੇਲ੍ਹ: %s" #, c-format -msgid "" -"Failed to load image '%s': reason not known, probably a corrupt image file" -msgstr "" -"ਚਿੱਤਰ '%s' ਲੋਡ ਕਰਨ ਵਿੱਚ ਅਸਫਲ: ਕਾਰਨ ਜਾਣਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਹੈ, ਸੰਭਵ ਤੌਰ ਤੇ ਫਾਇਲ ਨਿਕਾਰਾ ਹੈ" +msgid "Failed to load image '%s': reason not known, probably a corrupt image file" +msgstr "ਚਿੱਤਰ '%s' ਲੋਡ ਕਰਨ ਵਿੱਚ ਅਸਫਲ: ਕਾਰਨ ਜਾਣਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਹੈ, ਸੰਭਵ ਤੌਰ ਤੇ ਫਾਇਲ ਨਿਕਾਰਾ ਹੈ" msgid "Save File" msgstr "ਫਾਇਲ ਸੰਭਾਲੋ" @@ -12925,24 +12553,20 @@ msgstr "ਜਾਣਕਾਰੀ ਲਵੋ(_G)" msgid "_Invite" msgstr "ਸੱਦਾ(_I)" -#, fuzzy msgid "_Modify..." -msgstr "ਸੋਧ(_M)" +msgstr "ਸੋਧ(_M)..." -#, fuzzy msgid "_Add..." -msgstr "ਸ਼ਾਮਲ(_A)" +msgstr "ਸ਼ਾਮਲ(_A)..." msgid "_Open Mail" msgstr "ਮੇਲ ਖੋਲ੍ਹੋ(_O)" -#, fuzzy msgid "_Edit" -msgstr "ਸੋਧ" +msgstr "ਸੋਧ(_E)" -#, fuzzy msgid "Pidgin Tooltip" -msgstr "ਪਿਡਗਿਨ" +msgstr "ਪਿਡਗਿਨ ਟੂਲਟਿੱਪ" msgid "Pidgin smileys" msgstr "ਪਿਡਗਿਨ ਸਮਾਇਲੀ" @@ -12956,12 +12580,11 @@ msgstr "ਇਹ ਆਯੋਗ ਕੀਤਾ ਗਰਾਫਿਕਲ ਇਮੋਸ਼ msgid "none" msgstr "ਕੋਈ ਨਹੀਂ" -#, fuzzy msgid "Small" -msgstr "ਈਮੇਲ" +msgstr "ਛੋਟਾ" msgid "Smaller versions of the default smilies" -msgstr "" +msgstr "ਡਿਫਾਲਟ ਸਮਾਈਲ ਲਈ ਛੋਟਾ ਵਰਜਨ" msgid "Response Probability:" msgstr "ਜਵਾਬ ਸੰਭਾਵਨਾ:" @@ -13000,7 +12623,7 @@ msgstr "ਸੰਪਰਕ ਉਪਲਬਧਤਾ ਅਨੁਮਾਨ ਪਲੱਗਇ #. * summary msgid "Displays statistical information about your buddies' availability" -msgstr "" +msgstr "ਆਪਣੀ ਬੱਡੀ ਦੀ ਉਪਲੱਬਧਤਾ ਲਈ ਅੰਕੜੇ ਵੇਖੋ।" msgid "Buddy is idle" msgstr "ਬੱਡੀ ਵੇਹਲਾ ਹੈ" @@ -13044,16 +12667,14 @@ msgstr "ਸੰਪਰਕ ਤਰਜੀਹ" #. *< name #. *< version #. *< summary -msgid "" -"Allows for controlling the values associated with different buddy states." +msgid "Allows for controlling the values associated with different buddy states." msgstr "ਵੱਖਰੀ ਬੱਡੀ ਸਥਿਤੀ ਨਾਲ ਸਬੰਧਿਤ ਮੁੱਲਾਂ ਨੂੰ ਕੰਟਰੋਲ ਕਰਨ ਦਿਓ।" #. *< description msgid "" "Allows for changing the point values of idle/away/offline states for buddies " "in contact priority computations." -msgstr "" -"ਸੰਪਰਕ ਵਿੱਚ ਦਰਜੇ ਦੇ ਆਧਾਰ ਉੱਤੇ ਬੱਡੀ ਲਈ ਵੇਹਲਾ/ਦੂਰ/ਆਫਲਾਇਨ ਸਥਿਤੀ ਦਾ ਮੁੱਲ ਤਬਦੀਲ ਕਰਨਾ ਸਵੀਕਾਰ ਹੈ।" +msgstr "ਸੰਪਰਕ ਵਿੱਚ ਦਰਜੇ ਦੇ ਆਧਾਰ ਉੱਤੇ ਬੱਡੀ ਲਈ ਵੇਹਲਾ/ਦੂਰ/ਆਫਲਾਇਨ ਸਥਿਤੀ ਦਾ ਮੁੱਲ ਤਬਦੀਲ ਕਰਨਾ ਸਵੀਕਾਰ ਹੈ।" msgid "Conversation Colors" msgstr "ਗੱਲਬਾਤ ਰੰਗ" @@ -13158,7 +12779,6 @@ msgid "Provides support for mouse gestures" msgstr "ਮਾਊਸ ਇਸ਼ਾਰਿਆਂ ਲਈ ਸਹਿਯੋਗ ਦਿੰਦਾ ਹੈ" #. * description -#, fuzzy msgid "" "Allows support for mouse gestures in conversation windows. Drag the middle " "mouse button to perform certain actions:\n" @@ -13169,9 +12789,9 @@ msgstr "" "ਗੱਲਬਾਤ ਵਿੰਡੋ ਵਿੱਚ ਮਾਊਸ ਗੈਸਟਰ ਲਈ ਸਹਿਯੋਗ ਮਨਜ਼ੂਰ ਕਰੋ।\n" "ਕੁਝ ਐਕਸ਼ਨ ਕਰਨ ਲਈ ਮਿਡਲ ਮਾਊਂਸ ਬਟਨ ਡਰੈਗ ਵਰਤੋਂ:\n" "\n" -"ਇੱਕ ਗੱਲਬਾਤ ਨੂੰ ਬੰਦ ਕਰਨ ਵਾਸਤੇ ਹੇਠਾਂ ਨੂੰ ਡਰੈਗ ਕਰਕੇ ਸੱਜਾ ਪਾਸੇ ਭੇਜੋ।\n" -"ਪਿਛਲੀ ਗੱਲਬਾਤ ਉੱਤੇ ਸਵਿੱਚ ਕਰਨ ਵਾਸਤੇ ਉੱਤੇ ਡਰੈਗ ਕਰਕੇ ਖੱਬੇ ਸਵਿੱਚ ਕਰੋ।\n" -"ਅਗਲੀ ਗੱਲਬਾਤ ਵਿੱਚ ਜਾਣ ਲਈ ਉੱਤੇ ਡਰੈਗ ਕਰਕੇ ਸੱਜੇ ਪਾਸੇ ਭੇਜੋ।" +" • ਇੱਕ ਗੱਲਬਾਤ ਨੂੰ ਬੰਦ ਕਰਨ ਵਾਸਤੇ ਹੇਠਾਂ ਨੂੰ ਡਰੈਗ ਕਰਕੇ ਸੱਜਾ ਪਾਸੇ ਭੇਜੋ।\n" +" • ਪਿਛਲੀ ਗੱਲਬਾਤ ਉੱਤੇ ਸਵਿੱਚ ਕਰਨ ਵਾਸਤੇ ਉੱਤੇ ਡਰੈਗ ਕਰਕੇ ਖੱਬੇ ਸਵਿੱਚ ਕਰੋ।\n" +" • ਅਗਲੀ ਗੱਲਬਾਤ ਵਿੱਚ ਜਾਣ ਲਈ ਉੱਤੇ ਡਰੈਗ ਕਰਕੇ ਸੱਜੇ ਪਾਸੇ ਭੇਜੋ।" msgid "Instant Messaging" msgstr "ਤਰੁੰਤ ਸੁਨੇਹੇਦਾਰ" @@ -13247,9 +12867,8 @@ msgstr "ਈਵੇਲੂਸ਼ਨ ਨਾਲ ਸਬੰਧ ਉਪਲੱਬਧ ਕ msgid "Please enter the person's information below." msgstr "ਵਿਅਕਤੀ ਬਾਰੇ ਜਾਣਕਾਰੀ ਦਿਓ ਜੀ।" -#, fuzzy msgid "Please enter the buddy's username and account type below." -msgstr "ਬੱਡੀ ਦਾ ਸਕਰੀਨ ਨਾਂ ਅਤੇ ਅਕਾਊਂਟ ਕਿਸਮ ਹੇਠਾਂ ਦਿਓ ਜੀ" +msgstr "ਬੱਡੀ ਦਾ ਯੂਜ਼ਰ ਨਾਂ ਅਤੇ ਅਕਾਊਂਟ ਕਿਸਮ ਹੇਠਾਂ ਦਿਓ ਜੀ" msgid "Account type:" msgstr "ਅਕਾਊਂਟ ਨਾਂ:" @@ -13325,9 +12944,8 @@ msgstr "ਮਾਰਕ ਲਾਈਨ" msgid "Draw a line to indicate new messages in a conversation." msgstr "ਇੱਕ ਗੱਲਬਾਤ ਵਿੱਚ ਨਵਾਂ ਸੁਨੇਹਾ ਦਰਸਾਉਣ ਵਾਸਤੇ ਇੱਕ ਲਾਈਨ ਖਿੱਚੋ।" -#, fuzzy msgid "Jump to markerline" -msgstr "ਮਾਰਕ ਲਾਈਨ" +msgstr "ਮਾਰਕ ਲਾਈਨ ਉੱਤੇ ਜਾਓ" msgid "Draw Markerline in " msgstr "ਮਾਰਕ-ਲਾਈਨ ਬਣਾਓ" @@ -13389,11 +13007,10 @@ msgstr "" #. ---------- "Notify For" ---------- msgid "Notify For" -msgstr "ਸੂਚਨਾ" +msgstr "ਸੂਚਨਾ ਦਿਓ" -#, fuzzy msgid "\t_Only when someone says your username" -msgstr "\tਜਦੋਂ ਕੋਈ ਤੁਹਾਡਾ ਸਕਰੀਨ ਨਾਂ ਲਵੇ(_O)" +msgstr "\tਜਦੋਂ ਕੋਈ ਤੁਹਾਡਾ ਯੂਜ਼ਰ ਨਾਂ ਲਵੇ(_O)" msgid "_Focused windows" msgstr "ਫੋਕਸ ਹੋਈਆਂ ਵਿੰਡੋਜ਼(_F)" @@ -13417,18 +13034,16 @@ msgstr "X ਵਿਸ਼ੇਸ਼ਤਾ ਵਿੱਚ ਨਵੇਂ ਸੁਨੇਹ msgid "Set window manager \"_URGENT\" hint" msgstr "ਵਿੰਡੋ ਮੈਨੇਜਰ ਵਿੱਚ \"_URGENT\" ਸੰਕੇਤ ਦਿਓ" -#, fuzzy msgid "_Flash window" -msgstr "ਗੱਲਬਾਤ ਵਿੰਡੋ(_h)" +msgstr "ਵਿੰਡੋ ਝਪਕੋ(_F)" #. Raise window method button msgid "R_aise conversation window" msgstr "ਗੱਲਬਾਤ ਵਿੰਡੋ ਉਭਾਰੋ(_a)" #. Present conversation method button -#, fuzzy msgid "_Present conversation window" -msgstr "ਗੱਲਬਾਤ ਵਿੰਡੋ ਉਭਾਰੋ(_a)" +msgstr "ਗੱਲਬਾਤ ਵਿੰਡੋ ਪੇਸ਼ ਕਰੋ(_P)" #. ---------- "Notification Removals" ---------- msgid "Notification Removal" @@ -13504,15 +13119,13 @@ msgid "Secondary Cursor Color" msgstr "ਸੈਕੰਡਰੀ ਕਰਸਰ ਰੰਗ" msgid "Hyperlink Color" -msgstr "ਹਾਇਪਰਲਿੰਕ ਰੰਗ" +msgstr "ਹਾਈਪਰਲਿੰਕ ਰੰਗ" -#, fuzzy msgid "Visited Hyperlink Color" -msgstr "ਹਾਇਪਰਲਿੰਕ ਰੰਗ" +msgstr "ਖੋਲ੍ਹੇ ਗਏ ਹਾਈਪਰਲਿੰਕ ਰੰਗ" -#, fuzzy msgid "Highlighted Message Name Color" -msgstr "ਉਘਾੜੇ ਸੁਨੇਹੇ" +msgstr "ਹਾਈਲਾਈਟ ਕੀਤਾ ਸੁਨੇਹਾ ਨਾਂ ਰੰਗ" msgid "GtkTreeView Horizontal Separation" msgstr "GtkTreeView ਹਰੀਜ਼ਟਲ ਵੱਖਰੇਵਾ" @@ -13529,7 +13142,6 @@ msgstr "ਨੋਟੀਫਾਈ ਡਾਈਲਾਗ" msgid "Select Color" msgstr "ਰੰਗ ਚੁਣੋ" -#, c-format msgid "Select Interface Font" msgstr "ਇੰਟਰਫੇਸ ਰੰਗ ਚੁਣੋ" @@ -13603,18 +13215,16 @@ msgstr "" #, c-format msgid "You can upgrade to %s %s today." -msgstr "" +msgstr "ਤੁਸੀਂ ਅੱਜ %s %s ਲਈ ਅੱਪਗਰੇਡ ਕੀਤਾ ਹੈ।" msgid "New Version Available" msgstr "ਨਵਾਂ ਵਰਜਨ ਉਪਲੱਬਧ ਹੈ" -#, fuzzy msgid "Later" -msgstr "ਮਿਤੀ" +msgstr "ਬਾਅਦ ਵਿੱਚ" -#, fuzzy msgid "Download Now" -msgstr "%s 'ਤੇ ਯੂਜ਼ਰ: %s" +msgstr "ਹੁਣੇ ਡਾਊਨਲੋਡ" #. *< type #. *< ui_requirement @@ -13645,21 +13255,21 @@ msgstr "ਨਵੀਂ ਵਰਜਨ ਲਈ ਨਿਯਮਤ ਜਾਂਚ ਕਰੋ #. *< dependencies #. *< priority #. *< id -#, fuzzy msgid "Send Button" -msgstr "ਭੇਜੋ" +msgstr "ਭੇਜੋ ਬਟਨ" #. *< name #. *< version -#, fuzzy msgid "Conversation Window Send Button." -msgstr "ਗੱਲਬਾਤ ਵਿੰਡੋ ਓਹਲੇ" +msgstr "ਗੱਲਬਾਤ ਵਿੰਡੋ ਭੇਜੋ ਬਟਨ ਹੈ।" #. *< summary msgid "" "Adds a Send button to the entry area of the conversation window. Intended " "for when no physical keyboard is present." msgstr "" +"ਗੱਲਬਾਤ ਵਿੰਡੋ ਦੇ ਲਿਖਣ ਖੇਤਰ ਵਿੱਚ ਭੇਜੋ ਬਟਨ ਸ਼ਾਮਲ ਕਰੋ। ਇਹ ਕੋਈ ਅਸਲ ਕੀਬੋਰਡ ਨਾ ਹੋਣ ਦੀ " +"ਹਾਲਤ ਲਈ ਹੈ।" msgid "Duplicate Correction" msgstr "ਡੁਪਲੀਕੇਟ ਸੋਧ" @@ -13751,7 +13361,6 @@ msgstr "ਹਰੇਕ N ਮਿੰਟ ਬਾਅਦ iChat-ਸਟਾਇਲ ਮੁਤ msgid "Timestamp Format Options" msgstr "ਟਾਈਮ-ਸਟੈਂਪ ਫਾਰਮੈਟ ਚੋਣ" -#, c-format msgid "_Force 24-hour time format" msgstr "24-ਘੰਟੇ ਸਮਾਂ ਫਾਰਮੈਟ ਲਈ ਮਜ੍ਬੂਰ(_F)" @@ -13868,17 +13477,13 @@ msgstr "ਬੱਡੀ ਲਿਸਟ ਵਿੰਡੋ ਹਮੇਸ਼ਾ ਉੱਤ msgid "Only when docked" msgstr "ਸਿਰਫ਼ ਜਦੋਂ ਡੋਕ ਹੋਵੇ" -msgid "_Flash window when chat messages are received" -msgstr "ਗੱਲਬਾਤ ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਹੋਣ ਉੱਤੇ ਵਿੰਡੋ ਝਲਕਾਓ(_F)" - msgid "Windows Pidgin Options" msgstr "ਵਿੰਡੋ ਪਿਡਗਿਨ ਚੋਣਾਂ" msgid "Options specific to Pidgin for Windows." msgstr "ਵਿੰਡੋ ਲਈ ਪਿਡਗਿਨ ਖਾਸ ਚੋਣਾਂ" -msgid "" -"Provides options specific to Pidgin for Windows , such as buddy list docking." +msgid "Provides options specific to Pidgin for Windows , such as buddy list docking." msgstr "ਵਿੰਡੋ ਲਈ ਪਿਡਗਿਨ ਲਈ ਖਾਸ ਚੋਣ ਹੈ, ਜਿਵੇਂ ਕਿ ਬੱਡੀ ਲਿਸਟ ਡੌਕਿੰਗ।" msgid "<font color='#777777'>Logged out.</font>" @@ -13918,439 +13523,3 @@ msgstr "ਰਾਅ XMPP ਪ੍ਹੈਰਾ ਭੇਜੋ ਅਤੇ ਲਵੋ" msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "ਇਹ ਪਲੱਗਇਨ XMPP ਸਰਵਰ ਜਾਂ ਕਲਾਇਟ ਡੀਬੱਗ ਲਈ ਫਾਇਦੇਮੰਦ ਹੈ।" -#~ msgid "A group with the name already exists." -#~ msgstr "ਇਸ ਨਾਂ ਨਾਲ ਗਰੁੱਪ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ।" - -#~ msgid "Primary Information" -#~ msgstr "ਪ੍ਰਾਇਮਰੀ ਜਾਣਕਾਰੀ" - -#~ msgid "Blood Type" -#~ msgstr "ਖੂਨ ਕਿਸਮ" - -#, fuzzy -#~ msgid "Update information" -#~ msgstr "ਮੇਰੀ ਜਾਣਕਾਰੀ ਅੱਪਡੇਟ ਕਰੋ" - -#, fuzzy -#~ msgid "Successed:" -#~ msgstr "ਗਤੀ:" - -#~ msgid "" -#~ "Setting custom faces is not currently supported. Please choose an image " -#~ "from %s." -#~ msgstr "ਇਸ ਸਮੇਂ ਕਸਟਮ ਫੇਸ ਸੈੱਟ ਕਰਨਾ ਸਹਾਇਕ ਨਹੀਂ ਹੈ। %s ਤੋਂ ਚਿੱਤਰ ਚੁਣੋ ਜੀ।" - -#~ msgid "Invalid QQ Face" -#~ msgstr "ਗਲਤ QQ ਮੁੱਖ" - -#~ msgid "You rejected %d's request" -#~ msgstr "ਤੁਸੀਂ %d ਦੀ ਮੰਗ ਠੁਕਰਾਈ" - -#~ msgid "Reject request" -#~ msgstr "ਮੰਗ ਨਾ-ਮਨਜ਼ੂਰ" - -#~ msgid "Add buddy with auth request failed" -#~ msgstr "ਬੱਡੀ ਨੂੰ ਪਰਮਾਣਕਿਤਾ ਮੰਗ ਨਾਲ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਫੇਲ੍ਹ" - -#, fuzzy -#~ msgid "Add into %d's buddy list" -#~ msgstr "ਬੱਡੀ-ਲਿਸਟ ਲੋਡ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ" - -#, fuzzy -#~ msgid "QQ Number Error" -#~ msgstr "QQ ਨੰਬਰ" - -#~ msgid "Group Description" -#~ msgstr "ਗਰੁੱਪ ਵੇਰਵਾ" - -#~ msgid "Auth" -#~ msgstr "ਪਰਮਾ" - -#~ msgid "Approve" -#~ msgstr "ਮਨਜ਼ੂਰ" - -#, fuzzy -#~ msgid "Successed to join Qun %d, operated by admin %d" -#~ msgstr "ਤੁਹਾਡੀ %d ਗਰੁੱਪ ਨੂੰ ਜੁਆਇੰਨ ਕਰਨ ਦੀ ਮੰਗ ਨੂੰ ਐਡਮਿਨ %d ਨੇ ਰੱਦ ਕਰ ਦਿੱਤਾ ਹੈ" - -#, fuzzy -#~ msgid "[%d] removed from Qun \"%d\"" -#~ msgstr "ਤੁਸੀਂ [%d] ਗਰੁੱਪ \"%d\" ਛੱਡਿਆ" - -#, fuzzy -#~ msgid "[%d] added to Qun \"%d\"" -#~ msgstr "ਤੁਹਾਨੂੰ [%d] ਗਰੁੱਪ \"%d\" ਵਿੱਚ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ ਹੈ" - -#~ msgid "I am a member" -#~ msgstr "ਮੈਂ ਮੈਂਬਰ ਹਾਂ" - -#, fuzzy -#~ msgid "I am requesting" -#~ msgstr "ਗਲਤ ਬੇਨਤੀ" - -#~ msgid "I am the admin" -#~ msgstr "ਮੈਂ ਐਡਮਿਨ ਹਾਂ" - -#~ msgid "Unknown status" -#~ msgstr "ਅਣਜਾਣ ਹਾਲਤ" - -#, fuzzy -#~ msgid "Remove from Qun" -#~ msgstr "ਗਰੁੱਪ ਹਟਾਓ" - -#~ msgid "You entered a group ID outside the acceptable range" -#~ msgstr "ਤੁਸੀਂ ਮਨਜ਼ੂਰ-ਸ਼ੁੱਦਾ ਰੇਜ਼ ਤੋਂ ਬਾਹਰ ਗਰੁੱਪ ID ਦਿੱਤਾ ਹੈ" - -#~ msgid "Are you sure you want to leave this Qun?" -#~ msgstr "ਕੀ ਤੁਸੀਂ ਕਿਊਨ ਨੂੰ ਛੱਡਣਾ ਚਾਹੁੰਦੇ ਹੋ?" - -#~ msgid "Do you want to approve the request?" -#~ msgstr "ਕੀ ਤੁਸੀਂ ਇਹ ਮੰਗ ਮੰਨਣੀ ਚਾਹੁੰਦੇ ਹੋ?" - -#, fuzzy -#~ msgid "Change Qun member" -#~ msgstr "ਫੋਨ ਨੰਬਰ" - -#, fuzzy -#~ msgid "Change Qun information" -#~ msgstr "ਚੈਨਲ ਜਾਣਕਾਰੀ" - -#, fuzzy -#~ msgid "" -#~ "%s\n" -#~ "\n" -#~ "%s" -#~ msgstr "%s (%s)" - -#~ msgid "System Message" -#~ msgstr "ਸਿਸਟਮ ਸੁਨੇਹਾ" - -#~ msgid "<b>Last Login IP</b>: %s<br>\n" -#~ msgstr "<b>ਆਖਰੀ ਲਾਗਇਨ IP</b>: %s<br>\n" - -#~ msgid "<b>Last Login Time</b>: %s\n" -#~ msgstr "<b>ਆਖਰੀ ਲਾਗਇਨ ਸਮਾਂ</b>: %s\n" - -#~ msgid "Set My Information" -#~ msgstr "ਮੇਰੀ ਜਾਣਕਾਰੀ ਸੈੱਟ ਕਰੋ" - -#, fuzzy -#~ msgid "Leave the QQ Qun" -#~ msgstr "ਇਹ QQ ਕਿਊਨ ਛੱਡਣਾ ਚਾਹੁੰਦੇ ਹੋ" - -#~ msgid "Block this buddy" -#~ msgstr "ਇਹ ਬੱਡੀ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ" - -#, fuzzy -#~ msgid "Error password: %s" -#~ msgstr "ਪਾਸਵਰਡ ਬਦਲਣ ਦੌਰਾਨ ਗਲਤੀ" - -#, fuzzy -#~ msgid "Failed to connect all servers" -#~ msgstr "ਸਰਵਰ ਨਾਲ ਕੁਨੈਕਸ਼ਨ ਦੌਰਨ ਗਲਤੀ" - -#, fuzzy -#~ msgid "Connecting server %s, retries %d" -#~ msgstr "" -#~ "ਸਰਵਰ (%s) ਵਲੋਂ ਕੁਨੈਕਸ਼ਨ ਗਲਤੀ:\n" -#~ "%s" - -#, fuzzy -#~ msgid "Do you approve the requestion?" -#~ msgstr "ਕੀ ਤੁਸੀਂ ਇਹ ਮੰਗ ਮੰਨਣੀ ਚਾਹੁੰਦੇ ਹੋ?" - -#, fuzzy -#~ msgid "Do you add the buddy?" -#~ msgstr "ਕੀ ਤੁਸੀਂ ਇਸ ਬੱਡੀ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?" - -#, fuzzy -#~ msgid "%s added you [%s] to buddy list" -#~ msgstr "%s ਨੇ ਤੁਹਾਨੂੰ [%s] ਆਪਣੀ ਬੱਡੀ ਲਿਸਟ 'ਚ ਜੋੜਿਆ ਹੈ।" - -#, fuzzy -#~ msgid "QQ Budy" -#~ msgstr "ਬੱਡੀ ਸ਼ਾਮਿਲ" - -#~ msgid "%s wants to add you [%s] as a friend" -#~ msgstr "%s ਤੁਹਾਨੂੰ [%s] ਨੂੰ ਦੋਸਤ ਦੇ ਤੌਰ ਉੱਤੇ ਸ਼ਾਮਲ ਕਰਨਾ ਚਾਹੁੰਦਾ ਹੈ" - -#, fuzzy -#~ msgid "%s is not in buddy list" -#~ msgstr "%s ਤੁਹਾਡੀ ਬੱਡੀ ਲਿਸਟ ਵਿੱਚ ਨਹੀਂ ਹੈ।" - -#, fuzzy -#~ msgid "Would you add?" -#~ msgstr "ਕੀ ਤੁਸੀਂ ਉਸ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?" - -#, fuzzy -#~ msgid "QQ Server Notice" -#~ msgstr "ਸਰਵਰ ਪੋਰਟ" - -#, fuzzy -#~ msgid "Network disconnected" -#~ msgstr "ਰਿਮੋਟ ਡਿਸ-ਕੁਨੈਕਟ ਕੀਤਾ" - -#~ msgid "developer" -#~ msgstr "ਡਿਵੈਲਪਰ" - -#~ msgid "XMPP developer" -#~ msgstr "XMPP ਡੀਵੈਲਪਰ" - -#~ msgid "Artists" -#~ msgstr "ਕਲਾਕਾਰ" - -#~ msgid "" -#~ "You are using %s version %s. The current version is %s. You can get it " -#~ "from <a href=\"%s\">%s</a><hr>" -#~ msgstr "" -#~ "ਤੁਸੀਂ ਇਸ ਸਮੇਂ %s ਵਰਜਨ %s ਵਰਤ ਰਹੇ ਹੋ। ਮੌਜੂਦਾ ਵਰਜਨ %s ਹੈ। ਤੁਸੀਂ ਇਸ ਨੂੰ <a href=\"%s\">%" -#~ "s</a>ਤੋਂ ਲੈ ਸਕਦੇ ਹੋ।<hr>" - -#~ msgid "<b>ChangeLog:</b><br>%s" -#~ msgstr "<b>ਬਦਲਾਅ:</b><br>%s" - -#~ msgid "Screen name:" -#~ msgstr "ਸਕਰੀਨ ਨਾਂ:" - -#~ msgid "Pounce only when my status is not available" -#~ msgstr "ਪਉਨਸ ਕੇਵਲ ਉਦੋਂ ਹੀ, ਜਦੋਂ ਮੇਰਾ ਸਟੇਟਸ ਉਪਲੱਬਧ ਨਾ ਹੋਵੇ" - -#~ msgid "Someone says your screen name in chat" -#~ msgstr "ਕਿਸੇ ਨੇ ਗੱਲਬਾਤ ਵਿੱਚ ਤੁਹਾਡਾ ਨਾਂ ਲਿਆ ਹੈ" - -#~ msgid "EOF while reading from resolver process" -#~ msgstr "ਹੱਲਕਰਤਾ ਪਰੋਸੈੱਸ ਤੋਂ ਪੜ੍ਹਨ ਦੌਰਾਨ EOF" - -#~ msgid "There were errors unloading the plugin." -#~ msgstr "ਪਲੱਗਇਨ ਅਣ-ਲੋਡ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀਆਂ ਹਨ।" - -#~ msgid "Error setting socket options" -#~ msgstr "ਸਾਕਟ ਚੋਣਾਂ ਦੇਣ ਦੌਰਾਨ ਗਲਤੀ" - -#~ msgid "Couldn't open file" -#~ msgstr "ਫਾਇਲ ਖੋਲ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕੀ" - -#~ msgid "" -#~ "This server requires plaintext authentication over an unencrypted " -#~ "connection. Allow this and continue authentication?" -#~ msgstr "" -#~ "ਇਹ ਸਰਵਰ ਲਈ ਗ਼ੈਰ-ਇੰਕ੍ਰਿਪਟਡ ਕੁਨੈਕਸ਼ਨ ਉੱਤੇ ਪਲੇਨ-ਟੈਕਸਟ ਪਰਮਾਣਕਿਤਾ ਲੋੜੀਦੀ ਹੈ। ਕੀ ਇਹ " -#~ "ਪਰਮਾਣਿਕਤਾ ਮਨਜ਼ੂਰ ਕਰਕੇ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?" - -#~ msgid "Error initializing session" -#~ msgstr "ਸ਼ੈਸ਼ਨ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਗਲਤੀ" - -#~ msgid "Invalid screen name" -#~ msgstr "ਗਲਤ ਸਕਰੀਨ ਨਾਂ ਹੈ" - -#~ msgid "Current media" -#~ msgstr "ਮੌਜੂਦਾ ਮੀਡਿਆ" - -#~ msgid "" -#~ "Windows Live ID authentication: cannot find authenticate token in server " -#~ "response" -#~ msgstr "ਵਿੰਡੋ ਲਾਇਵ ID ਪਰਮਾਣਕਿਤਾ: ਸਰਵਰ ਜਵਾਬ ਵਿੱਚ ਪਰਮਾਣਕਿਤਾ ਟੋਕਨ ਨਹੀਂ ਲੱਭਿਆ ਜਾ ਸਕਦਾ" - -#~ msgid "Windows Live ID authentication Failed" -#~ msgstr "ਵਿੰਡੋ ਲਾਇਵ ID ਪਰਮਾਣਕਿਤਾ ਫੇਲ੍ਹ ਹੋਈ" - -#~ msgid "" -#~ "Sorry, passwords over %d characters in length (yours is %d) are not " -#~ "supported by MySpace." -#~ msgstr "" -#~ "ਅਫਸੋਸ, MySpace ਵਲੋਂ %d ਅੱਖਰਾਂ ਤੋਂ ਵੱਧ ਲੰਬਾਈ ਦਾ ਪਾਸਵਰਡ ਮਨਜ਼ੂਰ ਨਹੀਂ ਹੈ (ਤੁਸੀਂ %d ਅੱਖਰ ਦਿੱਤੇ)।" - -#~ msgid "" -#~ "Please go to http://editprofile.myspace.com/index.cfm?fuseaction=profile." -#~ "username and choose a username and try to login again." -#~ msgstr "" -#~ "http://editprofile.myspace.com/index.cfm?fuseaction=profile.username ਉੱਤੇ " -#~ "ਜਾਓ ਜੀ ਅਤੇ ਯੂਜ਼ਰ-ਨਾਂ ਚੁਣ ਕੇ ਫਿਰ ਲਾਗਇਨ ਕਰਨ ਦੀ ਟਰਾਈ ਕਰੋ।" - -#~ msgid "Unable to make SSL connection to server." -#~ msgstr "ਸਰਵਰ ਨਾਲ SSL ਕੁਨੈਕਸ਼ਨ ਬਣਾਉਣ ਲਈ ਅਸਫਲ ਹੈ।" - -#~ msgid "Too evil (sender)" -#~ msgstr "ਕਈ ਬੁਰੇ (ਭੇਜਣ ਵਾਲਾ)" - -#~ msgid "Too evil (receiver)" -#~ msgstr "ਕਈ ਬੁਰੇ (ਪ੍ਰਾਪਤਕਰਤਾ)" - -#~ msgid "Screen name sent" -#~ msgstr "ਸਕਰੀਨ ਨਾਂ ਭੇਜਿਆ" - -#~ msgid "Invalid screen name." -#~ msgstr "ਗਲਤ ਸਕਰੀਨ ਨਾਂ ਹੈ।" - -#~ msgid "Available Message" -#~ msgstr "ਉਪਲੱਬਧ ਸੁਨੇਹਾ" - -#~ msgid "Screen name" -#~ msgstr "ਸਕਰੀਨ ਨਾਂ" - -#~ msgid "Invalid chat name specified." -#~ msgstr "ਗਲਤ ਗੱਲਬਾਤ ਨਾਂ ਦਿੱਤਾ ਹੈ।" - -#~ msgid "Away Message" -#~ msgstr "ਦੂਰ ਸੁਨੇਹਾ" - -#~ msgid "<i>(retrieving)</i>" -#~ msgstr " <i>(ਲਿਆ ਜਾ ਰਿਹਾ ਹੈ)</i>" - -#~ msgid "Use recent buddies group" -#~ msgstr "ਤਾਜ਼ਾ ਬੱਡੀ ਗਰੁੱਪ ਵਰਤੋਂ" - -#~ msgid "Show how long you have been idle" -#~ msgstr "ਵੇਖੋ ਕਿ ਕਿੰਨੇ ਚਿਰ ਤੋਂ ਤੁਸੀਂ ਵੇਹਲੇ ਹੋ" - -#~ msgid "Your information has been updated" -#~ msgstr "ਤੁਹਾਡੀ ਜਾਣਕਾਰੀ ਅੱਪਡੇਟ ਕੀਤੀ ਗਈ ਹੈ" - -#~ msgid "Input your reason:" -#~ msgstr "ਆਪਣਾ ਕਾਰਨ ਦਿਓ:" - -#~ msgid "You have successfully removed a buddy" -#~ msgstr "ਤੁਸੀਂ ਇੱਕ ਬੱਡੀ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਹੈ" - -#~ msgid "You have successfully removed yourself from your friend's buddy list" -#~ msgstr "ਤੁਸੀਂ ਆਪਣੇ ਆਪ ਨੂੰ ਆਪਣੇ ਦੋਸਤ ਦੀ ਬੱਡੀ ਲਿਸਟ ਵਿੱਚ ਹਟਾ ਲਿਆ ਹੈ" - -#~ msgid "You have added %d to buddy list" -#~ msgstr "ਤੁਸੀਂ %d ਨੂੰ ਬੱਡੀ ਲਿਸਟ ਵਿੱਚ ਸ਼ਾਮਲ ਕੀਤਾ ਹੈ" - -#~ msgid "Invalid QQid" -#~ msgstr "ਗਲਤ QQid" - -#~ msgid "Please enter external group ID" -#~ msgstr "ਬਾਹਰੀ ਗਰੁੱਪ ID ਦਿਓ ਜੀ" - -#~ msgid "Your request to join group %d has been approved by admin %d" -#~ msgstr "ਤੁਹਾਡੀ %d ਗਰੁੱਪ ਨੂੰ ਜੁਆਇੰਨ ਕਰਨ ਦੀ ਮੰਗ ਨੂੰ ਐਡਮਿਨ %d ਨੇ ਮਨਜ਼ੂਰ ਕਰ ਲਿਆ ਹੈ" - -#~ msgid "This group has been added to your buddy list" -#~ msgstr "ਇਹ ਗਰੁੱਪ ਤੁਹਾਡੀ ਬੱਡੀ ਲਿਸਟ ਵਿੱਚ ਜੋੜਿਆ ਗਿਆ" - -#~ msgid "I am applying to join" -#~ msgstr "ਮੈਂ ਜੁਆਇੰਨ ਕਰਨ ਵਾਸਤੇ ਅਪਲਾਈ ਕੀਤਾ" - -#~ msgid "You have successfully left the group" -#~ msgstr "ਤੁਸੀਂ ਗਰੁੱਪ ਛੱਡ ਦਿੱਤਾ ਹੈ।" - -#~ msgid "QQ Group Auth" -#~ msgstr "QQ ਗਰੁੱਪ ਪਰਮਾਣ" - -#~ msgid "Your authorization request has been accepted by the QQ server" -#~ msgstr "ਤੁਹਾਡੀ ਪਰਮਾਣਿਕਤਾ ਮੰਗ ਨੂੰ QQ ਸਰਵਰ ਵਲੋਂ ਮਨਜ਼ੂਰ ਕੀਤਾ ਗਿਆ ਹੈ।" - -#~ msgid "Code [0x%02X]: %s" -#~ msgstr "ਕੋਡ [0x%02X]: %s" - -#~ msgid "Group Operation Error" -#~ msgstr "ਗਰੁੱਪ ਓਪਰੇਸ਼ਨ ਗਲਤੀ" - -#~ msgid "Enter your reason:" -#~ msgstr "ਆਪਣਾ ਕਾਰਨ ਦਿਓ:" - -#~ msgid "Error requesting login token" -#~ msgstr "ਲਾਗਇਨ ਟੋਕਨ ਮੰਗ ਗਲਤੀ" - -#~ msgid "Unable to login, check debug log" -#~ msgstr "ਲਾਗਇਨ ਕਰਨ ਲਈ ਅਸਮਰੱਥ, ਡੀਬੱਗ ਲਾਗ ਵੇਖੋ" - -#~ msgid "TCP Address" -#~ msgstr "TCP ਐਡਰੈੱਸ" - -#~ msgid "UDP Address" -#~ msgstr "UDP ਐਡਰੈੱਸ" - -#~ msgid "Show Login Information" -#~ msgstr "ਲਾਗਇਨ ਜਾਣਕਾਰੀ ਵੇਖੋ" - -#~ msgid "Login failed, no reply" -#~ msgstr "ਲਾਗਇਨ ਫੇਲ੍ਹ, ਕੋਈ ਜਵਾਬ ਨਹੀਂ" - -#~ msgid "User %s rejected your request" -#~ msgstr "ਯੂਜ਼ਰ %s ਨੇ ਤੁਹਾਡੀ ਮੰਗ ਨਾ ਮਨਜ਼ੂਰ ਕੀਤੀ ਹੈ" - -#~ msgid "User %s approved your request" -#~ msgstr "ਯੂਜ਼ਰ %s ਨੇ ਤੁਹਾਡੀ ਮੰਗ ਮੰਨ ਲਈ ਹੈ" - -#~ msgid "Cannot find/access ~/.silc directory" -#~ msgstr "~/.silc ਡਾਇਰੈਕਟਰੀ ਨਹੀਂ ਲੱਭੀ/ਵਰਤੀ ਜਾ ਸਕਦੀ" - -#~ msgid "%s changed status from %s to %s" -#~ msgstr "%s ਨੇ ਹਾਲਤ %s ਤੋਂ %s ਬਦਲਿਆ ਹੈ" - -#~ msgid "%s is now %s" -#~ msgstr "%s ਹੁਣ %s" - -#~ msgid "%s is no longer %s" -#~ msgstr "%s ਹੁਣ %s ਨਹੀਂ ਰਿਹਾ" - -#~ msgid "Screen _name:" -#~ msgstr "ਸਕਰੀਨ ਨਾਂ(_n):" - -#~ msgid "_Merge" -#~ msgstr "ਮਿਲਾਨ(_M):" - -#~ msgid "<span color=\"red\">%s disconnected: %s</span>" -#~ msgstr "<span color=\"red\">%s ਅਕਾਊਂਟ ਬੰਦ ਕੀਤਾ: %s</span>" - -#~ msgid "" -#~ "Please enter the screen name of the person you would like to add to your " -#~ "buddy list. You may optionally enter an alias, or nickname, for the " -#~ "buddy. The alias will be displayed in place of the screen name whenever " -#~ "possible.\n" -#~ msgstr "" -#~ "ਵਿਅਕਤੀ ਦਾ ਸਕਰੀਨ ਨਾਂ ਦਿਓ, ਜਿਸ ਨੂੰ ਤੁਸੀਂ ਆਪਣੀ ਬੱਡੀ ਲਿਸਟ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ। ਤੁਸੀਂ " -#~ "ਬੱਡੀ ਲਈ ਚੋਣਵੇਂ ਰੂਪ ਵਿੱਚ ਏਲੀਆਸ ਜਾਂ ਛੋਟਾ ਨਾਂ ਦੇ ਸਕਦੇ ਹੋ। ਏਲੀਆਸ ਨੂੰ ਸਕਰੀਨ ਨਾਂ ਦੀ ਬਜਾਏ ਵਰਤਿਆ " -#~ "ਜਾਵੇਗਾ, ਜਦੋਂ ਵੀ ਸੰਭਵ ਹੋਵੇਗਾ।\n" - -#~ msgid "A_ccount:" -#~ msgstr "ਅਕਾਊਂਟ(_c):" - -#~ msgid "_Screen name:" -#~ msgstr "ਸਕਰੀਨ ਨਾਂ(_S):" - -#~ msgid "" -#~ "%s\n" -#~ "\n" -#~ "%s will not attempt to reconnect the account until you correct the error " -#~ "and re-enable the account." -#~ msgstr "" -#~ "%s\n" -#~ "\n" -#~ "%s ਅਕਾਊਂਟ ਨਾਲ ਕੁਨੈਕਟ ਹੋਣ ਦੀ ਉਦੋਂ ਤੱਕ ਕੋਸ਼ਿਸ਼ ਨਹੀਂ ਕਰੇਗਾ, ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਗਲਤੀ ਠੀਕ ਨਹੀਂ ਕਰਕੇ " -#~ "ਅਕਾਊਂਟ ਮੁੜ-ਯੋਗ ਨਹੀਂ ਕਰਦੇ।" - -#~ msgid "User has typed something and stopped" -#~ msgstr "ਯੂਜ਼ਰ ਨੇ ਕੁਝ ਲਿਖਿਆ ਅਤੇ ਰੁਕ ਗਿਆ/ਗਈ" - -#~ msgid "" -#~ "You are about to remove the contact containing %s and %d other buddy from " -#~ "your buddy list. Do you want to continue?You are about to remove the " -#~ "contact containing %s and %d other buddies from your buddy list. Do you " -#~ "want to continue?" -#~ msgstr "" -#~ "ਤੁਸੀਂ ਆਪਣੀ ਬੱਡੀ ਲਿਸਟ ਵਿੱਚ %s ਅਤੇ %d ਹੋਰ ਬੱਡੀ ਰੱਖਣ ਵਾਲਾ ਸੰਪਰਕ ਹਟਾਉਣ ਜਾ ਰਹੇ ਹੋ। ਕੀ ਤੁਸੀਂ " -#~ "ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?ਤੁਸੀਂ ਆਪਣੀ ਬੱਡੀ ਲਿਸਟ ਵਿੱਚ %sਅਤੇ %d ਹੋਰ ਬੱਡੀ ਰੱਖਣ ਵਾਲਾ ਸੰਪਰਕ ਹਟਾਉਣ ਜਾ " -#~ "ਰਹੇ ਹੋ। ਕੀ ਤੁਸੀਂ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?" - -#~ msgid "" -#~ "%s%s<span weight=\"bold\">Written by:</span>\t%s\n" -#~ "<span weight=\"bold\">Website:</span>\t\t%s\n" -#~ "<span weight=\"bold\">Filename:</span>\t\t%s" -#~ msgstr "" -#~ "%s%s<span weight=\"bold\">ਲਿਖੀ:</span>\t%s\n" -#~ "<span weight=\"bold\">ਵੈੱਬਸਾਇਟ:</span>\t\t%s\n" -#~ "<span weight=\"bold\">ਫਾਇਲ ਨਾਂ:</span>\t\t%s" - -#~ msgid "Display Statistics" -#~ msgstr "ਅੰਕੜੇ ਵੇਖੋ" - -#~ msgid "" -#~ "The contact availability plugin (cap) is used to display statistical " -#~ "information about buddies in a users contact list." -#~ msgstr "" -#~ "ਸੰਪਰਕ ਉਪਲਬਧਤਾ ਅਨੁਮਾਨ (cap) ਇੱਕ ਯੂਜ਼ਰ ਸੰਪਰਕ ਲਿਸਟ ਵਿੱਚ ਬੱਡੀ ਬਾਰੇ ਅੰਕੜੇ ਵੇਖਾਉਣ ਲਈ ਵਰਤੀ " -#~ "ਜਾਂਦੀ ਹੈ।" diff --git a/po/pt_BR.po b/po/pt_BR.po index 412f6cccea..045eb3dfc4 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Pidgin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-01-04 09:58-0500\n" -"PO-Revision-Date: 2009-01-05 12:42-0300\n" +"POT-Creation-Date: 2009-02-27 10:14-0800\n" +"PO-Revision-Date: 2009-02-24 22:11-0300\n" "Last-Translator: Rodrigo Luiz Marques Flores <mail@rodrigoflores.org>\n" "Language-Team: Rodrigo Luiz Marques Flores <mail@rodrigoflores.org>\n" "MIME-Version: 1.0\n" @@ -32,7 +32,7 @@ msgid "" "Usage: %s [OPTION]...\n" "\n" " -c, --config=DIR use DIR for config files\n" -" -d, --debug print debugging messages to stdout\n" +" -d, --debug print debugging messages to stderr\n" " -h, --help display this help and exit\n" " -n, --nologin don't automatically login\n" " -v, --version display the current version and exit\n" @@ -40,8 +40,8 @@ msgstr "" "%s\n" "Uso: %s [OPÇÃO]...\n" "\n" -" -c, --config=DIR use o diretório DIR para os arquivos de configuração\n" -" -d, --debug imprima mensagens de depuração para a saída padrão\n" +" -c, --config=DIR utilize o DIR para os arquivos de configuração\n" +" -d, --debug imprima mensagens de depuração para a saída de erro\n" " -h, --help exiba esta ajuda e saia\n" " -n, --nologin não conecte automaticamente\n" " -v, --version exiba a versão atual e saia\n" @@ -1118,6 +1118,7 @@ msgstr "%s se tornou ausente. (%s)" msgid "%s has sent you a message. (%s)" msgstr "%s te enviou uma mensagem. (%s)" +#, c-format msgid "Unknown pounce event. Please report this!" msgstr "Evento de ação desconhecido. Por favor reporte isso!" @@ -1163,7 +1164,6 @@ msgstr "Minutos antes de alterar o status" msgid "Change status to" msgstr "Mudar status para" -#. Conversations msgid "Conversations" msgstr "Conversas" @@ -1829,6 +1829,7 @@ msgstr "" "Erro ao ler do processo de resolução:\n" "%s" +#, c-format msgid "Resolver process exited without answering our request" msgstr "Processo que resolve fechou sem responder nossa requisição" @@ -2842,7 +2843,6 @@ msgstr "" "Não foi possível estabelecer conexão com o servidor mDNS local. Ele está " "rodando?" -#. Creating the options for the protocol msgid "First name" msgstr "Nome" @@ -2874,6 +2874,10 @@ msgstr "Plug-in do protocolo Bonjour" msgid "Purple Person" msgstr "Pessoa púrpura" +#. Creating the options for the protocol +msgid "Local Port" +msgstr "Porta local" + msgid "Bonjour" msgstr "Bonjour" @@ -4680,9 +4684,6 @@ msgstr "Ações" msgid "Select an action" msgstr "Selecione uma ação" -msgid "Unable to retrieve MSN Address Book" -msgstr "Falha ao obter catálogo de endereços do MSN" - #. 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 @@ -4716,165 +4717,218 @@ msgstr "" "%s está na lista local, mas não está na lista do servidor. Você deseja " "adicionar este amigo?" +#, c-format msgid "Unable to parse message" msgstr "Não foi possível processar mensagem" +#, c-format msgid "Syntax Error (probably a client bug)" msgstr "Erro de sintaxe (provavelmente um bug do cliente)" +#, c-format msgid "Invalid email address" msgstr "Endereço de email inválido" +#, c-format msgid "User does not exist" msgstr "Usuário inexistente" +#, c-format msgid "Fully qualified domain name missing" msgstr "Faltando nome de domínio totalmente qualificado" +#, c-format msgid "Already logged in" msgstr "Você já está conectado" +#, c-format msgid "Invalid username" msgstr "Nome de usuário inválido" +#, c-format msgid "Invalid friendly name" msgstr "Apelido inválido" +#, c-format msgid "List full" msgstr "Lista cheia" +#, c-format msgid "Already there" msgstr "Já está lá" +#, c-format msgid "Not on list" msgstr "Não está na lista" +#, c-format msgid "User is offline" msgstr "Usuário está desconectado" +#, c-format msgid "Already in the mode" msgstr "Você já está nesse modo" +#, c-format msgid "Already in opposite list" msgstr "Usuário já está na lista oposta" +#, c-format msgid "Too many groups" msgstr "Excesso de grupos" +#, c-format msgid "Invalid group" msgstr "Grupo inválido" +#, c-format msgid "User not in group" msgstr "O usuário não está no grupo" +#, c-format msgid "Group name too long" msgstr "Nome do grupo muito extenso." +#, c-format msgid "Cannot remove group zero" msgstr "Não foi possível remover o grupo zero" +#, c-format msgid "Tried to add a user to a group that doesn't exist" msgstr "Você tentou adicionar um usuário a um grupo que não existe" +#, c-format msgid "Switchboard failed" msgstr "O quadro de comunicações falhou" +#, c-format msgid "Notify transfer failed" msgstr "A notificação de transferência falhou" +#, c-format msgid "Required fields missing" msgstr "Campos requeridos não foram preenchidos" +#, c-format msgid "Too many hits to a FND" msgstr "Acessos demais a um FND" +#, c-format msgid "Not logged in" msgstr "Desconectado" +#, c-format msgid "Service temporarily unavailable" msgstr "Serviço temporariamente indisponível" +#, c-format msgid "Database server error" msgstr "Erro do servidor de banco de dados" +#, c-format msgid "Command disabled" msgstr "Comando desativado" +#, c-format msgid "File operation error" msgstr "Erro ao executar operação de arquivo" +#, c-format msgid "Memory allocation error" msgstr "Erro de alocação de memória" +#, c-format msgid "Wrong CHL value sent to server" msgstr "Valor CHL incorreto enviado para o servidor" +#, c-format msgid "Server busy" msgstr "Servidor ocupado" +#, c-format msgid "Server unavailable" msgstr "Servidor indisponível" +#, c-format msgid "Peer notification server down" msgstr "O servidor de notificação de pares está fora do ar" +#, c-format msgid "Database connect error" msgstr "Erro ao conectar ao banco de dados" +#, c-format msgid "Server is going down (abandon ship)" msgstr "O servidor vai sair do ar (abandonar navio)" +#, c-format msgid "Error creating connection" msgstr "Erro ao criar a conexão" +#, c-format msgid "CVR parameters are either unknown or not allowed" msgstr "Parâmetros CVR desconhecidos ou não permitidos" +#, c-format msgid "Unable to write" msgstr "Não foi possível enviar" +#, c-format msgid "Session overload" msgstr "Sessão sobrecarregada" +#, c-format msgid "User is too active" msgstr "O usuário está muito ativo" +#, c-format msgid "Too many sessions" msgstr "Excesso de sessões" +#, c-format msgid "Passport not verified" msgstr "Conta do Passport não verificada" +#, c-format msgid "Bad friend file" msgstr "Arquivo de amigos mal formado" +#, c-format msgid "Not expected" msgstr "Inesperado" +#, c-format msgid "Friendly name changes too rapidly" msgstr "O apelido foi mudado rapidamente demais" +#, c-format msgid "Server too busy" msgstr "Servidor ocupado demais" +#, c-format msgid "Authentication failed" msgstr "Autenticação mal sucedida" +#, c-format msgid "Not allowed when offline" msgstr "Não permitido enquanto desconectado" +#, c-format msgid "Not accepting new users" msgstr "Usuários novos não estão sendo aceitos" +#, c-format msgid "Kids Passport without parental consent" msgstr "Passport para crianças sem consentimento dos pais" +#, c-format msgid "Passport account not yet verified" msgstr "Conta do Passport ainda não foi verificada" msgid "Passport account suspended" msgstr "Conta do Passport suspensa" +#, c-format msgid "Bad ticket" msgstr "Bilhete inválido" @@ -6464,12 +6518,10 @@ msgid "_OK" msgstr "_OK" #, c-format -msgid "" -"You may be disconnected shortly. You may want to use TOC until this is " -"fixed. Check %s for updates." +msgid "You may be disconnected shortly. If so, check %s for updates." msgstr "" -"Você pode ser desconectado num curto período de tempo. Você pode querer usar " -"o TOC até que isso esteja corrigido. Verifique por atualizações em %s." +"Você pode ser desconectado em brevo. Se isso acontecer, verifique " +"atualizações em %s." msgid "Unable to get a valid AIM login hash." msgstr "Não foi possível conseguir um hash de conexão AIM válido." @@ -6937,6 +6989,7 @@ msgstr "C_onectar" msgid "Get AIM Info" msgstr "Ver informações do AIM" +#. We only do this if the user is in our buddy list msgid "Edit Buddy Comment" msgstr "Editar comentário do amigo" @@ -7523,6 +7576,9 @@ msgstr "<p><b>Contribuidores amáveis de patch</b>:<br>\n" msgid "<p><b>Acknowledgement</b>:<br>\n" msgstr "<p><b>Agradecimento</b>:<br>\n" +msgid "<p><b>Scrupulous Testers</b>:<br>\n" +msgstr "<p><b>Testadores Escrupulosos</b>:<br>\n" + msgid "<p><i>And, all the boys in the backroom...</i><br>\n" msgstr "<p><i>E, todos os garotos nos bastidores...</i><br>\n" @@ -7548,6 +7604,9 @@ msgstr "Atualizar todos os Quns do QQ" msgid "About OpenQ" msgstr "Sobre o OpenQ" +msgid "Modify Buddy Memo" +msgstr "Modificar Lembrete do Amigo" + #. *< type #. *< ui_requirement #. *< flags @@ -7585,6 +7644,9 @@ msgstr "Mostrar avisos do servidor" msgid "Show server news" msgstr "Mostrar novidades do servidor" +msgid "Show chat room when msg comes" +msgstr "Mostrar sala de chat quando enviarem uma mensagem" + msgid "Keep alive interval (seconds)" msgstr "Intervalo de keep-alive (segundos)" @@ -8343,6 +8405,7 @@ msgstr "<br><b>HMAC do canal:</b> %s" msgid "<br><b>Channel Topic:</b><br>%s" msgstr "<br><b>Tópico do canal:</b><br>%s" +#, c-format msgid "<br><b>Channel Modes:</b> " msgstr "<br><b>Modos do canal:</b> " @@ -8367,6 +8430,7 @@ msgstr "Frase-senha do canal" msgid "Channel Public Keys List" msgstr "Lista de chaves públicas do canal" +#, c-format msgid "" "Channel authentication is used to secure the channel from unauthorized " "access. The authentication may be based on passphrase and digital " @@ -8765,6 +8829,7 @@ msgstr "Download %s: %s" msgid "Your Current Mood" msgstr "Seu humor atual" +#, c-format msgid "Normal" msgstr "Normal" @@ -9148,33 +9213,43 @@ msgstr "Quadro de atividades" msgid "No server statistics available" msgstr "Estatísticas do servidor indisponíveis" +#, c-format msgid "Failure: Version mismatch, upgrade your client" msgstr "Falha: Versões incompatíveis, atualize seu cliente" +#, c-format msgid "Failure: Remote does not trust/support your public key" msgstr "Falha: O usuário remoto não confia/suporta sua chave pública." +#, c-format msgid "Failure: Remote does not support proposed KE group" msgstr "Falha: O usuário remoto não suporta o grupo KE proposto." +#, c-format msgid "Failure: Remote does not support proposed cipher" msgstr "Falha: O usuário remoto não suporta a cifra proposta" +#, c-format msgid "Failure: Remote does not support proposed PKCS" msgstr "Falha: O usuário remoto não suporta o PKCS proposto" +#, c-format msgid "Failure: Remote does not support proposed hash function" msgstr "Falha: O usuário remoto não suporta a função de hash proposta" +#, c-format msgid "Failure: Remote does not support proposed HMAC" msgstr "Falha: O usuário remoto não suporta o HMAC proposto" +#, c-format msgid "Failure: Incorrect signature" msgstr "Falha: Assinatura incorreta" +#, c-format msgid "Failure: Invalid cookie" msgstr "Falha: Cookie inválido" +#, c-format msgid "Failure: Authentication failed" msgstr "Falha: Autenticação mal sucedida" @@ -9274,6 +9349,7 @@ msgstr "%s não está conectado no momento." msgid "Warning of %s not allowed." msgstr "Alertar %s não é permitido." +#, c-format msgid "A message has been dropped, you are exceeding the server speed limit." msgstr "" "Uma mensagem foi descartada, você está excedendo o limite de velocidade do " @@ -9298,30 +9374,39 @@ msgstr "" "Você perdeu uma mensagem de mensagem instantânea de %s porque ela foi " "enviada muito rapidamente." +#, c-format msgid "Failure." msgstr "Falha." +#, c-format msgid "Too many matches." msgstr "Excesso de resultados." +#, c-format msgid "Need more qualifiers." msgstr "Necessários mais qualificadores." +#, c-format msgid "Dir service temporarily unavailable." msgstr "Serviço de diretório temporariamente indisponível." +#, c-format msgid "Email lookup restricted." msgstr "Pesquisa por email restrita." +#, c-format msgid "Keyword ignored." msgstr "Palavra-chave ignorada." +#, c-format msgid "No keywords." msgstr "Nenhuma palavra-chave." +#, c-format msgid "User has no directory information." msgstr "Usuário não tem informação de diretório." +#, c-format msgid "Country not supported." msgstr "País não suportado." @@ -9329,16 +9414,20 @@ msgstr "País não suportado." msgid "Failure unknown: %s." msgstr "Falha desconhecida: %s." +#, c-format msgid "Incorrect username or password." msgstr "Nome de usuário ou senha incorreto(a)." +#, c-format msgid "The service is temporarily unavailable." msgstr "O serviço está temporariamente indisponível." +#, c-format msgid "Your warning level is currently too high to log in." msgstr "" "Seu nível de alerta é alto demais para que você possa se conectar no momento." +#, c-format 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." @@ -10168,22 +10257,27 @@ msgid " (%s)" msgstr "(%s)" #. 10053 +#, c-format msgid "Connection interrupted by other software on your computer." msgstr "Conexão interrompida por outro software no seu computador." #. 10054 +#, c-format msgid "Remote host closed connection." msgstr "O usuário remoto encerrou a conexão." #. 10060 +#, c-format msgid "Connection timed out." msgstr "Tempo limite de conexão esgotado." #. 10061 +#, c-format msgid "Connection refused." msgstr "Conexão rejeitada." #. 10048 +#, c-format msgid "Address already in use." msgstr "O endereço já está em uso" @@ -11295,6 +11389,9 @@ msgstr "Lituano" msgid "Macedonian" msgstr "Macedônio" +msgid "Mongolian" +msgstr "Mongol" + msgid "Bokmål Norwegian" msgstr "Dano-Norueguês" @@ -11407,8 +11504,33 @@ msgstr "" "contribuidoes. Veja o arquivo 'COPYRIGHT' para uma lista completa destes " "contribuidores. Não oferecemos nenhuma garantia para este programa.<BR><BR>" -msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" -msgstr "<FONT SIZE=\"4\">IRC:</FONT> #pidgin no irc.freenode.net<BR><BR>" +#, c-format +msgid "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">Ajuda por e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgstr "" +"<FONT SIZE=\"4\">Canal do IRC:</FONT> #pidgin no irc.freenode.net<BR><BR>" + +#, c-format +msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" +msgstr "" +"<FONT SIZE=\"4\">MUC(Multi User Chat) do XMPP:</FONT> devel@conference." +"pidgin.im <BR><BR>" msgid "Current Developers" msgstr "Desenvolvedores atuais" @@ -11768,9 +11890,11 @@ msgstr "" msgid "Save Image" msgstr "Salvar imagem" +#, c-format msgid "_Save Image..." msgstr "_Salvar imagem..." +#, c-format msgid "_Add Custom Smiley..." msgstr "Exibir emoticons personalizados" @@ -12064,6 +12188,10 @@ msgstr "" msgid "Pidgin" msgstr "Pidgin" +#, c-format +msgid "Exiting because another libpurple client is already running.\n" +msgstr "Saindo porque outro cliente libpurple já está sendo executado.\n" + msgid "Open All Messages" msgstr "Abrir todas as mensagens" @@ -12404,6 +12532,10 @@ msgstr "Servidor proxy" msgid "No proxy" msgstr "Nenhum proxy" +#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings +msgid "Use remote DNS with SOCKS4 proxies" +msgstr "Usar DNS remoto com proxies SOCKS4" + msgid "_User:" msgstr "_Usuário:" @@ -12484,21 +12616,27 @@ msgstr "Gravar todos as mudanças de _status no histórico do sistema" msgid "Sound Selection" msgstr "Seleção de som" +#, c-format msgid "Quietest" msgstr "Muito silencioso" +#, c-format msgid "Quieter" msgstr "Mais silencioso" +#, c-format msgid "Quiet" msgstr "Silencioso" +#, c-format msgid "Loud" msgstr "Alto" +#, c-format msgid "Louder" msgstr "Mais alto" +#, c-format msgid "Loudest" msgstr "Muito alto" @@ -13511,6 +13649,7 @@ msgstr "Diálogo de notificação" msgid "Select Color" msgstr "Selecionar cor" +#, c-format msgid "Select Interface Font" msgstr "Selecionar fonte da interface" @@ -13738,6 +13877,7 @@ msgstr "" msgid "Timestamp Format Options" msgstr "Opções de formatação da marcação de tempo" +#, c-format msgid "_Force 24-hour time format" msgstr "_Forçar formato de data 24-horas" @@ -13857,9 +13997,6 @@ msgstr "_Manter a janela da lista de amigos no topo:" msgid "Only when docked" msgstr "Apenas quando ancorado" -msgid "_Flash window when chat messages are received" -msgstr "_Piscar a janela quando mensagens de bate-papo forem recebidas" - msgid "Windows Pidgin Options" msgstr "Opções do Pidgin para Windows" @@ -13909,6 +14046,20 @@ msgstr "Envia e recebe comandos (stanzas) do XMPP puros." msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "Este plug-in é útil para depurar servidores ou clientes XMPP." +#~ msgid "Unable to retrieve MSN Address Book" +#~ msgstr "Falha ao obter catálogo de endereços do MSN" + +#~ msgid "" +#~ "You may be disconnected shortly. You may want to use TOC until this is " +#~ "fixed. Check %s for updates." +#~ msgstr "" +#~ "Você pode ser desconectado num curto período de tempo. Você pode querer " +#~ "usar o TOC até que isso esteja corrigido. Verifique por atualizações em %" +#~ "s." + +#~ msgid "_Flash window when chat messages are received" +#~ msgstr "_Piscar a janela quando mensagens de bate-papo forem recebidas" + #~ msgid "Connection to server lost (no data received within %d second)" #~ msgid_plural "" #~ "Connection to server lost (no data received within %d seconds)" @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: ru\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-02-22 16:18-0500\n" +"POT-Creation-Date: 2009-03-01 19:00-0500\n" "PO-Revision-Date: 2008-05-14 15:00+0400\n" "Last-Translator: Антон Самохвалов <samant.ua@mail.ru>\n" "Language-Team: \n" @@ -23,7 +23,7 @@ msgstr "" #. Translators may want to transliterate the name. #. It is not to be translated. msgid "Finch" -msgstr "Finch" +msgstr "Зяблик" #, c-format msgid "%s. Try `%s -h' for more information.\n" @@ -740,6 +740,12 @@ msgid "" "background>: black, red, green, blue, white, gray, darkgray, magenta, " "cyan, default<br><br>EXAMPLE:<br> msgcolor send cyan default" msgstr "" +"цвет сообщения <класс> <передний план> <фон>: Установите " +"цвет для различных классов сообщений в окне общения.<br> <класс>: " +"получить, отправить, подсветить, действие, фиксация времени<br> < " +"передний план/фон>: чёрный, красный, зелёный, синий, белый, серый, тёмно-" +"серый, пурпурный, голубой, по умолчанию<br><br>ПРИМЕР:<br> цвет сообщения " +"отправки по умолчанию голубой" msgid "Unable to open file." msgstr "Не удаётся открыть файл." @@ -1197,7 +1203,7 @@ msgid "Choose Location..." msgstr "Выбрать местоположение..." msgid "Hit 'Enter' to find more rooms of this category." -msgstr "" +msgstr "Щёлкните 'Enter', чтобы найти больше комнат этой категории." msgid "Get" msgstr "Получить" @@ -1509,7 +1515,7 @@ msgid "Online/Offline" msgstr "В сети/Не в сети" msgid "Meebo" -msgstr "" +msgstr "Мибо" msgid "No Grouping" msgstr "Нет объединения" @@ -2145,7 +2151,7 @@ msgstr "Этот модуль не имеет ID." #, c-format msgid "Plugin magic mismatch %d (need %d)" -msgstr "" +msgstr "Магическое несоответствие модуля %d (нужно %d)" #, c-format msgid "ABI version mismatch %d.%d.x (need %d.%d.x)" @@ -2155,7 +2161,7 @@ msgstr "Несоответствие версии ABI %d.%d.x (необходи msgid "" "Plugin does not implement all required functions (list_icon, login and close)" msgstr "" -"Модуль не реализует всех требуемых функций (list_icon, login and close)" +"Модуль не реализует всех требуемых функций (список _иконок, вход и закрытие)" #, c-format msgid "" @@ -2428,6 +2434,8 @@ msgid "" "This plugin hides join/part messages in large rooms, except for those users " "actively taking part in a conversation." msgstr "" +"Этот модуль прячет сообщения подсоединения/обособления в больших комнатах, " +"кроме тех пользователей, которые активно принимают участие в общении." #. This is used in the place of a timezone abbreviation if the #. * offset is way off. The user should never really see it, but @@ -3406,7 +3414,7 @@ msgstr "Псевдоним или канал временно недоступе #, c-format msgid "Wallops from %s" -msgstr "" +msgstr "Грохот от %s" msgid "action <action to perform>: Perform an action." msgstr "action <действие для выполнения>: Выполнить действие." @@ -7330,6 +7338,38 @@ msgstr "Обновить" msgid "Could not change buddy information." msgstr "Не могу изменить информацию о собеседнике." +msgid "Mobile" +msgstr "Мобильный" + +msgid "Note" +msgstr "Заметки" + +#. callback +#, fuzzy +msgid "Buddy Memo" +msgstr "Значок собеседника" + +msgid "Change his/her memo as you like" +msgstr "" + +#, fuzzy +msgid "_Modify" +msgstr "Изменить" + +#, fuzzy +msgid "Memo Modify" +msgstr "Изменить" + +#, fuzzy +msgid "Server says:" +msgstr "Сервер занят" + +msgid "Your request was accepted." +msgstr "" + +msgid "Your request was rejected." +msgstr "" + #, fuzzy, c-format msgid "%u requires verification" msgstr "%u требует подтверждения" @@ -7671,6 +7711,10 @@ msgstr "<p><b>Влюблённые писатели патчей</b>:<br>\n" msgid "<p><b>Acknowledgement</b>:<br>\n" msgstr "<p><b>Подтверждение</b>:<br>\n" +#, fuzzy +msgid "<p><b>Scrupulous Testers</b>:<br>\n" +msgstr "<p><b>Исходный автор</b>:<br>\n" + msgid "<p><i>And, all the boys in the backroom...</i><br>\n" msgstr "<p><i>И все мальчики в задней комнате...</i><br>\n" @@ -7699,6 +7743,10 @@ msgstr "Обновить все QQ Quns" msgid "About OpenQ" msgstr "Об OpenQ" +#, fuzzy +msgid "Modify Buddy Memo" +msgstr "Изменить адрес" + #. *< type #. *< ui_requirement #. *< flags @@ -8737,9 +8785,6 @@ msgstr "Организация" msgid "Unit" msgstr "Отдел" -msgid "Note" -msgstr "Заметки" - msgid "Join Chat" msgstr "Присоединиться к чату" @@ -10234,9 +10279,6 @@ msgstr "Не беспокоить" msgid "Extended away" msgstr "Расширенный \"Отошёл\"" -msgid "Mobile" -msgstr "Мобильный" - msgid "Listening to music" msgstr "Слушает музыку" @@ -10502,7 +10544,7 @@ msgid "Unable to save new account" msgstr "Не удаётся сохранить новую учётную запись" msgid "An account already exists with the specified criteria." -msgstr "" +msgstr "Учётная запись с указанными критериями уже существует." msgid "Add Account" msgstr "Добавить учётную запись" @@ -11082,7 +11124,7 @@ msgid "Change Size" msgstr "Изменить размер" msgid "Show All" -msgstr "" +msgstr "Показать всё" #. Conversation menu msgid "/_Conversation" @@ -13889,7 +13931,7 @@ msgstr "" #, c-format msgid "You can upgrade to %s %s today." -msgstr "" +msgstr "You can upgrade to %s %s today." msgid "New Version Available" msgstr "Доступна новая версия" @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Pidgin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-01 15:52-0800\n" -"PO-Revision-Date: 2008-12-18 20:21+0100\n" +"POT-Creation-Date: 2009-02-25 23:20+0100\n" +"PO-Revision-Date: 2009-02-25 23:14+0100\n" "Last-Translator: Peter Hjalmarsson <xake@rymdraket.net>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -33,7 +33,7 @@ msgid "" "Usage: %s [OPTION]...\n" "\n" " -c, --config=DIR use DIR for config files\n" -" -d, --debug print debugging messages to stdout\n" +" -d, --debug print debugging messages to stderr\n" " -h, --help display this help and exit\n" " -n, --nologin don't automatically login\n" " -v, --version display the current version and exit\n" @@ -72,9 +72,8 @@ msgstr "Rapportering av ny e-post" msgid "Remember password" msgstr "Kom ihåg lösenordet" -#, fuzzy msgid "There are no protocol plugins installed." -msgstr "Det finns inga moduler för protokoll installerade." +msgstr "Det finns inga protokollmoduler installerade." msgid "(You probably forgot to 'make install'.)" msgstr "(Du glömde antagligen att köra 'make install'.)" @@ -464,7 +463,7 @@ msgid "X.509 certificate import failed" msgstr "X.509-certifikatimportering misslyckades" msgid "Select a PEM certificate" -msgstr "Välj et PEM-certifikat" +msgstr "Välj ett PEM-certifikat" #, c-format msgid "" @@ -478,10 +477,10 @@ msgid "Certificate Export Error" msgstr "Certifikatsexporteringsfel" msgid "X.509 certificate export failed" -msgstr "X.509-certifikasexportering misslyckades" +msgstr "X.509-certifikatsexportering misslyckades" msgid "PEM X.509 Certificate Export" -msgstr "PEM X.509-certifikasexportering" +msgstr "PEM X.509-certifikatsexportering" #, c-format msgid "Certificate for %s" @@ -551,13 +550,13 @@ msgid "" "automatically rejoined in the chat when the account reconnects." msgstr "" "Kontot har inaktiverats och du är inte längre med i denna chatt. Du kommer " -"autimatiskt gå med i chatten när kontot återansluts." +"automatiskt gå med i chatten när kontot återansluts." msgid "No such command." msgstr "Finns inget sådant kommando." msgid "Syntax Error: You typed the wrong number of arguments to that command." -msgstr "Syntaxfel: Du skrev fel antal argument till det kommandot." +msgstr "Syntaxfel: Du skrev fel antal argument till det kommandot." msgid "Your command failed for an unknown reason." msgstr "Ditt kommando misslyckades av okänd anledning." @@ -608,7 +607,7 @@ msgid "Send To" msgstr "Skicka till" msgid "Invite message" -msgstr "Ibjudningsmeddelande" +msgstr "Inbjudningsmeddelande" msgid "Invite" msgstr "Bjud in" @@ -651,7 +650,7 @@ msgstr[0] "Lista över %d användare:\n" msgstr[1] "Lista över %d användare:\n" msgid "Supported debug options are: version" -msgstr "De felsökningsalternativ som stöds är: version" +msgstr "De felsökningsalternativ som stöds är: version" msgid "No such command (in this context)." msgstr "Det finns inget sådant kommando (i denna kontext)." @@ -700,7 +699,7 @@ msgid "help <command>: Help on a specific command." msgstr "help <kommando>: Hjälp för ett specifikt kommando." msgid "users: Show the list of users in the chat." -msgstr "users: Visa listan av användare i chatten." +msgstr "users: Visa listan av användare i chatten." msgid "plugins: Show the plugins window." msgstr "plugins: Visa fönstret med insticksmoduler." @@ -878,10 +877,10 @@ msgid "System Log" msgstr "Systemlogg" msgid "Emails" -msgstr "Epost" +msgstr "Mejl" msgid "You have mail!" -msgstr "Du har ett e-post!" +msgstr "Du har fått mejl!" msgid "Sender" msgstr "Sändare" @@ -896,7 +895,7 @@ msgstr[0] "%s (%s) har %d nytt meddelande." msgstr[1] "%s (%s) har %d nya meddelanden." msgid "New Mail" -msgstr "Ny epost" +msgstr "Ny mejl" #, c-format msgid "Info for %s" @@ -946,13 +945,13 @@ msgid "Plugin need to be loaded before you can configure it." msgstr "Modulen behöver laddas före du kan konfigurera den." msgid "No configuration options for this plugin." -msgstr "Ingen konfiguration tillgängliga för denna modul." +msgstr "Inga konfigurationalternativ tillgängliga för denna modul." msgid "Error loading plugin" msgstr "Fel vid inläsning av insticksmodul" msgid "The selected file is not a valid plugin." -msgstr "Den valda filen är inte en giltig instickmodul." +msgstr "Den valda filen är inte en giltig insticksmodul." msgid "" "Please open the debug window and try again to see the exact error message." @@ -961,13 +960,13 @@ msgstr "" "felmeddelandet." msgid "Select plugin to install" -msgstr "Välj en instickmodul att installera" +msgstr "Välj en insticksmodul att installera" msgid "You can (un)load plugins from the following list." msgstr "Du kan (av)läsa moduler från följande lista." msgid "Install Plugin..." -msgstr "Installera instickmodul..." +msgstr "Installera insticksmodul..." msgid "Configure Plugin" msgstr "Konfigurera modul" @@ -1116,7 +1115,7 @@ msgstr "%s har sänt dig ett meddelande. (%s)" #, c-format msgid "Unknown pounce event. Please report this!" -msgstr "Okänd atackhändelse. Var snäll och rapportera detta!" +msgstr "Okänd attackhändelse. Var snäll och rapportera detta!" msgid "Based on keyboard use" msgstr "Baserat på tangetbordsanvändning" @@ -1160,7 +1159,6 @@ msgstr "Minuter innan status ska ändras" msgid "Change status to" msgstr "Ändra status till" -#. Conversations msgid "Conversations" msgstr "Konversationer" @@ -1283,7 +1281,7 @@ msgid "Only when available" msgstr "Endast vid tillgänglig" msgid "Only when not available" -msgstr "Edast vid Ej tillgänglig" +msgstr "Endast vid Ej tillgänglig" msgid "Volume(0-100):" msgstr "Volym(0-100):" @@ -1401,7 +1399,7 @@ msgid "" "When the gnt clipboard contents change, the contents are made available to " "X, if possible." msgstr "" -"När innehållet i gnt klippboken ändras görs innehållet tillgänligt för X, " +"När innehållet i gnt klippboken ändras görs innehållet tillgängligt för X, " "när det är möjligt." #, c-format @@ -1456,7 +1454,7 @@ msgid "<b>Conversation with %s on %s:</b><br>" msgstr "<b>Konversation med %s på %s:</b><br>" msgid "History Plugin Requires Logging" -msgstr "Historikinstiksmodulen kräver loggning" +msgstr "Historikinsticksmodulen kräver loggning" msgid "" "Logging can be enabled from Tools -> Preferences -> Logging.\n" @@ -1482,7 +1480,6 @@ msgstr "" "När en ny konversation öppnas kommer denna insticksmodul att lägga till den " "föregående konversationen i den nuvarande." -#, c-format msgid "Online" msgstr "Ansluten" @@ -1556,7 +1553,7 @@ msgid "Fill out all fields completely." msgstr "Fyll i alla fält fullständigt." msgid "Original password" -msgstr "Ursprugligt lösenord" +msgstr "Ursprungligt lösenord" msgid "New password" msgstr "Nytt lösenord" @@ -1829,7 +1826,7 @@ msgstr "" #, c-format msgid "Resolver process exited without answering our request" -msgstr "" +msgstr "Uppslagningsprocessen avslutades utan att besvara våran förfrågan" #, c-format msgid "Thread creation failure: %s" @@ -1859,7 +1856,7 @@ msgid "" "Error accessing %s: \n" "%s.\n" msgstr "" -"Fel vid försök att nå %s: \n" +"Fel vid försök att nå %s: \n" "%s.\n" msgid "Directory is not writable." @@ -1917,7 +1914,6 @@ msgstr "Inleder filöverföring av %s från %s" msgid "Transfer of file %s complete" msgstr "Överföringen av filen %s är färdig" -#, c-format msgid "File transfer complete" msgstr "Filöverföringen slutfördes" @@ -1925,7 +1921,6 @@ msgstr "Filöverföringen slutfördes" msgid "You canceled the transfer of %s" msgstr "Du avbröt överföringen av %s" -#, c-format msgid "File transfer cancelled" msgstr "Filöverföringen avbröts" @@ -1999,42 +1994,42 @@ msgstr "Hanteraren för \"ymsgr\" URLer" msgid "" "True if the command specified in the \"command\" key should handle \"aim\" " "URLs." -msgstr "Sant om kommandot i nykeln \"kommando\" ska hantera \"aim\" URLer" +msgstr "Sant om kommandot i nyckeln \"kommando\" ska hantera \"aim\" URLer" msgid "" "True if the command specified in the \"command\" key should handle \"gg\" " "URLs." -msgstr "Sant om kommandot i nykeln \"kommando\" ska hantera \"gg\" URLer" +msgstr "Sant om kommandot i nyckeln \"kommando\" ska hantera \"gg\" URLer" msgid "" "True if the command specified in the \"command\" key should handle \"icq\" " "URLs." -msgstr "Sant om kommandot i nykeln \"kommando\" ska hantera \"icq\" URLer" +msgstr "Sant om kommandot i nyckeln \"kommando\" ska hantera \"icq\" URLer" msgid "" "True if the command specified in the \"command\" key should handle \"irc\" " "URLs." -msgstr "Sant om kommandot i nykeln \"kommando\" ska hantera \"irc\" URLer" +msgstr "Sant om kommandot i nyckeln \"kommando\" ska hantera \"irc\" URLer" msgid "" "True if the command specified in the \"command\" key should handle \"msnim\" " "URLs." -msgstr "Sant om kommandot i nykeln \"kommando\" ska hantera \"msnim\" URLer" +msgstr "Sant om kommandot i nyckeln \"kommando\" ska hantera \"msnim\" URLer" msgid "" "True if the command specified in the \"command\" key should handle \"sip\" " "URLs." -msgstr "Sant om kommandot i nykeln \"kommando\" ska hantera \"sip\" URLer" +msgstr "Sant om kommandot i nyckeln \"kommando\" ska hantera \"sip\" URLer" msgid "" "True if the command specified in the \"command\" key should handle \"xmpp\" " "URLs." -msgstr "Sant om kommandot i nykeln \"kommando\" ska hantera \"xmpp\" URLer" +msgstr "Sant om kommandot i nyckeln \"kommando\" ska hantera \"xmpp\" URLer" msgid "" "True if the command specified in the \"command\" key should handle \"ymsgr\" " "URLs." -msgstr "Sant om kommandot i nykeln \"kommando\" ska hantera \"ymsgr\" URLer" +msgstr "Sant om kommandot i nyckeln \"kommando\" ska hantera \"ymsgr\" URLer" msgid "" "True if the command used to handle this type of URL should be run in a " @@ -2116,13 +2111,12 @@ msgstr "(%s) %s <AUTO-SVAR>: %s\n" msgid "You are using %s, but this plugin requires %s." msgstr "Du använder %s men denna modul behöver %s." -#, c-format msgid "This plugin has not defined an ID." msgstr "Insticksmodulen har inte definierat ett ID." #, c-format msgid "Plugin magic mismatch %d (need %d)" -msgstr "Modulmagi atchar inte %d (behöver %d)" +msgstr "Modulmagi matchar inte %d (behöver %d)" #, c-format msgid "ABI version mismatch %d.%d.x (need %d.%d.x)" @@ -2521,7 +2515,7 @@ msgid "" "at your own risk!" msgstr "" "Vid visning av loggfiler inkluderar denna modul loggar från andra IM-" -"klienter. För närvarande inkluderar detta Adium, MSN Messenger, och " +"klienter. För närvarande inkluderar detta Adium, MSN Messenger, och " "Trillian.\n" "\n" "VARNING: Denna modul är fortfarande alpha-kod och kan krasha ofta. Använd på " @@ -2576,7 +2570,7 @@ msgid "" "pounce from the `Buddy Pounce' dialog." msgstr "" "Resten av meddelanden kommer sparas som notifieringar. Du kan ändra/ta bort " -"notifieringarna från `Kompisnotifieringar'-dialogen." +"notifieringarna från `Kompisnotifieringar' dialogen." #, c-format msgid "" @@ -2587,11 +2581,11 @@ msgstr "" "som en notifiering och skicka dem automatiskt när \"%s\" ansluter igen?" msgid "Offline Message" -msgstr "Frånkopplade meddeladen" +msgstr "Frånkopplade meddelanden" msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog" msgstr "" -"Du kan ändra/ta bort notifieringarna från `Kompisnotifieringar'-dialogen" +"Du kan ändra/ta bort notifieringarna från `Kompisnotifieringar' dialogen" msgid "Yes" msgstr "Ja" @@ -2671,7 +2665,7 @@ msgstr "Test för att avgöra om alla signaler fungerar korrekt." #. *< priority #. *< id msgid "Simple Plugin" -msgstr "Enken insticksmodul" +msgstr "Enkel insticksmodul" # Det ska inte vara "Testar" eler "Test" här? # Jag tror Testar blir mer korrekt, ja. @@ -2796,7 +2790,7 @@ msgid "" "Unable to detect ActiveTCL installation. If you wish to use TCL plugins, " "install ActiveTCL from http://www.activestate.com\n" msgstr "" -"Kunde inte finna en installation av ActiveTCL. Om du tänker använda TCL-" +"Kunde inte finna en installation av ActiveTCL. Om du tänker använda TCL-" "modulen måste du installera ActiveTCL från http://www.activestate.com\n" msgid "" @@ -2813,7 +2807,6 @@ msgid "" "Unable to establish connection with the local mDNS server. Is it running?" msgstr "Kunde inte skapa en anslutning via den lokala mDNS-servern. Körs den?" -#. Creating the options for the protocol msgid "First name" msgstr "Förnamn" @@ -2845,6 +2838,10 @@ msgstr "Insticksmodul för Bonjour-protokollet" msgid "Purple Person" msgstr "Purple person" +#. Creating the options for the protocol +msgid "Local Port" +msgstr "Lokal port" + msgid "Bonjour" msgstr "Bonjour" @@ -3011,7 +3008,6 @@ msgstr "Tillgänglig" #. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for #. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message #. Away stuff -#, c-format msgid "Away" msgstr "Frånvarande" @@ -3916,7 +3912,6 @@ msgstr "Pratig" msgid "Extended Away" msgstr "Utökad frånvaro" -#, c-format msgid "Do Not Disturb" msgstr "Stör inte" @@ -3935,7 +3930,7 @@ msgid "" "Each field supports wild card searches (%)" msgstr "" "Hitta en kontakt genom att ange sökkriteriet i de givna fälten. Notera: Alla " -"fälten stödjer wild card sökningar (%)" +"fälten stödjer wild card-sökningar (%)" msgid "Directory Query Failed" msgstr "Katalogförfrågning misslyckades" @@ -4151,6 +4146,9 @@ msgstr "Autentiserar" msgid "Re-initializing Stream" msgstr "Återinitierar flöde" +msgid "Server doesn't support blocking" +msgstr "Servern stödjer inte blockering" + msgid "Not Authorized" msgstr "Inte auktoriserad" @@ -4227,7 +4225,7 @@ msgid "Password (again)" msgstr "Lösenord (igen)" msgid "Change XMPP Password" -msgstr "Byt XMPP-lösenord" +msgstr "Byt XMPP lösenord" msgid "Please enter your new password" msgstr "Ange ditt nya lösenord" @@ -4237,7 +4235,7 @@ msgstr "Ändra användarinfo..." #. if (js->protocol_options & CHANGE_PASSWORD) { msgid "Change Password..." -msgstr "Byt lösenord..." +msgstr "Byt lösenor..." #. } msgid "Search for Users..." @@ -4539,7 +4537,6 @@ msgstr "Filetransports proxies" #. this should probably be part of global smiley theme settings later on, #. shared with MSN -#, fuzzy msgid "Show Custom Smileys" msgstr "Visa egna smileys" @@ -4564,7 +4561,7 @@ msgid "Message delivery to %s failed: %s" msgstr "Leverans av meddelande till %s misslyckades: %s" msgid "XMPP Message Error" -msgstr "XMPP-meddelandefel" +msgstr "XMPP meddelandefel" #, c-format msgid "(Code %s)" @@ -4618,7 +4615,7 @@ msgstr "Kan inte skicka filen till %s, användaren är inte ansluten" #, c-format msgid "Unable to send file to %s, not subscribed to user presence" msgstr "" -"Kan inte skicka filen till %s, prenumrerar inte på användartillgänglighet" +"Kan inte skicka filen till %s, prenumererar inte på användartillgänglighet" #, c-format msgid "Please select the resource of %s to which you would like to send a file" @@ -4661,8 +4658,18 @@ msgstr "Handlingar" msgid "Select an action" msgstr "Välj en handling" -msgid "Unable to retrieve MSN Address Book" -msgstr "Kunde inte hämta MSN-adressbok" +#. 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 +#, c-format +msgid "Unable to add \"%s\"." +msgstr "Kunde inte lägga till \"%s\"." + +msgid "Buddy Add error" +msgstr "" + +msgid "The username specified does not exist." +msgstr "Den angivna användarnamnet finns inte." #, c-format msgid "Buddy list synchronization issue in %s (%s)" @@ -4895,7 +4902,6 @@ msgstr "Barn-passport utan förälders medgivande" msgid "Passport account not yet verified" msgstr "Passkonto ännu inte verifierat" -#, c-format msgid "Passport account suspended" msgstr "Passport-kontot är avstängt" @@ -4911,13 +4917,11 @@ msgstr "Okänd felkod %d" msgid "MSN Error: %s\n" msgstr "MSN-fel: %s\n" -#, fuzzy msgid "Other Contacts" -msgstr "Föredragen kontakt" +msgstr "Andra kontakter" -#, fuzzy msgid "Non-IM Contacts" -msgstr "Ta bort kontakt" +msgstr "Icke-IM kontakter" msgid "Nudge" msgstr "Vibba" @@ -4981,7 +4985,7 @@ msgstr "" "MSN-servrarna blockerar för tillfället följande reguljära uttryck:<br/>%s" msgid "This account does not have email enabled." -msgstr "Detta kontot har inte epost aktiverat." +msgstr "Detta kontot har inte mejl aktiverat." msgid "Send a mobile message." msgstr "Skicka ett mobilmeddelande." @@ -4989,6 +4993,12 @@ msgstr "Skicka ett mobilmeddelande." msgid "Page" msgstr "Sök" +msgid "Playing a game" +msgstr "Spelar ett spel" + +msgid "Working" +msgstr "Arbetar" + msgid "Has you" msgstr "Har dig" @@ -5025,6 +5035,12 @@ msgstr "Artist" msgid "Album" msgstr "Album" +msgid "Game Title" +msgstr "Speltitel" + +msgid "Office Title" +msgstr "Kontorstitel" + msgid "Set Friendly Name..." msgstr "Ange smeknamn..." @@ -5063,7 +5079,7 @@ msgid "Failed to connect to server." msgstr "Kunde inte ansluta till servern." msgid "Error retrieving profile" -msgstr "Fel vid hämtninga av profil" +msgstr "Fel vid hämtning av profil" msgid "General" msgstr "Allmänt" @@ -5217,8 +5233,8 @@ msgstr "" "Kunde inte hitta någon information i användarens profil. Användaren " "existerar troligen inte." -msgid "Profile URL" -msgstr "Profil-URL" +msgid "View web profile" +msgstr "Visa webbprofil" #. *< type #. *< ui_requirement @@ -5273,9 +5289,8 @@ msgstr "Okänt fel (%d)" msgid "Unable to add user" msgstr "Kan inte lägga till användaren" -#, fuzzy msgid "The following users are missing from your addressbook" -msgstr "Din sökning gav följande resultat" +msgstr "De följande användarna saknas i din adressbok" #, c-format msgid "Unable to add user on %s (%s)" @@ -5348,10 +5363,9 @@ msgid "Message was not sent because messages are being sent too quickly." msgstr "" "Meddelandet kunde inte skickas eftersom meddelandena skickades för snabbt." -#, fuzzy msgid "Message was not sent because an unknown encoding error occurred." msgstr "" -"Meddelandet kunde kanske inte skickas på grund av att ett okänt fel uppstod:" +"Meddelandet skickades inte på grund av att ett okänt kodningsfel uppstod." msgid "Message was not sent because an unknown error occurred." msgstr "" @@ -5384,7 +5398,7 @@ msgid "You have signed on from another location." msgstr "Du har loggat in från en annan plats." msgid "The MSN servers are temporarily unavailable. Please wait and try again." -msgstr "MSN-sernvern är temporärt otillgänglig. Var god försök igen senare." +msgstr "MSN-sernvern är temporärt otillgänglig. Var god försök igen senare." msgid "The MSN servers are going down temporarily." msgstr "MSN-servern går ner temporärt." @@ -5396,7 +5410,7 @@ msgstr "Kan inte autentisera: %s" msgid "" "Your MSN buddy list is temporarily unavailable. Please wait and try again." msgstr "" -"Din MSN-kompislista är otillgänglig temporärt. Var god försök igen senare." +"Din MSN-kompislista är otillgänglig temporärt. Var god försök igen senare." msgid "Handshaking" msgstr "Handskakning" @@ -5464,20 +5478,11 @@ msgstr "%s har lagt till dig till sin kompislista." msgid "%s has removed you from his or her buddy list." msgstr "%s har tagit bort dig från sin kontaktlista." -#, fuzzy msgid "Delete Buddy from Address Book?" -msgstr "Lägg till i adressboken" +msgstr "Ta bort kompisen från adressboken?" -#, fuzzy msgid "Do you want to delete this buddy from your address book as well?" -msgstr "Vill du lägga till den här kompisen till din kompislista?" - -#. 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 -#, c-format -msgid "Unable to add \"%s\"." -msgstr "Kunde inte lägga till \"%s\"." +msgstr "Vill du även ta bort denna kompisen från din adressbok?" msgid "The username specified is invalid." msgstr "Den angivna användarnamnet är ogiltigt." @@ -5485,6 +5490,9 @@ msgstr "Den angivna användarnamnet är ogiltigt." msgid "This Hotmail account may not be active." msgstr "Detta Hotmail-konto är kanske inte aktivt." +msgid "Profile URL" +msgstr "Profil-URL" + #. *< type #. *< ui_requirement #. *< flags @@ -5498,18 +5506,12 @@ msgstr "Detta Hotmail-konto är kanske inte aktivt." msgid "MSN Protocol Plugin" msgstr "Insticksmodul för MSN-protokollet" -msgid "Missing Cipher" -msgstr "Chiffer Saknas" - -msgid "The RC4 cipher could not be found" -msgstr "RC4-chiffret kan inte hittas" +#, c-format +msgid "No such user: %s" +msgstr "Ingen sådan användare: %s" -msgid "" -"Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will " -"not be loaded." -msgstr "" -"Uppgradera till en version av libpurble med RC4-stöd (>= 2.0.1). MySpaceIM-" -"insticksmodulen kommer inte läsas in." +msgid "User lookup" +msgstr "Användarsökning" msgid "Reading challenge" msgstr "Läser challenge" @@ -5520,11 +5522,17 @@ msgstr "Oväntad challengelängd från server" msgid "Logging in" msgstr "Loggar in" -#, 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] "Anslutning till servern tappad (ingen data mottagen på %d sekund)" -msgstr[1] "Anslutning till servern tappad (ingen data mottagen på %d sekunder)" +msgid "MySpaceIM - No Username Set" +msgstr "MySpaceIM - Inget användarnamn angett" + +msgid "You appear to have no MySpace username." +msgstr "Du verkar inte ha något användarnamn hos MySpace." + +msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)" +msgstr "Vill du ange ett nu? (Obs: DETTA KAN INTE ÄNDRAS!)" + +msgid "Lost connection with server" +msgstr "Tappade anslutningen till servern" #. Can't write _()'d strings in array initializers. Workaround. msgid "New mail messages" @@ -5545,14 +5553,25 @@ msgstr "Nya bildkommentarer" msgid "MySpace" msgstr "MySpace" -msgid "MySpaceIM - No Username Set" -msgstr "MySpaceIM - Inget användarnamn angett" +msgid "IM Friends" +msgstr "Snabbmeddelandevänner" -msgid "You appear to have no MySpace username." -msgstr "Du verkar inte ha något användarnamn hos MySpace." +#, c-format +msgid "" +"%d buddy was added or updated from the server (including buddies already on " +"the server-side list)" +msgid_plural "" +"%d buddies were added or updated from the server (including buddies already " +"on the server-side list)" +msgstr[0] "" +"%d vän lades till eller uppdaterades av servern (inklusive vänner som redan " +"fanns på serverns lista)" +msgstr[1] "" +"%d vänner lades till eller uppdaterades av servern (inklusive vänner som " +"redan fanns på serverns lista)" -msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)" -msgstr "Vill du ange ett nu? (Obs: DETTA KAN INTE ÄNDRAS!)" +msgid "Add contacts from server" +msgstr "Lägg till kontakter från server" #. The session is now set up, ready to be connected. This emits the #. * signedOn signal, so clients can now do anything with msimprpl, and @@ -5579,6 +5598,19 @@ msgstr "" msgid "MySpaceIM Error" msgstr "MySpaceIM-fel" +msgid "Invalid input condition" +msgstr "Ogiltigt inmatningsvillkor" + +msgid "Read buffer full (2)" +msgstr "Läsbuffert full (2)" + +msgid "Unparseable message" +msgstr "Otolkbart meddelande" + +#, c-format +msgid "Couldn't connect to host: %s (%d)" +msgstr "Kunde inte ansluta till värd: %s (%d)" + # Vad säger att det är till just en chatt kompisen ska läggas till? msgid "Failed to add buddy" msgstr "Kunde inte lägga till kompis" @@ -5590,13 +5622,6 @@ msgstr "'addbuddy'-kommandot misslyckades." msgid "persist command failed" msgstr "'persist'-kommandot misslyckades" -#, c-format -msgid "No such user: %s" -msgstr "Ingen sådan användare: %s" - -msgid "User lookup" -msgstr "Användarsökning" - msgid "Failed to remove buddy" msgstr "Kunde inte ta bort kompis från chatt" @@ -5606,38 +5631,18 @@ msgstr "'delbuddy'-kommadot misslyckades" msgid "blocklist command failed" msgstr "'blocklist'-kommandot misslyckades" -msgid "Invalid input condition" -msgstr "Ogiltigt inmatningsvillkor" - -msgid "Read buffer full (2)" -msgstr "Läsbuffert full (2)" - -msgid "Unparseable message" -msgstr "Otolkbart meddelande" - -#, c-format -msgid "Couldn't connect to host: %s (%d)" -msgstr "Kunde inte ansluta till värd: %s (%d)" +msgid "Missing Cipher" +msgstr "Chiffer Saknas" -msgid "IM Friends" -msgstr "Snabbmeddelandevänner" +msgid "The RC4 cipher could not be found" +msgstr "RC4-chiffret kan inte hittas" -#, c-format msgid "" -"%d buddy was added or updated from the server (including buddies already on " -"the server-side list)" -msgid_plural "" -"%d buddies were added or updated from the server (including buddies already " -"on the server-side list)" -msgstr[0] "" -"%d vän lades till eller uppdaterades av servern (inklusive vänner som redan " -"fanns på serverns lista)" -msgstr[1] "" -"%d vänner lades till eller uppdaterades av servern (inklusive vänner som " -"redan fanns på serverns lista)" - -msgid "Add contacts from server" -msgstr "Lägg till kontakter från server" +"Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will " +"not be loaded." +msgstr "" +"Uppgradera till en version av libpurble med RC4-stöd (>= 2.0.1). MySpaceIM-" +"insticksmodulen kommer inte läsas in." msgid "Add friends from MySpace.com" msgstr "Lägg till vänner från MySpace.com" @@ -5681,9 +5686,6 @@ msgstr "Grundstorlek för tecken (punkter)" msgid "User" msgstr "Användare" -msgid "Profile" -msgstr "Profil" - msgid "Headline" msgstr "Rubrik" @@ -5696,17 +5698,6 @@ msgstr "Totala vänner" msgid "Client Version" msgstr "Klientversion" -#. Protocol won't log in now without a username set.. Disconnect -msgid "No username set" -msgstr "Inget användarnamn angett" - -msgid "MySpaceIM - Please Set a Username" -msgstr "MySpaceIM - Var vänlig ange ett användarnamn" - -msgid "Please enter a username to check its availability:" -msgstr "" -"Var vänlig ange ett användarnamn för att undersöka dess tillgänglighet." - msgid "MySpaceIM - Username Available" msgstr "MySpaceIM - Användarnamnet är tillgänglig" @@ -5716,12 +5707,23 @@ msgstr "Detta användarnamn är tillgängligt. Vill du ange det?" msgid "ONCE SET, THIS CANNOT BE CHANGED!" msgstr "OM EN GÅNG ANGETT GÅR DET INTE ATT ÄNDRA!" +msgid "MySpaceIM - Please Set a Username" +msgstr "MySpaceIM - Var vänlig ange ett användarnamn" + msgid "This username is unavailable." msgstr "Detta användarnamn är inte tillgängligt." msgid "Please try another username:" msgstr "Var vänlig försök med ett annat användarnamn:" +#. Protocol won't log in now without a username set.. Disconnect +msgid "No username set" +msgstr "Inget användarnamn angett" + +msgid "Please enter a username to check its availability:" +msgstr "" +"Var vänlig ange ett användarnamn för att undersöka dess tillgänglighet." + #. TODO: icons for each zap #. Lots of comments for translators: #. Zap means "to strike suddenly and forcefully as if with a @@ -5860,7 +5862,7 @@ msgid "Raspberrying %s..." msgstr "" msgid "Required parameters not passed in" -msgstr "Nödvändiga parametrar passade inte in" +msgstr "Nödvändiga parametrar skickades inte" msgid "Unable to write to network" msgstr "Kan inte skriva till nätverk" @@ -5878,7 +5880,7 @@ msgid "Conference does not exist" msgstr "Konferensen finns inte" msgid "A folder with that name already exists" -msgstr "En katalog med det namnet finn redan" +msgstr "En katalog med det namnet finns redan" msgid "Not supported" msgstr "Ej stödd" @@ -6108,7 +6110,6 @@ msgstr "" msgid "Error. SSL support is not installed." msgstr "Fel. SSL-stöd är inte installerat." -#, c-format msgid "This conference has been closed. No more messages can be sent." msgstr "Denna konferens har stängts. Inga fler meddelande kan bli skickade." @@ -6209,7 +6210,7 @@ msgid "" "IM. Try using file transfer instead.\n" msgstr "" "%s försöker sända dig en %s-fil, men vi tillåter bara filer upp till %s över " -"Diektanslutning. Försök som filöverföring istället.\n" +"Direktanslutning. Försök som filöverföring istället.\n" #, c-format msgid "File %s is %s, which is larger than the maximum size of %s." @@ -6373,23 +6374,18 @@ msgstr "Kamera" msgid "Screen Sharing" msgstr "Skärmdelning" -#, c-format msgid "Free For Chat" msgstr "Tillgänglig för chatt" -#, c-format msgid "Not Available" msgstr "Ej tillgänglig" -#, c-format msgid "Occupied" msgstr "Upptagen" -#, c-format msgid "Web Aware" msgstr "Webbmedveten" -#, c-format msgid "Invisible" msgstr "Osynlig" @@ -6436,7 +6432,7 @@ msgid "" "only letters, numbers and spaces, or contain only numbers." msgstr "" "Kan inte logga in: Kunde inte ansluta som %s eftersom användarnamnet är " -"ogiltigt. Användarnamnet måste vara en giltig epostadress eller starta med " +"ogiltigt. Användarnamnet måste vara en giltig mejladress eller starta med " "en bokstav och får endast innehålla bokstäver, nummer och mellanslag, eller " "enbart innehålla nummer." @@ -6491,12 +6487,10 @@ msgid "_OK" msgstr "_OK" #, c-format -msgid "" -"You may be disconnected shortly. You may want to use TOC until this is " -"fixed. Check %s for updates." +msgid "You may be disconnected shortly. If so, check %s for updates." msgstr "" -"Du kanske snart blir frånkopplad, du kanske ska använda TOC tills detta är " -"fixat. Kolla på %s efter uppdateringar." +"Du kanske snart blir frånkopplad. I så fall kan du kolla på %s efter " +"uppdateringar." msgid "Unable to get a valid AIM login hash." msgstr "Kunde inte hämta en giltig AIM-inloggnings-hash." @@ -6515,7 +6509,7 @@ msgid "Unable to initialize connection" msgstr "Kan inte skapa anslutning" msgid "Please authorize me so I can add you to my buddy list." -msgstr "Användaren vill lägga till dig i dennes kompislista." +msgstr "Snälla godkänn mig så jag kan lägga till dig till min kompislista." msgid "Authorization Request Message:" msgstr "Meddelande om auktoriseringsbegäran:" @@ -6586,7 +6580,7 @@ msgstr "" #, c-format msgid "ICQ user %u has sent you a buddy: %s (%s)" -msgstr "ICQ-användaren %u har skickat dig en kompis: %s (%s)" +msgstr "ICQ-användaren %u har skickat dig en kompis: %s (%s)" msgid "Do you want to add this buddy to your buddy list?" msgstr "Vill du lägga till den här kompisen till din kompislista?" @@ -6668,6 +6662,9 @@ msgstr "Ansluten sedan" msgid "Member Since" msgstr "Medlem sedan" +msgid "Profile" +msgstr "Profil" + msgid "Your AIM connection may be lost." msgstr "Din anslutning kan vara borta." @@ -6742,7 +6739,7 @@ msgid "" "from the original." msgstr "" "Fel 0x%04x: Kan inte formatera användarnamnet eftersom det begärda namnet " -"skiljer sig från orginalet." +"skiljer sig från originalet." #, c-format msgid "Error 0x%04x: Unable to format username because it is invalid." @@ -6854,15 +6851,13 @@ msgid "" "numbers and spaces, or contain only numbers." msgstr "" "Kunde inte lägga till kompisen %s eftersom användarnamnet är ogiltigt. " -"Användarnamnet måste antingen vara en giltig epost-adress, börja med en " +"Användarnamnet måste antingen vara en giltig mejladress, börja med en " "bokstav och endast innehålla bokstäver, siffror och mellanslag eller bara " "innehålla siffror." -#, fuzzy msgid "Unable to Add" -msgstr "Kan inte lägga till" +msgstr "Kunde inte lägga till" -#, fuzzy msgid "Unable to Retrieve Buddy List" msgstr "Kunde inte hämta kompislista" @@ -6962,6 +6957,7 @@ msgstr "_Anslut" msgid "Get AIM Info" msgstr "Hämta AIM-info" +#. We only do this if the user is in our buddy list msgid "Edit Buddy Comment" msgstr "Ändra kompiskommentar" @@ -7004,7 +7000,7 @@ msgid "" "You can re-request authorization from these buddies by right-clicking on " "them and selecting \"Re-request Authorization.\"" msgstr "" -"Du kan begära auktorisering igen från dessa kompisar genom att högerkilcka " +"Du kan begära auktorisering igen från dessa kompisar genom att högerklicka " "på dem och välja \"Begär auktorisering igen.\"" msgid "Find Buddy by Email" @@ -7037,10 +7033,10 @@ msgid "Confirm Account" msgstr "Bekräfta konto" msgid "Display Currently Registered Email Address" -msgstr "Visa för tillfället registrerad epost-adress" +msgstr "Visa för tillfället registrerad mejladress" msgid "Change Currently Registered Email Address..." -msgstr "Ändra för tillfället registrerad epost-adress..." +msgstr "Ändra för tillfället registrerad mejladress..." msgid "Show Buddies Awaiting Authorization" msgstr "Visa kompisar som väntar på auktorisering" @@ -7071,7 +7067,6 @@ msgstr "Ber %s att ansluta till oss på %s:%hu för Direct IM." msgid "Attempting to connect to %s:%hu." msgstr "Försöker ansluta till %s: %hu." -#, c-format msgid "Attempting to connect via proxy server." msgstr "Försöker ansluta via en proxy-server." @@ -7089,7 +7084,7 @@ msgstr "" "betraktas som en säkerhetsrisk." msgid "Aquarius" -msgstr "Vattuman" +msgstr "Vattumanen" msgid "Pisces" msgstr "Fiskarna" @@ -7098,16 +7093,16 @@ msgid "Aries" msgstr "Stenbocken" msgid "Taurus" -msgstr "Oxen" +msgstr "Oxe" msgid "Gemini" -msgstr "Tvillingen" +msgstr "Tvillingarna" msgid "Cancer" msgstr "Kräftan" msgid "Leo" -msgstr "Lejon" +msgstr "Lejonet" msgid "Virgo" msgstr "Jungfrun" @@ -7163,16 +7158,14 @@ msgstr "Gris" msgid "Other" msgstr "Annan" -#, fuzzy msgid "Visible" -msgstr "Osynlig" +msgstr "Synlig" -msgid "Firend Only" -msgstr "" +msgid "Friend Only" +msgstr "Enbart vänner" -#, fuzzy msgid "Private" -msgstr "Spärrlista" +msgstr "Privat" msgid "QQ Number" msgstr "QQ-nummer" @@ -7189,9 +7182,8 @@ msgstr "Postnummer" msgid "Phone Number" msgstr "Telefonnummer" -#, fuzzy msgid "Authorize adding" -msgstr "Auktorisera kompis?" +msgstr "Auktorisera " msgid "Cellphone Number" msgstr "Mobilnummer" @@ -7199,132 +7191,108 @@ msgstr "Mobilnummer" msgid "Personal Introduction" msgstr "Personlig introduktion" -#, fuzzy msgid "City/Area" -msgstr "Stad" +msgstr "Stad/Område" -#, fuzzy msgid "Publish Mobile" -msgstr "Personlig mobil" +msgstr "Publisera mobil" -#, fuzzy msgid "Publish Contact" -msgstr "Kontaktalias" +msgstr "Publisera kontakt" msgid "College" msgstr "Universitet" -#, fuzzy msgid "Horoscope" -msgstr "Horoskopstecken" +msgstr "Horoskop" -#, fuzzy msgid "Zodiac" -msgstr "Stjärntecken" +msgstr "Zodiak" -#, fuzzy msgid "Blood" -msgstr "Blockerad" +msgstr "Blod" -#, fuzzy msgid "True" -msgstr "Oxen" +msgstr "Sann" -#, fuzzy msgid "False" -msgstr "Misslyckades" +msgstr "Falsk" -#, fuzzy msgid "Modify Contact" -msgstr "Ändra konto" +msgstr "Ändra kontakt" -#, fuzzy msgid "Modify Address" -msgstr "Hemadress" +msgstr "Ändra adress" -#, fuzzy msgid "Modify Extended Information" -msgstr "Ändra min information" +msgstr "Ändra utökad information" -#, fuzzy msgid "Modify Information" -msgstr "Ändra min information" +msgstr "Ändra information" -#, fuzzy msgid "Update" -msgstr "Senast uppdaterad" +msgstr "Uppdatera" -#, fuzzy msgid "Could not change buddy information." -msgstr "Fel då kompisen skulle läggas till" +msgstr "Kunde inte ändra kompisinformationen." #, c-format -msgid "%d needs Q&A" -msgstr "" +msgid "%u requires verification" +msgstr "%u kräver verifikation" -#, fuzzy -msgid "Add buddy Q&A" -msgstr "Lägg till kompis" +msgid "Add buddy question" +msgstr "Lägg till kompisfråga" -#, fuzzy -msgid "Input answer here" -msgstr "Inmatningsförfrågan här" +msgid "Enter answer here" +msgstr "Ange ett svar här" msgid "Send" msgstr "Skicka" -#, fuzzy msgid "Invalid answer." -msgstr "Ogiltigt användarnamn" +msgstr "Ogiltigt svar." msgid "Authorization denied message:" msgstr "Auktoriserings nekelsemeddelande:" -#, fuzzy -msgid "Sorry, You are not my style." +msgid "Sorry, you're not my style." msgstr "Tyvärr, du är inte min typ..." -#, fuzzy, c-format -msgid "%d needs authentication" -msgstr "Användaren %d behöver autentisering" +#, c-format +msgid "%u needs authorization" +msgstr "%u behöver autentisering" -#, fuzzy msgid "Add buddy authorize" -msgstr "Lägg till kompisen i din lista?" +msgstr "Lägg till kompisgodkänning" -msgid "Input request here" -msgstr "Inmatningsförfrågan här" +msgid "Enter request here" +msgstr "Ange förfrågan här" msgid "Would you be my friend?" msgstr "Vill du bli min vän?" -#, fuzzy msgid "QQ Buddy" -msgstr "Kompis" +msgstr "QQ Kompis" -#, fuzzy msgid "Add buddy" msgstr "Lägg till kompis" -#, fuzzy msgid "Invalid QQ Number" -msgstr "Ogiltigt QQ-ansikte" +msgstr "Ogiltigt QQ-nummer" -#, fuzzy msgid "Failed sending authorize" -msgstr "Snälla auktorisera mig!" +msgstr "Misslyckades med att skicka auktorisering" -#, fuzzy, c-format -msgid "Failed removing buddy %d" -msgstr "Kunde inte ta bort kompis från chatt" +#, c-format +msgid "Failed removing buddy %u" +msgstr "Misslyckades med att ta bort kompisen %u" -#, fuzzy, c-format +#, c-format msgid "Failed removing me from %d's buddy list" -msgstr "%s har tagit bort dig från sin kontaktlista." +msgstr "Misslyckades med att ta bort mig från %d's kompislista" -#, fuzzy msgid "No reason given" -msgstr "Ingen motivering angiven." +msgstr "Ingen motivering angavs." #. only need to get value #, c-format @@ -7334,9 +7302,9 @@ msgstr "Du har lagts till av %s" msgid "Would you like to add him?" msgstr "Vill du lägga till honom?" -#, fuzzy, c-format +#, c-format msgid "Rejected by %s" -msgstr "Avslå" +msgstr "Avslagen av %s" #, c-format msgid "Message: %s" @@ -7351,135 +7319,123 @@ msgstr "Grupp ID" msgid "QQ Qun" msgstr "QQ Qun" -#, fuzzy msgid "Please enter Qun number" -msgstr "Ange det nya namnet för %s" +msgstr "Ange Qun-numret" -#, fuzzy msgid "You can only search for permanent Qun\n" -msgstr "Du kan enbart söka efter permanenta QQ-grupper\n" +msgstr "Du kan enbart söka efter permanenta Qun\n" + +msgid "(Invalid UTF-8 string)" +msgstr "(Felaktig UTF-8-sträng)" -#, fuzzy msgid "Not member" -msgstr "Jag är inte en medlem" +msgstr "Inte medlem" msgid "Member" msgstr "Medlem" -#, fuzzy msgid "Requesting" -msgstr "Förfrågningsdialog" +msgstr "Efterfrågar" -#, fuzzy msgid "Admin" -msgstr "Adium" +msgstr "Admin" -#, fuzzy msgid "Notice" msgstr "Notering" -#, fuzzy msgid "Detail" -msgstr "Förval" +msgstr "Detaljer" msgid "Creator" msgstr "Skapare" -#, fuzzy msgid "About me" -msgstr "Om %s" +msgstr "Om mig" -#, fuzzy msgid "Category" -msgstr "Chattfel" +msgstr "Kategori" -#, fuzzy msgid "The Qun does not allow others to join" -msgstr "Denna gruppen tillåter inte andra att gå med" +msgstr "Detta Qun tillåter inte andra att gå med" -#, fuzzy msgid "Join QQ Qun" -msgstr "Anslut till chatt" +msgstr "Gå med QQ Qun" + +msgid "Input request here" +msgstr "Inmatningsförfrågan här" #, c-format -msgid "Successfully joined Qun %s (%d)" -msgstr "" +msgid "Successfully joined Qun %s (%u)" +msgstr "Lyckades med att gå med i Qun %s (%u)" -#, fuzzy msgid "Successfully joined Qun" -msgstr "Du har problemfritt ändrat Qun-medlemmen" +msgstr "Lyckades ned att gå med i Qun" #, c-format -msgid "Qun %d denied to join" -msgstr "" +msgid "Qun %u denied from joining" +msgstr "Qun %u nekades att gå med" msgid "QQ Qun Operation" msgstr "QQ Qun-operation" -#, fuzzy msgid "Failed:" -msgstr "Misslyckades" +msgstr "Misslyckades:" -msgid "Join Qun, Unknow Reply" -msgstr "" +msgid "Join Qun, Unknown Reply" +msgstr "Gick med i Qun, Okänt svar" -#, fuzzy msgid "Quit Qun" -msgstr "QQ Qun" +msgstr "Avsluta Qun" msgid "" "Note, if you are the creator, \n" "this operation will eventually remove this Qun." msgstr "" "Notera att om du är skaparen, \n" -"denna operation kommer till slut ta bort detta Qun." +"kommer denna operation till slut ta bort detta Qun." -#, fuzzy -msgid "Sorry, you are not our style ..." -msgstr "Tyvärr, du är inte min typ..." +msgid "Sorry, you are not our style" +msgstr "Tyvärr, du är inte vår typ" -#, fuzzy -msgid "Successfully changed Qun member" -msgstr "Du har problemfritt ändrat Qun-medlemmen" +msgid "Successfully changed Qun members" +msgstr "Lyckades med att ändra Qun-medlemmar" -#, fuzzy msgid "Successfully changed Qun information" -msgstr "Du har problemfritt ändrat Qun-informationen" +msgstr "Lyckades ändra Qun-informationen" msgid "You have successfully created a Qun" msgstr "Du har problemfritt skapat ett Qun" -#, fuzzy -msgid "Would you like to set detailed information now?" -msgstr "Vill du ange Qun-detaljerna nu?" +msgid "Would you like to set up detailed information now?" +msgstr "Vill du ange detaljerad information nu?" # Osäker msgid "Setup" msgstr "Ange" -#, fuzzy, c-format -msgid "%d requested to join Qun %d for %s" -msgstr "Användaren %d har ansökt om att få gå med i grupp %d" +#, c-format +msgid "%u requested to join Qun %u for %s" +msgstr "%u efterfrågade att få gå med i QUN %u för %s" -#, fuzzy, c-format -msgid "%d request to join Qun %d" -msgstr "Användaren %d har ansökt om att få gå med i grupp %d" +#, c-format +msgid "%u request to join Qun %u" +msgstr "%u efterfrågade att få gå med i Qun %u" -#, fuzzy, c-format -msgid "Failed to join Qun %d, operated by admin %d" -msgstr "Kunde inte ansluta kompis till chatt" +#, c-format +msgid "Failed to join Qun %u, operated by admin %u" +msgstr "Misslyckades med att gå med i QUN %u, administrerad av %u" #, c-format -msgid "<b>Joining Qun %d is approved by admin %d for %s</b>" -msgstr "" +msgid "<b>Joining Qun %u is approved by admin %u for %s</b>" +msgstr "<b>Gå med i Qun %u tilläts av admin %u för %s</b>" -#, fuzzy, c-format -msgid "<b>Removed buddy %d.</b>" -msgstr "Ta bort kompis" +#, c-format +msgid "<b>Removed buddy %u.</b>" +msgstr "<b>Tog bort kompisen %u.</b>" #, c-format -msgid "<b>New buddy %d joined.</b>" -msgstr "" +msgid "<b>New buddy %u joined.</b>" +msgstr "<b>Nya kompisen %u gick med.</b>" #, c-format msgid "Unknown-%d" @@ -7494,20 +7450,17 @@ msgstr "VIP" msgid " TCP" msgstr "TCP" -#, fuzzy msgid " FromMobile" -msgstr "Mobil" +msgstr "FrånMobil" -#, fuzzy msgid " BindMobile" -msgstr "Mobil" +msgstr "BindMobil" msgid " Video" msgstr " Video" -#, fuzzy msgid " Zone" -msgstr "Ingen" +msgstr "Zon" msgid "Flag" msgstr "Flagga" @@ -7518,110 +7471,110 @@ msgstr "Ver" msgid "Invalid name" msgstr "Ogiltigt namn" -#, fuzzy msgid "Select icon..." -msgstr "Välj katalog..." +msgstr "Välj ikon..." -#, fuzzy, c-format +#, c-format msgid "<b>Login time</b>: %d-%d-%d, %d:%d:%d<br>\n" -msgstr "<b>Anslutningsnamn</b>: %s<br>\n" +msgstr "<b>Inloggningstid</b>: %d-%d-%d, %d:%d:%d<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Total Online Buddies</b>: %d<br>\n" -msgstr "<b>Online just nu</b>: %d<br>\n" +msgstr "<b>Kompisar anslutna totalt</b>: %d<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Last Refresh</b>: %d-%d-%d, %d:%d:%d<br>\n" -msgstr "<b>Senast uppdatering</b>: %s<br>\n" +msgstr "<b>Senast uppdaterad</b>: %d-%d-%d, %d:%d:%d<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Server</b>: %s<br>\n" -msgstr "<b>Server</b>: %s: %d<br>\n" +msgstr "<b>Server</b>: %s<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Client Tag</b>: %s<br>\n" -msgstr "<b>Anslutningsnamn</b>: %s<br>\n" +msgstr "<b>Klienttagg</b>: %s<br>\n" #, c-format msgid "<b>Connection Mode</b>: %s<br>\n" msgstr "<b>Anslutningsläge</b>: %s<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>My Internet IP</b>: %s:%d<br>\n" -msgstr "<b>Anslutningsläge</b>: %s<br>\n" +msgstr "<b>Mitt Internet-IP</b>: %s:%d<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Sent</b>: %lu<br>\n" -msgstr "<b>Server</b>: %s: %d<br>\n" +msgstr "<b>Skickat</b>: %lu<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Resend</b>: %lu<br>\n" -msgstr "<b>Senast uppdatering</b>: %s<br>\n" +msgstr "<b>Återsänd</b>: %lu<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Lost</b>: %lu<br>\n" -msgstr "<b>Senast uppdatering</b>: %s<br>\n" +msgstr "<b>Förlorat</b>: %lu<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Received</b>: %lu<br>\n" -msgstr "<b>Server</b>: %s: %d<br>\n" +msgstr "<b>Mottaget</b>: %lu<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Received Duplicate</b>: %lu<br>\n" -msgstr "<b>Mit publika IP</b>: %s<br>\n" +msgstr "<b>Mottagna dubletter</b>: %lu<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>Time</b>: %d-%d-%d, %d:%d:%d<br>\n" -msgstr "<b>Anslutningsnamn</b>: %s<br>\n" +msgstr "<b>Tid</b>: %d-%d-%d, %d:%d:%d<br>\n" -#, fuzzy, c-format +#, c-format msgid "<b>IP</b>: %s<br>\n" -msgstr "<b>Server</b>: %s: %d<br>\n" +msgstr "<b>IP</b>: %s<br>\n" msgid "Login Information" msgstr "Inloggningsinformation" msgid "<p><b>Original Author</b>:<br>\n" -msgstr "" +msgstr "<p><b>Originalförfattare</b>:<br>\n" msgid "<p><b>Code Contributors</b>:<br>\n" -msgstr "" +msgstr "<p><b>Kodbidragsgivare</b>:<br>\n" -#, fuzzy msgid "<p><b>Lovely Patch Writers</b>:<br>\n" -msgstr "<b>Senast uppdatering</b>: %s<br>\n" +msgstr "<p><b>Kärleksfulla patchskrivare</b>:<br>\n" -#, fuzzy msgid "<p><b>Acknowledgement</b>:<br>\n" -msgstr "<b>Server</b>: %s: %d<br>\n" +msgstr "<p><b>Bekräftningar</b>:<br>\n" + +msgid "<p><b>Scrupulous Testers</b>:<br>\n" +msgstr "<p><b>Nogräknade testare</b>:<br>\n" msgid "<p><i>And, all the boys in the backroom...</i><br>\n" -msgstr "" +msgstr "<p><i>Och alla pojkarna i bakrummet...</i><br>\n" msgid "<i>Feel free to join us!</i> :)" -msgstr "" +msgstr "<i>Känn dig fri att gå med oss!</i> :)" -#, fuzzy, c-format -msgid "About OpenQ r%s" -msgstr "Om %s" +#, c-format +msgid "About OpenQ %s" +msgstr "Om OpenQ %s" -#, fuzzy msgid "Change Icon" -msgstr "Spara ikon" +msgstr "Ändra ikon" msgid "Change Password" msgstr "Byt lösenord" -#, fuzzy msgid "Account Information" -msgstr "Inloggningsinformation" +msgstr "Kontoinformation" msgid "Update all QQ Quns" -msgstr "" +msgstr "Updatera alla QQ Quns" -#, fuzzy msgid "About OpenQ" -msgstr "Om %s" +msgstr "Om OpenQ" + +msgid "Modify Buddy Memo" +msgstr "Ändra Kompismemo" #. *< type #. *< ui_requirement @@ -7633,59 +7586,48 @@ msgstr "Om %s" #. *< version #. * summary #. * description -#, fuzzy msgid "QQ Protocol Plugin" -msgstr "QQ protokoll\tmodul" +msgstr "QQ Protokollplugin" -#, fuzzy msgid "Auto" -msgstr "Författare" +msgstr "Auto" -#, fuzzy msgid "Select Server" -msgstr "Välj användare" +msgstr "Välj server" msgid "QQ2005" -msgstr "" +msgstr "QQ2005" msgid "QQ2007" -msgstr "" +msgstr "qq2007" msgid "QQ2008" -msgstr "" +msgstr "QQ2008" -#. #endif -#, fuzzy msgid "Connect by TCP" msgstr "Ansluter med TCP" -#, fuzzy msgid "Show server notice" -msgstr "Serverport" +msgstr "Visa servernotis" -#, fuzzy msgid "Show server news" -msgstr "Serveradress" +msgstr "Visa servernyheter" + +msgid "Show chat room when msg comes" +msgstr "Visa chattrum när meddelanden kommer" -#, fuzzy msgid "Keep alive interval (seconds)" -msgstr "Håll vid liv intrevall(er)" +msgstr "Livhållningsintervall (seconds)" -#, fuzzy msgid "Update interval (seconds)" -msgstr "Uppdateringsintervall(er)" +msgstr "Uppdateringsintervall (seconds)" -#, fuzzy -msgid "Can not decrypt server reply" -msgstr "Kan inte dekryptera inloggningssvaret" - -#, fuzzy -msgid "Can not decrypt get server reply" -msgstr "Kan inte dekryptera inloggningssvaret" +msgid "Cannot decrypt server reply" +msgstr "Kan inte dekryptera serversvaret" #, c-format msgid "Failed requesting token, 0x%02X" -msgstr "" +msgstr "Misslyckades med att efterfråga polett, 0x%02X" #, c-format msgid "Invalid token len, %d" @@ -7693,56 +7635,53 @@ msgstr "Ogiltig polettlen, %d" #. extend redirect used in QQ2006 msgid "Redirect_EX is not currently supported" -msgstr "" +msgstr "Redirect_EX stöds inte för tillfället" #. need activation #. need activation #. need activation -#, fuzzy msgid "Activation required" msgstr "Registrering krävs" -#, fuzzy, c-format -msgid "Unknow reply code when login (0x%02X)" -msgstr "Ogiltig polettsvarskod, 0x%02X" +#, c-format +msgid "Unknown reply code when logging in (0x%02X)" +msgstr "Okänd svarskod vid inloggning (0x%02X)" -msgid "Keep alive error" -msgstr "Problem att hålla vid liv" +msgid "Could not decrypt server reply" +msgstr "Kan inte avkryptera inloggningssvaret" -#, fuzzy -msgid "Requesting captcha ..." -msgstr "Efterfrågar %s's uppmärksamhet..." +msgid "Requesting captcha" +msgstr "Efterfrågar captcha" -msgid "Checking code of captcha ..." -msgstr "" +msgid "Checking captcha" +msgstr "Testar captcha" -msgid "Failed captcha verify" -msgstr "" +msgid "Failed captcha verification" +msgstr "Misslyckades med captcha-verifikationen" -#, fuzzy msgid "Captcha Image" -msgstr "Spara bild" +msgstr "Captcha-bild" -#, fuzzy msgid "Enter code" -msgstr "Ange lösenordet" +msgstr "Ange kod" -msgid "QQ Captcha Verifing" -msgstr "" +msgid "QQ Captcha Verification" +msgstr "QQ Captcha-verifikation" -#, fuzzy msgid "Enter the text from the image" -msgstr "Ange namnet på gruppen" +msgstr "Ange testen från bilden" #, c-format -msgid "Unknow reply code when checking password (0x%02X)" -msgstr "" +msgid "Unknown reply when checking password (0x%02X)" +msgstr "Okänt svar då lösenordet testades (0x%02X)" #, c-format msgid "" -"Unknow reply code when login (0x%02X):\n" +"Unknown reply code when logging in (0x%02X):\n" "%s" msgstr "" +"Okänd svarskod vid inloggning (0x%02X):\n" +"%s" #. we didn't successfully connect. tdt->toc_fd is valid here msgid "Unable to connect." @@ -7751,14 +7690,6 @@ msgstr "Kan inte ansluta." msgid "Socket error" msgstr "Uttag-fel" -#, c-format -msgid "" -"Lost connection with server:\n" -"%d, %s" -msgstr "" -"Tappade anslutningen med servern:\n" -"%d, %s" - msgid "Unable to read from socket" msgstr "Kan inte läsa från uttag" @@ -7768,81 +7699,74 @@ msgstr "Skrivfel" msgid "Connection lost" msgstr "Anslutningen tappades" -#, fuzzy -msgid "Get server ..." -msgstr "Ändra användarinfo..." +msgid "Getting server" +msgstr "Hämtar server" -#, fuzzy -msgid "Request token" -msgstr "Begäran nekad" +msgid "Requesting token" +msgstr "Efterfrågar polett" msgid "Couldn't resolve host" msgstr "Kunde ej slå upp värden" -#, fuzzy msgid "Invalid server or port" -msgstr "Ogiltigt fel" +msgstr "Ogiltig server eller port" -#, fuzzy -msgid "Connecting server ..." -msgstr "Anslutningsserver" +msgid "Connecting to server" +msgstr "Ansluter till server" -#, fuzzy msgid "QQ Error" -msgstr "QQid-fel" - -msgid "Failed to send IM." -msgstr "Kunde inte skicka snabbmeddelande" +msgstr "QQ-fel" -#, fuzzy, c-format +#, c-format msgid "" "Server News:\n" "%s\n" "%s\n" "%s" -msgstr "ICQ-serverrelay" +msgstr "" +"Servernyheter:\n" +"%s\n" +"%s\n" +"%s" -#, fuzzy, c-format +#, c-format +msgid "%s:%s" +msgstr "%s:%s" + +#, c-format msgid "From %s:" -msgstr "Från" +msgstr "Från %s:" -#, fuzzy, c-format +#, c-format msgid "" "Server notice From %s: \n" "%s" -msgstr "Serverinstruktioner: %s" - -msgid "Unknow SERVER CMD" msgstr "" +"Servernotis från %s:\n" +"%s" -#, fuzzy, c-format +msgid "Unknown SERVER CMD" +msgstr "Okänd SERVER CMD" + +#, c-format msgid "" "Error reply of %s(0x%02X)\n" -"Room %d, reply 0x%02X" +"Room %u, reply 0x%02X" msgstr "" -"Svarade %s(0x%02X )\n" -"Skickade %s(0x%02X )\n" -"Rum id %d, svarade [0x%02X]: \n" -"%s" +"Felaktigt svar av %s(0x%02X)\n" +"Rum %u, svar 0x%02X" -#, fuzzy msgid "QQ Qun Command" -msgstr "Kommando" +msgstr "QQ Qun Kommand" -#, fuzzy, c-format -msgid "Not a member of room \"%s\"\n" -msgstr "Du är inte medlemm i gruppen \"%s\"\n" +msgid "Could not decrypt login reply" +msgstr "Kan inte avkryptera inloggningssvaret" -msgid "Can not decrypt login reply" -msgstr "Kan inte dekryptera inloggningssvaret" +msgid "Unknown LOGIN CMD" +msgstr "Okänd LOGIN CMD" -#, fuzzy -msgid "Unknow LOGIN CMD" -msgstr "Okänd anledning" - -#, fuzzy -msgid "Unknow CLIENT CMD" -msgstr "Okänd anledning" +msgid "Unknown CLIENT CMD" +msgstr "Okänd CLIENT CMD" #, c-format msgid "%d has declined the file %s" @@ -8033,7 +7957,7 @@ msgid "Sametime ID" msgstr "Sametime ID" msgid "An ambiguous user ID was entered" -msgstr "Ett svårförståligt användarid angavs" +msgstr "Ett svårförståeligt användarid angavs" #, c-format msgid "" @@ -8054,8 +7978,8 @@ msgid "" "The identifier '%s' did not match any users in your Sametime community. This " "entry has been removed from your buddy list." msgstr "" -"Identifieraren '%s' matchar inte någon i din Sametime community. DDDDenna " -"post har blivit borttagen från din kompislista." +"Identifieraren '%s' matchar inte någon i din Sametime community. Denna post " +"har blivit borttagen från din kompislista." #, c-format msgid "" @@ -8114,7 +8038,7 @@ msgid "" "to your buddy list." msgstr "" "Identifieraren '%s' kan möjligen referera till någon av följande Notes " -"adressböcksgrupper. Var god välj den korrekta gruppen från listan här nedan " +"adressboksgrupper. Var god välj den korrekta gruppen från listan här nedan " "för att lägga till den till din kompislista." msgid "Select Notes Address Book" @@ -8128,7 +8052,7 @@ msgid "" "The identifier '%s' did not match any Notes Address Book groups in your " "Sametime community." msgstr "" -"Identidieraren '%s' matchade inte någon Notes adressböcksgrupper i din " +"Identidieraren '%s' matchade inte någon Notes adressboksgrupper i din " "Sametime-community." msgid "Notes Address Book Group" @@ -8297,7 +8221,7 @@ msgstr "Öppna..." #, c-format msgid "The %s buddy is not present in the network" -msgstr "%s kompisenär inte tillgänglig på nätverket" +msgstr "%s kompisen är inte tillgänglig på nätverket" msgid "" "To add the buddy you must import his/her public key. Press Import to import " @@ -8481,7 +8405,7 @@ msgid "" "channel public keys are set then only users whose public keys are listed are " "able to join." msgstr "" -"Kanal autentisering används för att säkra kanalen från obehörigt tillträde. " +"Kanal-autentisering används för att säkra kanalen från obehörigt tillträde. " "Autentiseringen kan vara baserad på ett lösenord eller en digital signatur. " "Om ett lösenord är valt, då är det nödvändigt för att kunna ansluta. Om " "kanalpublika nycklar är valt kan enbart användare vars publika nycklar är " @@ -8723,10 +8647,10 @@ msgid "Cannot get server information" msgstr "Kan inte hämta serverinformation" msgid "Server Statistics" -msgstr "Serverstatestik" +msgstr "Serverstatistik" msgid "Cannot get server statistics" -msgstr "Kan inte hämta serverstatestik" +msgstr "Kan inte hämta serverstatistik" #, c-format msgid "" @@ -8746,8 +8670,8 @@ msgid "" "Total server operators: %d\n" "Total router operators: %d\n" msgstr "" -"Lokala serverstarttid: %s\n" -"Lokala serverupptid: %s\n" +"Lokal serverstarttid: %s\n" +"Lokal serverupptid: %s\n" "Lokala serverklienter: %d\n" "Lokala serverkanaler: %d\n" "Lokala serveroperatörer: %d\n" @@ -8763,7 +8687,7 @@ msgstr "" "Totala routeroperatörer: %d\n" msgid "Network Statistics" -msgstr "Nätverksstatestik" +msgstr "Nätverksstatistik" msgid "Ping failed" msgstr "Ping misslyckades" @@ -8823,7 +8747,7 @@ msgid "_View..." msgstr "_Visa..." msgid "Unsupported public key type" -msgstr "Ej stödd publik nyckeltyp" +msgstr "Ej stödd publik nyckeltyp" msgid "Disconnected by server" msgstr "Frånkopplad av server" @@ -8838,7 +8762,7 @@ msgid "" "Resuming detached session failed. Press Reconnect to create new connection." msgstr "" "Misslyckades med att återuppta frånskild session. Tryck \"Återanslut\" för " -"at skapa en ny uppkoppling." +"att skapa en ny uppkoppling." msgid "Connection failed" msgstr "Anslutning misslyckad" @@ -8884,7 +8808,7 @@ msgid "" "Your Preferred Contact Methods" msgstr "" "\n" -"Dina föredragna kontakmetoder" +"Dina föredragna kontaktmetoder" msgid "SMS" msgstr "SMS" @@ -8929,7 +8853,7 @@ msgid "Message of the Day" msgstr "Meddelande för dagen" msgid "No Message of the Day available" -msgstr "Inget dagligt meddelande tillgänglig" +msgstr "Inget dagligt meddelande tillgängligt" msgid "There is no Message of the Day associated with this connection" msgstr "Det finns inget dagligt meddelande associerat med denna anslutning" @@ -8941,7 +8865,7 @@ msgid "Passphrases do not match" msgstr "Lösenorden stämmer inte överens" msgid "Key Pair Generation failed" -msgstr "Genrerering av nyckelpar misslyckades" +msgstr "Generering av nyckelpar misslyckades" msgid "Key length" msgstr "Nyckellängd" @@ -9012,7 +8936,7 @@ msgstr "" "nätverk" msgid "list: List channels on this network" -msgstr "list: Listar kanalerna på detta nätverk" +msgstr "list: Listar kanalerna på detta nätverk" msgid "whois <nick>: View nick's information" msgstr "whois <nick>: Visar information för nick" @@ -9089,7 +9013,7 @@ msgstr "" "getkey <nick|server>: Hämta serverns eller klientens publika nyckel" msgid "stats: View server and network statistics" -msgstr "stats: Visa server och nätverksstatestik" +msgstr "stats: Visa server och nätverksstatistik" msgid "ping: Send PING to the connected server" msgstr "ping: skicka PING till den anslutna servern" @@ -9204,7 +9128,7 @@ msgid "" "%s\n" "\n" msgstr "" -"Publik nyckelfingeravtryck:\n" +"Publikt nyckelfingeravtryck:\n" "%s\n" "\n" @@ -9213,7 +9137,7 @@ msgid "" "Public Key Babbleprint:\n" "%s" msgstr "" -"Publik nyckelpladderavtryck:\n" +"Publikt nyckelpladderavtryck:\n" "%s" msgid "Public Key Information" @@ -9243,14 +9167,14 @@ msgid "" "%s sent message to whiteboard on %s channel. Would you like to open the " "whiteboard?" msgstr "" -"%s sände ett meddelande till vita tavlan i kanal %s. Will du öppna den vita " +"%s sände ett meddelande till vita tavlan i kanal %s. Vill du öppna den vita " "tavlan?" msgid "Whiteboard" msgstr "Whiteboard" msgid "No server statistics available" -msgstr "Ingen serverstatestik tillgänglig" +msgstr "Ingen serverstatistik tillgänglig" #, c-format msgid "Failure: Version mismatch, upgrade your client" @@ -9321,6 +9245,9 @@ msgstr "Kunde ej slå upp värden" msgid "SIP usernames may not contain whitespaces or @ symbols" msgstr "SIP-användarnamnet får inte innehålla mellanslag eller symbolen @" +msgid "SIP connect server not specified" +msgstr "SIP anslutningsserver inte specificerad" + #. *< type #. *< ui_requirement #. *< flags @@ -9723,10 +9650,10 @@ msgid "Pager server" msgstr "Sökarserver" msgid "Japan Pager server" -msgstr "Japan Sökarsörver" +msgstr "Japan Sökarserver" msgid "Pager port" -msgstr "Sökareport" +msgstr "Sökarport" msgid "File transfer server" msgstr "Filöverföringsserver" @@ -9805,14 +9732,9 @@ msgstr "Tuff länk 3" msgid "Last Update" msgstr "Senast uppdaterad" -#, c-format -msgid "User information for %s unavailable" -msgstr "Användarinformation om %s är inte tillgänglig" - msgid "" -"Sorry, this profile seems to be in a language or format that is not " -"supported at this time." -msgstr "Denna profil verkar vara i ett språk eller format som ännu inte stöds." +"This profile is in a language or format that is not supported at this time." +msgstr "Denna profil är i ett språk eller format som ännu inte stöds." msgid "" "Could not retrieve the user's profile. This most likely is a temporary " @@ -9930,7 +9852,7 @@ msgstr "_Mottagare:" #, c-format msgid "Attempt to subscribe to %s,%s,%s failed" -msgstr "Försök att prenumrera på %s,%s,%s misslyckades" +msgstr "Försök att prenumerera på %s,%s,%s misslyckades" msgid "zlocate <nick>: Locate user" msgstr "zlocate <nick>: Lokalisera användare" @@ -9987,7 +9909,7 @@ msgid "Resubscribe" msgstr "Återprenumerera" msgid "Retrieve subscriptions from server" -msgstr "Hämta prenumrationer från server" +msgstr "Hämta prenumerationer från server" #. *< type #. *< ui_requirement @@ -10245,9 +10167,9 @@ msgstr "Kunde inte öppna %s: Omdirigerad för många gånger" msgid "Unable to connect to %s" msgstr "Kan inte ansluta till %s" -#, fuzzy, c-format +#, c-format msgid "Error reading from %s: response too long (%d bytes limit)" -msgstr "Fel vid läsning av från %s: %s" +msgstr "Felaktig inläsning från %s: svaret blev för långt (gräns på %d bytes)" #, c-format msgid "" @@ -10422,7 +10344,7 @@ msgstr "Aktiverad" msgid "Protocol" msgstr "Protokoll" -#, fuzzy, c-format +#, c-format msgid "" "<span size='larger' weight='bold'>Welcome to %s!</span>\n" "\n" @@ -10667,11 +10589,13 @@ msgstr "/Hjälp/_Om" msgid "<b>Account:</b> %s" msgstr "<b>Konto:</b> %s" -#, fuzzy, c-format +#, c-format msgid "" "\n" "<b>Occupants:</b> %d" -msgstr "<b>Konto:</b> %s" +msgstr "" +"\n" +"<b>Innehavare:</b> %d" #, c-format msgid "" @@ -10862,9 +10786,8 @@ msgstr "A_lias:" msgid "Auto_join when account becomes online." msgstr "_Gå med automatiskt då kontot är anslutet." -#, fuzzy msgid "_Remain in chat after window is closed." -msgstr "Göm c_hatt när fönstret är stängt." +msgstr "Va_r kvar i chattfönster efter att det stängts." msgid "Please enter the name of the group to be added." msgstr "Ange namnet på den grupp som du vill lägga till." @@ -10986,7 +10909,7 @@ msgid "/Conversation/_Find..." msgstr "/Konversation/_Sök..." msgid "/Conversation/View _Log" -msgstr "/Konversation/Visa _logg" +msgstr "/Konversation/Visa _Logg" msgid "/Conversation/_Save As..." msgstr "/Konversation/_Spara som..." @@ -10998,7 +10921,7 @@ msgid "/Conversation/Se_nd File..." msgstr "/Konversation/S_kicka fil..." msgid "/Conversation/Add Buddy _Pounce..." -msgstr "/Konversation/Lägg till kom_pisnotifiering..." +msgstr "/Konversation/Lägg till Kom_pisnotifiering..." msgid "/Conversation/_Get Info" msgstr "/Konversation/_Hämta information" @@ -11151,7 +11074,7 @@ msgid "Nick Said" msgstr "Smeknamn nämnt" msgid "Unread Messages" -msgstr "Olästa meddeladen" +msgstr "Olästa meddelanden" msgid "New Event" msgstr "Ny händelse" @@ -11241,11 +11164,10 @@ msgid "Fatal Error" msgstr "Allvarligt fel" msgid "bug master" -msgstr "" +msgstr "bugmästare" -#, fuzzy msgid "artist" -msgstr "Artist" +msgstr "artist" #. feel free to not translate this msgid "Ka-Hing Cheung" @@ -11254,9 +11176,8 @@ msgstr "" msgid "support" msgstr "support" -#, fuzzy msgid "webmaster" -msgstr "utvecklare & webbansvarig" +msgstr "webbansvarig" msgid "Senior Contributor/QA" msgstr "Senior Contributor/Kvalitetsgranskning" @@ -11284,7 +11205,7 @@ msgid "support/QA" msgstr "support/QA" msgid "XMPP" -msgstr "" +msgstr "XMPP" msgid "original author" msgstr "ursprunglig upphovsman" @@ -11335,7 +11256,7 @@ msgid "Australian English" msgstr "Australiensisk engelska" msgid "Canadian English" -msgstr "Kanadensiskt engelska" +msgstr "Kanadensisk engelska" msgid "British English" msgstr "Brittisk engelska" @@ -11418,11 +11339,14 @@ msgstr "Lettländska" msgid "Macedonian" msgstr "Makedonska" +msgid "Mongolian" +msgstr "Mongoliska" + msgid "Bokmål Norwegian" msgstr "Bokmål Norska" msgid "Nepali" -msgstr "Nepalska" +msgstr "Nepali" msgid "Dutch, Flemish" msgstr "Holländska, Flamländska" @@ -11431,7 +11355,7 @@ msgid "Norwegian Nynorsk" msgstr "Norska Nynorsk" msgid "Occitan" -msgstr "" +msgstr "Occitan" msgid "Punjabi" msgstr "Punjabi" @@ -11531,8 +11455,29 @@ msgstr "" "bidragsgivare. Vi ger inga garantier för detta program.<BR><BR>" #, c-format -msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" -msgstr "<FONT SIZE=\"4\">IRC:</FONT> #pidgin på irc.freenode.net<BR><BR>" +msgid "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">Hjälp via mejl:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgstr "<FONT SIZE=\"4\">IRC-kanal:</FONT> #pidgin på irc.freenode.net<BR><BR>" + +#, c-format +msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" +msgstr "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" msgid "Current Developers" msgstr "Nuvarande utvecklare" @@ -11674,7 +11619,7 @@ msgid "Show Buddy _List" msgstr "Visa kompis_listan" msgid "_Unread Messages" -msgstr "_Olästa meddeladen" +msgstr "_Olästa meddelanden" msgid "New _Message..." msgstr "Nytt _meddelande..." @@ -11714,7 +11659,7 @@ msgstr "<b>Skickar som:</b>" msgid "There is no application configured to open this type of file." msgstr "" -"Det finns ingen applikation konfigurarad att öppna den här typen av fil." +"Det finns ingen applikation konfigurerad att öppna den här typen av fil." msgid "An error occurred while opening the file." msgstr "Ett fel uppstod när filen öppnades." @@ -11779,13 +11724,11 @@ msgstr "Färg på länkar" msgid "Color to draw hyperlinks." msgstr "Färg som länkar ska ha." -#, fuzzy msgid "Hyperlink visited color" -msgstr "Färg på länkar" +msgstr "Färg på besökta hyperlänkar" -#, fuzzy msgid "Color to draw hyperlinks after it has been visited (or activated)." -msgstr "Färg som länkar ska ha när musmarkören är ovanför dem." +msgstr "Färgen länkar ska skrivas i när de har besökts (eller aktiverats)." # "utpekade" var det bästa ord jag kunde komma på. msgid "Hyperlink prelight color" @@ -11942,8 +11885,8 @@ msgid "" "This smiley is disabled because a custom smiley exists for this shortcut:\n" " %s" msgstr "" -"Denna mileyn är avaktiverad eftersom en egendefinierad smiley redan " -"existerar för denna genvägen:\n" +"Denna smileyn är avaktiverad eftersom en egendefinierad smiley redan " +"existerar för denna genväg:\n" " %s" msgid "Smile!" @@ -12156,7 +12099,7 @@ msgstr "" " med kommatecken)\n" " -v, --version visa den nuvarande versionen och avsluta\n" -#, fuzzy, c-format +#, c-format msgid "" "%s %s has segfaulted and attempted to dump a core file.\n" "This is a bug in the software and has happened through\n" @@ -12171,31 +12114,28 @@ msgid "" "how to get the backtrace, please read the instructions at\n" "%swiki/GetABacktrace\n" msgstr "" -"%s %s har råkat ut för ett segmenteringsfel och försökte att dumpa kärnan " -"till fil.\n" +"%s %s har råkat ut för ett segmenteringsfel och försökte\n" +"dumpa kärnan till fil.\n" "Detta är ett fel i mjukvaran och beror inte på något fel du gjort.\n" "\n" "Om du kan återskapa krashen, var vänlig att meddela utvecklarna\n" "genom att rapportera felet vid\n" "%ssimpleticket\n" "\n" -"Var god och meddela vad du gjorde vid tillfället\n" -"och posta en backtrace från kärn-filen. Om du inte vet hur du skapar en " -"backtrace,\n" +"Var god och meddela vad du gjorde vid tillfället och posta en backtrace\n" +"från kärn-filen. Om du inte vet hur du skapar en backtrace,\n" "var god läs instruktionerna på\n" "%swiki/GetABacktrace\n" -"\n" -"Om du behöver ytterligare hjälp så kan du skicka ett meddelande till " -"antingen\n" -"SeanEgn eller LSchiere (via AIM). Hur du får tag på Sean och Luke finner du " -"på\n" -"%swiki/DeveloperPages\n" #. Translators may want to transliterate the name. #. It is not to be translated. msgid "Pidgin" msgstr "Pidgin" +#, c-format +msgid "Exiting because another libpurple client is already running.\n" +msgstr "Avslutar på grund av att en annan libpurple-klient redan körs.\n" + msgid "Open All Messages" msgstr "Öppna alla meddelanden" @@ -12211,8 +12151,8 @@ msgstr[1] "%s har %d nya meddelanden." #, c-format msgid "<b>%d new email.</b>" msgid_plural "<b>%d new emails.</b>" -msgstr[0] "<b>Du har %d nytt epost.</b>" -msgstr[1] "<b>Du har %d nya epost.</b>" +msgstr[0] "<b>Du har %d nytt mejl.</b>" +msgstr[1] "<b>Du har %d nya mejl.</b>" #, c-format msgid "The browser command \"%s\" is invalid." @@ -12233,7 +12173,7 @@ msgid "The following plugins will be unloaded." msgstr "De följande modulerna kommer avladdas." msgid "Multiple plugins will be unloaded." -msgstr "Multibla moduler kommer bli avladdade." +msgstr "Multipla moduler kommer bli avladdade." msgid "Unload Plugins" msgstr "Avladda insticksmoduler" @@ -12245,7 +12185,7 @@ msgid "" "The plugin could not be unloaded now, but will be disabled at the next " "startup." msgstr "" -"Instickmodulen kunde inte stoppas, men den kommer att vara inaktiverad " +"Insticksmodulen kunde inte stoppas, men den kommer att vara inaktiverad " "nästan uppstart." #, c-format @@ -12376,7 +12316,7 @@ msgid "_Show system tray icon:" msgstr "Vi_sa systempanelsikon:" msgid "On unread messages" -msgstr "Vid olästa meddeladen" +msgstr "Vid olästa meddelanden" msgid "Conversation Window Hiding" msgstr "Dölj konversationsfönster" @@ -12534,6 +12474,10 @@ msgstr "Proxyserver" msgid "No proxy" msgstr "Ingen proxy" +#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings +msgid "Use remote DNS with SOCKS4 proxies" +msgstr "Använd fjärr-DNS med SOCKS4-proxier" + msgid "_User:" msgstr "_Användare:" @@ -12600,7 +12544,7 @@ msgstr "" "(%s för URL)" msgid "Log _format:" -msgstr "Logg_format:" +msgstr "Logg _format:" msgid "Log all _instant messages" msgstr "_Logga alla snabbmeddelanden" @@ -12655,20 +12599,17 @@ msgstr "" "Ljud_kommando:\n" "(%s för filnamn)" -#, fuzzy msgid "M_ute sounds" -msgstr "_Stäng av ljud" +msgstr "_Tysta ljud" msgid "Sounds when conversation has _focus" msgstr "Ljud när konversationsfönstret har _fokus" -#, fuzzy msgid "_Enable sounds:" -msgstr "Aktivera ljud:" +msgstr "_Aktivera ljud:" -#, fuzzy msgid "V_olume:" -msgstr "Volum:" +msgstr "V_olum:" msgid "Play" msgstr "Spela upp" @@ -12890,13 +12831,11 @@ msgstr "Smiley" msgid "Custom Smiley Manager" msgstr "Hanterare för egna Smileys" -#, fuzzy msgid "Click to change your buddyicon for this account." -msgstr "Använd denna kompis_ikon för detta konto:" +msgstr "Klicka här för att ändra kompisikon för detta konto." -#, fuzzy msgid "Click to change your buddyicon for all accounts." -msgstr "Använd denna kompis_ikon för detta konto:" +msgstr "Klicka här för att ändra din kompisikon för alla konton." msgid "Waiting for network connection" msgstr "Väntar på nätverksanslutning." @@ -13030,13 +12969,11 @@ msgstr "Hämta _info" msgid "_Invite" msgstr "Bjud _in" -#, fuzzy msgid "_Modify..." -msgstr "_Ändra" +msgstr "_Ändra..." -#, fuzzy msgid "_Add..." -msgstr "_Lägg till" +msgstr "_Lägg till..." msgid "_Open Mail" msgstr "_Öppna brev" @@ -13059,18 +12996,17 @@ msgstr "Välj detta för att avaktivera grafiska emoticons." msgid "none" msgstr "ingen" -#, fuzzy msgid "Small" -msgstr "E-post" +msgstr "Liten" msgid "Smaller versions of the default smilies" -msgstr "" +msgstr "Mindre versioner av de förvadla smiliesarna." msgid "Response Probability:" msgstr "Trolighet för svar:" msgid "Statistics Configuration" -msgstr "Statestikkonfigurering" +msgstr "Statistikkonfigurering" #. msg_difference spinner msgid "Maximum response timeout:" @@ -13169,7 +13105,7 @@ msgid "Customize colors in the conversation window" msgstr "Ändra färgerna konversationsfönstret" msgid "Error Messages" -msgstr "Felmeddeladen" +msgstr "Felmeddelanden" msgid "Highlighted Messages" msgstr "Markerade träffar" @@ -13324,7 +13260,7 @@ msgid "The evolution executable was not found in the PATH." msgstr "Evolutions körfil hittades inte i sökvägarna." msgid "An email address was not found for this buddy." -msgstr "Ingen epostadress hittades för denna kompisen." +msgstr "Ingen mejladress hittades för denna kompisen." msgid "Add to Address Book" msgstr "Lägg till i adressboken" @@ -13532,9 +13468,8 @@ msgstr "Lägg till meddelanderäknare i _X" msgid "Set window manager \"_URGENT\" hint" msgstr "Sätt fönsterhanterarens \"_URGENT\"-ledtråd" -#, fuzzy msgid "_Flash window" -msgstr "_Chattfönster" +msgstr "_Flash-fönster" #. Raise window method button msgid "R_aise conversation window" @@ -13621,9 +13556,8 @@ msgstr "Sekundär färg på markören" msgid "Hyperlink Color" msgstr "Färg på länkar" -#, fuzzy msgid "Visited Hyperlink Color" -msgstr "Färg på länkar" +msgstr "Färg för besökta hyperlänkar" msgid "Highlighted Message Name Color" msgstr "Färg på namn i markerade färger" @@ -13719,18 +13653,16 @@ msgstr "" #, c-format msgid "You can upgrade to %s %s today." -msgstr "" +msgstr "Du kan upgradera till %s %s idag." msgid "New Version Available" msgstr "Ny version tillgänglig" -#, fuzzy msgid "Later" -msgstr "Datum" +msgstr "Senare" -#, fuzzy msgid "Download Now" -msgstr "Laddar ned %s: %s" +msgstr "Laddar ned nu" #. *< type #. *< ui_requirement @@ -13811,7 +13743,7 @@ msgstr "Du _skickar:" #. Created here so it can be passed to whole_words_button_toggled. msgid "_Exact case match (uncheck for automatic case handling)" msgstr "" -"_Exakt skriftlägeskäbslighet (avmarkera för automatisk skriftlägesavkänning)" +"_Exakt skriftlägeskänslighet (avmarkera för automatisk skriftlägesavkänning)" msgid "Only replace _whole words" msgstr "Ersätt endast _hela ord" @@ -13880,7 +13812,7 @@ msgid "Co_nversations:" msgstr "Ko_nversationer:" msgid "For delayed messages" -msgstr "För fördröjd meddeladen" +msgstr "För fördröjda meddelanden" msgid "For delayed messages and in chats" msgstr "För fördröjda meddelanden och i chattar" @@ -13989,9 +13921,6 @@ msgstr "_Håll kompislistefönstret överst:" msgid "Only when docked" msgstr "Endast om dockad" -msgid "_Flash window when chat messages are received" -msgstr "Blinka med _fönstret när chattmeddelanden tas emot" - msgid "Windows Pidgin Options" msgstr "Inställningar för Pidgin i Windows" @@ -14041,9 +13970,30 @@ msgstr "Skicka och ta emot råa XMPP strofer." msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "Denna modul är användbar vid felsökning av XMPP serverar och klienter." +#~ msgid "Unable to retrieve MSN Address Book" +#~ msgstr "Kunde inte hämta MSN-adressbok" + +#~ msgid "" +#~ "You may be disconnected shortly. You may want to use TOC until this is " +#~ "fixed. Check %s for updates." +#~ msgstr "" +#~ "Du kanske snart blir frånkopplad, du kanske ska använda TOC tills detta " +#~ "är fixat. Kolla på %s efter uppdateringar." + +#~ msgid "_Flash window when chat messages are received" +#~ msgstr "Blinka med _fönstret när chattmeddelanden tas emot" + #~ msgid "A group with the name already exists." #~ msgstr "En grupp med det namnet finns redan." +#~ 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] "" +#~ "Anslutning till servern tappad (ingen data mottagen på %d sekund)" +#~ msgstr[1] "" +#~ "Anslutning till servern tappad (ingen data mottagen på %d sekunder)" + #~ msgid "Primary Information" #~ msgstr "Primär information" @@ -14142,16 +14092,12 @@ msgstr "Denna modul är användbar vid felsökning av XMPP serverar och klienter #~ msgid "Change Qun information" #~ msgstr "Kanalinformation" -#, fuzzy -#~ msgid "" -#~ "%s\n" -#~ "\n" -#~ "%s" -#~ msgstr "%s (%s)" - #~ msgid "System Message" #~ msgstr "Systemmeddelande" +#~ msgid "Failed to send IM." +#~ msgstr "Kunde inte skicka snabbmeddelande" + #~ msgid "<b>Last Login IP</b>: %s<br>\n" #~ msgstr "<b>Senaste login IP</b>: %s<br>\n" @@ -14176,13 +14122,31 @@ msgstr "Denna modul är användbar vid felsökning av XMPP serverar och klienter #~ msgstr "Fel vid byte av lösenord" #, fuzzy +#~ msgid "Unable login for unknow reply code 0x%02X" +#~ msgstr "Ogiltig polettsvarskod, 0x%02X" + +#~ msgid "Keep alive error" +#~ msgstr "Problem att hålla vid liv" + +#, fuzzy #~ msgid "Failed to connect all servers" #~ msgstr "Kunde inte ansluta till servern" +#~ msgid "" +#~ "Lost connection with server:\n" +#~ "%d, %s" +#~ msgstr "" +#~ "Tappade anslutningen med servern:\n" +#~ "%d, %s" + #~ msgid "Connecting server %s, retries %d" #~ msgstr "Ansluter till server %s, försök %d" #, fuzzy +#~ msgid "You are not a member of QQ Qun \"%s\"\n" +#~ msgstr "Du är inte medlemm i gruppen \"%s\"\n" + +#, fuzzy #~ msgid "Do you approve the requestion?" #~ msgstr "Vill du godkänna förfrågan?" @@ -14216,6 +14180,9 @@ msgstr "Denna modul är användbar vid felsökning av XMPP serverar och klienter #~ msgid "QQ Server Notice" #~ msgstr "Serverport" +#~ msgid "User information for %s unavailable" +#~ msgstr "Användarinformation om %s är inte tillgänglig" + #, fuzzy #~ msgid "Network disconnected" #~ msgstr "Fjärrdatorn kopplade ifrån" diff --git a/po/zh_HK.po b/po/zh_HK.po index 0fae0c68c6..27908a8608 100644 --- a/po/zh_HK.po +++ b/po/zh_HK.po @@ -5,7 +5,7 @@ # Copyright (C) 2003-2008, Ambrose C. Li <acli@ada.dhs.org> # # This file is distributed under the same license as the "Pidgin" package. -# $InternalId: zh_TW.po,v 1.553 2008/09/30 05:14:21 acli Exp $ +# $InternalId: zh_TW.po,v 1.562 2009/02/27 04:50:13 acli Exp $ # # ---------------------------------------------------------- # For internal use only: @@ -43,18 +43,17 @@ # NOTE 以前分「Deny」(拒絕) 和「Block」(封鎖),現在不分了 # NOTE 拒絕可以說等同於封鎖和某一個使用者的聯繫,有時用封鎖比較好。 # NOTE MSN6.0中文版對「Block」一詞的譯文為「封鎖」 -# XXX Stream 暫譯「串流」,應該不是「通道」 # NOTE nplurals 重設為 2,因為部分原文要分辨例如「它」及「它們」一類的字眼 # NOTE 所有語文名稱(除「世界語」外)一概譯成「XX文」,不譯「XX語」,因為寫下的是文,不是語 # ---------------------------------------------------------- # msgid "" msgstr "" -"Project-Id-Version: Pidgin 2.5.2\n" +"Project-Id-Version: Pidgin 2.5.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-18 01:17-0800\n" -"PO-Revision-Date: 2008-12-17 12:15+0800\n" -"Last-Translator: Paladin R. Liu <paladin@ms1.hinet.net>\n" +"POT-Creation-Date: 2009-02-27 10:14-0800\n" +"PO-Revision-Date: 2009-02-25 09:57-0500\n" +"Last-Translator: Ambrose Li <ambrose.li@gmail.com>\n" "Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -77,7 +76,7 @@ msgid "" "Usage: %s [OPTION]...\n" "\n" " -c, --config=DIR use DIR for config files\n" -" -d, --debug print debugging messages to stdout\n" +" -d, --debug print debugging messages to stderr\n" " -h, --help display this help and exit\n" " -n, --nologin don't automatically login\n" " -v, --version display the current version and exit\n" @@ -86,7 +85,7 @@ msgstr "" "使用方法: %s [選項]...\n" "\n" " -c, --config=DIR 設定檔所在目錄\n" -" -d, --debug 在標準輸出中顯示除錯訊息\n" +" -d, --debug 在標準錯誤輸出中顯示除錯訊息\n" " -h, --help 顯示輔助訊息並離開\n" " -n, --nologin 不自動登入\n" " -v, --version 顯示版本訊息並離開\n" @@ -238,14 +237,16 @@ msgstr "必須指定帳號" msgid "The selected account is not online." msgstr "所指定的帳號目前沒有連線。" +# NOTE 譯文改動 by c9s (http://developer.pidgin.im/ticket/7917) - 20090226 acli msgid "Error adding buddy" msgstr "新增好友途中發生了錯誤" msgid "Username" msgstr "使用者" +# NOTE 譯文改動 by c9s (http://developer.pidgin.im/ticket/7917) - 20090226 acli msgid "Alias (optional)" -msgstr "別名(可以不填)" +msgstr "別名(選用)" # XXX 譯文可能不太通順 - acli 20080229 msgid "Add in group" @@ -285,7 +286,7 @@ msgid "You can edit more information from the context menu later." msgstr "如果要繼續修改其他細節,請用快顯選單。" msgid "Error adding group" -msgstr "新增羣組途中發生了錯誤" +msgstr "新增羣組發生了錯誤" msgid "You must give a name for the group to add." msgstr "請給你新增的羣組輸入名稱。" @@ -871,9 +872,9 @@ msgstr "已完成" msgid "The file was saved as %s." msgstr "成功存檔至 %s。" -# XXX 20080508 acli +# NOTE 譯文改動 by c9s (http://developer.pidgin.im/ticket/7917) - 20090226 acli msgid "Sending" -msgstr "送出中" +msgstr "傳送中" # XXX 20080508 acli msgid "Receiving" @@ -1216,7 +1217,6 @@ msgstr "閒置多少分鐘更改狀態" msgid "Change status to" msgstr "更改狀態為" -#. Conversations msgid "Conversations" msgstr "交談" @@ -1333,14 +1333,18 @@ msgstr "音效選項" msgid "Sounds when conversation has focus" msgstr "當交談取得輸入焦點發出音效" +# XXX: 務必 聽起來不太恰當。這裡是指 Enable Sound 的選項 - c9s, 08 Dec 27 12/27/2008 +# XXX 「務必」不只指 Enable Sound,也在其他地方用到,改譯「完全啟用」不行 - 20090226 acli msgid "Always" msgstr "務必" +# NOTE 譯文改動 by c9s (http://developer.pidgin.im/ticket/7917) - 20090226 acli msgid "Only when available" -msgstr "上線而非離開期間" +msgstr "狀態為上線時" +# XXX: 離開區間? - c9s, 08 Dec 27 12/27/2008 msgid "Only when not available" -msgstr "離開期間" +msgstr "狀態為非上線時" msgid "Volume(0-100):" msgstr "音量(0-100):" @@ -1539,7 +1543,6 @@ msgid "" "conversation into the current conversation." msgstr "當新的交談開啟時,這個模組將會把上次的交談內容也顯示出來。" -#, c-format msgid "Online" msgstr "上線" @@ -1986,7 +1989,6 @@ msgstr "開始自 %2$s 傳送 %1$s" msgid "Transfer of file %s complete" msgstr "檔案 %s 傳送完畢" -#, c-format msgid "File transfer complete" msgstr "檔案傳輸完畢" @@ -1994,7 +1996,6 @@ msgstr "檔案傳輸完畢" msgid "You canceled the transfer of %s" msgstr "你取消了 %s 的傳送" -#, c-format msgid "File transfer cancelled" msgstr "檔案傳輸已取消" @@ -2185,7 +2186,6 @@ msgstr "(%s) %s <自動回覆>:%s\n" msgid "You are using %s, but this plugin requires %s." msgstr "你目前使用的是 %s,但這模組需要 %s。" -#, c-format msgid "This plugin has not defined an ID." msgstr "這個模組未有定義它的 ID。" @@ -2897,7 +2897,6 @@ msgid "" "Unable to establish connection with the local mDNS server. Is it running?" msgstr "無法與近端的 mDNS 伺服器建立連線。它在執行中嗎?" -#. Creating the options for the protocol msgid "First name" msgstr "名" @@ -2931,6 +2930,10 @@ msgstr "Bonjour 協定模組" msgid "Purple Person" msgstr "聯絡人" +#. Creating the options for the protocol +msgid "Local Port" +msgstr "本地端通訊埠" + # NOTE 這是通訊協定名稱,不是問候語 msgid "Bonjour" msgstr "Bonjour" @@ -3094,7 +3097,6 @@ msgstr "上線" #. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for #. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message #. Away stuff -#, c-format msgid "Away" msgstr "離開" @@ -3912,6 +3914,7 @@ msgstr "發佈公開密碼匙" msgid "User Chatting" msgstr "" +# NOTE Jabber 新功能規格 msgid "User Browsing" msgstr "使用者瀏覽" @@ -4019,7 +4022,6 @@ msgstr "想聊天" msgid "Extended Away" msgstr "長時間離開" -#, c-format msgid "Do Not Disturb" msgstr "請勿打擾" @@ -4262,6 +4264,9 @@ msgstr "認證中" msgid "Re-initializing Stream" msgstr "串流重新初始中" +msgid "Server doesn't support blocking" +msgstr "" + msgid "Not Authorized" msgstr "未認證" @@ -4852,9 +4857,6 @@ msgstr "動作" msgid "Select an action" msgstr "選擇一個動作" -msgid "Unable to retrieve MSN Address Book" -msgstr "無法讀取 MSN 通訊錄" - #. 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 @@ -5103,7 +5105,6 @@ msgstr "未經家長同意下使用兒童護照" msgid "Passport account not yet verified" msgstr "護照帳號尚未經過驗證" -#, c-format msgid "Passport account suspended" msgstr "護照帳號被暫時吊銷" @@ -5122,14 +5123,19 @@ msgstr "未知的錯誤代碼 %d" msgid "MSN Error: %s\n" msgstr "MSN 錯誤:%s\n" -#, fuzzy +# XXX 暫譯,有待改進 - 20090226 acli +# NOTE: (09時14分13秒 EST) wing: what does "Other Contacts" (msn/group.h:36) actually mean? .. +# NOTE: (09時24分18秒 EST) khc: I'd probably just translate to 其他人, hehe +# NOTE: (09時24分44秒 EST) QuLogic: Other Contacts is non-grouped +# NOTE: (09時25分02秒 EST) QuLogic: which is a group because libpurple doesn't understand non-grouped msgid "Other Contacts" -msgstr "聯絡方法" +msgstr "沒有羣組的好友" -# XXX「Remove Buddy」和「Remove Contact」在中文版Pidgin無法析別;可能有改進的空間 -#, fuzzy +# XXX 暫譯,有待改進 - 20090226 acli +# XXX 這可能是MSN的「基本資料連絡人」? +# XXX「Buddy」和「Contact」在中文版Pidgin無法析別;可能有改進的空間 msgid "Non-IM Contacts" -msgstr "移除這組好友" +msgstr "非即時訊息的好友" msgid "Nudge" msgstr "呼叫" @@ -5206,9 +5212,8 @@ msgstr "傳呼" msgid "Playing a game" msgstr "正在玩遊戲" -#, fuzzy msgid "Working" -msgstr "工作資料" +msgstr "正在工作" msgid "Has you" msgstr "你在他(她)的好友清單裏" @@ -5246,13 +5251,12 @@ msgstr "樂手名稱" msgid "Album" msgstr "專輯名稱" -#, fuzzy msgid "Game Title" -msgstr "樂曲名稱" +msgstr "遊戲名稱" -#, fuzzy +# XXX 這是盲猜,但MSN「工作資訊」分頁內比較可能對應「Office Title」的應該是這個 - 20090226 msgid "Office Title" -msgstr "樂曲名稱" +msgstr "職位" msgid "Set Friendly Name..." msgstr "設定網名..." @@ -5445,9 +5449,8 @@ msgid "" msgstr "" "在這個使用者的個人資料網頁找不到任何可用的資料。這個使用者極有可能並不存在。" -#, fuzzy msgid "View web profile" -msgstr "離線時隱藏" +msgstr "檢視個人資料網頁" #. *< type #. *< ui_requirement @@ -5505,9 +5508,9 @@ msgstr "不明錯誤(代碼 %d)" msgid "Unable to add user" msgstr "無法新增使用者" -#, fuzzy +# XXX 暫譯 - 20090226 msgid "The following users are missing from your addressbook" -msgstr "以下為搜尋結果" +msgstr "以下使用者不在通訊錄內" # TODO 請覆查,譯文有待改進 #, c-format @@ -6336,7 +6339,6 @@ msgstr "無法連線至伺服器。請輸入你希望連線至的伺服器的位 msgid "Error. SSL support is not installed." msgstr "錯誤:沒有安裝 SSL 支援。" -#, c-format msgid "This conference has been closed. No more messages can be sent." msgstr "這個會議已經關閉。無法繼續送出任何訊息。" @@ -6596,6 +6598,7 @@ msgstr "ICQ UTF8" msgid "Hiptop" msgstr "Hiptop" +# FIXME flagged "有保安功能?" by c9s (http://developer.pidgin.im/ticket/7917), need to verify - 20090226 acli msgid "Security Enabled" msgstr "有保安功能" @@ -6618,24 +6621,19 @@ msgstr "照相機" msgid "Screen Sharing" msgstr "螢幕共享" -#, c-format msgid "Free For Chat" msgstr "我有空聊天" -#, c-format msgid "Not Available" msgstr "長時間離開" -#, c-format msgid "Occupied" msgstr "忙碌" # NOTE 參閱 http://www.geocities.com/Athens/Delphi/6470/icq99.html -#, c-format msgid "Web Aware" msgstr "允許其他使用者在網絡上查看你目前的狀態" -#, c-format msgid "Invisible" msgstr "隱身" @@ -6737,19 +6735,15 @@ msgid "_OK" msgstr "確定(_O)" #, c-format -msgid "" -"You may be disconnected shortly. You may want to use TOC until this is " -"fixed. Check %s for updates." -msgstr "" -"你可能會短時間中斷連線。你可能會想在這個問題被修正後使用 TOC。請到 %s 看看有" -"沒有更新。" +msgid "You may be disconnected shortly. If so, check %s for updates." +msgstr "你可能會在短時間內中斷連線。如果屬實,請到 %s 看看有沒有更新。" msgid "Unable to get a valid AIM login hash." msgstr "無法取得有效的 AIM 登入碼。" #, c-format msgid "You may be disconnected shortly. Check %s for updates." -msgstr "你可能會短時間中斷連線。請到 %s 看看有沒有更新。" +msgstr "你可能會在短時間內中斷連線。請到 %s 看看有沒有更新。" msgid "Unable to get a valid login hash." msgstr "無法取得有效的登入雜湊。" @@ -7180,6 +7174,7 @@ msgstr "連線(_O)" msgid "Get AIM Info" msgstr "取得 AIM 資訊" +#. We only do this if the user is in our buddy list msgid "Edit Buddy Comment" msgstr "編輯好友說明" @@ -7290,7 +7285,6 @@ msgstr "正在要求 %s 連線至此處 (%s:%hu),以便建立即時訊息。" msgid "Attempting to connect to %s:%hu." msgstr "正在嘗試連線至 %s:%hu。" -#, c-format msgid "Attempting to connect via proxy server." msgstr "正在嘗試透過代理伺服器連線。" @@ -7381,16 +7375,15 @@ msgstr "豬" msgid "Other" msgstr "其他" -#, fuzzy msgid "Visible" -msgstr "隱身" +msgstr "公開" +# XXX 暫譯 - 20090226 msgid "Friend Only" -msgstr "" +msgstr "只允許好友" -#, fuzzy msgid "Private" -msgstr "私隱設定" +msgstr "非公開" msgid "QQ Number" msgstr "QQ 號碼" @@ -7417,18 +7410,14 @@ msgstr "流動電話號碼" msgid "Personal Introduction" msgstr "個人簡介" -#, fuzzy msgid "City/Area" -msgstr "城市" +msgstr "城市/地區" -#, fuzzy msgid "Publish Mobile" -msgstr "個人流動電話" +msgstr "刊登流動電話號碼" -# XXX 中文譯文無法分別出「Alias Buddy」和「Alias Contact」 -#, fuzzy msgid "Publish Contact" -msgstr "為這組好友加上別名" +msgstr "刊登個人資料" msgid "College" msgstr "大學/大專" @@ -7445,21 +7434,21 @@ msgid "Blood" msgstr "血型" msgid "True" -msgstr "" +msgstr "是" msgid "False" -msgstr "" +msgstr "不是" -#, fuzzy +# FIXME - qq.c is buggy - it uses "Contact" here to mean "personal contact info" - filed ticket #8523 +# FIXME - 原文一詞多義,無法翻譯 - 20090226 msgid "Modify Contact" msgstr "修改帳號" msgid "Modify Address" msgstr "修改地址" -#, fuzzy msgid "Modify Extended Information" -msgstr "修改資訊" +msgstr "修改詳細資訊" msgid "Modify Information" msgstr "修改資訊" @@ -7578,12 +7567,9 @@ msgstr "不是成員" msgid "Member" msgstr "用戶" -# XXX 這譯文絶對有問題,但想不到怎樣譯較好 - ambrose 20070415 -#, fuzzy msgid "Requesting" -msgstr "對話視窗 (Request Dialog)" +msgstr "" -# #NOTE 根據「plugins/log_reader.c#1971」的訊息來判斷,應該是指一種新式的通訊協定。 msgid "Admin" msgstr "" @@ -7599,14 +7585,12 @@ msgstr "創立者" msgid "About me" msgstr "關於我" -#, fuzzy msgid "Category" -msgstr "聊天錯誤" +msgstr "類別" msgid "The Qun does not allow others to join" msgstr "這羣組不容許外人加入" -#, fuzzy msgid "Join QQ Qun" msgstr "加入羣組" @@ -7671,9 +7655,9 @@ msgstr "設定" msgid "%u requested to join Qun %u for %s" msgstr "使用者 %d 要求加入羣組 %d" -#, fuzzy, c-format +#, c-format msgid "%u request to join Qun %u" -msgstr "使用者 %d 要求加入羣組 %d" +msgstr "使用者 %u 要求加入羣組 %u" #, c-format msgid "Failed to join Qun %u, operated by admin %u" @@ -7684,9 +7668,9 @@ msgid "<b>Joining Qun %u is approved by admin %u for %s</b>" msgstr "" # XXX「Remove Buddy」和「Remove Contact」在中文版Pidgin無法析別;可能有改進的空間 -#, fuzzy, c-format +#, c-format msgid "<b>Removed buddy %u.</b>" -msgstr "移除好友" +msgstr "<b>成功移除好友 %u。</b>" # XXX「Remove Buddy」和「Remove Contact」在中文版Pidgin無法析別;可能有改進的空間 #, c-format @@ -7720,14 +7704,12 @@ msgstr " TCP" msgid " FromMobile" msgstr " 使用流動通訊器材" -#, fuzzy msgid " BindMobile" msgstr " 綁定流動通訊器材" msgid " Video" msgstr " 視像" -#, fuzzy msgid " Zone" msgstr " 區" @@ -7807,21 +7789,20 @@ msgstr "<b>IP位址</b>:%s<br>\n" msgid "Login Information" msgstr "登入資訊" -#, fuzzy msgid "<p><b>Original Author</b>:<br>\n" -msgstr "<b>外部使用者</b><br>" +msgstr "<p><b>原作者</b>:<br>\n" msgid "<p><b>Code Contributors</b>:<br>\n" msgstr "<p><b>程式碼貢獻者</b>:<br>\n" -#, fuzzy msgid "<p><b>Lovely Patch Writers</b>:<br>\n" -msgstr "<b>最近更新時間:</b>%s<br>\n" +msgstr "<p><b>可愛的模組作者</b>:<br>\n" -# NOTE qq_data->net_stat.sent,送出的數據封包數量(並非位元組數量)的總計 -#, fuzzy msgid "<p><b>Acknowledgement</b>:<br>\n" -msgstr "<b>送出封包</b>:%lu 個<br>\n" +msgstr "<p><b>鳴謝</b>:<br>\n" + +msgid "<p><b>Scrupulous Testers</b>:<br>\n" +msgstr "<p><b>仔細的品管人員</b>:<br>\n" msgid "<p><i>And, all the boys in the backroom...</i><br>\n" msgstr "<p><i>還有所有幕後默默貢獻的無名英雄們…</i><br>\n" @@ -7848,6 +7829,10 @@ msgstr "" msgid "About OpenQ" msgstr "關於 OpenQ" +#, fuzzy +msgid "Modify Buddy Memo" +msgstr "修改地址" + #. *< type #. *< ui_requirement #. *< flags @@ -7868,13 +7853,13 @@ msgid "Select Server" msgstr "選擇伺服器" msgid "QQ2005" -msgstr "" +msgstr "QQ2005" msgid "QQ2007" -msgstr "" +msgstr "QQ2007" msgid "QQ2008" -msgstr "" +msgstr "QQ2008" msgid "Connect by TCP" msgstr "使用 TCP 連線" @@ -7887,6 +7872,9 @@ msgstr "顯示伺服器通告" msgid "Show server news" msgstr "顯示伺服器是日訊息" +msgid "Show chat room when msg comes" +msgstr "" + # XXX 20080810 acli - 譯文有待改進,原文也是 msgid "Keep alive interval (seconds)" msgstr "每隔多少秒送出 Keep Alive" @@ -7900,7 +7888,7 @@ msgstr "無法解密伺服器回應" #, c-format msgid "Failed requesting token, 0x%02X" -msgstr "" +msgstr "請求符記失敗,回應碼「0x%02X」" #, c-format msgid "Invalid token len, %d" @@ -7908,7 +7896,7 @@ msgstr "符記長度「%d」無效" #. extend redirect used in QQ2006 msgid "Redirect_EX is not currently supported" -msgstr "" +msgstr "暫時不支援 Redirect_EX" #. need activation #. need activation @@ -7978,9 +7966,8 @@ msgid "Getting server" msgstr "設定使用者資訊..." # XXX 這是看了原始碼後的結論(但可能會錯)- acli 20080930 -#, fuzzy msgid "Requesting token" -msgstr "送出請求符記中" +msgstr "請求符記中" msgid "Couldn't resolve host" msgstr "無法解析主機" @@ -9535,6 +9522,9 @@ msgstr "無法解析主機" msgid "SIP usernames may not contain whitespaces or @ symbols" msgstr "SIP 的帳號不可含有空白字符或「@」符號" +msgid "SIP connect server not specified" +msgstr "未有指定 SIP 伺服器" + #. *< type #. *< ui_requirement #. *< flags @@ -11467,8 +11457,10 @@ msgid "Invert" msgstr "反向" # XXX TODO 我非常討厭把「Highlight」譯成「高亮度」,但譯文可以改進 - Ambrose 20061029 +# XXX flagged "有保安功能?" by c9s (http://developer.pidgin.im/ticket/7917), need to verify - 20090226 acli +# NOTE 譯文改動 by c9s msgid "Highlight matches" -msgstr "標示匹配字串" +msgstr "標示比對字串" # NOTE 除錯視窗的工具列的快取選單的指令,指「工具列的按紐以圖示標示」,下二同 msgid "_Icon Only" @@ -11513,11 +11505,13 @@ msgstr "錯誤訊息" msgid "Fatal Error" msgstr "嚴重錯誤訊息" +# XXX 暫譯 - 20090226 acli msgid "bug master" -msgstr "" +msgstr "除錯主管" +# NOTE 這個「artist」(有別於其他的「Artist」字串)係指設計pidgin圖示的「graphic designer」,絕對不可譯成「藝人」 msgid "artist" -msgstr "藝人" +msgstr "平面設計" #. feel free to not translate this msgid "Ka-Hing Cheung" @@ -11549,7 +11543,7 @@ msgid "support/QA" msgstr "支援兼品管" msgid "XMPP" -msgstr "" +msgstr "XMPP" msgid "original author" msgstr "原作者" @@ -11706,6 +11700,9 @@ msgstr "立陶宛文" msgid "Macedonian" msgstr "馬其頓文" +msgid "Mongolian" +msgstr "蒙古文" + # NOTE 譯文不統一,一般似乎偏向音譯,但譯音也不統一 # NOTE 音譯包括:博克馬爾、波克默爾、布克莫爾、巴克摩 # NOTE 其他譯法包括:丹麥-挪威文(大英百科)、丹麥式挪威文(維基百科)、東挪威文、標準挪威文(國內不是標準,國外是 :P) @@ -11837,9 +11834,31 @@ msgstr "" "<BR><BR>" #, c-format -msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgid "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">常見問題:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/" +"FAQ\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">電郵支援:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgstr "" +"<FONT SIZE=\"4\">IRC 頻道</FONT> irc.freenode.net 上的 #pidgin 頻道<BR><BR>" + +#, c-format +msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" msgstr "" -"<FONT SIZE=\"4\">IRC:</FONT> irc.freenode.net 上的 #pidgin 頻道<BR><BR>" +"<FONT SIZE=\"4\">XMPP 聊天室:</FONT>devel@conference.pidgin.im<BR><BR>" msgid "Current Developers" msgstr "現任開發者" @@ -12503,6 +12522,10 @@ msgstr "" msgid "Pidgin" msgstr "Pidgin" +#, c-format +msgid "Exiting because another libpurple client is already running.\n" +msgstr "" + msgid "Open All Messages" msgstr "開啟所有訊息" @@ -12843,6 +12866,10 @@ msgstr "代理伺服器" msgid "No proxy" msgstr "不使用代理伺服器" +#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings +msgid "Use remote DNS with SOCKS4 proxies" +msgstr "使用 SOCKS4 代理伺服器時使用遠端 DNS" + msgid "_User:" msgstr "使用者(_U):" @@ -13345,9 +13372,9 @@ msgstr "開啟郵件(_O)" msgid "_Edit" msgstr "修改(_E)" -# FIXME Tooltip中文怎寫? +# NOTE 譯文改動 by c9s (http://developer.pidgin.im/ticket/7917) - 20090226 acli msgid "Pidgin Tooltip" -msgstr "Pidgin Tooltip" +msgstr "Pidgin 工具提示" # NOTE 這是「Default」表情主題的說明 msgid "Pidgin smileys" @@ -13481,9 +13508,9 @@ msgstr "自選交談視窗內各種顏色的使用" msgid "Error Messages" msgstr "錯誤訊息" -# XXX TODO 我非常討厭把「Highlight」譯成「高亮度」,但譯文可以改進 - Ambrose 20061029 +# NOTE 譯文改動 by c9s (http://developer.pidgin.im/ticket/7917) 12/27/2008 - 20090226 acli msgid "Highlighted Messages" -msgstr "反白訊息" +msgstr "已標示訊息" msgid "System Messages" msgstr "系統訊息" @@ -13951,9 +13978,9 @@ msgid "Visited Hyperlink Color" msgstr "瀏覽過的超連結顏色" # XXX TODO 我非常討厭把「Highlight」譯成「高亮度」,但譯文可以改進 - Ambrose 20061029 -# FIXME 什麼是「反白訊息名稱」? - acli 20080511 +# NOTE 譯文改動 by c9s (http://developer.pidgin.im/ticket/7917) 20081227 - 20090226 acli msgid "Highlighted Message Name Color" -msgstr "反白訊息名稱顏色" +msgstr "已標示訊息名稱顏" msgid "GtkTreeView Horizontal Separation" msgstr "GtkTreeView 水平間隔距離" @@ -14048,7 +14075,7 @@ msgstr "" #, c-format msgid "You can upgrade to %s %s today." -msgstr "" +msgstr "%s 現已可升級至 %s 版。" msgid "New Version Available" msgstr "有新版本" @@ -14318,9 +14345,6 @@ msgstr "好友清單視窗保持在桌面最上層(_K);" msgid "Only when docked" msgstr "只在停駐時生效" -msgid "_Flash window when chat messages are received" -msgstr "收到聊天訊息後閃動視窗(_F)" - msgid "Windows Pidgin Options" msgstr "Windows 版 Pidgin 選項" @@ -14370,6 +14394,19 @@ msgstr "送出、讀取未加工的 XMPP 段落。" msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "幫助為 XMPP 伺服器或客戶端進行除錯。" +#~ msgid "Unable to retrieve MSN Address Book" +#~ msgstr "無法讀取 MSN 通訊錄" + +#~ msgid "_Flash window when chat messages are received" +#~ msgstr "收到聊天訊息後閃動視窗(_F)" + +#~ msgid "" +#~ "You may be disconnected shortly. You may want to use TOC until this is " +#~ "fixed. Check %s for updates." +#~ msgstr "" +#~ "您可能會短時間中斷連線。您可能會想在這個問題被修正後使用 TOC。請到 %s 看看" +#~ "有沒有更新。" + #~ msgid "Connection to server lost (no data received within %d second)" #~ msgid_plural "" #~ "Connection to server lost (no data received within %d seconds)" diff --git a/po/zh_TW.po b/po/zh_TW.po index cdcd2cfa1c..98fac8547b 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -3,7 +3,7 @@ # Copyright (C) 2003-2008, Ambrose C. Li <acli@ada.dhs.org> # # This file is distributed under the same license as the "Pidgin" package. -# $InternalId: zh_TW.po,v 1.553 2008/09/30 05:14:21 acli Exp $ +# $InternalId: zh_TW.po,v 1.562 2009/02/27 04:50:13 acli Exp $ # # ---------------------------------------------------------- # For internal use only: @@ -41,18 +41,17 @@ # NOTE 以前分「Deny」(拒絕) 和「Block」(封鎖),現在不分了 # NOTE 拒絕可以說等同於封鎖和某一個使用者的聯繫,有時用封鎖比較好。 # NOTE MSN6.0中文版對「Block」一詞的譯文為「封鎖」 -# XXX Stream 暫譯「串流」,應該不是「通道」 # NOTE nplurals 重設為 2,因為部分原文要分辨例如「它」及「它們」一類的字眼 # NOTE 所有語文名稱(除「世界語」外)一概譯成「XX文」,不譯「XX語」,因為寫下的是文,不是語 # ---------------------------------------------------------- # msgid "" msgstr "" -"Project-Id-Version: Pidgin 2.5.2\n" +"Project-Id-Version: Pidgin 2.5.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-18 01:17-0800\n" -"PO-Revision-Date: 2008-12-17 12:15+0800\n" -"Last-Translator: Paladin R. Liu <paladin@ms1.hinet.net>\n" +"POT-Creation-Date: 2009-02-27 10:14-0800\n" +"PO-Revision-Date: 2009-02-25 09:57-0500\n" +"Last-Translator: Ambrose Li <ambrose.li@gmail.com>\n" "Language-Team: Chinese (Traditional) <zh-l10n@linux.org.tw>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -75,7 +74,7 @@ msgid "" "Usage: %s [OPTION]...\n" "\n" " -c, --config=DIR use DIR for config files\n" -" -d, --debug print debugging messages to stdout\n" +" -d, --debug print debugging messages to stderr\n" " -h, --help display this help and exit\n" " -n, --nologin don't automatically login\n" " -v, --version display the current version and exit\n" @@ -84,7 +83,7 @@ msgstr "" "使用方法: %s [選項]...\n" "\n" " -c, --config=DIR 設定檔所在目錄\n" -" -d, --debug 在標準輸出中顯示除錯訊息\n" +" -d, --debug 在標準錯誤輸出中顯示除錯訊息\n" " -h, --help 顯示輔助訊息並離開\n" " -n, --nologin 不自動登入\n" " -v, --version 顯示版本訊息並離開\n" @@ -236,14 +235,16 @@ msgstr "必須指定帳號" msgid "The selected account is not online." msgstr "所指定的帳號目前沒有連線。" +# NOTE 譯文改動 by c9s (http://developer.pidgin.im/ticket/7917) - 20090226 acli msgid "Error adding buddy" msgstr "新增好友途中發生了錯誤" msgid "Username" msgstr "使用者" +# NOTE 譯文改動 by c9s (http://developer.pidgin.im/ticket/7917) - 20090226 acli msgid "Alias (optional)" -msgstr "別名(可以不填)" +msgstr "別名(選用)" # XXX 譯文可能不太通順 - acli 20080229 msgid "Add in group" @@ -283,7 +284,7 @@ msgid "You can edit more information from the context menu later." msgstr "如果要繼續修改其他細節,請用快顯選單。" msgid "Error adding group" -msgstr "新增群組途中發生了錯誤" +msgstr "新增群組發生了錯誤" msgid "You must give a name for the group to add." msgstr "請給您新增的群組輸入名稱。" @@ -869,9 +870,9 @@ msgstr "已完成" msgid "The file was saved as %s." msgstr "成功存檔至 %s。" -# XXX 20080508 acli +# NOTE 譯文改動 by c9s (http://developer.pidgin.im/ticket/7917) - 20090226 acli msgid "Sending" -msgstr "送出中" +msgstr "傳送中" # XXX 20080508 acli msgid "Receiving" @@ -1214,7 +1215,6 @@ msgstr "閒置多少分鐘更改狀態" msgid "Change status to" msgstr "更改狀態為" -#. Conversations msgid "Conversations" msgstr "交談" @@ -1331,14 +1331,18 @@ msgstr "音效選項" msgid "Sounds when conversation has focus" msgstr "當交談取得輸入焦點發出音效" +# XXX: 務必 聽起來不太恰當。這裡是指 Enable Sound 的選項 - c9s, 08 Dec 27 12/27/2008 +# XXX 「務必」不只指 Enable Sound,也在其他地方用到,改譯「完全啟用」不行 - 20090226 acli msgid "Always" msgstr "務必" +# NOTE 譯文改動 by c9s (http://developer.pidgin.im/ticket/7917) - 20090226 acli msgid "Only when available" -msgstr "上線而非離開期間" +msgstr "狀態為上線時" +# XXX: 離開區間? - c9s, 08 Dec 27 12/27/2008 msgid "Only when not available" -msgstr "離開期間" +msgstr "狀態為非上線時" msgid "Volume(0-100):" msgstr "音量(0-100):" @@ -1537,7 +1541,6 @@ msgid "" "conversation into the current conversation." msgstr "當新的交談開啟時,這個模組將會把上次的交談內容也顯示出來。" -#, c-format msgid "Online" msgstr "上線" @@ -1984,7 +1987,6 @@ msgstr "開始自 %2$s 傳送 %1$s" msgid "Transfer of file %s complete" msgstr "檔案 %s 傳送完畢" -#, c-format msgid "File transfer complete" msgstr "檔案傳輸完畢" @@ -1992,7 +1994,6 @@ msgstr "檔案傳輸完畢" msgid "You canceled the transfer of %s" msgstr "你取消了 %s 的傳送" -#, c-format msgid "File transfer cancelled" msgstr "檔案傳輸已取消" @@ -2183,7 +2184,6 @@ msgstr "(%s) %s <自動回覆>:%s\n" msgid "You are using %s, but this plugin requires %s." msgstr "您目前使用的是 %s,但這模組需要 %s。" -#, c-format msgid "This plugin has not defined an ID." msgstr "這個模組未有定義它的 ID。" @@ -2895,7 +2895,6 @@ msgid "" "Unable to establish connection with the local mDNS server. Is it running?" msgstr "無法與近端的 mDNS 伺服器建立連線。它在執行中嗎?" -#. Creating the options for the protocol msgid "First name" msgstr "名" @@ -2929,6 +2928,10 @@ msgstr "Bonjour 協定模組" msgid "Purple Person" msgstr "連絡人" +#. Creating the options for the protocol +msgid "Local Port" +msgstr "本地端通訊埠" + # NOTE 這是通訊協定名稱,不是問候語 msgid "Bonjour" msgstr "Bonjour" @@ -3092,7 +3095,6 @@ msgstr "上線" #. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for #. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message #. Away stuff -#, c-format msgid "Away" msgstr "離開" @@ -3910,6 +3912,7 @@ msgstr "發佈公鑰" msgid "User Chatting" msgstr "" +# NOTE Jabber 新功能規格 msgid "User Browsing" msgstr "使用者瀏覽" @@ -4017,7 +4020,6 @@ msgstr "想聊天" msgid "Extended Away" msgstr "長時間離開" -#, c-format msgid "Do Not Disturb" msgstr "請勿打擾" @@ -4260,6 +4262,9 @@ msgstr "認證中" msgid "Re-initializing Stream" msgstr "串流重新初始中" +msgid "Server doesn't support blocking" +msgstr "" + msgid "Not Authorized" msgstr "未認證" @@ -4850,9 +4855,6 @@ msgstr "動作" msgid "Select an action" msgstr "選擇一個動作" -msgid "Unable to retrieve MSN Address Book" -msgstr "無法讀取 MSN 通訊錄" - #. 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 @@ -5101,7 +5103,6 @@ msgstr "未經家長同意下使用兒童護照" msgid "Passport account not yet verified" msgstr "護照帳號尚未經過驗證" -#, c-format msgid "Passport account suspended" msgstr "護照帳號被暫時吊銷" @@ -5120,14 +5121,19 @@ msgstr "未知的錯誤代碼 %d" msgid "MSN Error: %s\n" msgstr "MSN 錯誤:%s\n" -#, fuzzy +# XXX 暫譯,有待改進 - 20090226 acli +# NOTE: (09時14分13秒 EST) wing: what does "Other Contacts" (msn/group.h:36) actually mean? .. +# NOTE: (09時24分18秒 EST) khc: I'd probably just translate to 其他人, hehe +# NOTE: (09時24分44秒 EST) QuLogic: Other Contacts is non-grouped +# NOTE: (09時25分02秒 EST) QuLogic: which is a group because libpurple doesn't understand non-grouped msgid "Other Contacts" -msgstr "聯絡方法" +msgstr "沒有群組的好友" -# XXX「Remove Buddy」和「Remove Contact」在中文版Pidgin無法析別;可能有改進的空間 -#, fuzzy +# XXX 暫譯,有待改進 - 20090226 acli +# XXX 這可能是MSN的「基本資料連絡人」? +# XXX「Buddy」和「Contact」在中文版Pidgin無法析別;可能有改進的空間 msgid "Non-IM Contacts" -msgstr "移除這組好友" +msgstr "非即時訊息的好友" msgid "Nudge" msgstr "呼叫" @@ -5204,9 +5210,8 @@ msgstr "傳呼" msgid "Playing a game" msgstr "正在玩遊戲" -#, fuzzy msgid "Working" -msgstr "工作資料" +msgstr "正在工作" msgid "Has you" msgstr "你在他(她)的好友清單裏" @@ -5244,13 +5249,12 @@ msgstr "樂手名稱" msgid "Album" msgstr "專輯名稱" -#, fuzzy msgid "Game Title" -msgstr "樂曲名稱" +msgstr "遊戲名稱" -#, fuzzy +# XXX 這是盲猜,但MSN「工作資訊」分頁內比較可能對應「Office Title」的應該是這個 - 20090226 msgid "Office Title" -msgstr "樂曲名稱" +msgstr "職位" msgid "Set Friendly Name..." msgstr "設定暱稱..." @@ -5443,9 +5447,8 @@ msgid "" msgstr "" "在這個使用者的個人資料網頁找不到任何可用的資料。這個使用者極有可能並不存在。" -#, fuzzy msgid "View web profile" -msgstr "離線時隱藏" +msgstr "檢視個人資料網頁" #. *< type #. *< ui_requirement @@ -5503,9 +5506,9 @@ msgstr "不明錯誤(代碼 %d)" msgid "Unable to add user" msgstr "無法新增使用者" -#, fuzzy +# XXX 暫譯 - 20090226 msgid "The following users are missing from your addressbook" -msgstr "以下為搜尋結果" +msgstr "以下使用者不在通訊錄內" # TODO 請覆查,譯文有待改進 #, c-format @@ -6334,7 +6337,6 @@ msgstr "無法連線至伺服器。請輸入您希望連線至的伺服器的位 msgid "Error. SSL support is not installed." msgstr "錯誤:沒有安裝 SSL 支援。" -#, c-format msgid "This conference has been closed. No more messages can be sent." msgstr "這個會議已經關閉。無法繼續送出任何訊息。" @@ -6594,6 +6596,7 @@ msgstr "ICQ UTF8" msgid "Hiptop" msgstr "Hiptop" +# FIXME flagged "有保安功能?" by c9s (http://developer.pidgin.im/ticket/7917), need to verify - 20090226 acli msgid "Security Enabled" msgstr "有保安功能" @@ -6616,24 +6619,19 @@ msgstr "照相機" msgid "Screen Sharing" msgstr "螢幕共享" -#, c-format msgid "Free For Chat" msgstr "我有空聊天" -#, c-format msgid "Not Available" msgstr "長時間離開" -#, c-format msgid "Occupied" msgstr "忙碌" # NOTE 參閱 http://www.geocities.com/Athens/Delphi/6470/icq99.html -#, c-format msgid "Web Aware" msgstr "允許其他使用者在網路上查看您目前的狀態" -#, c-format msgid "Invisible" msgstr "隱身" @@ -6735,19 +6733,15 @@ msgid "_OK" msgstr "確定(_O)" #, c-format -msgid "" -"You may be disconnected shortly. You may want to use TOC until this is " -"fixed. Check %s for updates." -msgstr "" -"您可能會短時間中斷連線。您可能會想在這個問題被修正後使用 TOC。請到 %s 看看有" -"沒有更新。" +msgid "You may be disconnected shortly. If so, check %s for updates." +msgstr "您可能會在短時間內中斷連線。如果屬實,請到 %s 看看有沒有更新。" msgid "Unable to get a valid AIM login hash." msgstr "無法取得有效的 AIM 登入碼。" #, c-format msgid "You may be disconnected shortly. Check %s for updates." -msgstr "您可能會短時間中斷連線。請到 %s 看看有沒有更新。" +msgstr "您可能會在短時間內中斷連線。請到 %s 看看有沒有更新。" msgid "Unable to get a valid login hash." msgstr "無法取得有效的登入雜湊。" @@ -7178,6 +7172,7 @@ msgstr "連線(_O)" msgid "Get AIM Info" msgstr "取得 AIM 資訊" +#. We only do this if the user is in our buddy list msgid "Edit Buddy Comment" msgstr "編輯好友說明" @@ -7288,7 +7283,6 @@ msgstr "正在要求 %s 連線至此處 (%s:%hu),以便建立即時訊息。" msgid "Attempting to connect to %s:%hu." msgstr "正在嘗試連線至 %s:%hu。" -#, c-format msgid "Attempting to connect via proxy server." msgstr "正在嘗試透過代理伺服器連線。" @@ -7379,16 +7373,15 @@ msgstr "豬" msgid "Other" msgstr "其他" -#, fuzzy msgid "Visible" -msgstr "隱身" +msgstr "公開" +# XXX 暫譯 - 20090226 msgid "Friend Only" -msgstr "" +msgstr "只允許好友" -#, fuzzy msgid "Private" -msgstr "隱私設定" +msgstr "非公開" msgid "QQ Number" msgstr "QQ 號碼" @@ -7415,18 +7408,14 @@ msgstr "行動電話號碼" msgid "Personal Introduction" msgstr "個人簡介" -#, fuzzy msgid "City/Area" -msgstr "城市" +msgstr "城市/地區" -#, fuzzy msgid "Publish Mobile" -msgstr "個人行動電話" +msgstr "刊登行動電話號碼" -# XXX 中文譯文無法分別出「Alias Buddy」和「Alias Contact」 -#, fuzzy msgid "Publish Contact" -msgstr "為這組好友加上別名" +msgstr "刊登個人資訊" msgid "College" msgstr "大學/大專" @@ -7443,21 +7432,21 @@ msgid "Blood" msgstr "血型" msgid "True" -msgstr "" +msgstr "是" msgid "False" -msgstr "" +msgstr "不是" -#, fuzzy +# FIXME - qq.c is buggy - it uses "Contact" here to mean "personal contact info" - filed ticket #8523 +# FIXME - 原文一詞多義,無法翻譯 - 20090226 msgid "Modify Contact" msgstr "修改帳號" msgid "Modify Address" msgstr "修改地址" -#, fuzzy msgid "Modify Extended Information" -msgstr "修改資訊" +msgstr "修改詳細資訊" msgid "Modify Information" msgstr "修改資訊" @@ -7576,12 +7565,9 @@ msgstr "不是成員" msgid "Member" msgstr "用戶" -# XXX 這譯文絶對有問題,但想不到怎樣譯較好 - ambrose 20070415 -#, fuzzy msgid "Requesting" -msgstr "對話視窗 (Request Dialog)" +msgstr "" -# #NOTE 根據「plugins/log_reader.c#1971」的訊息來判斷,應該是指一種新式的通訊協定。 msgid "Admin" msgstr "" @@ -7597,14 +7583,12 @@ msgstr "創立者" msgid "About me" msgstr "關於我" -#, fuzzy msgid "Category" -msgstr "聊天錯誤" +msgstr "類別" msgid "The Qun does not allow others to join" msgstr "這群組不容許外人加入" -#, fuzzy msgid "Join QQ Qun" msgstr "加入群組" @@ -7669,9 +7653,9 @@ msgstr "設定" msgid "%u requested to join Qun %u for %s" msgstr "使用者 %d 要求加入群組 %d" -#, fuzzy, c-format +#, c-format msgid "%u request to join Qun %u" -msgstr "使用者 %d 要求加入群組 %d" +msgstr "使用者 %u 要求加入群組 %u" #, c-format msgid "Failed to join Qun %u, operated by admin %u" @@ -7682,9 +7666,9 @@ msgid "<b>Joining Qun %u is approved by admin %u for %s</b>" msgstr "" # XXX「Remove Buddy」和「Remove Contact」在中文版Pidgin無法析別;可能有改進的空間 -#, fuzzy, c-format +#, c-format msgid "<b>Removed buddy %u.</b>" -msgstr "移除好友" +msgstr "<b>成功移除好友 %u。</b>" # XXX「Remove Buddy」和「Remove Contact」在中文版Pidgin無法析別;可能有改進的空間 #, c-format @@ -7718,14 +7702,12 @@ msgstr " TCP" msgid " FromMobile" msgstr " 使用行動裝置" -#, fuzzy msgid " BindMobile" msgstr " 綁定行動裝置" msgid " Video" msgstr " 視訊" -#, fuzzy msgid " Zone" msgstr " 區" @@ -7805,21 +7787,20 @@ msgstr "<b>IP位址</b>:%s<br>\n" msgid "Login Information" msgstr "登入資訊" -#, fuzzy msgid "<p><b>Original Author</b>:<br>\n" -msgstr "<b>外部使用者</b><br>" +msgstr "<p><b>原作者</b>:<br>\n" msgid "<p><b>Code Contributors</b>:<br>\n" msgstr "<p><b>程式碼貢獻者</b>:<br>\n" -#, fuzzy msgid "<p><b>Lovely Patch Writers</b>:<br>\n" -msgstr "<b>最近更新時間:</b>%s<br>\n" +msgstr "<p><b>可愛的模組作者</b>:<br>\n" -# NOTE qq_data->net_stat.sent,送出的數據封包數量(並非位元組數量)的總計 -#, fuzzy msgid "<p><b>Acknowledgement</b>:<br>\n" -msgstr "<b>送出封包</b>:%lu 個<br>\n" +msgstr "<p><b>鳴謝</b>:<br>\n" + +msgid "<p><b>Scrupulous Testers</b>:<br>\n" +msgstr "<p><b>仔細的品管人員</b>:<br>\n" msgid "<p><i>And, all the boys in the backroom...</i><br>\n" msgstr "<p><i>還有所有幕後默默貢獻的無名英雄們…</i><br>\n" @@ -7846,6 +7827,10 @@ msgstr "" msgid "About OpenQ" msgstr "關於 OpenQ" +#, fuzzy +msgid "Modify Buddy Memo" +msgstr "修改地址" + #. *< type #. *< ui_requirement #. *< flags @@ -7866,13 +7851,13 @@ msgid "Select Server" msgstr "選擇伺服器" msgid "QQ2005" -msgstr "" +msgstr "QQ2005" msgid "QQ2007" -msgstr "" +msgstr "QQ2007" msgid "QQ2008" -msgstr "" +msgstr "QQ2008" msgid "Connect by TCP" msgstr "使用 TCP 連線" @@ -7885,6 +7870,9 @@ msgstr "顯示伺服器通告" msgid "Show server news" msgstr "顯示伺服器是日訊息" +msgid "Show chat room when msg comes" +msgstr "" + # XXX 20080810 acli - 譯文有待改進,原文也是 msgid "Keep alive interval (seconds)" msgstr "每隔多少秒送出 Keep Alive" @@ -7898,7 +7886,7 @@ msgstr "無法解密伺服器回應" #, c-format msgid "Failed requesting token, 0x%02X" -msgstr "" +msgstr "請求符記失敗,回應碼「0x%02X」" #, c-format msgid "Invalid token len, %d" @@ -7906,7 +7894,7 @@ msgstr "符記長度「%d」無效" #. extend redirect used in QQ2006 msgid "Redirect_EX is not currently supported" -msgstr "" +msgstr "暫時不支援 Redirect_EX" #. need activation #. need activation @@ -7976,9 +7964,8 @@ msgid "Getting server" msgstr "設定使用者資訊..." # XXX 這是看了原始碼後的結論(但可能會錯)- acli 20080930 -#, fuzzy msgid "Requesting token" -msgstr "送出請求符記中" +msgstr "請求符記中" msgid "Couldn't resolve host" msgstr "無法解析主機" @@ -9529,6 +9516,9 @@ msgstr "無法解析主機" msgid "SIP usernames may not contain whitespaces or @ symbols" msgstr "SIP 的帳號不可含有空白字元或「@」符號" +msgid "SIP connect server not specified" +msgstr "未有指定 SIP 伺服器" + #. *< type #. *< ui_requirement #. *< flags @@ -11461,8 +11451,10 @@ msgid "Invert" msgstr "反向" # XXX TODO 我非常討厭把「Highlight」譯成「高亮度」,但譯文可以改進 - Ambrose 20061029 +# XXX flagged "有保安功能?" by c9s (http://developer.pidgin.im/ticket/7917), need to verify - 20090226 acli +# NOTE 譯文改動 by c9s msgid "Highlight matches" -msgstr "標示匹配字串" +msgstr "標示比對字串" # NOTE 除錯視窗的工具列的快取選單的指令,指「工具列的按紐以圖示標示」,下二同 msgid "_Icon Only" @@ -11507,11 +11499,13 @@ msgstr "錯誤訊息" msgid "Fatal Error" msgstr "嚴重錯誤訊息" +# XXX 暫譯 - 20090226 acli msgid "bug master" -msgstr "" +msgstr "除錯主管" +# NOTE 這個「artist」(有別於其他的「Artist」字串)係指設計pidgin圖示的「graphic designer」,絕對不可譯成「藝人」 msgid "artist" -msgstr "藝人" +msgstr "平面設計" #. feel free to not translate this msgid "Ka-Hing Cheung" @@ -11543,7 +11537,7 @@ msgid "support/QA" msgstr "支援兼品管" msgid "XMPP" -msgstr "" +msgstr "XMPP" msgid "original author" msgstr "原作者" @@ -11700,6 +11694,9 @@ msgstr "立陶宛文" msgid "Macedonian" msgstr "馬其頓文" +msgid "Mongolian" +msgstr "蒙古文" + # NOTE 譯文不統一,一般似乎偏向音譯,但譯音也不統一 # NOTE 音譯包括:博克馬爾、波克默爾、布克莫爾、巴克摩 # NOTE 其他譯法包括:丹麥-挪威文(大英百科)、丹麥式挪威文(維基百科)、東挪威文、標準挪威文(國內不是標準,國外是 :P) @@ -11831,9 +11828,31 @@ msgstr "" "<BR><BR>" #, c-format -msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgid "" +"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ" +"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">常見問題:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/" +"FAQ\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" +msgstr "" +"<FONT SIZE=\"4\">電郵支援:</FONT> <A HREF=\"mailto:support@pidgin.im" +"\">support@pidgin.im</A><BR/><BR/>" + +#, c-format +msgid "" +"<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>" +msgstr "" +"<FONT SIZE=\"4\">IRC 頻道</FONT> irc.freenode.net 上的 #pidgin 頻道<BR><BR>" + +#, c-format +msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>" msgstr "" -"<FONT SIZE=\"4\">IRC:</FONT> irc.freenode.net 上的 #pidgin 頻道<BR><BR>" +"<FONT SIZE=\"4\">XMPP 聊天室:</FONT>devel@conference.pidgin.im<BR><BR>" msgid "Current Developers" msgstr "現任開發者" @@ -12497,6 +12516,10 @@ msgstr "" msgid "Pidgin" msgstr "Pidgin" +#, c-format +msgid "Exiting because another libpurple client is already running.\n" +msgstr "" + msgid "Open All Messages" msgstr "開啟所有訊息" @@ -12837,6 +12860,10 @@ msgstr "代理伺服器" msgid "No proxy" msgstr "不使用代理伺服器" +#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings +msgid "Use remote DNS with SOCKS4 proxies" +msgstr "使用 SOCKS4 代理伺服器時使用遠端 DNS" + msgid "_User:" msgstr "使用者(_U):" @@ -13339,9 +13366,9 @@ msgstr "開啟郵件(_O)" msgid "_Edit" msgstr "修改(_E)" -# FIXME Tooltip中文怎寫? +# NOTE 譯文改動 by c9s (http://developer.pidgin.im/ticket/7917) - 20090226 acli msgid "Pidgin Tooltip" -msgstr "Pidgin Tooltip" +msgstr "Pidgin 工具提示" # NOTE 這是「Default」表情主題的說明 msgid "Pidgin smileys" @@ -13475,9 +13502,9 @@ msgstr "自訂交談視窗內各種顏色的使用" msgid "Error Messages" msgstr "錯誤訊息" -# XXX TODO 我非常討厭把「Highlight」譯成「高亮度」,但譯文可以改進 - Ambrose 20061029 +# NOTE 譯文改動 by c9s (http://developer.pidgin.im/ticket/7917) 12/27/2008 - 20090226 acli msgid "Highlighted Messages" -msgstr "反白訊息" +msgstr "已標示訊息" msgid "System Messages" msgstr "系統訊息" @@ -13945,9 +13972,9 @@ msgid "Visited Hyperlink Color" msgstr "瀏覽過的超連結顏色" # XXX TODO 我非常討厭把「Highlight」譯成「高亮度」,但譯文可以改進 - Ambrose 20061029 -# FIXME 什麼是「反白訊息名稱」? - acli 20080511 +# NOTE 譯文改動 by c9s (http://developer.pidgin.im/ticket/7917) 20081227 - 20090226 acli msgid "Highlighted Message Name Color" -msgstr "反白訊息名稱顏色" +msgstr "已標示訊息名稱顏" msgid "GtkTreeView Horizontal Separation" msgstr "GtkTreeView 水平間隔距離" @@ -14042,7 +14069,7 @@ msgstr "" #, c-format msgid "You can upgrade to %s %s today." -msgstr "" +msgstr "%s 現已可升級至 %s 版。" msgid "New Version Available" msgstr "有新版本" @@ -14312,9 +14339,6 @@ msgstr "好友清單視窗保持在桌面最上層(_K);" msgid "Only when docked" msgstr "只在停駐時生效" -msgid "_Flash window when chat messages are received" -msgstr "收到聊天訊息後閃動視窗(_F)" - msgid "Windows Pidgin Options" msgstr "Windows 版 Pidgin 選項" @@ -14364,6 +14388,19 @@ msgstr "送出、讀取未加工的 XMPP 段落。" msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "幫助為 XMPP 伺服器或客戶端進行除錯。" +#~ msgid "Unable to retrieve MSN Address Book" +#~ msgstr "無法讀取 MSN 通訊錄" + +#~ msgid "_Flash window when chat messages are received" +#~ msgstr "收到聊天訊息後閃動視窗(_F)" + +#~ msgid "" +#~ "You may be disconnected shortly. You may want to use TOC until this is " +#~ "fixed. Check %s for updates." +#~ msgstr "" +#~ "您可能會短時間中斷連線。您可能會想在這個問題被修正後使用 TOC。請到 %s 看看" +#~ "有沒有更新。" + #~ msgid "Connection to server lost (no data received within %d second)" #~ msgid_plural "" #~ "Connection to server lost (no data received within %d seconds)" diff --git a/share/ca-certs/AOL_Member_CA.pem b/share/ca-certs/AOL_Member_CA.pem new file mode 100644 index 0000000000..3ce9439ee0 --- /dev/null +++ b/share/ca-certs/AOL_Member_CA.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIEKzCCAxOgAwIBAgIBBzANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc +MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP +bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTA0MDYwNDE3 +MjYzOVoXDTI5MDYwNDE3MjYzOVowZzELMAkGA1UEBhMCVVMxETAPBgNVBAgTCFZp +cmdpbmlhMQ8wDQYDVQQHEwZEdWxsZXMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5l +IEluYy4xFjAUBgNVBAMTDUFPTCBNZW1iZXIgQ0EwggEiMA0GCSqGSIb3DQEBAQUA +A4IBDwAwggEKAoIBAQD4Y9jxzNYRbwXh1p9DJycl+q9nh3Ss3Nb8wpq9M3JOZbBa +zev4qWlIOW5oLnEWbp5ZfMJ8ze1uQ9gJQk4Nmn3utVojgdKkW6lRVBzf9oTfGcM+ +lC2NuhD46EMIDzI1bDUx+NbT/Akx1qmheiAGWQzgK42EwzegCB7xNXMQ3U/9DHKT +Jm6vxRw548rzlW8wwoU9TYQgyD490EDW/gZKGHMLbldn24PBE2aX071ZvH76LzZF +FM28v6tod79I6xGJTmqE810c5WtqAOZrjUikCbkh3C1mKfRWnvAFaP/MwcmIvNIs +C68ddBqGaKRtFHTsJID4lbnzLjw9IG8JAjjqOjgFAgMBAAGjgeUwgeIwDgYDVR0P +AQH/BAQDAgGGMB0GA1UdDgQWBBRhppltJJ8OEYjmOeD+dNEFaVKpQzAfBgNVHSME +GDAWgBQArdmj9nn2bnSpfzM9gRfXTM8z3jAPBgNVHRMBAf8EBTADAQH/MEgGA1Ud +IARBMD8wPQYEVR0gADA1MDMGCCsGAQUFBwIBFidodHRwczovL3BraS1pbmZvLmFv +bC5jb20vQU9ML2luZGV4Lmh0bWwwNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2Ny +bC5hb2wuY29tL0FPTC9NYXN0ZXJDUkwuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQAM +nbzMHdQukRuvoDrrzV78JSopjrMg4Bc3+vy7xbUUuxxmDm9YX8Zx0BOJx60jC+1M +uFjB48KkJExldg2zhmRPKLrPlvhlmg6CJvWChU41ILNFzGDuD04glDorL8sjEJtG +G37DVnVJJKS4TZ8caNTm8i+vju0rt+WWaxw9jb8g028tVC+ceTX92gbeaCAgS69d +q15mwxRke/cC5ieWrRgeq/OCYPxMX7YKUnuenDsuzjxCXzZta/6hdooiIf1b6L1/ +n85RdEhsrLXRomr6B0Te0NupjRgf8bnF6Crruj07GIzADDCzySEcM0w6SVPUqLq6 +OCM9OmWCXnlxFfglK30Z +-----END CERTIFICATE----- diff --git a/share/ca-certs/America_Online_Root_Certification_Authority_1.pem b/share/ca-certs/America_Online_Root_Certification_Authority_1.pem new file mode 100644 index 0000000000..26203ee8a1 --- /dev/null +++ b/share/ca-certs/America_Online_Root_Certification_Authority_1.pem @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJV +UzEcMBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1l +cmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4X +DTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMx +HDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJp +Y2EgT25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCa +xlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CGv2BlnEtUiMJIxUo5vxTjWVXl +GbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44zDyL9Hy7n +BzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145Lcx +VR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiE +mf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCu +JKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Zo/Z5 +9m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUA +A4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF +Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOM +IOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTI +dGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g +Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j +8uB9Gr784N/Xx6dssPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 +-----END CERTIFICATE----- diff --git a/share/ca-certs/Makefile.am b/share/ca-certs/Makefile.am index 3ec472b620..6fa8d98ec7 100644 --- a/share/ca-certs/Makefile.am +++ b/share/ca-certs/Makefile.am @@ -1,4 +1,5 @@ CERTIFICATES = \ + America_Online_Root_Certification_Authority_1.pem \ CAcert_Root.pem \ CAcert_Class3.pem \ Equifax_Secure_CA.pem \ @@ -9,6 +10,7 @@ CERTIFICATES = \ VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem EXTRA_CERTS = \ + AOL_Member_CA.pem \ Microsoft_Internet_Authority.pem \ Microsoft_Secure_Server_Authority.pem \ VeriSign_International_Server_Class_3_CA.pem |